var xmlHttp;
var actHint = 0;
var keyHandler = false;
var isBusy = false;
var hintPage = 1;
var formFocused = false;
var numberOfHints = 10; //default

function showHint(inputField) {
	document.onkeydown = catchKey;
	if(!keyHandler) {
		var str = inputField.value;
		if (str==null || str.length==0) { 
		  document.getElementById("txtHint").innerHTML=""
		  document.getElementById("txtHint").style.display="none"
		  document.getElementById("txtHintFrame").style.display = "none";
		  return
		}
		xmlHttp=GetXmlHttpObject()
		if (xmlHttp==null) {
		  alert ("Browser does not support HTTP Request")
		  return
	  	} 
		var url="plan/autoCompleteForm/gethint.php"
		//var url="gethint.php";
		//alert(encodeURI(str));
		url=url+"?q="+encodeURI(str);
		url=url+"&sid="+Math.random();
		//alert(url);
		if (isBusy)	{
			xmlHttp.onreadystatechange = function () {};
			xmlHttp.abort();
		}
		xmlHttp.onreadystatechange=stateChanged;
		xmlHttp.open("GET",url,true)
		xmlHttp.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
		isBusy = true;
		xmlHttp.send(null)
		actHint = 0;
	} else {
		
	}
} 

function generateResponse(input) {
	if(input!=null && input!="") {
		if(hintsConfig!==undefined) numberOfHints=hintsConfig;
		genResp = "<ul>";
		var respArr = input.split("|:|");
		//respArr.sort();
		var iteration = hintPage*numberOfHints;
		if(iteration>respArr.length) iteration=respArr.length;
		var j = 0;
		var startIteration = iteration-numberOfHints;
		if(startIteration<0) startIteration=0;
		if(numberOfHints>respArr.length) numberOfHints=respArr.length;
		if (!(respArr.length > 0)) {
			document.getElementById("txtHint").style.display = "none";
			document.getElementById("txtHintFrame").style.display = "none";
		}
		for(var i = startIteration; i<iteration; i++) {
			genResp += "<li onclick=\"selectHint(this);\" onmouseover=\"document.getElementsByName('txt1')[0].onblur=function(){}; hilightHint(this," + j++ + ");\"";
				genResp += "onmouseout=\"document.getElementsByName('txt1')[0].onblur=function(){formFocused = false;}; unhilightHint(this);\">";
				genResp += "<a href=\"#\" onmouseover=\"document.getElementsByName('txt1')[0].onblur=function(){}; this.style.color='#FFFFFF';\" onmouseout=\"this.style.color='#000000';\">";
			genResp += respArr[i] + "</a></li>\n";
		}
		genResp += "</ul>";
		if (respArr.length > numberOfHints) {
			if(hintPage==1) {
				genResp += "<a href=\"#\" class=\"linkSeachList\" style=\"margin-left: 10px;\" onclick=\"changePage(true); focusInput();\"><b>nastêpne</b></a><img src=\"img/search/ico_next.gif\" width=\"7\" height=\"7\" border=\"0\" alt=\"Nastêpne\" title=\"Nastêpne\" class=\"toCenter\"  />";
			} else if((hintPage*numberOfHints)<respArr.length) {
				genResp += "<img src=\"img/search/ico_back.gif\" width=\"7\" height=\"7\" border=\"0\" alt=\"Poprzednie\" title=\"Poprzednie\" class=\"toCenter\" style=\"margin-left: 10px\"  /><a href=\"#\" style=\"margin-right: 30px\" class=\"linkSeachList\" onclick=\"changePage(false); focusInput();\"><b>poprzednie</b></a>";
				genResp += "<a href=\"#\" class=\"linkSeachList\" onclick=\"changePage(true); focusInput();\"><b>nastêpne</b></a><img src=\"img/search/ico_next.gif\" width=\"7\" height=\"7\" border=\"0\" alt=\"Nastêpne\" title=\"Nastêpne\" class=\"toCenter\"  />";
			} else if((hintPage*numberOfHints)>=respArr.length) {
				genResp += "<img src=\"img/search/ico_back.gif\" width=\"7\" height=\"7\" border=\"0\" alt=\"Poprzednie\" title=\"Poprzednie\" class=\"toCenter\" style=\"margin-left: 10px\"  /><a href=\"#\" style=\"margin-right: 30px\" class=\"linkSeachList\" onclick=\"changePage(false); focusInput();\"><b>poprzednie</b></a>";
			}
		}
		
		/*
if(respArr.length>0 && document.getElementsByName('txt1')[0].value.length>0) {
			document.getElementById("txtHint").style.display="";
		} else {
			document.getElementById("txtHint").style.display="none";
		}
*/
		return genResp;
	}
	return "";
}

