var check_types = ["req-int", "req-mail", "req-noint", "req-float", "req-date", "req-minlen"];

function form_get_failed(formID) {
	
	var failed = [];
	
	var form = $(formID);
	var reqs = $$("#" + formID + " .required");
	
	reqs.each(function(e) {
		var req_type = get_req_type(e);
		var valid;
		switch (req_type) {
			case "req-int":
				valid = check_form_int(e);
				break;
			case "req-minlen":
				valid = check_form_minlen(e);
				break;
			case "req-mail":
				valid = check_form_mail(e);
				break;
			case "req-noint":
				valid = check_form_noint(e);
				break;
			case "req-float":
				valid = check_form_float(e);
				break;
			case "req-date":
				valid = check_form_date(e);
				break;
			default:
				valid = check_form_notempty(e);
				break;
		}
		if (!valid) {
			failed.push(e);
		}
	});
	
	return failed;
}

/*

function prev_field(prev) {
	var prev = $(prev);
	
	if(prev.value.length == "") {
		prev.select();
		prev.focus();	
	}
}

function check_int_length(element, minlength) {
	var current = $(element);
	var minlength = minlength;
	
	if(current.value.length < minlength && current.value != "") {
		current.select();
		current.focus();
		current.addClassName("form-error");
	} 
	
	if($(current).hasClassName("form-error") && current.value.length == minlength) {
		$(current).removeClassName("form-error");
	}
	
	if(isNaN($(current).value)) {
		next.select();
		current.focus();	
		current.addClassName("form-error");	
	} else {
		$(current).removeClassName("form-error");
	}
	
}



function nextField(element, minlength, next) {
	var current = $(element);
	var next = $(next);
	var minlength = minlength;
	
	if(current.value.length >= minlength) {
		next.select();
		next.focus();	
	}

*/


/**
 * checkt ein Datum (String, "dd.mm.yyyy"), gibt true zurÃ¼ck wenn es 18
 * Jahre zurÃ¼ckliegt, false sonst
 */
function is_adult(datestr) {
	var regex = /^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}$/
	
	if (!regex.test(datestr)) {
		return false;
	}
	
	var parts = datestr.split(".");
	
	var d = new Date(parts[2], parts[1] - 1, parts[0]);
	var now = new Date();
	
	// Datum auf den 18. Geburtstag setzen
	d.setYear(d.getFullYear() + 18);
	
	if (d.getTime() < now.getTime()) {
		return true;
	} else {
		return false;
	}
}



function form_check(formID) {
	var failed = form_get_failed(formID);
	
	$$("#" + formID + " .required").each(function(e) {
		if(e.hasClassName('check')) {
			e.up().removeClassName("form-error");
		} else e.removeClassName("form-error");
	});
	
	$(failed).each(function(e) {
		if(e.hasClassName('check')) {
			e.up().addClassName("form-error");
		} else e.addClassName("form-error");
	});
	
	return failed.length == 0;
	//return false;
}

function check_form_int(e) {
	var regex = /^\d+$/;
	return check_element_generic(e, regex);
}

function check_form_minlen(e) {
	if(e.value.length < 8) {
		return false;
	} else {
		var regex = /^\d+$/;
		return check_element_generic(e, regex);
	}
}

function check_form_mail(e) {
	var regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return check_element_generic(e, regex);
}

function check_form_notempty(e) {
	var regex = /[^\s]+/;
	return check_element_generic(e, regex);
}

function check_form_noint(e) {
	var regex = /^([a-zA-ZäüöÄÜÖ_\.\-])+$/;
	return check_element_generic(e, regex);
}

function check_form_date(e) {
	var regex = /^[0-3]?\d\.[01]?\d\.[12]\d{3}$/;
	return check_element_generic(e, regex);
}

function check_form_float(e) {
	var regex = /^([0-9\.\,])+$/;
	return check_element_generic(e, regex);
}


/*function check_adult(e) {
	var regex = /^
}*/

function check_element_generic(e, regex) {
	if (trim_string($F(e)) == $(e).readAttribute("title") || 
		!regex.test(trim_string($F(e)))) {
			
		return false;
	}
	
	return true;
}



function get_req_type(elem) {
	var classnames = $w(elem.className);
	
	for (var n = 0; n < classnames.length; n++) {
		for (var t = 0; t < check_types.length; t++) {
			if (classnames[n] == check_types[t]) {
				return check_types[t];
			}
		}
	}
	
	return "req-notempty";
}

trim_string = function(s) {
	if (s == null) return "";
	
	var r = s.replace(/^\s+/, '');
	r = r.replace(/\s+$/, '');
	return r;
};

function form_init() {
	$$("input.default, textarea.default").each(function(e) {
		if ($F(e) == "") {
			e.value = e.readAttribute("title");
		}
		
		e.observe("focus", function(event) {
			var def = $(event.target).readAttribute("title");
			if ($F(event.target) == def) {
				$(event.target).value = "";
			}
		});
		
		e.observe("blur", function(event) {
			var def = $(event.target).readAttribute("title");
			if ($F(event.target) == "") {
				$(event.target).value = def;
			}
		});
	});
	
	$$("input.default-pass").each(function(e) {
		if ($F(e) == "") {
			e.value = e.readAttribute("title");
		}
		
		e.observe("focus", function(event) {
			var def = $(event.target).readAttribute("title");
			if ($F(event.target) == def) {
				$(event.target).value = "";
				$(event.target).type = "password";
			}
		});
		
		e.observe("blur", function(event) {
			var def = $(event.target).readAttribute("title");
			if ($F(event.target) == "") {
				$(event.target).type = "text";
				$(event.target).value = def;
			}
		});
	});
}

Event.observe(window, "load", form_init);