function funEmailCheck(strEmail) {

/* First check if the email has been entered. */

if  (strEmail == '') {
	alert("You must enter your email address.")
	return false;
}

/* If it's present, set the variables. */

/* 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 strEmailPat     = /^(.+)@(.+)$/

/* 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 strSpecialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"

/* The following string represents the range of characters allowed in a 
   username or domainname.  It really states which chars aren't allowed. */
var strValidChars   = "\[^\\s" + strSpecialChars + "\]"

/* 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 strQuotedUser   = "(\"[^\"]*\")"

/* 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 strIpDomainPat  = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

/* The following string represents an strAtom (basically a series of
   non-special characters.) */
var strAtom         = strValidChars + '+'

/* The following string represents one strWord in the typical username.
   For example, in john.doe@somewhere.com, john and doe are strWords.
   Basically, a strWord is either an strAtom or quoted string. */
var strWord         = "(" + strAtom + "|" + strQuotedUser + ")"

/* The following pattern describes the structure of the user */
var strUserPat      = new RegExp("^" + strWord + "(\\." + strWord + ")*$")

/* The following pattern describes the structure of a normal symbolic
   domain, as opposed to strIpDomainPat, shown above. */
var strDomainPat    = new RegExp("^" + strAtom + "(\\." + strAtom +")*$")

/* The following array lists the banned domains. */
var aBadDomains     = new Array("yahoo","hotmail","msn","bigfoot","aol")


/* Now, validate the email address. */

/* Begin with the coarse pattern to simply break up user@domain into
   different pieces that are easy to analyze. */
var aMatches = strEmail.match(strEmailPat)
if  (aMatches == 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 (check '@' and '.'s)")
	return false
}
var strUser   = aMatches[1]
var strDomain = aMatches[2]

// See if "user" is valid 
if  (strUser.match(strUserPat) == null) {
    // user is not valid
    alert("The Email 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 aIpBits = strDomain.match(strIpDomainPat)
if  (aIpBits != null) {
    // this is an IP address
	  for (var i = 1; i <= 4; i++) {
	    if  (aIpBits[i] > 255) {
	        alert("Destination IP address is invalid!")
		return false
	    }
    }
    return true
}

// Domain is symbolic name
var aDomainBits = strDomain.match(strDomainPat)
if  (aDomainBits == null) {
	alert("The email domain name doesn't seem to be valid.")
    return false
}

/* domain name seems valid, but now make sure that it ends in a
   three-letter strWord (like com, edu, gov) or a two-letter strWord,
   representing country (uk, nl), and that there's a hostname preceding 
   the domain or country. */

/* Now we need to break up the domain to get a count of how many strAtoms
   it consists of. */
var strAtomPat = new RegExp(strAtom,"g")
var aDomain    = strDomain.match(strAtomPat)
var intLen     = aDomain.length
if  (aDomain[intLen - 1].length < 2) {
   // the address must end in a two letter or three letter strWord.
   alert("The last part of the address must be at least 2 characters.")
   return false
}

// Make sure there's a host name preceding the domain.
if  (intLen < 2) {
   alert("This address is missing a hostname!")
   return false
}

// Check whether domain is in the list of banned domains.
for (var i = 0; i <= aBadDomains.length - 1; i++) {
	if  (strDomain.indexOf(aBadDomains[i]) != -1) {
		alert("This email address is in our list of banned domains.  Please use another one.\nSee our Email Address Policy for further information.")
		return false
	}
}

// If we've gotten this far, everything's valid!
return true;
}
