document.onkeyup = menuItem_OnKeyUp;
function toggle( targetId ){
  if (document.getElementById){
  		target = document.getElementById( targetId );
  			if (target.style.display == "none")
  			{
  				target.style.display = "";
  				document.getElementById("SearchForm_fldSearch").value = "";
  				document.getElementById("SearchForm_fldSearch").disabled = false;
  			} 
  			else 
  			{
  				target.style.display = "none";
  				document.getElementById("SearchForm_fldSearch").value = "";
  				document.getElementById("SearchForm_fldSearch").disabled = false;
  			}
  	}
}
function validateTextInput(textInput)
{
	/*UNCOMMENT NEXT LINE TO DEBUG DEBUG WITH FIREBUG*/
	/*if (typeof(console) != "undefined") {	console.log("textInput = %s", textInput);	}*/
	
	var validator = /[A-Za-z0-9 \-']/g;
	validator.lastIndex = 0;
	if ((textInput.charCodeAt(0) == 8) || (textInput.charCodeAt(0) == 16) || (textInput.charCodeAt(0) == 109) || (textInput.charCodeAt(0) == 189) || (textInput.charCodeAt(0) == 222))
		return true;
		
	var isCharValid = validator.test(textInput);	
	/*UNCOMMENT NEXT LINE TO DEBUG DEBUG WITH FIREBUG*/
	/*if (typeof(console) != "undefined") {	console.log("textInput = %s, validator =  %s, isCharValid = %d", textInput, validator, isCharValid);	}*/
	
	return isCharValid;
}
function fldSearch_OnKeyUp(e)
{
	var fldSearch = document.getElementById("SearchForm_fldSearch");	
	if (fldSearch != null)
	{
		var evt = (typeof(window.event) != "undefined") ? window.event : e;		
		var typedChar = String.fromCharCode(evt.keyCode);
		/*UNCOMMENT NEXT LINE TO DEBUG DEBUG WITH FIREBUG*/
		/*if (typeof(console) != "undefined") {	console.log("keyCode = %d", evt.keyCode);	}*/
		
		var charValid = validateTextInput(typedChar);
						
		if ((charValid == true) && (fldSearch.value.length > 1))
		{
			btnSearch_OnClick();
		}
		else if (fldSearch.value.length < 2)
		{
			serverList_Hide();			
		}		
	}	
}
function btnSearch_OnClick()
{
	if (StoreFront.StoreFront.SearchForm != null)
	{
		var categoryId = document.getElementById("SearchForm_catId").value;
		var searchText = document.getElementById("SearchForm_fldSearch").value;			
		StoreFront.StoreFront.SearchForm.SearchServer(categoryId, searchText, SearchServer_Callback);
	}	
}
function ServerItem_Click(serverName, url)
{	
	var searchText = document.getElementById("SearchForm_fldSearch");	
	if (searchText != null)
	{
		searchText.disabled = true;			
		searchText.value = "Redirecting to " + serverName + "...";	
		serverList_Hide();
		window.location = url;			
	}
}
function serverList_getCurrentSelection()
{
	var sList = document.getElementById("serversList");
	var menuItems = sList.getElementsByTagName("div");	
	
	if ((menuItems != null) && (menuItems.length > 0))
	{
		for(var i = 0; i < menuItems.length; i++)
		{
			if (menuItems[i].className.indexOf("select") > -1)
			{
				return menuItems[i].id.split("_")[1];
			}
		}
	}
	
	return 0;
}
function serverList_setCurrentSelection(index)
{
	serverList_resetSelection();	
	var menuItem = document.getElementById("mi_" + index);
	if (menuItem != null)
	{
		menuItem.className += " select";
	}
	
}
function serverList_resetSelection()
{
	var sList = document.getElementById("serversList");
	var menuItems = sList.getElementsByTagName("div");
	
	if ((menuItems != null) && (menuItems.length > 0))
	{
		for(var i = 0; i < menuItems.length; i++)
		{
			if (menuItems[i].className.indexOf("select") > -1)
			{
				menuItems[i].className = menuItems[i].className.substring(0, menuItems[i].className.indexOf("select") - 1);
			}
		}
	}
}
function serverList_Count()
{
	var sList = document.getElementById("serversList");
	var menuItems = sList.getElementsByTagName("div");
	if (menuItems != null)
		return menuItems.length;
		
	return 0;
}
function serverList_Hide()
{
	var sList = document.getElementById("serversList");
	sList.innerHTML = "";
	sList.style.display = "none";
}
function menuItem_OnKeyUp(evt)
{	
	var e = evt || window.event;
	var arrowDownCode = 40;
	var arrowUpCode = 38;
	var enterKeyCode = 13;
	var sList = document.getElementById("serversList");
	var menuItems = sList.getElementsByTagName("div");
	var currentSelection = parseInt(serverList_getCurrentSelection());
	
	if (typeof(e.stopPropagation) != "undefined")
		e.stopPropagation();
	else if (typeof(e.cancelBubble) != "undefined")
		e.cancelBubble = true;			
	
	if (e.keyCode == arrowUpCode)
	{
		if (currentSelection > 0)
			serverList_setCurrentSelection(currentSelection - 1);
		else
			serverList_setCurrentSelection(serverList_Count() - 1);			
	}
		
	if (e.keyCode == arrowDownCode)
	{
		if (currentSelection < (serverList_Count() - 1))
			serverList_setCurrentSelection(currentSelection + 1)
		else
			serverList_setCurrentSelection(0);
	}
	if (e.keyCode == enterKeyCode)
	{
		var menuItem = document.getElementById("mi_" + currentSelection);		
		if (menuItem != null)
		{
			var serverName = menuItem.getElementsByTagName("a")[0].innerHTML;
			var serverUrl = menuItem.getElementsByTagName("a")[0].href;
			var anchorElement = menuItem.getElementsByTagName("a")[0];			
			
			if (anchorElement != null)
			{
				anchorElement.onclick();
			}
		}
	}
}
function SearchServer_Callback(response)
{	
	serverList_Hide();
	if ((response.error != null) && (response.error.Message != null))
	{
		alert("There was an error " + response.error.Message);
	}
	else
	{
		var serversTable = response.value;
		var retHtml = "";
		var cssClass = "menuItem";
		var sList = document.getElementById("serversList");
		
		for(i = 0; i < serversTable.Rows.length; i++)
		{
			//retHtml += "<a class=\"links\" href='" + serversTable.Rows[i].Url + "'>" + serversTable.Rows[i].Name + "</a><br />";
			if (i == 0)
				cssClass = "menuItem select";
			else
				cssClass = "menuItem";
			
			retHtml += "<div id=\"mi_" + i + "\" class=\"" + cssClass + "\" onkeyup=\"menuItem_OnKeyUp(event, " + i + ")\" onmouseover=\"menuItem_OnMouseOver(this)\" onmouseout=\"menuItem_OnMouseOut(this)\" onclick=\"ServerItem_Click('" + serversTable.Rows[i].Name.replace(/'/g, "\\'") + "', '" + serversTable.Rows[i].Url.replace("'", "\\'") + "');\">";
			retHtml += "<a class=\"selectLinks\" href=\"#\" onclick=\"ServerItem_Click('" + serversTable.Rows[i].Name.replace(/'/g, "\\'") + "', '" + serversTable.Rows[i].Url.replace("'", "\\'") + "');\">" + serversTable.Rows[i].Name + "</a><br />";			
			retHtml += "</div>";
		}
						
		if (serversTable.Rows.length > 0)
		{		
			sList.innerHTML = retHtml;
			sList.style.display = "block";			
		}		
	}
}
function menuItem_OnMouseOver(spanElement)
{
	serverList_resetSelection();
	if (spanElement != null)
	{
		spanElement.className += " select";
	}
}
function menuItem_OnMouseOut(spanElement)
{
	if (spanElement != null)
	{
		var elementCSS = spanElement.className.split(" ");
		spanElement.className = elementCSS[0].trim();
	}
}