// ATTENTION bien mettre le for dans la balise <label> et le id dans le input ou autre! (identique au for)


function formControlListener() {
	
	// VARIABLE devant être renvoyée à la fin de la validation (True:Envoi|False:Echec)
	var bIsValide = true;	
	
	// Tableau contenant ensemble des classes devant déclencher un contrôle ainsi que les messages d'erreurs associés
	var aFormCtrlSchemes = [["isNotEmpty","Le champ \"%s\" doit être renseigné."],
							["isInt","Le champ \"%s\" ne correspond pas à un entier valide."],
							["isEmail","Le champ \"%s\" ne correspond pas à une adresse mail valide."],
							["isPhone","Le champ \"%s\" ne correspond pas à un numéro de téléphone valide."],
							["isTextarea","Le champ \"%s\" est vide."],
							["isSelected","Veuillez choisir un delai souhaité avant la réalisation de l'expertise."]];
	
	// Tableau rassemblant l'ensemble des données du formulaire liées à leur <label>
	var cLabels = this.getElementsByTagName("label");
	var nField;
	
	 // TEST de l'existence des champs
	for (var i=0; bIsValide && i<cLabels.length; i++) {
		if ((cLabels[i].htmlFor=="") ||!(nField=document.getElementById(cLabels[i].htmlFor))) continue;
		for (var j=0; bIsValide && aFormCtrlSchemes[j]; j++) {
			if (hasClassName(cLabels[i],aFormCtrlSchemes[j][0])) {
				if (!eval(aFormCtrlSchemes[j][0]+"(nField.value)")) {
					bIsValide = false;
					var textContent = getTextContent(cLabels[i]).replace(/\s{2,}/g," ");
					textContent = textContent.replace(/^[\s:*]+|[\s:*]+$/g,"");
					alert(aFormCtrlSchemes[j][1].replace("%s",textContent));
				}
			}
		}
		// Validation password
		if (bIsValide && hasClassName(cLabels[i],"extendedCtrl")) {
			bIsValide = eval("extendedCtrl_"+nField.id+"(nField)");
		}
		
	}
	// Si Ã‰chec -> sÃ©lectionne le input en faute
    if (!bIsValide) {
		nField.focus();
	}
    return bIsValide;
}


/* NON VIDE */
function isNotEmpty(s) {
	return s.replace(/^\s+|\s+$/g,"")!="";
	alert(s);
}

/* 
UN ENTIER 
*/
function isInt(s) {
 //if (isNotEmpty(s)) { // entre // pour ne pas vÃ©rifier si vide
  	return parseInt(s, 10)==s;
  //} else {
    //return false;
  //}
}


/*
NUMERIQUE
*/
function isNumber(s) {
	var numericExpression = /^[0-9]+$/; // Rien que des chiffres
	if(s.match(numericExpression) ){ // Est bien caractÃ¨re numÃ©rique
		return true;
	} else {
		return false
	}
}

/*
LONGUEUR CHAÎNE
*/

function lengthRestriction (s, min, max) { 
	 if(s.length >= min && s.length <= max) { 
	 	return true; 
	 }else{
		 return false; 
	 }
}


/*
E-MAIL
*/
function isEmail(s) {
	// VIDE ?
	if (isNotEmpty(s)){
		// MAIL ??
		var apos = s.indexOf("@");
		var dotpos = s.lastIndexOf(".");
		if (apos<1||dotpos-apos<2) {
			return false;
		} else {
			return true;
		}	
	}
}

/*
PHONE
*/
function isPhone(s) {
	// VIDE ?
	if (isNotEmpty(s)) {
		
		var stripped = s.replace(/[\(\)\.\-\/\+ ]/g, ''); // RETIRE tout ce qui est inutile
		if(isNumber(stripped)){ // Est bien caractère numérique
			if (lengthRestriction(stripped, 9, 10)){
			   return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
}

/*
TEXTAREA
*/
function isTextarea(s) {
	if ((!isNotEmpty(s)) || (s == "Tapez ici votre message")){
		return 	false;
	} else {
		return true;
	}
}

/*
SELECTION dans une liste
*/
function isSelected(s){
	 if(s == 0){
		 return false;
	 }else{
		 return true;
	 }
 }

// Le test utilisé pour déterminer si une classe particulière est implémentée correspond à la ligne
function hasClassName(oNode,className) {
    return ((" "+oNode.className+" ").indexOf(" "+className+" ")!=-1);
}


/* Récupération du contenu textuel de l'élément label*/
function getTextContent(oNode) {
	if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;}
	switch (oNode.nodeType) {
		case 3: // TEXT_NODE
		case 4: // CDATA_SECTION_NODE
			return oNode.nodeValue;
			break;
		case 8: // COMMENT_NODE
		case 7: // PROCESSING_INSTRUCTION_NODE
			if (getTextContent.caller!=getTextContent) {
				return oNode.nodeValue;
			}
			break;
		case 9: // DOCUMENT_NODE
		case 10: // DOCUMENT_TYPE_NODE
		case 12: // NOTATION_NODE
			return null;
			break;
	}
	var _textContent = "";
	oNode = oNode.firstChild;	// récupère le premier enfant du noeud (oNode.firstChild) passé en paramètre
	while (oNode) {
		_textContent += getTextContent(oNode);
		oNode = oNode.nextSibling;
	}
	return _textContent;
}

/* AU CHARGEMENT répérage des formulaire dans la page pour directement gérer le ONSUBMIT */
window.onload = function() {
  var cForms = document.forms;
  for (var i=0; cForms[i]; i++) {
    cForms[i].onsubmit = formControlListener;
  }
}


function extendedCtrl_confirmpass(nField) {
  var result = true;
  if (nField.value!=document.getElementById("password").value) {
    result = false;
    alert('La valeur du champ "Confirmation du mot de passe" doit être identique à la valeur saisie pour le champ "Mot de passe".');
  }
  return result;
}

