/*
	ä - Unicodemarker
	Project: Berlinfahrtplattform by lumip
*/

/*
		excursions[id]
									["name"] = Name
									["timing"] = Programmpunkte
										[x]
											[0] = Bezeichnung (Programmpunkt1, Programmpunkt2)
											[1] = Tagnummer
											[2] = BeginTime
											[3] = EndTime
											[4] = Reserved Slots
											[5] = Maximale Schülerzahl
									["div"] = Draggable Div
	*/
	
//var scheduled = new Array();

function convertTime(time) {
	time = time.split(':');
	return parseFloat(time[0]) + parseFloat(time[1])/60;
}

function createBlock(id,pp) {
	daynr = excursions[id]["timing"][pp][1];
	begint = convertTime(excursions[id]["timing"][pp][2]);
	endt = convertTime(excursions[id]["timing"][pp][3]);
	duration = endt-begint;
	actppl = excursions[id]["timing"][pp][4];
	maxppl = excursions[id]["timing"][pp][5];
	var element = document.createElement('div');
	$(element).addClass('block');
	//$('schedulearea').appendChild(element);
	element.setStyles({
		'left':(daynr*152)+'px',
		'top':((begint-starttime)*32)+'px',
		'height':((duration*32)-2)+'px',
		'line-height':'30px'
	});
	$('schedulearea').appendChild(element);
	return element;
	
}

function removeBlock(element) {
	element.getParent().removeChild(element);
}

function unschedule(id,pp) {
	schedule.erase(id+"_"+excursions[id]["timing"][pp][0]+"_0");
	schedule.erase(id+"_"+excursions[id]["timing"][pp][0]+"_1");
	excursions[id]["timing"][pp][4]--;
}

function enschedule(id,pp) {
	schedule.extend([id+"_"+excursions[id]["timing"][pp][0]+"_0"]);
	excursions[id]["timing"][pp][4]++;
}

function interfersWithScheduled(id,pp) {
	begint = convertTime(excursions[id]["timing"][pp][2]);
	endt = convertTime(excursions[id]["timing"][pp][3]);
	for (i=0; i<schedule.length; i++) {
		var split = schedule[i].split("_");
		for (d=0; d<excursions[split[0]]["timing"].length; d++) {
			if (excursions[split[0]]["timing"][d][0]==split[1] && excursions[split[0]]["timing"][d][1]==excursions[id]["timing"][pp][1]) {
				b2t = convertTime(excursions[split[0]]["timing"][d][2]);
				e2t = convertTime(excursions[split[0]]["timing"][d][3]);
				//if ((begint > b2t && begint < e2t) || (endt>b2t && endt<e2t) || (b2t>begint && b2t<endt) || (begint==b2t) || (endt==e2t))
				if ((begint >= b2t && begint < e2t) || (endt>b2t && endt<=e2t) || (b2t>begint && b2t<endt))
					return true;
			}
		}
	}
	return false;
}

function hasFreeSlots(id,pp) {
	actppl = parseInt(excursions[id]["timing"][pp][4]);
	maxppl = parseInt(excursions[id]["timing"][pp][5]);
	if (actppl<maxppl)
		return true;
	return false;
}

function getDropzones(element) {
	var id = element.get('excid');
	excursions[id]["timing"].each(function (item,index) {
		var element = createBlock(id,index);
		var pp = index;
		element.set('excid',id);
		element.set('pp',pp);
		var actppl = excursions[id]["timing"][pp][4];
		var maxppl = excursions[id]["timing"][pp][5];
		element.set('html',actppl+' / '+maxppl);
		if (!interfersWithScheduled(id,pp) && hasFreeSlots(id,pp))
			element.addClass('dropzone available');
		else
			element.addClass('dropzone unavailable');
	});
}

