
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(attachFormHandlers);

function attachFormHandlers()
{
  if (document.getElementsByTagName)
  {
    var objForm = document.getElementsByTagName('form');

    for (var iCounter=0; iCounter<objForm.length; iCounter++)
      objForm[iCounter].onsubmit = function(){return checkForm(this);}
  }
}

function checkForm(objForm)
{
  var arClass, bValid;
  var objField = objForm.getElementsByTagName('*');

  for (var iFieldCounter=0; iFieldCounter<objField.length; iFieldCounter++)
  {
    // Allow for multiple values being assigned to the class attribute
    arClass = objField[iFieldCounter].className.split(' ');
    for (var iClassCounter=0; iClassCounter<arClass.length; iClassCounter++)
    {
      switch (arClass[iClassCounter])
      {
        case 'string':
           bValid = (objField[iFieldCounter].value == '') || isString(objField[iFieldCounter].value.replace(/^\s*|\s*&#36;/g, ''));
           break;
        case 'number' :
           bValid = (objField[iFieldCounter].value == '') || isNumber(objField[iFieldCounter].value);
           break;
        case 'email' :
           bValid = (objField[iFieldCounter].value == '') || isEmail(objField[iFieldCounter].value);
		break;
	case 'required' :
		bValid = (objField[iFieldCounter].value != '');
		break;
	case 'unchecked' :
		bValid = (!objField[iFieldCounter].checked);
		break;
	case 'checked' :
		bValid = (objField[iFieldCounter].checked);
		break;
	case 'phone' :
		bValid = (objField[iFieldCounter].value == '') || isPhone(objField[iFieldCounter].value);
		break;
	case 'eid' :
		bValid = (objField[iFieldCounter].value == '') || isEid(objField[iFieldCounter].value);
		break;
	case 'creditnumber' :
		bValid = (objField[iFieldCounter].value == '') || isCredit(objField[iFieldCounter].value);
		break;
	case 'creditdate' :
		bValid = (objField[iFieldCounter].value == '') || isCreditDate(objField[iFieldCounter].value);
		break;
        default:
           bValid = true;
      }

      if (bValid == false)
      {
        // If this field is invalid, leave the testing early,
        // and alert the visitor to this error
        alert('Please review the value you provided for ' + objField[iFieldCounter].name);
try{
        objField[iFieldCounter].select();
        objField[iFieldCounter].focus();
}
catch(e) {
}
        return false;
      }
    }
  }
  return true;
}

function isString(strValue)
{
  return ((typeof strValue == 'string') && (strValue != '') && isNaN(strValue));
}

function isNumber(strValue)
{
  return (!isNaN(strValue) && (strValue != ''));
}

function isEmail(strValue)
{
  var objRE = /^[\w-\.\']{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,}/;

  return ((strValue != '') && objRE.test(strValue));
}

function isPhone(strValue)
{
  var objRE = /^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/;
  return ((strValue != '') && objRE.test(strValue));
}


function isEid(strValue)
{
  var objRE = /^[345][0-9]{3}/;
  return ((strValue != '') && objRE.test(strValue) && strValue.length == 4);
}

function isCredit(strValue)
{
  return(!isNaN(strValue) && strValue.length == 16);
}

function isCreditDate(strValue)
{
  dvals = strValue.split('/');
  if(dvals.length != 2) return false;
  dvals[0] = parseInt(dvals[0]);
  dvals[1] = parseInt(dvals[1]);
  if(dvals[0] < 1) return false;
  if(dvals[0] > 12) return false;
  if(dvals[1] <= 0) return false;
  if(dvals[1] < 100) dvals[1] = dvals[1] + 2000;
  if(dvals[1] < 2000) return false;
  var theDate = new Date();
  x = theDate.getYear();
  var y = x % 100;
  y += (y < 38) ? 2000 : 1900;
  if(y > dvals[1]) return false;
  if((y == dvals[1]) && (dvals[0] <= theDate.getMonth())) return false;
  return true;
}