// checkForm has to be added to the onsubmit event of the form: <form ... onsubmit="return checkForm(this);" ...>

var lastWrongElem = null;
var checkFormDisabled = false;

function isEmpty(s) {
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if ((c != ' ') && (c != '\n') && (c != '\t'))
		  return false;
	}
	return true;
}

function checkEmail(s) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return isEmpty(s) || filter.test(s);
}

function checkPhone(s) {
	var filter  = /^([0-9\.\(\)\+ ])+$/;
	return isEmpty(s) || filter.test(s);
}

function checkNpa(s) {
	var filter  = /^([0-9]{4,4})+$/;
	return isEmpty(s) || filter.test(s);
}

function checkNumber(s) {
	var filter  = /^([0-9 \'])+$/;
	return isEmpty(s) || filter.test(s);
}

function notifyError(elem, msg) {	
			alert(msg);
			lastWrongElem = elem;
			elem.style.borderColor = "#FF0000";
			elem.focus();
			return false;
}

function disableCheckFormOnce() {
	checkFormDisabled = true;
}

function checkForm(frm) {
	var elem;
	var obligatoire;
	var contenu;
	var value;

	if (checkFormDisabled) {
		checkFormDisabled = false;
		return true;
	}
	
	if (lastWrongElem != null) {
		lastWrongElem.style.borderColor = "";
		lastWrongElem = null;
	}

	for (var i = 0; i < frm.elements.length; i++) {
		elem = frm.elements[i];
		obligatoire = elem.nextSibling && elem.nextSibling.nodeValue.match(/^ *\*/);
		contenu = elem.getAttribute("contenu"); 
		value = elem.value;
		if (elem.tagName == "SELECT")
			value = elem.options[elem.selectedIndex].text;

			if (obligatoire && isEmpty(value))
				return notifyError(elem, "Veuillez remplir tous les champs suivi de *.");

			if ((contenu == "email") && !checkEmail(value))
				return notifyError(elem, "Le format de l'adresse E-Mail est incorrect.");

			if ((contenu == "phone") && !checkPhone(value))
				return notifyError(elem, "Le format du numéro de téléphone est incorrect.");

			if ((contenu == "npa") && !checkNpa(value))
				return notifyError(elem, "Le format du numéro postal est incorrect.");

			if ((contenu == "number") && !checkNumber(value))
				return notifyError(elem, "Un nombre est requis.");
	}
	return true;
}

