function isNumeric(str) {
	var num = true;
	///
	if (str.length == 0) {
		num = false;
	}
	for (var i = 0;i < str.length;i++) {
		if ('0123456789'.indexOf(str.charAt(i)) == -1) {
			num = false;
			break;
		}
	}
	return num;
}

function tokenize(str,delimiter) {
	var arr = new Array();
	var token = '';
	var c = 0;
	///
	for (var i = 0;i < str.length;i++) {
		c = str.charAt(i);
		if (delimiter.indexOf(c) != -1) {
			if (token != '') {
				arr[arr.length] = token;
				token = '';
			}
		}
		else {
			token += c;
		}
	}
	if (token != '') {
		arr[arr.length] = token;
	}
	return arr;
}

function formatDate(date) {
	var s = '';
	///
	s = (date.getDate() < 10 ? '0' : '') + date.getDate() + '.' + (date.getMonth() < 9? '0' : '') + (date.getMonth() + 1) + '.' + date.getFullYear();
	return s;
}

function checkDateField(field) {
	var today = new Date();
	var tokens = tokenize(field.value,',./-');
	var defaults = new Array(today.getDate(),today.getMonth() + 1,today.getFullYear());
	var clamps = new Array(new Array(1,31),new Array(1,12),new Array(0,9999));
	/// Leeres Feld ignorieren
	if (field.value == '') {
		return;
	}
	/// Rein numerische Eingabe ohne Trenner?
	if ((tokens.length == 1) && isNumeric(tokens[0])) {
		if ((tokens[0].length == 6) || (tokens[0].length == 8)) {
			tokens[0] = field.value.substring(0,2);
			tokens[1] = field.value.substring(2,4);
			tokens[2] = field.value.substring(4,field.value.length);
		}
		else if (tokens[0].length > 2) {
			tokens.length = 0;
		}
	}
	/// Jahreszahl an erster Stelle? Umdrehen ...
	if ((tokens.length != 0) && isNumeric(tokens[0]) && (parseInt(tokens[0],10) > 31)) {
		tokens.reverse();
	}
	/// Jahreszahl evtl. vervollstaendigen
	if ((tokens.length==3)&&(tokens[2].length==2)&&isNumeric(tokens[2])) {
		if (parseInt(tokens[2],10) > 50) {
			tokens[2] = '19' + tokens[2];
		}
		else {
			tokens[2] = '20' + tokens[2];
		}
	}
	/// Numerische Teile parsen, die anderen entfernen
	for (var i = 0;i < defaults.length;i++) {
		if ((tokens.length > i) && isNumeric(tokens[i])) {
			tokens[i] = parseInt(tokens[i],10);
		}
		else {
			tokens[i] = defaults[i];
		}
	}
	/// Min./Max.-Werte anwenden
	for (var i = 0;i < tokens.length;i++) {
		tokens[i] = Math.max(Math.min(tokens[i],clamps[i][1]),clamps[i][0]);
	}
	today = new Date(tokens[2],tokens[1] - 1,tokens[0]);
	///
	field.value = formatDate(today);
}
