
function setError(name, error) {
	vidElement = document.getElementById("vid"+name);
	if(vidElement != null)
	{
		vidElement.className = "error";
		ee = document.getElementById("e"+name);
		//log('ee:'+ee);
		if(ee != null) {
			ee.className = "error";
			ee.innerHTML = error; 
		} else {
			//alert('error element not found: e'+name);
		}
	}
}

function setOk(name) {
	var vid = document.getElementById("vid"+name),
		ee = document.getElementById("e"+name);
	if(vid != null)
		vid.className = "valueId";
	if(ee != null)
		ee.innerHTML = "";
}

function isNumber(data) {
	if (data == null) return false;
        var numPat = /^\d+$/;
	return	numPat.test(data);

}

function checkMinLength(f, name, n) {
	if(f[name] == null) {
		alert("form field not found: " + name);
	} else {
		if(f[name].value.length < n) {
			setError(name, "must be at least " + n + " characters");
			ok = false; tofocus = f[name];
		} else { setOk(name); }
	}
}

function checkEmail(f, name, isCorporate) {
	if(f[name] == null) {
		alert("[forms.js checkEmail] name not found: " + name);
	} else {
		if(f[name].value.length < 3) {
			setError(name, "must be at least 3 characters");
			ok = false; tofocus = f[name];
		} else {
			if(checkEmailFormat(f[name], isCorporate) == false) {
				setError(name, "invalid email address");
				ok = false; tofocus = f[name];
			} else {
				setOk(name);
			}
		}
	}
}

function checkEmail(input) {
	return checkEmailFormat(input, true);
}

