var debugMode = false;

var curCompany = "Links";
var curContact = "General";
var curQuote = "Auto";
var sideBarOverClass = "sideBarItemOver";
var sideBarOutClass = "sideBarItem";
var tabSelected = "tabHeadingSelected";
var tabHeading = "tabHeading";
var initTextArea = "Please Describe";

var invalidFieldColor = "#FFFFCC";
var validFieldColor = "#FFFFFF";

function activateItem (item)
{
	item.className = sideBarOverClass;
}

function deactivateItem (item)
{
	item.className = sideBarOutClass;
}

function activateTextArea (box)
{
	box.value = (box.value == initTextArea ? "" : box.value);
}

function deactivateTextArea (box)
{
	box.value = (box.value == "" ? initTextArea : box.value);
}

function debug(msg)
{
	if (debugMode) {
		alert(msg);
	}
}

function hideTextArea(taName) {
	var box = document.getElementById(taName);
	box.style.display = "none";
	box.blur();
}

function showTextArea(taName) {
	var box = document.getElementById(taName);
	box.style.display = "block";
	box.focus();
}

function showOrHideTextArea(box, taName) {
	if (box.checked) {
		showTextArea(taName)
	}
	else {
		hideTextArea(taName)
	}
}

function openPage(address)
{
	var page = window.open(address, "crewsonLink", "");
	page.focus();
}

function showCompany (company)
{
	var oldCompany = document.getElementById(curCompany);
	curCompany = company;
	var newCompany = document.getElementById(company);
	
	oldCompany.style.display = "none";
	newCompany.style.display = "block";
}

function showContact (contact)
{
	var oldContact = document.getElementById(curContact);
	curContact = contact;
	var newContact = document.getElementById(contact);
	
	oldContact.style.display = "none";
	newContact.style.display = "block";
}

function showQuote (quote)
{
	var autoLabel = "Auto";
	var homeLabel = "Home";
	
	var activeTab;
	var inactiveTab;
	
	// Let PHP know what kind of quote to send
	var quoteTypeField = document.getElementById("quoteType");
	quoteTypeField.value = quote;
	
	if (quote == "Auto") {
		activeTab = document.getElementById("autoLabel");
		inactiveTab = document.getElementById("homeLabel");
	}
	else {
		activeTab = document.getElementById("homeLabel");
		inactiveTab = document.getElementById("autoLabel");
	}
	
	activeTab.className = tabSelected;
	inactiveTab.className = tabHeading;
	
	var oldQuote = document.getElementById(curQuote);
	curQuote = quote;
	var newQuote = document.getElementById(quote);
	
	oldQuote.style.display = "none";
	newQuote.style.display = "block";
}

function getRequestBody(oForm)
{
	var aParams = new Array();
	
	for (var i = 0; i < oForm.elements.length; i++)
	{
		var sParam = encodeURIComponent("js_" + oForm.elements[i].id);
		sParam += "=";
		
		if ((oForm.elements[i].type == "checkbox" && oForm.elements[i].checked) || oForm.elements[i].type != "checkbox")
			sParam += encodeURIComponent(oForm.elements[i].value);

		else
			sParam += encodeURIComponent("");

		aParams.push(sParam);
	}
	return aParams.join("&");
}

function initQuoteForm()
{
	var oForm = document.getElementById("f");
	
	// Setup date combo boxes
	m = oForm.month;
	d = oForm.day;
	y = oForm.year;
	vy = oForm.vehYear;
	
	var i;
	
	// add months
	for (i = 1; i <= 12; i++) {
		m.options[i-1] = (new Option(i,i));
	}
	 
	// add days
	for (i = 1; i <= 31; i++) {
		d.options[i-1] = (new Option(i,i));
	}
	
	// add years
	var curDate = new Date();
	var endYear = curDate.getFullYear() - 16;
	var startYear = curDate.getFullYear() - 100;
	
	debug ("going from " + startYear + " to " + endYear);
	for (i = startYear; i <= endYear; i++) {
		y.options[i - startYear] = (new Option(i,i));
	}
	y.options.selectedIndex = y.options.length - 1;
	
	//add vehYears
	for (i = startYear; i <= endYear + 16; i++) {
		vy.options[i - startYear] = (new Option(i,i));
	}
	vy.options.selectedIndex = vy.options.length - 1;
	
	// show form elements
	var oFormInfo   = document.getElementById("Personal");
	var oFormTabs   = document.getElementById("Tabs");
	var oFormAuto   = document.getElementById("Auto");
	var oFormSubmit = document.getElementById("Button");
	
	oFormInfo.style.display = "block";
	oFormTabs.style.display = "block";
	oFormAuto.style.display = "block";
	oFormSubmit.style.display = "block";
}

function submitQuote()
{
	var oForm = document.getElementById("f");
	
	if (validateQuote(oForm)) {
		sendQuoteRequest(oForm);
	}
	
	return false;
}

function sendQuoteRequest(oForm)
{
	var sBody = getRequestBody(oForm);
	
	var oXmlHttp = createXMLHttpRequest();
	oXmlHttp.open("post", "emailer.php", true);
	oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	oXmlHttp.onreadystatechange =
		function()
		{
			if (oXmlHttp.readyState == 4)
			{
				if (oXmlHttp.status == 200)
					displayServerResponse(oXmlHttp.responseText);
				else
					displayServerResponse("Error: " + oXmlHttp.statusText);
			}
		};
	oXmlHttp.send(sBody);
}

