
$(function() {
	/*
		si on est sur le formulaire de mise à jour des infos persos,
		on verifie qu'au moins un champ a été modifié pour envoyer le formulaire
	*/
	if (/MajInfosPerso.srvl/.test($('#form_gene').attr('action'))) {
		$('#valider').attr("disabled","disabled");
	
		var tabIds = new Array();
		var tabVals = new Array();
		// on commence par récupérer toutes valeurs des champs du formulaire
		$('#form_gene :input').each(function(i) {
			//var id_champ = $(this).attr('name');
			//tabVals[id_champ.toString()] = $(this).val();
			tabIds.push($(this).attr('name'));
			tabVals.push($(this).val());
		}).change(function() {
			var id = jQuery.inArray(this.name,tabIds);
			if (id != -1 && tabVals[id] != this.value) {
				$('#valider').removeAttr("disabled");
			}
		});
	}
});



var xmlhttp = getHTTPObject();

/*
****  DEBUT FONCTIONS DE CONTROL DE VALEUR !!!!
*/	
		
/**
 * @name EstSirenValide
 *
 * @param     Le code SIREN dont on veut vérifier la validité.
 *
 * @return     Un booléen qui vaut 'true' si le code SIREN passé en
 * paramètre est valide, false sinon.
 */
   function EstSirenValide(siren) {
   	//on remplace tous les espace, pointp, tiret par rien 
    siren=siren.replace(/( |,|\.)/g, "");
   
    var estValide=true;
    if ( !isNaN(siren) ){
     
     if ( (siren.length != 9) )
       estValide = false;
     else {
       // Donc le SIREN est un numérique à 9 chiffres
       var somme = 0;
       var tmp;
       for (var cpt = 0; cpt<siren.length; cpt++) {
         if ((cpt % 2) == 1) { // Les positions paires : 2ème, 4ème, 6ème et 8ème chiffre
           tmp = siren.charAt(cpt) * 2; // On le multiplie par 2
           if (tmp > 9)
             tmp -= 9;    // Si le résultat est supérieur à 9, on lui soustrait 9
         }
         else
           tmp = siren.charAt(cpt);
         somme += parseInt(tmp);
       }
       if ((somme % 10) == 0)
         estValide = true;    // Si la somme est un multiple de 10 alors le SIREN est valide
       else
         estValide = false;
     }
    } 
    return estValide;
   }
  
  
  /*
       Via ce script vous spécifiez que l'email doit :
       - contenir une arobase et un point
       - avant la présence de l'arobase nous pouvons trouver, des lettres quelconques
           (en minuscule ou majuscule), n'importe quel chiffre, et les caractères "-" ou "_"
       - aprés l'arobase, la vérification reste la même mais on interdit la présence de "_"
           et il faut impérativement au moins de caractères entre l'arobase et le point
       - aprés le point, nous devons une succession de 2 ou 3 caractères doivent être
           présentes afin de pouvoir valider l'adresse email.    
       
			 - maj gm (22060913) il peut y avoir plusieur . dans un mail !!
  */
	function EstMailValide(email){
    //var verif = /^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9-]{2,}([\.-][a-zA-Z0-9]*)*[\.][a-zA-Z]{2,3}$/
    var verif = /^([_a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+)(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$/
    return verif.test(email);
  } 

  
	function EstCdPosValide(cdpos){
   	var verif = /^[0-9][0-9][0-9][0-9][0-9]$/
   	return verif.test(cdpos);
	}   		
		
	function estNombre(str){
		for (i=0;i<str.value.length;i++){
			if((str.value.charAt(i)+"")>"9" || (str.value.charAt(i)+"")<"0")
				return false;
		}
		return true;
	}		
		
		
	function controle_champs(elem, libelle, id){
		retour_erreur = "";
		
		if($(id+"edit_"+elem).size() == 0)
			retour_erreur += "\n - "+ libelle +" - "+ elem +" - est manquant pour ce type de formulaire !"
			
			//si le champs n'est pas obligatoire on bloque et on alert !!
		else if(!$(id+"label_"+elem).hasClass("obligatoire") && $(id+"edit_"+elem).val() == ""){
				retour_erreur += "\n - "+ libelle +" ne doit pas être vide !";
				$(id+"label_"+elem).addClass("entoure");
		}else{
				$(id+"label_"+elem).removeClass("entoure");
    }
		
		return retour_erreur;
	}
		

	function controlServlet(id){
		//définition des champs obligatoires par servlet ...
		form_f_name = $(id+"form_f_name");
		form_f = $(id+"form_gene");
		retour_erreur = "";
				
		if(form_f.attr("action").indexOf("FormServlet_v2") > 0){
			
		}else if(form_f.attr("action").indexOf("ContactServlet") > 0){
		
		}else if(form_f.attr("action").indexOf("Astuce") > 0){
		
		}else if(form_f.attr("action").indexOf("CdeCatalServlet") > 0){
			//catalogues
			//lib_xxx et qte_xxx
		
		}else if(form_f.attr("action").indexOf("MajInfosPerso") > 0){
//			retour_erreur += controle_champs("form_email_DB2", "le champs email");
		
		}else if(form_f.attr("action").indexOf("InscriptionCli") > 0){
			//agence_toute
			//codeclient
			//siren
			retour_erreur += controle_champs("form_agence_toute", "la combo de sélection agence", id);
			retour_erreur += controle_champs("form_codeclient_DB2", "le champs code client", id);
			//retour_erreur += controle_champs("form_siren_DB2", "le champs code siren");
		}else if(form_f.attr("action").indexOf("Inscription") > 0){
			//email
			//retour_erreur += controle_champs("form_email_DB2", "le champs email", id);
		}else if(form_f.attr("action").indexOf("RecupMDPServlet") > 0){
			//login
			retour_erreur += controle_champs("form_login_DB2", "le champs login", id);
		}
		
		
		if(retour_erreur.length > 0){	
			alert("Message système : " + retour_erreur);
			return true;
		}

		return false;
	}
		
		
		
		
		
	/*
		****  FIN FONCTIONS DE CONTROL DE VALEUR !!!!
	*/		
	
	function check_formulaire(form){
		retour=false;
		idForm = form.id;
		//on extrait l'id
		i = idForm.indexOf("_");
		idKey = idForm.substring(0, i);
		id="#"+idKey+"_";
		
		//suppression de tous les champs entoure
		$(".entoure", form).removeClass("entoure");
		
		//on dé-saisi tous les champs qui sont dans des div hidden ....
		supprimeHidden();
		
		//supression des espace, -, . dans les champs numériques
		el=$(id+"edit_form_siren_DB2");if(el.size()>0)el.val(el.val().replace(/( |,|\.|-)/g, ""));
		el=$(id+"edit_form_cd_pos_DB2");if(el.size()>0)el.val(el.val().replace(/( |,|\.|-)/g, ""));
		el=$(id+"edit_form_tel_por_DB2");if(el.size()>0)el.val(el.val().replace(/( |,|\.|-)/g, ""));
		el=$(id+"edit_form_tel_fix_DB2");if(el.size()>0)el.val(el.val().replace(/( |,|\.|-)/g, ""));
		el=$(id+"edit_form_fax_DB2");if(el.size()>0)el.val(el.val().replace(/( |,|\.|-)/g, ""));
		
		$(".obligatoire", form).each(function(i){

      //si le champs obligatoire n'est pas caché on le contrôle !!
		  if($(":hidden #"+this.id).length == 0){		
  		  //on est sur le label donc on verifie le edit !!
  		  _label = $(this);
        _edit = $("#"+this.id.replace("label", "edit"));
        _radio = $(":radio[id^="+this.id.replace("label", "edit")+"]");
        _checkbox = $(":checkbox[id^="+this.id.replace("label", "edit")+"]");
        
        //on verifie les checkbox et les radio
        if(_radio.size()>0 || _checkbox.size()>0 ){
          if(_radio.is(":checked") || _checkbox.is(":checked")){  
            _label.removeClass("entoure");
          }else{
            _label.addClass("entoure");
            retour=true; 
          }				
  			}else if (_edit.size()>0 ){ //input normal !!
  				//si radio bouton type d'agence, il ne faut controler que la combo agence correspondante
  				if($(id+"edit_form_typeagence_forum").size()>0 && $(id+"edit_form_typeagence_forum").is(":checked") && /^form_(agence|depart)/.test(_edit.attr("name"))){
            if(_edit.attr("name")=="form_agence_forum" && _edit.val() == ""){
  						retour = true;
  						_label.addClass("entoure");
  					}else{
  						_label.removeClass("entoure");
  					}
  				}else if($(id+"edit_form_typeagence_agence").size()>0 && $(id+"edit_form_typeagence_agence").is(":checked") && /^form_(agence|depart)/.test(_edit.attr("name"))){
            if((_edit.attr("name")=="form_agence_toute" || _edit.attr("name")=="form_depart_agence_toute") && _edit.val() == ""){
  						retour = true;
  						_label.addClass("entoure");
  					}else{
  					  _label.removeClass("entoure");
  					}			
  				}else{
            if(_edit.val() == ""){
              _label.addClass("entoure");
              retour=true; 
            }else{
              _label.removeClass("entoure");
            }
  				}
  			}
  		}
    });

		// !! Controle spécifique pour le SIREN !!
	  if($(":hidden "+id+"edit_form_siren_DB2").length == 0){		
  		_edit=$(id+"edit_form_siren_DB2");
  		_label= $(id+"label_form_siren_DB2");
  		if(	_edit.size()>0 && _label.size()>0 && ( 
  					( _edit.val() != "" && !EstSirenValide(_edit.val()))
  					|| ( _edit.val() == "" && _label.hasClass("obligatoire") )	
  				) ){
  			retour = true;
  			_label.addClass("entoure");
  		}else{
  			_label.removeClass("entoure");
  		}
    }
      
		// !! Controle spécifique pour l'e-mail !! *
		_edit=$(id+"edit_form_email_DB2");
		_label= $(id+"label_form_email_DB2");
		if(	_edit.size()>0 && _label.size()>0 && ( 
					( _edit.val() != "" && !EstMailValide(_edit.val()) )
					|| ( _edit.val() == "" && _label.hasClass("obligatoire") )	
				) ){
			retour = true;
			_label.addClass("entoure");
		}else{
			_label.removeClass("entoure");
			
			// !! Controle spécifique si il y a le champ de controle !!
	  	_edit_control=$(id+"edit_form_email_control_DB2");
  		_label_control= $(id+"label_form_email_control_DB2");
			if(_edit_control.size()>0 && _label_control.size()>0){
				_edit_control.val(_edit_control.val().toLowerCase());
        _edit.val(_edit.val().toLowerCase());
			}			
			
			if(_edit_control.size()>0 && _edit_control.val() != _edit.val()){
  			_label_control.addClass("entoure");
				retour = true;
			}else{
  			_label_control.removeClass("entoure");
			}
		}
	

		//** !! Controle spécifique pour le code postal !! *
		_edit=$(id+"edit_form_cd_pos_DB2");
		_label= $(id+"label_form_cd_pos_DB2");
		if(	_edit.size()>0 && _label.size()>0 && ( 
					( _edit.val() != "" && !EstCdPosValide(_edit.val()))
					|| ( _edit.val() == "" && _label.hasClass("obligatoire") )	
				) ){
			retour = true;
			_label.addClass("entoure");
		}else{
			_label.removeClass("entoure");
		}

		//** !! Controle spécifique pour la newsletter et le champ email !! *
		_edit=$(id+"edit_form_newsletter_DB2_oui");
		_label= $(id+"label_form_email_DB2");
		if(_edit.size()>0 && _label.size()>0 
           && _edit.is(":checked")
           && $(id+"edit_form_email_DB2").val() == ""
		  ){
			retour = true;
			_label.addClass("entoure");
		}

		retour_control=controlServlet(id);
		if(retour){
		  if(!retour_control) alert("Veuillez saisir ou corriger le(s) champ(s) entouré(s) en rouge :\n");
			return false;
		}else{
		  if(retour_control) return false;
			$(id+"valider").attr('disabled','disabled').after('<p class="submit_wait">Veuillez patienter...</p>');
			return true;
		}

	}

	function checkbloc(blocname, etat){
		
		elems = document.getElementsByTagName("div");

		for(i=0; i<elems.length; i++){
			if(elems[i].className.indexOf(blocname) >= 0){
				elems[i].style.display = etat;
				//on désactive les radio et les checkboxs si on est en (etat=none)!!
				//on fait aussi les zones textes et les select ...
				/*if(etat == "none"){
					radios=elems[i].getElementsByTagName("input");
					for(j=0; j<radios.length; j++){
						if(radios[j].type == "checkbox" || radios[j].type == "radio"){
							radios[j].checked=false;
						}
						if(radios[j].type == "text" || radios[j].type == "password"){
							radios[j].value="";
						}
					}
					combo=elems[i].getElementsByTagName("select");
					for(j=0; j<combo.length; j++){
							combo[j].selectedIndex=0;
					}
					textarea=elems[i].getElementsByTagName("textarea");
					for(j=0; j<textarea.length; j++){
							textarea[j].value="";
					}
				}*/
			}
		}
	}


	/* supppression des valeurs dans les champs des div qui sont hidden */
	function supprimeHidden(){
		elems = document.getElementsByTagName("div");

		for(i=0; i<elems.length; i++){
			if(elems[i].style.display == "none"){
				radios=elems[i].getElementsByTagName("input");
				for(j=0; j<radios.length; j++){
					if(radios[j].type == "checkbox" || radios[j].type == "radio"){
						radios[j].checked=false;
					}
					if(radios[j].type == "text" || radios[j].type == "password"){
						radios[j].value="";
					}
				}
				combo=elems[i].getElementsByTagName("select");
				for(j=0; j<combo.length; j++){
						combo[j].selectedIndex=0;
						//alert(combo[j].value);
				}
				textarea=elems[i].getElementsByTagName("textarea");
				for(j=0; j<textarea.length; j++){
						textarea[j].value="";
				}
			}
		}
	}



	function ajax(){
		if(xmlhttp.readyState == 4) {
			eval(xmlhttp.responseText);
		}
	}


	//fonction qui rempli la liste déroulante en fonction du departement sélectionné
	function majAgences(cle){
	
		//ajax pour le remplissage des combos agences
		var url = "/form/jsp/form_ajax.jsp?id="+cle+"&depart=&agence=";
		var params = "";
		//if(depart!=""){
			statut=0;
			xmlhttp.open("POST",url,true);
			xmlhttp.onreadystatechange=ajax;
			xmlhttp.send(params);
		//}
	}


	//fonction qui rempli la liste déroulante en fonction du departement sélectionné
	function majAgences(depart, type, agence){
		//on extrait l'id
		i = depart.id.indexOf("_");
		idKey = depart.id.substring(0, i);
	
		//ajax pour le remplissage des combos agences
		var url = "/form/jsp/form_ajax.jsp?id="+idKey+"&depart="+depart.value+"&agence="+agence;
		var params = "";
		//if(depart!=""){
			statut=0;
			xmlhttp.open("POST",url,true);
			xmlhttp.onreadystatechange=ajax;
			xmlhttp.send(params);
		//}
	}

	function selAgence(depart, agence, cle){
		//on positionne le departm
		if(	document.getElementById(cle+"_edit_form_depart_agence_toute")){
			elem = document.getElementById(cle+"_edit_form_depart_agence_toute");
			for(i=0;i<elem.length;i++){
				if(elem[i].value == depart){
					elem[i].selected=true;
					break;
				}			
			}
		
			//on met à jour les agences
			majAgences(elem, "ALL", agence);
		}else{
			if(document.getElementById(cle+"_edit_form_agence_forum")){
				cbcatal=document.getElementById(cle+"_edit_form_agence_forum");
				for(i=0; i<cbcatal.length; i++){
					elem=cbcatal[i];
					if(elem.val()==agence){
						elem.selected=true;
						//on affiche le div si il est caché ...
						divs=document.getElementsByTagName("div");
						for(j=0; j<divs.length; j++){
							if(divs[j].className==cbcatal.parentNode.className){
								divs[j].style.display="";
							}
						}
					}else{
						elem.selected=false;
					}
				}
			}
		}		
	}

  //TODO A revoir GM 200901
	function majProf(elem){
		// si l'élément est une profession PRO alors on active le control du champs oblig sur le SIREN
		// sinon on ne l'active pas
		if(elem.val() == '111'){
			//on active
			if( document.getElementById("oblig_form_siren_DB2")){
				document.getElementById("oblig_form_siren_DB2").name = "obligatoire";
				//on ajoute l'étoile
				label = document.getElementById("label_form_siren_DB2");
				//label.getElementsByTagName("font")[0].style.display="block";
				label.getElementsByTagName("font")[0].style.visibility="";
				}
		}else{
			//on désactive !!
			if( document.getElementById("oblig_form_siren_DB2")){
				document.getElementById("oblig_form_siren_DB2").name = "pasoblig";
				//on supprime l'étoile
				label = document.getElementById("label_form_siren_DB2");
				//label.getElementsByTagName("font")[0].style.display="none";
				label.getElementsByTagName("font")[0].style.visibility="hidden";
			}
		}
	}


  //TODO A revoir GM 200901
	function selPays(){
		var ll="";
		if (navigator.language){
		  ll=navigator.language;
		}else if (navigator.userLanguage){
		  ll=navigator.userLanguage;
		}
		if(	document.getElementById("edit_form_pays_DB2")){
			elem = document.getElementById("edit_form_pays_DB2");
			for(i=0;i<elem.length;i++){
				if(elem[i].value == ll.toUpperCase()){
					elem[i].selected=true;
				}			
			}
		}
	}

