/*-----------------------------------------------------*/
/* société : Unilog IT Services a LogicaCMG company    */
/* Auteur  : Stéphane Anet                             */
/*                                                     */
/* date : 20/06/2006                                   */
/*-----------------------------------------------------*/
var imgsrc="images/divers/";


function verifsFormulaire(envoiForm, objForm)
{

    // document.body.className = "sablier";
    // suppression du message d'erreur
    if(document.getElementById("libErreur") != null)
    {
      document.getElementById("libErreur").innerHTML= "&nbsp;";
    }
    // boucle sur l'ensemble des champs input de l'écran
    // initialisation
    var resultat_tests = "ok";
    var focus_zone = "non";
    var nom_focus="";
    var nombre = objForm.elements.length;
    for(cpt=0;cpt< nombre;cpt++)
    {
      if(objForm.elements[cpt] != undefined)
      {
        if(objForm.elements[cpt].type == "textarea" ||
           objForm.elements[cpt].type == "text" ||
           objForm.elements[cpt].type == "password" ||
           objForm.elements[cpt].type == "select-one" ||
           objForm.elements[cpt].type == "select-multiple")
        {
          obj_zone= objForm.elements[cpt];
          // mise en majuscule de certain champ
          majusculeZones(obj_zone);
          if(document.images[obj_zone.name + "Ctrl"] != undefined)
          {
            // vérification type et champ obligatoire
            resultat = verifsInput(obj_zone, "NON");
            if(resultat == "nok")
            {
              resultat_tests = "nok";
              if(focus_zone == "non")
              {
                 focus_zone="oui";
                 nom_focus=obj_zone;
              }
            }
          }
        }
      }
    }
    if(resultat_tests == "nok")
    {
      // au moins un des tests est nok (non envoi du formulaire)
      // focus sur la 1ere zone de saisie en erreur
      nom_focus.focus();
      alert("SAISIE DES DONNÉES INCORRECTES" + "\n" + "\n" +
            "vérifier le formulaire de saisie");
      return false;
    }
    else
    {
      if(envoiForm == true)
      {
        // envoi des données du formulaire
        return true;
      }
      else
      {
        // les données ont été vérifiées
        return true;
      }
    }
}
function verifsInput(obj_zone, unitaire)
{
  var nom_zone = obj_zone.name;
  // récupération de : Type, required (OUI ou NON), longueur obligatoire (dans balise alt)
  if(obj_zone.alt == null)
  {
     return true;
  }
  var alt=  obj_zone.alt;
  var chaine = alt.split("_");
  var required=chaine[0];
  var type=chaine[1];
  var longueur_min=chaine[2];
  var longueur_max=chaine[3];

  if (obj_zone.value!="")
  {
    document.images[nom_zone + "Ctrl"].src= imgsrc + "invisible.gif";
    if (type=="ENTIER" && !validationEntier(droiteTrim(obj_zone.value)))
    {
      document.images[nom_zone + "Ctrl"].src= imgsrc + "type_incorrect.gif";
      document.images[nom_zone + "Ctrl"].title= "TYPE INCORRECT : " + "ENTIER demandé";
      if (unitaire == "OUI")
      {
        // test unitaire
        alert("TYPE INCORRECT" + "\n" + "\n" + "ENTIER demandé");
        obj_zone.blur();
        obj_zone.focus();
      }
      else
      {
        // test sur submit de la form
        return "nok";
      }
    }
    else if (type=="REEL" && !validationReel(droiteTrim(obj_zone.value)))
    {
      document.images[nom_zone + "Ctrl"].src= imgsrc + "type_incorrect.gif";
      document.images[nom_zone + "Ctrl"].title= "TYPE INCORRECT : " + "REEL demandé";
      if (unitaire == "OUI")
      {
        alert("TYPE INCORRECT" + "\n" + "\n" + "REEL demandé");
        obj_zone.blur();
        obj_zone.focus();
      }
      else
      {
        // test sur submit de la form
        return "nok";
      }
    }
    else if (type=="HEUREMIN" && !validationHeureMin(droiteTrim(obj_zone.value)))
    {
      document.images[nom_zone + "Ctrl"].src= imgsrc + "type_incorrect.gif";
      document.images[nom_zone + "Ctrl"].title= "TYPE INCORRECT : " + "Heure minute demandés hh:mm";
      if (unitaire == "OUI")
      {
        alert("TYPE INCORRECT" + "\n" + "\n" + "Heure minute demandés hh:mm");
        obj_zone.blur();
        obj_zone.focus();
      }
      else
      {
        // test sur submit de la form
        return "nok";
      }
    }
    else if (type=="TEXTE" && !validationTexte(droiteTrim(obj_zone.value)))
    {
      document.images[nom_zone + "Ctrl"].src= imgsrc + "type_incorrect.gif";
      document.images[nom_zone + "Ctrl"].title= "TYPE INCORRECT : " + "TEXTE demandé";
      if (unitaire == "OUI")
      {
        alert("TYPE INCORRECT" + "\n" + "\n" + "TEXTE demandé (que des lettres)");
        obj_zone.blur();
        obj_zone.focus();
      }
      else
      {
        // test sur submit de la form
        return "nok";
      }
    }
    else if (type=="DATE" && !validationDate(droiteTrim(obj_zone.value)))
    {
      document.images[nom_zone + "Ctrl"].src = imgsrc + "type_incorrect.gif";
      document.images[nom_zone + "Ctrl"].title= "TYPE INCORRECT : " + "DATE demandée";
      if (unitaire == "OUI")
      {
        alert("TYPE INCORRECT" + "\n" + "\n" + "DATE demandée");
        obj_zone.blur();
        obj_zone.focus();
      }
      else
      {
        // test sur submit de la form
        return "nok";
      }
    }
    else if (type=="EMAIL" && !validationEmail(droiteTrim(obj_zone.value)))
    {
      document.images[nom_zone + "Ctrl"].src= imgsrc + "type_incorrect.gif";
      document.images[nom_zone + "Ctrl"].title= "TYPE INCORRECT : " + "EMAIL demandée";
      if (unitaire == "OUI")
      {
        alert("TYPE INCORRECT" + "\n" + "\n" + "EMAIL demandé");
        obj_zone.blur();
        obj_zone.focus();
      }
      else
      {
        // test sur submit de la form
        return "nok";
      }
    }
    else if((longueur_min == longueur_max) &&
             longueur_min != 0)
    {
      if((obj_zone.value.length) != longueur_min)
      {
        document.images[nom_zone + "Ctrl"].src= imgsrc + "long_incorrecte.gif";
        document.images[nom_zone + "Ctrl"].title= "LONGUEUR INCORRECTE :" + " longueur demandée : " + longueur_min + " longueur actuelle : " +  obj_zone.value.length;

        if (unitaire == "OUI")
        {
          alert("LONGUEUR INCORRECTE" + "\n" + "\n" + "vérifier la longueur" + "\n" + "longueur demandée : " + longueur_min + "\n" + "longueur actuelle : " +  obj_zone.value.length)
          obj_zone.blur();
          obj_zone.focus();
        }
        else
        {
          // test sur submit de la form
          return "nok";
        }
      }
    }
    else if(longueur_min != 0 &&
            longueur_max == 0)
    {
      if((obj_zone.value.length) < longueur_min)
      {
        document.images[nom_zone + "Ctrl"].src= imgsrc + "long_incorrecte.gif";
        document.images[nom_zone + "Ctrl"].title= "LONGUEUR Min INCORRECTE :" + " longueur demandée : " + longueur_min + " longueur actuelle : " +  obj_zone.value.length;

        if (unitaire == "OUI")
        {
          alert("LONGUEUR Min INCORRECTE" + "\n" + "\n" + "vérifier la longueur" + "\n" + "longueur demandée : " + longueur_min + "\n" + "longueur actuelle : " +  obj_zone.value.length)
          obj_zone.blur();
          obj_zone.focus();
        }
        else
        {
          // test sur submit de la form
          return "nok";
        }
      }
    }
    else if(longueur_max != 0 &&
            longueur_min == 0)
    {
      if((obj_zone.value.length) > longueur_max)
      {
        document.images[nom_zone + "Ctrl"].src= imgsrc + "long_incorrecte.gif";
        document.images[nom_zone + "Ctrl"].title= "LONGUEUR Max INCORRECTE : " + "longueur demandée : " + longueur_max + " longueur actuelle : " +  obj_zone.value.length;

        if (unitaire == "OUI")
        {
          alert("LONGUEUR Max INCORRECTE" + "\n" + "\n" + "vérifier la longueur" + "\n" + "longueur demandée : " + longueur_max + "\n" + "longueur actuelle : " +  obj_zone.value.length)
          obj_zone.blur();
          obj_zone.focus();
        }
        else
        {
          // test sur submit de la form
          return "nok";
        }
      }
    }
    else if(longueur_min != 0 &&
            longueur_max != 0)
    {
      if((obj_zone.value.length) > longueur_max ||
         (obj_zone.value.length) < longueur_min)
      {
        document.images[nom_zone + "Ctrl"].src= imgsrc + "long_incorrecte.gif";
        document.images[nom_zone + "Ctrl"].title= "LONGUEUR INCORRECTE : " + "longueurs demandées lg min : " + longueur_min + " lg max : " + longueur_max + " longueur actuelle : " +  obj_zone.value.length;

        if (unitaire == "OUI")
        {
          alert("LONGUEUR INCORRECTE" + "\n" + "\n" + "vérifier la longueur" + "\n" + "longueur demandée lg min : " + longueur_min + " lg max : " + longueur_max + "\n" + "longueur actuelle : " +  obj_zone.value.length)
          obj_zone.blur();
          obj_zone.focus();
        }
        else
        {
          // test sur submit de la form
          return "nok";
        }
      }
    }
  }
  else
  {
    if (required == "OUI")
    {
      document.images[nom_zone + "Ctrl"].src= imgsrc + "obligatoire.gif";
      document.images[nom_zone + "Ctrl"].title= "DONNÉE OBLIGATOIRE";
      if (unitaire == "OUI")
      {
        alert("DONNEE obligatoire");
        obj_zone.blur();
        obj_zone.focus();
      }
      else
      {
        // test sur submit de la form
        return "nok";
      }
    }
    else
    {
      document.images[nom_zone + "Ctrl"].src= imgsrc + "invisible.gif";
    }
  }
}

