//document.onkeypress = validateKey;
/*
if (document.addEventListener) {  
	document.addEventListener("onkeypress", validateKey, true);
}
else if (document.attachEvent) {  
	document.attachEvent("onkeypress", function(evt) {validateKey(evt)});
}
*/
function doBlur(evt, inpt) {
	evnt = (isIE)? event:evt;
	validatePattern(inpt, evnt);
}
function doFocus(evt, inpt) {
	evnt = (isIE)? event:evt;
	fT = (evnt[sElem].className.indexOf("_") > -1)? evnt[sElem].className.split("_")[1]:evnt[sElem].className;
	try {
		if (fT == "num" || fT == "dbl" || fT == "dbl4" || fT == "intStr") {
			inpt.value = toNum(evnt[sElem].value, fT);
			inpt.focus();
			inpt.select();
		}
		else {
			inpt.focus();
		}
	}
	catch (err) {}
}
function fieldType(pattern, chars, lbl) {
	this.pattern = pattern;
	this.chars = chars;
	this.lbl = lbl;
	this.validateKey = validateKey;
	this.validatePattern = validatePattern;

	function validateKey(fld, key) {
		key = parseInt(key);
		chr = String.fromCharCode(key);
		if (key != 13) {
			if (this.chars.length > 0) {
				if (this.chars.indexOf(chr) > -1) {
					showMsg("");
					return true;
				}
				else {
					showMsg("The character \"" + chr + "\" is not allowed in this field");
					return false;
				}
			}
			else {
				return true;
			}
		}
	}
	function validatePattern(fld) {
		if (fld.value.length > 0) {
			if (this.lbl == "num" || this.lbl == "dbl") {
				if (isNaN(stripFormat(fld.value))) {
					fld.focus();
					alert(fld.value + " is not a valid number");
					return false;
				}
			}
			switch (this.lbl) {
				case ("num"):
					val = (stripFormat(fld.value) * 1);
					nm = formatNumber("" + val, this.pattern);
					posNegFormat(fld, nm, "");
					break;
				case ("intStr"):
					val = (stripFormat(fld.value) * 1);
					nm = formatNumber("" + val, this.pattern);
					posNegFormat(fld, nm, "");
					break;
				case ("dbl"):
					val = (stripFormat(fld.value) * 1);
					nm = formatNumber("" + val, this.pattern);
					posNegFormat(fld, nm, "");
					break;
				case ("dbl4"):
					val = (stripFormat(fld.value) * 1);
					nm = formatNumber("" + val, this.pattern);
					posNegFormat(fld, nm, "");
					break;
				case ("eml"):
					if (!validateEmail(fld.value)) {
						fld.focus();
						fld.select();
					}
					break;
				case ("url"):
					if (!validateURL(fld.value)) {
						fld.focus();
						fld.select();
					}
					break;
				case ("dte1"):
					ret = false;
					errMsg = "At least 8 characters required";
					ret = validateDate(fld, this.pattern);
					if (!ret) {
						alert(fld.value + " Is not a valid date - " + errMsg);
						fld.focus();
						fld.select();
					}
					break;
				case ("dte2"):
					ret = false;
					errMsg = "At least 8 characters required";
					ret = validateDate(fld, this.pattern);
					if (!ret) {
						alert(fld.value + " Is not a valid date - " + errMsg);
						fld.focus();
						fld.select();
					}
					break;
				case ("dte3"):
					ret = false;
					errMsg = "At least 9 characters required";
					ret = validateDate(fld, this.pattern);
					if (!ret) {
						alert(fld.value + " Is not a valid date - " + errMsg);
						fld.focus();
						fld.select();
					}
					break;
				case ("dte"):
					ret = false;
					errMsg = "At least 9 characters required";
					ret = validateDate(fld, this.pattern);
					if (!ret) {
						alert(fld.value + " Is not a valid date - " + errMsg);
						fld.focus();
						fld.select();
					}
					break;
				case ("tme"):
					ret = false;
					errMsg = "At least 5 characters required";
					if (fld.value.length >= 5) {
						ret = validateTime(fld);
					}
					if (!ret) {
						alert(fld.value + " Is not a valid time - " + errMsg);
						fld.focus();
						fld.select();
					}
					break;
			}
		}
	}
}
var num = new fieldType("##,###","0123456789-","num");
var intStr = new fieldType("###","0123456789-","intStr");
var dbl = new fieldType("##,###.###","0123456789-.","dbl");
var dbl4 = new fieldType("##,###.####","0123456789-.","dbl4");
var txt = new fieldType("\"\"","abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"€£$%^&*() _-+=|\\,.?/{}[]~#'@;:<>","txt");
var txtLmtd = new fieldType("\"\"","abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_","txtLmtd");
var url = new fieldType("\"\"","abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!%&_-+=|.?/:","url");
var memo = new fieldType("\"\"","abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"€£$%^&*() _-+=|\\,.?/{}[]~#'@;:<>","memo");
var cde = new fieldType("\"\"","abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"€£$%^&*() _-+=|\\,.?/{}[]~#'@;:<>","cde");
var dte1 = new fieldType("DD/MM/CCYY","0123456789/","dte1");
var dte2 = new fieldType("MM/DD/CCYY","0123456789/","dte2");
var dte3 = new fieldType("DD-MMM-CCYY","0123456789-ABCDEFGJLMNOPRSTUVYabcdefgjlmnoprstuvy","dte3");
var dte = new fieldType("DD/MM/CCYY","0123456789/","dte");
var tme = new fieldType("hh:mm:ss","0123456789:","tme");
var eml = new fieldType("","abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.@_","eml");
var pwd = new fieldType("","abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_","pwd");

function validateKey(evt) {
	evnt = (isIE)? event:evt;
	key = evnt[kCode];
	//alert("validateKey: " + evnt + ", " + key);
	if (key != 8 && key != 9 && key != 16 && key != 0) {
		fld = evnt[sElem];
		try {
			//fTpe = eval(fld.className);
			fTpe = (evnt[sElem].className.indexOf("_") > -1)? eval(evnt[sElem].className.split("_")[1]):eval(evnt[sElem].className);
			return fTpe.validateKey(fld, key);
		}
		catch (error) {
			return true;
		}
	}
	return true;
}
function validatePattern(fld, evt) {
	evnt = (isIE)? event:evt;
	fld = evnt[sElem];
	fTpe = (evnt[sElem].className.indexOf("_") > -1)? eval(evnt[sElem].className.split("_")[1]):eval(evnt[sElem].className);
	//fTpe = eval(fld.className);
	fTpe.validatePattern(fld);
}
var errMsg = "";
function validateDate(fld, ptrn) {
	var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
	var monAbrevs = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
	var dpm = [31,28,31,30,31,30,31,31,30,31,30,31];
	dateStr = fld.value;
	if (dateStr.indexOf("-") > -1 || dateStr.indexOf("/") > -1) {
		dateArr = (dateStr.indexOf("/") > -1)? dateStr.split("/"):dateStr.split("-");
	}
	else {
		dateArr = Array(0);
		dateArr.push(dateStr.substring(0,2));
		dateArr.push(dateStr.substring(2,4));
		dateArr.push(dateStr.substring(4));
	}
	if (dateArr.length != 3) {
		errMsg = "Please use the format " + ptrn;
		return false;
	}
	if (isNaN(dateArr[1])) {
		for (d=0; d<monAbrevs.length; d++) {
			if (dateArr[1].toUpperCase() == monAbrevs[d].toUpperCase()) {
				dateArr[1] = (d + 1);
				break;
			}
		}
	}
	if (ptrn == "MM/DD/CCYY") {
		M = (dateArr[0] * 1) - 1;
		D = dateArr[1] * 1;
		Y = dateArr[2] * 1;
	}
	else {
		D = dateArr[0] * 1;
		M = (dateArr[1] * 1) - 1;
		Y = dateArr[2] * 1;
	}
	if (Y == 0) {
		Y = new Date().getYear();
	}
	if (("" + Y).length < 3) {
		Y += 2000;
	}
	else if (Y > 3000) {
		errMsg = "Year " + Y + " is too far in the future";
		return false;
	}
	else if (Y < 1900){
		errMsg = "Year " + Y + " is too far in the past";
		return false;
	}
	if(D<1){
		errMsg = "Day " + D + " is not a valid Date";
		return false;
	}
	if(M<0){
		errMsg = "Month " + dateArr[1] + " is not a valid Month";
		return false;
	}
	if(Y<1){
		errMsg = "Year " + Y + " is not a valid Year";
		return false;
	}
	//wdPop("DAY "+D+ " Month "+M+" Year "+Y)
	if(D.toString() == "undefined"){
		errMsg = "Date values missing.";
		return false;
	}
	if(M.toString() == "undefined"){
		errMsg = "Date values missing.";
		return false;
	}
	if(Y.toString() == "undefined"){
		errMsg = "Date values missing.";
		return false;
	}
	dpm[1] = (Y % 4 == 0 && Y % 100 > 0)? 29:28;
	if (isNaN(new Date(Y, M, D, 0, 0, 0))) {
		errMsg = "Date values missing.";
		return false;
	}
	if (M > months.length-1) {
		errMsg = "there are only 12 months in the year.";
		return false;
	}
	if (D > dpm[M]) {
		errMsg = "there are only " + dpm[M] + " days in " + months[M];
		if (M == 1) {
			errMsg += " in " + Y;
		}
		return false;
	}
	D = (D < 10)? "0" + D:D;
	if (ptrn == "DD/MM/CCYY") {
		M = (M < 9)? "0" + (M + 1):(M + 1);
		fld.value = D + "/" + M + "/" + Y;
	}
	else if (ptrn == "MM/DD/CCYY") {
		M = (M < 9)? "0" + (M + 1):(M + 1);
		fld.value = M + "/" + D + "/" + Y;
	}
	else {
		fld.value = D + "-" + monAbrevs[M] + "-" + Y;
	}
	return true;
}
function getJSDate(strDate) {
	frmt = "DD-MMM-CCYY";
	if (dateFormat) {
		frmt = dateFormat;
	}
	if (frmt.indexOf("-") > -1 || frmt.indexOf("/") > -1) {
		dateArr = (strDate.indexOf("/") > -1)? strDate.split("/"):strDate.split("-");
	}
	else {
		dateArr = Array(0);
		dateArr.push(strDate.substring(0,2));
		dateArr.push(strDate.substring(2,4));
		dateArr.push(strDate.substring(4));
	}
	if (dateArr.length == 3) {
		if (frmt == "MM/DD/CCYY") {
			M = (dateArr[0] * 1) - 1;
			D = dateArr[1] * 1;
			Y = dateArr[2] * 1;
		}
		else if (frmt == "DD-MMM-CCYY") {
			var monAbrevs = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
			D = dateArr[0] * 1;
			for (var d=0; d<monAbrevs.length; d++) {
				if (monAbrevs[d].toLowerCase() == dateArr[1].toLowerCase()) {
					M = d;
				}
			}
			//M = (dateArr[1] * 1) - 1;
			Y = dateArr[2] * 1;
		}
		else {
			D = dateArr[0] * 1;
			M = (dateArr[1] * 1) - 1;
			Y = dateArr[2] * 1;
		}
		return new Date(Y, M, D, 0, 0, 0).getTime();
	}
	return new Date().getTime();
}
function getJSTime(strTime) {
	timeArr = strTime.split(":");
	if (timeArr.length == 3) {
		return new Date(2008,1,1,timeArr[0], timeArr[1],timeArr[2]).getTime()
	}
	return new Date().getTime();
}
function validateTime(fld) {
	timeStr = fld.value;
	if (timeStr.indexOf(":") == -1) {
		errMsg = "Please include \":\" Sepperators";
		return false;
	}
	timeArr = timeStr.split(":");
	if (timeArr.length != 3) {
		if (timeArr.length == 2) {
			timeArr.push("00");
			fld.value += ":00";
		}
		else {
			errMsg = "Please use the format hh:mm:ss";
			return false;
		}
	}
	if (parseInt(timeArr[0]) > 23) {
		errMsg = "There are only 24 hours in a day. Please enter in the range 0 - 23";
		return false;
	}
	if (parseInt(timeArr[1]) > 59) {
		errMsg = "There are only 60 minutes in a hour. Please enter in the range 0 - 59";
		return false;
	}
	if (parseInt(timeArr[2]) > 59) {
		errMsg = "There are only 60 seconds in a minute. Please enter in the range 0 - 59";
		return false;
	}
	return true;
}
function posNegFormat(fld, nm, crncy) {
	if (fld.fType == "negint") {
		fld.value = "(" + nm + ")";
	}
	else if (parseInt(fld.value) < 0 || fld.value.indexOf("(") > -1) {
		fld.value = "(" + crncy + nm + ")";
	}
	else {
		fld.value = crncy + nm;
	}
}
function stripFormat(val) {
	var neg = /-/g;
	var cma = /,/g;
	var oB = /\(/g;
	var cB = /\)/g;
	var eur = /€/g;
	var pnd = /£/g;
	var dlr = /\$/g;
	var prc = /\%/g;
	val = val.replace(neg, "");
	val = val.replace(cma, "");
	val = val.replace(oB, "");
	val = val.replace(cB, "");
	val = val.replace(eur, "");
	val = val.replace(pnd, "");
	val = val.replace(dlr, "");
	val = val.replace(prc, "");
	return val;
}
function toNum(val, fTpe) {
	if (val.length > 0) {
		var cma = /,/g;
		var oB = /\(/g;
		var cB = /\)/g;
		var prc = /\%/g;
		val = val.replace(cma, "");
		if (fTpe && fTpe == "negint") {
			val = val.replace(oB, "");
		}
		else {
			val = val.replace(oB, "-");
		}
		val = val.replace(cB, "");
		val = val.replace(prc, "");
	}
	else {
		val=0
	}
	return val;
}
function formatNumber(str, ptrn, negFrmt) {
	str += "";
	var isNegative = false;
	if (str.indexOf("-") > -1 || str.indexOf("(") > -1) {
		var neg = /\-/g;
		var oB = /\(/g;
		var cB = /\)/g;
		str = str.replace(neg, "");
		str = str.replace(oB, "");
		str = str.replace(cB, "");
		isNegative = true;
	}
	if (str.indexOf(".") > -1) {
		pre = str.substring(0, str.indexOf("."));
		suf = str.substring(str.indexOf(".")+1);
	}
	else {
		pre = str;
		suf = "";
	}
	ret = "";
	if (ptrn.indexOf(",") > -1) {
		for (i=pre.length; i>0; i-=3) {
			ret = pre.substring(i-3, i) + "," + ret;
		}
		ret = ret.substring(0,ret.length - 1);
	}
	else {
		ret = pre;
	}
	if (ptrn.indexOf(".") > -1) {
		ptrnSuf = ptrn.substring(ptrn.indexOf(".")+1);
		mult = 1;
		for (i=0; i<ptrnSuf.length; i++) {
			mult *= 10;
		}
		if (suf.length > 0 || ptrnSuf.length > 0) {
			if (suf.length > ptrnSuf.length) {
				suf = Math.round(parseFloat("0." + suf) * mult);
			}
			if (suf.length > 0 || suf > 0) {
				chkSuf = (ptrnSuf.length == 2)? 99:9999;
				sufZero = (ptrnSuf.length == 2)? "00":"0000";
				if (parseFloat(suf) > chkSuf) {
					ret = parseFloat(ret) + 1 + "." + sufZero;
				}
				else {
					ret += "." + suf;
				}
			}
		}
	}
	if (ptrn.indexOf("%") > -1) {
		ret += "%";
	}
	if (isNegative) {
		ret = (negFrmt == "-")? "-" + ret:"(" + ret + ")";
	}
	return ret;
}
function showMaxTALength(ta) {
	ln = ta.value.length;
	ml = ta.maxlength
	if (isNaN(ml)) {
		ml = 500;
	}
	gEl(ta.name + "Div").innerHTML = (ml - ln);
	if ((ml - ln) > -1) {
		gEl(ta.name + "Div").style.color = "green";
		return true;
	}
	else {
		gEl(ta.name + "Div").style.color = "red";
		return false;
	}
}
function showMsg(str) {
	if (str.length > 0) {
		if (gEl("stsBar")) {
			gEl("stsBar").innerHTML = str;
		}
		else {
			alert(str);
		}
	}
	else {
		if (gEl("stsBar")) {
			gEl("stsBar").innerHTML = "&nbsp;";
		}
	}
}
function validateEmail(theVal) {
	var tmp = "INVALID E-MAIL ADDRESS\n\n";
	var ShowErr = false;
	myNameRE = /\w{1,}\.*\w*\@[A-Za-z0-9-_]{1,}\.\w{2,3}\.*\w*/;
	var Err = myNameRE.exec(theVal);
	if(Err != theVal) {
		tmp += "E-mail Address is not in the correct format.\n";
		ShowErr = true;
	}
	else {
		var ValArray = theVal.split("@");
		var Address = ValArray[1].split(".");
		if (Address.length == 2) {
			if(Address[1].length > 3 || Address[1].length < 2) { 
				tmp += "Address suffix should be two or three characters eg: .com, .us\n";
				ShowErr = true;
			}
		}
		else if(Address.length == 3) {
			if(Address[1].length > 3 || Address[1].length < 2) {
				tmp += "Address suffix 1 should be two or three characters\n";
				ShowErr = true;
			}
			if(Address[2].length > 3 || Address[2].length < 2) {
				tmp += "Address suffix 2 should be two or three characters\n";
				ShowErr = true;
			}
		}
	}
	if (ShowErr) {
		alert(tmp);
		return false;
	}
	return true;
}
function validateURL(theURL) {
	var tomatch= /https?:\/\/[A-Za-z0-9\.-_]{3,}\.[A-Za-z]{3}/
	if (tomatch.test(theURL)){
		return true;
	}
	else {
		if (theURL.indexOf("http:") == -1) {
			window.alert("Please enter the full URL, including the protocol i.e http://");
		}
		else {
			window.alert("The format of the URL you have entered is incorrect.");
		}
		return false;
	}
}
