
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Browser doesn't support AJAX!\nPlease Upgrade your browser to Internet Explorer 7 or Fireox 2");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest(control_name, action, reqAddress) 
{
	if (searchReq.readyState == 4 || searchReq.readyState == 0) 
  { 
		var str = escape(document.getElementById(control_name).value);
    
    searchReq.open("GET", reqAddress + '?action=' + action + '&dynamic_search=' + str + '&control_name=' + control_name, true);
		searchReq.onreadystatechange = handleSearchSuggest; 
		searchReq.send(null);
	}		
}

//Called when the AJAX response is returned.
function handleSearchSuggest() 
{
	if (searchReq.readyState == 4) 
  {
    var ss = document.getElementById('search_suggest');
		ss.innerHTML = '';
		
		if(searchReq.responseText == null || searchReq.responseText.strlen == 0)
		  return;
		
		var str = searchReq.responseText.split("\n");
		control_name = str[0]; // first one is the control name
		
    var num_items = 0;
    var idx = 0;
		for( i = 1; i < str.length - 1; i++) 
    {
      var value = str[i].split("~~~");
      
			//Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
			var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
			suggest += 'onmouseout="javascript:suggestOut(this);" ';
			suggest += 'onclick="javascript:setSearch(\'' + control_name + '\', \'' + value[1] + '\');" ';
			suggest += 'class="suggest_link' + idx + '">' + value[0] + '</div>';

			ss.innerHTML += suggest;
			
			num_items ++;
			idx = 1 - idx;
		}
		
		if(num_items > 0)
		{
		  ss.style.visibility = 'visible';
		  
		  var control = document.getElementById(control_name);
	    var pos_x = findPos(control);
      var pos_y = findPosy(control);
      
      ss.style.position = 'absolute';
      ss.style.left = (pos_x) + "px";
      ss.style.top = (pos_y + control.offsetHeight) + "px";

		  ss.style.width    = (control.offsetWidth - 2) + 'px';
		}
	  else
		  ss.style.visibility = 'hidden';
	}
}

function findPos(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
  {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) 
    {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	return curleft;
}

function findPosy(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
  {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) 
    {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}	

	return curtop;
}

//Mouse over function
function suggestOver(div_value) 
{
  var name = div_value.className;
  var idx = name.charAt(name.length - 1);

  div_value.className = 'suggest_link_over' + idx;
}
//Mouse out function
function suggestOut(div_value) 
{
  var name = div_value.className;
  var idx = name.charAt(name.length - 1);
  
	div_value.className = 'suggest_link' + idx;
}
//Click function
function setSearch(control_name, value) 
{
	document.getElementById(control_name).value = value;
	document.getElementById('search_suggest').innerHTML = '';
  document.getElementById('search_suggest').style.visibility = 'hidden';
}
