//*****************************************************************
//************ Info bulle
//*****************************************************************
var visible=false; // La variable i nous dit si la bulle est visible ou non

function montre(text) {
  if(visible==false) {
    document.getElementById("msg_erreur").style.visibility="visible"; // Si il est cacher (la verif n'est qu'une securitÃ©) on le rend visible.
    visible=true;
  }
  document.getElementById("msg_erreur").innerHTML = text; // on copie notre texte dans l'Ã©lÃ©ment html
}
function cache() {
  if(visible==true) {
    document.getElementById("msg_erreur").style.visibility="hidden"; // Si la bulle est visible on la cache
    visible=false;
    document.getElementById("extension").style.visibility="visible";
  }
}

function move(e) {
  if(visible) {  // Si la bulle est visible, on calcul en temps reel sa position ideale
  
		//console.log(e);
  	var obj = document.getElementById(e);
    var posX = obj.offsetLeft;
    var posY = obj.offsetTop;

		var but_submit = document.getElementById("submit");
    var but_posX = but_submit.offsetLeft;
    var but_posY = but_submit.offsetTop;

		// console.log("position");
		// 		console.log("x : ");
		// 		console.log(but_posX - 26);
		// 		console.log("y : ");
		// 		console.log(but_posY - 200);
		
		

		X = (posX != 0)? (posX + 210) : (but_posX + 26);
		Y = (posY != 0)? (posY + 15) : (but_posY - 250);
    
    if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
      document.getElementById("msg_erreur").style.left= X +"px"; //e.pageX + 5+"px";
      document.getElementById("msg_erreur").style.top= Y +"px"; //e.pageY + 10+"px";
    }
    else {    
      //Pour IE il faut rajouter la position des parents de l'objet en cours
	  while (obj = obj.offsetParent) {
        posX += obj.offsetLeft;
        posY += obj.offsetTop;
      }
      if(document.documentElement.clientWidth>0) {
        document.getElementById("msg_erreur").style.left= posX + 210 + "px"; //20+event.x+document.documentElement.scrollLeft+"px";
        document.getElementById("msg_erreur").style.top= posY + 15 + "px"; //10+event.y+document.documentElement.scrollTop+"px";
      } else {
        document.getElementById("msg_erreur").style.left= posX + 210 + "px"; //20+event.x+document.body.scrollLeft+"px";
        document.getElementById("msg_erreur").style.top= posY + 15 + "px"; //10+event.y+document.body.scrollTop+"px";
      }
      //Trouver la position du Select Extention , problème avec IE 6
      var objExtention = document.getElementById("extension");
      var posExtentionY = 0;
      do { posExtentionY += objExtention.offsetTop;      
      } while (objExtention = objExtention.offsetParent)
      //La taille de l'info bulle
      var tailleDivErr = document.getElementById("msg_erreur").offsetHeight;
      var posDiv = posY+tailleDivErr+14;      
      if( !(posDiv < posExtentionY || posY > (posExtentionY+14)) ) {
      	document.getElementById("extension").style.visibility="hidden";
      }
    }
  }
}

document.onMouseMove=setTimeout(cache,1000);
//******************************************************
//*** La class pour valider le formulaire
//******************************************************
function Champ(id, msg, type) {
	this.id=id;
	this.msg=msg;
	this.type=type;
}



