//(c) Dabs-studio 2008 (http://dabs-studio.ru/)
//Usage:
// .vfNotEmpty - not empty field
// .vfEmail - email-formatted field (not necessarily empty)
// input[type=submit] is required
/*
<script src="/path/to/script/validateForm.js" type="text/javascript"></script>
<form class="validateForm">
<input class="vfNotEmpty">
<input class="vfEmail">
<input class="vfEmail vfNotEmpty">
<input type="submit">
</form>
*/
vfAddEvent(window, 'load', validateFormInit);

function vfAddEvent(obj, evType, fn){
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent){var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}
var validateFormElements = [];
//var validateFormState = false;
function validateForm(){
	var emailMask = new RegExp( "^[^à-ÿÀ-ß³²¿¯ºª]+@[^à-ÿÀ-ß³²¿¯ºª]*\\.[A-Za-z]{2,4}$" );
	for (var l=0;l<validateFormElements.length;l++) {
		var frm = validateFormElements[l];
		var error = false;
		for(var i=0;i<frm.length;i++) {
			if (frm[i].className.indexOf("vfNotEmpty") !== -1) {
				if (frm[i].value == "") error = true;
			}
			if (frm[i].className.indexOf("vfEmail") !== -1) {	
				if (frm[i].value.match(emailMask) || frm[i].value == "") {
					frm[i].style.color = "#090";
				} else {
					frm[i].style.color = "#900";
					error = true;
				}
			}
		}
		validateFormSwitch(frm, !error)
	}
}
function validateFormFindSubmit(frm) {
	for(var i=0;i<frm.length;i++) {
		if (frm[i].type == "submit") return frm[i];
	}
	return false;
}
function validateFormSwitch(frmEl, state) {
	var st = validateFormFindSubmit(frmEl);
	st.disabled = !state;
	frmEl.validateFormState = state;
	//console.log(st);
}
function validateFormSubmitListener() {
	return validateFormState;
}
function validateFormInit() {
	for(var i=0,c=0;i<document.forms.length;i++) {
		if (document.forms[i].className.indexOf("validateForm") !== -1) {
			document.forms[i].reset();
			document.forms[i].validateFormState = false;
			vfAddEvent(document.forms[i], 'keyup', validateForm);
			vfAddEvent(document.forms[i], 'mouseup', validateForm);
			vfAddEvent(document.forms[i], 'submit', function(){
				return document.forms[i].validateFormState;
			});
			validateFormElements[c] = document.forms[i];
			c++;
		}
	}
	validateForm();
}
