// JavaScript Document
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// MISE EN PLACE DES CONTROLES AUTOMATIQUE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ( typeof(wFORMS) != "undefined" )  {
	//$(document).ready(init)
	//$(document).ready(focus_premier_champ_a_remplir)
	//$(document).ready(initFormSecond)
	addAnEvent(window,'load',init);
	addAnEvent(window,'load',focus_premier_champ_a_remplir);
	addAnEvent(window,'load',initFormSecond);
}

/* AJOUT TAG WISA */
if ( typeof(initTagWISA) != "undefined" )  {
	//$(document).ready(initTagWISA)
	addAnEvent(window,'load',initTagWISA);
}
/* AJOUT TAG WISA */

baseurl = "/assurpeople/";

GLOBAL_imageCorrect = "images/fonds/champ-ok.gif";
GLOBAL_imageErreur = "images/fonds/champ-ko.gif";
GLOBAL_blacklist_tel = "";

function controle_depuis_cal() {
		verifchampunique("fn", this.inputField)
}
	
function initFormSecond () {

	if (window.console) window.console.log("init3")
	
	//all_inputs 	= formulaire.getElementsByTagName("input");
	ini_blacklist_tel();
	ini_blocages_claviers();
			
}

function focus_premier_champ_a_remplir () {

	if (window.console) window.console.log("init2")
	
	var trouve = false
	
	for (var i=0; i<=(tabchamps.length-1); i++){ 
		if (tabchamps[i][1] == "requis") trouve = true;break;
	}
	
	try { 
		formulaire[ tabchamps[i][0] ].focus()
	}
	catch (e) {}; // j'evite les erreurs
}

/*function creer_coherence () {
	
}*/

function creer_condition (conditions_champ_value, champs, divs, comparaison, champs_a_masquer_dependances, elements_a_masquer_dependances) {
	
	a_attacher_a_un_champ (conditions_champ_value, champs, divs, comparaison, champs_a_masquer_dependances, elements_a_masquer_dependances);
	
	//conditions_champ_value = conditions dans un tableau
	//champs = tableau ou chaine, champ a afficher si champ_source valide
	//divs = tableau ou chaine, div a afficher si champ_source valide
	//champs_a_masquer_dependances = on prevoit si il y a inbriquation
	//elements_a_masquer_dependances = on prevoit si il y a inbriquation
	//comparaison = defini le type de comparaison, par defaut tout doit etre egale, "ou", au moins un egale
	
	for (var e=0; e<=(conditions_champ_value.length-1); e++){
			
			
		var champ 								= formulaire[ conditions_champ_value[e][0] ];
				
		champ.conditions_champ_value 			= conditions_champ_value;
		champ.champs 							= champs;
		champ.divs 								= divs;
		champ.comparaison 						= comparaison;
		champ.champs_a_masquer_dependances	 	= champs_a_masquer_dependances;
		champ.elements_a_masquer_dependances 	= elements_a_masquer_dependances;
			
			
			
		if (champ.type == "select-one") {
			
			fnConnect(champ, "change", function() { a_attacher_a_un_champ(conditions_champ_value, champs, divs, comparaison, champs_a_masquer_dependances, elements_a_masquer_dependances); }, false);
			
			//champ.onchange = function() { a_attacher_a_un_champ(conditions_champ_value, champs, divs, comparaison, champs_a_masquer_dependances, elements_a_masquer_dependances); }
			
			//if (window.console) window.console.log(champ.onchange)
			
						
		}else if (champ.type == null ){
		
			for (var j=0; j<=(champ.length-1); j++){
				fnConnect(champ[j], "click", function() { a_attacher_a_un_champ (conditions_champ_value, champs, divs, comparaison, champs_a_masquer_dependances, elements_a_masquer_dependances); }, false);			
			}
			
		}else{
			
		fnConnect(champ, "blur", function() { a_attacher_a_un_champ (conditions_champ_value, champs, divs, comparaison, champs_a_masquer_dependances, elements_a_masquer_dependances); }, false);
		}
			
	}
		
	function a_attacher_a_un_champ (conditions_champ_value, champs, divs, comparaison, champs_a_masquer_dependances, elements_a_masquer_dependances) {
		
		
		controle_nbre = 0;
			
		for (var e=0; e<=(conditions_champ_value.length-1); e++){
			
			var champ 					= formulaire[ conditions_champ_value[e][0] ];
			
			var value_champ            = champ.type == null ? getRadioValue(champ) : champ.value
						
			/*if (champ.type == null ) 
			{
				controle_nbre		 	= getRadioValue(champ) == conditions_champ_value[e][1] ? controle_nbre + 1 : controle_nbre;
			}else{*/
				/*if (comparaison == "sup") {
					controle_nbre 			= champ.value > conditions_champ_value[e][1] ? controle_nbre + 1 : controle_nbre;
					}else{
					//document.title = comparaison;
					controle_nbre		 	= champ.value == conditions_champ_value[e][1] ? controle_nbre + 1 : controle_nbre; // element d'origine
				}*/
					
				switch(comparaison) //controle de coherence
					{
						case "dif":
							controle_nbre 			= value_champ != conditions_champ_value[e][1] ? controle_nbre + 1 : controle_nbre;
							break
						case "inf":
							controle_nbre 			= value_champ < conditions_champ_value[e][1] ? controle_nbre + 1 : controle_nbre;
							break
						case "sup":
							controle_nbre 			= value_champ > conditions_champ_value[e][1] ? controle_nbre + 1 : controle_nbre;
							break
						default:
							controle_nbre		 	= value_champ == conditions_champ_value[e][1] ? controle_nbre + 1 : controle_nbre; // element d'origine
							//console.debug(value_champ + " - " + conditions_champ_value[e][1])
							break
					}
				
			//}
		
		}
		
		//document.title = controle_nbre + " == " + conditions_champ_value.length
		var afficher_ou_masquer	 		= controle_nbre == conditions_champ_value.length ? "afficher" : "masquer";
		if (comparaison == "ou")		var afficher_ou_masquer = controle_nbre >= 1 ? "afficher" : "masquer";	
			
		afficher_ou_masquer_un_champ (champs, divs, afficher_ou_masquer);
									
	}
	
	
}

function recuperer_index_a_partir_du_nom (nom) {
	
	for (var i=0; i<=(tabchamps.length-1); i++){ 
		if (tabchamps[i][0] == nom) var index = i;
	}
	return index;
}

// fonction permettant d'afficher un champ et egalement d'activer son controle
// v2 ajout de la gestion des tableaux pour les variables
function afficher_ou_masquer_un_champ (nom_du_champ,conteneur,afficher_ou_masquer) {
	//console.debug(nom_du_champ,conteneur,afficher_ou_masquer)
	var valeur_affichage 	= afficher_ou_masquer == "afficher" ? "block" : "none";
	var methode_jquery		= afficher_ou_masquer == "afficher" ? "slideDown" : "hide"; // jquery 250209
	var valeur_controle 	= afficher_ou_masquer == "afficher" ? "requis" : "inactif";
	var disable_bool	 	= afficher_ou_masquer == "afficher" ? true : false;
					
	if (nom_du_champ != null) {
		
		if(typeof(nom_du_champ) == "object") {
			for (var d=0; d<=(nom_du_champ.length-1); d++){
				
				var test = formulaire[ tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ[d] ) ][0] ];
				var champ_cible = test.type != null ? formulaire[ tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ[d] ) ][0] ] : formulaire[ tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ[d] ) ][0] ][0];
				
				// 290109 correction d'un bug qui rendait un champ requis alors que facultatif
				if ( tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ[d] ) ][1] != "facult" ) {  // 290109 correction ajout de cette condition
					tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ[d] ) ][1] = valeur_controle;
				}
				
				if ( afficher_ou_masquer != "afficher") {
				
					switch(champ_cible.type) //controle de coherence
					{
						case "text":
							champ_cible.value = "";
							break
						case "textarea":
							champ_cible.value = "";
							break
						case "radio":
							decoche_btn_radio( champ_cible.name )
							break
						case "select-one":
							champ_cible.selectedIndex = 0;
							break
						default:
							champ_cible.value = "";
							break
					}
				
					champ_cible.disabled = disable_bool;
				}
				
			}
			
		}else{
			
				var test = formulaire[ tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ ) ][0] ];
				
				var champ_cible = test.type != null ? formulaire[ tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ ) ][0] ] : formulaire[ tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ ) ][0] ][0];
			
				// 290109 correction d'un bug qui rendait un champ requis alors que facultatif
				if ( tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ ) ][1] != "facult" ) {  // 290109 correction ajout de cette condition
					tabchamps[ recuperer_index_a_partir_du_nom( nom_du_champ ) ][1] = valeur_controle;
				}
				
				if ( afficher_ou_masquer != "afficher") {
				
					switch(champ_cible.type) //controle de coherence
					{
						case "text":
							champ_cible.value = "";
							break
						case "textarea":
							champ_cible.value = "";
							break
						case "radio":
							decoche_btn_radio( champ_cible.name )
							break
						case "select-one":
							champ_cible.selectedIndex = 0;
							break
						default:
							champ_cible.value = "";
							break
					}
				
					champ_cible.disabled = disable_bool;
				}
				
		}
		
	}
	
	if (conteneur != null) {
	
		if(typeof(conteneur) == "object") {
			
			for (var d=0; d<=(conteneur.length-1); d++){
				//document.getElementById(conteneur[d]).style.display = valeur_affichage				
				eval( "$(\"#\"+conteneur[d])."+methode_jquery+"()" ) // jquery 250209

			}
			
		}else{
				//document.getElementById(conteneur).style.display = valeur_affichage
				eval( "$(\"#\"+conteneur)."+methode_jquery+"()" ) // jquery 250209
				
		}
	}
}

