var xmlHttp;
var suggestions;
var actual = -1;
var lines = -1;
var query;
document.onkeyup = suggestKeyEvent;
//document.getElementById('query').setAttribute("autocomplete", "off");

function suggestKeyEvent(e) {
  var key;
  if (window.event)
    key = window.event.keyCode;
  else if (e)
    key = e.keyCode;
	switch(key) {
		case 38:
			actual = (actual < 0) ? lines-1 : actual-1; 
			obnov();
			break;
		case 40: 
			actual = (actual >= lines) ? 0 : actual+1;
			obnov();
			break;		
		default:
			ziskajData();
	}
}

function vytvorHttpRequest() {
	if (window.XMLHttpRequest)
		xmlHttp = new XMLHttpRequest();
	else if (window.ActiveXObject)
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

function ziskajData() {	
	queryVal = document.getElementById('query').value;
	if (queryVal.length < 3) {
	  hideSuggestions();
	  return;
	}
	vytvorHttpRequest();
	xmlHttp.open('GET', '/lib/suggest.php?q='+queryVal, true);
	xmlHttp.onreadystatechange = zmenaStavu;
	xmlHttp.send(null);
}

function obnov() {
	for (i = 0; i < lines; i++)
		suggestions.childNodes[i].style.background = "white";
	if (actual > -1 && actual < lines) {
		suggestions.childNodes[actual].style.background = "gray";
		document.getElementById('query').value = suggestions.childNodes[actual].firstChild.nodeValue;
	}
}

function hideSuggestions() {
  if (suggestions)
    suggestions.style.visibility = "hidden";
  actual = -1;
}

function zmenaStavu() {
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.status == 200) {
			suggestions = document.getElementById('suggestions');
			if (!suggestions) {
				suggestions = document.createElement("ul");
				suggestions.setAttribute("id", "suggestions");
				document.getElementById("search").appendChild(suggestions);
				query = document.getElementById('query');
			}
			while (suggestions.hasChildNodes()) {
				suggestions.removeChild(suggestions.lastChild);
			}			
			var response = xmlHttp.responseText.split(",");
			if (xmlHttp.responseText == "")
				suggestions.style.visibility = "hidden";
			else {
				lines = response.length;
				suggestions.style.visibility = "visible";
				for (var i in response) {
					li = document.createElement("li");
					li.setAttribute("onmouseover", "selectSuggestion(this, true)");
					li.setAttribute("onmouseout", "selectSuggestion(this, false)");
					//li.setAttribute('onclick', 'setSuggestion(this)');
					//li.onclick = function() { setSuggestion(li); };
					li.appendChild(document.createTextNode(response[i]));
					suggestions.appendChild(li);
				}
			}
		}
	}
}

function selectSuggestion(element, select) {
    if (actual > -1)
      suggestions.childNodes[actual].style.background = "white";
    if (select) {
      query.value = element.firstChild.nodeValue;
      element.style.background = "gray";
    } else
      element.style.background = "white";
}

function findPos(obj) {
  var curleft = 0;
  var curtop = 0;
  while (obj) {
    curleft += obj.offsetLeft;
    curtop += obj.offsetTop;
    obj = obj.offsetParent;
  }
  return [curleft,curtop];
}



function setSuggestion(element) {
  query.value = element.firstChild.nodeValue;
}
