var m_strPage;
var m_ptrSearchForm;
var m_ptrSearchControls;
var m_ptrSearchSubmit;
var m_ptrEmailUpdate;
var m_ptrEmailUpdateSubmit;
var m_ptrAdvancedSearch;
var m_ptrAdvancedSearchToggle;
var m_ptrSideBar;
var m_xmlHttp;
var m_xmlRangeDetails = null;
var m_oRangeData = null;

var m_strRange = "";
var m_strModel = "";
var m_strBody = "";
var m_strFuel = "";

/* PROTOTYPES */
if(!Array.prototype.push) {
	function array_push() {
		for(var i=0;i<arguments.length;i++)
			this[this.length]=arguments[i];
		return this.length;
	}
	Array.prototype.push = array_push;
}

if(!Array.prototype.pop) {
	function array_pop(){
		lastElement = this[this.length-1];
		this.length = Math.max(this.length-1,0);
		return lastElement;
	}
	Array.prototype.pop = array_pop;
}

/* DOM */

if ((!document.all) && (document.getElementById))
{
	function AddNodeEvent(oNode, sEvent, sFunction)
	{
		oNode.setAttribute(sEvent, sFunction);
	};
}
else if ((document.all) && (document.getElementById))
{
	function AddNodeEvent(oNode, sEvent, sFunction)
	{
		oNode[sEvent] = new Function(sFunction);
	};
};

// fix for IE's document.getElementById implementation
if (document.all)
{
	document.getElementById_IE = function(strId)
	{
		var ptrEl = document.getElementById(strId);
		var ptrNewEl;
		var arEls;
		var i;
		
		if (!ptrEl.id || (ptrEl.id != strId))
		{
			arEls = document.getElementsByName(strId);
			
			for (i = 0; i < arEls.length; i++)
			{
				ptrNewEl = arEls[i];
				
				if (ptrNewEl.id == strId)
				{
					return ptrNewEl;
				};
			};
		};
		
		return ptrEl;
	};
};

/* GENERAL FUNCTIONS */
function hasClassName(ptrEl, strClass) {
	if (!ptrEl) return;
	
	var a = ptrEl.className.split(" ");
	var i;
	for (i = 0; i < a.length; i++)
	{
		if (a[i] == strClass)
		return true;
	};
	return false;
};

function addClassName (ptrEl, strClass) {
	if (!ptrEl) return;
	
	removeClassName(ptrEl, strClass);
	ptrEl.className += ' ' + strClass;
};

function removeClassName (ptrEl, strClass) {
	if (!ptrEl) return;
	
	var strNewClass = "";
	var a = ptrEl.className.split(" ");
	for (var i = 0; i < a.length; i++)
	{
		if (a[i] != strClass) {
			if (i > 0)
			{
				strNewClass += " ";
			};
			strNewClass += a[i];
		};
	};
	ptrEl.className = strNewClass;
};

function getPosition(el)
{
	var oCoords;
	
	if (!el) return;
	
	oCoords = {x: 0, y: 0};
	
	while (el)
	{
		oCoords.x += el.offsetLeft;
		oCoords.y += el.offsetTop;
		
		el = el.offsetParent;
	}
	
	return oCoords;
}

/* fading */
var m_timeoutFade;
function fade(strEl, iStartOpacity, iEndOpacity, iDuration)
{	
	if (iDuration == 0)
	{
		changeOpacity(strEl, iEndOpacity);
		return;
	};
	
	var iStep = (100 / iDuration) / 10;
	
	clearTimeout(m_timeoutFade);
	m_timeoutFade = setTimeout("fadeRecurse('" + strEl + "', " + iStartOpacity + ", " + iEndOpacity + ", " + iStep + ", " + iStartOpacity + ")", 100);
};

function fadeRecurse(strEl, iStartOpacity, iEndOpacity, iStep, iOpacity)
{
	changeOpacity(strEl, iOpacity);
	
	if (iStartOpacity == iEndOpacity)
	{
		return;
	};
	
	if (iStartOpacity > iEndOpacity)
	{
		if (iOpacity <= iEndOpacity)
		{
			return;
		};
		
		iOpacity -= iStep;
	}
	else if (iStartOpacity < iEndOpacity)
	{
		if (iOpacity >= iEndOpacity)
		{
			return;
		};
		
		iOpacity += iStep;
	};
	
	clearTimeout(m_timeoutFade);
	m_timeoutFade = setTimeout("fadeRecurse('" + strEl + "', " + iStartOpacity + ", " + iEndOpacity + ", " + iStep + ", " + iOpacity + ")", 100);
};

function changeOpacity(strEl, iOpacity)
{
	var ptrEl = document.getElementById(strEl);
	
	if (!ptrEl)
	{
		return;
	};
	
	var oStyle = ptrEl.style;
	
	oStyle.opacity = (iOpacity / 100);
	oStyle.MozOpacity = (iOpacity / 100);
	oStyle.KhtmlOpacity = (iOpacity / 100);
	oStyle.filter = "alpha(opacity=" + iOpacity + ")"; 
};