// Retourne vrai si e-mail valide sinon faux
function validationEmail(value)
{
  invalidChars = " /:,;";
  if (value=="") return false;
  for (i=0; i<invalidChars.length;i++)
  {
    badChar = invalidChars.charAt(i);
    if (value.indexOf(badChar,0) != -1) return false;
  }
  atPos = value.indexOf("@", 1);
  if (atPos == -1) return false;
  if (value.indexOf("@", atPos + 1) != -1) return false;
  periodPos = value.indexOf(".", atPos);
  if (periodPos == -1) return false;
  if (periodPos+3 > value.length) return false;
  return true;
}

// Retourne vrai si sText contient que des lettres
function validationTexte(sText)
{
  var ValidChars = "azertyuiopqsdfghjklmwxcvbnéèàêç'@ ";
  var Char;
  var sText = sText.toLowerCase();
  for (i = 0; i < sText.length ; i++)
  {
    Char = sText.charAt(i);
    if (ValidChars.indexOf(Char) == -1)
    {
      return false;
    }
  }
  return true;
}

// Retourne vrai si sText contient que : 0  <-> 9 et signe -
function validationNombre(sText)
{
  var ValidChars = "0123456789+-";
  var IsNumber=true;
  var Char;
  for (i = 0; i < sText.length && IsNumber == true; i++)
  {
    Char = sText.charAt(i);
    if (ValidChars.indexOf(Char) == -1 ||(  i>0 && (Char == "+" || Char == "-")) )
    {
      return false;
    }
  }
  return true;
}
function validationEntier(sText)
{
  var ValidChars = "0123456789";
  var IsNumber=true;
  var Char;
  for (i = 0; i < sText.length && IsNumber == true; i++)
  {
    var Char = sText.charAt(i);
    if (ValidChars.indexOf(Char) == -1)
    {
      return false;
    }
  }
  return true;
}
function validationReel(sText)
{
  var ValidChars = "0123456789,";
  var IsReel=true;
  var Char;
  cptPoint = 0;
  for (i = 0; i < sText.length && IsReel == true; i++)
  {
    Char = sText.charAt(i);
    if((Char == "," && i == 0) ||
       (Char == "," && i == (sText.length - 1)))
    {
       return false;
    }
    if(Char == ",")
    {
       cptPoint ++;
    }
    if (ValidChars.indexOf(Char) == -1)
    {
      return false;
    }
    if(cptPoint > 1)
    {
       return false;
    }
  }
  return true;
}

