// ControleFormulaire.js




// Début de l'entrée, suivi par un ou plusieurs caractères espace blanc, suivi par la fin de l'entrée.
var reEspaceBlanc = /^\s+$/


// reLettre : lettres autorisées
var reLettre = /^[a-zA-Z]$/


// Début de l'entrée, suivi par un ou plusieurs caractères alphabétiques,
// suivi par la fin de l'entrée.
var reAlphabetique = /^[a-zA-Z]+$/


// Début de l'entrée, suivi par un ou plusieurs caractères alphanumériques
// , suivi par la fin de l'entrée.
var reAlphanumerique = /^[a-zA-Z0-9]+$/


// Début de l'entrée, suivi par un nombre, suivi par la fin de l'entrée.
var reNombre = "/^\d/";


// Début de l'entrée,    suivi par un ou plusieurs caractères alphanumériques ou nombre
// suivi par la fin de l'entrée.
var reLettreOuNombre = /^([a-zA-Z]|\d)$/


// Début de l'entrée, suivi par un ou plusieurs  Nombres, suivi par la fin de l'entrée.
var reEntier = /^\d+$/


// Début de l'entrée, suivi par un + ou un - optionnel, suivi par un ou plusieurs  Nombres,
// suivi par la fin de l'entrée.
var reEntierSigne = "/^(+|-)?\d+$/";


// Début de l'entrée, suivi par un masque suivant:
// (a) un ou plusieurs nombres, suivi par  ., suivi par  zero ou plusieurs Nombres
// (b) zero ou plusieurs Nombres   , suivi par  ., suivi par un ou plusieurs  Nombres
// ... suivi par la fin de l'entrée.
var reReel = "/^((\d+(\.\d*)?)|((\d*\.)?\d+))$/";


// Début de l'entrée, suivi par un + ou un - optionnel, suivi par un masque suivant:
// (a) un ou plusieurs nombres, suivi par  ., suivi par  zero ou plusieurs Nombres
// (b) zero ou plusieurs Nombres   , suivi par  ., suivi par un ou plusieurs  Nombres
// ... suivi par la fin de l'entrée.
var reReelSigne = "/^(((+|-)?\d+(\.\d*)?)|((+|-)?(\d*\.)?\d+))$/";

// Début de l'entrée, suivi par un ou plusieurs  caractères, suivi par  @,
// suivi par un ou plusieurs  caractères, suivi par  .,
// suivi par un ou plusieurs  caractères, suivi par la fin de l'entrée.
var reEmail = /^.+\@.+\..+$/

var reNaf = /^\d\d\d[a-zA-Z]$/


// DECLARATIONS DES VARIABLES

var Nombres = "0123456789";

var LettresMinuscules = "abcdefghijklmnopqrstuvwxyzéùèàçâêîô" ;

var LettresMajuscules = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;

// caractères     espace ou blanc
var Espaces = " \t\n\r";


// caractères non numériques autorisés dans les numéros de téléphone
// var SeparateursNumeroTelephone = "- .";
var SeparateursNumeroTelephone = "( )";



// caractères autorisés dans les numéros de téléphone
var NumeroTelephoneValide = Nombres + SeparateursNumeroTelephone;


// caractères autorisés dans les numéros de téléphone internationaux

var CaracteresValidesNumeroTelephoneInternational = Nombres + pSeparateursNumeroTelephone + "+";


// caractères non numériques autorisés dans les numéros de sécu
var SSNDelimiters = "- ";



// caractères autorisés dans les numéros de sécu
var validSSNChars = Nombres + SSNDelimiters;




// nombreNumeroTelephone : nombre de chiffre dans les numéros de téléphone
var nombreNumeroTelephone = 10;
var nombreNumeroFax = 10;

//  SeparateursCodePostal : caractères non numériques autorisés dans les numéros de codes postaux
// nombreCodePostal : nombre de chiffre dans les numéros  de codes postaux
var SeparateursCodePostal = "-";
var nombreCodePostal = 5  ;

// Pour le niveau
var nombreNiveau = 1;

// Pour les Gencods
var nombreGencod8 = 8;
var nombreGencod13 = 13;

// Pour le code pays
var nombreCodePays = 2;








//     Déclarations des chaines de caractères constantes

// m pour "missing" (si le champs n'a pas été renseigné)

var mPrefixe = "Vous n'avez pas rentré de valeur dans le champ"
var mSuffixe = ".C'est un champ obligatoire, veuillez le renseigner maintenant."

// s pour "string"  (nom du champs)
var sNiveau = "Niveau"
var sGencod8 = "Gencod 8"
var sGencod13 = "Gencod 13"
var sRaison_sociale1 = "Raison sociale 1"
var sRaison_sociale2 = "Raison sociale 2"
var sRaison_sociale3 = "Raison sociale 3"
var sAdresse_ligne3 = "Adresse ligne 3"
var sAdresse_ligne4 = "Adresse ligne 4"
var sAdresse_ligne5 = "Adresse ligne 5"
var sNumero_voie = "Numero de voie"
var sCode_postal = "Code postal"
var sLocalite="Localité"
var sCode_pays="Code_pays"
var sPays = "Pays"
var sRejet_postal="Rejet postal"
var sTelephone="Téléphone"
var sFax="Fax"
var sEmail="E-mail"
var sSite="Site"
var sSiret="Siret"
var sNaf="Naf"
var sDate_derniere_mod="Date de dernière modification"

