function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function displayValidity(frmElement, validStatus) {

   if (validStatus == false) {
      //alert('frmElement.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName = ' + frmElement.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName);
      frmElement.focus();
      if(frmElement.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == 'FORM'){
         frmElement.parentNode.className = "invaliderrc";
      }else{
         frmElement.parentNode.parentNode.parentNode.parentNode.parentNode.className = "invaliderrc";
      }
   } else {
      if(frmElement.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == 'FORM'){
         frmElement.parentNode.className = "";
      }else{
         frmElement.parentNode.parentNode.parentNode.parentNode.parentNode.className = "";
      }
   }
}

function validate(frm) {

var returnFlag = true;
var myAlertText = "";
   for (var i=0;i<frm.length;i++) {
// validate only if marked as 'required'
      if (frm.elements[i].id == "required"){
         displayValidity(frm.elements[i], true);
// Validate by Type
// validate text box
         if(frm.elements[i].type == "text" && frm.elements[i].value == ""){
            returnFlag = false;
            displayValidity(frm.elements[i], false);
         }
// validate radio set
         if(frm.elements[i].type == "radio"){
            var thisCollection = document.getElementsByName(frm.elements[i].name);
            var requirementMetFlag = false;
            for(var j=0;j<thisCollection.length;j++){
               if(thisCollection[j].checked == true){
                  requirementMetFlag = true;
               }
            }
            if (requirementMetFlag == false){
               returnFlag = false;
               displayValidity(frm.elements[i], false);
            }
            i = i + (thisCollection.length - 1);
         }
// validate checkboxes
         if(frm.elements[i].type == "checkbox"){
            var thisCollection = document.getElementsByName(frm.elements[i].name);
            var requirementMetFlag = false;
            for(var j=0;j<thisCollection.length;j++){
               if(thisCollection[j].checked == true){
                  requirementMetFlag = true;
               }
            }
            if (requirementMetFlag == false){
               returnFlag = false;
               displayValidity(frm.elements[i], false);
            }
            i = i + (thisCollection.length - 1);
         }
// validate single select drop down
         if(frm.elements[i].type == "select-one" && frm.elements[i].selectedIndex == 0){
            returnFlag = false;
            displayValidity(frm.elements[i], false);
         }
// validate textarea
         if(frm.elements[i].type == "textarea" && frm.elements[i].value == ""){
            returnFlag = false;
            displayValidity(frm.elements[i], false);
         }
// Validate by Name
         if(frm.elements[i].name == "DOB                 "){
            if(!IsDate(frm.elements[i].value)){
               returnFlag = false;
               displayValidity(frm.elements[i], false);
            }
         }
      } // end - validate only if marked as 'required'
// Validate where data must be valid if entered
// Validate by Name
      if(frm.elements[i].name == "EMAILADDRESS        "){
         if(frm.elements[i].value.length > 0){
            if(!IsEmail(trim(frm.elements[i].value))){
               returnFlag = false;
               displayValidity(frm.elements[i], false);
            }
         }
      }

   }
   return returnFlag;
}

function IsDate(dateStr){
// validate any date given in uk format DD/MM/YYYY
// set date separator
   var RegEx = /[\.\-\\\/]/g
   var newDate = dateStr.replace(RegEx,"/")

// use regular expression initially
   RegEx = /^[0-9]{1,2}\/{1}[0-9]{1,2}\/{1}[0-9]{4}$/;

// if the regex matches - split the date into and array and check values
   if (newDate.match(RegEx)){
      var matchArray = new Array();
      matchArray = newDate.split("/");
      var datestatus=true;
      datemsg="";

      day = matchArray[0];
      month = matchArray[1];
      year = matchArray[2];

      if ( isNaN(day) || isNaN(month) || isNaN(year) ){
         return false;
      }

      if (matchArray == null || day==null || month==null || year==null || year=="") {
         return false;
      }

      if (year.length < 4 || year.length > 4){
         datestatus= false;
      }

      if (month < 1 || month > 12){
         datestatus=false;
      }

      if (day < 1 || day > 31){
         datestatus=false;
      }

      if ((month==4 || month==6 || month==9 || month==11) && day==31){
         datestatus=false;
      }

      if (month == 2){ // check for february 29th
         var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
         if (day > 29 || (day==29 && !isleap)){
            datestatus=false;
         }
      }
      return datestatus;
   }
   else{
      return false;
   }
}

function IsEmail(StrEmail){
// validate e-mail
   var RegEx = /^[a-zA-Z0-9\._\-]+@{1}[a-zA-Z0-9\._\-]*\.[a-zA-Z]+$/;

	if (StrEmail.match(RegEx)){
		return true;
	}
	else{
		return false;
	}
}

function submitThis(frm) {

   frm.Submit.disabled=true;
   frm.Submit.value='Submitting...';

   if(validate(frm)) {
      return true;
   } else {
      frm.Submit.disabled=false;
      frm.Submit.value='Submit';

      alert("Please check your responses to the highlighted questions.");
      return false;
   }
   return false;
}
