//----------------------------------------------------------------------------------------------------------------------
// Vérification syntaxique de l'adresse mail
//----------------------------------------------------------------------------------------------------------------------
function emailCheck (emailStr)
{
  var lang;
  if(emailCheck.arguments.length == 1) {
    lang = 'fr';
  } else if(emailCheck.arguments.length >= 2 && emailCheck.arguments[1] == 'en') {
    lang = 'en';
  } else {
    lang = 'fr';
  }
  var texts;
  if(lang == 'fr') {
  texts = new Array("L'adresse e-mail semble incorrecte (vérifiez le @ et les .)", "La partie valide ne semble pas valide",
  "L'adresse IP de destination est invalide", "Le nom de domaine ne semble pas valide",
  "L'adresse doit se terminer par deux ou trois lettres indiquant le pays ou le type", "Il manque le nom de l'hôte");
  } else {
  texts = new Array("Email address seems incorrect (check @ and .'s)", "The username doesn't seem to be valid",
  "Destination IP address is invalid", "The domain name doesn't seem to be valid",
  "The address must end in a three-letter domain, or two letter country", "This address is missing a hostname");
  }

  //Le Pattern de l'adresse e-mail : user@domain
  var emailPat=/^(.+)@(.+)$/;

  //Les caractères spéciaux, interdit dans l'adresse mail : ( ) < > @ , ; : \ " . [ ]
  var specialChars='\\(\\)<>@,;:\\\\\\\"\\.\\[\\]';

  //On affecte ici les caractères interdit dans le nom d'utilisateur et le nom de domaine
  var validChars="\[^\\s" + specialChars + "\]";

  /* Pattern utilisé dans le cas où le nom d'utilisateur est entre guillemets : "citation".
     Dans ce cas là, aucun caractère n'est interdit.
     Exemple : "mike\myers"@fox.com */
  var quotedUser='(\"[^\"]*\")';

  /* Pattern utilisé dans le cas où le nom de dommaine précisé est une adresse IP (placée entre crochets).
     Exemple : joe@[123.124.233.4] */
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

  //L'atome employé : les caractères non spéciaux
  var atom=validChars + '+';

  //Un  mot dans la chaine utilisateur : un atome ou une "citation"
  var word="(" + atom + "|" + quotedUser + ")";

  //La structure du nom d'utilisateur
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

  //La structure des nom de domaines classiques (pas IP)
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

  // VALIDATION DE L'ADRESSE -------------------------------------------------------------------------------------------
  //Découpage user / domain grâce au pattern de l'e-mail
  var matchArray=emailStr.match(emailPat);
  if (matchArray==null)
  {
    //Adresse non valide : trop ou pas assez de @
    alert(texts[0]);
    return false;
  }
  var user=matchArray[1];
  var domain=matchArray[2];

  // Validation de l'utilisateur =====
  if (user.match(userPat)==null)
  {
    alert(texts[1]);
    return false;
  }

  //Validation du domaine =====
  //domain = [adresse IP]
  var IPArray=domain.match(ipDomainPat);
  if (IPArray!=null)
  {
    // this is an IP address
    for (var i=1;i<=4;i++)
    {
      if (IPArray[i]>255)
      {
        alert(texts[2]);
        return false;
      }
    }
    return true
  }

  // domain classique : FAI.country
  var domainArray=domain.match(domainPat);
  if (domainArray==null)
  {
    alert(texts[3]);
    return false;
  }

  /* Maintenant que le nom de domaine semble valide, vérifions qu'il se termine bien par 2 ou 3 lettres
     (com, gouv, fr ...) et q'un nom d'hôte précède bien le nom du domaine ou pays. */
  //Découpage du domaine pour voir combien il contient d'atomes
  var atomPat=new RegExp(atom,"g");
  var domArr=domain.match(atomPat);
  var len=domArr.length;
  if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3 )
  {
    //L'adresse ne se termine pas par 2 ou3 lettres
    alert(texts[4]);
    return false;
  }

  //Le nom d'hôte est manquant
  if (len<2)
  {
    alert(texts[5]);
    return false;
  }

  //Si on arrive ici, c'est que tous les test on étés passés avec succès
  return true;
}
