var custom_validators = {
	number: {
		className: "number",
		defaultMessage: "This field must have a numerical value.",
		regExp: /^[-]?\d+(\.\d+)?$/
	},
	digits: {
		className: "digits",
		defaultMessage: "This field can only contain numbers.",
		regExp: /^[-]?\d+(\.\d+)?$/
	},
	email: {
		className: "email",
		defaultMessage: "L'adresse email n'est pas valide.",
		regExp: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/
	},
	uscanzip: {
		className: "uscanzip",
		defaultMessage: "This field must contain a valid US or Canada zip code.",
		regExp: /^((\d{5}([- ])\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d))$/
	},
	usstate: {
		className: "usstate",
		defaultMessage: "This field must contain a valid 2 letter US state code.",
		regExp: /^(A[LKSZRAEP]|C[AOT]|D[EC]|F[LM]|G[ANU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$/
	},
	usphone: {
		className: "usphone",
		defaultMessage: "This field must contain a valid US phone number with area code.",
		regExp: /^([0-9]( |-|.)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-|.)?([0-9]{3}( |-|.)?[0-9]{4}|[a-zA-Z0-9]{7})$/
	},
	creditcard: {
		className: "creditcard",
		defaultMessage: "This field must contain a valid credit card number.",
		regExp: /^((4\d{3})|(5[1-5]\d{2})|(6011))([- ])?\d{4}([- ])?\d{4}([- ])?\d{4}|3[4,7]\d{13}$/
	},
	ssn: {
		className: "ssn",
		defaultMessage: "This field must contain a valid social security number.",
		regExp: /(^|\s)(00[1-9]|0[1-9]0|0[1-9][1-9]|[1-6]\d{2}|7[0-6]\d|77[0-2])(-?|[\. ])([1-9]0|0[1-9]|[1-9][1-9])\3(\d{3}[1-9]|[1-9]\d{3}|\d[1-9]\d{2}|\d{2}[1-9]\d)($|\s|[;:,!\.\?])/
	},
	alpha: {
		className: "alpha",
		defaultMessage: "Ce champ doit contenir du texte.",
		regExp: /^[a-zA-z\s]+$/
	},
	alphanum: {
		className: "alphanum",
		defaultMessage: "This field must contain only letters or numbers.",
		regExp: /^.+$/
	}
};


function lister_champs(formulaire)//icic la fonction qui va générer les éléments a envoyer
{
	var theform=document.forms[formulaire];
   	var url='';
  	for (i=0; i<theform.elements.length; i++){
       if(((theform.elements[i].type=='radio' || theform.elements[i].type=='checkbox') && theform.elements[i].checked==true) || (theform.elements[i].type!='radio' && theform.elements[i].type!='checkbox'))//control si c'est des radio ou check box et incrémente le résultat QUE si c'est coché (sans ça il prendrais les deux)
           {
			   if(theform.elements[i].type=='select-multiple' || theform.elements[i].type=='select' )//si c'est un select multiple 
			   {
			    for(j = theform.elements[i].length-1; j >= 0; j-=1)//on parcours les element du select multiple
			       {
			          if(theform.elements[i].options[j].selected)//si selectionné on incremente
			             {
			                             if(url){url+='&';}
			           url+=theform.elements[i].name+'='+theform.elements[i].options[j].value;
			             }
			     }
			   }
   			if(url){
   				url+='&';
   			}
   			if(theform.elements[i].type!='select-multiple'){
   				  url+=theform.elements[i].name+'='+theform.elements[i].value;}
           	}
        }
		return url;//onretourne le resultat vers la fonction appelée
}


function affiche_erreur(fields,affiche,message){

	divErreur=document.getElementById("error_"+fields);
	
	divErreur.innerHTML=message;
	if(affiche){
		
		divErreur.style.display='inline';
	}else{
	
		divErreur.style.display='none';
	}
};

function validerFormulaire(formulaire) {
      var form=document.forms[formulaire];
     	var  fields =form.elements;
     	var ok=true;
     	
     	for(j=0; j < fields.length; j++){
     		if(fields[j].className){
     			
     			var classes = fields[j].className.split(" ");
     			for(c=0; c < classes.length; c++){
     				for(items in custom_validators){
	     				if(classes[c] == custom_validators[items]['className']){
	     						var thisRegExp = custom_validators[items]['regExp'];
								if(!thisRegExp.test(fields[j].value)){
									ok = false;
									affiche_erreur(fields[j].name,true,custom_validators[items]['defaultMessage']);
								}else{
									affiche_erreur(fields[j].name,false,'');
								}
	     				
	     				}
     				}
     			}
     		}	
     	
     	}
     	
      return ok;
}




function envoieRequeteGET(url,id){
		var httpRequest = null;
		var contenair=document.getElementById(id);
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
                
            }
        }
        else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {}
            }
        }

        if (!httpRequest) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }

	
		// On ouvre la requete vers la page désirée
		
		var urlComplete=encodeURI(url)+"?ms="+ new Date().getTime()
		httpRequest.open("GET", urlComplete, true);
		httpRequest.setRequestHeader("Cache-Control","no-cache");

		httpRequest.onreadystatechange = function() { alertContents(httpRequest,contenair); };
		
		httpRequest.send(null);
	
	}
	
	function envoieRequetePOST(formulaire,url,id,urlretour){
		var httpRequest = null;
		var contenair=null;
		if(id){
			var contenair=document.getElementById(id);
		}
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
                
            }
        }
        else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {}
            }
        }

        if (!httpRequest) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }

	
		// On ouvre la requete vers la page désirée
		
		var urlComplete=encodeURI(url)+"?ms="+ new Date().getTime()
		httpRequest.open("POST", urlComplete, true);
		httpRequest.setRequestHeader("Cache-Control","no-cache");
		httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		
		if(contenair){
			httpRequest.onreadystatechange = function() {alertContents(httpRequest,contenair,urlretour,true);};
  								 
  		}	
  		
		httpRequest.send(lister_champs(formulaire));
		
	}
	
	
	
	function alertContents(httpRequest,contenair,urlretour,post) {
		
        try {
            if (httpRequest.readyState == 4 && httpRequest.status!=0 ) {
            	
                if (httpRequest.status == 200) {
                   	if(post){
                   		var etat=httpRequest.responseText;
                   		
                   		if(etat=='OK'){
                   			if(urlretour){
                   				envoieRequeteGET(urlretour,contenair.id);    			    
                   			}
                   		}else{
                   			contenair.innerHTML="Une erreur est survenue"
                   		}
                   	
                   	}else{
                   		contenair.innerHTML=httpRequest.responseText;
                   		changehauteur();
                   		setTimeout(function(){
                   			executeScript(contenair.id);
                   		},500);
                   	}
					
                    
                } else {
                	alert('Un problème est survenu au cours de la requête : ' +httpRequest.status ) ;
                    
                }
            }
        }
        catch( e ) {
            alert("Une exception s'est produite : " + e.description);
        }

		
    }
	
	function executeScript(contenant){
		
		var js = document.getElementById(contenant).getElementsByTagName('div');

			if(js.length>0){
				for( var i in js )
				{	
					if(js[i].className && js[i].className=="script"){
						
						eval(js[i].innerHTML);
					}
				}
			}
	}	
	
		
	
	
	var memoire_Position=122;
	function changehauteur(){
			
			var baspage = document.getElementById("basdepage");
			
		 setTimeout(function(){
		 	var fenetre = document.getElementById("fenetre");
		 	var h1=0;
			if(fenetre){
				h1=fenetre.clientHeight;
			}
		 	if(h1<100) h1=1500;
		 	glisseToPosition(baspage,memoire_Position,(140+h1));
		 	memoire_Position=140+h1;
		},1000);
	}
	
	function glisseToPosition(div,debut,fin){
			div.style.top=debut+"px";
			
			if(debut>(fin+5)) {
				var pos=debut-5;
				setTimeout(function(){ glisseToPosition(div,pos,fin); },10);
			}else if(debut<(fin-5)) {
				var pos=debut+5;
				setTimeout(function(){ glisseToPosition(div,pos,fin); },10);
			}
			
	}
	
	
	function getTotalHeight() {

		  // firefox is ok
		  var height = document.documentElement.scrollHeight;
		
		  // now IE 7 + Opera with "min window"
		  if(document.documentElement.clientHeight > height ) {
		    height  = document.documentElement.clientHeight;
		  }
		  // last for safari
		  if(document.body.scrollHeight > height) {
		    height = document.body.scrollHeight;
		  }
		  return height;	
	}
	
	function createMarker(point,text) {
	  var marker = new GMarker(point);
	  GEvent.addListener(marker, "click", function() {   marker.openInfoWindowHtml(text);  });
	  return marker; //fonction qui affiche l'info bulle légende sur le marqueur
	}
	function loadMap() {
		if (GBrowserIsCompatible()) {
		
			var Lat=50.667076 // rentrez ici votre longitude
			var Lng=3.137819 // rentrez ici votre lattitude
			var Zoom=16 // rentrez ici le zoom désiré entre 1 et 16
			var TextAffiche="<b>MIEUX VIVRE<br/>PAR LA GASTRONOMIE</b><br/><small>Coordonnées GPS :</small><br/><small>50.667076, 3.137819</small>"; // rentrez ici votre texte qui sera affiche sur le point marqueur
			var map = new GMap2(document.getElementById("map")); // affiche le module
			
			map.setCenter(new GLatLng(Lat,Lng ),Zoom ); //affiche la carte au lieu précisé
			map.addControl(new GSmallMapControl()); // affiche le curseur de zoom
			map.addControl(new GMapTypeControl()); // affiche le curseur de déplacement
	 
			var point = new GLatLng(Lat,Lng);
			var marker = createMarker(point,TextAffiche);
			map.addOverlay(marker); // ces 3 lignes définissent le point et sa légende
		}else{
			document.getElementById("map").style.height="5px";
		}
	}



