var itemlength = new Array();
var itemlength_counter = 0;
var frmName = "";
var usedErrorMsg = "";
var V2counter = 0;
var firstFocus = 0;
var vsErrMsgID = "";
var allAlert = "";
var gAlertMethod = "alert_all";

function Validator(frmname, alertMethod) {
	this.formobj = document.forms[frmname];
	frmName = this.formobj;
	if(!this.formobj) {
		alert("BUG: could not get Form object " + frmname);
		return;
	}
	// see if an onsubmit was supplied in the form tag itself already
	// if so, apply it to old_onsubmit variable
	if(this.formobj.onsubmit) {
		this.formobj.old_onsubmit = this.formobj.onsubmit;
		this.formobj.onsubmit = null;
	} else {
		this.formobj.old_onsubmit = null;
	}
	gAlertMethod = alertMethod;
	
	this.formobj.onsubmit = form_submit_handler;
	this.addValidation = add_validation;
	this.setOnAfterSubmitFunction = onAfterSubmitFunction;
	this.clearAllValidations = clear_all_validations;
	this.setOnBeforeSubmitFunction = onBeforeSubmitFunction;
}

function onAfterSubmitFunction(functionname) {
	this.formobj.addnlvalidation = functionname;
}

function onBeforeSubmitFunction(functionname) {
	this.formobj.addnlBeforeValidation = functionname;
}

function clear_all_validations() {
	for(var itr=0; itr<this.formobj.elements.length; itr++) {
		this.formobj.elements[itr].validationset = null;
	}
}

function form_submit_handler() {
	var allDivs = document.getElementsByTagName("div");
	for (var i=0; i<allDivs.length; i++) {
		var errMsgIDPos = allDivs[i].id.indexOf("ErrMsg");
		if (errMsgIDPos != -1) {
			removeDiv(allDivs[i].id);
		}
	}
	if (this.addnlBeforeValidation) {
		eval("var retBefore = " + this.addnlBeforeValidation + "()");
		if (!retBefore) return retBefore;
	}
	itemlength_counter = 0;
	V2counter = 0;
	allAlert = "";
	var vsInvalid = false;
	alertedAll = true;
	for(var itr=0; itr<this.elements.length; itr++) {
		if(this.elements[itr].validationset && !this.elements[itr].validationset.validate()) {
			firstFocus = itr;
			vsInvalid = true;
			alertedAll = false;
		}
	}
	firstFocus = 0;
	if (gAlertMethod=="alert_all_pretty") {
		if (!alertedAll) {
			if (document.getElementById("mDiv")) document.body.removeChild(mDiv);
			var mDiv = document.body.appendChild(document.createElement("div"));
			mDiv.className = "alertAllContainer";
			mDiv.id = "mDiv"
			mDiv.style.position = "absolute";
			
			var mDivTitlebar = mDiv.appendChild(document.createElement("div"));
			mDivTitlebar.className = "alertAllTitlebar";
			mDivTitlebar.innerHTML = "Please correct the following errors";
			
			mDiv.appendChild(document.createElement("p"));
			
			var mDivMessages = mDiv.appendChild(document.createElement("div"));
			mDivMessages.className = "mDivMessages";
			mDivMessages.innerHTML = allAlert;

			mDiv.appendChild(document.createElement("p"));
			var mDivBtnOK = mDiv.appendChild(document.createElement("div"));
			mDivBtnOK.className = "alertAllOKButton";
			mDivBtnOK.innerHTML = "OK";
			mDivBtnOK.onclick = function() {document.body.removeChild(mDiv)}

			centerDiv("mDiv");
			alertedAll = true;
		}
	}
	if (gAlertMethod=="alert_all") {
		if (!alertedAll) {
			alert(allAlert);
			alertedAll = true;
		}
	}
	if (vsInvalid) {
		return false;
	}
	if(this.addnlvalidation) {
		str = " var ret = " + this.addnlvalidation + "()";
		eval(str);
		if(!ret) return ret;
	}
	return true;
}

