	function CheckForm(formulaire)
	{
		ClearHighlights(formulaire);

		var message = "";

		for (var i in fields[formulaire.id])
		{
			var field = fields[formulaire.id][i];
			var fieldObject = formulaire.elements[field.fieldName];

			if (fieldObject.value == "") {
				if (field.required == "1") {
					message += "Le champ '" + field.name + "' est obligatoire.\n";
					HighlightField(fieldObject);
				}
			}
			else {
				switch(field.type) {
					case "email" :
						if (CheckEmail(fieldObject.value) == false) {
							message += "Le champ '" + field.name + "' doit être une adresse email valide.\n";
							HighlightField(fieldObject); }
						break;
					case "tel" :
						if (CheckTel(fieldObject.value) == false) {
							message += "Le champ '" + field.name + "' ne peut pas contenir de lettre.\n";
							HighlightField(fieldObject); }
						break;
					case "num" :
						if (CheckNum(fieldObject.value) == false) {
							message += "Le champ '" + field.name + "' ne peut contenir que des chiffres.\n";
							HighlightField(fieldObject); }
						break;
					case "date" :
						if (CheckDate(fieldObject.value) == false) {
							message += "Le champ '" + field.name + "' doit être au format 'JJ-MM-AAAA'.\n";
							HighlightField(fieldObject); }
						break;
					case "same" :
						fieldObject2 = formulaire.elements[field.fieldName+"2"];
						if (fieldObject.value != fieldObject2.value) {
							message += "Les champs '" + field.name + "' doivent être identiques.\n";
							HighlightField(fieldObject2);
							HighlightField(fieldObject); }
						break;
				}
			}
		}
		if (message != "")
		{
			alert(message);
			return false;
		}
		else
			return true;
	}
	function CheckEmail(str)
	{
		// At leat a @ followed by a ., and without any illegal character
		var emailFormat = new RegExp(regexStrEmail);
		return emailFormat.test(str);
	}
	function CheckTel(str)
	{
		// No letter
		var telFormat = new RegExp(regexStrTel);
		return telFormat.test(str);
	}
	function CheckNum(str)
	{
		// Only figures
		var figuresOnly = new RegExp(regexStrNum);
		return figuresOnly.test(str);
	}
	function CheckDate(str)
	{
		// DD-MM-YYYY
		var dateFormat = new RegExp(regexStrDate);
		return dateFormat.test(str);
	}
	function HighlightField(field)
	{
		field.style.color = 'red';
		field.style.borderColor = 'red';
	}
	function ClearHighlights(formulaire)
	{
		var tbInput = formulaire.getElementsByTagName("input");
		for (i=0;i<tbInput.length;i++)
		{
			var field = tbInput[i];
			field.style.color = '';
			field.style.borderColor = '';
		}
	}
	function UpdateVForms()
	{
		var tbForms = document.getElementsByTagName('form');
		for (i=0;i<tbForms.length;i++)
		{
			if (tbForms[i].id.substring(0,2) != "V_" )
				continue;
			// Add Hidden Field
			var currentElement = document.createElement("input");
			currentElement.setAttribute("type", "hidden");
			currentElement.setAttribute("name", "_FormName_");
			currentElement.setAttribute("value", tbForms[i].id);
			tbForms[i].appendChild(currentElement);
			// Update OnSubmit
			tbForms[i].onsubmit = function() { return CheckForm(this) };
		}
	}
	UpdateVForms();