/* ------------ IN CASE WE NEED THE 'QUICK SEARCH' BOX TO WORK AGAIN ------------ 
function prepareInputs() {
	if (!document.getElementById) return false;
	if (!document.getElementById("quickSearchText")) return false;
	var quickSearchText = document.getElementById("quickSearchText");
	quickSearchText.setAttribute("autocomplete", "off");
	quickSearchText.onclick = function() { this.focus(); this.select(); }
	quickSearchText.onkeyup = function() { goSearch(this); }
}

addLoadEvent(prepareInputs);

function goSearch(elem) {
	alert (elem.value);
	ajaxRequest(url, sending, receiving);
}
-------------------------------------------------------------------------------- */

function prepareModelDropdown() {
	if (!document.getElementById) return false;
	if (!document.getElementById("searchMake")) return false;
	if (!document.getElementById("searchModel")) return false;
	var searchMake = document.getElementById("searchMake");
	searchMake.onchange = function() {
		var sending = "searchval=model&make="+searchMake.value;
		var ajaxSuccess = ajaxRequest("search.php", sending, "searchModelDiv");
		if (ajaxSuccess == true) {
			setTimeout("prepareTypeDropdown()",300);
		}
	}
}

addLoadEvent(prepareModelDropdown);

function prepareTypeDropdown() {
	if (!document.getElementById) return false;
	if (!document.getElementById("searchModel")) return false;
	if (!document.getElementById("searchType")) return false;
	var searchModel = document.getElementById("searchModel");
	searchModel.onchange = function() {
		var sending = "searchval=type&model="+searchModel.value;
		var ajaxSuccess = ajaxRequest("search.php", sending, "searchTypeDiv")
		if (ajaxSuccess == true) {
			setTimeout("prepareContractDropdown()",300);
		}
	}
}

function prepareContractDropdown() {
	if (!document.getElementById) return false;
	if (!document.getElementById("searchType")) return false;
	if (!document.getElementById("searchContract")) return false;
	var searchType = document.getElementById("searchType");
	searchType.onchange = function() {
		var sending = "searchval=contract&type="+searchType.value;
		ajaxRequest("search.php", sending, "searchContractDiv");
	}
}

function findContracts() {
	if (!document.getElementById) return false;
	if (!document.getElementById("searchType-2")) {							// If there's only one result
		if (!document.getElementById("searchType-1")) return false;
		if (!document.getElementById("searchContract-1")) return false;
		searchType = document.getElementById("searchType-1");
		searchContract = document.getElementById("searchContract-1");
		searchType.onchange = function() {
			var sending = "searchval=contract&type="+this.value+"&rowno=1";
			ajaxRequest("search.php", sending, "searchContractDiv-1");
			searchContract.selectedIndex = 0;
		}
	} else {																// If there's multiple results
		if (!document.getElementsByTagName) return false;
		if (!document.getElementsByTagName("SELECT")) return false;
		var allSelects = document.getElementsByTagName("SELECT");
		var searchType = Array();
		var searchContract = Array();
		for (i=1;i<allSelects.length/2;i++) {
			searchType[i] = document.getElementById("searchType-"+i);
			if (searchType[i]) {
				searchType[i].onchange = function() {
					var rowno = this.name.split("-")[1];
					var searchContract = document.getElementById("searchContract-"+rowno);
					var sending = "searchval=contract&type="+this.value+"&rowno="+rowno;
					ajaxRequest("search.php", sending, "searchContractDiv-"+rowno);
					searchContract.selectedIndex = 0;
				}
			}
		}
	}
}

addLoadEvent(findContracts);


// To send AJAX Requests
function ajaxRequest(url, sending, receiving, method) {
	// OK HERE COMES THE AJAX!!!
	var ajaxRequest;
	try {
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try {
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("There was a problem with your browser");
				return false;
			}
		}
	}
	// Create a function that will receive data sent from the server
	ajaxRequest.onreadystatechange = function() {
		if(ajaxRequest.readyState == 4){
			var ajaxDisplay = document.getElementById(receiving);
			ajaxDisplay.innerHTML = ajaxRequest.responseText;
		}
	}
	if (method == "POST") {
		ajaxRequest.open("POST", url, true);
		ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajaxRequest.send(sending);
	} else {
		ajaxRequest.open("GET", url+"?"+sending, true);
		ajaxRequest.send(null);
	}
	return true;
}

