/* Vérification d'un e-mail... */
function verif_email(email)
{
   var arobase = email.indexOf("@");
   var point = email.lastIndexOf(".");

   if((arobase < 3) || (point + 2 > email.length) || (point < arobase + 3))
   {
      return false;
   }
   return true;
}

/* Vérification pour un réel... */
function verif_nombre(champ)
{
   var chiffres = new RegExp("[0-9\.]");
   var verif;
   var points = 0;

   for(x = 0; x < champ.value.length; x++)
   {
      verif = chiffres.test(champ.value.charAt(x));
      if(champ.value.charAt(x) == "."){points++;}
      if(points > 1){verif = false; points = 1;}
      if(verif == false){champ.value = champ.value.substr(0,x) + champ.value.substr(x+1,champ.value.length-x+1); x--;}
   }
}

/* Vérification pour un réel avec limitation en taille après la virgule... */
function verif_nombre_virgule(champ, virgul)
{
   verif_nombre(champ);
   for(x = 0; x < champ.value.length; x++)
   {
      if((champ.value.charAt(x) == ".") && (champ.value.length > (x + virgul + 1)))
      {
         champ.value = champ.value.substr(0,x+virgul+1);
      }
   }
}

/* Vérification pour un entier... */
function verif_entier(champ)
{
   var chiffres = new RegExp("[0-9]");
   var verif;

   for(x = 0; x < champ.value.length; x++)
   {
      verif = chiffres.test(champ.value.charAt(x));
      if(verif == false){champ.value = champ.value.substr(0,x) + champ.value.substr(x+1,champ.value.length-x+1); x--;}
   }
}

/* Vérification pour un entier avec limitation en taille... */
function verif_entier_limite(champ, limit)
{
   verif_entier(champ);
   if (champ.value.length > limit) champ.value = champ.value.substr(0,limit);
}

function verif_tel(champ)
{
   verif_entier(champ);
}

/* Vérification pour une date... */
// strDate: la date à tester
// format: eu ou us
// separator: - ou /
function verif_date(strDate, format, separator)
{
var tmpDate = strDate;
var tmpInt = strDate.split(separator);
if (format == 'eu')
{
   var intJour = parseInt(tmpInt[0], 10);
   var intMois = parseInt(tmpInt[1], 10);
   var intAnnee = parseInt(tmpInt[2], 10);
}
else // if (format == 'us')
{
   var intJour = parseInt(tmpInt[2], 10);
   var intMois = parseInt(tmpInt[1], 10);
   var intAnnee = parseInt(tmpInt[0], 10);
}

var DateControle = new Date();
DateControle.setDate(1);
DateControle.setYear(intAnnee);
DateControle.setMonth(intMois-1);
DateControle.setDate(intJour);
if ((intJour != DateControle.getDate())
   || (intMois != (DateControle.getMonth() + 1))
   || (intAnnee != DateControle.getFullYear()))
{
   return 0;
}
else
{
   return 1;
}
}

/* Vérification pour un numéro de sécurité sociale... */
function verif_numero_securite_sociale(champ)
{
   verif_entier(champ);
   if (champ.value.length != 15) return 0;

   if (isNaN(champ.value)) return 0;

   // Les deux derniers chiffres sont la cle.
   var num_secu = parseInt(champ.value.substr(0,13));
   var cle_secu = parseInt(champ.value.substr(13,2));

   if (cle_secu != (97 - (num_secu % 97))) return 0;

   return 1;
}

/* Vérification pour un code SIREN... */
// numéro SIREN
// Il est composé de 8 chiffres, plus un chiffre de contrôle qui permet de vérifier la validité du numéro.
// La clé de contrôle utilisée pour vérifier de l'exactitude d'un identifiant est une clé "1-2". Le principe est
// le suivant : on multiplie les chiffres de rang impair à partir de la droite par 1, ceux de rang pair par 2 ; la
// somme des chiffres obtenus doit être un multiple de 10.
// exemple : soit le SIREN 732 829 320
// pour vérifier :   7 3 2 8 2 9 3 2 0
// rang pair x 2 :     6  16  18   4
// rang impair x 1 : 7   2   2   3   0
// ----------------------
// somme : 7+6+2+1+6+2+1+8+3+4+0 = 40
// Le numéro est exact.
function verif_siren(champ)
{
   verif_entier(champ);

   if ((champ.value.length != 9) || (isNaN(champ.value)))
   {
      return 0;
   }

   // Donc le SIREN est un numérique à 9 chiffres
   var somme = 0;
   var tmp;
   for (var cpt = 0; cpt<champ.value.length; cpt++)
   {
      // Recherche les positions paires : 2ème, 4ème, 6ème et 8ème chiffre que l'on multiplie par 2
      // petite différence avec la définition ci-dessus car ici on travail de gauche à droite...
      if ((cpt % 2) == 1)
      {
         tmp = champ.value.charAt(cpt) * 2;
         if (tmp > 9) tmp -= 9;  // Si le résultat est supérieur à 9, on lui soustrait 9
      }
      else
      {
         tmp = champ.value.charAt(cpt);
      }
      somme += parseInt(tmp);
   }

   if ((somme != 0) && ((somme % 10) == 0))
   {
      return 1;  // Si la somme est un multiple de 10 alors le SIREN est valide
   }

   return 0;
}

