var reValEmail = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9]{1,}[a-z0-9_\-\.]*)(\.[a-z]{2,4}(\.[a-z]{2}){0,2})$/i;
var reLTrim = /^\s+/;
var reRTrim = /\s+$/;
var objForm = document.forms[0];
var strErr = '';
var strErrHead = "The following information is missing or invalid:     \n____________________________________\n\n";
var strErrFoot = "____________________________________\nPlease re-enter and submit again.";
var strErrLineBegin = "     -  ";
var strErrLineEnd = "\n";

function addError(strErrorMsg) {
	strErr += strErrLineBegin + strErrorMsg + strErrLineEnd;
}

function hasErrors(oForm) {
	if (!oForm) oForm = objForm;
	if (strErr != '') {
		return true;
	} else {
		return false;
	}
}

function popError(blnUseHeadFoot) {
	if (strErr != '') {
		if (blnUseHeadFoot == undefined || blnUseHeadFoot == true) {
			alert(strErrHead + strErr + strErrFoot);
		} else {
			alert(strErr);
		}
		strErr = '';
	}
}

function trimField(oField) {
	if (oField.value) {
		if (oField.value != '') {
			oField.value = oField.value.replace(reLTrim,"").replace(reRTrim,"");
			return true;
		}
	}
	return false;
}

function trimAllText(oForm) {
	if (!oForm) oForm = objForm;
	for (var i = 0; i < oForm.elements.length; i++) {
		if (oForm.elements[i].type == 'text') {
			trimField(oForm.elements[i]);
		}
	}
}

function getValueOf(element) {
	var returnValue=null;
	switch (element.type){
		case "text" : case "textarea" : case "file" : case "password" : case "hidden" :
			returnValue=element.value;
			break;
		case "select-one" :
			if(element.selectedIndex>=0)
				returnValue=element.options[element.selectedIndex].value;
			break;
		case "select-multiple" :
			for(var i=0,iOptions=element.options.length; i<iOptions; i++)
				if(element.options[i].selected && trim(element.options[i].value.toString())){
					returnValue=true;
					break;
				}
			break;
		case "radio" : case "checkbox" :
			returnValue=element.checked;
			break;
		default:
			returnValue = null;
	}
	return returnValue;
}

function valRequired(strFieldName, strErrorText) {
	var oField = objForm[strFieldName];
	if (oField) {
		if (!getValueOf(oField)) {
			if (strErrorText) {
				addError(strErrorText);
			} else {
				addError(strFieldName);
			}
			return false;
		} else {
			return true;
		}
	}
	return false;
}

function valEmail(strFieldName, strErrorText) {
	var oField = objForm[strFieldName];
	if (oField) {
		sValue = getValueOf(oField);
		if (sValue) {
			if (reValEmail.test(sValue)) {
				return true;
			} else {
				if (strErrorText) {
					addError(strErrorText);
				} else {
					addError(strFieldName);
				}
				return false;
			}
		} else {
			return true;
		}
	}
	return false;
}

function valRegEx(strRegEx, strFieldName, strErrorText, blnRequired) {
	if (blnRequired && !valRequired(strFieldName, strErrorText)) { return false; }
	var oField = objForm[strFieldName];
	if (oField && strRegEx) {
		var re = new RegExp(strRegEx);
		if (re.test(getValueOf(oField))) {
			return true;
		} else {
			if (strErrorText) {
				addError(strErrorText);
			} else {
				addError(strFieldName);
			}
			return false;
		}
	}
	return false;
}