function centerDiv(element) {
    try {
        element = document.getElementById(element);
    } catch(e) {
        return;
    }
    var my_width  = 0;
    var my_height = 0;
    if (typeof(window.innerWidth) == "number") {
        my_width = window.innerWidth;
        my_height = window.innerHeight;
    } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
        my_width = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {

        my_width = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }
    element.style.position = "absolute";
    element.style.zIndex   = 100000;
    var scrollY = 0;
    if (document.documentElement && document.documentElement.scrollTop) {
        scrollY = document.documentElement.scrollTop;
    } else if (document.body && document.body.scrollTop) {
        scrollY = document.body.scrollTop;
    } else if (window.pageYOffset) {
        scrollY = window.pageYOffset;
    } else if (window.scrollY) {
        scrollY = window.scrollY;
    }
    var setX = (my_width - element.offsetWidth) / 2;
    var setY = (my_height - element.offsetHeight) / 2 + scrollY;
    setX = (setX < 0) ? 0 : setX;
    setY = (setY < 0) ? 0 : setY;
    element.style.left = setX + "px";
    element.style.top = setY + "px";
}

function add_validation(itemname, descriptor, errstr) {
	if(!this.formobj) {
		alert("BUG: the form object is not set properly");
		return;
	}
	var item_splitter = itemname.split(";");
	var desc_splitter = descriptor.split(";");
	for (i=0; i<item_splitter.length; i++) {
		var itemobj = this.formobj[item_splitter[i]];
		if(!itemobj) {
			alert("BUG: Could not get the input object named: " + item_splitter[i]);
			return;
		}
		if (descriptor=="radio_required" || descriptor=="radio_req") {
			itemlength[itemlength_counter] = itemobj.length;
			itemlength_counter++;
			if(!itemobj[0].validationset) {
				itemobj[0].validationset = new ValidationSet(itemobj[0]);
			}
			itemobj[0].validationset.add(descriptor, errstr);
		} else {
			for (j=0; j<desc_splitter.length; j++) {
				if(!itemobj.validationset) {
					itemobj.validationset = new ValidationSet(itemobj);
				}
				itemobj.validationset.add(desc_splitter[j], errstr);
			}
		}
	}
}

function ValidationDesc(inputitem, desc, error) {
	this.desc = desc;
	this.error = error;
	this.itemobj = inputitem;
	this.validate = vdesc_validate;
	
}

function createErrorMsgTag(pID, pItemObj, pUsedErrorMsg, pDesc) {
	var oDiv = document.body.appendChild(document.createElement("div"));
	var oDivInner = oDiv.appendChild(document.createElement("div"));
	oDiv.id = pID;
	if (pDesc == "radio_req") {
		oDiv.className = "flagGraphicRadio";
	} else if (pDesc == "check_req") {
		oDiv.className = "flagGraphicCheck";
	} else {
		oDiv.className = "flagGraphic";
	}
	oDivInner.className = "flagGraphicInner";
	oDiv.style.position = "absolute";
	oDiv.style.zIndex = "10000";
	oDivInner.style.position = "relative";

	oDivInner.innerHTML = "<span style='position: relative; top:2px;'>" + pUsedErrorMsg + "</span>";

	oDiv.style.width = (oDivInner.firstChild.offsetWidth + 30) + "px";
	var mOffY = 0;
	var mOffX = 0;
	var mItemObj = pItemObj;
	if (pDesc == "radio_req") {
		// loop through the doc and find the last array of this radio in group
		var allThisRadioGroup = document.getElementsByTagName("input");
		//alert(allThisRadioGroup[0].name);
		for (i=0; i<allThisRadioGroup.length; i++) {
			if (allThisRadioGroup[i].name == pItemObj.name) {
				var mObjText = allThisRadioGroup[i].nextSibling.nodeValue;
				mObjText = mObjText.replace(/\t/g, "");
				mObjText = mObjText.replace(/\n/g, "");
				//alert(mObjText + "::" + mObjText.length);
				//mOffX = parseInt(mObjText.length) * 8;
				mItemObj = allThisRadioGroup[i];
				//alert(parseInt(mItemObj.offsetWidth) + mOffX);
			}
		}
		//mOffY = 15;
	}
	//alert(mItemObj.offsetWidth + "::" + pItemObj.offsetWidth);
	setLyr(mItemObj, pID, parseInt(mItemObj.offsetWidth) + mOffX, mOffY);
}

var alertedAll = false;

function vdesc_validate() {
	var mv = document.getElementsByName(this.itemobj.name);
	if(!V2validateData(this.desc, this.itemobj, this.error)) {
		if (gAlertMethod=="alert_pretty") {
			new createErrorMsgTag(this.itemobj.name + "ErrMsg", this.itemobj, usedErrorMsg, this.desc);
			if (firstFocus==0) {
				this.itemobj.focus();
				ScrollToElement(this.itemobj);
			}
			//var vsTimeout = setTimeout("removeDiv('" + this.itemobj.name + "ErrMsg" + "')", 5000);
		}
		V2counter++;
		return false;
	}
	return true;
}

