/**
 * Funktion überprüft das Bestellformular. Falls
 * nicht alle Pflichtfelder ausgeüllt worden sind
 * wird das Formular nicht submited.
 * 
 * @return {Boolean} true  alle Eingaben waren OK.
 *                   false Eingabe fehlerhaft oder unvollständig
 */
function checkBestellFormular()
{
	var vorname = document.forms.bestellen.vorname.value;
	if(vorname == ""){
		alert(unescape("Bitte geben Sie den Vornamen ein."));
		return false;
	}

	var nachname = document.forms.bestellen.nachname.value;
	if(nachname == ""){
		alert(unescape("Bitte geben Sie den Nachnamen ein."));
		return false;
	}

	var strasse = document.forms.bestellen.strasse.value;
	if(strasse == ""){
		alert(unescape("Bitte geben Sie die Strasse und die Hausnummer ein."));
		return false;
	}
	
	var plz = document.forms.bestellen.plz.value;
	if(plz == ""){
		alert(unescape("Bitte geben Sie PLZ ein."));
		return false;
	}

	var ort = document.forms.bestellen.ort.value;
	if(ort == ""){
		alert(unescape("Bitte geben Sie Ort ein."));
		return false;
	}
	
	var agb = document.forms.bestellen.agb.checked;
	if(agb == false){
		alert(unescape("Bitte akzeptieren Sie die AGB."));
		return false;
	}
	
		
	return true;
}

/**
 * Funktion überprüft die Zielzeit Angabe. Der dabei verwendete
 * Reguläre Ausdruck lautet: ^([0-1]{0,1}[0-9]|[2][0-3]):([0-5][0-9])$
 * Funktion gibt true zurück bie folgenden Eingaben:
 *   12:20
 *   01:20
 *    1:20
 * Funktion gibt false zurück bie folgenden Eingaben:
 *   12:2     (zwei ziffern nach dem Semikolon)
 *   12:70    (falsche Minuten Anzahl)
 *   25:12    (falsche Stunden Anzahl)
 *   alle Nictnummerische Eingaben
 * Bei den inkorrekten Angaben wird die Form nicht submited.
 * 
 * @return {Boolean} true  Eingabe war OK.
 *                   false inkorrekte Eingabe.
 */
function checkZielZeit()
{
	var Zeit = "^([0-1]{0,1}[0-9]|[2][0-3]):([0-5][0-9])$";
	var zielzeit = document.forms.Zielzeit.zielzeit.value;
	if( !(zielzeit.match(Zeit)) || (zielzeit.match(Zeit))[0] != zielzeit ){
		alert(unescape("Ihre Angabe%3A\n" + zielzeit + "\n ist inkorrekt. Bitte geben sie die Zeit im Format SS:MM (Stunden:Minuten)"));
		return false;
	}
	return true;
}

/**
 * Funktion überprüft die Läufernummer. Der dabei verwendete
 * Reguläre Ausdruck lautet: [0-9]{0,255}
 * Funktion akzeptiert eine Folge von maximal 255 Ziffern.
 * Bei den inkorrekten Angaben wird die Form nicht submited.
 * 
 * @return {Boolean} true  Eingabe war OK.
 *                   false inkorrekte Eingabe.
 */
function checkLaueferNummer()
{
	var Digits = "[0-9]{0,255}";
	var nummer = document.forms.Laeufernummer.nummer.value;
	if( nummer.match(Digits) != nummer ){
		alert(unescape("Ihre Angabe%3A\n" + nummer + "\n enth%E4lt ung%FCltige Zeichen. Erlaubt sind Zahlen 0-9."));
		return false;	
	}
	return true;	
}

/**
 * Funktion überprüft die Fotonummer. Der dabei verwendete
 * Reguläre Ausdruck lautet: [0-9a-zA-Z]{0,255}
 * Funktion akzeptiert eine Folge von maximal 255 Ziffern oder
 * Klein/Grossbuchstaben.
 * Bei den inkorrekten Angaben wird die Form nicht submited.
 * 
 * @return {Boolean} true  Eingabe war OK.
 *                   false inkorrekte Eingabe.
 */
function checkFotoNummer()
{
	var Digits = "[0-9a-zA-Z]{0,255}";
	var nummer = document.forms.Fotonummer.fotonummer.value;
	if( nummer.match(Digits) != nummer ){
		alert(unescape("Ihre Angabe%3A\n" + nummer + "\n enth%E4lt ung%FCltige Zeichen. Erlaubt sind Zahlen 0-9 und Klein/Grossbuchstaben."));
		return false;	
	}
	return true;
}

