function validateEmailAddress(form) {
	if (
		form==null ||
		form.email==null ||
		form.site==null ||
		form.css==null
	) return false;
	if (form.email.value=="" || form.email.value=="Your email address") {
		window.alert("Please enter your email address to sign up to the newsletter.");
		form.email.focus();
		return false;
	} else if (!esuCheckEmailFormat(form.email.value)) {
		window.alert("The email address '" + form.email.value + "' does not appear to be valid.  Please check your entry and try again.");
		form.email.select();
		form.email.focus();
		return false;
	}
    return true;
}


function doEmailSignup(form) {

    if (form==null) form=document.emailsignup;
    if (! validateEmailAddress(form)) {
        return;
    }

    //center it

	var newWinHeight = 130;

	var newWinWidth = 220;

	var left = 0;

	var top = 0;

	if (document.all) {

		//IE

		left = window.screenLeft;

		left+=(window.document.body.clientWidth/2);

		left-=(newWinWidth/2);

		top = window.screenTop;

		top+=(window.document.body.clientHeight/2);

		top-=(newWinHeight/2);

	} else {

		//ns

		left = window.screenX;

		left+=(window.outerWidth/2);

		left-=(newWinWidth/2);

		top = window.screenY;

		top+=(window.outerHeight/2);

		top-=(newWinHeight/2);

	}

	var sOptions = "height="+newWinHeight+",width="+newWinWidth+",resizable=0,scrollbars=0,status=0,location=0,menubar=0,toolbar=0";

	if (left>0 && top>0) {

		sOptions+=",left="+left+",top="+top;

	}

	var newWin = window.open(getSignupUrl(form), "emailsignup", sOptions);

	newWin.focus();

}


function getSignupUrl(form) {

    var URL = form.site.value;  
    
    return URL + "/ext/news/signup.jsp?email="+escape(form.email.value)+"&from="+escape(URL)+"&css="+escape(form.css.value);
}


/**
 * Creates an i-frame to do the email sign-up so the page does not have to be re-loaded.
 */
function doInPageSignup(form, containerId) {
    if (form==null) form=document.emailsignup;
    if (validateEmailAddress(form)) {
        var iFrameSignup = "<iframe src='" + getSignupUrl(form) + "'></iframe>"
        containerId.innerHTML = iFrameSignup;
        return true;
    } else {
        return false;
    }
}


var esuPreFilled = "Your email address";

function esuTrim(val) {

	if (val==null) return "";

	if (val.length==0) return val;

	if (val.charAt(0)!=' ' && val.charAt(val.length-1)!=' ') return val;

	var trimmed = "";

	//ltrim

	var nonSpace = 0;

	while (nonSpace<val.length && val.charAt(nonSpace)==' ') nonSpace++;

	trimmed = val.substring(nonSpace);

	//rtrim

	nonSpace = trimmed.length-1;

	while (nonSpace>0 && trimmed.charAt(nonSpace)==' ') nonSpace--;

	

	return trimmed.substring(0, nonSpace+1);

}

function esuFocus(form) {

    if (form==null) form=document.emailsignup;

	var el = form;

	if (el==null) return;

	el = form.email;

	if (el==null) return;

	if (el.value!=null && el.value==esuPreFilled) {

		el.value="";

	}

}

function esuBlur(form) {

    if (form==null) form=document.emailsignup;

	var el = form;

	if (el==null) return;

	el = form.email;

	if (el==null) return;

	var elVal = esuTrim(el.value);

	if (elVal.length<1) {

		el.value=esuPreFilled;

	}

}

function esuCheckEmailFormat(val) {

	/* The following pattern is used to check if the entered email 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 email 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

	   email 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=val.match(emailPat);

	if (matchArray==null) {

	  /* Too many/few @'s or something; basically, this address doesn't

	     even fit the general mould of a valid email address. */

		//alert("Email address seems incorrect (check @ and .'s)")

		return false;

	}

	var user=matchArray[1];

	var domain=matchArray[2];

	

	// 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 email 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

	var domainArray=domain.match(domainPat)

	if (domainArray==null) {

		//alert("The 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 word (like com, edu, gov) or a two-letter word,

	   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 atoms

	   it consists of. */

	var atomPat=new RegExp(atom,"g");

	var domArr=domain.match(atomPat);

	var len=domArr.length;

	if (domArr[domArr.length-1].length<2 || 

	    domArr[domArr.length-1].length>3) {

	   // the address must end in a two letter or three letter word.

	   //alert("The address must end in a three-letter domain, or two letter country.");

	   return false;

	}

	

	// Make sure there's a host name preceding the domain.

	if (len<2) {

	   //var errStr="This address is missing a hostname!";

	   //alert(errStr);

	   return false;

	}

	

	// If we've gotten this far, everything's valid!

	return true;

}