function makeDraggable(element) {
	element.addClass('scheddrag');
	element.drag = new Drag.Ghost(element,{
		droppables: $$('.dropzone'),
		onStart: function(item) {
			getDropzones(item);
			this.droppables = $$('.available');
		},
		onDrop: function(item,droppable) {
			if (droppable) {
				droppable.removeClass('dropzone');
				droppable.removeClass('available');
				disableDrag(item);
				var id = droppable.get('excid');
				var pp = droppable.get('pp');
				enschedule(id,pp);
				var actppl = excursions[id]["timing"][pp][4];
				var maxppl = excursions[id]["timing"][pp][5];
				var duration = convertTime(excursions[id]["timing"][pp][3])-convertTime(excursions[id]["timing"][pp][2]);
				droppable.set('html','<b>'+excursions[id]["name"]+'</b><br />'+actppl+' / '+maxppl);
				droppable.set('excid',id);
				droppable.set('pp',pp);
				disableDrag(excursions[id]["div"]);
				if (duration<2)
					droppable.setStyle('line-height',parseInt(droppable.getStyle('height'))/2+'px');
				droppable.addEvent('click',function() {
					unschedule(id,pp);
					removeBlock(this);
					enableDrag(excursions[id]['div']);
				});
			}
			$$('.dropzone').destroy();
		},
	});
}

function enableDrag(element) {
	element.drag.attach();
	element.addClass('scheddrag');
	element.removeClass('disabled');
}

function disableDrag(element) {
	element.drag.detach();
	element.addClass('disabled');
	element.removeClass('scheddrag');
}

function showScheduled() {
	/*schedule.each(function (day) {
		if (day=="")
			return;
		day.split(";").each(function (item) {
			var split = item.split("_");
			excursions[split[0]]["timing"].each(function (it,pp) {
				if (it[0]==split[1]) {
					var element = createBlock(split[0],pp);
					var actppl = excursions[split[0]]["timing"][pp][4];
					var maxppl = excursions[split[0]]["timing"][pp][5];
					var duration = convertTime(excursions[split[0]]["timing"][pp][3])-convertTime(excursions[split[0]]["timing"][pp][2]);
					element.set('html','<b>'+excursions[split[0]][0]+'</b><br />'+actppl+' / '+maxppl);
					element.set('excid',split[0]);
					element.set('pp',pp);
					disableDrag(excursions[split[0]][2]);
					if (duration<2)
						element.setStyle('line-height',parseInt(element.getStyle('height'))/2+'px');
					if (duration<2)
						element.setStyle('line-height',element.getStyle('height')/2);
					element.addEvent('click',function() {
						unschedule(split[0],pp);
						removeBlock(this);
						enableDrag(excursions[split[0]][2]);
					});
				}
			});
		});
	});*/
	schedule.each(function (item) {
		var split = item.split("_");
		excursions[split[0]]["timing"].each(function (it,pp) {
			if (it[0]==split[1]) {
				var element = createBlock(split[0],pp);
				var actppl = excursions[split[0]]["timing"][pp][4];
				var maxppl = excursions[split[0]]["timing"][pp][5];
				var duration = convertTime(excursions[split[0]]["timing"][pp][3])-convertTime(excursions[split[0]]["timing"][pp][2]);
				element.set('html','<b>'+excursions[split[0]]["name"]+'</b><br />'+actppl+' / '+maxppl);
				element.set('excid',split[0]);
				element.set('pp',pp);
				if (permission)
					disableDrag(excursions[split[0]]["div"]);
				if (duration<2)
					element.setStyle('line-height',parseInt(element.getStyle('height'))/2+'px');
				if (permission) {
					element.addEvent('click',function() {
						if (split[2]=="0") {
							unschedule(split[0],pp);
							removeBlock(this);
							enableDrag(excursions[split[0]]['div']);
						} else {
							alert("Diese Exkursion ist fixiert und kann nicht entfernt werden!");
						}
					});
				}
			}
		});
	});
}

function scheduleDomLoaded() {
	var footnode = $('excursioncontainer').getFirst();
	$(excursions);
	excursions.each (function (item,index) {
		if (item) {
			var div = document.createElement('div');
			$(div);
			$('excursioncontainer').insertBefore(div,footnode);
			div.addClass('schedulefield');
			div.addClass('excursion');
			if (item["name"].length>22)
				div.setStyle('font-size','10px');
			if (item["name"].length>28)
				div.set('html',item["name"].substr(0,25)+"...");
			else
				div.set('html',item["name"]);
			div.set('excid',index);
			if (permission)
				makeDraggable(div);
			else
				div.addClass('disabled');
			excursions[index]["div"] = div;
		}
	});
	showScheduled();
}

function scheduleSubmit() {
	var values = "";
	for (i=0; i<schedule.length; i++) {
		values += schedule[i]+";";
	}
	$($('scheduleform').elements['schedvalues']).set('value',values.substr(0,values.length-1));
	$('scheduleform').submit();
}