/* styledSelect class and extended functions */
var styledSelect_replaceSuffix = "_replaced";
var styledSelect_lastSelected = "";
document.styledSelectOpen = "";

function styledSelect(ptrSelect)
{
	this.origSelect = ptrSelect;
	
	this.initialise = function()
	{
		var i;
		
		this.id = this.origSelect.id + styledSelect_replaceSuffix;
		this.origSelect.styledSelect = this;
		
		for (i = 0; i < this.origSelect.options.length; i++)
		{
			this.origSelect.options[i].display = true;
		};
	};
	
	this.initialise();
	
	this.build = function()
	{
		var i;
		
		// new
		this.element = document.createElement("div");
		this.element.id = this.id;
		this.element.className = "select";
		this.element.onmousedown = function() { return false; };
		this.element.onselectstart = function() { return false; };
		
		AddNodeEvent(this.element, "onmouseover", "styledSelect_toggleCloseEvent(false, \"" + this.id + "\");");
		AddNodeEvent(this.element, "onmouseout", "styledSelect_toggleCloseEvent(true, \"" + this.id + "\");");

		this.header = document.createElement("span");
		AddNodeEvent(this.header, "onclick", "styledSelect_toggleClose(false, \"" + this.id + "\");");
		this.header.appendChild(document.createTextNode(this.origSelect.options[this.origSelect.selectedIndex].text));

		this.list = document.createElement("ul");
		
		for (i = 0; i < this.origSelect.options.length; i++)
		{
			if (this.origSelect.options[i].display)
			{
				this.list.appendChild(this.createOption(i));
			};
		};

		this.element.appendChild(this.header);
		this.element.appendChild(this.list);
	};
	
	this.createOption = function(iPos)
	{
		var elListItem = document.createElement("li");
		elListItem.id = this.id + "_option_" + iPos;
		elListItem.onmouseover = function() { addClassName(this, "hover"); };
		elListItem.onmouseout = function() { removeClassName(this, "hover"); };
		
		if (iPos == this.origSelect.selectedIndex)
		{
			elListItem.className = "active";
		};
		
		AddNodeEvent(elListItem, "onclick", "styledSelect_selectOption('" + this.origSelect.id + "', " + iPos + ");");
		
		elListItem.appendChild(document.createTextNode(this.origSelect.options[iPos].text));
		return elListItem;
	};
	
	this.reset = function()
	{
		var i;
		
		for (i = 0; i < this.origSelect.options.length; i++)
		{
			this.origSelect.options[i].display = true;
			this.origSelect.options[i].selected = false;
		};
		
		this.origSelect.options[0].selected = true;
		
		this.output();
	};
	
	this.output = function()
	{
		var iMaxHeight = 274;
		
		this.build();
		
		var ptrParent = this.origSelect.parentNode;
		var ptrEl = document.getElementById(this.element.id);
		
		if (ptrEl)
		{
			ptrParent.removeChild(ptrEl);
		};
		
		this.list.style.position = "absolute";
		this.list.style.visibility = "hidden";

		ptrParent.insertBefore(this.element, this.origSelect);
		
		if (this.list.offsetHeight > iMaxHeight)
		{
			this.list.style.height = iMaxHeight + "px";
			this.list.style.overflow = "auto";
			this.list.className = "scroll";
		};
		
		this.list.style.display = "none";
		this.list.style.visibility = "visible";
		this.origSelect.style.display = "none";
	};
};

function styledSelect_selectOption(strEl, iOption)
{
	var ptrSelect = document.getElementById(strEl);
	var ptrReplacedSelect = document.getElementById(strEl + styledSelect_replaceSuffix);
	var ptrReplacedOption = document.getElementById(ptrReplacedSelect.id + "_option_" + iOption);
	var ptrSelectHead = ptrReplacedSelect.getElementsByTagName("span")[0];
	
	// check correct element has been returned
	// (IE will return an element based on its name as well as its id, so messes this up on the search page)
	if (!ptrSelect.id || (ptrSelect.id != strEl))
	{
		ptrSelect = document.getElementById_IE(strEl);
	};
	
	// changing the text in the head is in a try..catch to work around an "unknown runtime error" in IE
	try
	{
		ptrSelectHead.innerHTML = ptrSelect.options[iOption].text;
	}
	catch(ex)
	{
		ptrSelectHead.innerText = ptrSelect.options[iOption].text;
	}
	
	ptrReplacedOption.className = "active";
	
	if (ptrSelect.selectedIndex != iOption)
	{
		ptrReplacedOption = document.getElementById(ptrReplacedSelect.id + "_option_" + ptrSelect.selectedIndex);
		ptrReplacedOption.className = "";
	};
	
	ptrSelect.selectedIndex = iOption;
	styledSelect_toggleClose(true, strEl + styledSelect_replaceSuffix);
	
	// perform onclick from original option if it exists
	if (ptrSelect[iOption].onclick)
	{
		ptrSelect[iOption].onclick();
	};
};