function focusInput() {
	document.getElementsByName('txt1')[0].focus();
}

function changePage(increment) {
	if(increment) {
		++hintPage;
	} else {
		--hintPage;
	}
	document.getElementById("txtHint").innerHTML=generateResponse(xmlHttp.responseText);
}

function stateChanged() {
	if(window.xmlHttp!==undefined) {
		if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
			hintPage=1;
			document.getElementById("txtHint").innerHTML=generateResponse(xmlHttp.responseText);
			arrLenght = document.getElementById("txtHint").getElementsByTagName("li").length;
			//alert(arrLenght);
			if(arrLenght==0) {
				hideHint();
			} else {
				if (formFocused != false && document.getElementsByName('txt1')[0].value.length > 0) {
					document.getElementById("txtHint").style.display = "";
					document.getElementById("txtHintFrame").style.display = "";
				}
				else {
					document.getElementById("txtHint").style.display = "none";
					document.getElementById("txtHintFrame").style.display = "none";
				}
				document.getElementById("txtHintFrame").style.width = document.getElementById("txtHint").offsetWidth;
				document.getElementById("txtHintFrame").style.height = document.getElementById("txtHint").offsetHeight;
				//alert(document.getElementById("txtHintFrame").style.display);
			}
			isBusy = false;
		}
	}
}

function hilightHint(hint, hintNumber) {
	var listLength = numberOfHints;
	if(document.getElementById("txtHint").getElementsByTagName("li").length<listLength) listLength=document.getElementById("txtHint").getElementsByTagName("li").length;
	if(actHint!=null && actHint>0 && actHint<listLength) {
		document.getElementById("txtHint").getElementsByTagName("li").item(actHint-1).style.background="#DEE7F3";
	}
	actHint = hintNumber+1;
	hint.style.background="#618AC6";
}

function unhilightHint(hint) {
	hint.style.background="#DEE7F3";
}

function selectHint(hint) {
	var selection = hint.firstChild.innerHTML.replace(/&nbsp;/g,' ').replace(/&amp;/g,'&').replace(/&gt;/g,'>');
	document.getElementsByName('txt1')[0].value=selection;
	hideHint();
	focusButton();
	document.getElementById('searchForm').submit();
}

function hideHint() {
	document.getElementById("txtHint").innerHTML="";
	document.getElementById("txtHint").style.display="none";
	document.getElementById("txtHintFrame").style.display = "none";
}

