function parcours (form, search_value) {

	// nombre d'élément contenu dans le formulaire
	/*var nb_elt = document.forms[form_name].elements.length;*/ 
  var nb_elt = form.elements.length;
	//collection d'objet
	var liste=new Array();

	//on parcours et on recherche un élément du form avec un id qui correspond
	for (var i = 0; i < nb_elt ; i ++) {
		if ( form.elements[i].id.substr(0,search_value.length) == search_value) {
      liste.push(form.elements[i]);
  
		}
	}
  return liste;
}

//Ajout de la fonction Trim au type String
String.prototype.trim = function()
{ return this.replace(/(^\s*)|(\s*$)/g, ""); }

/*le validateur : attention !! $=document.getElementByID()  */
function validate(sender,myarray,err_hd,disableDisplay) {

    var message_erreur = new Array();
    var error = false;
    var tabErreur=new Array();
    // remise à zéro  du champ erreur
    if (!disableDisplay) {
      displayError();
    }
    
    //document.getElementById('erreur').className="confirmation cache";
    
    /*remise à zéro des class CSS des champs du formulaire*/
    /*var elements = Form.getElements(sender);
        for (var i = 0; i < elements.length; i++) {
          var element = elements[i];
        if ((element.type!='submit')&&(element.type!='reset')&&(element.type!='button'))
        {
          element.className = '';
        }
          
        }
    */
    /*boucle de parcours du tableau d'entrée*/
    for (i=0;i<myarray.length;i++) {
      var errorField = false;
      //field = document.forms[sender.name].elements[myarray[i][0]];
    
        field = sender.elements[myarray[i][0]];
       // alert('i='+i+'-'+field);
      // remise à zéro de la classe du champ
      //alert ('champ='+myarray[i][0]+' valeur='+field.value+' field='+field);
    
    
    /* Bloc 1 vérifie les champs qui doivent être renseignés */
      if (myarray[i][1].indexOf('e')>-1) {
        if (field && field.type && field.type.toUpperCase() != 'HIDDEN' && (!field.value || !field.value.trim())) {
          error = true;
          errorField = true;
          message_erreur.push(myarray[i][2]);
        }
      }
    
    /* Bloc 2 vérifie si l'adresse électronique est correcte dans la forme */
      else if (myarray[i][1].indexOf('m')>-1) {
        if (field.value) {
          var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
          var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
          var regex = "^"+usr+"\@"+domain+"$";
          var myrxp = new RegExp(regex);
          var check = (myrxp.test(field.value));
            if (check!=true) {
              error=true;
          errorField = true;
              //message_erreur.push(field.value+" "+myarray[i][2]);
              message_erreur.push(myarray[i][2]);
            }
          }
        }
    
    /* Bloc 3 vérifie les champs dont la valeur doit être numérique >=0 */
      else if (myarray[i][1].indexOf('n')>-1) {
        var num_error = false;
        if(field.value) {
          field.value = field.value.replace(/[,]/g,"."); 
          field.value = field.value.replace(/[ ]/g,""); 
        
          var myvalue = field.value;
          var num = myvalue.match(/[^0-9,\.]/gi)
          var dot = myvalue.match(/\./g);
          var com = myvalue.match(/,/g);
          if (num!=null) {
            num_error = true;
          }
          else if ((dot!=null)&&(dot.length>1)) {
            num_error = true;
          }
          else if ((com!=null)&&(com.length>1)) {
            num_error = true;
          }
          else if ((com!=null)&&(dot!=null)) {
            num_error = true;
          }
        }
        if (num_error==true) {
            error = true;
        errorField = true;
            //message_erreur.push(myvalue+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
        }
      }

    /* Bloc 4 vérifie la valeur à l'aide d'une expression régulière sur un modèle déterminé */
      else if (myarray[i][1].indexOf('r')>-1) {
        var regexp = myarray[i][3];
        //on ignore la casse
        var myrxp = new RegExp(regexp, "i");
        //si trouvee alors error
        if (myrxp.test(field.value)) {
        	error = true;
        	errorField = true;
            // message_erreur.push(field.value+" "+myarray[i][2]);
        	message_erreur.push(myarray[i][2]);
		}

      }
    
    /* Bloc 5 vérifie les champs qui doivent être formatés comme des prix et modifie éventuellement le formatage */
      else if (myarray[i][1].indexOf('p')>-1) {
        var myvalue = field.value;
        var reg = /,-{1,}|\.-{1,}/;
        var nantest_value = myvalue.replace(reg,"");
        var num = nantest_value.match(/[^0-9,\.]/gi)
        sep = myarray[i][1].substr(1,1)?myarray[i][1].substr(1,1):',';
        if (field.value) {
          var myvalue = field.value.replace(/\./,',');
          if (myvalue.indexOf(',')==-1) {
            field.value = myvalue+sep+'00';
          }
          else if (myvalue.indexOf(",--")>-1) {
            field.value = myvalue.replace(/,--/,sep+'00');
          }
          else if (myvalue.indexOf(",-")>-1) {
            field.value = myvalue.replace(/,-/,sep+'00');
          }
          else if (!myvalue.substring(myvalue.indexOf(',') + 2)) {
            error=true;
        errorField = true;
            //message_erreur.push(field.value+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
          }
          else if (myvalue.substring(myvalue.indexOf(',') + 3)!='') {
            error=true;
        errorField = true;
            //message_erreur.push(field.value+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
          }
          else if (num!=null) {
            error=true;
        errorField = true;
            //message_erreur.push(field.value+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
          }
        }
      }
    
    /* Bloc 6 vérifie les champs de nom et rectifie éventuellement la casse */
      else if (myarray[i][1].indexOf('c')>-1) {
        var noble = new Array(" d\'", "de","von","van","der","d","la","da","of");
        var newvalue='';
        var myvalue = field.value.split(/\b/);
        for (k=0;k<myvalue.length;k++) {
          newvalue+= myvalue[k].substr(0,1).toUpperCase()+myvalue[k].substring(1);
        }
        for(k=0;k<noble.length;k++){
          var reg = new RegExp ("\\b"+noble[k]+"\\b","gi");
          newvalue = newvalue.replace(reg,noble[k]);
        }
        field.value = newvalue;
      }
      
      /*Bloc 7 controle validité des dates format : JJ/MM/AAAA ssi champ renseigné*/
      else if (myarray[i][1].indexOf('d')>-1 || myarray[i][1].indexOf('q')>-1) {
        var ctl = /^(\d{2,})[\/](\d{2,})[\/](\d{4,})$/;
        var ctl_date = false;
 
        if (field.value) {
          var tab = (field.value).match(ctl);
          if (tab) {
            var unedate = new Date(tab[3], parseInt(tab[2],10)-1, tab[1]);
            if ((unedate.getFullYear() == tab[3]) && (unedate.getMonth() == tab[2]-1) && (unedate.getDate() == tab[1]))
              ctl_date = true;
          }
          if (! ctl_date) {
            error = true;
            errorField = true;
            message_erreur.push(myarray[i][2]);	
          }
        }
      }      
      /*Bloc 8 controle l'absence de caractères spéciaux*/
      else if (myarray[i][1].indexOf('s')>-1) {
        var ctl = /^[0-9a-zA-Z\s_-]*$/;
        var ctl_code = false;
        var tab = (field.value).match(ctl);
        if (tab)
          ctl_code = true;
        
        if (! ctl_code) {
          error = true;
          errorField = true;
          message_erreur.push(myarray[i][2]);	
        }
      }
     
      
       /* Bloc 9 vérifie les champs dont la valeur doit être numérique sans decimal et positive */ 
      else if (myarray[i][1].indexOf('x')>-1) {
        var num_error = false;
        if(field.value ) {
          field.value = field.value.replace(/[,]/g,"."); 
          field.value = field.value.replace(/[ ]/g,"");
          var myvalue = field.value;
          var num = myvalue.match(/[^0-9]/gi)
        
          if (num!=null) {
            num_error = true;
          }
        }
        if (num_error==true) {
            error = true;
        errorField = true;
            //message_erreur.push(myvalue+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
        }
      }
      
      /* Bloc 10 vérifie les champs dont la valeur numérique est différente de zéro */ 
      else if (myarray[i][1].indexOf('z')>-1) {
        var num_error = false;
        if(field.value) {
          field.value = field.value.replace(/[,]/g,".");
          field.value = field.value.replace(/[ ]/g,"");
          var myvalue = field.value;
          
          if (isNaN(parseFloat(myvalue)) || !myvalue || parseFloat(myvalue) == 0) {
            num_error = true;
          }
        }
        if (num_error==true) {
            error = true;
        errorField = true;
            //message_erreur.push(myvalue+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
        }
      }
      /* Bloc 11 vérifie les champs dont la valeur numérique est comprise entre -10000000000 et 10000000000 */ 
       else if (myarray[i][1].indexOf('y')>-1) {
        var num_error = false;
        if(field.value) {
          field.value = field.value.replace(/[,]/g,".");  
          field.value = field.value.replace(/[ ]/g,"");
          var myvalue = field.value;
          if (myvalue.indexOf('%') > -1 || isNaN(parseFloat(myvalue)) || !myvalue || parseFloat(myvalue) > 10000000000||parseFloat(myvalue) < -10000000000) {
            num_error = true;
          }
        }
        if (num_error==true) {
            error = true;
        errorField = true;
            //message_erreur.push(myvalue+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
        }
      }
      
      /* Bloc 12 vérifie les champs dont la valeur numérique est positive */ 
      else if (myarray[i][1].indexOf('+')>-1) {
        var num_error = false;
        if(field.value) {
          field.value = field.value.replace(/[,]/g,"."); 
          field.value = field.value.replace(/[ ]/g,"");
          var myvalue = field.value;
          
          if (isNaN(parseFloat(myvalue)) || myvalue && myvalue.indexOf('-') >= 0) {
            num_error = true;
          }
        }
        if (num_error==true) {
            error = true;
        errorField = true;
            //message_erreur.push(myvalue+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
        }
      }
      
      /* Bloc 13 vérifie les champs dont la valeur numérique est inferieur ou egal au 4 eme element du tableau et positif*/ 
      else if (myarray[i][1].indexOf('i')>-1) {
        var num_error = false;
        var valMax = myarray[i][3];
        valMax = valMax.replace(/[,]/g,".");
        valMax = valMax.replace(/[ ]/g,"");
        if(field.value) {
          field.value = field.value.replace(/[,]/g,"."); 
          field.value = field.value.replace(/[ ]/g,"");
          var myvalue = field.value;
          var num = myvalue.match(/[^0-9]/gi);
          //si nombre avec decimal ou negatif
          if (num!=null) {
            num_error = true;
          }
          else if (isNaN(parseFloat(myvalue)) || isNaN(parseFloat(valMax)) || parseFloat(myvalue) > parseFloat(valMax)) {
            num_error = true;
          }
        }
        if (num_error==true) {
            error = true;
        errorField = true;
            //message_erreur.push(myvalue+" "+myarray[i][2]);
            message_erreur.push(myarray[i][2]);
        }
      }
      
      
      
      
      /*Affichage des erreurs s'il en existe*/
      if (errorField)
      {
        //alert (myarray[i][0]);
        tabErreur.push(myarray[i][0]);
      }
    }
    
    
   
    
    
    /* En cas d'erreur, les messages d'erreur récoltés sont exploités ici puis affichés.
       Si le formulaire est correctement rempli, il est transmis */
      if (error) {
        if (!disableDisplay) {
          displayError(message_erreur,err_hd);
        }
        
        var x;
        for (x=0;x<tabErreur.length;x++)
        {
          //document.forms[sender].elements[tabErreur[x]].className="champObligatoire";
        }
    
        return false;
      }
      else {
        return true;
      }
}

