/* 	Allgemeine Funktion zur Formularvalidierung 
	jedes Formularelement hat eine Id, sortierbar mit führenden Nullen nummeriert
	jeder Fieldset hat eine Id
	jedes Formularelement hat ein Label, das per for/id zugeordnet ist
	Durch die Variable arrReqTxtExtra wird festgelegt, welche Eingabefelder nur dann erforderlich sind,
	wenn ein bestimmter Radiobutton oder eine Checkbox aktiv ist.
	Die verschachtelte Liste ist folgendermaßen aufgebaut:
	var arrReqTxtExtra = [
	["radio_id1", ["erforderlich_id1"]],
	["radio_id2", ["erforderlich_id1"]],
	["radio_id4", ["erforderlich_id3","erforderlich_id3","erforderlich_id3"]]
	];
	
	Es folgen erforderliche Variable, können durch ein anderes Script überschrieben werden.
*/

var arrReqTxtBasis = []; // Ids von grundsätzlich erforderlichen Select, Text und Textarea
var arrReqTxtExtra = []; // Abhängige zusätzliche erforderliche Felder, siehe oben
var arrReqFS = []; // Ids von erforderlichen Fieldsets mit Radio oder Checkboxen
var strInputBgNormal = "#ffffff"; // Hintergrundfarbe Eingabefelder Normal
var strInputBgHilite = "#ffffff"; // Hintergrundfarbe Eingabefelder Hervorgehoben
var strTextfarbe = "#000000"; // Textfarbe Labels Normal
var strTextHilite = "#000000"; // Textfarbe Labels Hervorgehoben

function validiere_fnc(objForm) {
	var boolOk = true;	
	// Array der Textfeld-Ids, für die Labels gefärbt werden müssen, zunächst leer
	var arrIds = new Array();
	var arrReqTxt = arrReqTxtBasis;
	// alle Inputfelder auf Standardfarbe zurücksetzen,
	for(x=0;x<objForm.elements.length;x++){
		if(objForm.elements[x].type=="text" || objForm.elements[x].type=="textarea" || objForm.elements[x].type=="select-one") {
			objForm.elements[x].style.backgroundColor = strInputBgNormal;
		}
	}
	// Feststellen welche Felder benötigt werden anhand von Querverbindungen
	if(arrReqTxtExtra.length>0){
			
		for(i=0; i<arrReqTxtExtra.length;i++){
			var objOpt = document.getElementById(arrReqTxtExtra[i][0]);
			if(objOpt.checked) {
				// alert(objOpt.id + "\n" +arrReqTxtExtra[i][1].join(", ") );
				arrReqTxt = arrReqTxt.concat(arrReqTxtExtra[i][1]);
				// break; // Funktioniert mit Break nur bei EINEM Satz Radiobuttons
			}
		}
	}
	arrReqTxt.sort();
	// alert(arrReqTxt.join("\n"));
	// Ab hier Überprüfung einzeilige, mehrzeilige Textfelder und Select
	for(i=0; i< arrReqTxt.length; i++){	
		var objX = document.getElementById(arrReqTxt[i]);	
		if((objX.value=="" && objX.type!="select-one") || (objX.selectedIndex==0 && objX.type=="select-one")) {						
			objX.style.backgroundColor = strInputBgHilite;	
			arrIds.push(objX.id);
			boolOk = false;
		} else {
			objX.style.backgroundColor = strInputBgNormal;
		}
	}
	var arrLabels = objForm.getElementsByTagName("label");
	var z=0;
	for(i=0; i<arrLabels.length;i++) {		
		if(arrIds[z]==arrLabels[i].getAttribute("for")){
			// Label färben
			arrLabels[i].style.color = strTextHilite;
			z++;			
		} else {
			arrLabels[i].style.color = strTextfarbe;
		}
	}
	// Ende Überprüfung Textfelder
	// Radiobuttons und Checkboxes prüfen
	for(x=0;x<arrReqFS.length;x++){
		// einzelnes Fieldset-Element
		var objFS = document.getElementById(arrReqFS[x]);
		// Liste der Input-Elemente in diesem Fieldset
		var arrOpts = objFS.getElementsByTagName("input");
		// das Legend-Element, das wir hervorheben wollen
		var objLegend = objFS.getElementsByTagName("legend")[0];
		// Schalter: es wurde noch nicht festgestellt, dass aus diesem Fieldset etwas gewählt wurde
		var boolWahl = false;
		for(y=0;y<arrOpts.length;y++){
			if(arrOpts[y].checked){
				boolWahl = true;
				break;
			}
		}
		// wenn boolWahl hier noch false ist, dann wurde aus dieser Gruppe nichts gewählt
		if(!boolWahl){
			boolOk = false;
			// legend hervorheben
			objLegend.style.color = strTextHilite;
		} else {
			// legend normal färben
			objLegend.style.color = strTextfarbe;
		}	
	}
	// Ende Radiobuttons und Checkboxes
	if(!boolOk) {		
		document.getElementById("hinweis").innerHTML = "Bitte f&uuml;llen sie noch die markierten Felder aus!";
		//alert(arrIds.join("\n"));
		// Das erste der Fehlenden Felder focussieren
		if(arrIds.length>0) document.getElementById(arrIds[0]).focus();
	} else {
		document.getElementById("hinweis").innerHTML = "";
	}
	return boolOk;
}

// Funktionen zum Überprüfen bestimmter Datentypen

function checkEmail(feld) {
	var strE=feld.value;
	// nur dann prüfen, wenn etwas eingegeben wurde
	if(strE != ""){
		// genau 1x @
		// mindestens 1 Punkt nach dem @, dazwischen mindestens zwei Buchstaben
		//var boolE = strE.indexOf("@")>1 && strE.indexOf("@")==strE.lastIndexOf("@") && strE.lastIndexOf(".") > strE.indexOf("@")+2;
		var boolE = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$/.test(strE);
		if(!boolE){	
			// Hintergrund und Label färben		
			feld.style.backgroundColor = strInputBgHilite;
			faerbeLabel(feld.id, strTextHilite);
			alert("Bitte überprüfen Sie die eingegebene Mailadresse:\n" + strE);		
			feld.focus();		
		} 
	}  else {
		// Normalen Hintergrund und Label wieder herstellen
		feld.style.backgroundColor = strInputBgNormal;
		faerbeLabel(feld.id, strTextfarbe);
	}
}

function faerbeLabel(feldId, farbe) {
	var arrLabels = document.getElementsByTagName("label");
	for(i=0;i<arrLabels.length;i++){
		if(arrLabels[i].getAttribute("for")==feldId){
			arrLabels[i].style.color=farbe;
			break;
		}
	}
}