/* Vérification pour un code SIRET... */
// numéro SIRET
// Le numéro d'identité d'établissement est articulé en deux parties : la première est le n° SIREN de la
// personne à laquelle appartient l'unité SIRET ; la seconde est un numéro d'ordre à 4 chiffres attribué à
// l'établissement suivi d'un chiffre de contrôle, qui permet de vérifier la validité de l'ensemble du numéro
// SIRET. Cette seconde partie est habituellement appelée NIC (numéro interne de classement).
// Méthode de vérification :
// Un SIRET est le résultat de la concaténation d'un numéro SIREN à 9 chiffres (dont la clé doit être
// vérifiée à part) et d'un numéro interne de classement (NIC) complété éventuellement à gauche par des
// zéros de façon que sa longueur soit de 4 chiffres. Le dernier et 14ème chiffre est une clé (1-2) qui
// porte sur les 13 premiers chiffres.
// On multiplie les chiffres de rang impair à partir de la droite par 1, ceux de rang pair par 2 ; la somme
// des chiffres obtenus est un multiple de 10.
// Exemple :
// pour vérifier :   7 3 2 8 2 9 3 2 0 0 0 0 7 4
// rang pair x 2 :  14   4   4   6   0   0  14
// rang impair x 1 :   3   8   9   2   0   0   4
// -----------------------------------
// somme : 1+4+3+4+8+4+9+6+2+0+0+0+0+1+4+4=50
// Le numéro est exact. Il correspond au SIRET du 7ème établissement immatriculé par l'entreprise.
function verif_siret(champ)
{
   verif_entier(champ);

   if ((champ.value.length != 14) || (isNaN(champ.value)))
   {
      return 0;
   }

   // Donc le SIRET est un numérique à 14 chiffres
   // Les 9 premiers chiffres sont ceux du SIREN (ou RCS), les 4 suivants
   // correspondent au numéro d'établissement
   // et enfin le dernier chiffre est une clef de LUHN.
   var somme = 0;
   var tmp;
   for (var cpt = 0; cpt<champ.value.length; cpt++)
   {
      // Recherche les positions impaires : 1er, 3è, 5è, etc... que l'on multiplie par 2
      // petite différence avec la définition ci-dessus car ici on travail de gauche à droite...
      if ((cpt % 2) == 0)
      {
         tmp = champ.value.charAt(cpt) * 2;
         if (tmp > 9) tmp -= 9;  // Si le résultat est supérieur à 9, on lui soustrait 9
      }
      else
      {
         tmp = champ.value.charAt(cpt);
      }
      somme += parseInt(tmp);
   }

   if ((somme != 0) && ((somme % 10) == 0))
   {
      return 1; // Si la somme est un multiple de 10 alors le SIRET est valide
   }

   return 0;
}

/* Suppression des espaces d'un champ... */
function supprime_espace(champ)
{
   for(x = 0; x < champ.value.length; x++)
   {
      if(champ.value.charAt(x) == ' '){champ.value = champ.value.substr(0,x) + champ.value.substr(x+1,champ.value.length-x+1); x--;}
   }
}

/* Déplacer les éléments d'une liste de choix multiple */
function deplacer_elements(de, vers)
{
   var F = document.Form;
   var elements1 = de + "[]";
   var elements2 = vers + "[]";
   if (F.elements[elements1].options.selectedIndex >= 0)
   {
      /* boucle tant qu'il reste des éléments sélectionnés */
      while (F.elements[elements1].options.selectedIndex >= 0)
      {
         /* index de l'élément sélectionné */
         index = F.elements[elements1].options.selectedIndex;
         /* texte de l'élément sélectionné */
         texte  = F.elements[elements1].options[index].text;
         /* valeur de l'élément sélectionné */
         valeur = F.elements[elements1].options[index].value;
         /* suppression de l'élément sélectionné dans la liste d'origine */
         F.elements[elements1].options[index] = null;
         /* création de l'élément dans la liste accueillante */
         var user = new Option(texte, valeur);
         nb_elements = F.elements[elements2].options.length; // nbre d'éléments dans la liste accueillante
         F.elements[elements2].options[nb_elements] = user;
      }
   }
   else
      alert("Aucun Item sélectionné !");
   return(false);
}

/* Sauvegarder les éléments d'une liste de choix multiple */
function sauvegarder_elements(src)
{
   var F = document.Form;
   var elements1 = src + "[]";
   nb_elements = F.elements[elements1].options.length; // nbre d'éléments dans la liste accueillante
   for(index=0;index<nb_elements;index++)
   {
      texte  = F.elements[elements1].options[index].selected = 'on';
   }
}