function displayMessageError(message_erreur) {
    displayError(message_erreur,'Erreur(s) :');
}

function displayMessageInfo(message_info) {
    displayError(message_info,'Information(s) :');
}

function displayError(message_erreur,err_hd) {
        
        var de = document.getElementById('erreur');
        var di = document.getElementById('information');
        
        if ((!message_erreur || message_erreur == '') && (!err_hd || err_hd == '')) {
              de.innerHTML='';
              de.style.display='none';
              di.style.display='none';
        } else {
              message_erreur = message_erreur.join('</li>\n<li>');
              message_erreur = '<ul><li>' + message_erreur + '</li></ul>';
              
              var titre = '';
              if (err_hd != null) {
                titre = "<div id='titre'>"+err_hd+"</div>"
              }
              de.innerHTML=titre + message_erreur;
              di.style.display='none';
              de.style.display='block';
        }
}

function displayInfo(message_info,info_hd) {
        
        var de = document.getElementById('erreur');
        var di = document.getElementById('information');
        
        if ((!message_info || message_info == '') && (!info_hd || info_hd == '')) {
              di.innerHTML='';
              de.style.display='none';
              di.style.display='none';
        } else {
              message_info = message_info.join('</li>\n<li>');
              message_info = '<ul><li>' + message_info + '</li></ul>';
              
              var titre = '';
              if (info_hd!= null) {
                titre = "<div id='titre'>"+info_hd+"</div>"
              }
              di.innerHTML=titre + message_info;
              de.style.display='none';
              di.style.display='block';
        }
}

