var formvalid = false;

function validateForm(f){

	if (formvalid) return false; // to avoid function call in case multiple clicking
	var msg = "";
	var fNEEError = false;
	var lNEEError = false;
	
	resetOptional(f);
	setOptional(f);
	
	for (var i = 0; i < f.elements.length; i++)
	{
		var e = f.elements[i]
		var value;
		var validate = false;
		var fldError = "";
		var fldName = "";
		
		if(((e.type == "text") || (e.type == "textarea"))){ 
			value = e.value;
			if(!e.optional)validate = true;
		}
		else if((e.type == "select-one") || (e.type == "select-multiple")){
			value = (e.selectedIndex>=0)?e.options[e.selectedIndex].value:"";
			if(!e.optional)validate = true;
		}
		
		if((value == null || value == "" || isblank(value)) && validate){

			fldName = e.name;
			
			if((fldName == "nominee_first_name") || (fldName == "first_name_EE")) {
				fldName = "first_name_EE";
			}
			else if((fldName == "nominee_last_name") || (fldName == "last_name_EE")) {
				fldName = "last_name_EE";
			}
			
			switch (fldName)
			{
				case "first_name_EE":
					if(!fNEEError){
						fldError = "first name of nominee";
						fNEEError = true;
					}
					break;
					
				case "last_name_EE":
					if(!lNEEError){
						fldError = "last name of nominee";
						lNEEError = true;
					}
					break;
					
				case "address1_EE":
					fldError = "nominee's address line 1";
					break;
					
				case "city_EE":
					fldError = "nominee's city";
					break;
					
				case "state_EE":
					fldError = "nominee's state";
					break;
					
				case "zip_EE":
					fldError = "nominee's zip code";
					break;
					
				case "phone_EE":
					fldError = "nominee's telephone";
					break;
				
				case "last_name_OR":
					fldError = "last name of nominator";
					break;
					
				case "first_name_OR":
					fldError = "first name of nominator";
					break;
					
				case "address1_OR":
					fldError = "nominator's address line 1";
					break;
					
				case "city_OR":
					fldError = "nominator's city";
					break;
					
				case "state_OR":
					fldError = "nominator's state";
					break;
					
				case "zip_OR":
					fldError = "nominator's zip code";
					break;
					
				case "phone_OR":
					fldError = "nominator's telephone";
					break;
				
			}
			if(fldError!="")msg += fldError + "\n";
		}
	}
	if(msg != ""){
		alert("Please provide us with the following:\n\n" + msg);
		return false;
	}
	formvalid = true; // validation done
	// this message can also avoid multiple clicking.
	window.status="Please be patient. Your form may take 10 - 15 seconds to process. Thank you!";
	return true;
}

function isblank(s){
  for(var i = 0; i < s.length; i++){
    var c = s.charAt(i);
    if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
  }
  return true;
}

function setOptionalField(f){
	for(var i = 1; i < arguments.length ; i++){
		f.elements[arguments[i]].optional = true;
	}
}

function resetOptional(f){
	for (var i = 0; i < f.elements.length; i++)
	{
		var e = f.elements[i]
		e.optional = false;
	}
}

function setOptional(f){
	setOptionalField(f,
							"same_as_above",
							"other_accr1",
							"other_accr2",
							"background",
							"examples",
							"company_name_EE",
							"address2_EE",
							"mobile_EE",
							"fax_EE",
							"email_EE",
							"company_name_OR",
							"address2_OR",
							"mobile_OR",
							"fax_OR",
							"email_OR");
							
		if(f.same_as_above.checked == true){
			setOptionalField(f,
							"last_name_OR",
							"first_name_OR",
							"address1_OR",
							"city_OR",
							"state_OR",
							"zip_OR",
							"phone_OR");
		}
}
