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 sont 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;
  /*On effectue les test sur la validité des données entrées par l'utilisateur */
  if (numTel){
  	if (!expTel.test(numTel)){
    	alert("Numéro de téléphone invalide");
    	var averti = 1; //permettra par la suite de savoir si l'utilisateur à déjà reçu un message d'erreur ou non
    	valide = false;
  	}
  }
  
  if (addrMail){
  	if (!expMail.test(addrMail) || (!champMail.value)){
    	if (!averti){ 
    		alert("Addresse mail non valide");
    		var averti = 1;
    	}
    	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].type && formulaire.elements[i].type!="hidden"){
		  if (formulaire.elements[i].name){
		    var nomChampCourant = formulaire.elements[i].name;
		    if ((!inArray(facultatif,formulaire.elements[i].name)) && (!formulaire.elements[i].value)) {
		      valide = false;
		    }
		  }	
		}
  }
	if (!valide && !averti){
		alert("Veuillez compl\351ter tous les champs marqu\351s d'une \351toile svp!");
		valide=false;
		var averti = 1;
	}
	
	var date = verifDate();
	if (!date && !averti){
		alert("La date du spectacle doit etre sup\351rieure \340 la date d'aujourd'hui !");
		var averti =1;
		valide=false;
	}
	
	var ville = verifVille();
	if (!ville && !averti){
		alert("La ville n'a pas \351t\351 trouv\351e.\nV\351rifiez l'orthographe, utilisez l'autocompl\351tion ou entrez la ville la plus proche svp.");
		valide=false;
	}
  return valide;
}


function verifDate(){
	var ok = true;
	// on recupere les dates grace au formulaire
	var dateJ = document.formulaire_devis.dateJour.value;			
	var dateE = document.formulaire_devis.date_evenement.value;
	
	// on inverse la date pour comparer
	var invDateJ = dateJ.charAt(6) + dateJ.charAt(7) + dateJ.charAt(8) + dateJ.charAt(9) + dateJ.charAt(3) + dateJ.charAt(4) + dateJ.charAt(0) + dateJ.charAt(1); 
	var invDateE = dateE.charAt(6) + dateE.charAt(7) + dateE.charAt(8) + dateE.charAt(9) + dateE.charAt(3) + dateE.charAt(4) + dateE.charAt(0) + dateE.charAt(1);
	if (invDateE < invDateJ)
		ok = false;
	
	return ok;
}

//fonctions pour la vérification de la ville
function getXMLHttpRequest() {	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}

	return xhr;
}

// Remplace les caractères accentués
function noAccent(str) {
  	var tmp = "";
  	for (i=0;i<str.length;i++){
  		var car =str.charCodeAt(i);
  		if (car > "231" && car < "236"){
  			tmp = tmp + "e";
  		}
  		else if (car > "223" && car < "230"){
  			tmp = tmp + "a";
  		}
  		else if (car > "235" && car < "240"){
  			tmp = tmp + "i";
  		}
  		else if ((car > "241" && car < "247") || car =="248"){
  			tmp = tmp + "o";
  		}
  		else if (car > "248" && car < "253"){
  			tmp = tmp + "u";
  		}
  		else if (car == "231"){
  			tmp= tmp + "c";
  		}
  		else { 
  			tmp = tmp + str.charAt(i);
  		}
  	}
 	return tmp;
}



function verifVille(){
	var xhr = getXMLHttpRequest();
	var ville=noAccent(document.getElementById('ville').value);
	var cp = document.getElementById('codeP').value;
	document.getElementById('ville').value=ville;
	
	xhr.open("GET", "verifVille.php?ville="+ville+"&cp="+cp, false);
	xhr.send(null);
	var reponse = xhr.responseXML.documentElement;
	var verif = readData(reponse);
	return verif;
}

function readData(sData){
	var nodes = sData.getElementsByTagName("option");
	var ok = true;
	if (nodes.length==0)
		ok = false;
	return ok;
}

