  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=/(.*)\((.*)\)(.*)$/;

  if(typeof(errorWhitePaperMissing) == 'undefined') {
      var errorWhitePaperMissing = "You forgot to select a white paper!";
  }

  if(typeof(errorFieldNotFilled) == 'undefined') {
      var errorFieldNotFilled = " is a required field. Please type a value.";
  }
  if(typeof(errorEmailNotValid) == 'undefined') {
      var errorEmailNotValid = " Error: Invalid email address. Please type a valid email address for field";
  }
  if(typeof(errorSelectionNotValid) == 'undefined') {
      var errorSelectionNotValid = " is a required field. Please choose a selection.";
  }

  function ValidateForm() {
    var form= document.training; 
    
    field = document.training.WPL;    
    if (field.value=="")
      { alert(errorWhitePaperMissing); return false;}
        
    field = document.training.FIRST_NAME;    
    if (isBlank(field, field.parentNode.childNodes[1].textContent)) return false;
      
    field = document.training.LAST_NAME;
    if (isBlank(field, field.parentNode.childNodes[1].textContent)) return false;
  
    field = document.training.PHONE_1;
    if (isBlank(field, field.parentNode.childNodes[1].textContent)) return false;
  
    field = document.training.PRIMARY_EMAIL_ADDR;    
    if (isBlank(field, field.parentNode.childNodes[1].textContent)) return false;    
    if (!isEmail(field, field.parentNode.childNodes[1].textContent)) return false;
    
    field = document.training.JOB_FUNCTION_CD;    
    if (!isSelected(field, field.parentNode.childNodes[1].textContent)) return false;
      
    field = document.training.Department;                  
    if (!isSelected(field, field.parentNode.childNodes[1].textContent)) return false;
        
    field = document.training.NAME;    
    if (isBlank(field, field.parentNode.childNodes[1].textContent)) return false;                 
      
    field = document.training.ZIP_CODE;
    if (isBlank(field, field.parentNode.childNodes[1].textContent)) return false;    
    
    field = document.training.COUNTRY;
    if (!isSelected(field, field.parentNode.childNodes[1].textContent)) return false; 
    
    field = document.training.INDUSTRY_GROUP_CD;
    if (!isSelected(field, field.parentNode.childNodes[1].textContent)) return false;
  
    field = document.training.ASSET_REVENUE_VALUE_CD;
    if (!isSelected(field, field.parentNode.childNodes[1].textContent)) return false;
        
    return true;
  }
  
  function isBlank(field, strBodyHeader) {
    var strTrimmed = trim(field.value);
    if (strTrimmed.length > 0) return false;
    alert("\"" + strBodyHeader + "\" " + errorFieldNotFilled);
    field.focus();
    return true;
  }
  
  function isEmail(field, strBodyHeader){
    emailStr = field.value;
    if(emailStr.length == 0) return false;
    if(!complexEmailCheck(emailStr)) {
      alert(errorEmailNotValid+ " \"" + strBodyHeader + "\".");
      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;
  }
  
  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 trimLeft(s) {
    var whitespaces = " \t\n\r";
                  var n;
    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 trimRight(s){
    var whitespaces = " \t\n\r";
                  var n;
    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) ? "" : trimRight(trimLeft(s))); }
  
  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 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 isSelected(field, strBodyHeader) 
  {
    for(i=0; i < field.length; i++) 
                 { 
                     if (field[i].selected && (trim(field[i].value).length > 0)) 
                     return true;
                   } 
    alert("\"" + strBodyHeader + "\" " + errorSelectionNotValid);
    field.focus();
    return false;
  }