function hideError() { 
  hideErrorAndInfo('erreur');      
}

function hideInfo() {
  hideErrorAndInfo('information');
}

function hideErrorAndInfo(dname) {
  var de = document.getElementById(dname);
  if (de) {
    de.innerHTML='';
    de.style.display='none';
  }
}

/*focntion de contrôle validité couple de date (fonctionne en solo aussi) */
function controleFormatDate(date_debut_valeur, date_fin_valeur) {
   // contrôle la valeur d'un champ comme une date au format JJ/MM/AAAA
   var ok2 = false;
   var ok1 = false;
   ctl = /^(\d\d?)[\/](\d\d?)[\/](\d{4,})$/;
   
   if(date_fin_valeur== "" )
		ok2=true;
	else {
		var tab = date_fin_valeur.match(ctl);
		 if (tab) {
         var unedate = new Date(tab[3], parseInt(tab[2])-1, tab[1]);
         if ((unedate.getFullYear() == tab[3]) && (unedate.getMonth() == tab[2]-1) && (unedate.getDate() == tab[1])) ok2 = true;
		}
	}
   // vérifie le format date
   if(date_debut_valeur == "" )
		ok1=true;
	else {
		var tab = date_debut_valeur.match(ctl);
		if (tab) {
			 var unedate = new Date(tab[3], parseInt(tab[2])-1, tab[1]);
			 if ((unedate.getFullYear() == tab[3]) && (unedate.getMonth() == tab[2]-1) && (unedate.getDate() == tab[1])) ok1 = true;
		}
	}
	
	
	if ( ok1 && ok2) {
		var ok=true;
	}
	else {
		//alert('Filtrage: Format de date invalide (JJ/MM/AAAA) ou date incohérente');
		var ok=false;
	}
		
   return ok;
}