var timerlen = 5;
var slideAniLen = 250;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();

function slidedown(objname){
        if(moving[objname]) return;

        if(document.getElementById(objname).style.display != "none") return; // cannot slide down something that is already visible

        moving[objname] = true;
        dir[objname] = "down";
        startslide(objname);
}

function slideup(objname){
		if (!document.getElementById(objname)) return false;
		if(moving[objname]) return;

        if(document.getElementById(objname).style.display == "none")
		{
                slidedown(objname); // cannot slide up something that is already hidden
				return;
		}
		
        moving[objname] = true;
        dir[objname] = "up";
        startslide(objname);
}

addLoadEvent(slideup);
			 
function startslide(objname){
        obj[objname] = document.getElementById(objname);

		//endHeight[objname] = parseInt(obj[objname].scrollHeight);		
        endHeight[objname] = parseInt(obj[objname].style.height);
        startTime[objname] = (new Date()).getTime();

        if(dir[objname] == "down"){
                obj[objname].style.height = ".1em";
        }

        obj[objname].style.display = "block";

        timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
}

function slidetick(objname){
        var elapsed = (new Date()).getTime() - startTime[objname];

        if (elapsed > slideAniLen)
                endSlide(objname)
        else {
                var d =Math.round(((elapsed * 10) / (slideAniLen * endHeight[objname]))/10); // Get one decimal place figure
                if(dir[objname] == "up")
                        d = endHeight[objname] - d;

                obj[objname].style.height = d + "em";
        }

        return;
}

function endSlide(objname){
        clearInterval(timerID[objname]);

        if(dir[objname] == "up")
                obj[objname].style.display = "none";

        obj[objname].style.height = endHeight[objname] + "em";

        delete(moving[objname]);
        delete(timerID[objname]);
        delete(startTime[objname]);
        delete(endHeight[objname]);
        delete(obj[objname]);
        delete(dir[objname]);

        return;
}

function prepareQuoteForm () {
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName("DIV")) return false;
	if (!document.getElementById("m4moduleform_1")) return false;
	var quoteForm = document.getElementById("m4moduleform_1");
	var allDivs = quoteForm.getElementsByTagName("DIV");
	for (i=0;i<allDivs.length;i++) {
		if (allDivs[i].className == "fleetSize") {
			allDivs[i].style.display = "none";
		}
		if (allDivs[i].className == "companyName") {
			allDivs[i].onchange = function() {
				var companyInput = this.getElementsByTagName("INPUT");
				if (companyInput.value != "") {
					var fleetDiv = getNextElement(this);
					fleetDiv.style.display = "block";
				}
			}
		}
	}
	quoteForm.onsubmit = function() {
		var allDivs = this.getElementsByTagName("DIV");
		var noTelNo = true;
		for (i=0;i<allDivs.length;i++) {
			if ((allDivs[i].className.indexOf("tel") > -1) && (allDivs[i].getElementsByTagName("INPUT")[0].value != "")) {
				noTelNo = false;
			}
		}
		if (noTelNo == true) {
			alert ("Please enter at least one phone number\n(Either mobile, home or business)");
			return false;
		}
	}
}

addLoadEvent(prepareQuoteForm);

function prepareSlide() {
	if (!document.getElementById) return false;
	if (!document.getElementById("enterYourDetails")) return false;
	document.getElementById("divcontinue").style.display = "none";
	document.getElementById("enterYourDetails").onclick = function() {
		slideup("divcontinue");
	}
}

addLoadEvent(prepareSlide);

