// JavaScript Document
function createMess(elt, balise, txt) {
	var messInfo = document.createElement(balise);
	var txtNodeMessInfo = document.createTextNode(txt);
	messInfo.appendChild(txtNodeMessInfo);
	var containerMessInfo = elt.parentNode;
	containerMessInfo.appendChild(messInfo);
}

function verifForm(formulaire) {
	// customisation
	var classObligatoire = "obligatoire";
	var baliseMessInfo = "span";
	var InputTxtMessInfo = "Champ à remplir !";
	var InputPasswordMessInfo = "6 caractères minimum !";
	var SelectSingleMessInfo = "Sélectionnez un élément !";
	var SelectMultiMessInfo = "Sélectionnez un ou plusieurs éléments !";
	var InputRadioMessInfo = "Cochez l'un des choix !";
	var InputFileMessInfo = "Insérez un fichier !";
	var InputMailMessInfo = "Mail invalide ! Il doit être de la forme nom@fournisseur.fr"
	
	// dclarations
	var a_chp_Obligatoires = new Array();										// tableau de stockage des champs obligatoires
	var a_p = new Array();														// tableau de stockage des balises p du formulaire
	var a_p_Obligatoires = new Array();											// tableau de stockage des balises p de class obligatoire
	var chpFirstFalse = "";														// string pour le focus sur le 1er champ non rempli
	var indexFirstFalse = 10000;												// num pour le focus sur le 1er champ non rempli
	
	a_p = document.getElementById(formulaire).getElementsByTagName("p");		// rcupration de toutes les balises p
	
	for (var iP=0; iP<a_p.length; iP++) {										// parcours du tableau des p pour ne garder que les class obligatoire
		if (a_p[iP].className == classObligatoire) {
			a_p_Obligatoires.push(a_p[iP]);										// on ajoute au tableaux les lments obligatoires
			a_chp_Obligatoires.push(new Array());								// on ajoute autant de tableaux que de nb de p obligatoires
		}
	}
	
	for (var iCO=0; iCO<a_p_Obligatoires.length; iCO++) {						// cette boucle insre dans le tableau tous les champs obligatoires
		if(a_p_Obligatoires[iCO].getElementsByTagName("input").length > 0) {
			a_chp_Obligatoires[iCO] = a_p_Obligatoires[iCO].getElementsByTagName("input");
		} else if (a_p_Obligatoires[iCO].getElementsByTagName("select").length > 0) {
			a_chp_Obligatoires[iCO] = a_p_Obligatoires[iCO].getElementsByTagName("select");
		} else if (a_p_Obligatoires[iCO].getElementsByTagName("textarea").length > 0) {
			a_chp_Obligatoires[iCO] = a_p_Obligatoires[iCO].getElementsByTagName("textarea");
		}
		
		for (var iCOi=0; iCOi<a_chp_Obligatoires[iCO].length; iCOi++) {
			// on commence par supprimer les ventuels messages crs au tour prcdent
			var container = a_chp_Obligatoires[iCO][iCOi].parentNode;
			if(container.getElementsByTagName(baliseMessInfo).length > 0) {
				var mess = container.getElementsByTagName(baliseMessInfo);
				container.removeChild(mess[0]);
			}
		}
		
		if(a_chp_Obligatoires[iCO].length == 1)	 {								// tous les lments uniques (hors radio, checkbox)
			// tous les champs input de diffrents types
			if(a_chp_Obligatoires[iCO][0].type == "text") {
				if(a_chp_Obligatoires[iCO][0].value.length==0) {
					// rcupration du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputTxtMessInfo);
				}
				// traitement du champ mail
				else if(a_chp_Obligatoires[iCO][0].getAttribute("name") == "courrielz") {
					var modele = /^[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\-_]+\.[a-zA-Z]{2,5}$/i;
					if (!modele.test(a_chp_Obligatoires[iCO][0].value)){
						// rcupration du 1er champ non rempli pour focus
						if(iCO<indexFirstFalse) {
							indexFirstFalse = iCO;
							chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
						}
						createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputMailMessInfo);
					}
				}
			}
			if(a_chp_Obligatoires[iCO][0].type == "password") {
				if(a_chp_Obligatoires[iCO][0].value.length==0) {
					// rcupration du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputTxtMessInfo);
				} else if(a_chp_Obligatoires[iCO][0].value.length<6) {
					// rcupration du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputPasswordMessInfo);
				}
			}
			// tous les champs select de diffrents types
			if(a_chp_Obligatoires[iCO][0].type == "select-one") {
				if (a_chp_Obligatoires[iCO][0].options[a_chp_Obligatoires[iCO][0].selectedIndex].value == "") {
					if(iCO<indexFirstFalse) {								// rcupration du 1er champ non rempli pour focus
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, SelectSingleMessInfo);
				}
			}
			if(a_chp_Obligatoires[iCO][0].type == "select-multiple") {
				if (a_chp_Obligatoires[iCO][0].options[a_chp_Obligatoires[iCO][0].selectedIndex].value == "") {
					if(iCO<indexFirstFalse) {								// rcupration du 1er champ non rempli pour focus
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, SelectMultiMessInfo);
				}
			}
			// textarea
			if(a_chp_Obligatoires[iCO][0].type == "textarea") {
				if(a_chp_Obligatoires[iCO][0].value=="") {
					// rcupration du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputTxtMessInfo);
				}
			}
			if(a_chp_Obligatoires[iCO][0].type == "file") {
				if(a_chp_Obligatoires[iCO][0].value.length==0) {
					// rcupration du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputFileMessInfo);
				}
			}
			
		} else {
			if((a_chp_Obligatoires[iCO][0].type == "radio") || (a_chp_Obligatoires[iCO][0].type == "checkbox")) {
				var check = false;
				for(var iRadio=0; iRadio<a_chp_Obligatoires[iCO].length; iRadio++) {
					if(a_chp_Obligatoires[iCO][iRadio].checked) {
						check = true;
					}
				}
				if (!check) {
					// rcupration du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].getAttribute("id");
					}
					createMess(a_chp_Obligatoires[iCO][a_chp_Obligatoires[iCO].length - 1], baliseMessInfo, InputRadioMessInfo);
				}
			}
		}
	}
		
	// action finale
	if(chpFirstFalse != "") {
		document.getElementById(chpFirstFalse).focus();
		return false;
	} else {
		return true;
	}
}

function prepareForm() {
	if(document.getElementsByTagName) {
		var a_Forms = document.getElementsByTagName("form");				// tableau de stockage des formulaires de la page
		for(var iForms=0; iForms<a_Forms.length; iForms++) {
			a_Forms[iForms].onsubmit = function() {
				return verifForm(this.getAttribute("id"));
			}
		}
	}
}

function addLoadListenerFormAuto(func) {
   if (window.addEventListener) {
      window.addEventListener("load", func, false);
   } else if (document.addEventListener) {
      document.addEventListener("load", func, false);
   } else if (window.attachEvent) {
      window.attachEvent("onload", func);
   }
}

if (document.getElementById && document.createTextNode) {
	addLoadListenerFormAuto(function() {prepareForm()});
}
