var rowIndex;
var id;
var req;
var changeElement;

function formInit() {
	if(document.getElementsByName("zusammenfassung").length > 0) {
		rowIndex = 1;
		id = 0;
		$$(document.getElementsByTagName('*')).each(function(element) {
			if(element.id.search(/ctrl_(\d+)/) == 0 && RegExp.$1 > id) {
				id = RegExp.$1;
			}
		});
		
		var sum = document.getElementsByName("zusammenfassung")[0];		
		var form = sum.form;
		
		form.onsubmit = function() {
			var fehler = new Element('span', {
				'styles' : {
					'color' : 'red',
					'padding-left' : '1em'
				}
			});
			fehler.appendText('Bitte ausfüllen.');
			if(form.Name.value == '') {
				form.Name.style.borderColor = 'red';
				fehler.inject(form.Name, 'after');
				return false;
			}
			if(form.mail.value == '') {
				form.mail.style.borderColor = 'red';
				fehler.inject(form.mail, 'after');
				return false;
			}
			sum.value = "";
			sum.value = formatElements(form);
		};
		
		//Anfrage konfigurieren
		req = new Request.JSON({url: "tl_files/tus/scripts/bestellungen.php",
			onSuccess: function(res) { if(res) processResults(res); }});
		
		//Behandlung der Auswahlfelder
		var i = 0;
		$each($$('.bestellung'), function(input) {
			if(i++ > 1) {
				input.disabled = true;
			}
		});
		
		form.addEvent('change:relay(select.bestellung)', function(event, changed) {
			if(changed.selectedIndex > 0) {
				changeElement = changed;
				if(emptyNextFields(changed))
					req.get(getBlockData(changed.getParent('div')));
			}
		});
	}
}

//Fasst alle Formularfelder in einer Zeichenkette zusammen.
function formatElements(form) {
	var ret = '';
	var ai = 1;
	$each(form.getElements('div.dynamischeZeile'), function(article) {
		var art = new Array();
		var price;
		$each(article.getElements('.bestellung'), function(el) {
			if(el.value) {
				art.push(el.value);
			}
		});
		art = art.join(', ');
		ret += 'Artikel ' + ai++ + ': ' + art + ' - EUR ' +		
		article.getElement('span.preis').firstChild.nodeValue + '\n\n';
	});
	ret += '--------------------------------------- \n' +
		'Gesamtbetrag: EUR ' + form.getElement('.summe').getElement('span').firstChild.nodeValue;
	return ret;
}

//Dupliziert das gegebene Element und fügt es darunter ein
function addEl(div) {
	var nextDiv = div.clone().cloneEvents(div);
	nextDiv.getChildren().each(function(element) {
		if(element.name) {
			element.setProperties({
				//Ersetzt den bisherigen Namensindex durch den neuen
				name: element.name.replace(/\d*$/, rowIndex),
				id: ++id
			});
			element.getPrevious('label').setProperty('for', element.id);
		}
	});
	nextDiv.inject(div, 'after');
	rowIndex++;
	addUp(nextDiv.getElement('select.bestellung'));
}

//Entfernt das übergebene Element, außer es ist das letzte vorhandene
function remEl(div) {
	if(rowIndex > 1) {
		div.dispose();
		rowIndex--;
	}
}

//Sammelt alle Formulardaten innerhalb eines Elements
function getBlockData(el) {
	var arr = new Object();
	$each(el.getElements('.bestellung'), function(input) {
		if(input.name && input.value) {
			var key = input.name.replace(/\d*$/, '');
			arr[key] = input.value;
		}
	});
	return arr;
}

//Verarbeitet das Anfrageergebnis
function processResults(ergebnis) {
	var nextElement = changeElement.getNext('select.bestellung');
	if(nextElement) {
		nextElement.disabled = false;
		$each(ergebnis, function(teil) {
			for (el in teil) break;
			var newOpt = document.createElement('option');
			newOpt.text = teil[el];
			newOpt.value = teil[el];
			nextElement.add(newOpt, null);
		});
	} else {
		//Wenn das nächste Element der Preis ist, dann selbigen und die Summe aktualisieren  
		nextElement = changeElement.getNext('span.preis');
		nextElement.appendChild(document.createTextNode(ergebnis[0].preis));
		nextElement.appendChild(document.createTextNode(" €"));
		addUp(changeElement);
	}
}

//Leert alle nachfolgenden Felder
function emptyNextFields(start) {
	$each(start.getAllNext('select.bestellung'), function(nextElement) {
		nextElement.length = 1;
		nextElement.disabled = true;
	});
	var span = start.getNext('span.preis');
	while(span.firstChild)
		span.removeChild(span.firstChild);
	return true;
}

//Summiert die Preise
function addUp(formEl) {
	var price = 0;
	$each(formEl.form.getElements('span.preis'), function(priceEl) {
		if(priceEl.firstChild) {
			price += parseInt(priceEl.firstChild.nodeValue);
		}
	});
	var sumEl = formEl.form.getElement('p.summe');
	sumEl.getElement('span').firstChild.nodeValue = price;
	sumEl.style.display = "block";
}

//Initiiert Übernschneidungsüberprüfung
function initCheckOverlap() {
	if($('f13')) {
		$('f13').addEvent('change:relay(.mandatory)', function(event, changed) {

			var startDate = $$('input[name=startDate]').get('value');
			if(startDate != '') {
				startDate = String(startDate).split(".");
			} else { disableButton(); return; }
			
			var endDate = $$('input[name=endDate]').get('value');
			if(endDate != '') {
				endDate = String(endDate).split(".");
			} else { disableButton(); return; }

			checkOverlap(
				Date.UTC(startDate[2], startDate[1]-1, startDate[0],
					$$('select[name="startTime[H]"]').getSelected()[0].get('value'), $$('select[name="startTime[i]"]').getSelected()[0].get('value'), 0, 0)/1000,
				Date.UTC(endDate[2], endDate[1]-1, endDate[0],
					$$('select[name="endTime[H]"]').getSelected()[0].get('value'), $$('select[name="endTime[i]"]').getSelected()[0].get('value'), 0, 0)/1000,
				$$('select[name=pid]').getSelected()[0].get('value')
			);
		});
	}
}

//Überprüft Überschneidungen bei Reservierungen
function checkOverlap(begin, end, object) {
	req = new Request({
		method: 'get',
		url: "tl_files/tus/scripts/reservierung.php",
		onSuccess: function(res) {
			if(res == 'true') {
				disableButton();
			} else {
				enableButton();
			}
		}});
	req.send('methode=ueberschneidung' + 'objekt=' + object + '&start=' +
            begin+'&ende='+end);
}

function disableButton() {
	$$('#f13 input[type=submit]')[0].disabled = 1;
	$$('#f13 input[type=submit]')[0].set('value', 'Es besteht offenbar eine Überschneidung');
}

function enableButton() {
	$$('#f13 input[type=submit]')[0].disabled = 0;
	$$('#f13 input[type=submit]')[0].set('value', 'Reservieren');
}


//Löscht eine Reservierung.
function deleteReservation(el, id) {
    req = new Request({
        method: 'get',
        url: "tl_files/tus/scripts/reservierung.php",
        onSuccess: function(res) {
            console.log(res);
            if(res == 1) {
                el.fade("out");
            }
        }});
    req.send('methode=loeschen&id=' + id);
}
