// <div id="suggest">
// css: sugitemhot, sugitem
// inputboxname=
// suggestcount=
// suggestindex=
// inputboxtext=
// suggestfocused=
// inputboxfocused=

function getSuggestList(evt, qstr)
{
	var keyCode=0;
	inputboxtext = qstr;

	keyCode = evt ? evt.keyCode : event.keyCode;
	if(keyCode == 38 || keyCode == 40 || keyCode == 13 || keyCode == 27 || keyCode == 143 || keyCode == 229)
	{
		return;
	}

	getSuggestList2(qstr);
}

function getSuggestList2(qstr)
{
	if(qstr.length == 0)
	{
		hideSuggest();
		
	}else
	{
		// request contents
		request = GetRequestObject();
		request.onreadystatechange = suggestHandleStateChange;
	  
		request.open("GET", "services/getextnames.php?q="+encodeURIComponent(qstr), true);
		request.send(null);	
	}
}

// onreadysatechange call back function 
function suggestHandleStateChange() 
{
    if(request.readyState == 4) 
    {
        if(request.status == 200) 
   		{
		    var xmlDoc = request.responseXML;
		    var root = xmlDoc.getElementsByTagName("suggest");
	
			if(!root || !root[0])			
				hideSuggest();
			else
				updateSuggestList(root[0]);
        }
    }else if(request.readyState >= 1 && request.readyState < 4)
	{
	}
}

function updateSuggestList(root)
{
	var nodeList;
	var id;
	var name;
	var liststr='';
	
	nodeList = root.getElementsByTagName("name");
	if(!nodeList)
		return;
		
	suggestcount = nodeList.length;
	suggestindex = -1;
	
	if(nodeList.length > 0)
	{
		for(var i = 0; i < nodeList.length; i++) // loop coordinates
		{
			name = nodeList[i].childNodes[0].nodeValue;;
			
			liststr += "<div id=\"suggest"+i+"\" onclick=\"suggestClick(this);\" onmouseover=\"suggestMouseOver(this,"+i+")\" onmouseout=\"suggestMouseOut(this,"+i+")\" class=\"sugitem\">" + name + "</div>\r\n";
		}
		var ds = e("suggest");

		if(suggestcount < 5)
			ds.style.height = (suggestcount * 16) + "px";
		else
			ds.style.height = (5 * 16) + "px";
		ds.innerHTML = liststr;
		ds.style.display = "";
		
	}else
	{
		hideSuggest();	
	}
	
}

function hideSuggest()
{
	suggestcount = 0;
	suggestindex = -1;
	
	s = e("suggest");
	
	s.scrollTop = 0;
	s.innerHTML = "";
	s.style.display = "none";
}

function suggestMouseOver(obj, idx)
{
	suggestindex = idx;
	obj.className = "sugitemhot";
}

function suggestMouseOut(obj, idx)
{
	suggestindex = idx;
	obj.className = "sugitem";
}

function suggestClick(obj)
{
	if(obj)
	{
		document.searchform.ext.value=obj.innerHTML.replace("&amp;", "&");
		document.searchform.submit();		
	}
	hideSuggest();
}

function inputboxClick()
{
	if(e("suggest").style.display == "")
		hideSuggest();
	else
		getSuggestList2(document.searchform.ext.value);	
}
function inputboxBlur()
{
	inputboxfocused=false;
	setTimeout(hideSuggest2, 100);
}

function hideSuggest2()
{
	if(suggestfocused == false)
		hideSuggest();
}

function inputboxFocus()
{
	inputboxfocused=true;
}

function suggestFocus()
{
	suggestfocused=true;
}

function suggestBlur()
{
	suggestfocused=false;
	hideSuggest();
}

function suggestKeyDown(evt)
{
	var s;
	var keyCode = evt ? evt.keyCode : event.keyCode;
	var scr;
	var oldindex = suggestindex;
	var row = 5;
	var inputbox = document.searchform.ext;

	if(keyCode == 27) // escape
	{
		inputbox.value = inputboxtext;
		hideSuggest();
		
	}else if(keyCode == 13) // enter
	{
		hideSuggest();		
	
	}else if((keyCode == 38 || keyCode == 40) && suggestcount > 0)
	{
		if(keyCode == 38) // up arrow
		{
			if(suggestcount > 0)
			{
				if(suggestindex > 0)
				{
					suggestindex--;
				}
			}

		}else if(keyCode == 40) // down arrow
		{
			if(suggestcount > 0)
			{
				if(suggestindex < suggestcount - 1)
				{
					suggestindex++;
				}
			}
		}

		// update ui
		if(suggestindex != oldindex)
		{
			s = e("suggest"+oldindex);
			if(s)
				s.className = "sugitem";
			
			s = e("suggest"+suggestindex);
			if(s)
			{
				s.className = "sugitemhot";
				inputbox.value = s.innerHTML.replace("&amp;", "&");
			}
		}
		// scroll
		s = e("suggest");
		scr = suggestindex * 16;
		if(scr < s.scrollTop || scr > s.scrollTop + 16 * 4)
		{
			if(keyCode == 38) // up
				s.scrollTop = scr;
			else // down
				s.scrollTop = scr - 16 * 4;
		}
	}
}