var check_types = ["req-int", "req-mail"];

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-mail":
				valid = check_form_mail(e);
				break;

			default:
				valid = check_form_notempty(e);
				break;
		}

		if (!valid) {
			failed.push(e);
		}
	});

	return failed;
}

function form_check(formID) {
	var failed = form_get_failed(formID);

	$$("#" + formID + " .required").each(function(e) {
		e.removeClassName("form-error");
	});

	$(failed).each(function(e) {
		e.addClassName("form-error");
	});

	return failed.length == 0;
}

function check_form_int(e) {
	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_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);