﻿var aso = null;
function ajaxSearchObject(container) {
	this._container = container;
	this._activeNode = -1;
	this._lastString = "";
	this._interval = null;
}
ajaxSearchObject.prototype.focusNode = function(id) {
	var node = this._container.getElementsByTagName("li");
	if(id==null) { this._activeNode = -1; }
	for(var i=0; i<node.length; i++) {
		if(node[i].getElementsByTagName("a").length>0) {
			if(node[i].id!=id) {
				node[i].className = "passive";
			} else {
				node[i].className = "active";
				this._activeNode = i;
			}
		}
	}
}
ajaxSearchObject.prototype.moveFocus = function(step) {
	var nodeCount = this.nodeCount();
	var nextNode = this._activeNode+step;
	if(nextNode > (nodeCount-1)) {
		nextNode = nodeCount-1;
	} else if(nextNode<0) {
		nextNode = -1;
	}
	if(nextNode!=null&&nextNode>-1) {
		this.focusNode("searchNode["+nextNode+"]");
	} else {
		this.focusNode(null);
	}
}
ajaxSearchObject.prototype.nodeCount = function() {
	var node = this._container.getElementsByTagName("li");
	var count = 0;
	for(var i=0; i<node.length; i++) {
		count += (node[i].getElementsByTagName("a").length>0)? 1 : 0;
	}
	return count;
}
ajaxSearchObject.prototype.followNode = function(id) {
	var node = o((id==null)? "searchNode["+this._activeNode+"]" : id);
	var url = (node)? node.getElementsByTagName("a")[0].href : null;
	if(url!=null&&url!="") {
		location.href = url;
		return false;
	} else {
		return true;
	}
}
function ajaxSearch(str) {
	var searchMenu = o("ajaxSearchMenu");
	if(str.length<4) return killAjaxSearch();
	if(searchMenu==null) {
		var searchInput = o("sideSearchInput");
		searchMenu = document.createElement("div");
		searchMenu.setAttribute("id","ajaxSearchMenu");
		searchMenu.className = "searchMenu";
		//searchMenu.style.position = "absolute";
		//searchMenu.style.top = (getTop(searchInput)+searchInput.offsetHeight)+"px";
		//searchMenu.style.left = getLeft(searchInput)+"px";
		searchMenu.style.width = (searchInput.offsetWidth)+"px";
		searchInput.parentNode.parentNode.appendChild(searchMenu);
	}
	if(aso==null) {
		aso = new ajaxSearchObject(searchMenu);
	}
	if(str!=aso._lastString) {
		if(aso._interval!=null)
			clearTimeout(aso._interval);
		aso._interval = setTimeout("commonAjax(\"/functions/ajaxsearch.wu?q="+escape(str)+"\",\"ajaxSearchMenu\",null,\"aso._lastString=\\\""+str+"\\\"; aso.focusNode(null);\");",400);
	}
}
function killAjaxSearch() {
	var searchMenu = o("ajaxSearchMenu");
	if(aso&&aso._interval!=null)
		clearTimeout(aso._interval);
	if(searchMenu!=null&&!isOver(searchMenu,cX,cY)) {
		searchMenu.parentNode.removeChild(searchMenu);
	} else {
		return false;
	}
	aso = null;
}
function ajaxKeyEvent(e,type) {
	var keynum = (window.event)? e.keyCode : e.which;
	if(type=="down") {
		switch(keynum) {
		case 40:
			aso.moveFocus(1);
			if (e.preventDefault) e.preventDefault();
			if (e.cancelBubble) e.cancelBubble = true;
			if (e.returnValue) e.returnValue = false;
			break;
		case 38:
			aso.moveFocus(-1);
			if (e.preventDefault) e.preventDefault();
			if (e.cancelBubble) e.cancelBubble = true;
			if (e.returnValue) e.returnValue = false;
			break;
		case 27:
			killAjaxSearch();
			if (e.preventDefault) e.preventDefault();
			break;
		}
	} else if(type=="up") {
		if(o("sideSearchInput").value.length<3)
			return killAjaxSearch();
			
		if(aso!=null) {
			if(aso._lastString!=o("sideSearchInput").value) {
				ajaxSearch(o("sideSearchInput").value);
			}
		} else if(keynum!=27) {
			ajaxSearch(o("sideSearchInput").value);
		}
	}
}