//***** La fonction verifier 
Champ.prototype.verifier = function() {

	//console.log(this.id);
	var champ = this.id;
	if(this.type != "radio" && this.type != "select") {
		var txt = document.getElementById(this.id).value;
		txt = txt.replace(/  /g, ' ');
		document.getElementById(this.id).value = txt;	
	}
	
	switch (this.type) {
	
		case "text" :
			txt = txt.replace(/ /g, '');
			if(txt == "") document.getElementById(this.id).value = txt;
			var error = Array(champ, this.msg); 
			return (txt == "") ? error : null;
		
		case "alphabetique" :
			var reg = new RegExp("^[a-zA-ZàáâãäåçèéêëìíîïðòóôõöùúûüýÿÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÒÓÔÕÖÙÚÛÜÝŸ/'/. ]{3,}$", "g");
			document.getElementById(this.id).value = txt;
			var error = Array(champ, this.msg); 
			return ( !reg.test(txt) ) ? error : null;
		
		case "alphanum" :
			var reg = new RegExp("[0-9a-zA-ZàáâãäåçèéêëìíîïðòóôõöùúûüýÿÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÒÓÔÕÖÙÚÛÜÝŸ/'/. ]*[a-zA-ZàáâãäåçèéêëìíîïðòóôõöùúûüýÿÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÒÓÔÕÖÙÚÛÜÝŸ/'/. ]{4,}[1-9a-zA-ZàáâãäåçèéêëìíîïðòóôõöùúûüýÿÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÒÓÔÕÖÙÚÛÜÝŸ/'/. ]*$", "g");
			document.getElementById(this.id).value = txt;
			var error = Array(champ, this.msg); 
			return ( !reg.test(txt) ) ? error : null;	
			
		case "email" :
			var reg = new RegExp("^[0-9A-Za-z]{1}[0-9A-Za-z._-]+@{1}[0-9A-Za-z.-]{2,}[.]{1}[A-Za-z]{2,5}$", "g");
			var error = Array(champ, this.msg);
			return ( !reg.test(txt) ) ? error : null;
			
		case "phone_vide" :
			txt = txt.replace(/[ //.;,_-]/g, '');
			if(txt == "") document.getElementById(this.id).value = txt;
      var error = Array(champ, this.msg); 
			return (txt == "") ? error : null;

		case "phone_debut" :
			txt = txt.replace(/[ //.;,_-]/g, '');
			var reg = new RegExp("^0{1}[1-58-9]{1}", "g");
			document.getElementById(this.id).value = txt;
			var error = Array(champ, this.msg);
			return ( !reg.test(txt) ) ? error : null;

		case "phone_complet" :
			txt = txt.replace(/[ //.;,_-]/g, '');
			var reg = new RegExp("^0{1}[1-58-9]{1}[0-9]{8}$", "g");
			document.getElementById(this.id).value = txt;
      var error = Array(champ, this.msg); 
			return ( !reg.test(txt) ) ? error : null;
		
	case "portable_vide" :
		txt = txt.replace(/[ //.;,_-]/g, '');
		if(txt == "") document.getElementById(this.id).value = txt;
      var error = Array(champ, this.msg); 
		return (txt == "") ? error : null;
		
		case "portable_debut" :
			txt = txt.replace(/[ //.;,_-]/g, '');
			var reg = new RegExp("^(06|07)", "g");
			document.getElementById(this.id).value = txt;
      var error = Array(champ, this.msg); 
			return ( !reg.test(txt) ) ? error : null;
			
		case "portable_complet" :
			txt = txt.replace(/[ //.;,_-]/g, '');
			var reg = new RegExp("^0{1}[6-7]{1}[0-9]{8}$", "g");
			document.getElementById(this.id).value = txt;
      var error = Array(champ, this.msg); 
			return ( !reg.test(txt) ) ? error : null;
			
		case "cp" :
			txt = txt.replace(/ /g, '');
			var reg = new RegExp("^[0-9]{5}$", "g");
			document.getElementById(this.id).value = txt;
      var error = Array(champ, this.msg); 
			return ( !reg.test(txt) ) ? error : null;
		
		case "numeric" :
			txt = txt.replace(/ /g, '');
			var reg = new RegExp("^[0-9]*[-/]?[0-9]*$", "g");
			document.getElementById(this.id).value = txt;
      var error = Array(champ, this.msg); 
			return ( !reg.test(txt) ) ? error : null;
			
		case "radio" :
			var objs=document.getElementsByName(this.id); 
			for(i=0;i<objs.length;i++) {
				if (objs[i].checked) return null; 
			}
      var error = Array(champ, this.msg); 
			return error; 
			
		case "select" :
			var obj = document.getElementById(this.id);
			var text_obj = obj.options[obj.selectedIndex].text;
      var error = Array(champ, this.msg); 
			return ( text_obj == "Choisissez" ) ? error : null; 
		default:
      var error = Array(champ, this.msg); 
			return (txt == "") ? error : null;
			
	}
	
}
//***** La fonction setFocus
Champ.prototype.setFocus=function() {
	document.getElementById(this.id).focus();
}
setFocus = function(id) {
	document.getElementById(id).focus();
}
//***** La fonction ChampList
function ChampListe() {
	this.items = new Array();
}
//******* la fonction traitement_error
function traitement_error(liste_erreur){
	//console.log(liste_erreur);
	str = "";
	tel_valide = true;
	if(liste_erreur["tel"] && liste_erreur["portable"]) tel_valide =false;
	for (var error in liste_erreur){
		if((
					(liste_erreur[error] == "- Le champ T&eacute;l&eacute;phone mobile est obligatoire" && error == "portable")
					||
					(liste_erreur[error] == "- Le champ T&eacute;l&eacute;phone fixe est obligatoire" && error == "tel")
				) 
				&& tel_valide == true
			){
				//console.log("on a un message d'erreur pour le telephone mais l'autre est ok");
			}
			else str += liste_erreur[error] + "<br />";
	}
	//console.log(str);
	return str;
}

//***** La fonction add
ChampListe.prototype.add=function(id,msg,type) {
	this.items.push(new Champ(id,msg,type));
}
//***** La fonction VerifierTout
ChampListe.prototype.verifierTout=function() {
	var liste_erreur = new Array();
	var result = null;
	var result_first = null;
	var result_portable = null;
	var erreur = false;
	var str = "";
	var check_tel = false;
	var check_port = false;
	for (var i=0; i < this.items.length; i++)
	{
		var code_error = [];
						if(code_error = this.items[i].verifier()){		
							 if(code_error[0] != undefined && code_error[1] != undefined && i < 1200){
									if(liste_erreur[code_error[0]] == undefined){
										liste_erreur[code_error[0]] = code_error[1];
										if(!erreur) {
											erreur = true;
											result_first = code_error[0];
										}
										
									}
							}
						} 

	}
	str = traitement_error(liste_erreur);
	if( str != "" ) {
    	montre(str);
    	move( result_first );
    }
		else{
			return null;
		} 
		
	return result_first;
}
//***** La fonction verification etape 1
function verification() { 
	var champs = new ChampListe();
	champs.add("civilite","- Le champ Civilit&eacute; est obligatoire", "radio");
	champs.add("nom","- Le champ Nom est obligatoire", "text");
	champs.add("nom","- Le champ Nom n'est pas valide", "alphabetique");
	champs.add("prenom","- Le champ Pr&eacute;nom est obligatoire", "text");
	champs.add("prenom","- Le champ Pr&eacute;nom n'est pas valide", "alphabetique");
	champs.add("email","- Le champ E-mail est obligatoire", "text");
	champs.add("email","- Le champ E-mail n'est pas valide", "email");
	champs.add("numvoie","- Le champ N&deg; de voie ne doit &ecirc;tre compos&eacute; que de chiffres", "numeric");
	champs.add("adresse","- Le champ Adresse est obligatoire", "text");
	champs.add("adresse","- Le champ Adresse n'est pas valide", "alphanum");
	champs.add("cp","- Le champ Code Postal est obligatoire", "text");
	champs.add("cp","- Le champ Code Postal n'est pas valide", "cp");
	champs.add("ville","- Le champ Ville est obligatoire", "text");
	champs.add("ville","- Le champ Ville n'est pas valide", "alphabetique");
	champs.add("tel","- Le champ T&eacute;l&eacute;phone fixe est obligatoire", "phone_vide");
	champs.add("tel","- Le champ T&eacute;l&eacute;phone fixe n'est pas valide", "phone_debut");
	champs.add("tel","- Le champ T&eacute;l&eacute;phone fixe doit contenir 10 chiffres", "phone_complet");
	champs.add("portable","- Le champ T&eacute;l&eacute;phone mobile est obligatoire", "portable_vide");
	champs.add("portable","- Le champ T&eacute;l&eacute;phone mobile n'est pas valide", "portable_debut");
	champs.add("portable","- Le champ T&eacute;l&eacute;phone mobile doit contenir 10 chiffres", "portable_complet");	 
	document.getElementById('msg_erreur').innerHTML = "";

	var champ = champs.verifierTout();
	if (champ) {
		//console.log(champ);
		//champ.setFocus();
		setFocus(champ);
		return false;
	} else {
		return true;
	}
}
//***** La fonction verification etape 2
function verification_etape2() { 
	var champs = new ChampListe();
	champs.add("list_concess","- Vous devez choisir un concessionnaire", "radio");
	champs.add("list_marque","- Vous devez choisir une marque", "select");
	champs.add("list_voiture","- Vous devez choisir un mod&egrave;le", "select");
	champs.add("changerVehicule","- Vous devez indiquer quand souhaitez vous changer de v&eacute;hicule", "select");
	document.getElementById('msg_erreur').innerHTML = "";

	var champ = champs.verifierTout();
	if (champ) {
		champ.setFocus();
		//setFocus(champ);
		return false;
	} else {
		return true;
	}
}



function validation_secure(nb_post){
	if(verification_etape2()){
			return nb_post+1;
	}else return 0;
	
}

//***************** FIN CLASS FORMULAIRE ************************
//***************************************************************

