function isLeapYear(j) {return ((j % 4 == 0) && ((j % 100 != 0) || (j % 400 == 0)));}
function wrongDate(obj) {
	var t1 = "Ungueltiges Datumsformat: >> " + obj.value + " <<\n\n";
	var t2 = "Erlaubte Trennzeichen: ', . / -' \n\nJahreszahl: 4stellig (1800-2100)\n\n";
	var t3 = "z.B.:    01-12-1997        1.12.2001      31/12/2000     17,7,1981";
	alert(t1 + t2 + t3 + "\n\n[" + obj.name + "]");
	obj.value='';
	obj.focus();
}
function checkThisDate(obj) {
	var datumstring = obj.value;
	var checkEarlier = false;
	var myOnValidDate = "onValidDate()";
	var myOnEarlierDate = "onEarlierDate()";
	
	if(checkThisDate.arguments.length > 1){
		checkEarlier = checkThisDate.arguments[1];
		}
	if(checkThisDate.arguments.length > 2){
		myOnValidDate = checkThisDate.arguments[2];
	}
	if(checkThisDate.arguments.length > 3){
		myOnEarlierDate = checkThisDate.arguments[3];
	}
	
	if(datumstring == "") { return true; }
	var text = datumstring.replace(/[^0-9.,-\/]/g,"");
	var zahlen = text.split(/[ ,.\-\/]/);
	if(zahlen.length != 3) { wrongDate(obj); return false; }
	var mtage = new Array (0,31,28,31,30,31,30,31,31,30,31,30,31);
	var tag = zahlen[0]*1;
	var monat = zahlen[1]*1;
	var jahr = zahlen[2]*1;
	if(isLeapYear(jahr)) { mtage[2] = 29; }
	if((jahr < 1800) || (jahr > 2100)) { wrongDate(obj); return false; }
	if((monat < 1) || (monat > 12)) { wrongDate(obj); return false; }
	if((tag < 1) || (tag > mtage[monat])) { wrongDate(obj); return false; }
	if(tag < 10) { tag = "0" + tag; }
	if(monat < 10) { monat = "0" + monat; }
	obj.value = (tag + "." + monat + "." + jahr);
	if(checkEarlier){
		if(!checkEarlierDate(obj,myOnEarlierDate)){
			return false;
		}
	}
	
	eval(myOnValidDate);
	return true;
}

function checkEarlierDate(obj){
	var datumstring = obj.value;
	var jetzt = new Date();
	var isEarly = true;
	var myOnEarlierDate = "onEarlierDate()";
	jetzt = new Date(jetzt.getFullYear(), jetzt.getMonth(), jetzt.getDate(), 0,0,0,0);
	if(arguments.length > 1){
		myOnEarlierDate = arguments[1];
	}
	
	if(datumstring == "") { return true; }
	var text = datumstring.replace(/[^0-9.,-\/]/g,"");
	var zahlen = text.split(/[ ,.\-\/]/);
	if(zahlen.length == 3){
		var tag = Number(zahlen[0]);
		var monat = Number(zahlen[1]);
		var jahr = Number(zahlen[2]);
		var dteCompare = monat + "/" + tag + "/" + jahr;
		isEarly  = Date.parse(dteCompare) < jetzt;
		if(isEarly){
			eval(myOnEarlierDate);
			return false;
		}
	}
	return true;
}

function onValidDate(){
	return true;
}

function onEarlierDate(){
	var msg = 'Achtung: Datum liegt in der Vergangenheit.';
	if(arguments.length > 0){
		msg = arguments[0];
	}
	alert(msg);
	return false;
}
