function testAdrMail(adrMail) {

// déclaration et initialisation des variables
adrMailLength=adrMail.length; // longueur de la chaîne adrMail
caractOk="_.-0123456789abcdefghijklmnopqrstuvwxyz"; // caratères corect d'une adresse mail
var posArrobas=adrMail.indexOf('@',1); // position du premier Arrobas
var posPoint=adrMail.lastIndexOf('.',adrMailLength); // position du dernier point
var posCaractFaux=adrMail.indexOf('..',posArrobas+1); // position d'un caractère faux ('..' ou ' ')
var caract=0; // caractère extrait de la chaîne adrMail (utilisée par les boucles while)
var caractFaux=adrMail.charAt(0)+adrMail.charAt(posArrobas-1)+adrMail.charAt(posArrobas+1)+adrMail.charAt(posPoint-1);
var posCaract=0; // position du caractère à extraire de la chaîne adrMail (utilisée par les boucles while)
var posCaractOk=0; // position du caractère extrait de la chaîne adrMail (utilisée par les boucles while)
var posCaractNon=-1;
var retour=false; // l'adresse e-mail est considérée comme fausse au début

// début du teste
// s'il n'existe pas de caractère '..' alors on teste s'il existe un espace dans la chaîne adrMail
if (posCaractFaux!=-1 || adrMail.indexOf(' ',0)!=-1 || adrMail.indexOf('--',0)!=-1 || adrMail.indexOf('__',0)!=-1) {
    posCaractFaux=0;
}

// Teste les points ou - ou _ au début de l'adrMail, autour de l'arrobas et autour du dernier point
for (posCaract;posCaract<4;posCaract++) {
     caract=caractFaux.charAt(posCaract);
     posCaractNon=caractOk.lastIndexOf(caract,2);
     if (posCaractNon!=-1) {
        posCaractFaux=0;
        break;
     }
}
// si l'adresse mail contient au moins 1 caractère et qu'elle comporte un arrobas
// et qu'elle comporte un point et que l'arrobas est avant le dernier point
// et qu'elle ne contient pas de '..' ou d'espace et que après le dernier point il y est 2,3 ou 4 caractères
// et qu'il n'y est pas de point autour de l'arrobas et que l'adresse ne commence pas par un point
// Alors
if (adrMailLength>0 && posArrobas!=-1 && posPoint!=-1 && posArrobas<posPoint && posCaractFaux==-1 && adrMailLength-posPoint-1>=2 && adrMailLength-posPoint-1<=4) {

    // extraction d'un caractère et teste s'il existe dans la chaîne "_.-0123456789abcdefghijklmnopqrstuvwxyz"
    // S'il n'existe pas alors posCaract=-1 donc au prochain 'tour' on passe aux autres boucles (qui ne s'effecturont pas)
    // Si il existe on continue la boucle jusqu'au caractère avant l'arrobas et on passe à la boucle while suivante

    adrMail=adrMail.toLowerCase();
    posCaract=0;

    while (posCaract<posArrobas && posCaractOk!=-1) {
          caract=adrMail.charAt(posCaract);
          posCaractOk=caractOk.indexOf(caract,0);
          posCaract++;
    }
    posCaract++; // on passe l'arrobas

    // sur le même principe qu'au dessus mais pour la partie entre l'arrobas et le dernier point
    // le test ce fait sur les caractères ".-0123456789abcdefghijklmnopqrstuvwxyz"
    // caractOk.indexOf(caract,1) on ne teste plus l'underscore
    while (posCaract<posPoint && posCaractOk!=-1) {
          caract=adrMail.charAt(posCaract);
          posCaractOk=caractOk.indexOf(caract,1);
          posCaract++;
    }
    posCaract++; // on passe le point

    // sur le même principe qu'au dessus mais pour la partie entre le dernier point et la fin
    // le test ce fait sur les caractères "abcdefghijklmnopqrstuvwxyz"
    // caractOk.indexOf(caract,13) on ne teste plus que des lettres
    while (posCaract<adrMailLength && posCaractOk!=-1) {
          caract=adrMail.charAt(posCaract);
          posCaractOk=caractOk.indexOf(caract,13);
          posCaract++;
    } // fin de la boucle while
    
    // durant le parcour de l'adresse mail si n'y avait pas de caractère interdit
    // posCaractOk a changer plusieurs fois de valeur mais na jamais eu la valeur -1
    // donc l'adresse est bonne
    if (posCaractOk!=-1) {
       retour=true;
    }
}
return retour; // renvoi le résultat (true ou false)
} // fin de la fonction  
