var sg = {
	/* Našeptáváme? */
	on : true,
	chkBtn: null,
	chkBtnId: "use_suggest",
	
	/* Skrýváme našeptávač? */
	hidden : true,
	
	/* ID divů výstupu */
	boxID : "sgOut",
	boxContentID : "sgOutContent",

	/* Obsahy divů výstupu */
	box : null,
	content : null,
	debug : null,
	
	/* Spouštěč našeptávání */
	initID : "search1",
	init : null,
	
	/* Položky v seznamu */
	items : new Array(),
	
	/* Testovací výsledek */
	xmlHttp : null,
	
	/* Vybraná položka v items */
	selLi : null,
	
	/* Číslo vybrané položky */
	selLiNo : -1,
	
	constructor: function() {
		if (sg.on) {
			sg.box = document.getElementById(sg.boxID);
  		  	sg.content = document.getElementById(sg.boxContentID);
			sg.init = document.getElementById(sg.initID);
			sg.chkBtn = document.getElementById(sg.chkBtnId);
			sg.setEvent();
		}
		else {
			sg.destroy();
			sg.hide();
		}
	},
	
	
	send : function () {
		if (sg.chkBtn.checked) {
			var xmlHttp = sg.getXmlHttpObject();
			var query = sg.init.value;
			if (xmlHttp) {
				var url = "/suggest/suggest.php";
				url=url+"?q="+(sg.urlencode(query));
				url=url+"&sid="+Math.random();
				//alert(url);
				xmlHttp.open("GET",url,true);			
				xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')				
				xmlHttp.onreadystatechange=function () { 
					if(xmlHttp.readyState==4) {
						sg.destroy();
						sg.getResult(eval("({result: " + xmlHttp.responseText + "})"));
					}
				}
				xmlHttp.send(null);
			}
		}
	},
	
	
	getResult : function(json) {
		//alert(json.result[0].part.head);
		if (json.result.length > 0 && json.result != null) {
			for (var i = 0; i < json.result.length; i++) {
				sg.getOneResult(json.result[i]);
			}
			sg.display();
    	}
		else {
			sg.destroy();
			sg.hide();
		}
	},
			
	getOneResult : function(part) {	
		ulRubrika = document.createElement("ul");
		ulZbozi = document.createElement("ul");
		
		
		//alert(part.ret[1].rubrika);
		for(var i = 0; i < part.ret.length; i++) {
			//alert(part.ret.length);
			var li = document.createElement("li");

			li.href = part.ret[i].no;
			li.onclick = sg.clickOnItem;
			li.onmouseover = function() { return sg.selectItem(this); };
			li.onmouseout = function() { for (var i in sg.items) {sg.items[i].className = "";} return true;};

			if (part.ret[i].text) {
				if (ulZbozi.hasChildNodes() == false) {
					title = document.createElement("h3");
					title.innerHTML = "Zboží v katalogu";
					ulRubrika.appendChild(title);
				}
				li.innerHTML = part.ret[i].text;
				ulZbozi.appendChild(li);
			}
			if (part.ret[i].rubrika) {
				if (ulRubrika.hasChildNodes() == false) {
					title = document.createElement("h3");
					title.innerHTML = "Kategorie zboží";
					ulRubrika.appendChild(title);
				}
				li.innerHTML = part.ret[i].rubrika;
				ulRubrika.appendChild(li);
			}
			
			sg.items.push(li);
		}
		sg.content.appendChild(ulRubrika);
		sg.content.appendChild(ulZbozi);
	},
	
	parseOneRes : function(res) {
    	if(res.content.length > 0) {
      		if(res.heading) {
        		var h6 = document.createElement("h6");
				h6.innerHTML = res.heading;
				h6.className = sug.listHeadClasses[res.className];
				sug.sugBoxContent.appendChild(h6);
    		}
			var ul = document.createElement("ul");
			for(var i = 0; i < res.content.length; i++){
				var li = document.createElement("li");
				li.innerHTML = res.content[i];
				if(res.urls[i] != undefined) {
						li.href = res.urls[i];
					}
				li.onclick = sug.processClickOnList;
				li.onmouseover = function() { return sug.markItem(this); };
				li.onmouseout = function() { return sug.unmarkItem(); };
				sug.list.push(li);
				ul.appendChild(li);
			}
      	sug.sugBoxContent.appendChild(ul);
    	}
  	},
	
	
	getXmlHttpObject: function() {
		var xmlHttp;
		try	 {
			// Firefox, Opera 8.0+, Safari
			sg.xmlHttp=new XMLHttpRequest();
		}
		catch (e) {
			// Internet Explorer
		 	try	{
		  		sg.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		  	}
		 	catch (e)  {
		  		sg.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		  	}
		}
		return sg.xmlHttp;
	},
	
	
	destroy : function() {
		while (sg.content.childNodes.length > 0)
      		sg.content.removeChild(sg.content.childNodes[0]);
		if(sg.items.length > 0)	sg.items.length = 0;
		sg.selLiNo = -1;
		sg.selLi = null;
	},
	
	
	display : function() {
		if (sg.content.hasChildNodes()) {
			var pos = sg.getObjPos(sg.init);
			sg.box.style.position = "absolute";
			sg.box.style.left = pos["x"] + "px";
			sg.box.style.top = (pos["y"] + sg.init.offsetHeight - 1) + "px";
			sg.box.style.visibility = "visible";
			sg.hidden = false;
			
			var div = document.createElement("div");
			div.className = "sgOutCloseDiv";
			div.innerHTML = "<a href=\"javascript:sg.destroy();sg.hide();sg.init.focus();\">Zavřít okno</a>";
			//div.appendChild(aClose);
			sg.content.appendChild(div);
		}
	},
	
	
	hide : function() {
		setTimeout(function () {sg.box.style.visibility = "hidden"; }, 300);
		sg.hidden = true;
	},
		

	cancelEvent : function(event) {
		event = (!event && window.event) ? window.event : event;
		event.cancelBubble = true;
		event.returnValue = false;
		event.cancel = true;
		return false;  
	},
	
	
	getObjPos : function(obj) {
  		var curLeft = curTop = 0;
  		var position = new Array();
  	
  		if (obj.offsetParent) {
  			curLeft = obj.offsetLeft
  			curTop = obj.offsetTop
  			while ((obj = obj.offsetParent) != null) {
  				curLeft += obj.offsetLeft
  				curTop += obj.offsetTop
  			}
  		}
  		position["x"] = curLeft;
  		position["y"] = curTop;
  		return position;
  	},
	
	
	clickOnItem : function(event) {
		event = (!event && window.event) ? window.event : event;
		if(sg.selLi) {
			if(sg.selLi.href) {
				//alert(sg.selLi + " href: " + sg.selLi.href);
				//sug.submit = false;		
				window.location = sg.selLi.href;
				return sg.cancelEvent(event);
			} 
			else {
				if(sg.init) {
  	  	 			sg.init.value = sg.selLi.innerHTML;
    				//sg.init.form.submit();
				}
			}
		}
    	alert(sg.items[sg.selLiNo].innerHTML);
		return true;
  	},


	keyPress : function(event) {
		event = (!event && window.event) ? window.event : event;
		switch (event.keyCode) {
			case 38: {
				sg.keyUp();
				return sg.cancelEvent(event);
				break;
			}
			case 40: {
				sg.keyDown();
				return sg.cancelEvent(event);
				break;
			}
			case 27: {
				sg.destroy();
				sg.hide();
				sg.init.focus();
				return sg.cancelEvent(event);
				break;
			}
			case 13: {
				if (sg.selLi)
					sg.clickOnItem(event);
				else
					window.location = "/search.php?q=" + sg.urlencode(sg.init.value);
				return sg.cancelEvent(event);
				break;
			}
		}
		return true;
	},
	
	selectItem : function (itm) {
		for (var i in sg.items) {
			sg.items[i].className = "";
		}
		sg.selLi = itm;
		sg.selLi.className = "sg_selItem";
		for (var i in sg.items) {
			if (sg.items[i] == sg.selLi) {
				sg.selLiNo = i;
				break;
			}
		}
	},
		
	keyUp : function() {
		if ((sg.selLiNo > 0) && (sg.hidden == false)) {
			sg.selectItem(sg.items[--sg.selLiNo]);
		}
	},

	keyDown : function() {
		if ((sg.selLiNo < (sg.items.length - 1)) && (sg.hidden == false)) {
			sg.selectItem(sg.items[++sg.selLiNo]);
		}
	},
	
	startSearching : function(event) {
		event = (!event && window.event) ? window.event : event;
		
		if ((event.keyCode == 8) || (event.keyCode == 32) || (event.keyCode >= 46)) {
			sg.send();
    	}
	},
	
	setEvent : function() {
		sg.init.onkeydown = sg.keyPress;
		sg.init.onkeyup = sg.startSearching;
		if (sg.init.attachEvent) {
			sg.init.attachEvent("onblur", sg.hide);
		}
		else if (sg.init.addEventListener) {
			sg.init.addEventListener("blur", sg.hide, false);
		}
	},
	
	
	urlencode : function (str)  {
		var ret = str;
    
		ret = ret.toString();
		ret = encodeURIComponent(ret);
		ret = ret.replace(/%20/g, '+');

	return ret;
	},
	
	statusSug : function(what) {
		var stat = what.checked;
		if (stat) {
			sg.destroy();
			sg.hide();
			sg.on = false;
			sg.init.autocomplete = "on";
			sg.init.setAttribute("autocomplete","on");
		}
		else {
			sg.hidden = false;
			sg.on = true;
			sg.init.autocomplete = "off";
			sg.init.setAttribute("autocomplete","off");
			
		}
	}
	
};

if(window.attachEvent)
  window.attachEvent("onload", sg.constructor);
else
  window.addEventListener("load", sg.constructor, false);


