window.onload = function() {
	var searchWrapper =	document.getElementById('search_result_wrapper');
	var searchForm = document.getElementById('search_form');
	var searchInput = document.getElementById('search');
	var searchResult = document.getElementById('search_result');
	var searchClose = document.getElementById('search_result_close');			
	var ua = navigator.userAgent.toLowerCase();
	var dom = typeof window.addEventListener == "function";
	var ie = typeof window.attachEvent == "object";
	var elem;
	var col = 0;
	var first;
	var last;
	var hidden = false;
	var results = false;
	var mouseSelect = false;
	var Gecko = (ua.indexOf("gecko") != -1);
	keyClose();
	if (Gecko) {document.captureEvents(Event.KEYUP);}	
	if(typeof XMLHttpRequest == "undefined") {
		XMLHttpRequest = function() {
			return new ActiveXObject(navigator.userAgent.indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP")
		};
	}
	var xhr = new XMLHttpRequest();	
					
	searchWrapper.onmousedown = function() {
		mouseSelect = true;						
	};
	searchInput.onfocus = function() {
		if(results && hidden) keyOpen();						
		searchInput.onkeydown = function(event) {if (!event) event=window.event; keyDown(event);};
		searchInput.onkeyup = function(event) {if (!event) event=window.event; keyUp(event,'prompt='+searchInput.value);};
	};					
	searchInput.onblur = function() {
		if(!mouseSelect) {
			keyClose();
			hidden = true;						
		}
		else {							
			mouseSelect = false;
			setTimeout(function() {searchInput.focus();},10)
		}
	};					
	searchClose.onclick = function() {
		searchInput.blur();
	};
											
	function keyOpen() {
		searchWrapper.style.display = 'block';
	}
	function keyClose() {
		searchWrapper.style.display = 'none';
	}				
	function keyKode(e) {
		var key;	
		(Gecko) ? key = e.which : key = window.event.keyCode;
		return key;
	}				
	function keyUp(e,val) {
		var key = keyKode(e);
		if(key != 40 && key != 38 && key != 13 && key != 37 && key != 39) {
			loadData(val);						
		}						
	}
	function resetStyle() {
		var divs = searchResult.getElementsByTagName('div');
		for(var i = 0; i <divs.length; i++) {
			divs[i].style.background = 'none';
		}
	}					
	function setStyle(el) {
		el.style.background = '#eeeeee';
	}					
	function updatePos(div) {
		resetStyle();
		elem = div;
		col=1;
		setStyle(div);
	}					
	function searchVal() {
		searchInput.value = elem.innerHTML;
		keyClose();
		searchForm.submit();
	}										
	function keyDown(ev) {
		var key = keyKode(ev);													
		switch(key) {
			case 27:
				document.getElementById('search').blur();
				prompt_cont.style.display = 'none';
				break;
			case 13:
				searchVal();							
				break;
			case 38:						
				if (dom) ev.preventDefault();
				else if (ie) ev.returnValue = false;
				if(col==0) {
					bottom_first();
					col=1;
				}
				else top();
				break;
			case 40:
				if (dom) ev.preventDefault();
				else if (ie) ev.returnValue = false;
				if(col==0) {
					bottom_first();
					col=1;
				}
				else bottom();
				break;
		}
	}				
	function bottom_first() {
		elem = searchResult.firstChild;							
		setStyle(elem);
	}						
	function top() {
		if(elem == first) {
			resetStyle();
			elem = last;
			setStyle(elem);
		}
		else {
			resetStyle();
			elem = elem.previousSibling;
			setStyle(elem);							
		}
	}
	function bottom() {
		if(elem == last) {
			resetStyle();
			elem = first;
			setStyle(elem);
		}
		else {
			resetStyle();
			elem = elem.nextSibling;																
			setStyle(elem);
		}
	}
	function loadData(data) {																											
		if (xhr) {
			xhr.onreadystatechange = processReqChange;
			xhr.open("POST", "prompt.php", true);
			xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			xhr.send(data);
			//xhrTimeout = setTimeout("xhr.abort();", 5000);
		} else {
			// предупреждение
		}		
	}
	function processReqChange() {
		if (xhr.readyState == 4) {
			//clearTimeout(xhrTimeout);
			if(xhr.status == 200)  {
				col=0;
				document.getElementById('search_result').innerHTML = xhr.responseText;
				var wr = document.getElementById('search_result');
				var divs = wr.getElementsByTagName('div');
				if(divs.length > 0) {
					results = true;
					keyOpen();
					for(var i = 0; i <divs.length; i++) {									
						divs[i].onmouseover = function() {updatePos(this);};
						divs[i].onclick = function() {searchVal();};														
					}																																								
					first = searchResult.firstChild;
					last = searchResult.lastChild;
				}
				else {
					results = false;
					keyClose();
				}
			}																								
		}
	}
}

					