//<![CDATA[
var REQ;
var tagSearch = null;
var idTagAutoComplete = null;
var curTag = -1;
var interval = new Array();


function newXMLHttpRequest() {
	var xmlReq = false;

	if(window.XMLHttpRequest) {
		xmlReq = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		try {
			xmlReq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e1) {
			try {
				xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e2) {
			}
		}
	}

	return xmlReq;
}

function addEvent(obj, event, listener) {
	try	{
		obj.addEventListener(event, listener, false);
	} catch(e) {
		try {
			obj.attachEvent("on"+event, listener);
		} catch(e) { }
	}
}

String.prototype.trim = function () {
	return this.replace(/^\s*/g, "").replace(/\s*$/g, "");
}


function tagAutoComplete() {
	var tag = tagSearch.value;
	if(tag == tagSearch.ovalue) return false;

	tagSearch.ovalue = tag;

	if(tag.trim() == "") {
		hideTagAutoComplete();
		return false;
	}


	REQ = new newXMLHttpRequest();

	REQ.onreadystatechange = processGetTagAutoComplete;

	REQ.open("POST", tagAutoCompleteURL + "/TagAutoComplete.php", true);
	REQ.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	REQ.send("tag=" + tag + "&blogid=" + blogid + "&selectLimit=" + selectLimit + "&tagVisibility=" + tagVisibility);
}

function processGetTagAutoComplete() {
	if(REQ.readyState == 4) {
		if(REQ.status == 200) {
			var item = REQ.responseXML.getElementsByTagName("item");
			var tags = '';
			curTag = -1;

			if(item.length != 0) {
				for(var i = 0; i < item.length; i++) {
					try {
						var tag = item[i].firstChild.nodeValue;
						if(tag.trim() == "") tag = item[i].textContent;
						tag = tag.trim().replace(/"/, '&quot;').replace(/<.*>/g, '');

						tags += '<div style="width:150%;overflow:hidden;cursor:pointer;color:'+tagColor+';font:'+tagFont+';background-color:'+bgColor+'" onclick="tagSearchSubmit(this.innerHTML);return false;" onmouseover="curTag='+i+';selectTag();">' + tag + '</div>';
					} catch(e) { continue; }
				}

				setTagAutoCompletePos(true);

				idTagAutoComplete.innerHTML = tags;
			} else {
				hideTagAutoComplete();
			}
		} else {
			hideTagAutoComplete();
		}
	}
}

function setTagAutoCompletePos(block) {
	var leftPos = findPosition(tagSearch, 1);
	var topPos = findPosition(tagSearch, 0);

	with(idTagAutoComplete.style) {
		opacity = bgOpacity / 100;
		filter = "alpha(opacity="+bgOpacity+")";
		backgroundColor = bgColor;

		top = topPos + tagSearch.offsetHeight + 'px';
		left = leftPos + 'px';
		width = tagSearch.offsetWidth - 6 + 'px';
		if(block == true) display = 'block';
	}
}

function findPosition(obj, type) {
	//var NS = (navigator.appName == 'Netscape') ? 1 : 0;
	var cur = type ? obj.offsetLeft : obj.offsetTop;
	obj = obj.offsetParent;

	while(obj) {
		cur += type ? obj.offsetLeft : obj.offsetTop;
		//if(!NS) { cur += type ? obj.clientLeft : obj.clientTop;}
		obj = obj.offsetParent;
	}

	return cur;
}

function selectTag() {
	if(idTagAutoComplete.style.display == 'none') return false;

	var el = idTagAutoComplete.getElementsByTagName('div');

	for(var i = 0; i < el.length; i++)
		el[i].style.backgroundColor = (curTag == i) ? bgOverColor : bgColor;

	allClearInterval();
	tagSearch.value = el[curTag].innerHTML;
}

function hideTagAutoComplete() {
	idTagAutoComplete.style.display = 'none';
}

function showTagAutoComplete() {
	if(idTagAutoComplete.innerHTML.trim() != "") idTagAutoComplete.style.display = 'block';
}

function tagSearchSubmit(t) {
	window.location.href = path + '/search/' + t.replace('%', '%25');
	return false;
}

function allClearInterval() {
	while(pop = interval.pop()) clearInterval(pop);
}


addEvent(window, 'load', function(e) {
	var newEl = document.createElement('div');
	newEl.id = 'TagAutoComplete';
	with(newEl.style) {
		display		= 'none';
		position	= 'absolute';
		zIndex		= 999;
		padding		= '3px';
		border		= '1px solid #333333';
	}

	idTagAutoComplete = document.body.appendChild(newEl);


	var search = document.getElementsByName('search');
	for(var i = 0; i < search.length; i++) {
		if(search[i].nodeName.match(/^INPUT$/i)) {
			tagSearch = search[i];
			break;
		}
	}

	if(tagSearch) {
		addEvent(window, 'resize', setTagAutoCompletePos);
		addEvent(document, 'mousedown', function(e) {
			var evt = e ? e : event;
			var target = evt.target ? evt.target : evt.srcElement;

			if(evt.button == 0 || evt.button == 1) {
				if(target != tagSearch) {
					var el = idTagAutoComplete.getElementsByTagName('div');

					for(var i = 0; i < el.length; i++) {
						if(target == el[i]) return false;
					}

					hideTagAutoComplete();
				}
			}
		});

		addEvent(tagSearch, 'focus', showTagAutoComplete);
		addEvent(tagSearch, 'keypress', function(e) {
			var evt = e ? e : event;

			if(evt.keyCode == 13) {
				if(curTag == -1) return true;

				tagSearchSubmit(tagSearch.value);
				return false;
			}
		});
		addEvent(tagSearch, 'keydown', function(e) {
			var el = idTagAutoComplete.getElementsByTagName('div');
			var evt = e ? e : event;

			allClearInterval();

			switch(evt.keyCode) {
				case 9 :
					hideTagAutoComplete();
					return true;
				case 40 :
					curTag = ++curTag % el.length;
					selectTag();
					evt.returnValue = false;
					return false;
				case 38 :
					curTag = (--curTag < 0 ) ? el.length-1 : curTag % el.length;
					selectTag();
					evt.returnValue = false;
					return false;
				default :
					interval[interval.length] = setInterval("tagAutoComplete()", 10);
					return true;
			}
		});

		if(searchFocus) tagSearch.focus();
	}
});
//]]>