// Differents blocages clavier
function ini_blocages_claviers () {
		
	for (var i=0; i<=(tabchamps.length-1); i++){ 
		var type_de_blocage_clavier = tabchamps[i][3];
		var champ = formulaire[ tabchamps[i][0] ]
		
		switch(type_de_blocage_clavier)
			{
				case "date":
					/*champ.onkeypress = function (e) {
						evenement = window.event ? event : e; // on teste si c'est ie ou firefox des le depart
						if (evenement != null) return scanTouche(evenement, "date")
					}*/
					$(champ).mask("99/99/9999"); // jquery 250209
					break
				case "chiffre":
					champ.onkeypress = function (e) {
						evenement = window.event ? event : e; // on teste si c'est ie ou firefox des le depart 
						if (evenement != null) return scanTouche(evenement, "chiffre")
					}
					$(champ).bind("blur", function() { $(this).val( $(this).val().split(' ').join('') ); })
					break
				case "texte":
					champ.onkeypress = function (e) {
						evenement = window.event ? event : e; // on teste si c'est ie ou firefox des le depart 
						if (evenement != null) return scanTouche(evenement, "texte")
					}
					break
				case "texte+chiffre":
					champ.onkeypress = function (e) {
						evenement = window.event ? event : e; // on teste si c'est ie ou firefox des le depart 
						if (evenement != null) return scanTouche(evenement, "texte+chiffre")
					}
					break
				case "texte+chiffre+tiret":
					champ.onkeypress = function (e) {
						evenement = window.event ? event : e; // on teste si c'est ie ou firefox des le depart 
						if (evenement != null) return scanTouche(evenement, "texte+chiffre+tiret")
					}
					break
			}
			
	}
}


function callbackBlackList (xml) {
		GLOBAL_blacklist_tel = "";
		$(xml).find('numero').each( function(){ 
			var numero = $(this).text();		
			//window.console.log(numero)
			//$.AJAX_CP.monselect.options[$.AJAX_CP.monselect.options.length] = new Option(ville,ville);
			GLOBAL_blacklist_tel += numero + "|"
		} );

		GLOBAL_blacklist_tel = GLOBAL_blacklist_tel.substring(0,GLOBAL_blacklist_tel.lastIndexOf("|"))
}

// ini_blacklist_tel
function ini_blacklist_tel () {
	a_charger = false;
	
	for(var i=0;i<tabchamps.length;i++)
	{   
    	a_charger = ( $.inArray("tel", tabchamps[i]) != -1 ) ? true : a_charger;
	}
	
	if (a_charger) {
				
		$.ajax({
				  type: "GET",
				  url: "/assurpeople/js/blacklist_tel.xml",
				  success : callbackBlackList,
				  error : callBackError
			 });
		
	}
	
}


function boucledeverif(name_ou_id_du_champ, objet, mode) {
	
	var result						= false;
	var type_de_controle_validite 	= tabchamps[ recuperer_index_a_partir_du_nom(name_ou_id_du_champ) ][2];
	var type_de_controle_coherence 	= tabchamps[ recuperer_index_a_partir_du_nom(name_ou_id_du_champ) ][5];
	var message_coherence 			= tabchamps[ recuperer_index_a_partir_du_nom(name_ou_id_du_champ) ][6];
	var requis			 			= tabchamps[ recuperer_index_a_partir_du_nom(name_ou_id_du_champ) ][1];		
						
	
			switch(type_de_controle_validite) //controle de validite
			{
				
				case "date":
					result = validDateLogique(objet) ? true : false;
					break				
				case "date-":
					result = validDateLogique(objet) && dateInfAuj(objet.value) ? true : false;
					break
				case "aujourdhui-":
					result = validDateLogique(objet) && dateInfAujPlusAjourdhui(objet.value) ? true : false;
					break
				case "date+":	
					result = validDateLogique(objet) && dateSupAnnee(objet) ? true : false;
					break
				case "date+annee":	
					//verifie si aujourd'hui + une annee
					result = validDateLogique(objet) && datePlusAujourdhuiAnnee(objet, 1) ? true : false;
					break
				case "date+30":	
					result = validDateLogique(objet) && dateSupJour(objet, 30) ? true : false;
					break
				case "aujourdhui+30":	
					result = validDateLogique(objet) && dateSupJourPlusAujourdhui(objet, 30) ? true : false;
					break
				case "aujourdhui+8":	
					result = validDateLogique(objet) && dateSupJourPlusAujourdhui(objet, 8) ? true : false;
					break
				case "immat":	
					result = validImmatNew(objet.value) ? true : false;
					break
				case "-25ans":
					result = validDateLogique(objet) && dateInfAuj(objet.value) && age(objet) < 25 ? true : false;
					break	
				case "+18ans":
					result = validDateLogique(objet) && dateInfAuj(objet.value) && age(objet) >= 18 ? true : false;
					break	
				case "ouinon":	
					result = getRadioChecked(objet) ? true : false;
					break
				case "liste":	
					result = isSelected(objet) ? true : false;
					break
				case "tel":	
					result = validTel(objet) ? true : false;
					break
				case "cb":	
					result = verifCB(objet) ? true : false;
					break
				case "nosecu":	
					result = verifNumerodeSecu(objet) ? true : false;
					break
				case "email":	
					result = validEmail(objet) && test_domaines_connus(objet) ? true : false;
					break
				case "egal2":	
					result = objet.value.length == 2 ? true : false;
					break
				case "egal3":	
					result = objet.value.length == 3 ? true : false;
					break
				case "egal4":	
					result = objet.value.length == 4 ? true : false;
					break
				case "egal5":	
					result = objet.value.length == 5 ? true : false;
					break
				case "egal6":	
					result = objet.value.length == 6 ? true : false;
					break
				case "egal11":	
					result = objet.value.length == 11 ? true : false;
					break
				case "texte":	
					result = !isEmpty(objet) ? true : false;
					break
				case "texte+capAll":	
					//result = !isEmpty(objet) ? true : false;
						if ( !isEmpty(objet) ) {
							result = true;capAll(objet);
						}else {
							result = false
						}
					break
			}	
			if (type_de_controle_coherence != "" && result) {
				
				//document.title += "controle" + " | ";
				/*switch(type_de_controle_coherence) //controle de coherence
				{
					case "verif_coherence":
						result = verif_coherence (objet) ? true : false;
						//if ( !result  && mode == "fn" && message_coherence != "") alert(message_coherence);
						break
					case "verif_ligne_scolaire":
						result = verif_ligne_scolaire (objet) ? true : false;
						//if ( !result  && mode == "fn" && message_coherence != "") alert(message_coherence);
						break
					case "verif_ligne_rib":
						//document.title = verif_ligne_rib (objet)+"ici";
						result = verif_ligne_rib (objet) ? true : false;
						//if ( !result  && mode == "fn" && message_coherence != "") alert(message_coherence);
						break
					case "verif_ligne_nocb":
						//document.title = verif_ligne_rib (objet)+"ici";
						result = verif_ligne_nocb (objet) ? true : false;
						//if ( !result  && mode == "fn" && message_coherence != "") alert(message_coherence);
						break
					case "verif_ligne_expire":
						//document.title = verif_ligne_rib (objet)+"ici";
						result = verif_ligne_expire (objet) ? true : false;
						//if ( !result  && mode == "fn" && message_coherence != "") alert(message_coherence);
						break
					case "coherence_capital_mobilier":
						eval ( "result = "+ type_de_controle_coherence +" (objet) ? true : false;" )
						break
				}*/	
				
				eval ( "result = "+ type_de_controle_coherence +" (objet) ? true : false;" )
				
				if ( !result  && mode == "fn" && message_coherence != "") {
					alertAJAX(message_coherence);
				}
			}
			
			return result;

}