function styledSelect_toggleCloseEvent(bEnable, strEl)
{
	if (bEnable)
	{
		document.onclick = function(){styledSelect_toggleClose(true, strEl)};
	}
	else
	{
		document.onclick = "";
	};
};

function styledSelect_toggleClose(bClose, strEl)
{
	var ptrReplacedSelect = document.getElementById(strEl);
	var strOpenSelect = document.styledSelectOpen;
	
	if (!ptrReplacedSelect) return;
	
	var ptrSelectHead = ptrReplacedSelect.getElementsByTagName("span")[0];
	var ptrSelectList = ptrReplacedSelect.getElementsByTagName("ul")[0];
	
	var arCells, i;
	
	if (strOpenSelect != "")
	{
		document.styledSelectOpen = "";
		styledSelect_toggleClose(true, strOpenSelect)
	};
	
	if (bClose)
	{
		ptrSelectList.style.display = "none";
		AddNodeEvent(ptrSelectHead, "onclick", "styledSelect_toggleClose(false, '" + strEl + "');");
		
		arCells = ptrSelectList.getElementsByTagName("li");
		
		for (i = 0; i < arCells.length; i++)
		{
			removeClassName(arCells[i], "hover");
		};
	}
	else
	{

		if(!hasClassName(ptrReplacedSelect, "disabled"))
		{
			document.styledSelectOpen = strEl;
			ptrSelectList.contents = ptrSelectList.innerHTML;
			ptrSelectList.style.display = "block";

			AddNodeEvent(ptrSelectHead, "onclick", "styledSelect_toggleClose(true, '" + strEl + "');");
		}
	};
};

function replaceSelects()
{
	var arSelects = document.getElementsByTagName("select");
	var i, oStyledSelect;
	
	for (i = 0; i < arSelects.length; i++)
	{
		if ((arSelects[i].style.display != "none") && (arSelects[i].className != "no-replace"))
		{
			oStyledSelect = new styledSelect(arSelects[i]);
			oStyledSelect.output();
		}
	};
};

function resetSelects(ptrParent)
{
	var arSelects;
	
	if (ptrParent)
	{
		arSelects = ptrParent.getElementsByTagName("select");
	}
	else
	{
		arSelects = document.getElementsByTagName("select");
	};
	
	for (i = 0; i < arSelects.length; i++)
	{
		if (arSelects[i].styledSelect)
		{
			arSelects[i].styledSelect.reset();
		};
	};
};

function selectOption(ptrSelect, strValue)
{
	var i;
	
	for (i = 0; i < ptrSelect.options.length; i++)
	{
		if ((ptrSelect.options[i].value == strValue) && (ptrSelect.options[i].display))
		{
			ptrSelect.options[i].selected = true;
			return true;
		};
	};
	
	return false;
};

/* search functions */
function setupSearch()
{
	if (!m_ptrSearchForm)
	{
		return;
	};
	
	var ptrEl;
	toggleAdvancedSearch();
	
	if (testAdvancedSearch())
	{
		toggleAdvancedSearch();
	};
	
	if (m_ptrSearchSubmit)
	{
		try
		{
			m_ptrSearchSubmit.type = "image";
			m_ptrSearchSubmit.src = "img/btn-search.png";
		}
		catch(ex)
		{
			m_ptrSearchSubmit.outerHTML = "<input type=\"image\" id=\"btnSearchSubmit\" src=\"img/btn-search.png\" />";
			m_ptrSearchSubmit = document.getElementById("btnSearchSubmit");
		};
	};
	
	if (m_ptrEmailUpdateSubmit)
	{
		try
		{
			m_ptrEmailUpdateSubmit.type = "image";
			m_ptrEmailUpdateSubmit.src = "img/btn-go.gif";
		}
		catch(ex)
		{
			m_ptrEmailUpdateSubmit.outerHTML = "<input type=\"image\" id=\"btnEmailUpdatesSubmit\" src=\"img/btn-go.gif\" />";
		};
	};
	
	if (m_ptrEmailUpdate)
	{
		ptrEl = m_ptrEmailUpdate.txtEmailUpdates;
		
		if (ptrEl)
		{
			ptrEl.defaultText = "Email Address";
			ptrEl.onclick = function()
			{
				if (this.value == this.defaultText)
				{
					this.value = "";
				};
			};
			ptrEl.onblur = function()
			{
				if (this.value == "")
				{
					this.value = this.defaultText;
				};
			};
			
			m_ptrEmailUpdate.onsubmit = function()
			{
				this.txtEmailUpdates.onclick();
			};
		};
	};
	
	ptrEl = m_ptrSearchForm.txtSearchPostcode;
	
	if (ptrEl)
	{
		ptrEl.defaultText = "Postcode";
		ptrEl.onclick = function()
		{
			if (this.value == this.defaultText)
			{
				this.value = "";
			};
		};
		ptrEl.onblur = function()
		{
			if (this.value == "")
			{
				this.value = this.defaultText;
			};
		};
		
		m_ptrSearchForm.onsubmit = function()
		{
			this.txtSearchPostcode.onclick();
		};
	};
	
	getRangeDetails();
	setupEvents(true);
};

