// JavaScript Document
function validateForm(f) {
	var reqerr = "";
	var valerr = "";
	var msg = "";
	for (var i=0; i<f.elements.length; i++) {
		var elem = f.elements[i];
		var bReqErr = false;
		if (elem.reqd=="1") { // If the element is required
			if (!isElemValue(elem)) { // if the element does not have a value
				if (elem.optl) { // if the element is optional depending on another element
					var depElem = eval("f." + elem.optl); // get the dependent element object
					if (!isElemValue(depElem)) { // if the dependent element is empty then error
						reqerr+="\n"+getDisplayName(elem)+" (if no "+getDisplayName(depElem)+")";
						bReqErr = true;
					} 
				}
				else { // element is always required but is empty, so error.
					reqerr+="\n"+getDisplayName(elem);
					bReqErr = true;
				}
			}
		} else if (!isEmpty(elem.reqd) && !isElemValue(elem)) { // the element is required depending on another element
			var depElem = eval("f." + elem.reqd); // get the dependent element object
			var depElemValue = elem.reqdValue;	  // get the dependent element value if specified
			if (isElemValue(depElem) && 
				(isEmpty(depElemValue) || depElemValue==getElemValue(depElem))) {
			// the dependent element has a value and it's equal to the specified reqd value, then error
				reqerr+="\n"+getDisplayName(elem);
				/*reqerr += (isEmpty(depElemValue)) 
					? " (if "+getDisplayName(depElem)+" was filled out.)"
					: " (if "+getDisplayName(depElem)+" equals "+depElemValue+".)";*/
				bReqErr = true;
			} 
		}
		if (!bReqErr && isElemValue(elem)) { // if no requirement error and element has a value, then validate it
			if (elem.validType=="email" && !isEmail(elem.value)) 
				valerr += "\n"+getDisplayName(elem)+" (e.g. you@youremaildomain.com)";
			else if (elem.validType=="phone" && !isPhone(elem.value)) 
				valerr += "\n"+getDisplayName(elem)+" (e.g. 123-456-7890)";
		}
	}
	if (reqerr!="")	msg += "Sorry, the following fields are required:\n"+reqerr+"\n";
	if (valerr!="")	msg += "\nThe following fields are not formatted correctly:\n" + valerr;
	if (msg!="") {
		msg+="\n\nPlease press OK and try again"
		alert(msg);
		return false;
	}
	return true;
}
function getElemValue(e) {
	var v = "";
	switch (e.type) {
		case "select-one":
			v = e.options[e.selectedIndex].value;
			break;
		case "select-multiple":
			var selectedItems = Array();
			for (i=0;i<e.options.length;i++) {
				if (e.options[i].selected) selectedItems[selectedItmes.length] = e.options[i].value;
			}
			v = selectedItems.join("\n");
			break;
		case "checkbox":
			if (e.checked) v = e.value;
			break;
		default:
			v = e.value;
	}
	return v;
}
function isElemValue(e) {
	var v = "";
	switch (e.type) {
		case "select-one":
			v = e.options(e.selectedIndex).value;
			break;
		case "select-multiple":
			for (i=0;i<e.options.length;i++) {
				if (e.options[i].selected) return true;
			}
			break;
		case "checkbox":
			if (e.checked) return true;
			break;
		default:
			v = e.value;
	}
	if(!isEmpty(v))	return true;
	else return false;
}
function getDisplayName(e) {return (e.dispName)?e.dispName:e.name;}
function isEmpty( v ) {
   var strTemp = v;
   if (strTemp==undefined || strTemp.length==0) return true;
   strTemp = trim(strTemp);
   if(strTemp.length > 0){
     return false;
   }  
   return true;
}
function trim( v ) {
 var objRegExp = /^(\s*)$/;

    //check for all spaces
    if(objRegExp.test(v)) {
       v = v.replace(objRegExp, '');
       if( v.length == 0)
          return v;
    }
   //check for leading & trailing spaces
   objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
   if(objRegExp.test(v)) {
       //remove leading and trailing whitespace characters
       v = v.replace(objRegExp, '$2');
    }
  return v;
}
function isPhone(v) {
	var rePhone = /^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$/;
	if (isEmpty(v)) return false;
	if (rePhone.test(v)) return true;
	return false;
}
function isEmail(v) {
	var reEmail = /^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/;
	if (isEmpty(v)) return false;
	if (reEmail.test(v)) return true;
	return false;
}
function isNumeric(v) {
	var reInteger = /^\d+$/
    return reInteger.test(v);
}
function isCurrency(v,usOnly) {
	var reCur = (usOnly) ? 
		/^([1-9]{1}[0-9]{0,2}([0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/ :
		/^(?!\u00a2)\p{Sc}?(?!0,?\d)(?:\d{1,3}(?:([, .])\d{3})?(?:\1\d{3})*|(?:\d+))((?!\1)[,.]\d{2})?$/;
	if (isEmpty(v)) return false;
	if (reCur.test(v)) return true;
	return false;
}