function verifRADIO(objet){
	if (objet) {
		document.getElementById(objet.name + "-ligne").style.backgroundImage = "url("+baseurl+GLOBAL_imageCorrect+")";
	}else{
		document.getElementById(this.name + "-ligne").style.backgroundImage = "url("+baseurl+GLOBAL_imageErreur+")";
	}
}

function verifchampunique(mode, source) { // verif sur le onblur

	var validation      = false;
	var iddelaligne     = null;
	var name_ou_id_du_champ = null;
	var objet           = null;
	
	//document.title = source.type
	
	//alert(source)
	if(mode == "fn"){	
			if(source.type == null) {
				name_ou_id_du_champ			= source[0].name;
				//iddelaligne				= source[0].name + "-ligne";
			}else {
				name_ou_id_du_champ			= source.name;
				//iddelaligne				= source.name + "-ligne";				
			}
			var objet					= source;

	}else{
		 
				name_ou_id_du_champ		= this.name;
				//iddelaligne				= this.name + "-ligne";
				//var objet				= wFORMS.processedForm[name_ou_id_du_champ];
				var objet				= this;	
		
		/*230608 pour wisa mais ne marche pas sous IE
				name_ou_id_du_champ		= mode.target.name;
				var objet				= mode.target;	
		*/
	}
	

	iddelaligne     = tabchamps[ recuperer_index_a_partir_du_nom( name_ou_id_du_champ ) ][4];
	
	var validation  = boucledeverif(name_ou_id_du_champ, objet, mode) ? true : false;
	
	
	
	/*
	if ( tabchamps[ recuperer_index_a_partir_du_nom( name_ou_id_du_champ ) ][7] && mode != "fn") { // permet de desactiver la verif dynamique
		return true
	}
	*/
	
	var groupe = tabchamps[ recuperer_index_a_partir_du_nom( name_ou_id_du_champ ) ][7]
	
	if ( groupe ) { // permet grouper les controles
			
		// tentative de groupement des champs
		var nomtableau = tabchamps[ recuperer_index_a_partir_du_nom( name_ou_id_du_champ ) ][4]
		
		var total_a_remplir = 0
		
		for (var i=0; i<=(tabchamps.length-1); i++){
			if ( tabchamps[i][4] == nomtableau && tabchamps[i][1] == "requis") total_a_remplir++			
		}
				
		nomtableau = nomtableau.replace("-ligne",""); // je cree un tableau avec le nom de la ligne - "-ligne"
		
		var string_if		= nomtableau +"[\""+ name_ou_id_du_champ +"\"] = "+validation+"; \n";			
		var string_else		= nomtableau +" = new Array(); \n"
		string_else		 	+= nomtableau +"[\""+ name_ou_id_du_champ +"\"] = "+validation+"; \n";
		
		var string_eval = " if ( typeof("+nomtableau+") != \"undefined\" ) { "+string_if+" }else{ "+ string_else +" } ";
		
		//document.title = nomtableau +"[\""+ name_ou_id_du_champ +"\"] = "+validation+" \n"
		eval (string_eval)
		
		
		var total_verif_du_groupe 	= 0;
		for (var cle in eval(nomtableau) )
		{
		   eval("if ("+ nomtableau +"[cle])   total_verif_du_groupe++;")
		}
		
		
		if (total_verif_du_groupe == total_a_remplir){
			//Tous les champs du groupe sont corrects
			if (mode == "fn") document.getElementById(iddelaligne).style.backgroundImage = "url("+baseurl+GLOBAL_imageCorrect+")";
			if (mode != "fn") document.getElementById(iddelaligne).style.backgroundImage = "url("+baseurl+GLOBAL_imageCorrect+")"; //add by aurel 200509
		}else{
			//Il y a des erreurs
			if (mode == "fn") document.getElementById(iddelaligne).style.backgroundImage = "url("+baseurl+GLOBAL_imageErreur+")";
			if (mode != "fn") document.getElementById(iddelaligne).style.backgroundImage = "none"; //add by aurel 200509
		}
		
		
		
			
	}
	
	if ( tabchamps[ recuperer_index_a_partir_du_nom( name_ou_id_du_champ ) ][1] == "facult" && mode != "fn") { // pour les champs facultatifs 
		if (objet.value == "" || objet.value == "-1") {
		document.getElementById(iddelaligne).style.backgroundImage = "none";
		return true
		}	
	}
			
	if (validation) {
		if ( !groupe ) document.getElementById(iddelaligne).style.backgroundImage = "url("+baseurl+GLOBAL_imageCorrect+")";
		return true	
	}else{
		if ( !groupe ) document.getElementById(iddelaligne).style.backgroundImage = "url("+baseurl+GLOBAL_imageErreur+")";
		return false
	}	
	
}

function veriftotale() { // verif sur le submit
		
	var comptage     = 0;
	var premierfocus = false;
	
	for (var i=0; i<=(tabchamps.length-1); i++){ 
	
		var champ        = formulaire[ tabchamps[i][0] ];
	
		if (tabchamps[i][1] == "requis") { 					// verifie que le champ doit etre controle
		
			if ( verifchampunique("fn",champ) ) {
				comptage++; 									// incrementation pour connaitre le premier champ faux
			}else if (!premierfocus){
				if(champ.type == null) {
					
					try { //  je catche l'erreur pour IE
					champ[0].focus();
					}
					catch (erreur) {};								
				
				}else{
					
					try { //  je catche l'erreur pour IE
					champ.focus();
					}
					catch (erreur) {};		
					
				}
				premierfocus = true;
			}
	
		}
	
	}
	
	var nbre_de_champ_requis = 0;
	for (var x=0; x<=(tabchamps.length-1); x++){ 
		if (tabchamps[x][1] == "requis") nbre_de_champ_requis++;
		//document.title += type_de_controle
	}
	
	
	if ( comptage == nbre_de_champ_requis )	 {
		//document.title = "le formulaire est OK" + comptage + " = " + nbre_de_champ_requis
		return true;
	}else {
		//document.title = "le formulaire est KO" + comptage + " = " + nbre_de_champ_requis
		return false;
	}
	
}

function fnConnect(oElem, sEvType, fn, bCapture)
{
		//if (window.console) console.log(oElem+" "+sEvType+ " "+fn+ " "+bCapture);
		
   		document.addEventListener ? // W3C compliant

        oElem.addEventListener(sEvType, fn, bCapture):

        oElem.attachEvent ? // IE

            oElem.attachEvent('on' + sEvType, fn):

            false; // ou oElem['on' + sEvType] = fn; pour prendre en charge les anciens navigateurs (pas forcémment souhaitable)

}


















