function bulle (texte)
{

	infobulle="";
	infobulle+="<table border='0' cellspacing='0' cellpadding='0' id='info_bulle'>";
	infobulle+="  <tr>";
	infobulle+="<td style='background:url(squelettes/img/infobulle_flech_hg.gif) no-repeat;' width='20'>&nbsp;</td>";
	infobulle+="<td  style='background:url(squelettes/img/infobulle_bord_h.gif) repeat-x;'></td>";
	infobulle+="<td style='background:url(squelettes/img/infobulle_coin_hd.gif) no-repeat;' width='20'>&nbsp;</td>";
	infobulle+="</tr>";
	infobulle+="<tr>";
	infobulle+="<td background='squelettes/img/infobulle_bord_g.gif'></td>";
	infobulle+="<td bgcolor='#80A846'>"+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' >&nbsp;</td>";
	infobulle+="<td  style='background:url(squelettes/img/infobulle_bord_b.gif) repeat-x;'></td>";
	infobulle+="<td style='background:url(squelettes/img/infobulle_coin_bd.gif) no-repeat;' width='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(/[^.*]/,"<:msg_require:>");
FILTRES['alpha'] = Array(/^[a-z ._-]+$/i,"<:msg_alpha:>");
FILTRES['alphanum'] = Array('/^[a-z0-9 ._-]+$/i',"<:msg_alphanum:>");
FILTRES['integer'] = Array(/^[-+]?\d+$/,"<:msg_integer:>");
FILTRES['real'] = Array(/^[-+]?\d*\.?\d+$/,"<:msg_real:>");
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}$/,"<:msg_date:>");
FILTRES['email'] = Array(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,"<:msg_email:>");
FILTRES['phone'] = Array(/^[\d\s ().-]+$/,"<:msg_phone:>");
FILTRES['url'] = Array(/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i,"<:msg_url:>");
FILTRES['confirm'] = Array("<:msg_confirm:>");
*/

FILTRES['required'] = Array(/[^.*]/,"Ce champs est obligatoire.");
FILTRES['alpha'] = Array(/^[a-z \'._-àáâãäåòóôõöèéêëçìíîïùúûüÿñ]+$/i,"Ce champs n\'accepte que les lettres(sauf '._-).");
FILTRES['alphanum'] = Array(/^[a-z0-9 \,\'._-]+$/i,"Ce champs n\'accepte pas les caracteres speciaux(sauf ',._-).");
FILTRES['integer'] = Array(/^[-+]?\d+$/,"Ce champs n\'accepte que les chiffres entiers.");
FILTRES['real'] = Array(/^[-+]?\d*\.?\d+$/,"Ce champs n\'accepte 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 champs ce champs n\'accepte que les dates(MM/JJ/AAAA).");
FILTRES['date'] = Array(/^([0-3][0-9])[\/\-\.](0[1-9]|1[0-2])[\/\-\.]([0-9]{4})$/,"Ce champs n\'accepte que les dates(JJ/MM/AAAA).");
FILTRES['email'] = Array(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,"Entrer un courriel valide.");
FILTRES['phone'] = Array(/^[\d\s ().-]+$/,"Entrer un numero 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,"Entrer 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.");



function insert_div_msg(msg_erreur,field,form)
{
if(field[0].type=="radio")
{
//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");
}
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=="")
		{
			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 suitter donc  il ne se passe rien  du fait sue 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
			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.display="none"; 
		_completeDiv.className="fValidator-msg"; 
		_completeDiv.innerHTML=bulle(msg_erreur);
		_completeDiv.id=field.attr("id")+"_msg_erreur";
		
		document.body.appendChild(_completeDiv);		
		 if( field[0].type!="radio")
			etat_champ(field.attr("id"),'invalid');
		//alert($('#'+_completeDiv.id));	
			//$('#'+_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);
			
		
			
			
			
		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"]="#80A846";
	champ_a_style.style["borderColor"]="black";
	}

	if(etat=="valid"){
	champ_a_style.style["background"]="#FFF";
	champ_a_style.style["borderColor"]="#62002F";
	}

}

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"){
			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 cryptogramme
		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 gradient(id, level){
	var box = document.getElementById(id);
	box.style.opacity = level;
	box.style.MozOpacity = level;
	box.style.KhtmlOpacity = level;
	box.style.filter = "alpha(opacity=" + level * 100 + ")";
	box.style.display="block";
	return;
}
function fadein(id) {
	var level = 0;
	while(level <= 1)
	{
		setTimeout( "gradient('" + id + "'," + level + ")", (level* 1000) + 10);
		level += 0.01;
	}
}
// Close the lightbox
function closebox(){
   document.getElementById('box').style.display='none';
   document.getElementById('filter').style.display='none';
	selects = document.getElementsByTagName("select");		
	for (i = 0; i != selects.length; i++) {
			selects[i].style.visibility = "visible";
	}
}
// Envoi form
function envoiForm(){
   document.formulaire.submit();  
}

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 if(document.formulaire.tel_domicile.value.length == 0 && document.formulaire.tel_professionnel.value.length == 0){

		// Hide select boxes as they will 'peek' through the image in IE
		selects = document.getElementsByTagName("select");		
        for (i = 0; i != selects.length; i++) {
                selects[i].style.visibility = "hidden";
        }
	
		function openbox(formtitle, fadin)
		{
		  var box = document.getElementById('box'); 
		  document.getElementById('filter').style.display='block';
		
		  var btitle = document.getElementById('boxtitle');
		  btitle.innerHTML = formtitle;
		  
		  if(fadin)
		  {
			 gradient("box", 0);
			 fadein("box");
		  }
		  else
		  { 	
			box.style.display='block';
		  }  	
		}

	  	openbox('Vous n\'avez pas saisi votre num&eacute;ro de t&eacute;l&eacute;phone', 1);
	  	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, '');
			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;
}

