﻿//<![CDATA[
var REQ;
var curTag = -1;
var Interval = new Array();
var NS = (navigator.appName == 'Netscape') ? 1 : 0;

var idTagAutoComplete = document.getElementById('SearchAutoComplete');
var search = document.getElementsByName('stx');
for(var i = 0; i < search.length; i++) {
	if(search[i].tagName.match(/^INPUT$/i)) {
		var TagSearch = search[i];
		break;
	}
}

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 TagAutoComplete() {
	var tag = TagSearch.value;
	if(tag == TagSearch.ovalue) {
		return false;
	}

	TagSearch.ovalue = tag;

	if(tag.trim() == "") {
		hideTagAutoComplete();
		return false;
	}

	REQ = null;
	REQ = newXMLHttpRequest();

	REQ.onreadystatechange = processGetTagAutoComplete;

	REQ.open("POST", g4_path+"/include/SearchAutoComplete.php", true);
	REQ.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	REQ.send("tag=" + tag);
}

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:100%;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 _left = findPosition(TagSearch, 1);
	var _top = findPosition(TagSearch, 0);

	with(idTagAutoComplete.style) {
		opacity = bgOpacity / 100;
		filter = "alpha(opacity="+bgOpacity+")";
		backgroundColor = bgColor;

		top = _top + TagSearch.offsetHeight + 'px';
		left = _left + 'px';
		width = TagSearch.offsetWidth - 6 + 'px';
		if(block == true) display = 'block';
	}
}

function findPosition(obj, type) {
	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 = g4_path + '/bbs/search.php?sfl=wr_subject%7C%7Cwr_content&stx=' + encodeURIComponent(t.replace('%', '%25'));
	return false;
}

function allClearInterval() {
	while(pop = Interval.pop()) {
		clearInterval(pop);
	}
}

String.prototype.trim = function () {
	return this.replace(/^\s*/g, "").replace(/\s*$/g, "");
}


function addEvent(obj, event, listener) {
	try	{
		obj.addEventListener(event, listener, false);
	} catch(e) {
		try {
			obj.attachEvent("on"+event, listener);
		} catch(e) { }
	}
}

addEvent(TagSearch, 'focus', showTagAutoComplete);
addEvent(window, 'resize', setTagAutoCompletePos);
addEvent(document, 'mousedown', function(e) {
	var evt = NS ? e : event;
	var target = NS ? 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, 'keypress', function(e) {
	var evt = NS ? 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 = NS ? 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;
	}
});

TagSearch.focus();
//]]>