////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// CONTROLES SELON LE FORMAT DES DONNEES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////// controles des la saisie
function scanTouche(evenmt, type) {	// autorise les touches définies dans les expressions régulières ci-dessous

	//var regExCommun = /[\x00\x08\x0D\x09]/;	// autorise les caractères Home End Flèches Backspace Enter + tab 
	var regExCommun = /[\x00\x08\x09]/;	// autorise les caractères Home End Flèches Backspace + tab 
	switch(type)
	{
		case "date":
			var regCarSpec = /[0-9//]/;	// chiffres + slash
			break
		case "texte":
			var regCarSpec  = /[^0-9]/;		// expression régulière autorise chiffres et majuscules
			break
		case "chiffre":
			var regCarSpec  = /[0-9]/;		// expression régulière autorise chiffres et majuscules
			break
		case "texte+chiffre":
			var regCarSpec  = /[0-9a-zA-z]/;		// expression régulière autorise chiffres et majuscules
			break
		case "texte+chiffre+tiret":
			var regCarSpec  = /[0-9a-zA-z\-]/;		// expression régulière autorise chiffres et majuscules
			break
	}
	
		//var codeDecimal  = codeTouche(evenmt);
		var codeDecimal = window.event ? evenmt.keyCode : evenmt.which;		

		//alert(codeDecimal)
		var car = String.fromCharCode(codeDecimal);
		
		var authorization = regExCommun.test(car) || regCarSpec.test(car); // Test si touche pressée est valide
		
		return authorization;
}


////////// controles de date
/// a utiliser validDate(date)
//////////////////////////////////////////////////////////////
/*function validDate(date)  
{
	
	var verif_format_diff   = /^[0-9]{8}$/;
	
	if (verif_format_diff.exec(date.value) != null)
	{
		date.value = date.value.substr(0, 2) +"/"+ date.value.substr(2, 2) +"/"+ date.value.substr(4, 4);
	}
	
	verif   = /^[0-9]{2}\/+[0-9]{2}\/+[0-9]{4}$/;
	verif2 = (date.value).split("/");
	
	if( (verif2[0] == "") || (verif2[1] == "") || (verif2[2] == ""))
	{
		return false;
	}
	if( (verif2[0] < 1 || verif2[0] > 31) ||
	    (verif2[1] < 1 || verif2[1] > 12) || 
	    (verif2[2] < 1900 || verif2[2] > 2020))
	{
		return false;
	}
	
	if (verif.exec(date.value) == null)
	{
		return false;
	}
	if ( validDateLogique(date.value) == false)
	{
		return false;
	}
	document.title += "je sors"
	return true;
}*/
//////////////////////  vérifier la validité d'une date au format jj/mm/aa ou jj/mm/aaaa	
function validDateLogique(d)
{
	
	if (d.value == "") // si la variable est vide on retourne faux
		return false;
	
	//var date_actuelle = new Date();
	var date_actuelle = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();
	
	var anne_actuelle = date_actuelle.getYear()
	if(anne_actuelle < 999) anne_actuelle+=1900;
	anne_actuelle     = anne_actuelle.toString().substr(2, 2)
	
	
	var verif_format_diff   = /^[0-9]{8}$/;
	
	var verif_format_diff2   = /^[0-9]{6}$/;

	var verif_format_diff3   = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;


	if (verif_format_diff.exec(d.value) != null) {
		d.value = d.value.substr(0, 2) +"/"+ d.value.substr(2, 2) +"/"+ d.value.substr(4, 4);	
	}
	
	if (verif_format_diff2.exec(d.value) != null)
	{
		var annee_saisie = (d.value.substr(4, 2)) <= anne_actuelle ? 20+d.value.substr(4, 2) : 19+d.value.substr(4, 2);
		d.value = d.value.substr(0, 2) +"/"+ d.value.substr(2, 2) +"/"+ annee_saisie;
	}
	
	if (verif_format_diff3.exec(d.value) != null)
	{
		d.value = d.value.substr(0, 2) +"/"+ d.value.substr(3, 2) +"/"+ d.value.substr(6, 4);	
	}
	
	
	var j = parseInt(d.value.split("/")[0], 10); // jour
	var m = parseInt(d.value.split("/")[1], 10); // mois
	var a = parseInt(d.value.split("/")[2], 10); // année		
		
	var e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
	
	if (e.exec(d.value) != null)
	{
		
		if (j<10) j = 0 + j.toString();
		if (m<10) m = 0 + m.toString();
		if (a<10) a = 0 + a.toString();
		
		if (a.toString().length !=4){
			var annee_saisie = a <= anne_actuelle ? 20+a.toString() : 19+a.toString();
		}else{
			var annee_saisie = a.toString();
		}
		d.value = j +"/"+ m +"/"+ annee_saisie;
	}
	
	
	
	if (!e.test(d.value)) // On teste l'expression régulière pour valider la forme de la date
		return false; // Si pas bon, retourne faux
	// On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier
	//var j = parseInt(d.value.split("/")[0], 10); // jour
	//var m = parseInt(d.value.split("/")[1], 10); // mois
	//var a = parseInt(d.value.split("/")[2], 10); // année
	// Si l'année n'est composée que de 2 chiffres on complète automatiquement
	if (a < 1000) {
		if (a < 89)	a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
		else a+=1900;
	}
	// Définition du dernier jour de février
	// Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400
	if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
	else var fev = 28;
	// Nombre de jours pour chaque mois
	var nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
	// Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
	
	
	
	if ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] ) {
		return true;
	}else {
		//document.title += " je refuse "
		return false;
	}
	//return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
}
//////////////////////  verifie que la date est superrieure a la date du jour // parmetre nombre d'annee d'ecart
function dateSupAnnee(chaineDate, nb)
{	
	var nb = nb == "" || nb == null ? 0 : nb;
	var chaineDate = chaineDate.value;
	
	
	 //var Date_Actuelle = new Date();
	 var Date_Actuelle = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();

	 var j = Date_Actuelle.getDate();
	 var m = Date_Actuelle.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
	 var a = Date_Actuelle.getFullYear();
	 var a2 = Date_Actuelle.getFullYear()+ nb;
	 
	ladate = (chaineDate).split("/");
	
	if( ladate.length != 3 || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2])) ) 
	 {
	 	return false;
	 }

	var joursaisie = ladate[2] + '' + ladate[1] + ''+ladate[0];
	
	if (m < 10 ) {
		m = '0' + m;
	}

	if (j < 10 ) {
		j = '0' + j;
	}
	 var jourcourant = a + '' + m + '' +j ;
	 var jourcourant_plus_annees = a2 + '' + m + '' +j ;

	
	if (jourcourant < joursaisie && nb == 0) {
		return true;
	}
	if (jourcourant < joursaisie && nb > 0 && joursaisie < jourcourant_plus_annees ) {
		return true;
	}
	
	return false;
	
}
//////////////////////  verifie que la date est superrieure a la date du jour // parmetre nombre d'annee d'ecart
function datePlusAujourdhuiAnnee(chaineDate, nb)
{	
	var nb = nb == "" || nb == null ? 0 : nb;
	var chaineDate = chaineDate.value;
	
	
	 //var Date_Actuelle = new Date();
	 var Date_Actuelle = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();

	 var j = Date_Actuelle.getDate();
	 var m = Date_Actuelle.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
	 var a = Date_Actuelle.getFullYear();
	 var a2 = Date_Actuelle.getFullYear()+ nb;
	 
	ladate = (chaineDate).split("/");
	
	if( ladate.length != 3 || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2])) ) 
	 {
	 	return false;
	 }

	var joursaisie = ladate[2] + '' + ladate[1] + ''+ladate[0];
	
	if (m < 10 ) {
		m = '0' + m;
	}

	if (j < 10 ) {
		j = '0' + j;
	}
	 var jourcourant = a + '' + m + '' +j ;
	 var jourcourant_plus_annees = a2 + '' + m + '' +j ;

	
	if (jourcourant <= joursaisie && nb == 0) {
		return true;
	}
	if (jourcourant <= joursaisie && nb > 0 && joursaisie < jourcourant_plus_annees ) {
		return true;
	}
	
	return false;
	
}
//////////////////////  verifie que la date est superrieure a la date du jour // parametre nombre de jour d'ecart
function dateSupJour(chaineDate, nb)
{	
	nb = nb == "" || nb == null ? 0 : nb;
	var chaineDate = chaineDate.value;
	
	
	 //Date_Actuelle = new Date();
	 Date_Actuelle = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();

	if ( nb > 0 ) {
		 
	 	nouvelledate = addDaysToToday(nb);
		
		j = Date_Actuelle.getDate();
		m = Date_Actuelle.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
		a = Date_Actuelle.getFullYear();
		
		
		
		
	 	j_l = nouvelledate[0];
	 	m_l = nouvelledate[1] + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
		a_l = nouvelledate[2];
		
	}else{
	
		j = Date_Actuelle.getDate();
		 m = Date_Actuelle.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
		 a = Date_Actuelle.getFullYear();
	 
	} 
	ladate = (chaineDate).split("/");
	
	if( ladate.length != 3 || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2])) ) 
	 {
	 	return false;
	 }

	joursaisie = ladate[2] + '' + ladate[1] + ''+ladate[0];
	
	if (m < 10 ) {
		m = '0' + m;
	}

	if (j < 10 ) {
		j = '0' + j;
	}
	if (m_l < 10 ) {
		m_l = '0' + m_l;
	}

	if (j_l < 10 ) {
		j_l = '0' + j_l;
	}
	 jourcourant = a + '' + m + '' +j ;
	 date_limite = a_l + '' + m_l + '' +j_l ; 
	 //jourcourant_plus_annees = a2 + '' + m + '' +j ;

	//document.title = jourcourant+" | "+joursaisie+" | "+date_limite
	
	//document.title = addDaysToToday(30)
	
	if (jourcourant < joursaisie && nb == 0) {
		return true;
	}
	if (jourcourant < joursaisie && nb > 0 && joursaisie < date_limite ) {
		return true;
	}
	
	return false;
	
}
//////////////////////  verifie que la date est superrieure a la date du jour // parametre nombre de jour d'ecart
function dateSupJourPlusAujourdhui(chaineDate, nb)
{	
	nb = nb == "" || nb == null ? 0 : nb;
	var chaineDate = chaineDate.value;
		
	var Date_Actuelle = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();
	
	if ( nb > 0 ) {
		 
	 	nouvelledate = addDaysToToday(nb);
		
		j = Date_Actuelle.getDate();
		m = Date_Actuelle.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
		a = Date_Actuelle.getFullYear();
		
	 	j_l = nouvelledate[0];
	 	m_l = nouvelledate[1] + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
		a_l = nouvelledate[2];
		
	}else{
	
		j = Date_Actuelle.getDate();
		 m = Date_Actuelle.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
		 a = Date_Actuelle.getFullYear();
	 
	} 
	ladate = (chaineDate).split("/");
	
	if( ladate.length != 3 || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2])) ) 
	 {
	 	return false;
	 }

	joursaisie = ladate[2] + '' + ladate[1] + ''+ladate[0];
	
	if (m < 10 ) {
		m = '0' + m;
	}

	if (j < 10 ) {
		j = '0' + j;
	}
	if (m_l < 10 ) {
		m_l = '0' + m_l;
	}

	if (j_l < 10 ) {
		j_l = '0' + j_l;
	}
	 jourcourant = a + '' + m + '' +j ;
	 date_limite = a_l + '' + m_l + '' +j_l ; 
	 //jourcourant_plus_annees = a2 + '' + m + '' +j ;

	//document.title = jourcourant+" | "+joursaisie+" | "+date_limite
	
	//document.title = addDaysToToday(30)
	
	if (jourcourant <= joursaisie && nb == 0) {
		return true;
	}
	if (jourcourant <= joursaisie && nb > 0 && joursaisie < date_limite ) {
		return true;
	}
	
	return false;
	
}
////////// 
/// ajouter des jours a une date // ou meme soustraire renvoi un tableau
//////////////////////////////////////////////////////////////

