function checkRequired(which)
{ var pass=true;
  var empty=true;
  if (document.images)
  { for (i=0;i<which.length;i++)
    { var tempobj=which.elements[i];
      if (tempobj.name.substring(0,8)=="required")
      { if (((tempobj.type=="text"||tempobj.type=="textarea"||tempobj.type=="file")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==0))
        { pass=false;
          break;
        }
        else
        { if (tempobj.name=="requiredEmail")
          { if (emailCheck(tempobj.value)==false)
            { pass=false;
              empty=false;
              break;
            }
          }
        }
      }
      if (tempobj.name.substring(0,8)=="ONumbers")
      { if (validateNum(tempobj)==false)
        { tempobj.value="";
          pass=false;
          empty=false;
          break;
        }
      }
      if (tempobj.type=="file")
      { if (LimitAttach(tempobj)==false)
        { tempobj.value="";
          pass=false;
          empty=false;
          break;
        }
      }
    }
  }
  if (!pass)
  { if (empty)
    { shortFieldName=tempobj.name.substring(8,30).toUpperCase();
      alert("Please make sure the "+shortFieldName+" field was properly completed.");                   
    }
    tempobj.focus();
    return false;
  }
  return true;
}



function validateNum(field)
{ var valid = "0123456789"
  var ok = "yes";
  var temp;
  for (var i=0; i<field.value.length; i++)
  { temp = "" + field.value.substring(i, i+1);
    if (valid.indexOf(temp) == "-1") ok = "no";
  }
  if (ok == "no")
  { shortFieldName=field.name.substring(8,30).toUpperCase();
    alert("Invalid entry! Only numbers are accepted for "+shortFieldName+"!");
    field.value = "";
    field.focus();
    return false;
  }
}



function emailCheck (emailStr) 
{ /* The following variable tells the rest of the function whether or not to verify that the address ends in a two-letter country or well-known TLD.  1 means check it, 0 means don't. */
  var checkTLD=1;

  /* The following is the list of known TLDs that an e-mail address must end with. */
  var knownDomsPat=/^(cc|com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

  /* The following pattern is used to check if the entered e-mail address fits the user@domain format. It also is used to separate the username from the domain. */
  var emailPat=/^(.+)@(.+)$/;

  /* The following string represents the pattern for matching all special characters.  We don't want to allow special characters in the address. These characters include ( ) < > @ , ; : \ " . [ ] */
  var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

  /* The following string represents the range of characters allowed in a username or domainname.  It really states which chars aren't allowed.*/
  var validChars="\[^\\s" + specialChars + "\]";

  /* The following pattern applies if the "user" is a quoted string (in which case, there are no rules about which characters are allowed and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com is a legal e-mail address. */
  var quotedUser="(\"[^\"]*\")";

  /* The following pattern applies for domains that are IP addresses, rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal e-mail address. NOTE: The square brackets are required. */
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

  /* The following string represents an atom (basically a series of non-special characters.) */
  var atom=validChars + '+';

  /* The following string represents one word in the typical username. For example, in john.doe@somewhere.com, john and doe are words. Basically, a word is either an atom or quoted string. */
  var word="(" + atom + "|" + quotedUser + ")";

  /* The following pattern describes the structure of the user */
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

  /* The following pattern describes the structure of a normal symbolic domain, as opposed to ipDomainPat, shown above. */
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

  /* Finally, let's start trying to figure out if the supplied address is valid. */
  /* Begin with the coarse pattern to simply break up user@domain into different pieces that are easy to analyze. */
  var matchArray=emailStr.match(emailPat);

  if (matchArray==null) 
  { /* Too many/few @'s or something; basically, this address doesn't even fit the general mould of a valid e-mail address. */
    alert("Email address seems incorrect (please check @ and .)");
    return false;
  }

  var user=matchArray[1];
  var domain=matchArray[2];

  /* Start by checking that only basic ASCII characters are in the strings (0-127). */
  for (i=0; i<user.length; i++)
  { if (user.charCodeAt(i)>127) 
    { alert("Ths email address contains invalid characters.");
      return false;
    }
  }

  for (i=0; i<domain.length; i++) 
  { if (domain.charCodeAt(i)>127) 
    { alert("Ths email address contains invalid characters.");
      return false;
    }
  }

  /* See if "user" is valid */
  if (user.match(userPat)==null)
  { /* user is not valid */
    alert("The username doesn't seem to be valid.");
    return false;
  }

  /* if the e-mail address is at an IP address (as opposed to a symbolic host name) make sure the IP address is valid. */
  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("Destination IP address is invalid!");
        return false;
      }
    }
    return true;
  }

  /* Domain is symbolic name.  Check if it's valid. */
  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("The email address does not seem to be valid, please check.");
      return false;
    }
  }

  /* domain name seems valid, but now make sure that it ends in a known top-level domain (like com, edu, gov) or a two-letter word, representing country (uk, nl), and that there's a hostname preceding the domain or country. */
  if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1)
  { alert("The email address does not seem to be valid, please check.");
    return false;
  }

  /* Make sure there's a host name preceding the domain. */
  if (len<2)
  { alert("The email address does not seem to be valid, please check.");
    return false;
  }

  /* If we've gotten this far, everything's valid! */
  return true;
}



function LimitAttach(file)
{ extArray = new Array(".doc",".docx", ".rtf", ".pdf", ".xls",".xlsx");
  allowSubmit = false;
  if (!file) return false;
  fileName = file.value;
  while (fileName.indexOf("\\") != -1)
  { fileName = fileName.slice(fileName.indexOf("\\") + 1);
    ext = fileName.slice(fileName.indexOf(".")).toLowerCase();  
    for (var i = 0; i < extArray.length; i++)
    { if (extArray[i] == ext)
      { allowSubmit = true;
        break; 
      }
    }
  }  
  if (allowSubmit) return true;
  else
  { alert("Please only upload files that end in types: " + (extArray.join("  ")) + "\nPlease select a new " + "file to upload and submit again.");
    return false;
  }
}

//  End -->