function setupEvents(bSkipSelection)
{
	resetListItemEvents("slModel", modelClick, bSkipSelection);
	resetListItemEvents("slBodyStyle", bodyStyleClick, bSkipSelection);
	resetListItemEvents("slFuelType", fuelTypeClick, bSkipSelection);
	resetRangeEvents(bSkipSelection);
};

function resetRangeEvents(bSkipSelection)
{
	var arEls;
	var ptrEl;
	var i;
	
	arEls = document.getElementById("slRange" + styledSelect_replaceSuffix).getElementsByTagName("li");
	
	for (i = 0; i < arEls.length; i++)
	{
		ptrEl = arEls[i];
		
		if (!ptrEl.oldonclick)
		{
			ptrEl.oldmouseover = ptrEl.onmouseover;
			ptrEl.oldmouseout = ptrEl.onmouseout;
			ptrEl.oldonclick = ptrEl.onclick;
		};

		ptrEl.onmouseover = rangeMouseOver;
		ptrEl.onmouseout = rangeMouseOut;
		ptrEl.onclick = rangeClick;

		if (!bSkipSelection)
		{
			if ((i > 0) && (m_ptrSearchForm.slRange.selectedIndex == i))
			{
				ptrEl.onclick();
			};
		};
	};
};

function resetRangeDependantSelects()
{
	m_strModel = m_ptrSearchForm.slModel.options[m_ptrSearchForm.slModel.selectedIndex].value;
	m_strBody = m_ptrSearchForm.slBodyStyle.options[m_ptrSearchForm.slBodyStyle.selectedIndex].value;
	m_strFuel = m_ptrSearchForm.slFuelType.options[m_ptrSearchForm.slFuelType.selectedIndex].value;
	
	m_ptrSearchForm.slModel.styledSelect.reset();
	m_ptrSearchForm.slBodyStyle.styledSelect.reset();
	m_ptrSearchForm.slFuelType.styledSelect.reset();
	
	getFilteredSearchOptions("range");
	
	execute_http_request(null, selectNewRangeOptions);
};

function selectNewRangeOptions()
{
	var bSelectedOption = false;
	
	if (selectOption(m_ptrSearchForm.slModel, m_strModel) && (m_strModel != ""))
	{
		bSelectedOption = true;
	};
	
	if (selectOption(m_ptrSearchForm.slBodyStyle, m_strBody) && (m_strBody != ""))
	{
		bSelectedOption = true;
	};
	
	if (selectOption(m_ptrSearchForm.slFuelType, m_strFuel) && (m_strFuel != ""))
	{
		bSelectedOption = true;
	};
	
	if (bSelectedOption)
	{
		getFilteredSearchOptions("range");
	};
};

function rangeMouseOver()
{
	this.oldmouseover();
	
	var strRangeID = m_ptrSearchForm.slRange.options[this.id.split("_option_")[1]].value;
	var arEls = m_xmlRangeDetails.getElementsByTagName("range");
	var elRangePreview;
	var nodeRange = null;
	var strImage = "";
	var strDescription = "";
	var i;
	
	var strID;
		
	for (i = 0; i < arEls.length; i++)
	{
		strID = arEls[i].getAttribute("id");
		
		if (arEls[i].getAttribute("id") == strRangeID)
		{
			nodeRange = arEls[i];
			break;
		};
	};
	
	if (nodeRange)
	{
		arEls = nodeRange.getElementsByTagName("image");
		if (arEls.length > 0)
		{
			if (arEls[0].firstChild)
			{
				strImage = "<img src=\"img/" + arEls[0].firstChild.nodeValue + "\" alt=\"\" />";
			};
		};
		arEls = nodeRange.getElementsByTagName("description");
		if (arEls.length > 0)
		{
			if (arEls[0].firstChild)
			{
				strDescription = "<span>" + arEls[0].firstChild.nodeValue + "</span>";
			};
		};
		
		if ((strImage != "") || (strDescription != ""))
		{
			elRangePreview = document.createElement("div");
			elRangePreview.id = "divRangePreview";
			elRangePreview.innerHTML = strImage + strDescription;
			m_ptrSearchForm.insertBefore(elRangePreview, m_ptrSearchForm.firstChild);
		};
	};
};

function rangeMouseOut()
{
	this.oldmouseout();
	
	var ptrEl = document.getElementById("divRangePreview");
	
	if (ptrEl)
	{
		ptrEl.parentNode.removeChild(ptrEl);
	};
};

function rangeClick()
{
	this.oldonclick();
	this.onmouseout();
	
	toggleSevenSeats();
	resetRangeDependantSelects();
};

function modelClick()
{
	this.oldonclick();
	this.onmouseout();
	
	getFilteredSearchOptions("model");
};

function bodyStyleClick()
{
	this.oldonclick();
	this.onmouseout();
	
	getFilteredSearchOptions("body");
	toggleSevenSeats();
};

