/**** Dbut de fonction : verifEmail ****/
// Entre : mail - (String) - Email  analys.
// Renvoy : true ou false - (Boolean) - Vrai si l'email est correct sinon Faux

function verifEmail(mail) {

  /*** Dbut de dclaration de variable ***/
  //var de retour boolean true ou false
  var ret = true;
  //var o l'on stock le caractre courant au fur et a mesure de l'analyse
  var car = "";
  //var o l'on stock le caractre place avant le @
  var carAfter = "";
  //var o l'on stock le caractre place aprs le @
  var carBefore = "";
  //var o l'on stock le nombre de caractres total
  var nbrcar = mail.length;
  //var o l'on stock le nombre de @ trouv
  var nbrarobase = 0;
  //var o l'on stock le nombre de . trouv
  var nbrpoint = 0;
  //var dfinissant les caractres authoriss
  var goodcar = "@0123456789.-+_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  /*** Fin de dclaration de variable ***/

  /*** Dbut de boucle de l'analyse ***/
  for(cnt=0;cnt<nbrcar;cnt++) {

    //Rcupration du caractre courant
    var car = mail.substr(cnt,1);

    /** Dbut de l'analyse du caractre courant **/
    //Si le caractre est authoris
    if(goodcar.indexOf(car) >= 0) {

      //On initialise les variables carAfter et carBefore  vide
      carAfter = "";
      carBefore = "";

      /* Dbut de l'analyse du @ */
      //Si le caractre est @
      if(car == "@") {


        //Si le @ n'est pas le premier
        if((cnt-1) >= 0) {

          //Rcupration du caractre plac avant le @
          carBefore = mail.substr((cnt-1),1);
        }

        //Si le @ n'est pas le dernier
        if((cnt+1)<nbrcar) {

          //Rcupration du caractre plac aprs le @
         carAfter = mail.substr((cnt+1),1);
        }

        //Si toutes les condition de @ sont respectes
        //conditions:
        //    - cnt>0                 : n'est pas plac en premire position
        //    - nbrarobase==0   : est unique
        //    - cnt<(nbrcar-4)     : se trouve  une position max de 5 avant la fin
        //      (sachant que les domaines les plus petit sont : a.fr par ex.)
        //    - !(carBefore==".") : qu'il n'y est pas de . avant le @
        //    - !(carAfter==".")   : qu'il n'y est pas de . aprs le @
        //    - !(carBefore=="-") : qu'il n'y est pas de - avant le @
        //    - !(carAfter=="-")   : qu'il n'y est pas de - aprs le @
        //    - !(carBefore=="_") : qu'il n'y est pas de _ avant le @
        //    - !(carAfter=="_")   : qu'il n'y est pas de _ aprs le @
        if(cnt>0 && nbrarobase==0 && cnt<(nbrcar-4) && !(carBefore==".") && !(carAfter==".") && !(carBefore=="-") && !(carAfter=="-") && !(carBefore=="_") && !(carAfter=="_")) {

          //On incrmente le @
          nbrarobase++;
        } else {

         //Affectation Faux  la var de retour
         ret = false;
         //On sort de la boucle 
         break;
        }
      }
      /* Fin de l'analyse du @ */

      /* Dbut de l'analyse du . */
      //Si le caractre est .
      if(car == ".") {

        //Si le . n'est pas le premier
        if((cnt-1) >= 0) {

          //Rcupration du caractre plac avant le .
          carBefore = mail.substr((cnt-1),1);
        }

        //Si le . n'est pas le dernier
        if((cnt+1)<nbrcar) {

          //Rcupration du caractre plac aprs le .
         carAfter = mail.substr((cnt+1),1);
        }

        //Si toutes les condition de @ sont respectes
        //conditions:
        //    - cnt>0                 : n'est pas plac en premire position
        //    - cnt<(nbrcar-2)     : se trouve  une position max de 3 avant la fin
        //      (sachant que les domaines les plus petit sont : a.fr par ex.)
        //    - !(carBefore==".") : qu'il n'y est pas de . avant le .
        //    - !(carAfter==".")   : qu'il n'y est pas de . aprs le .
        //    - !(carBefore=="-") : qu'il n'y est pas de - avant le .
        //    - !(carAfter=="-")   : qu'il n'y est pas de - aprs le .
        //    - !(carBefore=="_") : qu'il n'y est pas de _ avant le .
        //    - !(carAfter=="_")   : qu'il n'y est pas de _ aprs le .
        if(cnt>0 && cnt<(nbrcar-2) && !(carBefore==".") && !(carAfter==".") && !(carBefore=="-") && !(carAfter=="-") && !(carBefore=="_") && !(carAfter=="_")) {

          //On incrmente le .
          nbrpoint++;
        } else {

          //Affectation Faux  la var de retour 
          ret = false;
          //On sort de la boucle 
          break;
        }
      }
      /* Fin de l'analyse du . */

    } else {

      //Affectation Faux  la var de retour 
      ret = false;
      //On sort de la boucle 
      break;
    }
    /*** Fin de l'analyse du caractre courant ***/
  }
  /*** Fin de boucle de l'analyse ***/

  /*** Dbut de l'analyse du nombre de @ et de . ***/
  //Si il n'y a aucun @ et aucun .
  //Si le 1er et le dernier caractre est .
  //Si le 1er et le dernier caractre est -
  //Si le 1er et le dernier caractre est _
  if(nbrarobase == 0 || nbrpoint == 0 || mail.substr(0,1) == "." || mail.substr(0,1) == "-" || mail.substr(0,1) == "_" || mail.substr((nbrcar-1),1) == "." || mail.substr((nbrcar-1),1) == "-" || mail.substr((nbrcar-1),1) == "_") {

    //Affectation Faux  la var de retour 
    ret = false;
  }
  /*** Fin de l'analyse du nombre de . et de @ ***/

  //Renvoi de la valeur de la var de retour
  return ret;
}
/**** Fin de fonction : verifEmail ****/ 