function addDaysToToday(j) 
{
	//var uneDate = new Date();
	var uneDate = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();

	
	
	 var date = new Date(uneDate.getTime() + (1000 * 60 * 60 * 24 * j));
	 //date 	= date.getTime();
	 
	 //alert(date)
	 
	 var result = new Array();
	 
	 result[0] = date.getDate()
	 result[1] = date.getMonth() 
	 result[2] = date.getFullYear() 
	
 	return result;
}
/**************************************************************************************************
//////////////////////  verifie que la date est inferieure a la date du jour
**************************************************************************************************/
function dateInfAuj(chainedateA)
{
	 //Date_Actu = new Date();
	 Date_Actu = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();
	 
	 j = Date_Actu.getDate();
	 m = Date_Actu.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
	 a = Date_Actu.getFullYear();
	 if (m < 10 ) {
		m = '0' + m;
	}
	if (j < 10 ) {
		j = '0' + j;
	}
	 dateB = a + '' + m + '' +j ;
	 ladateA = (chainedateA).split("/");
	 
	 if( (ladateA[0] < 1 || ladateA[0] > 31) ||
	    (ladateA[1] < 1 || ladateA[1] > 12) || 
	    (ladateA[2] < 1900 || ladateA[2] > 2100))
	{
		return false;
	}
	if( (ladateA[2] == "") || (ladateA[1] == "") || (ladateA[0] == ""))
	{
		return false;
	}
	 dateA = ladateA[2] + '' + ladateA[1] + '' + ladateA[0]; 
	if(dateA < dateB)
	{
		return true;
	}
	else
	{
		return false;
	}
}
/**************************************************************************************************
//////////////////////  verifie que la date est egale ou inferieure a la date du jour
**************************************************************************************************/
function dateInfAujPlusAjourdhui(chainedateA)
{
	 //Date_Actu = new Date();
	 Date_Actu = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();
	 
	 j = Date_Actu.getDate();
	 m = Date_Actu.getMonth() + 1; //Pour JS Janvier == 00 , fevrier == 01 ...
	 a = Date_Actu.getFullYear();
	 if (m < 10 ) {
		m = '0' + m;
	}
	if (j < 10 ) {
		j = '0' + j;
	}
	 dateB = a + '' + m + '' +j ;
	 ladateA = (chainedateA).split("/");
	 
	 if( (ladateA[0] < 1 || ladateA[0] > 31) ||
	    (ladateA[1] < 1 || ladateA[1] > 12) || 
	    (ladateA[2] < 1900 || ladateA[2] > 2100))
	{
		return false;
	}
	if( (ladateA[2] == "") || (ladateA[1] == "") || (ladateA[0] == ""))
	{
		return false;
	}
	 dateA = ladateA[2] + '' + ladateA[1] + '' + ladateA[0]; 
	if(dateA <= dateB)
	{
		return true;
	}
	else
	{
		return false;
	}
}

/**************************************************************************************************
********* VERIFIE QUE LA DATE A AU FORMAT JJ/MM/AAAA SOIT SUPERIEUR A LA DATE B *******************
**************************************************************************************************/

function dateHaute(objet, objet2)
{
	
	if ( typeof(objet) == "object" ) {
		var chainedateA = objet.value;
		
	}else{
		var chainedateA = objet;
	}
	if ( typeof(objet2) == "object" ) {
		var chainedateB = objet2.value;
	}else{
		var chainedateB = objet2;
	}	
	
	 var ladateA = (chainedateA).split("/");
	 var ladateB = (chainedateB).split("/");

	 var dateA = ladateA[2] + '' + ladateA[1] + '' + ladateA[0]; 
	 var dateB = ladateB[2] + '' + ladateB[1] + '' + ladateB[0];
	
	if(dateA < dateB)
	{
		return false;
	}
	else
	{
		return true;
	}
}
/**************************************************************************************************
////////// controles de checkbox /// a utiliser getRadioValue(collection)
**************************************************************************************************/
function getRadioChecked(collection) {

	if (collection.length > 0){
		
		for(var i=0;i<collection.length;i++)
		  { 
		   if (collection[i].checked)
			 { 
			 return true;
			 }
		  }
		 return false;	
		 
	}else{
	
		if (collection.checked)
		 { 
		 
			return true;
		 }else{
			return false;
			 
		 }	
	}

}
////////// controles de checkbox
/// a utiliser getRadioValue(collection)
//////////////////////////////////////////////////////////////
function getRadioValue(collection) {
	
if (collection.length > 0){
		
		 for(var i=0;i<collection.length;i++)
		  { 
		   if (collection[i].checked)
			 { 
			 return (collection[i].value);
			 }
		  }
		 return ("non defini");
	 
	}else{
		
		return collection.value	
		
	}
}
////////// controles de select
/// a utiliser getRadioValue(collection)
//////////////////////////////////////////////////////////////
function isSelected(champ){
	var v = champ.value;
	if ( v == -1){
		return false;
	} 
	return true;
} // fin isNotSelected() 


/**************************************************************************************************
********* VERIFIE LA COHERENCE NUMERO DE TELEPHONE ************************************************
**************************************************************************************************/

/*function validTel(objetel)
{
	verif   = /^[0-9]{10}$/;
	if (verif.exec(objetel.value) == null)
	{
		return false;
	}
	return true;
}*/

function validTel(objetel)
{
	verif   = /^[0-9]{10}$/; // si null renvoyer false
	verif2  = /^[0][0-9]{9}$/; // si null renvoyer false
	verif3  = /^0123456789$/; // si !null renvoyer false
	verif4  = /^[0-9]{2}([0]{8}|[1]{8}|[2]{8}|[3]{8}|[4]{8}|[5]{8}|[6]{8}|[7]{8}|[8]{8}|[9]{8})$/; // si !null renvoyer false
	verif5  = /^((01){5})|((02){5})|((03){5})|((04){5})|((05){5})|((06){5})|((07){5})|((08){5})|((09){5})$/; // si !null renvoyer false
	verifListe = /^0101020202|0140000000$/;  // si !null renvoyer false cette verif est remplacee par le fichier charge

	if (GLOBAL_blacklist_tel != "") {
	verifListe = eval('/^'+GLOBAL_blacklist_tel+'$/');	
	}

	if ( verif.exec(objetel.value) == null || verif2.exec(objetel.value) == null || verif3.exec(objetel.value) != null ||
		verif4.exec(objetel.value) != null || verif5.exec(objetel.value) != null || verifListe.exec(objetel.value) != null
		)
	{
		return false;
	}
	return true;
}



/**************************************************************************************************
********* VERIFIE LA COHERENCE ET LE FORMAT DE L ADRESSE EMAIL ************************************
**************************************************************************************************/