function removeDiv(pID) {
	var theDiv = document.getElementById(pID);
	document.body.removeChild(theDiv);
}

function ScrollToElement(theElement) {
	var selectedPosX = 0;
	var selectedPosY = 0;
	while(theElement != null) {
		selectedPosX += theElement.offsetLeft;
		selectedPosY += theElement.offsetTop;
		theElement = theElement.offsetParent;
	}
	if (selectedPosY > 25) selectedPosY = selectedPosY - 25;
	window.scrollTo(selectedPosX, selectedPosY);
}

function ValidationSet(inputitem) {
	this.vSet = new Array();
	this.add = add_validationdesc;
	this.validate = vset_validate;
	this.itemobj = inputitem;
}

function add_validationdesc(desc, error) {
	this.vSet[this.vSet.length] = new ValidationDesc(this.itemobj,desc,error);
}

function vset_validate() {
	for(var itr=0; itr<this.vSet.length; itr++) {
		if(!this.vSet[itr].validate()) {
			return false;
		}
	}
	return true;
}

function validateEmailv2(email) {
	// a very simple email validation checking. 
	// you can add more complex email checking if it helps 
	if(email.length<=0) {
		return true;
	}
	var splitted = email.match("^(.+)@(.+)$");
	if(splitted==null) return false;
	if(splitted[1]!=null) {
		var regexp_user = /^\"?[\w-_\.]*\"?$/;
		if(splitted[1].match(regexp_user)==null) return false;
	}
	if(splitted[2]!=null) {
		var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
		if(splitted[2].match(regexp_domain)==null) {
			var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
			if(splitted[2].match(regexp_ip)==null) return false;
		}
		return true;
	}
	return false;
}

function changeLabel(startObj, pLabel, pColor) {
	var done = 0;
	var mChildNodeText;
	var mChildNode;
	var theNode = startObj.parentNode;
	var cnPos;
	while (done==0) {
		for (var nLength=0; nLength<theNode.childNodes.length; nLength++) {
			mChildNodeText = theNode.childNodes[nLength].innerHTML;
			if (mChildNodeText==undefined || mChildNodeText==null || mChildNodeText=="") {
			} else {
				cnPos = mChildNodeText.indexOf(pLabel);
				if (cnPos==0) {
					mChildNode = theNode.childNodes[nLength];
					done = 1;
				}
			}
		}
		theNode = theNode.parentNode;
	}
	mChildNode.style.color = pColor;
}

