// 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) {
	var PasswordLenghtMin = 4;
	var classObligatoire = "obligatoire";
	var baliseMessInfo = "span";

	var InputPasswordMessInfo = PasswordLenghtMin+InputPasswordMessInfoLang;
	
	// déclarations
	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");		// récupération de toutes les balises p
	//a_f = document.getElementById(formulaire).getElementsByTagName("fieldset"); // récupération de toutes les balises fieldset
	a_p = document.getElementById(formulaire).getElementsByTagName("*");
	
	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 éléments 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 insère 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 créés au tour précédent
			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 éléments uniques (hors radio, checkbox)
			// tous les champs input de différents types
			if(a_chp_Obligatoires[iCO][0].type == "text") {
				if(a_chp_Obligatoires[iCO][0].value.length==0) {
					// récupération du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].id;
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputTxtMessInfo);
				}
				// traitement du champ mail
				else if(a_chp_Obligatoires[iCO][0].getAttribute("name").substring(0, 9) == "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)){
						// récupération du 1er champ non rempli pour focus
						if(iCO<indexFirstFalse) {
							indexFirstFalse = iCO;
							chpFirstFalse = a_chp_Obligatoires[iCO][0].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) {
					// récupération du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].id;
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputTxtMessInfo);
				} else if(a_chp_Obligatoires[iCO][0].value.length<PasswordLenghtMin) {
					// récupération du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].id;
					}
					createMess(a_chp_Obligatoires[iCO][0], baliseMessInfo, InputPasswordMessInfo);
				}
			}
			// tous les champs select de différents 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) {								// récupération du 1er champ non rempli pour focus
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].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) {								// récupération du 1er champ non rempli pour focus
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].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=="") {
					// récupération du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].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) {
					// récupération du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;
						chpFirstFalse = a_chp_Obligatoires[iCO][0].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) {
					// récupération du 1er champ non rempli pour focus
					if(iCO<indexFirstFalse) {
						indexFirstFalse = iCO;	
						chpFirstFalse = a_chp_Obligatoires[iCO][0];
					}
					createMess(a_chp_Obligatoires[iCO][a_chp_Obligatoires[iCO].length - 1], baliseMessInfo, InputRadioMessInfo);
				}
			}
		//}
	}
	
	// traitement du champ mail non obligatoire
	for(iCourrielz=0; iCourrielz<document.getElementById(formulaire).getElementsByTagName('input').length; iCourrielz++) {
		if(document.getElementById(formulaire).getElementsByTagName('input')[iCourrielz].getAttribute('name') == 'courrielz') {
			if(document.getElementById(formulaire).getElementsByTagName('input')[iCourrielz].parentNode.className != classObligatoire) {
				//on retire l'erreur precedente
				var container = document.getElementById(formulaire).getElementsByTagName('input')[iCourrielz].parentNode;
				if(container.getElementsByTagName(baliseMessInfo).length > 0) {
					var mess = container.getElementsByTagName(baliseMessInfo);
					container.removeChild(mess[0]);
				}
			
				var modele = /^[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+\.[a-zA-Z]{2,5}$/i;
				if (!modele.test(document.getElementById(formulaire).getElementsByTagName('input')[iCourrielz].value )){
					// récupération du 1er champ non rempli pour focus
						if(chpFirstFalse == '') chpFirstFalse = document.getElementById(formulaire).getElementsByTagName('input')[iCourrielz].id;
					
					createMess(document.getElementById(formulaire).getElementsByTagName('input')[iCourrielz], baliseMessInfo, InputMailMessInfo);
				}
			}
		} 
	}/*
	if(	(
		(document.getElementById('courrielz').value != '') 
		&& (document.getElementById('courrielz').parentNode.className != classObligatoire)
	) {
		//on retire l'erreur precedente
		var container = document.getElementById('courrielz').parentNode;
		if(container.getElementsByTagName(baliseMessInfo).length > 0) {
			var mess = container.getElementsByTagName(baliseMessInfo);
			container.removeChild(mess[0]);
		}
	
		var modele = /^[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+\.[a-zA-Z]{2,5}$/i;
		if (!modele.test(document.getElementById('courrielz').value )){
			// récupération du 1er champ non rempli pour focus
			
				chpFirstFalse = 'courrielz';
			
			createMess(document.getElementById('courrielz'), baliseMessInfo, InputMailMessInfo);
		}
	}
	*/
		
	// action finale
	if(chpFirstFalse != "") {
		if(typeof chpFirstFalse == "string") {
			if(document.getElementById(chpFirstFalse) != null) 
				document.getElementById(chpFirstFalse).focus();
		} else {
			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++) {
			if(a_Forms[iForms].className == "ajoutPanier") {				// dans le cas d'une page produit avec des référecnes
				var a_tr = a_Forms[iForms].lastChild.lastChild.getElementsByTagName("tr");
				for(var itr=0; itr<a_tr.length; itr++) {
					a_tr[itr].id = a_Forms[iForms].lastChild.id + "_" + itr;
					if(a_tr[itr].lastChild.childNodes.length > 0) {			// il existe des éléments dans la cellule
						var btn = a_tr[itr].lastChild.lastChild.firstChild;
						btn.ligne = a_tr[itr];								// ligne du bouton
						btn.formulaire = a_Forms[iForms];					// formulaire du tableau
						btn.onclick = function() {
							return verifForm(this.ligne.id);				// test des champs obligatoires de la ligne
							this.formulaire.submit();						// submit du formulaire
						}
					}
				}
			} else {														// tous les autres formulaires
				a_Forms[iForms].onsubmit = function() {
					return verifForm(this.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);
   }
}