function fuelTypeClick()
{
	this.oldonclick();
	this.onmouseout();
	
	getFilteredSearchOptions("fuel");
};

function idEarlierInArray(a, pos, id)
{
	for(var i = 0; i < pos; i++)
	{
		if(a[i].id == id)
		{
			return true;
		}
	};
	return false;
};

function getRangeDetails()
{
	var strXmlUrl = "xml/range-data.xml";
	
	execute_http_request(strXmlUrl, buildRangeDetails);
};

function buildRangeDetails()
{
	if (http_xml_gateway.readyState == 4)
	{
		if (http_xml_gateway.status == 200)
		{
			m_xmlRangeDetails = http_xml_gateway.responseXML;
			
			resetRangeEvents();
		};
	};
};

function getFilteredSearchOptions(strType)
{
	var strXmlUrl = "xml-searchfilter.aspx?type=" + strType;
	var strRange = m_ptrSearchForm.slRange.options[m_ptrSearchForm.slRange.selectedIndex].value;
	var strModel = m_ptrSearchForm.slModel.options[m_ptrSearchForm.slModel.selectedIndex].value;
	var strBody = m_ptrSearchForm.slBodyStyle.options[m_ptrSearchForm.slBodyStyle.selectedIndex].value;
	var strFuel = m_ptrSearchForm.slFuelType.options[m_ptrSearchForm.slFuelType.selectedIndex].value;
	
	if ((strType != "range") && (strType != "model"))
	{
		m_ptrSearchForm.slRange.styledSelect.header.firstChild.nodeValue = "Filtering...";
	}
	
	if (strType != "model")
	{
		m_ptrSearchForm.slModel.styledSelect.header.firstChild.nodeValue = "Filtering...";
	}
	
	if (strType != "body")
	{
		m_ptrSearchForm.slBodyStyle.styledSelect.header.firstChild.nodeValue = "Filtering...";
	}
	
	if (strType != "fuel")
	{
		m_ptrSearchForm.slFuelType.styledSelect.header.firstChild.nodeValue = "Filtering...";
	}
	
	if ((strRange && strType != "model") || (strModel == ""))
	{
		strXmlUrl += "&range=" + strRange;
	}
	
	if (strModel)
	{
		strXmlUrl += "&model=" + strModel;
	}
	
	if (strBody)
	{
		strXmlUrl += "&body=" + strBody;
	}
	
	if (strFuel)
	{
		strXmlUrl += "&fuel=" + strFuel;
	}
	
	execute_http_request(strXmlUrl, filterSearchOptions);
};

function filterSearchOptions()
{
	var elRoot;
	
	if (http_xml_gateway.readyState == 4)
	{
		if (http_xml_gateway.status == 200)
		{
			elRoot = http_xml_gateway.responseXML.getElementsByTagName("search-filter")[0];
			
			filterSpecificSearchOption("range", elRoot);
			filterSpecificSearchOption("model", elRoot);
			filterSpecificSearchOption("body", elRoot);
			filterSpecificSearchOption("fuel", elRoot);
		};
		
	};
};

function filterSpecificSearchOption(strType, elRoot)
{
	var ptrSelect;
	var strLastFilter = elRoot.getAttribute("type");
	var arEls;
	var i, j;
	var bMatch;
	var fnOnClick;
	
	switch (strType)
	{
		case "range":
			ptrSelect = m_ptrSearchForm.slRange;
			fnOnClick = rangeClick;
			break;
		
		case "model":
			ptrSelect = m_ptrSearchForm.slModel;
			fnOnClick = modelClick;
			break;
		
		case "body":
			ptrSelect = m_ptrSearchForm.slBodyStyle;
			fnOnClick = bodyStyleClick;
			break;
		
		case "fuel":
			ptrSelect = m_ptrSearchForm.slFuelType;
			fnOnClick = fuelTypeClick;
			break;
	};
	
	if ((strType != strLastFilter) || (ptrSelect.selectedIndex == 0))
	{
		arEls = elRoot.getElementsByTagName(strType);
		
		for (i = 0; i < ptrSelect.options.length; i++)
		{
			if (ptrSelect.options[i].value == "")
			{
				continue;
			};
			
			bMatch = false;
			
			for (j = 0; j < arEls.length; j++)
			{
				if (arEls[j].getAttribute("id").toLowerCase() == ptrSelect.options[i].value.toLowerCase())
				{
					if ((strLastFilter == "model") && (strType == "range"))
					{
						if (arEls[j].getAttribute("selected") == "1")
						{
							bMatch = true;
						};
					}
					else
					{
						bMatch = true;
					};
				};
			};
			
			if ((strLastFilter == "model") && (strType == "range"))
			{
				ptrSelect.options[i].selected = bMatch;
			}
			else
			{
				ptrSelect.options[i].display = bMatch;
			};
		};
		
		if (!ptrSelect.options[ptrSelect.selectedIndex].display)
		{
			ptrSelect.options[0].selected = true;
		};
		
		ptrSelect.styledSelect.output();
		
		resetListItemEvents(ptrSelect.id, fnOnClick, true);
	};
};

