function insertAfter(elementInsere,elementCible) {
  var parent = elementCible.parentNode;

  if(parent.lastchild == elementCible) {
    parent.appendChild(elementInsere);
  } else {
    parent.insertBefore(elementInsere, elementCible.nextSibling);
  }
}

function recupFacultatif(arguments) {
  var facultatif = new Array();
  for (i=0;i<arguments.length-1;i++){
    facultatif[i] = arguments[i+1];
  }
  return facultatif;
}

function inArray(tableau,chaine){
  var found = false;
  for (j=0;j<tableau.length;j++){
    if (tableau[j] == chaine) {
      found= true;
    }
  }
  return found;
}

/***********************fonction isValid********************************/
/* Vérifie si le formulaire passer en argument est valide ou non.      */
/* On peut passer à cette fonction des arguments facultatifs           */
/* correspondant aux champs qui ne sont pas obligatoire dans le 			 */
/* formulaire.                           															 */
/***********************************************************************/
function isValid(formulaire){
  var args = isValid.arguments;
  var nbArgs = args.length;

  /*on vérifie si l'utilisateur à préciser des champs qui seront facultatifs */
  if (nbArgs>1){
    var facultatif = recupFacultatif(args);
  }

  /* expression régulière pour vérifier la validité de l'adresse mail et du numéro de téléphone, et
     récupératio des données entrées. */
  var expTel = new RegExp("^(0[1-689])(?:[ _.-]?([0-9]{2})){4}$");
  var expMail = new RegExp("^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$","i");
  var expChampMail = new RegExp("^.*(mail).*$","i");
  var expChampTel = new RegExp("^.*(tel).*$","i");

  for (i=0;i<formulaire.elements.length;i++){
    if (expChampMail.test(formulaire.elements[i].id)){
      var champMail = formulaire.elements[i];
    }

    if (expChampTel.test(formulaire.elements[i].id)){
      var champTel = formulaire.elements[i];
    }
  }

  /*Récupération des informations entrées par l'utilisateur */
  if (champMail){
  	var addrMail = champMail.value;
  }
  if (champTel){
  	var numTel = champTel.value;
  }
  
  var valide = true;

  /*S'il s'agit d'une deuxième tentative, on supprime les messages d'erreurs précédents*/ 
  for (i=0;i<formulaire.elements.length;i++){
			var id="idErreur_"+formulaire.elements[i].name;
			formulaire.elements[i].style.backgroundColor = "";
			if (document.getElementById(id)){
				var elementSup = document.getElementById(id);
				elementSup.parentNode.removeChild(elementSup);
			}
		}

  /*On effectue les test sur la validité des données entrées par l'utilisateur */
  if (numTel){
  	if (!expTel.test(numTel)){
    	champTel.style.backgroundColor = "#F506C8";
    	var erreur = document.createElement("ul");
    	var idErreur="idErreur_"+champTel.name;
    	erreur.id=idErreur;
    	var newLi = document.createElement("li");
    	var textErreur = document.createTextNode("Numéro de téléphone invalide");
    	newLi.appendChild(textErreur);
    	erreur.appendChild(newLi);
    	insertAfter(erreur,champTel);
    	valide = false;
  	}
  }
  if (addrMail){
  	if (!expMail.test(addrMail) || (!champMail.value)){
    	champMail.style.backgroundColor = "#F506C8";
    	var erreur = document.createElement("ul");
    	var idErreur="idErreur_"+champMail.name;
    	erreur.id=idErreur;
    	var newLi = document.createElement("li");
    	var textErreur = document.createTextNode("Addresse mail non valide");
    	newLi.appendChild(textErreur);
    	erreur.appendChild(newLi);
    	insertAfter(erreur,champMail);
    	valide = false;
  	}
	}

  /*on parcours les champs pour savoir si ce sont des champs obligatoire ou non */
  for (i=0;i<formulaire.elements.length;i++){
    if (formulaire.elements[i].name){
      var nomChampCourant = formulaire.elements[i].name;
      if ((inArray(facultatif,formulaire.elements[i].name)) && (!formulaire.elements[i].value)) {
        formulaire.elements[i].style.backgroundColor = "#F506C8";
        var erreur = document.createElement("ul");
        var idErreur = "idErreur_"+nomChampCourant;
        erreur.id=idErreur;
        var newLi = document.createElement("li");
        var textErreur = document.createTextNode("Ce champs est obligatoire");
        newLi.appendChild(textErreur);
        erreur.appendChild(newLi);
        insertAfter(erreur,formulaire.elements[i]);
        valide = false;
      }
    }	
  }

  return valide;
}