function validEmail(mail)
{
	verif   = /[a-zA-Z0-9.-_]{2,}[@]{1}[a-zA-Z0-9-]{2,}[.]{1}[a-zA-Z]{2,3}$/;
	verif2   = /[a-zA-Z0-9.-_]{2,}[@]{1}[a-zA-Z0-9-]{2,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,3}$/;
	verif3   = /^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$/;
	
	
	if (verif.exec(mail.value) == null && verif2.exec(mail.value) == null && verif3.exec(mail.value) == null)
	{
		return false;
	} 
	else 
	{
		return true;
	}
}
 /* fonction isEmpty()
 * Teste le contenu d'un champs pour controler si il est vide ou non
 */
function isEmpty(champ)
  {
    var v = champ.value;
    var lng = v.length;
    if(lng==0)
    {
      return true;
    }
    return false;
  } // fin isEmpty
  
  
  
 /**************************************************************************************************
********* Mise en majuscule de chaque mot ************************************
**************************************************************************************************/ 
  //mise en cap de chaque mot
function cap(cible) {
	var texte = cible.value;
	var t = new Array();
	  for(j=0 ; j < texte.length ;j++) {
		t[j] = texte.substr(j,1).toLowerCase();
		if((j == 0)||(t[j-1]==" ")) t[j] = texte.substr(j,1).toUpperCase();
	  }
	  //return t.join('');
	  cible.value = t.join('');
}
function capAll(cible) {
	var texte = cible.value.toUpperCase();
	  cible.value = texte;
}


 /**************************************************************************************************
********* Mise en majuscule de chaque mot ************************************
**************************************************************************************************/ 

tableau_des_emails_verifies = new Array();

function test_domaines_connus (objet) {
	
	var email       = objet.value
	var tabDomaine  = new Array();
	tabDomaine[0]   = "hotmail";
	tabDomaine[1]   = "yahoo";
	tabDomaine[2]   = "wanadoo";
	tabDomaine[3]   = "caramail";
	tabDomaine[4]   = "msn";
	tabDomaine[5]   = "free";
	tabDomaine[6]   = "wanadoo";
	tabDomaine[7]   = "gmail";
	tabDomaine[8]   = "aol";
	tabDomaine[9]   = "laposte";
	tabDomaine[10]  = "numericable";
	tabDomaine[11]  = "noos";
	tabDomaine[12]  = "nomade";
	tabDomaine[13]  = "club-internet";
	tabDomaine[14]  = "libertysurf";
	tabDomaine[15]  = "onetel";
	tabDomaine[16]  = "tele2";
	tabDomaine[17]  = "tiscali";
	tabDomaine[18]  = "neuf";
	tabDomaine[19]  = "netcourrier";
	tabDomaine[20]  = "voila";
	tabDomaine[21]  = "aliceadsl";
	tabDomaine[22]  = "online";
	tabDomaine[23]  = "9online";
	tabDomaine[24]  = "orange";
	tabDomaine[25]  = "lycos";
	tabDomaine[25]  = "ifrance";
	
	
 /**************************************************************************************************
********* VERIFIE CERTAINS DOMAINES ************************************
**************************************************************************************************/	
	var nouvelemail = compareMail(email,tabDomaine);
		
	if ( nouvelemail != "" && tableau_des_emails_verifies[nouvelemail] != true) {
		
		if ( confirm( "Votre email ne serait-il pas plutot celui-ci ?\n" + nouvelemail ) ) {		
			objet.value = nouvelemail;
		}
		tableau_des_emails_verifies[nouvelemail] = true;
	}
	return true;
	
	
	function compareMail(mail,tabDomaine) {
		var i = 0;
		var j = 0;
		var tabResult = "";
		var comparaisonMax = 0;
		var debutmail = mail.substr(0,mail.indexOf("@"));
		var finmail = mail.substr(mail.indexOf("@")+1,mail.length);
		finmail = finmail.substr(0,finmail.indexOf("."));
		var extension = mail.substr(mail.indexOf(".")+1,mail.length);
		for(i=0;i<tabDomaine.length;i++) {
			var comparaison = compare(tabDomaine[i],finmail);
			if(comparaison > comparaisonMax && comparaison > 45 ) {
				comparaisonMax = comparaison;
				tabResult = debutmail+"@"+tabDomaine[i]+"."+extension;
				j++;
			}
			if(comparaison == 100) {
				tabResult = new Array();
				return tabResult;
			}
		}
		return tabResult;
	}
	
	function compare(mot1,mot2) {
		var total = 0;
		var egal = 0;
		for(i=0;i<mot2.length;i++) {
			for(j=0;j<(mot2.length-i+1);j++) {
				total++;
				if(mot1.indexOf(mot2.substr(i,j)) > -1) {
					egal++;
				}
			}
		}
		for(i=0;i<mot1.length;i++) {
			for(j=0;j<(mot1.length-i+1);j++) {
				total++;
				if(mot2.indexOf(mot1.substr(i,j)) > -1) {
					egal++;
				}
			}
		}
		pourcentage = parseInt( egal / total * 100 );
		return(pourcentage);
	}
	
}

 /**************************************************************************************************
********* DECOCHE TOUS LES BOUTONS RADIO ************************************
**************************************************************************************************/ 

function decoche_btn_radio(nom){
	for(i=0;i<formulaire.elements.length;i++){
		if(formulaire.elements[i].name==nom){
		formulaire.elements[i].checked=false;
		}
	}
}
/**************************************************************************************************
********* CONTROLE DU RIB ************************************
**************************************************************************************************/ 


function verifRIB(aCodeBanque, aCodeGuichet, aNoCompte, aCle )
		{
			
			var aCodeBanque 	= aCodeBanque.value
			var aCodeGuichet 	= aCodeGuichet.value
			var aNoCompte 		= aNoCompte.value
			var aCle 			= aCle.value
			
			var lCodeBanque, lCodeGuichet, lNoCompte;
			var lint ;
			var lCompteNum;
			var lCompteStr;
			var lA,	lB, lC, lD, lE, lF, lG, lH, lI, lLength, lLoop,	lAsc, lNb;
		
			// retire les espaces les points et autres caracteres differents des nombres
		
			lCodeBanque=litnombre(aCodeBanque);
			lCodeGuichet=litnombre(aCodeGuichet);
			lNoCompte=litnombreCompte(aNoCompte);
		
			lA=parseFloat(lCodeBanque);
			lB=parseFloat(lCodeGuichet);
			lC=parseFloat(lNoCompte);
		
			lD=8*lA;
		
		
			lA=lD % 97;
		
			lE=15*lB;
			lB=97-(lE % 97);
			lF=3*lC;
			lC=97-(lF % 97);
			lG=lA+lB+lC;
			lI=lG % 97;
	
	
			if (lI==0)
			{
				var atester = 97;
			}
			else
			{
				var atester = lI;
			}
			
			if ( atester != aCle ) {
				
				return false;
				
			}else{
				
				return true;
				
			}
			
		}



function litnombre(aChaineNombre)
		{
			// retire les espaces les points et autres caract?É¬®res diff?É¬©rents des nombres
			var li=0;
			var lChaine=""+aChaineNombre;
		
			while (li<eval(lChaine.length))
			{
				if (lChaine.charCodeAt(li)<48 || lChaine.charCodeAt(li)>57)
				{
					lChaine=lChaine.substring(0,li)+lChaine.substring(li+1,lChaine.length);
					li--;
				}
		
				li++;
			}
			return lChaine;
		}
		function litnombreCompte(aChaineNombre)
		{
			// retire les espaces les points et autres caract?É¬®res diff?É¬©rents des nombres
			// pour les lettres A ?É¬? Z, remplacement par un nombre
			var li=0;
			var lNb;
			var lChaine=""+aChaineNombre;
		
			while (li<eval(lChaine.length))
			{
				if (lChaine.charCodeAt(li)<48 || lChaine.charCodeAt(li)>57)
				{
					if (lChaine.charCodeAt(li)>=65 || lChaine.charCodeAt(li)<=90)
					{
						lNb=lChaine.charCodeAt(li)-64;
						if (lNb>9)
						{
							lNb=lNb-9;
						}
		
						if (lNb>9)
						{
							lNb=lNb-8;
						}
		
						lChar=""+lNb;
						lChaine=lChaine.substring(0,li)+lChar+lChaine.substring(li+1,lChaine.length);
					}
					else
					{
						if (lChaine.charCodeAt(li)>=97 || lChaine.charCodeAt(li)<=122)
						{
							lNb=lChaine.charCodeAt(li)-96;
							if (lNb>9)
							{
								lNb=lNb-9;
							}
		
							if (lNb>9)
							{
								lNb=lNb-8;
							}
			
							lChar=""+lNb;
							lChaine=lChaine.substring(0,li)+lChar+lChaine.substring(li+1,lChaine.length);
						}
						else
						{	
							// on retire le caract?É¬®re ind?É¬©sirable
							lChaine=lChaine.substring(0,li)+lChaine.substring(li+1,lChaine.length);
							li--;
						}
					}
				}
		
				li++;
			}
			return lChaine;
		}
		