function resetListItemEvents(strSelect, fnOnClick, bSkipSelection)
{
	
	var arEls = document.getElementById(strSelect + styledSelect_replaceSuffix).getElementsByTagName("li");
	
	for (i = 0; i < arEls.length; i++)
	{
		ptrEl = arEls[i];
		
		if (!ptrEl.oldonclick)
		{
			ptrEl.oldonclick = ptrEl.onclick;
		};
		
		ptrEl.onclick = fnOnClick;
		
		if (!bSkipSelection)
		{
			if ((i > 0) && (m_ptrSearchForm[strSelect].selectedIndex == i))
			{
				ptrEl.onclick();
			};
		};
	};
}

function resetSearch()
{
	var arEls;
	var i;
	
	if (m_ptrSearchForm)
	{
		arEls = m_ptrSearchForm.getElementsByTagName("select");
		
		for (i = 0; i < arEls.length; i++)
		{
			arEls[i].selectedIndex = 0;
		};
		
		arEls = m_ptrSearchForm.getElementsByTagName("input");
		
		for (i = 0; i < arEls.length; i++)
		{
			switch (arEls[i].type)
			{
				case "text":
					if (arEls[i].defaultText)
					{
						arEls[i].value = arEls[i].defaultText;
					}
					else
					{
						arEls[i].value = "";
					};
					break;
				case "checkbox":
					arEls[i].checked = false;
					break;
			};
		};
		
		resetSelects(m_ptrSearchForm);
		setupEvents();
		toggleSevenSeats();
	};
};

function testAdvancedSearch()
{
	var arEls;
	var i;
	
	if (m_ptrAdvancedSearch)
	{
		arEls = m_ptrAdvancedSearch.getElementsByTagName("select");
		
		for (i = 0; i < arEls.length; i++)
		{
			if (arEls[i].selectedIndex != 0)
			{
				return true;
			};
		};
		
		arEls = m_ptrAdvancedSearch.getElementsByTagName("input");
		
		for (i = 0; i < arEls.length; i++)
		{
			switch (arEls[i].type)
			{
				case "text":
					if (arEls[i].value != "")
					{
						return true;
					};
					break;
				case "checkbox":
					if (arEls[i].checked)
					{
						return true;
					};
					break;
			};
		};
	};
	
	return false;
};

function toggleAdvancedSearch()
{
	if (!m_ptrAdvancedSearch)
	{
		return;
	};

	var oElement;
	var strAdvancedSearchToggleName = "btnAdvancedSearchToggle";
	
	if (m_ptrAdvancedSearchToggle)
	{
		m_ptrSearchControls.removeChild(m_ptrAdvancedSearchToggle);
	};
	
	oElement = document.createElement("p");
	oElement.id = strAdvancedSearchToggleName;
	
	if (m_ptrAdvancedSearch.style.display == "none")
	{
		m_ptrAdvancedSearch.style.display = "block";
		oElement.innerHTML = "<a href=\"javascript: toggleAdvancedSearch()\">Quick Search</a> | <a href=\"javascript: resetSearch()\">Reset</a>";
		m_ptrSearchControls.appendChild(oElement);
		m_ptrAdvancedSearchToggle = document.getElementById(strAdvancedSearchToggleName);
	}
	else
	{
		m_ptrAdvancedSearch.style.display = "none";
		oElement.innerHTML = "<a href=\"javascript: toggleAdvancedSearch()\"><b>More Search Options</b></a> | <a href=\"javascript: resetSearch()\">Reset</a>";
		m_ptrSearchControls.appendChild(oElement);
		m_ptrAdvancedSearchToggle = document.getElementById(strAdvancedSearchToggleName);
	};
};

function toggleSevenSeats()
{
	if (!m_ptrSearchForm)
	{
		return;
	};
	
	if
	(
		(m_ptrSearchForm.slRange.options[m_ptrSearchForm.slRange.selectedIndex].text.toLowerCase() == "m-class") ||
		(
			(m_ptrSearchForm.slRange.options[m_ptrSearchForm.slRange.selectedIndex].text.toLowerCase() == "e-class") &&
			(m_ptrSearchForm.slBodyStyle.options[m_ptrSearchForm.slBodyStyle.selectedIndex].text.toLowerCase() == "estate")
		) 
	)
	{
		m_ptrSearchForm.chkFeature7Seats.parentNode.style.display = "block";
	}
	else
	{
		m_ptrSearchForm.chkFeature7Seats.checked = false;
		m_ptrSearchForm.chkFeature7Seats.parentNode.style.display = "none";
	};
};

function removeJSMessages()
{
	var arEls = document.getElementsByTagName("div");
	var i, ptrEl;
	
	for (i = 0; i < arEls.length; i++)
	{
		ptrEl = arEls[i];
		
		if (hasClassName(ptrEl, "no-javascript"))
		{
			ptrEl.parentNode.removeChild(ptrEl);
		};
	};
};

var g_iNavClearTimeout = null;