/*
Form field Limiter script- By Dynamic Drive
*/

var ns6=document.getElementById&&!document.all

function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9\.\,\/]/ //detect alphanumeric keys
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}

function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0)
theform.value=theform.value.substring(0,maxlength)
placeholderobj.innerHTML=lengthleft
}
}


function displaylimit(thename, theid, thelimit){
  var theform=theid!=""? document.getElementById(theid) : thename
  var limit_text='<b><span id="'+theform.toString()+'">'+thelimit+'</span></b> characters remaining on your input limit'
  if (document.all||ns6)
  //document.write(limit_text)
  if (document.all){
    eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
    eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
  }
  else if (ns6){
    document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true); 
    document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true); 
  }
}

//Vérifie si la date contenue dans le second champ en paramètre est strictement supérieure à la date contenue dans le premier champ
function isDateAfter(tddeb,tdfin) {
  var datedeb = tddeb.value;
  var datefin = tdfin.value;
  var isAfter = true;
  
  if (tddeb && tdfin && datedeb && datefin) {
  
    var dyear = datedeb.substring(datedeb.lastIndexOf('/')+1);
    var fyear = datefin.substring(datefin.lastIndexOf('/')+1);
  
    var ddate = datedeb.substring(0,datedeb.indexOf('/'));
    var fdate = datefin.substring(0,datefin.indexOf('/'));
    
    var dmonth = datedeb.substring(ddate.length+1,datedeb.length - dyear.length-1);
    var fmonth = datefin.substring(fdate.length+1,datefin.length - fyear.length-1);
    
    dyear = dyear*1;
    fyear = fyear*1;
    
    ddate = ddate*1;
    fdate = fdate*1;
    
    dmonth = dmonth*1;
    fmonth = fmonth*1;
    
    if (fyear < dyear) {
      isAfter = false;
    } else if (fyear == dyear && fmonth < dmonth) {
      isAfter = false;
    } else if (fyear == dyear && fmonth == dmonth && fdate <= ddate) {
      isAfter = false;
    } else {
      isAfter = true;
    }
    
  }
  return isAfter;
      
}



  function format(valeur) {
 // valeur= valeur.replace(/[ ]/g,""); en commentaire suite à ano sur initialisation flux vahine
  var decimal=2;
  var separateur=" ";
	var deci=Math.round( Math.pow(10,decimal)*(Math.abs(valeur)-Math.floor(Math.abs(valeur)))) ; 
	var val=Math.floor(Math.abs(valeur));
    
      if ((decimal==0)||(deci==Math.pow(10,decimal))) { 
      val=Math.floor(Math.abs(val)+1);
      deci=0;
      }
      
  var val_format=val+"";
	var nb=val_format.length;
	for (var i=1;i<4;i++) {
		if (val>=Math.pow(10,(3*i))) {
			val_format=val_format.substring(0,nb-(3*i))+separateur+val_format.substring(nb-(3*i));
		}
	}
	if (decimal>0) {
		var decim=""; 
		for (var j=0;j<(decimal-deci.toString().length);j++) {decim+="0";}
		deci=decim+deci.toString();
    if(deci=="00"){
    val_format=val_format+"."+deci;
    }else{
    val_format=val_format+"."+deci;
    }
	}
	if (parseFloat(valeur)<0) {val_format="-"+val_format;}
	return val_format;
}  

function firstDayOfMonth(id){
//test la validite de la date
var val=document.getElementById(id).value;
  if(val!=""&&controleFormatDate(val,"")){
  //transformation en premier jour du mois
   var x=val.indexOf("/",0);
  var newDate='01'+val.substring(x);
  document.getElementById(id).value=newDate;
  setExercice(newDate);
  }else{
 // document.getElementById(id).value="";
  }

}

/* si la valeur du champ Mois dans l'edition n'est pas nulle on renseigne 
le champ exercice avec l'année du mois specifié*/
function setExercice(valeur){

  if(valeur!=""){
  // si le champ exercie existe
   if(document.getElementById('Exercice')){
   var ex=valeur.substring(valeur.length - 4);
    document.getElementById('Exercice').value=ex;
   } 
  }

}