
// Copyright gps-waypoints.net. Don't use without administrators permission.

var req;

var delay_base_url;
var delay_query_string;

var delay_form_input;
var delay_target_name = null;

var timerID;
var timerRunning = false;

// Save search baseurl and query word to global variables and start timer.
// This way we don't fire search requests to server all the time.
// If no new search is requested before the timer time outs, we actually fire the request

function loadSearchWords( base_url, query_string, form_input )
{
	if ( timerRunning == true )
	{
		// Reset timer before it does the request
		clearTimeout(timerID);
		timerRunning = true;
	}
	
	// Store request to global scope and start the timer
	delay_base_url = base_url;
	delay_query_string = query_string;

	delay_form_input = form_input;

	// Suggest results are shown in div named after form input with prefix "suggest_"
	delay_target_name = "suggest_" + form_input;
	timerID = window.setTimeout('loadSearchWordsNow()', 1000);
	timerRunning = true;

}

// Asyncronous timer calls this after it times out
function loadSearchWordsNow()
{
	// clear the timer and fire the request to server
	clearTimeout(timerID);
	loadXMLDoc(delay_base_url , delay_query_string, delay_target_name);
}

// Set new value to input forms field
function setInputValue( newValue )
{
	// Set value to form input and hide the result table
	getObject( delay_form_input ).value = newValue;
	getObject(delay_target_name).style.visibility = "hidden";
	
}

function hideResultDiv()
{
	if ( delay_target_name != null )
		hideDiv( delay_target_name );
}

function hideDiv( item )
{
	getObject( item ).style.visibility = "hidden";
}


function loadXMLDoc(base_url , query_string , target_name)
{
   query_word = query_string;
	

   if ( query_string == null || query_string.length == 0)
   {
	// query_string is null of empty. We don't send this request and hide the result div
	getObject(target_name).innerHTML = "";
	getObject(target_name).style.visibility = "hidden";
	req = null;
	return;
   }

   url = base_url + query_string;

   // Internet Explorer
   try { req = new ActiveXObject("Msxml2.XMLHTTP"); }
   catch(e) {
      try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
      catch(oc) { req = null; }
   }

   // Mozailla/Safari
   if (!req && typeof XMLHttpRequest != "undefined") { req = new XMLHttpRequest(); }

   // Call the processChange() function when the page has loaded
   if (req != null)
   {
	req.onreadystatechange = processChange;
	req.open("GET", url, true);
	req.send(null);

	// Show "Loading..." text just in case if server is running slow
	getObject(target_name).innerHTML = "Loading...";
	getObject(target_name).style.visibility = "visible";
   }
  
}

function processChange()
{
   // The page has loaded and the HTTP status code is 200 OK
   if ( req != null && req.readyState == 4 && req.status == 200)
   {

	if ( req.responseText.length > 0 )
	{
	      // Write the contents of this URL to the searchResult layer
	      getObject(delay_target_name).innerHTML = req.responseText;
	      getObject(delay_target_name).style.visibility = "visible";
	}
   }
   else
   {
      // Something is wrong
      getObject(delay_target_name).innerHTML = "...";
      getObject(delay_target_name).style.visibility = "hidden";
   }
}

function getObject(name)
{
   var ns4 = (document.layers) ? true : false;
   var w3c = (document.getElementById) ? true : false;
   var ie4 = (document.all) ? true : false;

   if (ns4) return eval('document.' + name);
   if (w3c) return document.getElementById(name);
   if (ie4) return eval('document.all.' + name);
   return false;
}