function setupNavTips()
{
	var elNav;
	var elLink;
	var arEls;
	var i;
	
	elNav = document.getElementById("nav-main");
	
	if (!elNav)
	{
		return;
	}
	
	arEls = elNav.getElementsByTagName("a");
	
	for (i = 0; i < arEls.length; i++)
	{
		elLink = arEls[i];
		
		if (elLink.title)
		{
			elLink.id = "nav-link-" + i;
			elLink.tooltip = elLink.title;
			elLink.title = "";
			elLink.onmouseover = elLink.onfocus = function()
			{
				//showNavTip(this);
				clearTimeout(g_iNavClearTimeout);
				g_iNavClearTimeout = setTimeout("showNavTip('" + this.id + "')", 100);
			}
			elLink.onmouseout = elLink.onblur = function()
			{
				clearTimeout(g_iNavClearTimeout);
				g_iNavClearTimeout = setTimeout("hideNavTip()", 500);
			}
		}
	}
};

function showNavTip(strLinkID)
{
	var elLink;
	var elToolTip;
	var elPara;
	var strElId;
	var oCoords;
	
	strElId = "tooltip";
	elToolTip = document.getElementById(strElId);
	elLink = document.getElementById(strLinkID);
	
	clearTimeout(g_iNavClearTimeout);
	
	if (!elToolTip)
	{
		elToolTip = document.createElement("div");
		elToolTip.id = strElId;
		
		elPara = document.createElement("p");
		elToolTip.appendChild(elPara);
		
		document.getElementsByTagName("body")[0].appendChild(elToolTip);
	}
	else
	{
		removeClassName(elToolTip.link, "hover");
		elPara = elToolTip.getElementsByTagName("p")[0];
		elPara.removeChild(elPara.firstChild);
	}
	
	addClassName(elLink, "hover");
	
	elToolTip.link = elLink;
	elToolTip.onmouseover = function()
	{
		showNavTip(this.link.id);
	}
	elToolTip.onmouseout = elToolTip.onblur = elLink.onblur;
	
	elPara.appendChild(document.createTextNode(elLink.tooltip));
	
	oCoords = getPosition(elLink);
	
	oCoords.x -= 7;
	oCoords.y += elLink.offsetHeight - 2;
	
	if (elLink.className === "first")
	{
		oCoords.x -= 1;
	}
	
	elToolTip.style.left = oCoords.x + "px";
	elToolTip.style.top = oCoords.y + "px";
};

function hideNavTip()
{
	var elToolTip = document.getElementById("tooltip");
	
	if (elToolTip)
	{
		removeClassName(elToolTip.link, "hover");
		elToolTip.parentNode.removeChild(elToolTip);
	}
};

function setupLinks(el)
{
	var arEls;
	var i, ptrEl;
	
	if (!el)
	{
		el = document;
	}
	
	arEls = el.getElementsByTagName("a");
	
	for (i = 0; i < arEls.length; i++)
	{
		ptrEl = arEls[i];
		
		if (ptrEl.rel == "print")
		{
			ptrEl.onclick = function()
			{
				window.open(this.href);
				return false;
			};
		}
		else if (ptrEl.rel == "live-support")
		{
			ptrEl.onclick = function()
			{
				window.open(this.href, "LiveSupport", "width=600,height=400");
				return false;
			}
		};
	};
	
	extendLinks();
};

function extendLinks()
{
	var arEls = document.getElementsByTagName("div");
	var i, ptrEl, ptrLink;
	
	for (i = 0; i < arEls.length; i++)
	{
		ptrEl = arEls[i];
		
		if (ptrEl.className == "range-offer")
		{
			ptrEl.style.cursor = "pointer";
		
			ptrEl.onclick = function()
			{
				var ptrEl = this.getElementsByTagName("a")[0];
				
				document.location = ptrEl.href;
			};
		};
	};
};

