//init form fields ... 
var oForm=null;
//recup init values for each field ...
function selectElement() {
  this.select();
}
function setInitValues() {
  var cForms=document.forms; 
  for(var f=0;f<cForms.length;f++) {
   var cElements=cForms[f].elements;
   for(var e=0;e<cElements.length;e++) {
    switch(cElements[e].type) {
    case "text":
    case "textarea":
     cElements[e].onfocus=selectElement;
     cElements[e].setAttribute("initValue",cElements[e].value);
     break;
    default: 
     continue;
     break;
   }
   }
  }
}


//call onload 
if(window.attachEvent) {
 window.attachEvent("onload",setInitValues);
} else if(window.addEventListener) {
 window.addEventListener("load",setInitValues,false);
} else {
 window.onload=setInitValues;
}


//function pour afficher le message d'erreur ...
function showError(oField) {
 if(oField.onbeforeactivate) oField.onbeforeactivate();
 var sLabel=labelField(oField);
 var rQuestion=new RegExp("^.+\\?\\s*$");
 sLabel=(rQuestion.test(sLabel)?"La question `":"Le champ `")+sLabel;
 alert(sLabel + "` est obligatoire." + (oField.getAttribute("help")?"\n\n"+oField.getAttribute("help").replace(/\\n/g,"\n"):""))
 oField.focus();
 return false;
}



// vérifie la validité de la date
//##############################-
function verifDate(oField)
{
if (oField.value.length==0) 
 return true;
var aDate=oField.value.split(/[\s-_\/]/);
var iYear=parseInt(new Number(aDate[2]));
if (iYear<100) {
 iYear+=2000;
 }
var iMonth=parseInt(new Number(aDate[1]));
var iDay=parseInt(new Number(aDate[0]));
if (isNaN(iMonth)||1>iMonth || iMonth>12) {
  if(oField.onbeforeactivate) oField.onbeforeactivate();
  alert("Le mois est incorrect.")
  oField.focus();
  return false;
 }
var iDayMax=30;
switch (iMonth) {
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12:
  iDayMax=31;
  break;
 case 2: 
  iDayMax=((iYear%4==0&&iYear%100!=0)||(iYear%1000==0))?29:28;
  break;
 default: 
  iDayMax=30;
  break;
 }
if (isNaN(iDay) || 1>iDay || iDay>iDayMax) {
  if(oField.onbeforeactivate) oField.onbeforeactivate();
  alert("Le jour est incorrect.")
  oField.focus();
  return false;
 }
if (isNaN(iYear)) {
  if(oField.onbeforeactivate) oField.onbeforeactivate();
  alert("L'année est incorrect.")
  oField.focus();
  return false;
 }
if (iDay<10) aDate[0]="0" + iDay;
if (iMonth<10) aDate[1]="0" + iMonth;
return true;
}



//controle format time
function verifTime(oField) {
 if (!/\d{2}\:\d{2}/g.test(oField.value)) {
  if(oField.onbeforeactivate) oField.onbeforeactivate();
  alert("La valeur du champ " + labelField(oField) + " n'a pas le bon format (HH:MM).")
  oField.focus();
  return false;
 }
 
 var aTime=oField.value.split(/\:/);
 var iHour=parseInt(aTime[0]);
 var iMin=parseInt(aTime[1]);
 if (iHour > 24 || iMin>60 || (iHour==24 && iMin!=0)) {
  if(oField.onbeforeactivate) oField.onbeforeactivate();
  alert("La valeur du champ " + labelField(oField) + " n'a pas le bon format (HH:MM).")
  oField.focus();
  return false;
 }
 return true;
}





function verifRadio(oField) {
 //mettre valeur defaut pour checkbox ...
 if (oField.type=="checkbox" && oField.getAttribute("default")) {
  if (oField.checked) {
   delHidden(oField.name);
  }
  else {
   setHidden(oField.name,oField.getAttribute("default"));
  }
 }
 return true;
}



//function permettant de récuperer le contenu du tags <LABEL FOR=..> ..</LABEL> associé à un champ ..
function cherche_label(champ) {

  var chaine = "";

   //On cible le div parent
   $(champ).parent().each( function(){
       //recherche du premier label
       var texte = $(this).children("label").text();
       //texte = texte.trim();

       //suppression des : à la fin
       var pos = texte.lastIndexOf(':');
       chaine = texte.substring(0,pos);
       chaine = chaine.trim();
    });
    return chaine;
}



//Fonction qui vérifie si un champ est bien rempli
function verif_required_input(input){
  if($(input).attr('type')=='text' ||$(input).attr('type')=='textarea'){
     if($(input).attr('value') == $(input).attr('initValue') || $(input).attr('value') == ''){
         var texte = cherche_label(input);
         alert('Le champ "'+texte+'" est obligatoire');
         return false;
     }
  } else if($(input).attr('type')=='checkbox'){
     var nb_checked = 0;
     $("input[name="+$(input).attr('name')+"]").each( function(){
         if($(this).attr('checked')) nb_checked++;
     });
     if(nb_checked==0){
        var texte = cherche_label(input);
        alert('Le champ "'+texte+'" est obligatoire');
        return false;
     }
  } else if($(input).attr('type')=='select-one'){

       if($(input).attr("selectedIndex")<1){
           var texte = cherche_label(input);
           alert('Veuillez selectionner une valeur pour le champ "'+texte+'"');
           return false;
       }
  }
  return true;
}


//Fonction générique pour le controle des champs
function verifyForm() {

    //pour savoir si on peut valider le formulaire
    var retour = 1;

    //traitement des input
    $(":input").each( function(){

        if($(this).attr('required') && !$(this).attr('disabled')){
            if(!verif_required_input($(this))){
                 retour = 0;
                 return false;
            }
        }
    });
   if(retour == 0) return false;
 }  
