var typing = null, browser = "";

// Gets the browser specific XmlHttpRequest Object.
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} 
}

// Our XmlHttpRequest object to get the auto suggest.
var request = getXmlHttpRequestObject();

// Called from keyup on the search textbox.
// Starts the AJAX request.
function suggest() {
	if (request.readyState == 4 || request.readyState == 0) {
		var container = document.getElementById("suggest");
		var artist = document.getElementById("artist");
		var album = document.getElementById("album");
		var song = document.getElementById("song");
		var parameters = escape(document.getElementById("query").value);
		if (parameters != "" && (artist.checked || album.checked || song.checked)) {

			container.innerHTML = "Loading...";

			if (artist.checked) {
				parameters += "&artist";
			}
			if (album.checked) {
				parameters += "&album";
			}
			if (song.checked) {
				parameters += "&song";
			}
			request.open("GET", '/suggest.php?query=' + parameters, true);
			request.onreadystatechange = handleSearchSuggest; 
			request.send(null);
		}
		else {
			container.innerHTML = "";
		}
	}		
}

// Called when the AJAX response is returned.
function handleSearchSuggest() {
	if (request.readyState == 4) {
		var container = document.getElementById("suggest");
		container.innerHTML = "";
		var str = request.responseText.split("\n");
		for (i = 0; i < str.length - 1; i++) {
			// Build our element string.  
			var suggest = str[i] + '<br/>';
			container.innerHTML += suggest;
		}
		if (str.length == 11) {
			container.innerHTML += "<br/><b><a href=\"\" onclick=\"document.forms['search'].submit();return false;\">More results...</a></b><br/>";
		}
	}
}

function hideSuggest()
{
	var container = document.getElementById('suggest');
	container.innerHTML = "";
}

function onKeyPress(ev) 
{
	if (ev.keyCode == 27) { // esc
		hideSuggest();
		return false;
	} 
	if (typing) { window.clearTimeout(typing); }
	typing = window.setTimeout("suggest()", 1000);
}

function registerKeyPress(field, handler) 
{
	switch (browser) {
		case "safari":
			field.addEventListener("keydown", handler, false);
			break;
		case "mozilla":
			field.addEventListener("keypress", handler, false);
			break;
		default:
			field.attachEvent('onkeydown', handler);
	}
	field.setAttribute("autocomplete", "off");
} 

function init()
{
	if (navigator.userAgent.indexOf("Safari") > 0) {
		browser = "safari";
	} else if (navigator.product == "Gecko") {
		browser = "mozilla";
	} else {
		browser = "ie";
	}

	var search = document.getElementById("search");
	if (search)	{
		registerKeyPress(search, onKeyPress);
		search.focus();
	}
}

window.onload = init;