function ufoReplace(strImageName, strPath, strVars)
{
	var ptrEl = document.getElementById(strImageName);
	var ptrImg;
	var arEls;
	var FO;
	
	if (ptrEl)
	{
		arEls = ptrEl.getElementsByTagName("img");
		if (arEls.length > 0)
		{
			ptrImg = arEls[0];
		}
		else
		{
			return;
		};
	}
	else
	{
		return;
	};
	
	if (arguments.length == 2)
	{
		strVars = "";
	};
	
	if (ptrEl)
	{
		if (!ptrImg.className)
		{
			ptrEl.style.visibility = "visible";
			return;
		}
		
		if (strImageName === "ufoHomeIntro") 
		{
			if (ptrImg.className === "default")
			{
				FO = {movie:escape("flash/home-main.swf"), width:ptrEl.offsetWidth, height:ptrEl.offsetHeight,
							majorversion:"6", build:"40", wmode:"opaque", flashvars:strVars };
			}
			else
			{
				if (ptrImg.className == "video")
				{
					if (!DetectFlashVer(8, 0, 0))
					{
						var elDiv, elImg;
						elDiv = document.getElementById('divUFO');
						if (elDiv != undefined)
						{
							elImg = document.getElementById('imgIntro');
							if (elImg != undefined)
							{
								elImg.src = elDiv.innerHTML;
							}
						}
					}
					FO = {movie:escape("video.swf"), width:ptrEl.offsetWidth, height:ptrEl.offsetHeight,
								majorversion:"6", build:"40", wmode:"opaque",  flashvars:strVars };
				}
				else
				{
					if (!DetectFlashVer(8, 0, 0))
					{
						var elDiv, elImg;
						elDiv = document.getElementById('divUFO');
						if (elDiv != undefined)
						{
							elImg = document.getElementById('imgIntro');
							if (elImg != undefined)
							{
								elImg.src = elDiv.innerHTML;
							}
						}
					}
					
					FO = {movie:escape(ptrImg.className + '.swf'), width:ptrEl.offsetWidth, height:ptrEl.offsetHeight,
								majorversion:"6", build:"40", wmode:"opaque",  flashvars:strVars };
				}
			}
		}
		
		if (strImageName === "ufoFinanceExtras") 
		{
			if (!DetectFlashVer(8, 0, 0))
			{
				var elDiv, elImg;
				elDiv = document.getElementById('divUFO');
				if (elDiv != undefined)
				{
					elImg = document.getElementById('imgFinanceExtras');
					if (elImg != undefined)
					{
						elImg.src = elDiv.innerHTML;
					}
				}
			}
			
				FO = {movie:escape('content/flash/'+ ptrImg.className + '.swf'), width:772, height:234,
							majorversion:"6", build:"40", wmode:"opaque",  flashvars:strVars };
		}
		
		if (strImageName === "ufoCentresMap") 
		{
			FO = {movie:escape('flash/'+ ptrImg.className + '.swf'), width:772, height:234,
							majorversion:"6", build:"40", wmode:"opaque",  flashvars:strVars };
		}
		
		UFO.create(FO, strImageName);
	};
};

var ptrCalendar;

function setupCalendar()
{
	var ptrInput = document.getElementById("txtDate");
	
	if (ptrInput)
	{
		var elPicker = document.createElement("div");
		var elLink = document.createElement("a");
		var elImg = document.createElement("img");
		var dtYesterday = new Date();
		
		dtYesterday.setDate(dtYesterday.getDate() - 1);
		
		elPicker.id = "divDatePicker";
		elPicker.style.position = "absolute";
		
		elImg.src = "img/icon-calendar.gif";
		elImg.alt = "Select";
		
		elLink.id = "lnkDatePicker";
		elLink.appendChild(elImg);
		elLink.onclick = function(){ptrCalendar.select(document.getElementById("txtDate"),'lnkDatePicker','dd/MM/yyyy');return false;};
		
		ptrInput.className = "text date-picker-field";
		ptrInput.parentNode.insertBefore(elLink, ptrInput);
		ptrInput.parentNode.appendChild(elPicker);
		ptrInput.readOnly = "readonly";
		ptrInput.autocomplete = "off";
		
		ptrCalendar = new CalendarPopup("divDatePicker");
		ptrCalendar.setWeekStartDay(1);
		ptrCalendar.addDisabledDates(null, formatDate(dtYesterday,"yyyy-MM-dd"));
	};
};

function convertSearchArea()
{
	if (!m_ptrSearchForm || !m_ptrAdvancedSearch)
	{
		return;
	}
	
	replaceSelects();
	setupSearch();
	toggleSevenSeats();

	if (m_ptrSideBar)
	{
		m_ptrSideBar.style.visibility = "visible";
	};
}

/* main */
function onLoad()
{
	m_ptrSideBar = document.getElementById("sidebar");
	m_ptrSearchForm = document.getElementById("frmSearch");
	m_ptrSearchPanel = document.getElementById("search-panel");
	m_ptrSearchControls = document.getElementById("search-controls");
	m_ptrSearchSubmit = document.getElementById("btnSearchSubmit");
	m_ptrEmailUpdate = document.getElementById("frmEmailUpdates");
	m_ptrEmailUpdateSubmit = document.getElementById("btnEmailUpdatesSubmit");
	m_ptrAdvancedSearch = document.getElementById("advanced-search");
	
	m_strPage = document.getElementById("outer").className;
	
	convertSearchArea();
	
	if (m_strPage == "default" && (typeof m_strIntroFlashVars !== "undefined"))
	{
		ufoReplace("ufoHomeIntro", "content/flash/", m_strIntroFlashVars);
	};
	
	if (((m_strPage == "extras-finance-insurance") ||(m_strPage == "extras-accessories")) && (typeof m_strIntroFlashVars !== "undefined"))
	{
		ufoReplace("ufoFinanceExtras", "", m_strIntroFlashVars);
	};
	
	try
	{
		bespokeOnLoad();
	}
	catch(ex)
	{
	};

	replaceSelects();
	removeJSMessages();
	setupLinks();
	setupCalendar();
	setupNavTips();

	//
	try
	{
		bespokeOnAfterLoad();
	}
	catch(ex)
	{
	};

};