function checkEmailFormat(input, isCorporate) {
	emailStr = input.value;
	//alert('in:' + input + ", " + emailStr);
	var checkTLD = 0;
	var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var badDomains = new Array(
		"100m.com",
		"123india.com",
		"126.com",
		"163.com",
		"163.net",
		"169.cc",
		"188.net",
		"21cn.com",
		"address.com",
		"ahmedabad.net",
		"alice.it",
		"aliceposta.it",
		"allomail.com",
		"altavista.co.kr",
		"altavista.net",
		"amuro.net",
		"aol.com",
		"asiafind.com",
		"asianhome.net",
		"asiaone.com.sg",
		"attbi.com",
		"beep.ru",
		"bellsouth.net",
		"bigfoot.com",
		"bigfoot.de",
		"bigpond.com",
		"broadcastindia.com",
		"btamail.net.cn",
		"canada.com",
		"chaitime.com",
		"chequemail.com",
		"china.com",
		"china139.com",
		"chinaarmy.net",
		"chinabytemail.com",
		"click2asia.com",
		"comcast.net",
		"cox.net",
		"dbzmail.com",
		"dcemail.com",
		"eastmail.com",
		"eguo.com",
		"eindia.com",
		"email.com",
		"email.com.cn",
		"e-mail.ru",
		"enzoy.com",
		"eudoramail.com",
		"everyday.com",
		"excite.co.jp",
		"excite.com",
		"excite.com.au",
		"excite.de",
		"eyah.com",
		"ezweb.ne.jp",
		"free.fr",
		"freemail.com.pk",
		"freemail.hu",
		"glay.org",
		"gmail.com",
		"gmx.net",
		"go2net.com",
		"goaworld.com",
		"goo.ne.jp",
		"grabmail.com",
		"graffiti.net",
		"guju.net",
		"helloasia.com",
		"hanmail.net",
		"henmail.net",
		"hkmag.com",
		"hkonly.com",
		"hotmail.com",
		"hotmail.fr",
		"hotmail.gr",
		"hushmail.com",
		"ig.com.br",
		"iloveindia.com",
		"iname.com",
		"inbox.com.pk",
		"inbox.lv",
		"india.com",
		"india-11.com",
		"indiainfo.com",
		"indiaseek.com",
		"indiasite.com",
		"indiatimes.com",
		"infospace.com",
		"jpopmail.com",
		"keromail.com",
		"kichimail.com",
		"km169.net",
		"kmail.com",
		"la.com",
		"latinmail.com",
		"letterindia.com",
		"linuxmail.org",
		"live.com",
		"live.it",
		"live.jp",
		"lycos.co.kr",
		"lycos.com",
		"mail.com",
		"mail.ru",
		"mail2india.com",
		"mailasia.com",
		"mailasia.com",
		"mailbox.gr",
		"mailnova.com",
		"markguide.com",
		"mighty.co.za",
		"msn.com",
		"muzi.com",
		"myway.com",
		"naver.com",
		"netcrawler.com.pk",
		"netple.net",
		"netscape.net",
		"newmail.net",
		"nexxmail.com",
		"onet.eu",
		"operamail.com",
		"otenet.gr",
		"outblaze.net",
		"ownmail.com",
		"pakcenter.com",
		"paki.com",
		"pakistanmail.com",
		"pakistans.com",
		"peopleweb.com",
		"photak.com",
		"pimail.com.pk",
		"planet.ee",
		"planetaccess.com",
		"pochtamt.ru",
		"popaccount.com",
		"popmail.com",
		"postmark.net",
		"prontomail.com",
		"prontomail.ne.jp",
		"proudindians.com",
		"rambler.ru",
		"rediffmail.com",
		"rocketmail.com",
		"romtelecom.ro",
		"sacbeemail.com",
		"satyamonline.com",
		"searcheuropemail.com",
		"seznam.cz",
		"shaw.ca",
		"sify.com",
		"sina.com",
		"skynet.be",
		"sohu.com",
		"spacemail.com",
		"sympatico.ca",
		"talk21.com",
		"tantriks.com",
		"terra.com",
		"themail.com",
		"tiscali.it",
		"torchmail.com",
		"usa.com",
		"verizon.net",
		"virtualindia.com",
		"wanadoo.fr",
		"waumail.com",
		"web.de",
		"wp.pl",
		"yahoo.co.in",
		"yahoo.co.jp",
		"yahoo.co.kr",
		"yahoo.co.uk",
		"yahoo.com",
		"yahoo.com.au",
		"yahoo.com.br",
		"yahoo.com.cn",
		"yahoo.com.com",
		"yahoo.com.hk",
		"yahoo.com.ph",
		"yahoo.com.sg",
		"yahoo.com.tw",
		"yahoo.de",
		"yahoo.es",
		"yahoo.fr",
		"yahoo.gr",
		"yahoo.it",
		"zaobao.com",
		"zdl.net",
		"zdnetmail.ne.jp",
		"zmail.ru"
		);
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray = emailStr.match(emailPat);

	if (!emailPat.test(emailStr) /*matchArray == null*/) {
		alert("The Email Address Is Invalid: " + emailStr);
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i) > 127) {
			alert("The Username Contains Invalid Characters.");
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			alert("Ths Domain Name Contains Invalid Characters.");
			return false;
		}
	}
	if (user.match(userPat)==null) {
		alert("The Username Is Invalid.");
		return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("The Destination IP Address Is Invalid.");
				return false;
			}
		}
		return true;
	}
	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 Domain Name Is Invalid.");
			return false;
		}
	}
	if(isCorporate) {
		for(i = 0; i < badDomains.length; i++) {
			if(badDomains[i].toLowerCase() == domain.toLowerCase()) {
				alert("Only users with a corporate email address will be able to submit the form.");
				return false;
			}
		}
	}
	if (checkTLD && domArr[domArr.length-1].length!=2
			&& domArr[domArr.length-1].search(knownDomsPat)==-1) {
		alert("The Domain Name Extension Is Invalid");
		return false;
	}
	if (len<2) {
		alert("The Address Is Missing A Hostname.");
		return false;
	}
	return true;
}

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