/**
 * Funktion fügt einen Artikel(ein Foto) in den Warenkorb.
 * Beim erfolgreichen Hinzufügen wird das Textfeld auf "Hinzugefügt"
 * verändert.
 * 
 * @param {String} idFoto - id des jeweiligen Fotos
 * @return void 
 */
function addFotoToWarenkorb(idFoto)
{
	var anzahl = (document.getElementById("anzahl"+idFoto)).value;
	var Digits = "[0-9]{0,255}";
	if( anzahl.match(Digits) != anzahl ){
		alert(unescape("Ihre Angabe%3A\n" + anzahl + "\n enth%E4lt ung%FCltige Zeichen. Erlaubt sind Zahlen 0-9."));
		return false;	
	}
	
	var select = document.getElementById("format"+idFoto);
	var format = select.options[select.selectedIndex].value;
	
	var data = "&idFoto=" + idFoto + "&FotoFormat=" + format + "&anzahl=" + anzahl;
	var response = getServerData("warenkorb", "add", "post", data);	
	if(response != undefined)
		(document.getElementById("anzahl"+idFoto)).value = "Hinzugefügt";
}

/**
 * Funktion ändert Anzahl der Fotos in dem Warenkorb.
 * 
 * @param {Object} idFoto id des jeweiligen Fotos
 * @param {Object} idFotoFormat id des Fotoformates
 */
function changeFotoAnzahl(idFoto, idFotoFormat)
{
	var anzahl = (document.getElementById("anzahl"+idFoto)).value;
	var Digits = "[0-9]{0,255}";
	if( anzahl.match(Digits) != anzahl ){
		alert(unescape("Ihre Angabe%3A\n" + anzahl + "\n enth%E4lt ung%FCltige Zeichen. Erlaubt sind Zahlen 0-9."));
		return false;	
	}
		
	var data = "&idFoto=" + idFoto + "&anzahl=" + anzahl + "&idFotoFormat=" + idFotoFormat;
	var response = getServerData("warenkorb", "edit", "post", data);	
	if(response != undefined)
		document.location.reload();	
}

/**
 * Funktion sendet ein XMLHTTPRequest der Form:
 * script.php?action=action&detail=detail&data=data
 * an den Server:
 * @param {String} action String
 * @param {String} detail String
 * @param {String} method POST oder GET
 * @param {String} data String angefangen mit "&"
 * @param {Object} Callback-Handler: Wenn dieser Parameter angegeben ist,
 * wird die Anfrage ASYNCHRON ausgeführt und die callback Funtkion bekommt die
 * vom Server empfangene Daten als Eingabe: TODO
 * Falls der zurückgegebene String die Form:
 * {#Fehler: ein beliebiger Fehlerstring.#}
 * hat, ist ein Fehler auf dem Server aufgetretten und die
 * Fehlemeldung wird ausgegeben.
 * 
 * @return {Object} Objekt mit den vom Server empfangenen Daten
 *                  undefined wenn es ein Fehler aufgetreten ist.
 */
function getServerData(action, detail, method, data, callback)
{
   if( method != "post"){
   	method = "get";   
		var header;
   }
   else{
       var header = [["Content-Type", "application/x-www-form-urlencoded"]];   
   }
   
	 /* Anfrage Abschicken
	  */
   var rslt = urllib.sendRequest(method, "index.php?action=" + action + "&detail=" + detail, data, header);
   if (rslt.status != '200'){
       alert('Fehler: Die Operation konnte nicht durchgefuehrt werden.');
       return false;
	}

	/* Error Ausgabe
	 */
	var error = "\{#Fehler:.[^\}]*#\}";
	meldung = rslt.responseText.match(error);

	if(meldung)
	{
		var errorStr = "";
		for( var i=0; i<meldung.length; i++)
		{
			errorStr += (meldung[i].substring(2, meldung[i].length-2) + unescape('%0A'));
		}
		alert(errorStr);
		return undefined;
	}
	return rslt.responseText;
}

/**
 * Funktion bekommt einen String und gibt ihn ohne
 * Leerzeichen am Anfang und Ende zurück.
 * @param input - Inputstring
 * @return String
 */
function trim(input)
{
	var start = null;
	var end = null;
	
	if(input != "" && typeof(input) == "string")
	{
		for(var i=0; i<input.length; i++)
		{
			if(input[i] !== " "){
				start = i;
				break;
			}
		}
		for(var len=input.length, i=len-1; i>=0; i--)
		{
			if(input[i] !== " "){
				end = i+1;
				break;
			}			
		}
		output = input.slice(start, end);
	}else
	{
		output = "";
	}
	return output;
}