function validationHeureMin(sText)
{
  var ValidChars = "0123456789:";
  var IsHeureMin=true;
  if(sText.length < 5)
  {
     return false;
  }
  var Char;
  for (i = 0; i < sText.length && IsHeureMin == true; i++)
  {
    Char = sText.charAt(i);
    if (ValidChars.indexOf(Char) == -1)
    {
      return false;
    }
  }
  Char = sText.charAt(2);
  var separHeureMinInterdit= "0123456789";
  if(separHeureMinInterdit.indexOf(Char) == 0)
  {
    return false;
  }
  // position interdite de :
  Char = sText.charAt(0);
  var separHeureMin= ":";
  if(separHeureMin.indexOf(Char) == 0)
  {
    return false;
  }
  Char = sText.charAt(1);
  if(separHeureMin.indexOf(Char) == 0)
  {
    return false;
  }
  Char = sText.charAt(3);
  if(separHeureMin.indexOf(Char) == 0)
  {
    return false;
  }
  Char = sText.charAt(4);
  if(separHeureMin.indexOf(Char) == 0)
  {
    return false;
  }

  heure = sText.charAt(0) +  sText.charAt(1);
  if(heure > 23)
  {
    return false;
  }
  minute = sText.charAt(3) +  sText.charAt(4);
  if(minute > 59)
  {
    return false;
  }
  return true;
}

function validationDate(d)
{
  // Cette fonction permet de vérifier la validité d'une date au format jj/mm/aaaa
  if (d == "") // si la variable est vide on retourne faux
    return false;

  //e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
  e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{4})$");

  if (!e.test(d)) // 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
  j = parseInt(d.split("/")[0], 10); // jour
  m = parseInt(d.split("/")[1], 10); // mois
  a = parseInt(d.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 fev = 28;

  // Nombre de jours pour chaque mois
  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
  return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );

}

function majusculeZones(objZone) {
  // contient le nom des zones à laisser en minuscule (séparateur : ";")
  // le nom des zones est en minuscule
  //var zonesMinuscule = "libelle;l40div;folibe;focond;statsemail";
  //if(zonesMinuscule.indexOf(obj_zone.name.toLowerCase()) == -1)
  //{
  //  // mise en majuscule de la zone
  //  obj_zone.value = obj_zone.value.toUpperCase();
  //}
  return true;
}

