// $Id: emailValidation.js 10583 2011-07-22 14:29:01Z robert $

//checkEmail by DMF based on emailCheck v1.1.2 from http://javascript.internet.com and by Tal based on http://www.regular-expressions.info/email.html 
function checkEmail (formElement, relaxed) {
	var emailStr = formElement.value;
	var emailPat = /^(.+)@(.+)$/;
//	alert("emailPat = "+ emailPat);
	var userPat = /^(?:[\w#$%&'*+\/=?^`{|}~-]+(?:\.[\w#$%&'*+\/=?^`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")$/;
//	alert("userPat = "+ userPat);
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
//	alert("ipDomainPat = "+ ipDomainPat);
	var domainPat = /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-]*[a-zA-Z0-9])?$/;
//	alert("domainPat = "+ domainPat);

	// Don't bother if there's no emailStr
	if (!emailStr) {
		return true;
	}

	// First do a basic check to see that there is only 1 @ sign used in the email string
	if (emailStr.indexOf("@") == -1 || (emailStr.length - emailStr.replace(/@/g, "").length) > 1) {
		alert(valStrings["emailUserAtDomain"]);
		formElement.focus();
		return false;
	}

	// Trimming spaces from the beginning and end of the string
	emailStr  = emailStr.trim();

	// Now we can safely assume that the regular expression will give us the two parts of the email address i.e. the user part and the domain part.
	var matchArray = emailStr.match(emailPat);
	if (matchArray == null) {
		alert(valStrings["emailUserAtDomain"]);
		formElement.focus();
		return false;
	}

	var user = matchArray[1];
	var domain = matchArray[2];

	// See if "user" is valid 
	if (user.match(userPat) == null) {
		alert(valStrings["emailUserPart"]);
		formElement.focus();
		return false;
	}

	var r = (typeof relaxed != "undefined") ? relaxed : true;	
	// See if "user" matches username
	if (!r && formElement.form.username && formElement.form.username.value && user.toLowerCase() == formElement.form.username.value.toLowerCase()) {
		alert(valStrings["emailUsername"]);
		formElement.form.username.value = "";
		formElement.form.username.focus();
		return false;
	}

	// See if address starts www.
	if (user.substr(0,4).toLowerCase() == "www.") {
		if (confirm(valStrings["emailWWW"])) {
			formElement.value = formElement.value.substr(4);
			formElement.focus();
			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) {
		for (var i = 1 ; i <= 4 ; i++) {
			if (IPArray[i] > 255) {
				alert(valStrings["emailIPBad"]);
				formElement.focus();
				return false;
			}
		}
		return true;
	}

	// Domain is symbolic name - see if is valid and doesn't contain any illegal characters
	if (domain.match(domainPat) == null) {
		alert(valStrings["emailDomainPart"]);
		formElement.focus();
		return false;
	}

	// Domain name seems valid, but now make sure that it ends in a valid TLD
	var tdl = domain.toLowerCase().substring(domain.lastIndexOf(".") + 1);

//	alert(tdl);

	// A list of all legal domain ext. currently used worldwide
	var domainExt = new Array("com","net","org","edu","gov","mil","int","arpa","biz","info","name","pro","museum","aero","coop","travel","jobs","eu","asia","mobi","tel","xxx",
			"ac","ad","ae","af","ag","ai","al","am","an","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","br","bs","bt","bv","bw","by","bz",
			"ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cs","cu","cv","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","er","es","et","fi","fj","fk","fm","fo","fr","ga","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy",
			"hk","hm","hn","hr","ht","hu","id","ie","il","im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz",
			"na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","su","sv","sy","sz",
			"tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","yu","za","zm","zw");

	// See if the domain extension is one of the legal ones
	if (!domainExt.inArray(tdl)) {
		alert(valStrings["emailBadTLD"]);
		formElement.focus();
		return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}
