//form validation by John Mernick

var requiredFields = new Array();
var errorFields = new Array();
var displayCheck = false;
var firstRun = true;
function setRequiredFields (rfoe) {
  if(rfoe){
	for (x=0; x<requiredFields.length; x++) { 
	  if (requiredFields[x].getAttribute('name')=="agree" && BrowserDetect.browser != 'Explorer') {
        document.getElementById('agree_div').className = "required";
	  } else {
		requiredFields[x].className = "required";
	  }
	}
  }else{
	for (x=0; x<requiredFields.length; x++) { 
	  if (requiredFields[x].getAttribute('name')=="agree" && BrowserDetect.browser != 'Explorer') {
        document.getElementById('agree_div').className = "";
	  } else {
	    requiredFields[x].className = "";
	  }
	}
	for (x=0; x<errorFields.length; x++) { 
	  if (errorFields[x].getAttribute('name')=="agree" && BrowserDetect.browser != 'Explorer') {
        document.getElementById('agree_div').className = "required";
	  } else {
	    errorFields[x].className = "required";
	  }
	}	 
  }
}

function getElementsByAttribute(oElem, strTagName, strAttName, strAttValue){
	var arrElems = (strTagName == "*" && oElem.all)? oElem.all : oElem.getElementsByTagName(strTagName);
	var arrRetElems = new Array();
	var oAttVal = (typeof strAttValue != "undefined")? new RegExp("(^|\\s)" + strAttValue + "(\\s|$)", "i") : null;
	var oCurrent;
	var oAttribute;
	for(var i=0; i<arrElems.length; i++){
		oCurrent = arrElems[i];
		oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttName);
		if(typeof oAttribute == "string" && oAttribute.length > 0){
			if(typeof strAttValue == "undefined" || (oAttVal && oAttVal.test(oAttribute))){
				arrRetElems.push(oCurrent);
			}
		}
	}
	return arrRetElems;
}
var inp1 = null;
function validateForm (formObject, displayCheck, microForm) {
	if(firstRun==true){
		var inp1 = document.createElement('input');
		var randomKey = Math.random();
		inp1.setAttribute("id", "ensurzeBz");
		inp1.setAttribute("name", "ensurzeBz");
		inp1.setAttribute("value", randomKey);
		inp1.type = "hidden";
		formObject.appendChild(inp1);
	}
	
  if(firstRun==false)setRequiredFields(true);
  errorFields = new Array();
  if(typeof FormResources=='undefined')return true;
  
  var elemValue, elemName, FormResource, elemType, errorText,tempEmail;
  var requiredField = false;
  var errors = new Array();
  for (x=0; x<formObject.length; x++) { 
	  errorText = "";
	  this.formElement = formObject.elements[x];
	  requiredField = (this.formElement.className == 'required' || this.formElement.getAttribute('required') == 'true')? true : false;
	  	if(requiredField){
		  elemName = this.formElement.getAttribute('name');
		  FormResource = FormResources[elemName+"_error"];
		  elemType = (this.formElement.getAttribute('type'))? this.formElement.getAttribute('type') : this.formElement.type;
		  elemValue =	this.formElement.value;
		  if (elemName == 'email')tempEmail = elemValue;
		  if ((elemName == 'email' || elemName == 'email_confirm' || this.formElement.getAttribute('email') == 'true') && isNotEmpty(elemValue) && !checkEmail(elemValue)) {
			  errorText = FormResources[elemName+'_invalid'];
		  } else if (elemName == 'email_confirm' && isNotEmpty(elemValue) && isNotEmpty(tempEmail) && elemValue != tempEmail) {
			  errorText = FormResources['email_mismatch'];
		  } else if(elemName == 'zip' && (this.formElement.getAttribute('locale')=='en_CA' || this.formElement.getAttribute('locale')=='fr_CA') && elemValue.length<6) {
				errorText = FormResources[elemName+'_invalid'];
		  } else if (elemType == 'textarea' && !isNotEmpty(elemValue)) {
			  errorText = (formObject.name == 'bodyshop' || formObject.name == 'service')? FormResources[formObject.name+"_"+elemName] : FormResource; 
		  } else if (elemName.substring(0,9)=="co-signer") {
			  if(isDOM('cosigner') && !isNotChecked(getElem('cosigner')) && !isNotEmpty(elemValue)){
				FormResource = FormResources[elemName.substring(0,2)+elemName.substring(3,elemName.length)+"_error"];
				errorText = FormResource;
			  }
		  } else if (elemType == 'text' && !isNotEmpty(elemValue) || 
					  (elemType == 'checkbox' && isNotChecked(this.formElement))) {
			  if (!errorText) errorText = (elemName != 'agree')? FormResource : FormResources['agree_error'];
			  
		  } 
		  else if (elemType == 'select-one') {
			if(this.formElement.selectedIndex == 0) {
				FormResource = FormResources[elemName+'_error'];
				errorText = FormResource;
			}
		  }
		  if(firstRun){
			  requiredFields.push(this.formElement);
		  }
		  if(errorText){
              errorFields.push(this.formElement);
			  errors.push(errorText);
			  if (elemName != 'agree'){
				  getElementsByAttribute(formObject, "*", "for", elemName)[0].style.color="#FF0000";
			  }
		  }
		} // end if(requiredField)
  } //end for (x=0; x<formObject.length; x++)
  
  firstRun = false;
  setRequiredFields(false);
  if (errors.length>0 && !displayCheck) {
	  var errDiv = (microForm)?'MFErrors':'errors';
	  var errListDiv = (microForm)?'MFEList':'errorsList';
			
	  if(isDOM(errDiv))if(!isDOM(errListDiv))getElem(errDiv).innerHTML+='<ul id="' + errListDiv + '"></ul>';

	  if(isDOM(errListDiv))getElem(errListDiv).innerHTML = '';
	  
	  var errorHTML = "";
	  for (errorIndex=0; errorIndex < errors.length; errorIndex++) { 
	    errorHTML += "<li>&nbsp;"+ errors[errorIndex] +"</li>";
	  }
	  if(isDOM(errListDiv))getElem(errListDiv).innerHTML = errorHTML;
	  var scrollTop = getElem(errListDiv).offsetTop;
	  scrollTop = (scrollTop>100)? scrollTop : 0 ;
	  if(isDOM('overlay')=='false')window.scrollTo(0,scrollTop);
	  return false;
  } else {
	  return true;
  }	//end if (errors.length>0 && !displayCheck)
}
window.onload = function(){if(BrowserDetect.browser != 'Explorer' && document.getElementById('agree_div'))document.getElementById('agree_div').className = "required";}