function IsValidEmailAddress(strEmailAddress) 
{
var checkTLD = 1;
var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
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 strEmail = strEmailAddress.toLowerCase();
var matchArray = strEmail.match(emailPat);

if (matchArray == null) 
   // Email address seems incorrect (check @ and .'s)
   return false;

var user = matchArray[1];
var domain = matchArray[2];
for (i = 0; i<user.length; i++) 
{
   if (user.charCodeAt(i)>127) 
      // Ths username contains invalid characters.
      return false;
}

for (i = 0; i<domain.length; i++) 
{
   if (domain.charCodeAt(i)>127) 
      // Ths domain name contains invalid characters.
      return false;
}

if (user.match(userPat) == null) 
   // The username doesn't seem to be valid.
   return false;

var IPArray = domain.match(ipDomainPat);
if (IPArray != null) 
{
   for (var i = 1;i <= 4;i++) 
   {
      if (IPArray[i] > 255) 
         // Destination IP address is invalid!
         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) 
      // The domain name does not seem to be valid.
      return false;
}

if (checkTLD && domArr[domArr.length-1].length != 2 && domArr[domArr.length-1].search(knownDomsPat) == -1) 
   // The address must end in a well-known domain or two letter country.
   return false;

if (len < 2) 
   // This address is missing a hostname!
   return false;

return true;
}