function lTrim(s) {
  var whitespaces = " \t\n\r";
  for(n = 0; n < s.length; n++) { if (whitespaces.indexOf(s.charAt(n)) == -1) return (n > 0) ? s.substring(n, s.length) : s; }
  return("");
}

function rTrim(s){
  var whitespaces = " \t\n\r";
  for(n = s.length - 1; n  > -1; n--) { if (whitespaces.indexOf(s.charAt(n)) == -1) return (n < (s.length - 1)) ? s.substring(0, n+1) : s; }
  return("");
}

function trim(s) {return ((s == null) ? "" : rTrim(lTrim(s))); }

function isEmpty(field, strBodyHeader) {
  strTrimmed = trim(field.value);
  if (strTrimmed.length > 0) return false;
  var strMsg = "\"%%\" is a required field. Please enter a value.";
  var strArr = strMsg.split("%%");
  if(strArr.length > 1)
    strMsg = strArr[0] + strBodyHeader + strArr[1];
  alert(strMsg);
  field.focus();
  return true;
}

var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^" + specialChars + "\]";
var quotedString="(\"[^\"]*\")";
var ipDomainPat=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
var atom=validChars + '+';
var word="(" + atom + "|" + quotedString + ")";
var atomPat=new RegExp("^" + atom + "$");
var localPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
var complexPat=/^(.+)<(.+)>$/;
var commentPat=/(.*)\((.*)\)(.*)$/;

function simpleEmailCheck (emailStr) {
  if(emailStr == "") return false;
  var matchArray=emailStr.match(emailPat);
  if (matchArray==null) return false;
  var user=matchArray[1];
  var domain=matchArray[2];
  for (i=0; i<user.length; i++) {
    if (user.charCodeAt(i)>127) return false;
  }
  for (i=0; i<domain.length; i++) {
    if (domain.charCodeAt(i)>127) return false;
  }
  if( !checkUser(user)) return false;
  var IPArray=domain.match(ipDomainPat);
  if (IPArray!=null) {
    for (var i=1;i<=4;i++) {
      if (IPArray[i]>255) return false;
    }
    return true;
  }
  var domArr=domain.split(".");
  var len=domArr.length;
  for (i=0;i<len;i++) {
    if( !checkDomain(domArr[i]) ) return false;
  }
  return true;
}

function checkDomain(domain){
  var validDomain = true;
  var domainArray = domain.match(commentPat);
  if( domainArray == null ) {
    if( domain.match(atomPat)==-1) validDomain = false;
  } else {
    for(var i=1; i<domainArray.length; i++){
      if( domainArray[i] != "" && !checkDomain(domainArray[i]) ) validDomain = false;
    }
  }
  return validDomain;
}

function checkUser(user){
  var validUser = true;
  var userArray = user.match(commentPat);
  if( userArray == null ){
    if (user.match(localPat)==null)  validUser = false;
  } else {
    for(var i=1; i<userArray.length; i++) {
      if( userArray[i] != "" && !checkUser(userArray[i]) ) validUser = false;
  }
  }
  return validUser;
}

function isEmail(field, strBodyHeader){
  emailStr = field.value;
  if(emailStr.length == 0) return true;
  if(!complexEmailCheck(emailStr)) {
  var strMsg = "Invalid email address. Please enter your valid email address.";
  var strArr = strMsg.split("%%");
  if(strArr.length > 1)
  strMsg = strArr[0] + strBodyHeader + strArr[1];
  alert(strMsg);
  field.focus();
  return false;
  }
  return true;
}

function complexEmailCheck(emailStr){
  if(emailStr == "") return false;
  if(emailStr.indexOf("@")==-1) return false;
  if(emailStr.indexOf(" ")!=-1) return false;
  if(emailStr.indexOf(",")!=-1) return false;
  var matchArray=emailStr.match(complexPat);
  if (matchArray==null) {
    if( simpleEmailCheck(emailStr) ) return true;
    else return false;
  }
  var phrase=matchArray[1];
  var routeAddr=matchArray[2];
  if( !simpleEmailCheck(routeAddr) ) return false;
  else return true;
}