function ieFixes() {
	if (navigator.appName == "Microsoft Internet Explorer") {
		if (!document.getElementsByTagName) return false;
		if (!document.getElementsByTagName("HR")) return false;
		var allHrs = document.getElementsByTagName("HR");
		for (i=0;i<allHrs.length;i++) {
			if (allHrs[i].className == "stripe") {
				var divStripe = document.createElement("div");
				divStripe.className = "stripe";
				var content = document.createTextNode(" ");
				divStripe.appendChild(content);
				var replacement = allHrs[i].parentNode.replaceChild(divStripe,allHrs[i]);
			}
		}
	}
}

addLoadEvent(ieFixes);

function friendlyUrlSearch() {
	//Find form id = quickSearchDropdown or searchForm, when it submits append make, model etc. to url in a search engine friendly way
	if (!document.getElementById) return false;
	var quickSearchForm = document.getElementById("quickSearchDropdown");
	if (quickSearchForm) { quickSearchForm.onsubmit = function() { submitSearch(this); return false;} }
	var allForms = document.getElementsByTagName("FORM");
	for (i=0;i<allForms.length;i++) {
		if (allForms[i].name.indexOf("searchForm") > -1) {
			var searchForm = allForms[i];
			searchForm.onsubmit = function() {
				submitSearch(this); return false;
			}
		}
	}
}

addLoadEvent(friendlyUrlSearch);

function submitSearch(elem) {
	for (i=0;i<elem.elements.length;i++){
		if ((elem.elements[i].name == "searchMake") && (elem.elements[i].value != "default")) {
			var make = "/"+elem.elements[i].value
		}
		if ((elem.elements[i].name == "searchModel") && (elem.elements[i].value != "default")) {
			var model = "/"+elem.elements[i].value
		}
		if ((elem.elements[i].name.indexOf("searchType") > -1) && (elem.elements[i].value != "default")) {
			var type = "/"+elem.elements[i].value
		}
		if ((elem.elements[i].name.indexOf("searchContract") > -1) && (elem.elements[i].value != "default")) {
			var contract = "/"+elem.elements[i].value
		}
	}
	var url = "/results";
	if (make){ url += make; if (model) { url += model; if (type) { url += type; if (contract) { url += contract; } } } }
	window.location = url;
}

function popUpHelp() {
	if (!document.getElementsByTagName) return false;
	if (!document.getElementsByTagName("A")) return false;
	var allAnchors = document.getElementsByTagName("A");
	for (i=0;i<allAnchors.length;i++) {
		if (allAnchors[i].className == "help") {
			allAnchors[i].onclick = function() {
				helpLink = this.getAttribute("href");
				window.open(helpLink,"help","width=320,height=320");
				return false;
			}
		}
		if (allAnchors[i].className == "closePopup") {
			allAnchors[i].onclick = function() {
				window.close("help");
				return false;
			}
		}
	}
}

addLoadEvent(popUpHelp);

// GENERAL USEFUL FUNCTIONS

// Adds functions to window.onload

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') { window.onload = func;	}
	else {window.onload = function() {oldonload(); func(); } }
}

// Finds first element in node

function getFirstElement(node) {
	if (node.firstChild.nodeType == 1) {
		return node.firstChild;
	}
	if (node.firstChild.nextSibling) {
		return getNextElement(node.firstChild);
	}
	return null;
}

// Finds next element

function getNextElement (node) {
	if (node.nextSibling.nodeType == 1) {
		return node.nextSibling;
	}
	if (node.nextSibling.nextSibling) {
		return getNextElement (node.nextSibling);
	}
	return null;
}

// Finds previous element

function getPreviousElement (node) {
	if (node.previousSibling.nodeType == 1) {
		return node.previousSibling;
	}
	if (node.previousSibling.previousSibling) {
		return getPreviousElement (node.previousSibling);
	}
	return null;
}

function insertAfter (newElement,targetElement) {
	var parent = targetElement.parentNode;
	if (parent.lastChild == targetElement) {
		parent.appendChild(newElement);
	} else {
		parent.insertBefore(newElement,targetElement.nextSibling);
	}
}