var timer = "";
var xmlHttp = new Array();

function createXMLHttpHandler()
{
	try {
		// Firefox, Opera 8.0+, Safari
		handler = new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			handler = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				handler = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("To use this website you need to update your web browser.");
			}
		}
	}

	var handle = xmlHttp.length;
	xmlHttp[handle] = handler;
	
	return handle;
}

function newXMLHttpRequest(method, action, querystring, callback)
{
	var handle = createXMLHttpHandler();
	
	if (handle >= 0) {
		var handler = xmlHttp[handle];
		var handlerURL = "/classes/handler.php?";
		var url = handlerURL + "action=" + action + "&t=" + new Date().getTime();
		if (method == "GET") url += "&" + querystring;
		
		handler.open(method, url, true);
		
		handler.onreadystatechange = function()
		{
			var response = xmlHttp[handle];
			callback(response);
		}
		
		if (method == "POST") {
			handler.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			handler.setRequestHeader("Content-length", querystring.length);
			handler.setRequestHeader("Connection", "close");
			handler.send(querystring);
		} else {
			handler.send(null);
		}

	}
}

function getSuggestions(elSearch)
{
	var searchText = elSearch.value;
	
	if (searchText.length > 1) {
		var querystring = "q=" + encodeURIComponent(searchText);
		newXMLHttpRequest("GET", "suggestion", querystring, suggestionsHandler);
	} else {
		clearSuggestions();
	}
}

function suggestionsHandler(handler)
{
	if (handler.readyState == 4) {
		if (handler.status == 200 && handler.responseText) {
			var response = eval("(" + handler.responseText + ")");
			updateSuggestions(response);
		} else {
			clearSuggestions();
		}
	}
}

function updateSuggestions(response)
{
	var elSuggestions = document.getElementById("Suggestions");
	var elSearch = document.getElementById("search");
	var searchText = elSearch.value.toLowerCase();
	var output = "";
	
	if (response) {
		for (var suggestion in response) {
			if (response.hasOwnProperty(suggestion) && response[suggestion]) {
				var data = response[suggestion];
				var name = data.name;
				var shortname = (name.length > 31) ? name.substr(0, 29) + ".." : name;
				
				if (data.type == "category") {
					output += "<a href=\"/categories/" + name + "\" ";
					output += "title=\"" + name + "\">";
					output += shortname;
					output += "</a>";
					output += " <span>[category]</span><br />";
				} else if (data.type == "product") {
					output += "<a href=\"/products/" + encodeURIComponent(name) + "\" ";
					output += "title=\"" + name + "\">";
					output += shortname;
					output += "</a>";
					output += " <span>[product]</span><br />";
				}
			}
		}
	} else {
		output = "No results found";
	}
	
	elSuggestions.innerHTML = output;
	elSuggestions.className = "Visible";
}

function clearSuggestions()
{
	if (timer) window.clearInterval(timer);
	
	var elSuggestions = document.getElementById("Suggestions");
	elSuggestions.className = "Hidden";
	elSuggestions.innerHTML = "";
}

function delayedHideSuggestions()
{
	timer = window.setInterval("clearSuggestions()", 300);
}

function showHideElement(elementid)
{
	window.clearInterval(timer);
	var elt = document.getElementById(elementid);
	
	if (elt.className.indexOf("Hidden") != -1) {
		elt.className = elt.className.replace(new RegExp("\s?Hidden\\b"), "");
	} else {
		elt.className += " Hidden";
	}
	
    return false;
}

function showHideNavElement(element)
{
	elSubNav = element.getElementsByTagName("ul")[0];
	showHideElement(elSubNav.id);
}