// pour la consultation du fuel




// i pour "invalide" (si le champs est invalide)

var iNiveau = "Ce champ doit être un caractère alphabétique (comme A)."
var iGencod8 = "Ce champ doit être un chiffre sur huit numériques (comme 121345678) "
var iGencod13 = "Ce champ doit être un chiffre sur treize numériques (comme 12134567890123) "
var iRaison_sociale1 = "Ce champ doit être de type alphanumérique"
var iRaison_sociale2 = "Ce champ doit être de type alphanumérique"
var iRaison_sociale3 = "Ce champ doit être de type alphanumérique"
var iAdresse_ligne3 = "Ce champ doit être de type alphanumérique"
var iAdresse_ligne4 = "Ce champ doit être de type alphanumérique"
var iAdresse_ligne5 = "Ce champ doit être de type alphanumérique"
var iNumvoie = "Ce champ doit être de type numérique"
var iCodePostal = "Ce champ doit être de type alphanumérique sur 15 caractères"
var iLocalite="Ce champ doit être de type alphanumérique"
var iCodePays="Ce champ doit être de type alphabétique sur deux caractères (comme FR)"
var iPays = "Ce champ doit être de type alphanumérique"
var iRejet_postal="Ce champ doit être de type alphanumérique"
var iNumeroTelephone="Ce champ doit être une valeur de type alphanumérique (comme 014565987582 espace,'(',')' autorisés)"
var iFax="Ce champ doit être de type numérique (comme 014565987582)"
var iEmail="Ce champ doit être alphanumérique (comme jmichel@michel.com) "
var iSite="Ce champ doit être de type alphanumérique"
var iSiret="Ce champ doit être de type alphanumérique"
var iNaf="Ce champ doit être de type alphanumérique"
var iDate_derniere_mod="Ce champ doit être de type numérique (comme AAAA-MM-JJ)"
var iJour = "Ce champ doit être un numéro de jour entre 1 et 31.  Veuillez le ressaisir."
var iMois = "Ce champ doit être un numéro de mois entre 1 et 12.  Veuillez le ressaisir."
var iAnnee = "Ce champ doit être un numéro d'année sur deux ou quatres chiffres.  Veuillez le ressaisir."
var iDatePrefixe = "Les jour, mois et année pour  "
var iDateSuffixe = " ne correspondent pas à une date valide. Veuillez les ressaisir."
var iNumerique = "Ce champ doit être de type numérique."
var iAlphanumerique = "Ce champ doit être de type alphanumérique."
var iGencod = "Le Gencod8 et le Gencod13 ne concordent pas.";
var iNaf = "Le NAF doit être écrit sous la forme : XXXA (X = chiffre, A = alphanumérique).";


// p pour "prompt" (afficher dans la barre Système)
var pPromptEntree = "Entrez, s'il vous plait "
var pEtatCode = "2 caractères alphanumériques (comme FR)."
var pNiveau = "un caractère alphabétique (comme A)."
var pGencod8 = "un chiffre sur huit numériques (comme 121345678) "
var pGencod13 = "un chiffre sur treize numériques (comme 12134567890123) "
var pDate_derniere_mod="une valeur de type numérique (comme AAAA-MM-JJ)"
var pCodePays="deux caractères alphabétiques (comme FR)"
var pNumeroTelephone="une valeur de type alphanumérique (comme 014565987582 espace,'(',')' autorisés)"
var pFax="une valeur de type numérique (comme 014565987582)"
var pEmail="une valeur de type alphanumérique (comme jmichel@michel.com) "
var pSeparateursNumeroTelephone=" un séparateur de numero de téléphone ( espace '(' et ')')."
var pAlphanumerique=" une valeur alphanumérique."
var pNumVoie=" une valeur numérique (comme 35)."
var pCodePostal=" une valeur numérique(comme 75015)."

var pGencod13_Recherche=" une valeur numérique (Si moins de 8 chiffres => Gencod8, sinon Gencod13)"
var pCode_Utilisateur = " votre code utilisateur (maximum 13 chiffres)"
var pRaisonSociale1_Recherche=" une valeur alphanumérique"
var pLocalite_Recherche=" une valeur alphanumérique"
var pAdresseligne4_Recherche=" une valeur alphanumérique"
// Modification 20021030
var pPostal_Recherche=" une valeur alphanumérique sur 15 caractères"

var pMot_De_Passe =" votre mot de passe"
var pNaf = " une valeur de type XXXA (X = chiffre, A = alphanumérique).";


// defaultvideOK : valeur par défaut pour savoir si un champs vide est accepté

var defaultvideOK = true




// Creer un tableau

function makeArray(n) {

   for (var i = 1; i <= n; i++) {
      this[i] = 0
   }
   return this
}


// Nombre de jours dans un mois

var JoursDansMois = makeArray(12);
JoursDansMois[1] = 31;
JoursDansMois[2] = 29;
JoursDansMois[3] = 31;
JoursDansMois[4] = 30;
JoursDansMois[5] = 31;
JoursDansMois[6] = 30;
JoursDansMois[7] = 31;
JoursDansMois[8] = 31;
JoursDansMois[9] = 30;
JoursDansMois[10] = 31;
JoursDansMois[11] = 30;
JoursDansMois[12] = 31;




