function validateAnyField(oFld) {
  if(!isFormField(oFld)) return showError('Unknown field ' + oFld + '.  Contact the webmaster.');
  return true;
}

function validateSelectField(oFld, sFieldName, bAllowFirst, bRequired) {
  if(!validateAnyField(oFld)) return false;
	if(!bAllowFirst && oFld.selectedIndex==0) return fieldError(oFld,sFieldName + ' is required.');
  if(bRequired) {
	  if(oFld.selectedIndex == -1) return fieldError(oFld,sFieldName + ' is required.');
		if(oFld.options[oFld.selectedIndex].value=='' && oFld.options[oFld.selectedIndex].text=='') return fieldError(oFld,sFieldName + ' is required.');
	}
  return true;	
}

function validateEmailField(oFld, sFieldName, bRequired, nMaxLength) {
  var oRX = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  if(!validateTextField(oFld,sFieldName,bRequired,nMaxLength)) return false;
  if(bRequired) { 
    if(!oRX.test(oFld.value)) return fieldError(oFld,oFld.value+' is not a valid email address.  Please try again.');
  }
  return true;  
}

function validateTextField(oFld, sFieldName, bRequired, nMaxLength) {
  var v, l;
  if(!validateAnyField(oFld)) return false;
  if(sFieldName==undefined) sFieldName = oFld.name;
  if(bRequired==undefined)  bRequired  = false;
  if(nMaxLength==undefined) nMaxLength = oFld.value.length;
  v = oFld.value; l = v.length;
  if(l==0 && bRequired) return fieldError(oFld, sFieldName + ' cannot be blank.');
  if(l>nMaxLength) return fieldError(oFld, sFieldName + ' is too long.  It must be ' + nMaxLength.toString() + ' characters long or less.');
  return true;
}

function validateNumField(oFld, sFieldName, bRequired, nMinValue, nMaxValue) {
  if(!validateAnyField(oFld)) return false;
  if(sFieldName==undefined) sFieldName = oFld.name;
  if(bRequired==undefined)  bRequired  = false;
  if(!validateTextField(oFld,sFieldName,bRequired)) return false;
  if(oFld.value.length>0 && isNaN(oFld.value)) return fieldError(oFld, sFieldName + ' must be a number.');
  if(nMinValue != undefined && oFld.value.length>0 && parseFloat(oFld.value)<nMinValue) return fieldError(oFld, sFieldName + ' must be ' + nMinValue + ' or more.');
  if(nMaxValue != undefined && oFld.value.length>0 && parseFloat(oFld.value)>nMaxValue) return fieldError(oFld, sFieldName + ' must be ' + nMaxValue + ' or less.');
  return true;
}

function validateCurrencyField(oFld, sFieldName, bRequired, nMinValue, nMaxValue) {
  if(!validateAnyField(oFld)) return false;
  if(oFld.value.length>0) {
  	var rgx = /\$|\,/g;
	  oFld.value = oFld.value.replace(rgx,'');
	}
	if(!validateNumField(oFld,sFieldName,bRequired,nMinValue,nMaxValue)) return false;	
	return true;
}

function validateDateField(oFld, sFieldName, bRequired, dMinValue, dMaxValue, bFixFormat) {
  var v, y, dFld, nMin, dMax;

  if(!validateAnyField(oFld)) return false;
  if(sFieldName==undefined) sFieldName = oFld.name;
  if(bRequired==undefined)  bRequired  = false;
  if(bFixFormat==undefined) bFixFormat = true;
  if(!validateTextField(oFld,sFieldName, bRequired)) return false;
  
  v = oFld.value;
  dFld = new Date(v);
  y = dFld.getFullYear();

  if(!isNaN(dFld) && dFld.getYear()>50 && y<1900) dFld.setFullYear(y+=100);
  if(v.length>0 && isNaN(dFld))  return fieldError(oFld, sFieldName + ' is not a valid date.');
  if(bFixFormat && !isNaN(dFld)) oFld.value = (dFld.getMonth()+1) + '/' + dFld.getDate() + '/' + y;
	if(dMinValue!=undefined) {
    dMin = new Date(dMinValue);
    if(!isNaN(dFld) && !isNaN(dMin) && dFld<dMin) return fieldError(oFld, sFieldName + ' must be on or before ' + dMinValue);
	}
	if(dMaxValue!=undefined) {
    dMax = new Date(dMaxValue);
    if(!isNaN(dFld) && !isNaN(dMax) && dFld<dMax) return fieldError(oFld, sFieldName + ' must be on or before ' + dMinValue);
	}

  return true;

}

function validateZIPCodeField(theField,fieldName,isRequired) {
  // Check the basics
  if(validateTextField(theField,fieldName,isRequired,10)==false) return false;
  // Check the length
  var sZIP = theField.value;
  if(sZIP.length!=10 && sZIP.length!=5 && (sZIP.length == 0 && isRequired)) return fieldError(theField,'The ' + fieldName + ' entered is not valid.');
  if(sZIP.length==10 && sZIP.charAt(5)!='-') return fieldError(theField,'The ' + fieldName + ' entered is not valid.');
  for(i=0;i<sZIP.length;i++) {
    if("0123456789-".indexOf(sZIP.charAt(i))==-1) fieldError(theField,'The ' + fieldName + ' entered is not valid.');
  }
  return true;
}

function showError(sMessage) {
  window.alert(sMessage);
  return false;
}

function fieldError(oFld, sMessage) {
  try {
    oFld.focus();
    oFld.select();
  }
  catch(e) {
  }
  return showError(sMessage);
}

function isFormField(oFld) {
  return (oFld!=undefined && typeof(oFld)=='object')
}

