var currentSearchField;
var currentResults;
function InitLocationSearch()
{
	if (document.getElementById(inputPrefix + "SuburbTown"))
	{
		document.getElementById(inputPrefix + "SuburbTown").onkeyup = SearchTowns;
		document.onclick = KillResults;
	}
	var ipts = document.getElementsByTagName("input");
	for (var i=0; i<ipts.length; i++)
	{
		if (ipts[i].className.indexOf("AutoComplete") != -1)
		{
			ipts[i].onkeyup = SearchTowns;
			document.onclick = KillResults;
		}
	}

	var frm = document.getElementById("aspnetForm");
	var buttons = frm.getElementsByTagName("input");
	for (var i=0; i<buttons.length; i++)
	{
		if (buttons[i].type == "submit")
		{
			buttons[i].onclick = SubmitForm;
		}
	}
}
var origSearchValue = null;

function SearchTowns(evt)
{
	if (window.event) evt = window.event;
	currentSearchField = (evt.srcElement) ? evt.srcElement : evt.target;
	if (document.getElementById("Results"))
	{
		currentResults = document.getElementById("Results");
	}
	else
	{
		currentResults = currentSearchField.parentNode.getElementsByTagName("div")[0];
	}
	if (evt.keyCode == 38 || evt.keyCode == 40) // up/down arrows
	{
		HandleKey(evt);
	}
	else
	{
		if (currentSearchField.value != origSearchValue)
		{
			origSearchValue = currentSearchField.value;
			xmlRequest = null;
			GetXml("/Scripts/LocationSearch.aspx?s=" + origSearchValue, DisplayTowns);
		}
	}
}

function KillResults()
{
	if (document.getElementById("Results"))
	{
		document.getElementById("Results").style.display = "none";
	}
	else
	{
		var ipts = document.getElementsByTagName("input");
		for (var i=0; i<ipts.length; i++)
		{
			if (ipts[i].className.indexOf("AutoComplete") != -1)
			{
				ipts[i].parentNode.getElementsByTagName("div")[0].style.display = "none";
			}
		}
	}
	if (document.all && document.getElementById(inputPrefix + "SearchRadius")) document.getElementById(inputPrefix + "SearchRadius").style.visibility = "visible";
}

var safariTimer = null;
function HandleKey(evt)
{
	if (navigator.userAgent.indexOf("Safari") != -1)
	{
		if (safariTimer != null)
		{
			safariTimer = null;
			return;
		}
		safariTimer = setTimeout("KillSafariTimer()", 10);
	}
	if (evt != undefined && currentResults.style.display != "none")
	{
		var search = currentSearchField;
		var results = currentResults.getElementsByTagName("div");
		var action = null;
		if (evt.keyCode == 38 || evt.keyCode == 40) // up/down arrows
		{
			var foundSelected = false;
			for (var i=0; i<results.length; i++)
			{
				if (results[i].className.indexOf("Selected") != -1)
				{
					if (evt.keyCode == 38)
					{
						results[i].className = results[i].className.replace(" Selected", "");
						if (i-1 >= 0)
						{
							results[i-1].className += " Selected";
							search.value = results[i-1].innerText;
						}
						else
						{
							search.value = origSearchValue;
						}
					}
					else
					{
						if (i+1 < results.length)
						{
							results[i].className = results[i].className.replace(" Selected", "");
							results[i+1].className += " Selected";
							search.value = results[i+1].innerText;
						}
					}
					foundSelected = true;
					break;
				}
			}
			if (!foundSelected && evt.keyCode == 40)
			{
				results[0].className += " Selected";
				search.value = results[0].innerText;
			}
		}
	}
}

function KillSafariTimer()
{
	safariTimer = null;
} 

function DisplayTowns()
{
	var resultsNode = currentResults;
	if (xmlRequest != null && xmlRequest.readyState == 4)
	{
		if (xmlRequest.status == 200)
		{
			resultsNode.innerHTML = "";
			var newHTML = "";
			var first = true;
			for (var i=0; i<xmlRequest.responseXML.childNodes.length; i++)
			{
				if (xmlRequest.responseXML.childNodes[i].nodeName == "rs")
				{
					var rs = xmlRequest.responseXML.childNodes[i];
					for (var j=0; j<rs.childNodes.length; j++)
					{
						if (rs.childNodes[j].nodeName == "r")
						{
							newHTML += "<div class=\"TownResult\" onmouseover=\"Highlight(this);\" onclick=\"SelectResult(this);\"><span>" + rs.childNodes[j].getAttribute("t") + "</span>, " + rs.childNodes[j].getAttribute("s") + ", " + rs.childNodes[j].getAttribute("p") + "</div>";
							first = false;
						}
					}
					if (!first)
					{
						resultsNode.style.display = "block";
						if (document.all && document.getElementById(inputPrefix + "SearchRadius")) document.getElementById(inputPrefix + "SearchRadius").style.visibility = "hidden";
					}
					break;
				}
			}
			if (newHTML == "")
			{
				resultsNode.style.display = "none";
				if (document.all && document.getElementById(inputPrefix + "SearchRadius")) document.getElementById(inputPrefix + "SearchRadius").style.visibility = "visible";
			}
			resultsNode.innerHTML = newHTML;
		}
	}
}

function Highlight(o)
{
	var results = currentResults.getElementsByTagName("div");
	for (var i=0; i<results.length; i++)
	{
		results[i].className = results[i].className.replace(" Selected", "");
	}
	o.className += " Selected";
}

function SelectResult(o)
{
	currentSearchField.value = o.innerText;
	currentResults.style.display = "none";
}