function catchKey(e) {
	var KeyID = (window.event) ? event.keyCode : e.keyCode;
	switch(KeyID) {
	    case 40:
	      //"downarrow";
	      if(formFocused) {
		      if(actHint!=null) {
		      	if(actHint<numberOfHints) {
			      	actItem = document.getElementById("txtHint").getElementsByTagName("li").item(actHint);
			      	if(actItem!=null) {
			      		actItem.style.background="#618AC6";
			      		if(actHint>0) {
			      			document.getElementById("txtHint").getElementsByTagName("li").item(actHint-1).style.background="#DEE7F3";
			      		}
			      		actHint++;
			      	}
			     } else {
			     	document.getElementById("txtHint").getElementsByTagName("li").item(actHint-1).style.background="#DEE7F3";
					actHint=0;
			     }
		      }
		      doSetCaretPosition(document.getElementsByName('txt1')[0], document.getElementsByName('txt1')[0].value.length);
		      keyHandler = true;
		  } else {
		  	  keyHandler = false;
		  }
	      break;
	    case 38:
	      //"uparrow";
	      if(formFocused) {
			  if(document.getElementById("txtHint").getElementsByTagName("li").length>0) {
				if(actHint>0) actHint--;
		      	else {
		      		actHint = document.getElementById("txtHint").getElementsByTagName("li").length;
		      	}
				if(document.getElementById("txtHint").getElementsByTagName("li").item(actHint)!=null) {
			      	actItem = document.getElementById("txtHint").getElementsByTagName("li").item(actHint);
		      		actItem.style.background="#DEE7F3"; //jasny
		      	}
	      		if(actHint>0 && document.getElementById("txtHint").getElementsByTagName("li").item(actHint)!=null) {
	      			document.getElementById("txtHint").getElementsByTagName("li").item(actHint-1).style.background="#618AC6"; //ciemny
	      		} 
				if(actHint == document.getElementById("txtHint").getElementsByTagName("li").length) {
					document.getElementById("txtHint").getElementsByTagName("li").item(actHint-1).style.background="#618AC6"; //ciemny
				}
		      }
		      doSetCaretPosition(document.getElementsByName('txt1')[0], document.getElementsByName('txt1')[0].value.length);
		      keyHandler = true;
	      } else {
			  keyHandler = false;
	      }
	      break;
	    case 13:
	      //"enter";
		  //alert('enter');
	      if(formFocused && document.getElementById("txtHint").getElementsByTagName("li").item(actHint-1)!=null) {
			  var selection = document.getElementById("txtHint").getElementsByTagName("li").item(actHint-1).firstChild.innerHTML.replace(/&nbsp;/g,' ').replace(/&amp;/g,'&').replace(/&gt;/g,'>');
		      document.getElementsByName('txt1')[0].value=selection;
		      keyHandler = true;
		  } else {
	      	  keyHandler = false;
	      }
	      break;
	    case 8:
	      //"backspace";
	      if(formFocused) {
			  keyHandler = false; //do not handle key itself, load the div
			  if(document.getElementsByName('txt1')[0].value.length<=1) {
				hideHint();
		      }
		  } else {
	      	  keyHandler = false;
	      }
	      break;
	    default:
	      keyHandler = false;
	      break;
	}
}

function GetXmlHttpObject() {
	//alert(1);
	var xmlHttp=null;
	try {
	 // Firefox, Opera 8.0+, Safari
	 xmlHttp=new XMLHttpRequest();
	} catch (e) {
	 // Internet Explorer
		try {
	  		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
	  	}
	 	catch (e) {
	  		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	  	}
	 }
	//alert(xmlHttp);
	return xmlHttp;
}

function doGetCaretPosition (ctrl) {

	var CaretPos = 0;
	// IE Support
	if (document.selection) {

		ctrl.focus ();
		var Sel = document.selection.createRange ();

		Sel.moveStart ('character', -ctrl.value.length);

		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;

	return (CaretPos);

}


function doSetCaretPosition(oField, iCaretPos){
	// IE Support
	if (document.selection) { 
	 // Set focus on the element
	 oField.focus ();
	 // Create empty selection range
	 var oSel = document.selection.createRange ();
	 // Move selection start and end to 0 position
	 oSel.moveStart ('character', -oField.value.length);
	 // Move selection start and end to desired position
	 oSel.moveStart ('character', iCaretPos);
	 oSel.moveEnd ('character', 0);
	 oSel.select ();
	 }
	 // Firefox support
	 else if (oField.selectionStart || oField.selectionStart == 0) {
		oField.selectionStart=iCaretPos;
		oField.selectionEnd=iCaretPos;
		oField.select ();
		//oField.setSelectionRange(iCaretPos,iCaretPos);
	 }
}

function focusButton() {
	//alert(document.getElementsByName('szukaj')[0]);
	document.getElementsByName('szukaj')[0].setAttribute('src',document.getElementsByName('szukaj2')[0].src);
	//document.getElementById('divszukaj').style.display="none";
	//document.getElementById('divszukajOn').style.display="";
}