/**************************************************************************************************
********* CONTROLE de la CB ************************************
**************************************************************************************************/ 

function verifCB(objet) {
	if (objet.value.length == 14 || objet.value.length == 16) {
		return true	
	}else{
		return false	
	}
}


/**************************************************************************************************
********* CALCUL DE L'AGE ************************************
**************************************************************************************************/ 

function age(objet) {


	var date = objet.value;
	
	var jour = date.substr(0, 2);
	var mois = date.substr(3, 2)
	var annee = date.substr(6, 4)
	
	//actu=new Date();
	actu = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();
	
	if((actu.getMonth()+1)>=mois)
	{
		if((actu.getMonth()+1)==mois)
		{
			if(actu.getDate()>=jour)
			{
				mois=(actu.getMonth()+1)-mois;
				ans=actu.getFullYear()-annee;
			}
			else
			{
				mois=(12-mois)+(actu.getMonth()+1);
				ans=actu.getFullYear()-annee-1;
			}
		}
		else
		{
		mois=(actu.getMonth()+1)-mois;
		ans=actu.getFullYear()-annee;
		}
	}
	else
	{
		mois=(12-mois)+(actu.getMonth()+1);
		ans=actu.getFullYear()-annee-1;
	}
	if(actu.getDate()>jour)
	{
		jours=actu.getDate()-jour;
	}
	else
	{
		jours=(30-jour)+(actu.getDate());
	}
	while(jours>30)
	{
	jours-=30;
	mois+=1;
	}
	while(mois>12)
	{
	mois-=12;
	ans+=1;
	}
	
	return ans;	

}
/**************************************************************************************************
********* CALCUL ECART ENTRE 2 DATES EN ANNEES ************************************
**************************************************************************************************/ 

function ecart_dates(objet,objet2) {


	if ( typeof(objet) == "object" ) {
		var dateA = objet.value;
	}else{
		var dateA = objet;
	}
	if ( typeof(objet2) == "object" ) {
		var dateB = objet2.value;
	}else{
		var dateB = objet2;
	}
	
	//var dateB = objet2.value;
	
	var an = 0;

	var ladateA = dateA.split("/");
	var ladateB = dateB.split("/");

	dateA = ladateA[2];
	dateB = ladateB[2];

	var an = dateA - dateB;

	// si on a plus d'un an de difference, on regarde
	// le si le mois A est inferieur au moins B, dans
	// ce cas on retranche une annee
	if( (an > 0) && (ladateA[1] < ladateB[1]) ) {
		an--;
	}

	if( (an > 0) && (ladateA[1] == ladateB[1]) && (ladateA[0] < ladateB[0])  ) {
		an--;
	}

	return an;
	
}
/**************************************************************************************************
********* VERIFICATION DE L'ACCEPTATION DES MENTIONS LEGALES ************************************
**************************************************************************************************/ 

function test_acceptation(formObjet) {
	
	if (getRadioChecked(formObjet["accept"]))  {
		return true;
	}else{
	alertAJAX("Vous devez certifier avoir pris connaissance du projet d'assurance avant de valider.")	;
	formObjet["accept"].focus()
		return false;	
	}
	
}

function test_acceptations(formObjet, nbre) {
	
	var message = "";
	var js = "";
	
	for (var i=1; i < nbre+1; i++) {
		js = "if ( formObjet[\"accept"+ i +"\"] && !getRadioChecked(formObjet[\"accept"+ i +"\"]) ) { message = \"Vous devez reconnaitre les "+ nbre +" d\u00e9clarations situ\u00e9es en bas de page avant de valider.\"; }" 
		eval(js);
	}
	
	if (message != "") {
		alertAJAX(message)	;
		formObjet["accept1"].focus()
		return false;	
		
	}else{
		return true;
	}
		
}


/**************************************************************************************************
********* VERIFIE LA COHERENCE ET LE FORMAT DE LA PLAQUE D IMMATRICULATION ************************
**************************************************************************************************/
/*
function validImmat(objetel)
{

		var objetel = objetel.value
		
		// 26/09/2006
		// modif suite demande DS --> toujours vrai



		// format global
		
		 verifs   = /^[a-zA-Z0-9]{7}[0-9]{2}$/;
		 verif   = /^[a-zA-Z0-9]{6}[0-9]{2}$/;
		 verifs1 = /^[a-zA-Z0-9]{5}[0-9]{2}$/;
 		 verifs2 = /^[a-zA-Z0-9]{4}[0-9]{2}$/;
 		 verifs3 = /^[a-zA-Z0-9]{3}[0-9]{2}$/;
 		 
        // formats intermediaires 3 ch + 3 lettres ou 4 ch + 2 lettres
        
	      verif1   = /^[0-9]{3}[a-zA-Z]{3}[0-9]{2}$/;
          verif2   = /^[0-9]{4}[a-zA-Z]{2}[0-9]{2}$/;
          verif3   = /^[0-9]{3}[a-zA-Z]{2}[0-9]{2}$/;
          verif4   = /^[0-9]{2}[a-zA-Z]{2}[0-9]{2}$/;
		  verif5   = /^[0-9]{1}[a-zA-Z]{2}[0-9]{2}$/;
		  verif6  =  /^[0-9]{2}[a-zA-Z]{3}[0-9]{2}$/;
  		  verif7  =  /^[0-9]{1}[a-zA-Z]{3}[0-9]{2}$/;
  		  verif8  =  /^[0-9]{4}[a-zA-Z]{3}[0-9]{2}$/;
  		  
          
	if ( !((verif.exec(objetel) != null) || (verifs1.exec(objetel) != null) || (verifs2.exec(objetel) != null) || (verifs3.exec(objetel) != null) || (verifs.exec(objetel) != null)))
	{
		//alert ('ligne 1');
		return false ;
	}
	else {
		if ((verif1.exec(objetel) != null) || (verif2.exec(objetel) != null) || (verif3.exec(objetel) != null)
			|| (verif4.exec(objetel) != null) || (verif5.exec(objetel) != null)
			|| (verif6.exec(objetel) != null) || (verif7.exec(objetel) != null) || (verif8.exec(objetel) != null)
			) {
			return true;
		}
		else {
			return false;
		}
	}
}
*/
/**************************************************************************************************
********* Extrait de wforms pour masquer un bulle d'aide ************************
**************************************************************************************************/
function remove_extract_fromWforms (objet) {
			   		   
   var fieldHint = document.getElementById(objet.id   + wFORMS.idSuffix_fieldHint);
   if(!fieldHint) // try again with the element's name attribute
	   fieldHint = document.getElementById(objet.name + wFORMS.idSuffix_fieldHint);
			   
	var dessus_select 	= fieldHint.className.indexOf(wFORMS.idSuffix_dessus_select)>0 ? true : false;
	var reserrer		= fieldHint.className.indexOf(wFORMS.idSuffix_reserrer)>0 ? true : false;

   if(fieldHint && dessus_select) {
	   fieldHint.className = fieldHint.className.replace(wFORMS.className_activeFieldHint_ie_select,wFORMS.className_inactiveFieldHint);
   }else{
	   fieldHint.className = fieldHint.className.replace(wFORMS.className_activeFieldHint,wFORMS.className_inactiveFieldHint);
   }
      
	if (browser.isIE6up) WCH.Discard(objet.id, objet.id.replace(wFORMS.idSuffix_fieldHint,'-ligne') ); // pour IE6 passe le select en dessous
	   
}
/**************************************************************************************************
********* Donne le focus sous les aides ************************
**************************************************************************************************/

function focus_en_dessous_des_bulles_d_aide (objet) {
	
	var nomduchampendessous = recuperer_index_a_partir_du_nom ( objet.id.replace(wFORMS.idSuffix_fieldHint, "") ) -1
		
	for (var x=nomduchampendessous; x>=0; x--) {
				
		if  (tabchamps[x][1] == "requis"){
			
			nomduchampendessous = tabchamps[x][0]
			
			try {
			formulaire[nomduchampendessous].focus()
			}
			catch (erreur) {};
			break;
		}
	}
		
	overaide = false;
	remove_extract_fromWforms(objet)
	
}