function validateQuote(oForm)
{
	var retVal = true;			// Return value
	var focusSet = false;			// Has the focus been set on an invalid field yet?
	var focusedOn = 9999;			// Which field has the focus?
	var aRequired = new Array();	// Required fields
	var aDoubles = new Array();	// Require a double as input
	
	// Give each field an order property
	for (var i=0; i < oForm.elements.length; i++) {
		oForm.elements[i].order = i;
	}
	
	aRequired.push(oForm.fullname);
	aRequired.push(oForm.phone);
	aRequired.push(oForm.email);
		
	debug("validateQuote called");
	
	// What type of quote is it?
	if (oForm.quoteType.value == "Auto") {
		debug("Checking your auto quote");
		
		// Add required fields
		aRequired.push(oForm.make);
		aRequired.push(oForm.model);
		if (oForm.convictions.checked) {
			aRequired.push(oForm.convictionsDesc);
		}
		if (oForm.accidents.checked) {
			aRequired.push(oForm.accidentsDesc);
		}
		aRequired.push(oForm.useDesc);
		aRequired.push(oForm.distance);
		
		// Add double fields
		aDoubles.push(oForm.distance);
	}
	else if (oForm.quoteType.value == "Home") {
		debug("Checking your home quote");
		
		// Add required fields
		aRequired.push(oForm.homeAge);
		aRequired.push(oForm.sqFeet);
		aRequired.push(oForm.sqFeetDeck);
		aRequired.push(oForm.bathrooms);
		aRequired.push(oForm.fireHallDist);
		aRequired.push(oForm.hydrantDist);
		aRequired.push(oForm.insuredVal);
		
		// Add double fields
		aDoubles.push(oForm.homeAge);
		aDoubles.push(oForm.sqFeet);
		aDoubles.push(oForm.sqFeetDeck);
		aDoubles.push(oForm.bathrooms);
		aDoubles.push(oForm.fireHallDist);
		aDoubles.push(oForm.hydrantDist);
	}
	
	// Check for empty fields
	for (var i = 0; i < aRequired.length; i++) {
		var field = aRequired[i];
		debug("checking " + field.id + "(" + field.order + "): " + field.value);
		if (isEmpty(field)) {
			debug(field.id + " is empty");
			retVal = false;
			
			// Check if focus has been set yet
			if (!focusSet || focusedOn > field.order) {
				field.focus();
				focusSet = true;
				focusedOn = field.order;
			}
			field.style.backgroundColor = invalidFieldColor;
		}
		else {
			field.style.backgroundColor = validFieldColor;
		}		
	}
	
	// Check doubles
	for (var i = 0; i < aDoubles.length; i++) {
		var field = aDoubles[i];
		debug("checking " + field.id + "(" + field.order + "): " + field.value);
		if (!isDouble(field)) {
			debug(field.id + " is not a double");
			retVal = false;
			
			// Check if focus has been set yet
			if (!focusSet || focusedOn > field.order) {
				field.focus();
				focusSet = true;
				focusedOn = field.order;
			}
			field.style.backgroundColor = invalidFieldColor;
		}
		else {
			field.style.backgroundColor = validFieldColor;
		}
	}
	
	// Check phone
	var phone = oForm.phone;
	debug("checking " + phone.id + "(" + phone.order + "): " + phone.value);
	if (!isPhone(phone)) {
		debug("invalid phone number");
		retVal = false;
		
		// Check if focus has been set yet
		if (!focusSet || focusedOn > phone.order) {
			phone.focus();
			focusSet = true;
			focusedOn = phone.order;
		}
		phone.style.backgroundColor = invalidFieldColor;
	}
	else {
		makePhone(phone);
		phone.style.backgroundColor = validFieldColor;
	}
	
	// Check email
	var email = oForm.email;
	debug("checking " + email.id + "(" + email.order + "): " + email.value);
	if (!isEmail(email)) {
		debug("invalid email address");
		retVal = false;
		
		// Check if focus has been set yet
		if (!focusSet || focusedOn > email.order) {
			email.focus();
			focusSet = true;
			focusedOn = email.order;
		}
		email.style.backgroundColor = invalidFieldColor;
	}
	else {
		email.style.backgroundColor = validFieldColor;
	}
	
	return retVal;
}

function createXMLHttpRequest()
{
	var objXML = null;
	
	// Create the XMLHttp object in Mozilla/Safari/Opera
	if (typeof XMLHttpRequest != "undefined")
	{
		objXML = new XMLHttpRequest();
	}
	// Create the XMLHttp object in IE
	else if(window.ActiveXObject)
	{
		var arrMSXML =	[
							"MSXML2.XMLHttp.5.0",
							"MSXML2.XMLHttp.4.0",
							"MSXML2.XMLHttp.3.0",
							"MSXML2.XMLHttp",
							"Microsoft.XMLHttp"
						];
		var i = 0;
		while(objXML == null && i < arrMSXML.length)
		{
			try
			{
				objXML = new ActiveXObject(arrMSXML[i]);
			} 
			catch(objError)
			{
				// Do nothing
			}
			i++;
		}
	}
	if (objXML == null)
		throw new Error("XMLHttp object could not be created.");
	
	return objXML;	
	
}

function displayServerResponse(text) {
	var oFormInfo   = document.getElementById("Personal");
	var oFormTabs   = document.getElementById("Tabs");
	var oFormAuto   = document.getElementById("Auto");
	var oFormHome   = document.getElementById("Home");
	var oFormSubmit = document.getElementById("Button");
	
	oFormInfo.style.display = "none";
	oFormTabs.style.display = "none";
	oFormAuto.style.display = "none";
	oFormHome.style.display = "none";
	oFormSubmit.style.display = "none";

	var divResponse = document.getElementById("serverResponse");
	divResponse.innerHTML = "<p>" + text + "</p>";
	
	// Force Safari to redraw page
	if(navigator.appVersion.indexOf('AppleWebKit') > 0) {	
		var fake = document.createElement("div");
		document.appendChild(fake);
	}
}


