window.onload = attachFormHandlers;

function attachFormHandlers() {
// Ensure we're working with a 'relatively' standards compliant browser
 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, errMessage;
 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 = isString(objField[iFieldCounter].value.replace(/^\s*|\s*$/g, ''));
    break;
    case 'number':
     bValid = isNumber(objField[iFieldCounter].value);
    break;
    case 'email':
     bValid = isEmail(objField[iFieldCounter].value);
    break;
    case 'cb':
     var bAgree = document.getElementById('inpAgree');
     if (bAgree.checked) {
      bValid = true;
     }
     else {
      errMessage = 'Please agree Xhost\'s Terms and Conditions';
      bValid = false;
     }
    break;
    case 'password':
// Check password fields
     objPass = document.getElementById('inpPassword');
     objPassconf = document.getElementById('inpPasswordconf');
     if ((!objPass.value) || (!objPassconf.value)) {
      alert('Please enter a password to use for your hosting account');
      bValid = false;
     }
     else {
      if (objPass.value != objPassconf.value) {
       alert('Your passwords do not match. Please re-enter.');
       bValid = false;
      }
      else {
       bValid = true;
      }
     }
    break;
    default:
     bValid = true;
    }
   if (bValid == false) {
// If this field is invalid, leave the testing early, and alert the visitor to this error
    switch (objField[iFieldCounter].name) {
     case 'given_names':
      errMessage = 'Please provide your First Name';
     break;
     case 'surname':
      errMessage = 'Please provide your Surname';
     break;
     case 'email':
      errMessage = 'Please provide a valid contact Email Address';
     break;
     case 'subject':
      errMessage = 'Please provide a subject for your Email';
     break;
     case 'mail_body':
      errMessage = 'Please provide a message for your Email';
     break;
    }
    if (errMessage) { alert(errMessage); }
    objField[iFieldCounter].focus();
    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));
}