var focusSet=false;

	function radioValue(fld) {
		for(var i=0;i<fld.length;i++) {
			if(fld[i].checked) {
				return(fld[i].value);
			}
		}
		return(false);
    }

    function chkMandatory(fld,name) {
    	var val;
		if(focusSet && focusSet!=name)return(true);
		if(!fld.type && fld.length) {
			// Radio-Button
			val=radioValue(fld);
		} else {
			val=fld.value;
			val=val.replace(/\s+/g,"");
		}
		if(!val) {
			if(name.length>0) {
				window.alert('Feld `'+name+'` muss eingegeben werden!');
				focusSet=name;
			}
			if(!fld.type && fld.length) {
				fld[0].focus(); // Radio-Button
			} else {
				fld.focus();
			}
			if(fld.type=="text") {
				fld.select();
			}
			return(false);
		}
		focusSet=false;
		return(true);
	}

	var dateFormated;

	function getDateDMY(val) {
		if(val.length>10)return(false);
		p1=val.indexOf(".");
		if(p1<0)return(false);
		p2=val.indexOf(".",p1+1);
		if(p2<0)return(false);
		day=parseInt(val.substring(0,p1),10);
		month=parseInt(val.substring(p1+1,p2),10);
		year=parseInt(val.substring(p2+1,val.length),10);
		return(new Array(day,month,year));
	}

	function chkRawDate(val) {
	    var now;
	    now= new Date();
		dateFormated="";
		if(val.length>10)return(false);
		if(val=="00.00.0000")return(true);
		if(val.length<=2) {
			val=val+"."+ (now.getMonth()+1) + "." + (now.getFullYear());
		} else if(val.length<=5) {
			p1=val.indexOf(".");
		    if(p1<0 && val.length<=4) {
		    	val=val.substring(0,2) + "." + val.substring(2) + "."+(now.getFullYear());
		    } else if(val.length==5) {
				val=val+"."+(now.getFullYear());
			}
		} else if(val.length==6 && val.indexOf(".")<0) {
			val=val.substring(0,2)+"."+val.substring(2,4)+".20"+val.substring(4,6);
		} else if(val.length==8 && val.indexOf(".")<0) {
			val=val.substring(0,2)+"."+val.substring(2,4)+"."+val.substring(4,8);
		}
		p1=val.indexOf(".");
		if(p1<0)return(false);
		p2=val.indexOf(".",p1+1);
		if(p2<0)return(false);
		day=parseInt(val.substring(0,p1),10);
		month=parseInt(val.substring(p1+1,p2),10);
		year=parseInt(val.substring(p2+1,val.length),10);
		if(isNaN(day) || isNaN(month) || isNaN(year))return(false);
		if(day<1 || year<0 || month<1)return(false);
		if(day>31 || month>12)return(false);
		if(year>9999)return(false);
		if(year<100)year+=2000;
		if(month==4 || month==6 || month==9 || month==11) {
			if(day>30)return(false);
		}
		if(month==2) {
			if(day>29)return(false);
			if(day==29) {
				if((year % 4)!=0)return(false);
				if((year % 100)==0 && (year % 400)!=0)return(false);
			}
		}
		if(day<10) {
			day="0"+day.toString();
		} else {
			day=day.toString();
		}
		if(month<10) {
			month="0"+month.toString();
		} else {
			month=month.toString();
		}
		if(year<10) {
			year="000"+year.toString();
		} else if(year<100) {
			year="00"+year.toString();
		} else if(year<1000) {
			year="0"+year.toString();
		} else {
			year=year.toString();
		}
		dateFormated=day+"."+month+"."+year;
		return(true);
	}

	var timeFormated;

	function chkRawTime(val) {
		timeFormated="";
		if(val.lenght>8)return(false);
		p1=val.indexOf(":");
		if(p1<0)return(false);
		p2=val.indexOf(":",p1+1);
		hour=parseInt(val.substring(0,p1),10);
		if(p2<0) {
			minute=parseInt(val.substring(p1+1,val.length),10);
			second=0;
		} else {
			minute=parseInt(val.substring(p1+1,p2),10);
			second=parseInt(val.substring(p2+1,val.length),10);
		}
		if(isNaN(hour) || isNaN(minute) || isNaN(second))return(false);
		if(hour<0 || minute<0 || second<0)return(false);
		if(hour>23 || minute>60 || second>60)return(false);
		if(hour<10) {
			hour="0"+hour.toString();
		} else {
			hour=hour.toString();
		}
		if(minute<10) {
			minute="0"+minute.toString();
		} else {
			minute=minute.toString();
		}
		if(second<10) {
			second="0"+second.toString();
		} else {
			second=second.toString();
		}
		timeFormated=hour+":"+minute;
		if(p2>=0) {
			timeFormated+=":"+second;
		}
		return(true);
	}

	function chkDate(fld,format,name) {
		val=fld.value;
		flag=true;
		if(focusSet && focusSet!=name)return(true);
		if(val.length==0) {
			focusSet=false;
			return(true);
		}
		if(format=="DATE") {
			if(chkRawDate(val)) {
				flag=false;
				if(val!=dateFormated) {
					fld.value=dateFormated;
				}
			}
		} else if(format=="TIME") {
			if(chkRawTime(val)) {
				flag=false;
				if(val!=timeFormated) {
					fld.value=timeFormated;
				}
			}
		} else if(format=="DATETIME") {
			p1=val.indexOf(" ");
			if(p1>=0) {
				dat=val.substring(0,p1);
				tim=val.substring(p1+1,val.length);
				if(chkRawTime(tim) && chkRawDate(dat)) {
					flag=false;
					vx=dateFormated+" "+timeFormated;
					if(vx!=val) {
						fld.value=vx;
					}
				}
			}
		}
		if(flag) {
			if(format=="DATE") {
				format="TT.MM.JJJJ";
			} else if(format=="TIME") {
				format="HH:MM[:SS]";
			} else if(format=="DATETIME") {
				format="TT.MM.JJJJ HH:MM[:SS]";
			} else {
				format="<Unbekannt>";
			}
			window.alert('Feld `'+name+'` nicht im richtigen Format `'+format+'`!');
			focusSet=name;
			fld.focus();
			fld.select();
			return(false);
		}
		focusSet=false;
		return(true);
	}

	function chkNumber(fld,format,name) {
	    var decpoint=false;
		val=fld.value;
		if(focusSet && focusSet!=name)return(true);
		if(!val) {
			focusSet=false;
			return(true);
		}
		fmt=format;
		for(;;) {
			if(!fmt && !val)return(true);
			if(!fmt)break;
			if(fmt.substr(0,1)=='0' || fmt.substr(0,1)=='9') {
				if(val.substr(0,1)>='0' && val.substr(0,1)<='9') {
					fmt=fmt.substr(1);
					val=val.substr(1);
					continue;
				}
				if(fmt.substr(0,1)=='9') {
					fmt=fmt.substr(1);
					continue;
				}
				break;
			}
			if(fmt.substr(0,1)=='-' && fmt==format) {
				if(val.substr(0,1)=='-' || val.substr(0,1)=='+') {
					val=val.substr(1);
				}
				fmt=fmt.substr(1);
				continue;
			}
			if(fmt.substr(0,1)==val.substr(0,1)) {
				if(fmt.substr(0,1)=='.' || fmt.substr(0,1)==',') {
					decpoint=true;
				}
				fmt=fmt.substr(1);
				val=val.substr(1);
				continue;
			}
			break;
		}
		if(!val && (decpoint || fmt.substr(0,1)=='.' || fmt.substr(0,1)==',')) {
			focusSet=false;
			return(true);
		}
		window.alert('Feld `'+name+'` nicht im richtigen Format `'+format+'`!');
		focusSet=name;
		fld.focus();
		fld.select();
		return(false);
	}