function V2validateData(strValidateStr, objValue, strError) {
	
	var epos = strValidateStr.search("=");
	var command  = "";
	var cmdvalue = "";
	var strErrorAlertAllPretty = strError;
	if(epos >= 0) {
		command  = strValidateStr.substring(0, epos);
		cmdvalue = strValidateStr.substr(epos+1);
	} else {
		command = strValidateStr;
	}
	switch(command) {
		case "req":
		case "required": {
			if(eval(objValue.value.length)==0) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " is a required field.";
					} else {
						strError = objValue.name + " : Required Field";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> is a required field.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span> : Required Field";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "compare":
		case "comp": {
			if(objValue.value!=eval("document." + frmName.name + "." + cmdvalue + ".value")) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						//strError = mv[0].getAttribute("label") + "[s] do not match.";
						strError = "Compared fields do not match.";
					} else {
						strError = "Compared fields do not match.";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "Compared fields do not match.";
							} else {
								strErrorAlertAllPretty = "Compared fields do not match.";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "maxlength":
		case "maxlen": {
			if(eval(objValue.value.length) > eval(cmdvalue)) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " can only contain up to " + cmdvalue + " characters.";
					} else {
						strError = objValue.name + " : " + cmdvalue + " characters maximum";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError + "\n[Current length = " + objValue.value.length + "]");
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError + "\n[Current length = " + objValue.value.length + "]";
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> can only contain up to " + cmdvalue + " characters.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span> : " + cmdvalue + " characters maximum";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "minlength":
		case "minlen": {
			if(eval(objValue.value.length) < eval(cmdvalue)) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " must contain at least " + cmdvalue + " characters.";
					} else {
						strError = objValue.name + " : " + cmdvalue + " characters minimum";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError + "\n[Current length = " + objValue.value.length + "]");
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError + "\n[Current length = " + objValue.value.length + "]";
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> must contain at least " + cmdvalue + " characters.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span> : " + cmdvalue + " characters minimum";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "alphanum":
		case "alphanumeric": {
			var charpos = objValue.value.search("[^A-Za-z0-9 ]");
			if(objValue.value.length > 0 &&  charpos >= 0) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " can only contain alpha-numberic characters.";
					} else {
						strError = objValue.name + ": Only alpha-numeric characters allowed ";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError + "\n [Error character position " + eval(charpos+1) + "]");
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError + "\n [Error character position " + eval(charpos+1) + "]";
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> can only contain alpha-numberic characters.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span>: Only alpha-numeric characters allowed ";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "num":
		case "numeric": {
			var charpos = objValue.value.search("[^0-9]");
			if(objValue.value.length > 0 &&  charpos >= 0) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " can only contain numeric characters.";
					} else {
						strError = objValue.name + ": Only digits allowed ";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError + "\n [Error character position " + eval(charpos+1) + "]");
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError + "\n [Error character position " + eval(charpos+1) + "]";
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> can only contain numeric characters.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span>: Only digits allowed ";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "numhyphen":
		case "numerichyphen": {
			var charpos = objValue.value.search("[^0-9\-]");
			if(objValue.value.length > 0 &&  charpos >= 0) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " can only contain numeric characters and hyphens.";
					} else {
						strError = objValue.name + ": Only digits allowed ";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError + "\n [Error character position " + eval(charpos+1) + "]");
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError + "\n [Error character position " + eval(charpos+1) + "]";
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> can only contain numeric characters and hyphens.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span>: Only digits allowed ";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "alphabetic":
		case "alpha": {
			var charpos = objValue.value.search("[^A-Za-z]");
			if(objValue.value.length > 0 && charpos >= 0) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " can only contain alphabetic characters.";
					} else {
						strError = objValue.name+": Only alphabetic characters allowed ";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError + "\n [Error character position " + eval(charpos+1) + "]");
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError + "\n [Error character position " + eval(charpos+1) + "]";
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> can only contain alphabetic characters.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name+"</span>: Only alphabetic characters allowed ";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "alnumhyphen": {
			var charpos = objValue.value.search("[^A-Za-z0-9\-_ ]");
			if(objValue.value.length > 0 &&  charpos >= 0) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " can only contain the following characters A-Z,a-z,0-9,- and _ (or [space]).";
					} else {
						strError = objValue.name + ": characters allowed are A-Z,a-z,0-9,- and _";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError + "\n [Error character position " + eval(charpos+1) + "]");
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError + "\n [Error character position " + eval(charpos+1) + "]";
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> can only contain the following characters A-Z,a-z,0-9,- and _ (or [space]).";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span>: characters allowed are A-Z,a-z,0-9,- and _";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "email": {
			if(!validateEmailv2(objValue.value)) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " is not a valid email address.";
					} else {
						strError = objValue.name+": Enter a valid Email address";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> is not a valid email address.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name+"</span>: Enter a valid Email address";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "lt":
		case "lessthan": {
			//if(isNaN(objValue.value)) {
			//	alert(objValue.name + ": Should be a number");
			//	return false;
			//}
			
			if(eval(objValue.value.length) >=  eval(cmdvalue)) {
				//alert(eval(cmdvalue));
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = "The value for " + mv[0].getAttribute("label") + " should be less than " + cmdvalue + ".";
					} else {
						strError = objValue.name + " : value should be less than " + cmdvalue;
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "The value for " + "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> should be less than " + cmdvalue + ".";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span> : value should be less than " + cmdvalue;
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "gt":
		case "greaterthan": {
			if(isNaN(objValue.value)) {
				alert(objValue.name + ": Should be a number");
				return false;
			}
			if(eval(objValue.value) <=  eval(cmdvalue)) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = "The value for " + mv[0].getAttribute("label") + " should be greater than " + cmdvalue + ".";
					} else {
						strError = objValue.name + " : value should be greater than " + cmdvalue;
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "The value for " + "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> should be greater than " + cmdvalue + ".";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span> : value should be greater than " + cmdvalue;
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "regexp": {
			if(objValue.value.length > 0) {
				if(!objValue.value.match(cmdvalue)) {
					if(!strError || strError.length==0) {
						var mv = document.getElementsByName(objValue.name);
						if (mv[0].getAttribute("label")) {
							strError = mv[0].getAttribute("label") + " appears to have invalid characters.";
						} else {
							strError = objValue.name + ": Invalid characters found";
						}
					}
					switch (gAlertMethod) {
						case "alert_single":
							alert(strError);
							return false;
							break;
						case "alert_pretty":
							usedErrorMsg = strError;
							break;
						case "alert_all":
							allAlert += strError + "\n";
							break;
						case "alert_all_pretty":
							if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
								if (mv[0].getAttribute("label")) {
									strErrorAlertAllPretty ="<span class='fieldID'>" +  mv[0].getAttribute("label") + "</span> appears to have invalid characters.";
								} else {
									strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span>: Invalid characters found";
								}
							}
							allAlert += strErrorAlertAllPretty + "<br />";
							break;
					}
					return false;
				}
			}
			break;
		}
		case "dontselect": {
			if(objValue.selectedIndex==null) {
				alert("BUG: dontselect command for non-select Item");
				return false;
			}
			if(objValue.selectedIndex==eval(cmdvalue)) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						//strError = "Please select an option from " + mv[0].getAttribute("label") + " other than " + objValue[objValue.selectedIndex].text + ".";
						strError = "Please select an option from " + mv[0].getAttribute("label") + ".";
					} else {
						strError = objValue.name + ": Please Select one option";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
							//strError = "Please select an option from " + mv[0].getAttribute("label") + " other than " + objValue[objValue.selectedIndex].text + ".";
								strErrorAlertAllPretty = "Please select an option from " + "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span>.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span>: Please Select one option";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "radio_req":
		case "radio_required": {
			var chosen = false;
			for (i=0; i<itemlength[itemlength_counter]; i++) {
				if (eval("document."+frmName.name+"." + objValue.name + "["+i+"].checked")) {
					chosen = true;
				}
			}
			itemlength_counter++;
			if (!chosen) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " is a required field.";
					} else {
						strError = objValue.name + " : Required Field";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> is a required field.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span> : Required Field";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
		case "check_req":
		case "check_required": {
			if(!objValue.checked) {
				if(!strError || strError.length==0) {
					var mv = document.getElementsByName(objValue.name);
					if (mv[0].getAttribute("label")) {
						strError = mv[0].getAttribute("label") + " is a required field.";
					} else {
						strError = objValue.name + " : Required Field";
					}
				}
				switch (gAlertMethod) {
					case "alert_single":
						alert(strError);
						return false;
						break;
					case "alert_pretty":
						usedErrorMsg = strError;
						break;
					case "alert_all":
						allAlert += strError + "\n";
						break;
					case "alert_all_pretty":
						if(!strErrorAlertAllPretty || strErrorAlertAllPretty.length==0) {
							if (mv[0].getAttribute("label")) {
								strErrorAlertAllPretty = "<span class='fieldID'>" + mv[0].getAttribute("label") + "</span> is a required field.";
							} else {
								strErrorAlertAllPretty = "<span class='fieldID'>" + objValue.name + "</span> : Required Field";
							}
						}
						allAlert += strErrorAlertAllPretty + "<br />";
						break;
				}
				return false;
			}
			break;
		}
	}
	return true;
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function setLyr(obj, lyr, offX, offY) {
	var coors = findPos(obj);
	var x = document.getElementById(lyr);
	x.style.top = coors[1] + offY + 'px';
	x.style.left = coors[0] + offX + 'px';
}

/////////////////////////////
// NON-VALIDATOR FUNCTIONS //
/////////////////////////////
function applyParamToInput(param, pFormName, pInputName) {
	var mForm = eval("document." + pFormName);
	if (mForm == undefined || mForm == null) return;
	var mInputName = eval("document." + pFormName + "." + pInputName);
	if (mInputName == undefined || mInputName == null) return;
	eval("document." + pFormName + "." + pInputName + ".value = '" + getParam(param) + "';");
}

function getParam(param) {
	var q = document.location.search || document.location.hash;
	if (param == null) { return q; }
	if(q) {
		var pairs = q.substring(1).split("&");
		for (var i=0; i < pairs.length; i++) {
			if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
				return pairs[i].substring((pairs[i].indexOf("=")+1));
			}
		}
	}
	return "";
}

function showFW(pElmnt) {
	if (pElmnt == null) return;
	document.getElementById(pElmnt).style.display = "block";
}