
function $m(quem){
 return document.getElementById(quem)
}

var xmlSearchHttp = createXmlHttpRequestObject();
var pxmlSearchHttp = createXmlHttpRequestObject();

var htmlelement = $m('txtHint');

var scache = new Array();
var pcache = new Array();

var debug = false;


function doSearch(val) {
  if (xmlSearchHttp) {
    if (val) {
      val = encodeURIComponent(val);
      scache.push("method=search&value=" + val);
    } else if (val && val.length == 0) {
		if (!htmlelement) {
			htmlelement = $m('txtHint');
		}
		htmlelement.style.visibility = 'hidden';
		htmlelement.innerHTML = '';
    }
    
    try  {
      if ((xmlSearchHttp.readyState == 4 || xmlSearchHttp.readyState == 0) && scache.length > 0)  {
        // get a new set of parameters from the scache
        var scacheEntry = scache.shift();

        if (scacheEntry == "value=") {
		if (!htmlelement) {
			htmlelement = $m('txtHint');
		}
		htmlelement.style.visibility = 'hidden';
		htmlelement.innerHTML = '';
        }

        // make a server request to validate the extracted data
        xmlSearchHttp.open("POST", serverAddress, true);
        xmlSearchHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlSearchHttp.onreadystatechange = handleSearchRequestStateChange;
        xmlSearchHttp.send(scacheEntry);
      }
    }
    catch (e)   {
    	if (debug) {
      		alert(e);
    	}
    }
  }
}

function handleSearchRequestStateChange()  {
  if (xmlSearchHttp.readyState == 4)  {
    if (xmlSearchHttp.status == 200) {
      try {
        readSearchResponse();
      }
      catch(e) {
    	if (debug) {
      		alert(e);
    	}
      }
    }
  }
}

function readSearchResponse()
{
  var response = xmlSearchHttp.responseText;

  if (!htmlelement) {
	htmlelement = $m('txtHint');
  }

  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0) throw(response.length == 0 ? "Server error." : response);
  responseXml = xmlSearchHttp.responseXML;

  xmlDoc = responseXml.documentElement;

  htmlelement.innerHTML = '';
  var trips = xmlDoc.getElementsByTagName("trip");
  var stops = xmlDoc.getElementsByTagName("stop");
  var places = xmlDoc.getElementsByTagName("place");

  if (trips && trips.length > 0) {
    htmlelement.style.visibility = 'visible';
    htmlelement.innerHTML += '<div style="margin-top:7px;"><strong>'+head_trip+'</strong></div>';
  	for (var i = 0; i < trips.length; i++) {
  		var id = trips[i].getAttribute("id");
		htmlelement.innerHTML += '<div style="margin-left:20px;margin-top:6px;"><a href="'+url+'trip/'+id+'">'+trips[i].firstChild.data+'</a></div>';
  	}
  }
  
  if (stops && stops.length > 0) {
    htmlelement.style.visibility = 'visible';
    htmlelement.innerHTML += '<div style="margin-top:7px;"><strong>'+head_stop+'</strong></div>';
  	for (var i = 0; i < stops.length; i++) {
  		var id = stops[i].getAttribute("id");
  		var trip = stops[i].getAttribute("trip");
		htmlelement.innerHTML += '<div style="margin-left:20px;margin-top:6px;"><a href="'+url+'trip/'+trip+'/'+id+'">'+stops[i].firstChild.data+'</a></div>';
  	}
  }

  if (places && places.length > 0) {
    htmlelement.style.visibility = 'visible';
    htmlelement.innerHTML += '<div style="margin-top:7px;"><strong>'+head_place+'</strong></div>';
  	for (var i = 0; i < places.length; i++) {
  		var id = places[i].getAttribute("id");
		htmlelement.innerHTML += '<div style="margin-left:20px;margin-top:6px;">'+places[i].firstChild.data+'</div>';
  	}
  }

  setTimeout("doSearch();", 500);
}

var kc = 0;
var tc = 0;

function doPlaceIDSearch(val) {
	kc++;
	var daa = setTimeout("doPlaceIDSearchReal(\'"+val+"\')",700);
}

function doPlaceIDSearchReal(val) {
  tc++;
  if (kc == tc) {

  if (pxmlSearchHttp && val && val.length > 3) {
    if (val) {
      val = encodeURIComponent(val);
      pcache.push("method=placesearch&value=" + val);
    } else if (val && val.length == 0) {

  		htmlelement = $m('placeHint');
  		htmlelement.style.visibility = 'hidden';
  		htmlelement.innerHTML = '';
    }
    
    try  {
      if ((pxmlSearchHttp.readyState == 4 || pxmlSearchHttp.readyState == 0) && pcache.length > 0)  {
        // get a new set of parameters from the scache
        var scacheEntry = pcache.shift();

        if (scacheEntry == "value=") {
    			htmlelement = $m('placeHint');
    		htmlelement.style.visibility = 'hidden';
    		htmlelement.innerHTML = '';
        }
        // make a server request to validate the extracted data
        pxmlSearchHttp.open("POST", serverAddress, true);
        pxmlSearchHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        pxmlSearchHttp.onreadystatechange = handleSearchRequestStateChange1000
        pxmlSearchHttp.send(scacheEntry);
      }
    }
    catch (e)   {
    	if (debug) {
      		alert(e);
    	}
    }
  }
  }
}

function handleSearchRequestStateChange1000()  {
  if (pxmlSearchHttp.readyState == 4)  {
    if (pxmlSearchHttp.status == 200) {
      try {
        readSearchResponse1000();
      }
      catch(e) {
    	if (debug) {
      		alert(e);
    	}
      }
    }
  }
}

function readSearchResponse1000()
{
  var response = pxmlSearchHttp.responseText;
  htmlelement = $m('placeHint');

  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0) throw(response.length == 0 ? "Server error." : response);

  responseXml = pxmlSearchHttp.responseXML;
  xmlDoc = responseXml.documentElement;
  htmlelement.innerHTML = '';

  var places = xmlDoc.getElementsByTagName("place");
  if (places && places.length > 0) {
    htmlelement.style.visibility = 'visible';
  	for (var i = 0; i < places.length; i++) {
  		var id = places[i].getAttribute("id");
		    htmlelement.innerHTML += '<div style="padding-left:2px;padding-top:3px;padding-bottom:3px;" id="rowd-'+i+'" onmouseover="document.getElementById(\'rowd-'+i+'\').style.backgroundColor = \'#239ee3\';" onmouseout="document.getElementById(\'rowd-'+i+'\').style.backgroundColor = \'#ffffff\';"><a href="" onclick="">'+places[i].firstChild.data+'</a></div>';
  	}
  }

  //setTimeout("doPlaceIDSearch();", 500);
}
