function getRequest() {
    var xmlhttp=false;
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    // JScript gives us Conditional compilation, we can cope with old IE versions.
    // and security blocked creation of the objects.
     try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
      try {
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
       xmlhttp = false;
      }
     }
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp=false;
        }
    }
    if (!xmlhttp && window.createRequest) {
        try {
            xmlhttp = window.createRequest();
        } catch (e) {
            xmlhttp=false;
        }
    }

    return xmlhttp;
}

function processContactForm() {
	var args = PreProcessContactForm();
	
	//do request
    if (args != ''){
    	var request = getRequest();
		formButtonEnable(0);

	    request.onreadystatechange=function()
		{
		if(request.readyState==4)
		  {
		  	PostProcessContactForm(request.responseText, args);
		  }
		}

		clearFeedback('GOOD');
		clearFeedback('BAD');

		addFeedback("GOOD", "We are sending your information.")

		var address = "ajax/process.php?"+args;
		request.open("get", address, true);
    	request.send(null);
	}
}

function PostProcessContactForm(res, args){
	clearFeedback('GOOD');
	clearFeedback('BAD');

	if (res == "OK"){
		addFeedback("GOOD", "Your information was successfully sent.");
		addFeedback("GOOD", "If you need to send again, click the Reset button.");
		return;
	} else {
		formButtonEnable(1);
		if (res != ""){
			addFeedback("BAD", res)
		} else {
			addFeedback("BAD", "We are sorry, but the server could not be contacted. Please try again soon.")
		}
	}
}

function DoBadFeedback(ele, feedback){
	addFeedback("BAD", feedback)
	highlightMissingInfo(ele, 1);
	ele.onchange = PreProcessContactForm;
	return 1;
}

function BuildArgument(obj){
	if (!obj.id) { obj.id = "form_"+obj.n; }
	ele = document.getElementById(obj.id);
	if (ele == null){ alert(obj.id); return; }
	if (ele.type == "select"){
		return "&"+obj.n+"="+ele.options[ele.selectedIndex].value;
	}
	return "&"+obj.n+"="+ele.value;
}

function InitializeElement(eID){
	ele = document.getElementById(eID);
	highlightMissingInfo(ele, 0);
	return ele;
}

function TestValidFilter(value, filter){
	return !filter.test(value);
}

function PreProcessContactForm(){
	clearFeedback('GOOD');
	clearFeedback('BAD');
	var args = '';
	var errors = 0;

	//----------
	//REQUIRED
	//first name
	ele = InitializeElement("form_firstName");
	if (TestValidFilter(ele.value, /^[a-zA-Z\.' ]+$/)){
		errors += DoBadFeedback(ele, "The first name field may only be letters and punctuation.");
	} else {
		args += BuildArgument({n: "firstName"});
	}
	
	//last name
	ele = InitializeElement("form_lastName");
	if (TestValidFilter(ele.value, /^[a-zA-Z\.' ]+$/)){
		errors += DoBadFeedback(ele, "The last name field may only be letters and punctuation.");
	} else {
		args += BuildArgument({n: "lastName"});
	}
	
	ele = InitializeElement("form_emailAddress");
	if (!check_email(ele.value)){
		errors += DoBadFeedback(ele, "The email address is not valid.");
	} else {
		args += BuildArgument({n: "emailAddress"});
	}
	
	ele = InitializeElement("form_preferredOwner");
	if (TestValidFilter(ele.value, /^[0-9]+$/)){
		errors += DoBadFeedback(ele, "The preffered owner number is not valid.");
	} else {
		args += BuildArgument({n: "preferredOwner"});
	}
	
	args += BuildArgument({n: "street"});
	args += BuildArgument({n: "street2"});
	args += BuildArgument({n: "city"});
	args += BuildArgument({n: "state"});
	args += BuildArgument({n: "zip"});
	args += BuildArgument({n: "zip2"});
		
	
	ele = InitializeElement("form_referralFirstName");
	if (TestValidFilter(ele.value, /^[a-zA-Z\.' ]+$/)){
		errors += DoBadFeedback(ele, "The referral first name field may only be letters and punctuation.");
	} else {
		args += BuildArgument({n: "referralFirstName"});
	}
	
	//last name
	ele = InitializeElement("form_referralLastName");
	if (TestValidFilter(ele.value, /^[a-zA-Z\.' ]+$/)){
		errors += DoBadFeedback(ele, "The referral last name field may only be letters and punctuation.");
	} else {
		args += BuildArgument({n: "referralLastName"});
	}
	
	ele = InitializeElement("form_referralEmailAddress");
	if (!check_email(ele.value)){
		errors += DoBadFeedback(ele, "The referral email address is not valid.");
	} else {
		args += BuildArgument({n: "referralEmailAddress"});
	}
	
	ele = InitializeElement("form_referralTypeVehicle");
	if (TestValidFilter(ele.value, /^[a-zA-Z0-9\.' ]+$/)){
		errors += DoBadFeedback(ele, "The referral vehicle type is not valid.");
	} else {
		args += BuildArgument({n: "referralTypeVehicle"});
	}
	
	args += BuildArgument({n: "referralStreet"});
	args += BuildArgument({n: "referralStreet2"});
	args += BuildArgument({n: "referralCity"});
	args += BuildArgument({n: "referralState"});
	args += BuildArgument({n: "referralZip"});
	args += BuildArgument({n: "referralZip2"});
	
	if (errors != 0){
		args = '';
	}
	return args;
}

function getFItem(type){
	var fItem = "";
	if (type == "GOOD")	{
		fItem = document.getElementById("positiveFeedback");
	} else if (type == "BAD"){
		fItem = document.getElementById("negativeFeedback");
	}
	return fItem;
}

function addFeedback(type, info){
	var fItem = getFItem(type);
	if (fItem){
		if (fItem.innerHTML){
			fItem.innerHTML+="<br/>"+info;
		}else{
			fItem.innerHTML = info;
		}
		
		if (info){
			fItem.style.display = "block";

		}
	}
}

function check_email(e) {
	var filter=/^.+@.+\..{2,3}$/

	if (filter.test(e)) return 1;
	return 0;
}

function clearFeedback(type){
	var fItem = getFItem(type);
	if (fItem){
		fItem.innerHTML = "";
	}
	fItem.style.display = "none";
}

function highlightMissingInfo(ele, force){
	if (ele){
		if (force == 1 || (ele.value == "" && force == "")){
			ele.style.backgroundColor = "#FF8888";
		} else {
			ele.style.backgroundColor = "#FFFFFF";
		}
	}
}

function formButtonEnable(en){
	if (en){
		getFormButton().disabled = "";
	} else {
		getFormButton().disabled = "disabled";
	}
}

function getFormButton(){
	return document.getElementById("form_continue");
}

function getFormReset(){
	return document.getElementById("form_reset");
}