



function test_mail(mail,type_verif)
{
var url = "index.php?page=testMail&email="+mail+"&type_verif="+type_verif;
var valeur_reponse="";

	var _xmlHttp=getXMLHTTP();
	if(_xmlHttp&&_xmlHttp.readyState!=0){
	    _xmlHttp.abort()
	  }
			_xmlHttp=getXMLHTTP();
			if(_xmlHttp){
			//appel à l'url distante
			_xmlHttp.open("GET",url,false); //(false)pour envoyer les requete une fois que la presedente est fini donc syncrone
			_xmlHttp.send(null); 
			if(_xmlHttp.readyState  == 4 && _xmlHttp.responseText){
				 if(_xmlHttp.status  == 200) {
					valeur_reponse = _xmlHttp.responseText ;//on recupre les reponse de la requete et on la passe dans une fonction pour traiter les reponses
				}
			}
	  }

return valeur_reponse;
}

function bulle (texte,deplacer){
if(deplacer){
var hg = "infobulle_coin_hg.gif";
var hd = "infobulle_flech_hd.gif";}
else{
var hg = "infobulle_flech_hg.gif";
var hd = "infobulle_coin_hd.gif";}

		infobulle="";
	infobulle+="<table border='0' cellspacing='0' cellpadding='0' id='info_bulle'>";
	infobulle+="  <tr>";
	infobulle+="<td style='background:url(squelettes/img/"+hg+") no-repeat;'  width='20'height='20'>&nbsp;</td>";
	infobulle+="<td  style='background:url(squelettes/img/infobulle_bord_h.gif) repeat-x;'  height='20'></td>";
	infobulle+="<td style='background:url(squelettes/img/"+hd+") no-repeat;'  width='20'height='20'>&nbsp;</td>";
	infobulle+="</tr>";
	infobulle+="<tr>";
	infobulle+="<td background='squelettes/img/infobulle_bord_g.gif'></td>";
	infobulle+="<td bgcolor='#bedcf1'>"+texte+"</td>";
	infobulle+="<td background='squelettes/img/infobulle_bord_d.gif'></td>";
	infobulle+="</tr>";
	infobulle+="<tr>";
	infobulle+="<td style='background:url(squelettes/img/infobulle_coin_bg.gif) no-repeat;'  width='20'height='20' >&nbsp;</td>";
	infobulle+="<td  style='background:url(squelettes/img/infobulle_bord_b.gif) repeat-x;'height='20'></td>";
	infobulle+="<td style='background:url(squelettes/img/infobulle_coin_bd.gif) no-repeat;'  width='20'height='20'>&nbsp;</td>";
	infobulle+="</tr>";
	infobulle+="</table>";
		return infobulle;
}
function calculateOffset(r,attr)
{
var kb=0;
while(r)
{
kb+=r[attr];
r=r.offsetParent ;
}
	return kb;
}


