var req1 = "";
var timeout = null;
var curValue = "";
// var isScroll = false;

var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e2) {
    xmlHttp = false;
  }
}
@end @*/

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  xmlHttp = new XMLHttpRequest();
}


function doRequest(value)
{
	if (timeout) clearTimeout(timeout);
	var citySel = document.getElementById("citySel");
	var cityId = citySel.options[citySel.selectedIndex].value;
	var url = "/cgi-bin/wplus.net/street.pl?r=" + cityId + "&q=" + value;
  var url = encodeURI(url);
  xmlHttp.open("GET", url, true);
  xmlHttp.onreadystatechange = updatePage;
  xmlHttp.send(null);
}

function updatePage() {
  if (xmlHttp.readyState == 4) {
    var response = xmlHttp.responseText;
    updateList(response);
  }
}

function updateList(response){
	var elDiv = document.getElementById("streetDiv");
	elDiv.innerHTML = response;
	showList();
}

function showList(){
	var elDiv = document.getElementById("streetDiv");
	if (elDiv.innerHTML != "" && elDiv.innerHTML != "nothing"){
		elDiv.style.display = "inline";
	  if (elDiv.childNodes[0] && elDiv.childNodes[0].childNodes[0]){
			var elHeight = elDiv.childNodes[0].childNodes[0].offsetHeight * elDiv.getElementsByTagName("A").length;
			if (elHeight > 200) elHeight = elDiv.childNodes[0].childNodes[0].offsetHeight * 15;
	  
		   elDiv.style.height = (elHeight + 6) + "px";
	  }
	}
}

function hideList(){
	var elDiv = document.getElementById("streetDiv");
	elDiv.style.display = "none";
}

function SV(el){
	var elKey = document.getElementById("key");
	curValue = el.childNodes[0].innerHTML;
	elKey.value = curValue;
	elKey.focus();
	elKey.select();
	hideList();
}

function checkValue(){
	if (timeout) clearTimeout(timeout);
	var el = document.getElementById("key");
	var value = el.value.split(" ");
	if (el.value.toLowerCase() !=	req1 && el.value.toLowerCase() !=	req1 + " "){
		if (el.value.length > 2 || (value[1] && value[1].length > 2)){
			req1 = el.value.toLowerCase();
			if ((el.value.length > 3 && !value[1]) || (value[1] && value[1].length > 3) && req1 != curValue.toLowerCase()) timeout = setTimeout("doRequest('" + req1 + "')",2000);
			else if ((el.value.length == 3 && !value[1]) || (value[1] && value[1].length == 3)) doRequest(req1);
		}
	}
}

function CH(e){
	el = e.target || e.srcElement;
	if (el.id && (el.id == "streetDiv" || el.id == "key")) return;
	else hideList();
}


function MOvH(el){
	el.focus();
}

function MOtH(el){
	el.blur();
}

function FH(el){
	el.childNodes[0].className = "highlight";
}

function BH(el){
	el.childNodes[0].className = "window";
}

function KDH(e){
	var keynum;
	if (window.event) keynum = e.keyCode;
	else if(e.which) keynum = e.which
	el = e.target || e.srcElement;
	if (el.id == "key"){
		switch(keynum){
			case 40	:	var streetDiv = document.getElementById("streetDiv");
								if (streetDiv.style.display == "inline" && streetDiv.childNodes[0]){
										streetDiv.childNodes[0].focus();
										return false;
								}
								break;
			default	: return true;
								break;
		}
	}
	else{
		switch(keynum){
			case 13	:	SV(el);
								break;
			case 36	:	if (firstObject(el)){el.blur(); firstObject(el).focus()}
								break;
			case 35	:	if (lastObject(el)){el.blur(); lastObject(el).focus()}
								break;
			case 38	:	if (previousObject(el)){el.blur(); previousObject(el).focus(); /*if (isScroll){ document.getElementById("streetDiv").scrollTop -= 13; isScroll = false; }*/}
								break;
			case 40	:	if (nextObject(el)){el.blur(); nextObject(el).focus(); /*if (isScroll){ document.getElementById("streetDiv").scrollTop += 13; isScroll = false; }*/}
								break;
			default	: break;
		}
	}
	return true;
}

function firstObject(f) {
	do f = f.parentNode.firstChild; 
	while (f && f.nodeType != 1); 
	return f; 
} 

function lastObject(l) {
	do l = l.parentNode.lastChild;
	while (l && l.nodeType != 1); 
	return l; 
} 

function nextObject(n) {
	do n = n.nextSibling; 
	while (n && n.nodeType != 1); 
	return n; 
} 

function previousObject(p) { 
	do p = p.previousSibling; 
	while (p && p.nodeType != 1); 
	return p; 
} 

