function LTrim(x) {
	var i=0;
	if (x.length > 0) {
		while( x.charAt(i)==" ") i++;
		x = x.substr(i); }
	return x; } 

function RTrim(x) {
	var i=x.length - 1;
	if (x.length > 0) {
		while( x.charAt(i)==" ") i--;
		x = x.substr(0,i+1); }
	return x; } 

function FullTrim(x) {
	x = RTrim( LTrim(x) );
	return x; }

function CheckEmail(formElement) {
    	var sVal = FullTrim(formElement.value);
    	var sOldVal = sVal;
	var bOK = basicEmailCheck(formElement);
   
   	if ( ! bOK ) return false;
    
	sVal = emailHygeine(sVal);
	
	// if it was changed, run the popup
	if (sVal.toLowerCase() != sOldVal.toLowerCase()) {
		if (!confirm('Did you mean to type ' + sVal + ' for your email?\nClick "Cancel" to retype it.')) {
			formElement.focus();
			formElement.select();
			return false; }}
	formElement.value = sVal.toLowerCase();
	return true; }

function basicEmailCheck(formElement) {
	var oReg = /[^@\s][^@\s]+@[^@\s][^@\s]+\.[a-z]{2,4}/i  ;
	var bOK = oReg.test(formElement.value);
	var sMsg = "Please type your email address again. Make sure it's correct\n(for example, jsmith42@aol.com).";
   
	if ( ! bOK ) {
		alert( sMsg );
		formElement.focus();
		formElement.select();
		return false; }    
	return true; }

