function emailCheck (emailStr) {
  var checkTLD=1;
  var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|bz|aero|name|coop|info|pro|museum|it|eur)$/;
  var emailPat=/^(.+)@(.+)$/;
  var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
  var validChars="\[^\\s" + specialChars + "\]";
  var quotedUser="(\"[^\"]*\")";
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
  var atom=validChars + '+';
  var word="(" + atom + "|" + quotedUser + ")";
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

  var matchArray=emailStr.match(emailPat);
  if (matchArray==null) {
     alert("Indirizzo Email errato (controlla i caratteri '@' e '.' )");
     return false;
  }
  var user=matchArray[1];
  var domain=matchArray[2];

  for (i=0; i<user.length; i++) {
    if (user.charCodeAt(i)>127) {
      alert("Il nome utente contiene caratteri non validi.");
      return false;
    }
  }
  for (i=0; i<domain.length; i++) {
    if (domain.charCodeAt(i)>127) {
       alert("Il nome di dominio contiene caratteri non validi.");
       return false;
    }
  }

  if (user.match(userPat)==null) {
     alert("Il nome utente non è considerato valido.");
     return false;
  }

  var IPArray=domain.match(ipDomainPat);
  if (IPArray!=null) {

     for (var i=1;i<=4;i++) {
       if (IPArray[i]>255) {
          alert("L'indirizzo IP di destinazione non è valido!");
          return false;
       }
     }
     return true;
  }

  var atomPat=new RegExp("^" + atom + "$");
  var domArr=domain.split(".");
  var len=domArr.length;
  for (i=0;i<len;i++) {
     if (domArr[i].search(atomPat)==-1) {
       alert("Il nome di dominio non è considerato valido.");
       return false;
     }
  }
  if (checkTLD && domArr[domArr.length-1].length!=2 && 
          domArr[domArr.length-1].search(knownDomsPat)==-1) {
     alert("L'indirizzo deve avere un dominio ben conosciuto ( 'COM' 'IT' 'ORG' etc...) ");
     return false;
  }
  if (len<2) {
     alert("In questo indirizzo manca l'hostname!");
     return false;
  }
  return true;
}