/**************************************************************************************************
********* RENVOI LA DATE DU JOUR AU FORMAT jj/mm/aaaa *********************************** 14/08/08
**************************************************************************************************/
function aujourdhui(){ //au format jj/mm/aaaa
	//var aujourdhui=new Date()
	var aujourdhui = (typeof(dateServeur) != 'undefined' && dateServeur != '') ? new Date( dateServeur.substr(6,4), Number(dateServeur.substr(3,2)-1), dateServeur.substr(0,2)) : new Date();
	var annee = aujourdhui.getFullYear()
	var mois = (aujourdhui.getMonth()+1) 	< 10 ? "0"+(aujourdhui.getMonth()+1) 	: (aujourdhui.getMonth()+1)
	var jour = aujourdhui.getDate() 		< 10 ? "0"+aujourdhui.getDate() 		: aujourdhui.getDate()
	
	return jour + "/" + mois + "/" + annee
}
/**************************************************************************************************
********* CONVERTI UNE DATE AU FORMAT jj/mm/aaaa EN OBJET DATE ************************* 14/08/08
**************************************************************************************************/
function conversionEnObjetDate(tableau)
{
	var d = new Date(tableau[2], tableau[1] - 1, tableau[0]); 	// annee, mois-1, jour
	return d.getTime(); 											//retourne objet date
}
/**************************************************************************************************
********* ECART ENTRE 2 DATES AU FORMAT jj/mm/aaaa EN JOURS ***************************** 14/08/08
**************************************************************************************************/
function ecartEnJoursEntreDeuxDates(date1,date2)
{
	
	var debut = conversionEnObjetDate(date1.split("/"));
	var fin = conversionEnObjetDate(date2.split("/"));
	
	var nb = (fin - debut) / (1000 * 60 * 60 * 24); // + " jours";
		
	return nb;
}

/**************************************************************************************************
********* Verification numero de securite sociale            ***************************** 04/11/08
**************************************************************************************************/


function verifNumerodeSecuConversionNombres(chaineDeNombre)
{
	var inc=0;
	var monString=""+chaineDeNombre;
	while (inc<eval(monString.length))
	{
		if (monString.charCodeAt(inc)<48 || monString.charCodeAt(inc)>57)
		{
			monString=monString.substring(0,inc)+monString.substring(inc+1,monString.length);
			inc--;
		}
		inc++;
	}
	return monString;
}


function verifNumerodeSecuConversionNombresDepartement(chaineDeNombre)
{
	var inc=0;
	var nombre;
	var monString=""+chaineDeNombre;

	while (inc<eval(monString.length))
	{
		if (monString.charCodeAt(inc)<48 || monString.charCodeAt(inc)>57)
		{
			if (monString.charCodeAt(inc)>=65 || monString.charCodeAt(inc)<=66)
			{
				nombre=monString.charCodeAt(inc)-64;
				caractere="0";
				monString=monString.substring(0,inc)+caractere+monString.substring(inc+1,monString.length);
			}
			else
			{
				if (monString.charCodeAt(inc)>=97 || monString.charCodeAt(inc)<=98)
				{
					nombre=monString.charCodeAt(inc)-96;
					caractere="0";
					monString=monString.substring(0,inc)+caractere+monString.substring(inc+1,monString.length);
				}
				else
				{	
					monString=monString.substring(0,inc)+monString.substring(inc+1,monString.length);
					inc--;
				}
			}
		}

		inc++;
	}
	return monString;
}

function verifNumerodeSecu(champ)
{
	var nodpt         = champ.value.substring(5,7);
	var nosansclef1   = champ.value.substring(0,05);
	var nosansclef2   = champ.value.substring(7,13);
	var clef          = champ.value.substring(13,15);
	
	var cod_nosansclef1   = verifNumerodeSecuConversionNombres(nosansclef1);
	var cod_nodpt         = verifNumerodeSecuConversionNombresDepartement(nodpt);
	var cod_nosansclef2   = verifNumerodeSecuConversionNombres(nosansclef2);
	var Nir , nombreNir;
	var calculCle;
	
	if (champ.value.length!=15)
	{
		//window.console.log("PAS OK LENGTH")
		return false;
	}
	Nir=cod_nosansclef1+cod_nodpt+cod_nosansclef2;
	nombreNir=parseFloat(Nir);

	if (nodpt.substring(1,2) == "B")
	{
		nombreNir=nombreNir-2000000;
	}
	if (nodpt.substring(1,2) == "A")
	{
		nombreNir=nombreNir-1000000;
	}
	calculCle=97-(nombreNir % 97);

	if ( calculCle == clef ){
		//window.console.log("OK")
		return true;
	}else{
		//window.console.log("PAS OK")
		return false;
	}
	
}


/**************************************************************************************************
********* Verification numero d'immat nouvelle norme 2009            ***************************** 11/12/08
**************************************************************************************************/


// ************************************************
// Fonction de validation des immatriculations
// ************************************************
//
// Fonction a appeler : validImmat(chaine a verifier)
//
// retourne true si l immat est correcte sinon retourne 
// false
//
// *************************************************

/********************************
	Suppression des tirets et des espaces
********************************/

function removeChar (str) {
	
	var chaine = str;
	/*var regexp1 = /[-]/;*/
	var regexp2 = /[\s]/;
	
	// on supprime les tirets si present
	/*for (var i=0 ; i < chaine.length ; i++) {
		chaine = chaine.replace(regexp1,"");
	}*/
	for (var j=0 ; j < chaine.length ; j++) {
		chaine = chaine.replace(regexp2,"");
	}
	return chaine;
}


/********************************
	Verifie si une donnee est dans le nouveau format
	retourne true si nouveau immat
	false sinon
********************************/

function isNewImmat (str) {

	var res = false;
		
	// suppression des tirets
	var chaine = removeChar (str);
	
	// format 2 lettre + 3 chiffres + 2 lettres
	var p1 = /^[a-zA-Z]{2}[-][0-9]{3}[-][a-zA-Z]{2}$/;
	
	if (p1.exec(chaine) != null) {
		res = true;
	}
	else {
		res = false;
	}

	return res;
}


/********************************
	Verifie si une donnee est dans l'ancien format
	retourne true si ancien immat
	false sinon
********************************/

function isOldImmat(str) {

	var res = false;
	
	// format global
	var verif = /^[a-zA-Z0-9]{6}[0-9]{2}$/;
	var verifs = /^[a-zA-Z0-9]{7}[0-9]{2}$/;
	var verifs1 = /^[a-zA-Z0-9]{5}[0-9]{2}$/;
	var verifs2 = /^[a-zA-Z0-9]{4}[0-9]{2}$/;
	var verifs3 = /^[a-zA-Z0-9]{3}[0-9]{2}$/;
	 
	// formats intermediaires 3 ch + 3 lettres ou 4 ch + 2 lettres
	var verif1 = /^[0-9]{3}[a-zA-Z]{3}[0-9]{2}$/;
	var verif2 = /^[0-9]{4}[a-zA-Z]{2}[0-9]{2}$/;
	var verif3 = /^[0-9]{3}[a-zA-Z]{2}[0-9]{2}$/;
	var verif4 = /^[0-9]{2}[a-zA-Z]{2}[0-9]{2}$/;
	var verif5 = /^[0-9]{1}[a-zA-Z]{2}[0-9]{2}$/;
	var verif6 = /^[0-9]{2}[a-zA-Z]{3}[0-9]{2}$/;
	var verif7 = /^[0-9]{1}[a-zA-Z]{3}[0-9]{2}$/;
	var verif8 = /^[0-9]{4}[a-zA-Z]{3}[0-9]{2}$/;
  	
	// suppression des tirets
	var objetel = removeChar(str);
	
	if ( !((verif.exec(objetel) != null) || (verifs1.exec(objetel) != null)
		|| (verifs2.exec(objetel) != null) || (verifs3.exec(objetel) != null)
		|| (verifs.exec(objetel) != null))) {
		
		res = false;
	}
	else {
		if ((verif1.exec(objetel) != null) || (verif2.exec(objetel) != null) || (verif3.exec(objetel) != null)
			|| (verif4.exec(objetel) != null) || (verif5.exec(objetel) != null) || (verif6.exec(objetel) != null)
			|| (verif7.exec(objetel) != null) || (verif8.exec(objetel) != null)
			) {
			res = true;
		}
		else {
			res = false;
		}
	}
	
	return res;
}

/********************************
	Verifie si une donnee est ancienne ou nouvelle immat
	retourne true si c est le cas
	false sinon
********************************/

function validImmatNew (str) {

	var test;
	
	if (isNewImmat(str)) {
		test = true;
		//alert("nouvelle immat");
	}
	else if (isOldImmat(str)) {
		test = true;
		//alert ("ancienne immat");
	}
	else {
		test = false;
		//alert ("ERREUR");
	}
	return test;
}



