//Google Suggest script
var queryURL = "?o=googlesuggest";
var UpDownKeyPressed = false;
var suggestions = 0;
var userQuery = '';
var position = -1;
var lang = 'pl';
var portal;
var searchBox = 'search11';
var oCache = new Object();

window.onload = init;
document.onmousedown = function(){
	if(position == -1) hideHints();
}

function init(){
	var queryBox = document.getElementById(searchBox);
	queryBox.setAttribute("autocomplete", "off");
	queryBox.value ="";
	hideHints();
}

function addToCache(keyword, content){
	oCache[keyword] = content;
}

function checkCache(keyword){
	if(oCache[keyword]){
	 return true;
	}
	return false;
}

function hideHints(){
	var hintDisp = document.getElementById('hints');
	hintDisp.style.display = "none";
	hintDisp.innerHTML = '';
}

function displayHints(result){
	var hintDisp = document.getElementById('hints');
	hintDisp.style.display = "block";
	hintDisp.innerHTML = oCache[result];
	var str = oCache[result].toString().split('<tr id');
	suggestions = str.length - 1;
}

function updateQuery(string){
	var query = document.getElementById(searchBox);
	query.value = string;
}

function selectHint(hint) {
	var queryBox = document.getElementById(searchBox);
	var hintDisp = document.getElementById('hints');
	var cellStr = hint.cells[0].innerHTML.replace(/<b>/gi,'').replace(/<\/b>/gi,'');
	updateQuery(cellStr);
	queryBox.focus();
	hideHints();
	queryBox.form.submit();
}

function getHint(query) {
	var res = 'table';
	var user = navigator.userAgent;
	var result = '';

	if(checkCache(query)){
		displayHints(query);
	} else {
		var queryAddress = "http://" + portal + queryURL;
		advAJAX.post({
				url: queryAddress,
				parameters : {
					'query' : query,
					'res' : res,
					'user' : user,
					'lang' : lang
				},
				onSuccess : function(obj) {
					var ret = obj.responseText ;
					if (ret !='') {
						if(query == userQuery){
						addToCache(query, ret);
						displayHints(query);
						} else {
							addToCache(query, ret);
						}
					} else {
						hideHints();
					}
				}
		}) ;
	}
}

function deselectHints(){
	for(var i=0; i<suggestions; i++){
		var oCtrlTr = document.getElementById("tr" + i);
		oCtrlTr.className = "";
	}
}

function mouseOver(otr){
	deselectHints();
	otr.className = "highlight";
	position = otr.id.substring(2,otr.id.length);

}

function mouseOut(otr){
	otr.className = "";
	position = -1;
}

function keyUp(e, fLang, fPortal){
	userQuery = document.getElementById(searchBox).value;
	portal = fPortal;
	lang = fLang;
	e = (!e) ? window.event : e;
	target = (!e.target) ? e.srcElement : e.target;
	if (target.nodeType == 3) target = target.parentNode;

	code = (e.charCode) ? e.charCode :
	((e.keyCode) ? e.keyCode :
	((e.which) ? e.which : 0));

	if (e.type == "keyup"){
		UpDownKeyPressed = false;
		switch(code){
			//backspace
			case 8:
				hideHints();
				if(userQuery.length > 0){
					updateQuery(userQuery);
					getHint(userQuery);
				}
			break;
			//enter
			case 13:
				if(position >= 0)	updateQuery(userQuery);
			break;
			//escape
			case 27:
				hideHints();
			break;
			//up arrow
			case 38:
				newTR=document.getElementById("tr"+(--position));
				oldTR=document.getElementById("tr"+(++position));
				// usuwa stare zaznaczenie
				if(position>=0 && position <= suggestions - 1){
					oldTR.className = "";
				}
				// zaznacza nową podpowiedź i aktualizuje słowo kluczowe
				if(position > 0) {
					newTR.className = "highlight";
					var cellStr = newTR.cells[0].innerHTML.replace(/<b>/gi,'').replace(/<\/b>/gi,'');
					updateQuery(cellStr);
					position--;
				} else if(position == 0) position--;
				e.cancelBubble = true;
				e.returnValue = false;
				UpDownKeyPressed = true;
			break;
			//down arrow
			case 40:
				newTR=document.getElementById("tr"+(++position));
				oldTR=document.getElementById("tr"+(--position));
				// usuwa stary wybór
				if(position>=0 && position<suggestions-1)
					oldTR.className = "";

				// wybiera nową podpowiedź i aktualizuje słowo kluczowe
				if(position < suggestions - 1)
				{
					newTR.className = "highlight";
					var cellStr = newTR.cells[0].innerHTML.replace(/<b>/gi,'').replace(/<\/b>/gi,'');
					updateQuery(cellStr);
					position++;
				}
				e.cancelBubble = true;
				e.returnValue = false;
				UpDownKeyPressed = true;
			break;
			//inne przyciski
			default:
				getHint(userQuery);
		}
	}
}