var FILTRES=new Array;
var tab_champ=new Array;
/*
FILTRES['required'] = Array(/[^.*]/,"Ce champ est obligatoire.");
FILTRES['alpha'] = Array(/^[a-z ._-]+$/i,"Ce champ accepte que les lettes(sauf ._-).");
FILTRES['alphanum'] = Array('/^[a-z0-9 ._-]+$/i',"Ce champ n&rsquo;accepte pas les caracteres sp&eacute;ciaux(sauf ,._-).");
FILTRES['integer'] = Array(/^[-+]?\d+$/,"Ce champ n&rsquo;accepte que les chiffres entiers.");
FILTRES['real'] = Array(/^[-+]?\d*\.?\d+$/,"Ce champ n&rsquo;acepte que les chiffres.");
FILTRES['date'] = Array(/^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$/,"Ce champ n&rsquo;accepte que les dates(JJ/MM/AAAA).");
FILTRES['email'] = Array(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,"Entrez une adresse mail valide.");
FILTRES['phone'] = Array(/^[\d\s ().-]+$/,"Entrez un num&eacute;ro valide.");
FILTRES['url'] = Array(/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i,"Entrez une URL valide.");
FILTRES['confirm'] = Array("Confirmez le mot de passe.");
*/
//[a-zA-Z0-9]
FILTRES['required'] = Array(/[^.*]/,"Ce champ est obligatoire.");
FILTRES['alpha'] = Array(/^[a-zàáâãäåòóôõöèéêëçìíîïùúûüÿñ \'._-]+$/i,"Ce champ accepte que les lettes(sauf ._-).");
FILTRES['alphanum'] = Array(/^[a-z0-9àáâãäåòóôõöèéêëçìíîïùúûüÿñ  \,\'._-]+$/i,"Ce champ accepte que les lettes(sauf ._-).");
FILTRES['integer'] = Array(/^[-+]?\d+$/,"Ce champ n&rsquo;accepte que les chiffres entiers.");
FILTRES['real'] = Array(/^[-+]?\d*\.?\d+$/,"Ce champ n&rsquo;acepte que les chiffres.");
//FILTRES['date'] = Array(/^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$/,"Ce champ n&rsquo;accepte que les dates(JJ/MM/AAAA).");
FILTRES['date'] = Array(/^([0-3][0-9])[\/\-\.](0[1-9]|1[0-2])[\/\-\.]([0-9]{4})$/,"Ce champ n&rsquo;accepte que les dates(JJ/MM/AAAA).");
FILTRES['email'] = Array(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,"Entrez une adresse mail valide.");
FILTRES['phone'] = Array(/^[\d\s ().-]+$/,"Entrez un num&eacute;ro valide.");
//FILTRES['phone'] = Array(/^\d{10}$/ ,"Entrer un numero valide.");
FILTRES['url'] = Array(/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i,"Entrez une URL valide.");
FILTRES['confirm'] = Array("Confirmez le mot de passe.");
FILTRES['confirmemail'] = Array('email',"Confirmez votre mail.");
FILTRES['crypto'] = Array('',"code cryptogramme mauvais.");
FILTRES['majeur'] = Array('',"vous devez avoir 18 ans pour jouer.");
FILTRES['verifemail'] = Array('',"Ce mail est d&eacute;j&agrave; utlilis&eacute; dans le jeu.");
FILTRES['verifemailinverse'] = Array('',"Ce mail n&rsquo;est pas reconnu par le jeu.");
FILTRES['formatcode'] = Array(/^[0-9]{8}$/,"Mauvais format pour ce code.");
FILTRES['verificationCompte'] = Array('email_inscrit',"Ce mot de passe est incorrect.");


function insert_div_msg(msg_erreur,field,form)
{
var deplacer=false;
if(field[0].type=="radio" || field[0].type=="checkbox")
{
var deplacer=true;
//pour recupere a chaque fois le dernier bouton de radio et afficher l'info bulle a coter
	//var nlButtonGroup = document.forms[form].elements[field[0].name];
	//var element_input = document.getElementById(nlButtonGroup[(nlButtonGroup.length-1)].id);	//pour calculer sa position dans la classe
	//var element_div = document.getElementById(nlButtonGroup[(nlButtonGroup.length-1)].name+"_msg_erreur");

var element_input = document.getElementById(field.attr("id"));	//pour calculer sa position dans la classe
	var element_div = document.getElementById(field.attr("name")+"_msg_erreur");

}
else
{

	var element_input = document.getElementById(field.attr("id"));	//pour calculer sa position dans la classe
	var element_div = document.getElementById(field.attr("name")+"_msg_erreur");
}	
	

	//*****ici on efface le div du message d'erreur en cour*****/
	if(element_div || (element_div  && msg_erreur==""))//on test si le div d'erreur deja donc on le réafiche pas
	{
	document.body.removeChild(element_div)
		if(msg_erreur=="")
		{
			 if( field[0].type!="radio" && field[0].type!="checkbox")
			etat_champ(field.attr("id"),'valid');//on remet la couleur initiale a l'element en cour qui est valide
		}
	}
	//*****fin*****//
	
	//*****ici on va tester si on change de champ grace au tableau qu'on creer quand on insere un div*****//
	//*****si on revien sur le champs en cour c'est le meme champ qu'on va quitter donc  il ne se passe rien  du fait que le div du msq d'erreur en cour et supprimer juste avant donc il ne le connait pas*****//
	if(tab_champ.length>0)
	{
		
		for(var i = 0; i < tab_champ.length; i++)//on boucle grace au tableau d'erreur
		{
			var element_div_suppr = document.getElementById(tab_champ[i]);
			
			if(element_div_suppr)//ici on test si le div du msg d'erreur est creer permet de ne pas faire d'erreur quand on reste sur le meme champ
			{
			document.body.removeChild(element_div_suppr)//pour supprimer l'ancien message d'erreur d'un autre champ
			var id_input = tab_champ[i].replace(/_msg_erreur/g, '');//on recupre l'id du champ concerner par le message d'erreur
			 if( field[0].type!="radio" && field[0].type!="checkbox")
			etat_champ(id_input,'valid');//on remet la couleur initiale a l'ancien champs meme si il n'est pas bon car on change de champ
			}
		}
	}
	
	if(msg_erreur!="")
	{

			var hauteur_element = element_input.offsetHeight;/*pour calculer la hateur d'un element */
			var largeur_element = element_input.offsetWidth;/*pour calculer la largeur d'un element */
			var position_hauteur_2 = calculateOffset(element_input,"offsetTop") ;
			var position_gauche_2 = calculateOffset(element_input,"offsetLeft");

		 _completeDiv=document.createElement("DIV");
		_completeDiv.style.position="absolute"; 
		_completeDiv.style.top=position_hauteur_2+"px"; 
		//_completeDiv.style.left=largeur_element+position_gauche_2+"px"; 
		_completeDiv.style.left=largeur_element+position_gauche_2+"px"; 
		_completeDiv.style.display="none"; 
		_completeDiv.className="fValidator-msg"; 
		_completeDiv.innerHTML=bulle(msg_erreur,deplacer);
		_completeDiv.id=field.attr("id")+"_msg_erreur";
		
		document.body.appendChild(_completeDiv);
		
		 if( field[0].type!="radio" && field[0].type!="checkbox"){
			etat_champ(field.attr("id"),'invalid');
			}
			
			//$('#'+_completeDiv.id).slideToggle('slow');
			$('#'+_completeDiv.id).fadeIn(1000);
			//$('#'+_completeDiv.id).slideToggle(1500);
			//$('#'+_completeDiv.id).show("slow");
			//$('#'+_completeDiv.id).animate({left: largeur_element+position_gauche_2, opacity: 'show' }, 1000);
			
		
		if(deplacer)
			_completeDiv.style.left=position_gauche_2-document.getElementById(_completeDiv.id).offsetWidth+"px"; 
			
		tab_champ[0]=field.attr("id")+"_msg_erreur";//on met l'id du div dans un tableau pour le garder en memoire et faire des tests par la suite 
	}
}


function etat_champ(id,etat)//pour mettre le champ dans une autre couleur grace a l'id
{
	var champ_a_style = document.getElementById(id);	//pour calculer sa position dans la classe

	if(etat=="invalid"){
	champ_a_style.style["background"]="#bedcf1";
	champ_a_style.style["borderColor"]="black";
	}

	if(etat=="valid"){
	champ_a_style.style["background"]="#FFF";
	champ_a_style.style["borderColor"]="#286EA2";
	}

}

function valide_champ(field,form)
{
var resultat = compare_champ_expr(field,form);//on appel la fonction pour tester le champs est valide ou pas 
	insert_div_msg(resultat,field,form);
}

function compare_champ_expr(field,form)
{
var msg_erreur="";
var champ_filtre ="";

//console.log(field[0].type);
champ_filtre = eval(field.attr("class").match(/^fValidate(\[.+\])$/)[1]);//on fait un tableau avec les erreur possible grace a la classe sur le champ
var valeur_champ = field.val();//on recuprere la valeur du champ

	for(var i = 0; i < champ_filtre.length; i++)//on boucle grace au tableau d'erreur
	{
	var resultat=true;
	
		//console.log('l\'expression reguliere : '+FILTRES[champ_filtre[i]][0]);
		if(field[0].type=='text' || field[0].type=="textarea" || field[0].type=='password' ){
			if(valeur_champ=="" && champ_filtre[i]=="required")
				resultat = valeur_champ.match(FILTRES[champ_filtre[i]][0]);//champ_filtre peu contenir toute les valeur (required,alpha)
			else if(valeur_champ!="")
				resultat = valeur_champ.match(FILTRES[champ_filtre[i]][0]);//champ_filtre peu contenir toute les valeur (required,alpha)
		}

		if(field[0].type=="select-one")
			resultat = valeur_champ.match(FILTRES[champ_filtre[i]][0]);//champ_filtre peu contenir toute les valeur (required,alpha)
		if(field[0].type=="radio")
		{
			var nlButtonGroup = document.forms[form].elements[field[0].name];
			var isValid = false;
	 		for(var y = 0; y < nlButtonGroup.length; y++) {
				if(nlButtonGroup[y].checked) 
					isValid = true;
			}
			if(!isValid)
			resultat = null;//si il n'y a pas de bouton checked
			else
			resultat = true;//si il y a un bouton checked
		}
		
		if(field[0].type=="checkbox"){
		if(!field[0].checked)
			resultat = null;//si il n'y a pas de bouton checked
		else
			resultat = true;//si il y a un bouton checked
		}

		if(champ_filtre[i]=='confirmemail'){
			if(valeur_champ!=""){
				if (valeur_champ==$('#'+FILTRES[champ_filtre[i]][0]).val())
					resultat=true;
				else
					resultat=false;
			}
		}
		
		//pour la verification du mail
		if(champ_filtre[i]=='verifemail' || champ_filtre[i]=='verifemailinverse'){
			if(valeur_champ!="" && valeur_champ.match(FILTRES['email'][0])){
				var type_verif;
				if(champ_filtre[i]=='verifemail') type_verif=1;
				if(champ_filtre[i]=='verifemailinverse') type_verif=2;
				var code_test = test_mail(valeur_champ,type_verif);
					if(code_test==1)
						resultat=null;
					else
					resultat=true;
				}
		}
		//verification du compte
		if(champ_filtre[i]=='verificationCompte'){
				resultat=true;
			var mail = $('#'+FILTRES[champ_filtre[i]][0]).val();
			var mdp = valeur_champ;
			if(mdp!="" && mail!="" &&  mail.match(FILTRES['email'][0]) && test_mail(mail,2)==0 ){
			
				$.ajax({
					type: "GET",
					url: "spip.php?action=testinscrit",
					async: false,
					data: "mail="+mail+"&mdp="+mdp,
					success: function(data){
					if(data)
						resultat=true;
					else
						resultat=null;
				}});
			}
		}
		//pour la verification du cryptogramme
		if(valeur_champ!=""){
			if(champ_filtre[i]=='crypto' ){
				var code_test = test_captcha();
					if(code_test!=1)
						resultat=null;
					else
					resultat=true;
				}
		}
		
		if(champ_filtre[i]=='majeur'){
				var reg=new RegExp("[./-]", "g");
				if(valeur_champ.split(reg).length>1 && valeur_champ.match(FILTRES['date'][0])){
				var date = valeur_champ.split(reg);
				var myDate=new Date(date[2],(date[1]-1),date[0]);
				var today = new Date((new Date().getFullYear()-18),(new Date().getMonth()),(new Date().getDate()));
				if( myDate<=today)
				resultat=true;
				else
				resultat=null;
				}
			}
		if( !resultat )
			msg_erreur +=FILTRES[champ_filtre[i]][1]+"<br />";//si le champ n'sest pas valide par rapport aux expression on met le message d'erreur propre a l'expression
	}
	if(msg_erreur!="")return (msg_erreur);
	else return false //retourne false si il n'y a aucun message d'erreur ce qui signifie que la valeur du  champ est bonne
}

function verif_submit_form(form)
{

var trouve=false;
var msg_erreur="";
var div_ereur="";
		
$('#'+form+' :input').each( function(){

	var resultat_comp="";
	if($(this).attr("class") && $(this).attr("class").match(/^fValidate(\[.+\])$/))//on test si le champs a bien une classe et si cette classe est bien fvalidate
	{
		var resultat_comp = compare_champ_expr($(this),form);//on appel la fonction pour tester le champs est valide ou pas 
		if(resultat_comp && trouve==false)
		{
			trouve=true;
			div_ereur=$(this); 
			msg_erreur=resultat_comp;
		}
	}
	
 });

	if(trouve==true){
	insert_div_msg(msg_erreur,div_ereur,form);
	return false;
	}
	else
	return true;//por envoyer le formulaire
	
	
}

function remis_a_zero()
{
	if(tab_champ.length>0)
	{
		for(var i = 0; i < tab_champ.length; i++)//on boucle grace au tableau d'erreur
		{
			var element_div_suppr = document.getElementById(tab_champ[i]);
			
			if(element_div_suppr)//ici on test si le div du msg d'erreur est creer permet de ne pas faire d'erreur quand on reste sur le meme champ
			{
			document.body.removeChild(element_div_suppr)//pour supprimer l'ancien message d'erreur d'un autre champ
			var id_input = tab_champ[i].replace(/_msg_erreur/g, '');
			 if( field[0].type!="radio" && field[0].type!="checkbox")
			etat_champ(id_input,'valid');//on remet la couleur initiale a l'ancien champs meme si il n'est pas bon car on change de champ
			}
		}
	}
}

function init_form(form)
{

$('#'+form+' :input').each( function(){
	$(this).bind("blur", function(){
		if($(this).attr("class") && $(this).attr("class").match(/^fValidate(\[.+\])$/))
		{
		valide_champ($(this),form);
	 //  console.log( $(this).attr("id") +" " +$(this).val()+" "+ $(this).attr("class"));
	   }
	 });
 });
$('#'+form).bind("submit", function(){ return verif_submit_form(form)});//on passe en variable le nom du formulaire
$('#'+form).bind("reset", function(){ remis_a_zero()});//on passe le nom du formulaire

}

function reset_form(nom_formulaire)
{
document.getElementById(nom_formulaire).reset();
return false;
}