// Définition des codes pays possibles

var SeparateursCodePays = "|";
var CodePays = "FR|BE|DE|US|YD|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP"


// verifie  si une chaine est vide
// Retourne vrai si la chaine est vide

function EstVide(s)
{   return ((s == null) || (s.length == 0))
}



// verifie  si une chaine est vide ou rempli de blanc
// Retourne vrai si la chaine est vide ou rempli de blanc

function EstEspaceBlanc (s)

{
    return (EstVide(s) || reEspaceBlanc.test(s));
}



// Retire les caractères du masque dans la chaine s

function RetireCaractereDansMasque (s, bag)

{       return s.replace(bag, "")
}



// Retire tous les caractères se trouvant dans la liste bag dans la chaine s

function RetireCaractereDansListe (s, bag)

{   var i;
    var returnString = "";


    for (i = 0; i < s.length; i++)
    {

        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}



// Retire tous les caractères ne se trouvant PAS dans la liste bag dans la chaine s

function RetireCaracterePasDansListe(s, bag)

{   var i;
    var returnString = "";

    for (i = 0; i < s.length; i++)
    {

        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}



// Retire tous les caractères blancs ou espace se trouvant dans la chaine s

function RetireEspaceBlanc (s)

{   return RetireCaractereDansListe(s, Espaces)
}




// retourne vrai si un seul caractères de c se trouve dans la chaine s

function CaractereDansChaine (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}



// Retire à gauche tous les caractères blancs ou espaces

function RetireBlancEnTete (s)

{   var i = 0;

    while ((i < s.length) && CaractereDansChaine (s.charAt(i), Espaces))
       i++;

    return s.substring (i, s.length);
}







// retourne vrai si le caractère est une lettre

function EstLettre (c)
{   return reLettre.test(c)
}



// retourne vrai si le caractère est un nombre (0 à 9)

function EstNombre (c)
{   return reNombre.test(c)
}



// retourne vrai si le caractère est un nombre (0 à 9) ou une lettre

function EstLettreOuNombre (c)
{   return reLettreOuNombre.test(c)
}



// retourne vrai si le caractère est un entier
// -5 retourne faux

function EstEntier (s)

{   var i;

    if (EstVide(s))
       if (EstEntier.arguments.length == 1) return defaultvideOK;
       else return (EstEntier.arguments[1] == true);

    return reEntier.test(s)
}







// retourne vrai si le caractère est un entier précédé par + ou -
// -5 retourne vrai

function EstEntierSigne (s)

{   if (EstVide(s))
       if (EstEntierSigne.arguments.length == 1) return defaultvideOK;
       else return (EstEntierSigne.arguments[1] == true);


    else {
       return reEntierSigne.test(s)
    }
}




// retourne vrai si le caractère est un entier strictement positif
// -5 retourne faux

function EstEntierPositif (s)
{   var secondArg = defaultvideOK;

    if (EstEntierPositif.arguments.length > 1)
        secondArg = EstEntierPositif.arguments[1];


    return (EstEntierSigne(s, secondArg)
         && ( (EstVide(s) && secondArg)  || (parseInt (s) > 0) ) );
}






// retourne vrai si le caractère est un entier positif ou nul

function EstEntierNonNegatif (s)
{   var secondArg = defaultvideOK;

    if (EstEntierNonNegatif.arguments.length > 1)
        secondArg = EstEntierNonNegatif.arguments[1];

      return (EstEntierSigne(s, secondArg)
         && ( (EstVide(s) && secondArg)  || (parseInt (s) >= 0) ) );
}






// retourne vrai si le caractère est un entier strictement négatif

function EstEntierNegatif (s)
{   var secondArg = defaultvideOK;

    if (EstEntierNegatif.arguments.length > 1)
        secondArg = EstEntierNegatif.arguments[1];



    return (EstEntierSigne(s, secondArg)
         && ( (EstVide(s) && secondArg)  || (parseInt (s) < 0) ) );
}



// retourne vrai si le caractère est un entier négatif ou nul

function EstEntierNonPositif (s)
{   var secondArg = defaultvideOK;

    if (EstEntierNonPositif.arguments.length > 1)
        secondArg = EstEntierNonPositif.arguments[1];



    return (EstEntierSigne(s, secondArg)
         && ( (EstVide(s) && secondArg)  || (parseInt (s) <= 0) ) );
}





// retourne vrai si la chaine est un réel

function EstReel (s)

{   if (EstVide(s))
       if (EstReel.arguments.length == 1) return defaultvideOK;
       else return (EstReel.arguments[1] == true);

    return reReel.test(s)
}







// retourne vrai si la chaine est un réel  précédé du signe + ou -

function EstReelSigne (s)

{   if (EstVide(s))
       if (EstReelSigne.arguments.length == 1) return defaultvideOK;
       else return (EstReelSigne.arguments[1] == true);

    else {
       return reReelSigne.test(s)
    }
}




// retourne vrai si la chaine contient que des lettres
// (A .. Z, a..z)

function EstAlphabetique (s)

{   var i;

    if (EstVide(s))
       if (EstAlphabetique.arguments.length == 1) return defaultvideOK;
       else return (EstAlphabetique.arguments[1] == true);

    else {
       return reAlphabetique.test(s)
    }
}




// retourne vrai si la chaine contient que des lettres ou des nombres
// (A .. Z, a..z) et nombres

function EstAlphanumerique (s)

{   var i;

    if (EstVide(s))
       if (EstAlphanumerique.arguments.length == 1) return defaultvideOK;
       else return (EstAlphanumerique.arguments[1] == true);

    else {
       return reAlphanumerique.test(s)
    }
}




// reformate (chaine_cible, chaine, entier, chaine, entier ... )
//
// Exemple
//
// * Pour reformater "1234567890"
//   en "(123) 456-7890" faire:
//   reformate("1234567890", "(", 3, ") ", 3, "-", 4)
//

function reformate (s)

{   var arg;
    var sPos = 0;
    var Chaine = "";

    for (var i = 1; i < reformate.arguments.length; i++) {
       arg = reformate.arguments[i];
       if (i % 2 == 1) Chaine += arg;
       else {
           Chaine += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return Chaine;
}

// Fonctions d'affichage
// Affiche l'info "s" dans la barre système

function Prompt (s)
{   window.status = s
}



// Affiche l'entrée "s" dans la barre système

function PromptEntree (s)
{   window.status = pPromptEntree + s
}




// Avertit l'utilisateur que le champs est vide

function AvertitVide (champs, s)
{   champs.focus()
    alert(mPrefixe + s + mSuffixe)
    return false
}



// Avertit l'utilisateur que le champs est invalide

function AvertitInvalide (champs, s)
{
    champs.focus()
   champs.select()
    alert(s )
//  s +  + event.target   + event.type
    return false
}


// Fonctions propres au FUEL

// EstNiveau
// doit être de type  alphabétique
// et de longeur nombreNiveau
function EstNiveau (s)
{   if (EstVide(s))
       if (EstNiveau.arguments.length == 1) return defaultvideOK;
       else return (EstNiveau.arguments[1] == true);
    return (EstAlphabetique (s) && s.length == nombreNiveau)
}


function VerifieNiveau (champs, videOK)
{   if (VerifieNiveau.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  if (!EstNiveau(champs.value, false))
          return AvertitInvalide (champs, iNiveau);
       else return true;
    }
}




// EstGencod8
// doit être de type entier
// et de longeur nombreGencod8

function EstGencod8 (s)
{   if (EstVide(s))
       if (EstGencod8 .arguments.length == 1) return defaultvideOK;
       else return (EstGencod8 .arguments[1] == true);
    return (EstEntier(s) && s.length == nombreGencod8)
}

function VerifieGencod8 (champs, videOK)
{   if (VerifieGencod8.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  if (!EstGencod8(champs.value, false))
          return AvertitInvalide (champs, iGencod8);
       else return true;
    }
}

// EstGencod13
// doit être de type entier
// et de longeur nombreGencod13

function EstGencod13 (s)
{   if (EstVide(s))
       if (EstGencod13 .arguments.length == 1) return defaultvideOK;
       else return (EstGencod13 .arguments[1] == true);
    return (EstEntier(s) && s.length == nombreGencod13)
}

function VerifieGencod13 (champs, videOK)
{   if (VerifieGencod13.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  if (!EstGencod13(champs.value, false))
          return AvertitInvalide (champs, iGencod13);
       else return true;
    }
}

// EstNumVoie
// doit être non vide
// et de type entier

function EstNumVoie (s)
{   if (EstVide(s))
       if (EstNumVoie .arguments.length == 1) return defaultvideOK;
       else return (EstNumVoie.arguments[1] == true);
    return (EstEntier(s))
}

function VerifieNumVoie (champs, videOK)
{   if (VerifieNumVoie.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  if (!EstNumVoie(champs.value, false))
          return AvertitInvalide (champs, iNumvoie);
       else return true;
    }
}


function VerifieAlphanumerique (champs, videOK)
{   if (VerifieAlphanumerique.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  if (!EstAlphanumerique(champs.value, false))
          return AvertitInvalide (champs, iAlphanumerique);
       else return true;
    }
}

// EstNumeroTelephone
// doit être de type alphanumérique



function EstNumeroTelephone (s)
{   if (EstVide(s))
       if (EstNumeroTelephone.arguments.length == 1) return defaultvideOK;
       else return (EstNumeroTelephone.arguments[1] == true);
    //return (EstEntier(s) && s.length == nombreNumeroTelephone)
    return (EstEntier(s) )
}

function VerifieNumeroTelephone (champs, videOK)
{   if (VerifieNumeroTelephone.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  var NumeroTelephoneNormalise = RetireCaractereDansListe(champs.value, SeparateursNumeroTelephone)
       if (!EstNumeroTelephone(NumeroTelephoneNormalise, false))
          return AvertitInvalide (champs, iNumeroTelephone);
       else
       {  //    pour reformater le numero de téléphone
//          champs.value = reformateNumeroTelephone(NumeroTelephoneNormalise)
          return true;
       }
    }
}

//

function reformateNumeroTelephone (NumeroTelephone)
{   return (reformate (NumeroTelephone,"",  2, ".", 2, ".", 2, ".", 2, ".", 2))
}



// retourne vrai s'il s'agit d'un numéro de téléphone international

function EstNumeroTelephoneInternational (s)
{   if (EstVide(s))
       if (EstNumeroTelephoneInternational.arguments.length == 1) return defaultvideOK;
       else return (EstNumeroTelephoneInternational.arguments[1] == true);
    return (EstEntierPositif(s))
}




// retourne vrai s'il s'agit d'un  code postal

function EstCodePostal (s)
{  if (EstVide(s))
       if (EstCodePostal.arguments.length == 1) return defaultvideOK;
       else return (EstCodePostal.arguments[1] == true);
   return (EstEntier(s) &&
            ((s.length == nombreCodePostal)
            // || (s.length == nombreCodePostal2)
            ))
}


// VerifieNaf(this,true);
// Le   Naf doit être sous la forme NNNA

function EstNaf(s,videOK)
{
if (EstNaf.arguments.length == 1) videOK = defaultvideOK;
if ((videOK == true) && (EstVide(s))) return true;
else return reNaf.test(s);
}




function VerifieNaf(s,videOK)
{
if (VerifieNaf.arguments.length == 1) videOK = defaultvideOK;
if ((videOK == true) && (EstVide(s.value))) return true;
else if (!EstNaf(s.value, false))
     return AvertitInvalide (s, iNaf);
    else return true;
}


function VerifieEmail (champs, videOK)
{   if (VerifieEmail.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else if (!EstEmail(champs.value, false))
       return AvertitInvalide (champs, iEmail);
    else return true;
}




function VerifieChaine (champs, videOK)
{
    if (VerifieChaine.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    if (EstEspaceBlanc(champs.value))
       return AvertitVide (champs, s);
    else return true;
}



// retourne vrai s'il s'agit d'un code de pays se trouvant dans la liste "CodePays"

function EstCodePays(s)
{   if (EstVide(s))
       if ( EstCodePays.arguments.length == 1) return defaultvideOK;
       else return ( EstCodePays.arguments[1] == true);
//    return ( ( CodePays.indexOf(s) != -1) &&
//             (s.indexOf(SeparateursCodePays) == -1) )
        return ((EstAlphabetique(s) || EstEspaceBlanc(s)) &&
            ((s.length == nombreCodePays)));
}


function VerifieCodePays (champs, videOK)
{   if (VerifieCodePays.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  champs.value = champs.value.toUpperCase();
       if (!EstCodePays(champs.value, false))
          return AvertitInvalide (champs, iCodePays);
       else return true;
    }
}

// retourne vrai s'il s'agit d'un e-mail valide
//  de la forme :
// * un caractère au moins avant @
// * un caractère au moins avant le .
// * les caractères @ et . sont tous les deux obligatoires
//

function EstEmail (s)

{   if (EstVide(s))
       if (EstEmail.arguments.length == 1) return defaultvideOK;
       else return (EstEmail.arguments[1] == true);

    else {
       return reEmail.test(s)
    }
}



// retourne vrai s'il s'agit d'une année sur 2 ou 4 chiffres

function EstAnnee (s)
{   if (EstVide(s))
       if (EstAnnee.arguments.length == 1) return defaultvideOK;
       else return (EstAnnee.arguments[1] == true);
    if (!EstEntierNonNegatif(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}



// retourne vrai si la chaine s
// - est un entier
// - se trouve compris entre a et b


function EstEntierDansInterval (s, a, b)
{   if (EstVide(s))
       if (EstEntierDansInterval.arguments.length == 1) return defaultvideOK;
       else return (EstEntierDansInterval.arguments[1] == true);


    if (!EstEntier(s, false)) return false;


    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}



// retourne vrai s'il s'agit d'un mois

function EstMois (s)
{   if (EstVide(s))
       if (EstMois.arguments.length == 1) return defaultvideOK;
       else return (EstMois.arguments[1] == true);
    return EstEntierDansInterval (s, 1, 12);
}



// retourne vrai s'il s'agit d'un jour


function EstJour (s)
{   if (EstVide(s))
       if (EstJour.arguments.length == 1) return defaultvideOK;
       else return (EstJour.arguments[1] == true);
    return EstEntierDansInterval (s, 1, 31);
}



// retourne le nombre de jour dans le mois de Février pour l'année


function JourEnFevrier (annee)
{
    return (  ((annee % 4 == 0) && ( (!(annee % 100 == 0)) || (annee % 400 == 0) ) ) ? 29 : 28 );
}



// retourne vrai si (annee, mois, jour) est une date valide


function EstDate (annee, mois, jour)
{
    if (! (EstDate(annee, false) && EstMois(mois, false) && EstJour(jour, false))) return false;


    var intannee = parseInt(annee);
    var intmois = parseInt(mois);
    var intjour = parseInt(jour);


    if (intjour > JoursDansMois[intmois]) return false;

    if ((intmois == 2) && (intjour > JoursEnFevrier(annee))) return false;

    return true;
}






// Fonction VerifieEntier
// retourne vrai si le champs est un entier
// sinon affiche un message d'invalidité
function VerifieEntier (champs, videOK)
{
    if (VerifieEntier.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    if (!EstEntier(champs.value))
        return AvertitInvalide (champs, iNumerique);
    else return true;
}



// retourne vrai si le champs est une chaine de caractères non blanche ou vide
// sinon affiche un message d'invalidité

function VerifieChaine (champs, videOK)
{
    if (VerifieChaine.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    if (EstEspaceBlanc(champs.value))
       return AvertitVide (champs, s);
    else return true;
}



// retourne vrai si le champs est un code d'état valide
// sinon affiche un message d'invalidité

function VerifieEtatCode (champs, videOK)
{   if (VerifieEtatCode.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  champs.value = champs.value.toUpperCase();
       if (!isEtatCode(champs.value, false))
          return AvertitInvalide (champs, iCode);
       else return true;
    }
}



//    Reformate le code postal

function ReformateCodePostal (chaine)
{   if (chaine.length == 5) return chaine;
    else return (reformate (chaine, "", 5, "-", 4));
}




// retourne vrai si le champs est un code postal valide
// sinon affiche un message d'invalidité

function VerifieCodePostal (champs, videOK)
{   if (VerifieCodePostal.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    { var CodePostalNormalize = RetireCaractereDansListe(champs.value, SeparateursCodePostal)
      if (!EstCodePostal(CodePostalNormalize, false))
         return AvertitInvalide (champs, iCodePostal);
      else
      {            champs.value = ReformateCodePostal(CodePostalNormalize)
         return true;
      }
    }
}






// retourne vrai si le champs est un numéro de téléphone international valide
// sinon affiche un message d'invalidité

function VerifieInternationalPhone (champs, videOK)
{   if (verifieInternationalPhone.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else
    {  if (!isInternationalPhoneNumber(champs.value, false))
          return AvertitInvalide (champs, iNumeroTelephoneInternational);
       else return true;
    }
}



// retourne vrai si le champs est un e-mail valide
// sinon affiche un message d'invalidité

function VerifieEmail (champs, videOK)
{   if (VerifieEmail.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    else if (!EstEmail(champs.value, false))
       return AvertitInvalide (champs, iEmail);
    else return true;
}



// retourne vrai si le champs est une année valide
// sinon affiche un message d'invalidité

function VerifieAnnee (champs, videOK)
{   if (VerifieAnnee.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    if (!EstAnnee(champs.value, false))
       return AvertitInvalide (champs, iAnnee);
    else return true;
}


// retourne vrai si le champs est un mois valide
// sinon affiche un message d'invalidité

function VerifieMois (champs, videOK)
{   if (VerifieMois.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    if (!EstMois(champs.value, false))
       return AvertitInvalide (champs, iMois);
    else return true;
}


// retourne vrai si le champs est un jour valide
// sinon affiche un message d'invalidité

function VerifieJour (champs, videOK)
{   if (VerifieJour.arguments.length == 1) videOK = defaultvideOK;
    if ((videOK == true) && (EstVide(champs.value))) return true;
    if (!EstJour(champs.value, false))
       return AvertitInvalide (champs, iJour);
    else return true;
}



// retourne vrai si le champs est une année valide
// sinon affiche un message d'invalidité

function VerifieDate (annee, mois, jour, label, OKPourOublierJour)
{
    if (VerifieDate.arguments.length == 4) OKPourOublierJour = false;
    if (!EstAnnee(annee.value)) return AvertitInvalide (annee, iYear);
    if (!EstMois(mois.value)) return AvertitInvalide (mois, iMonth);
    if ( (OKPourOublierJour == true) && EstVide(jour.value) ) return true;
    else if (!EstJour(jour.value))
       return AvertitInvalide (jour, iDay);
    if (EstJour (annee.value, mois.value, jour.value))
       return true;
    alert (iDatePrefixe + label + iDateSuffixe)
    return false
}

// retourne    la valeur d'un radio-bouton


function ObtientValeurRadioBouton (radio)
{   for (var i = 0; i < radio.length; i++)
    {   if (radio[i].verifieed) { break }
    }
    return radio[i].value
}

function Confirmation_Message (message, texteok, texteko)
{
var a = false, b='';
a= confirm (message);
if (a)
b = texteok;
else
b= texteko;
alert (b);
}

function Confirmation (message)
{
var a = false, b='';
a= confirm (message);
if (a) {
window.status = "Accepté";
return true;
}
else
{
window.status = "Refusé";
return false;
}
}

function Calcul_Gencod13 (champs1,champs2)
{
//champs1 : Gencod8 ,champs2 : Gencod13
champs2.value = "302" + champs1.value + "00";
return champs2;
}

function Calcul_Gencod8 (champs1,champs2)
{
//champs1 : Gencod13 ,champs2 : Gencod8
champs2.value = champs1.value.substring(3,11);
return champs2;
}

function Select_Libelle (code,libelle)
{
// code : nom de l'objet contenant le code (Datafield)
// libelle : nom de l'objet contenant le libelle (Select)

for (var i= 0; i < libelle.options.length; i++) {

        if (libelle.options[i].value == code.value) {
        libelle.selectedIndex=i;
        return true;
        break;}
}

//window.status = libelle.selectedIndex;
//a= confirm (libelle.selectedIndex);
//a= confirm (code.value);
//a= confirm (libelle.options[libelle.selectedIndex].value);
//a= confirm (libelle.options[libelle.selectedIndex].name);
//libelle.options[libelle.selectedIndex].value= code.value;
//a= confirm (libelle.options.name);
// champs2.value = champs1.value.substring(3,11);
return false;
}

function Select_Code (libelle,code)
{

code.value = libelle.options[libelle.selectedIndex].value;
return true;
}

function Select_Libelle5 (code,libelle)
{
// code : nom de l'objet contenant le code (Datafield) 5 premiers caractères
// libelle : nom de l'objet contenant le libelle (Select)

for (var i= 0; i < libelle.options.length; i++) {

        if (libelle.options[i].value.substr(0,5) == code.value) {
        libelle.selectedIndex=i;
        return true;
        break;}
}

//window.status = libelle.selectedIndex;
//a= confirm (libelle.selectedIndex);
//a= confirm (code.value);
//a= confirm (libelle.options[libelle.selectedIndex].value);
//a= confirm (libelle.options[libelle.selectedIndex].name);
//libelle.options[libelle.selectedIndex].value= code.value;
//a= confirm (libelle.options.name);
// champs2.value = champs1.value.substring(3,11);
return false;
}

function Select_Code5 (libelle,code)
{

code.value = libelle.options[libelle.selectedIndex].value.substr(0,5);
return true;
}

// On rajoute le Naf
function ControleDonneeObligatoireDetail (s1,s2,s3,s4,s5,s6)
{
//  Raison Sociale 1, Gencod8 , Gencod13,  Naf , Tel, Fax
var erreur=0;
if (EstEspaceBlanc (s1.value)){

        erreur=1;
}
if ((EstEspaceBlanc (s2.value)) || (!EstGencod8(s2.value))){

        erreur=1;
}
if ((EstEspaceBlanc (s3.value)) || (s3.value == "Creation") || (!EstGencod13(s3.value)) ){

        erreur=1;
}

// Rajout controle Gencod8, Gencod13
var chaine = s3.value.substring(3,11);

if (chaine != s2.value)
{
   erreur=1;
}

// Rajout controle clé Gencod13

if (! Controle_cle_Gencod13(s3))
{
    erreur=1;
}

if (!EstNaf(s4.value)){
         erreur=1;
}
var NumeroTelephoneNormalise = RetireCaractereDansListe(s5.value, SeparateursNumeroTelephone) ;
if (!EstNumeroTelephone (NumeroTelephoneNormalise, true)){
        erreur=1;
}

var NumeroTelephoneNormalise = RetireCaractereDansListe(s6.value, SeparateursNumeroTelephone) ;
if (!EstNumeroTelephone (NumeroTelephoneNormalise, true)){
        erreur=1;
}

if (erreur){
      return false;
        }
else{
return true;
}
}




function VerifieDonneeObligatoireDetail (s1,s2,s3,s4,s5,s6)
{
//  Raison Sociale 1, Gencod8 , Gencod13,  Naf , Tel, Fax
var pMessage = "Les données obligatoires suivantes sont pas ou mal renseignées :\n\n"
var erreur=0;
if (EstEspaceBlanc (s1.value)){
        pMessage = pMessage + "- Raison Sociale 1\n";
        erreur=1;
}
if ((EstEspaceBlanc (s2.value)) || (!EstGencod8(s2.value))){
        pMessage = pMessage + "- Gencod 8\n"
        erreur=1;
}
if ((EstEspaceBlanc (s3.value)) || (s3.value == "Creation") || (!EstGencod13(s3.value)) ){
        pMessage = pMessage + "- Gencod 13\n"
        erreur=1;
}

// Rajout controle Gencod8, Gencod13
var chaine = s3.value.substring(3,11);

if (chaine != s2.value)
{
      pMessage = pMessage + "- Gencod8 et Gencod13 ne correspondent pas\n"
        erreur=1;
}

// Rajout controle clé Gencod13

if (! Controle_cle_Gencod13(s3))
{
      pMessage = pMessage + "- La clé du Gencod13 n'est pas exacte\n"
      erreur=1;
}


if (!EstNaf(s4.value)){
        pMessage = pMessage + "- Naf \n"
        erreur=1;
}

var NumeroTelephoneNormalise = RetireCaractereDansListe(s5.value, SeparateursNumeroTelephone) ;
if (!EstNumeroTelephone (NumeroTelephoneNormalise, true)){
        pMessage = pMessage + "- Numero de Téléphone \n"
        erreur=1;
}

var NumeroTelephoneNormalise = RetireCaractereDansListe(s6.value, SeparateursNumeroTelephone) ;
if (!EstNumeroTelephone (NumeroTelephoneNormalise, true)){
        pMessage = pMessage + "- Numero de Fax \n"
        erreur=1;
}




if (erreur){
        return (pMessage);
          }
else{
return true;
}
}


function Controle_Gencod (Gencod8, Gencod13 ,valeur)
{

if (Controle_Gencod.arguments.length == 2) valeur = "Création";
// Gencod13 doit être de la forme :
// XXXGencod8YY

if ( (Gencod13.value != valeur ) && (EstGencod13(Gencod13.value)) && (EstGencod8(Gencod8.value)))
{
var chaine = Gencod13.value.substring(3,11);

if (chaine != Gencod8.value)
    {
    alert(iGencod);
    return false;
    }
}
else
{
return true;
}
}

function Majuscule (s)
{
reu = /[úûüûùÛÙÚÛÜ]/;
rea = /[áããäåæâàÂÀÁÂÃÄÅÆ]/ ;
ree = /[ÈÉÊËÊèéêëè]/ ;
rei = /[ÌÍÎÏÎîìíîï]/ ;
reo = /[óôõöôÔÒÓÔÕÖ]/ ;
rec = /[çÇ]/ ;
redq = /\"/ ;
res = /&/

var returnString="";
// Remplacement
 var i;
 var texte = s.value;

    for (i = 0; i < texte.length; i++)
    {
        var val = texte.charAt(i);
         val = val.replace (reu, "U");
         val = val.replace (rea, "A");
         val = val.replace (ree, "E");
         val = val.replace (rei, "I");
         val = val.replace (reo, "O");
         val = val.replace (rec, "C");
         val = val.replace (redq, "'");
         val = val.replace (res, "");
         returnString += val;
    }

s.value = returnString.toUpperCase();
}

function Valide_bouton(s,top_no_focus){

// s = bouton
// f = top_no_focus


if (s == 'consultation')
{
document.images["img_consultation"].src="../img/consultationgr.gif"
document.images["img_miseajour"].src="../img/miseajour.gif"
document.images["img_creation"].src="../img/creation.gif"
// document.images["img_titre"].src="../img/consultation_titre.gif"
document.forms['Recherche'].reset();
/*
document.images["img_recherche"].src="../img/RECHERC.gif"
document.images["img_recherche"].width="140"
document.images["img_recherche"].height="23"
document.images["img_recherche"].title="Recherche"
*/
document.forms['Recherche'].mode.value = "consultation";

if (top_no_focus != 1)
document.forms['Recherche'].Gencod13_Recherche.focus();


}
else
if (s == 'miseajour')
{
document.images["img_consultation"].src="../img/consultation.gif"
document.images["img_miseajour"].src="../img/miseajourgr.gif"
document.images["img_creation"].src="../img/creation.gif"
// document.images["img_titre"].src="../img/miseajour_titre.gif"
document.forms['Recherche'].reset();
/*
document.images["img_recherche"].src="../img/RECHERC.gif"
document.images["img_recherche"].width="140"
document.images["img_recherche"].height="23"
document.images["img_recherche"].title="Recherche"
*/
document.forms['Recherche'].mode.value = "miseajour";
if (top_no_focus != 1)
document.forms['Recherche'].Gencod13_Recherche.focus();
document.forms['Recherche'].reset();
}
else
if (s == 'creation')
{
document.images["img_consultation"].src="../img/consultation.gif"
document.images["img_miseajour"].src="../img/miseajour.gif"
document.images["img_creation"].src="../img/creationgr.gif"
// document.images["img_titre"].src="../img/creation_titre.gif"
document.forms['Recherche'].reset();
document.forms['Recherche'].mode.value = "creation";
if (top_no_focus != 1)
document.forms['Recherche'].Gencod13_Recherche.focus();
/*
document.images["img_recherche"].src="../img/RECHERC.gif"
document.images["img_recherche"].width="140"
document.images["img_recherche"].height="23"
document.images["img_recherche"].title="Recherche"
*/
}
else
if (s == 'rien')
{
document.images["img_consultation"].src="../img/consultation.gif"
document.images["img_miseajour"].src="../img/miseajour.gif"
document.images["img_creation"].src="../img/creation.gif"
// document.images["img_titre"].src="../img/vide_titre.gif"
/* document.images["img_recherche"].src="../img/recherchegr.gif"
document.images["img_recherche"].width="140"
document.images["img_recherche"].height="23"
document.images["img_recherche"].title="Recherche"
*/

}
return true;

}

function Onclick_bouton(s)
{
// s = nom du formulaire

var longueur = s.length;

var finchaine = s.substring(longueur-15,longueur);



if (finchaine == "recherchegr.gif")
                 return false;
else
{   alert(finchaine);
          //   document.forms['Recherche'].submit();
                 document.Recherche.submit();
}
return true;
}

// Efface le champs, si creation
function Efface_creation(s)
{
if (s.value == "Creation")
    s.value="";
return true;
}


// Calcule la cle du Gencod
// Si treizième position à 0, rien ne se fait
function Controle_cle_Gencod13(s)
{
var chaine;


if ((s.value.charAt(12)) == "0")
      return true;

if ((s.value.length) < 12)
      return false;


var facteur = new Array(12);
var corresp = new Array(10);
var somme = 0;
facteur=[1,3,1,3,1,3,1,3,1,3,1,3];
corresp =[0,9,8,7,6,5,4,3,2,1];

for (nombre=0; nombre <12;nombre++)
{ somme +=(facteur[nombre])*s.value.charAt(nombre);

}

reste = somme % 10;

resultat = corresp[reste];

if (((s.value.charAt(12)) == resultat)&&(s.value.length == 13))
      return true;
else
{
  chaine=s.value.substr(0,12)+resultat;
  s.value = chaine;
  return true;
}


}


function Avertit_cle_Gencod13(s)
{

var facteur = new Array(12);
var corresp = new Array(10);
var pMessage;
var somme = 0;
facteur=[1,3,1,3,1,3,1,3,1,3,1,3];
corresp =[0,9,8,7,6,5,4,3,2,1];

for (nombre=0; nombre <12;nombre++)
{ somme +=(facteur[nombre])*s.value.charAt(nombre);

}

reste = somme % 10;

resultat = corresp[reste];

pMessage = "La clé du Gencod13 doit être : " + resultat;

     return pMessage;
}