var Marked=false;
var MarkedField;
var message = new Array();

var SingleWarning=false;
var Class="";
var ClassMissing="missing";
var ClassChange=false;

function chkFormular(form) {
	var Fehler="";
	var Jump=false;

	Felder=document.forms[form].CHECK.value.split("|");

	if (ClassChange && Marked) {
		MarkedField.className=Class;
		Marked=false;
	}

	for(i=0;i<Felder.length;i++) {
		Optionen=Felder[i].split(",");
		ChkFeld=document.forms[form].elements[Optionen[0]];
		ChkPflicht=Optionen[1]=="true";
		ChkArt=Optionen[2];
		Inhalt=true;
		Check=true;
		if(ChkArt=="box" || ChkArt=="radio") {
			Inhalt=isChecked(ChkFeld);
		} else if (ChkArt=="select") {
			Inhalt=isSelected(ChkFeld);
		} else {
			Inhalt=chkInhalt(ChkFeld);
		}
		Check=!(ChkPflicht && !Inhalt);  // prüfen, ob Pflichtfeld gefüllt

		if(Inhalt && Check) {  // nicht-Pflichtfelder nur prüfen, wenn sie gefüllt sind
			switch(ChkArt) {
				case "int":
					Check=chkInt(ChkFeld);
					break;
				case "float":
					Check=chkFloat(ChkFeld);
					break;
				case "sint":
					Check=chkSInt(ChkFeld);
					break;
				case "sfloat":
					Check=chkSFloat(ChkFeld);
					break;
				case "plz":
					Check=chkPLZ(ChkFeld);
					break;
				case "email":
					Check=chkEmail(ChkFeld);
					break;
				case "time":
					Check=chkTime(ChkFeld);
					break;
				case "date":
					Check=chkDate(ChkFeld);
					break;
			}
		}
		if(!Check) {
			Fehler+=meldung(Optionen[0]);
			if(ClassChange) ChkFeld.className=ClassMissing;
			if(SingleWarning) {
				alert(Fehler);
				if(ChkArt!="box" && ChkArt!="radio") {
					if(ClassChange) {
						Marked=true;
						MarkedField=ChkFeld;
					}
					ChkFeld.focus();
				}
				return false;
			} else {
				if(!Jump) {
					if(ChkArt!="box" && ChkArt!="radio") {
						ChkFeld.focus();
					}
					Jump=true;
				}
			}
		} else {
			if(ClassChange) ChkFeld.className=Class;
		}
	}
	if(Fehler!="") {
		if ("undefined" != typeof(errorMsg) && "" != errorMsg) {
			alert(errorMsg + Fehler);
		}
		else {
			alert("Formular unvollständig ausgefüllt!\n-----------------------------------------\n\n"+Fehler);
		}
		return false;
	}
	return true;
}



function chkInhalt(text) {
	if(text.value!="") {
		return true;
	}
	return false;
}

function chkInt(zahl) {
	if(zahl.value.search(/^[0-9]+$/)==0) {
		return true;
	}
	return false;
}

function chkFloat(zahl) {
	if(zahl.value.search(/^[0-9]+([\.,][0-9]+)?$/)==0) {
		return true;
	}
	return false;
}

function chkSInt(zahl) {
	if(zahl.value.search(/^[\+-]?[0-9]+$/)==0) {
		return true;
	}
	return false;
}

function chkSFloat(zahl) {
	if(zahl.value.search(/^[\+-]?[0-9]+([\.,][0-9]+)?$/)==0) {
		return true;
	}
	return false;
}

function chkPLZ(plz) {
	if(plz.value.search(/^[0-9]{5}$/)==0) {
		return true;
	}
	return false;
}

function chkEmail(email) {
	if(email.value.search(/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$/i)==0) {
		return true;
	}
	return false;
}

function isChecked(feld) {
	var wahl=false;
	if(feld.checked) { wahl=true; }
	for(var i=0;i<feld.length;i++) {
		if(feld[i].checked) {
			wahl=true;
		}
	}
	return wahl;
}

function isSelected(feld) {
	if(feld.selectedIndex>0) {
		return true;
	}
	return false;
}

function chkTime(zeit) {
	if(zeit.value.search(/^[0-9]{1,2}(:[0-9]{2}){1,2}$/)==0) {
		Teile=zeit.value.split(":");
		Hour=Teile[0];
		Minute=Teile[1];
		if(Teile.length==3) {
			Second=Teile[2];
		} else {
			Second=1;
		}
		if(Hour>23 || Minute>59 || Second>59) {
			return false;
		}
		return true;
	}
	return false;
}

function chkDate(datum) {
	if(datum.value.search(/^([0-9]{1,2}\.){2}([0-9]{2}){1,2}$/)==0) {
		Teile=datum.value.split(".");
		Day=Teile[0];
		Month=Teile[1];
		Year=Teile[2];

		if (Year<100) {
			Year+=2000;
		}
		if ((Day>=1) && (Day<=31) && (Month>=1) && (Month<=12)) {  //gültige Werte
			if((Month==1) || (Month==3) || (Month==5) || (Month==7) || (Month==8) || (Month==10) || (Month==12)) {  // lange Monate
				return true;
			}	else {
				if ((Day<=30) && ((Month==4) || (Month==6) || (Month==9) || (Month==11))) {  // kurze Monate
					return true;
				} else {
					if ((Day<=28)) { // Februar
						return true;
					} else {
						if ((Year%4)==0) {  // Schaltjahr
							if ((Year%100)!=0) {
								return true;
							} else {
								if ((Year%400)==0) {
									return true;
								}
							}
						}
					}
				}
			}
		}
	}
	return false;
}

function meldung(feld) {
	fehler="";
	if (message[feld]) {
		fehler=message[feld];
	} else {
		fehler="Bitte geben Sie korrekte Daten in das Feld '"+feld+"' ein!";
	}
	return fehler+"\n";
}

function printerror() {
	if (ClassChange && Marked) {
		MarkedField.className=Class;
		Marked=false;
	}
	alert(printerror.arguments[0]);
	if(printerror.arguments.length==2) {
		if(ClassChange) {
			Marked=true;
			MarkedField=printerror.arguments;
			ChkFeld.className=ClassMissing;
		}
		ChkFeld.focus();
	}
}