function emailHygeine(sVal) {
// replace bad characters and known bad patterns with valid stuff
// backslash
sVal = sVal.replace(/\\/g, ".");

// slash
sVal = sVal.replace( /\//g, ".");

// comma
sVal = sVal.replace( /,/g, ".");

// repeating . with just one
sVal = sVal.replace(/\.\.+/g, ".");

// repeating @ with just one
sVal = sVal.replace( /@@+/g, "@");

// repeating - with just one
sVal = sVal.replace( /--+/g, "-");

// repeating ' single quote with just one
sVal = sVal.replace(/''+/g, "'");

// remove @ . - if first char
sVal = sVal.replace(/^[@|\.|\-]+/, "");

// remove @ . - if last char
sVal = sVal.replace(/[@|\.|\-]+$/, "");

// remove accents
sVal = sVal.replace(/`/g, "");

// remove any chars not permitted
sVal = sVal.replace(/[^0-9a-z@\.&\*\+\-_<+>]/gi,"");

// replace .@ or @. with @
sVal = sVal.replace(/(\.@)|(@\.)/gi,"@");

// replace @domain(end) with @domain.com for certain domains
sVal = sVal.replace(/@aol$/i,"@aol.com");
sVal = sVal.replace(/@msn$/i,"@msn.com");
sVal = sVal.replace(/@juno$/i,"@juno.com");
sVal = sVal.replace(/@home$/i,"@home.com");
sVal = sVal.replace(/@yahoo$/i,"@yahoo.com");
sVal = sVal.replace(/@prodigy$/i,"@prodigy.com");
sVal = sVal.replace(/@hotmail$/i,"@hotmail.com");
sVal = sVal.replace(/@email\.msn$/i,"@email.msn.com");

// correct possible misspellings of top-level domains
sVal = sVal.replace(/\.cm$/i,".com");
sVal = sVal.replace(/\.co$/i,".com");
sVal = sVal.replace(/\.ml$/i,".mil");
sVal = sVal.replace(/\.ne$/i,".net");
sVal = sVal.replace(/\.om$/i,".com");

// correct other possible misspellings of .com
sVal = sVal.replace(/\.ocm$/i,".com");
sVal = sVal.replace(/\.cmo$/i,".com");
sVal = sVal.replace(/\.co[0-9a-ln-z]$/i,".com");
sVal = sVal.replace(/\.c[0-9a-np-z]m$/i,".com");
sVal = sVal.replace(/\.[0-9a-bd-z]om$/i,".com");
sVal = sVal.replace(/\.co[0-9a-z][0-9a-z]$/i,".com");
sVal = sVal.replace(/\.[0-9a-z]com$/i,".com");
sVal = sVal.replace(/\.co[0-9a-z]m$/i,".com");
sVal = sVal.replace(/\.c[0-9a-z]om$/i,".com");
// special catch for .com.com
sVal = sVal.replace(/\.com\.com$/i,".com");

// correct other possible domain misspellings
sVal = sVal.replace(/@[a-z0-9]aol\./i,"@aol.");
sVal = sVal.replace(/@aol[a-z0-9]\./i,"@aol.");
sVal = sVal.replace(/@[a-z0-9]ol\./i,"@aol.");
sVal = sVal.replace(/@a[a-z0-9]l\./i,"@aol.");
sVal = sVal.replace(/@ao[a-z0-9]\./i,"@aol.");

sVal = sVal.replace(/@[a-z0-9]msn\./i,"@msn.");
sVal = sVal.replace(/@msn[a-z0-9]\./i,"@msn.");
sVal = sVal.replace(/@[a-z0-9]sn\./i,"@msn.");
sVal = sVal.replace(/@m[a-z0-9]n\./i,"@msn.");
sVal = sVal.replace(/@ms[a-z0-9]\./i,"@msn.");

sVal = sVal.replace(/@[a-z0-9]juno\./i,"@juno.");
sVal = sVal.replace(/@juno[a-z0-9]\./i,"@juno.");

sVal = sVal.replace(/@[a-z0-9]uno\./i,"@juno.");
sVal = sVal.replace(/@j[a-z0-9]uno\./i,"@juno.");
sVal = sVal.replace(/@ju[a-z0-9]o\./i,"@juno.");
sVal = sVal.replace(/@jun[a-z0-9]\./i,"@juno.");

sVal = sVal.replace(/@[a-z0-9]home\./i,"@home.");
sVal = sVal.replace(/@home[a-z0-9]\./i,"@home.");

sVal = sVal.replace(/@[a-z0-9]ome\./i,"@home.");
sVal = sVal.replace(/@h[a-z0-9]me\./i,"@home.");
sVal = sVal.replace(/@ho[a-z0-9]e\./i,"@home.");
sVal = sVal.replace(/@hom[a-z0-9]\./i,"@home.");

sVal = sVal.replace(/@[a-z0-9]yahoo\./i,"@yahoo.");
sVal = sVal.replace(/@yahoo[a-z0-9]\./i,"@yahoo.");
sVal = sVal.replace(/@[a-z0-9]ahoo\./i,"@yahoo.");
sVal = sVal.replace(/@y[a-z0-9]hoo\./i,"@yahoo.");
sVal = sVal.replace(/@ya[a-z0-9]oo\./i,"@yahoo.");
sVal = sVal.replace(/@yah[a-z0-9]o\./i,"@yahoo.");
sVal = sVal.replace(/@yaho[a-z0-9]\./i,"@yahoo.");

sVal = sVal.replace(/@[a-z0-9]prodigy\./i,"@prodigy.");
sVal = sVal.replace(/@prodigy[a-z0-9]\./i,"@prodigy.");
sVal = sVal.replace(/@[a-z0-9]rodigy\./i,"@prodigy.");
sVal = sVal.replace(/@p[a-z0-9]odigy\./i,"@prodigy.");
sVal = sVal.replace(/@pr[a-z0-9]digy\./i,"@prodigy.");
sVal = sVal.replace(/@pro[a-z0-9]igy\./i,"@prodigy.");
sVal = sVal.replace(/@prod[a-z0-9]gy\./i,"@prodigy.");
sVal = sVal.replace(/@prodi[a-z0-9]y\./i,"@prodigy.");
sVal = sVal.replace(/@prodig[a-z0-9]\./i,"@prodigy.");

sVal = sVal.replace(/@[a-z0-9]hotmail\./i,"@hotmail.");
sVal = sVal.replace(/@hotmail[a-z0-9]\./i,"@hotmail.");
sVal = sVal.replace(/@[a-z0-9]otmail\./i,"@hotmail.");
sVal = sVal.replace(/@h[a-z0-9]tmail\./i,"@hotmail.");
sVal = sVal.replace(/@ho[a-z0-9]mail\./i,"@hotmail.");
sVal = sVal.replace(/@hot[a-z0-9]ail\./i,"@hotmail.");
sVal = sVal.replace(/@hotm[a-z0-9]il\./i,"@hotmail.");
sVal = sVal.replace(/@hotma[a-z0-9]l\./i,"@hotmail.");
sVal = sVal.replace(/@hotmai[a-z0-9]\./i,"@hotmail.");

sVal = sVal.replace(/@[a-z0-9]email\.msn\./i,"@email.msn.");
sVal = sVal.replace(/@email\.msn[a-z0-9]\./i,"@email.msn.");
sVal = sVal.replace(/@emailm\.sn\./i,"@email.msn.");
sVal = sVal.replace(/@emai\.lmsn\./i,"@email.msn.");
sVal = sVal.replace(/@[a-z0-9]email\.msn$/i,"@email.msn.com");
sVal = sVal.replace(/@email\.msn[a-z0-9]$/i,"@email.msn.com");
sVal = sVal.replace(/@emailm\.sn$/i,"@email.msn.com");
sVal = sVal.replace(/@emai\.lmsn$/i,"@email.msn.com");
sVal = sVal.replace(/@email\.msn$/i,"@email.msn.com");
sVal = sVal.replace(/@[a-z0-9]mail\.msn\.com$/i,"@email.msn.com");
sVal = sVal.replace(/@e[a-z0-9]ail\.msn\.com$/i,"@email.msn.com");
sVal = sVal.replace(/@em[a-z0-9]il\.msn\.com$/i,"@email.msn.com");
sVal = sVal.replace(/@ema[a-z0-9]l\.msn\.com$/i,"@email.msn.com");
sVal = sVal.replace(/@emai[a-z0-9]\.msn\.com$/i,"@email.msn.com");
sVal = sVal.replace(/@email\.[a-z0-9]sn\.com$/i,"@email.msn.com");
sVal = sVal.replace(/@email\.m[a-z0-9]n\.com$/i,"@email.msn.com");
sVal = sVal.replace(/@email\.ms[a-z0-9]\.com$/i,"@email.msn.com");

// catch missing . for some domains
sVal = sVal.replace(/@aolcom/i,"@aol.com");
sVal = sVal.replace(/@msncom/i,"@msn.com");
sVal = sVal.replace(/@junocom/i,"@juno.com");
sVal = sVal.replace(/@homecom/i,"@home.com");
sVal = sVal.replace(/@yahoocom/i,"@yahoo.com");
sVal = sVal.replace(/@prodigycom/i,"@prodigy.com");
sVal = sVal.replace(/@prodigynet/i,"@prodigy.net");
sVal = sVal.replace(/@hotmailcom/i,"@hotmail.com");
sVal = sVal.replace(/@email\.msncom/i,"@email.msn.com");
sVal = sVal.replace(/@emailmsncom/i,"@email.msn.com");
sVal = sVal.replace(/@emailmsn\.com/i,"@email.msn.com");

return sVal;
}
