//Gets the browser specific XmlHttpRequest Object

function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();

var liFocus = 0;
var elems = null;
//Called from keyup on the search textbox.
//Starts the AJAX request.
var tmr2 = null;
var c_sstr = null;
var _executor = null;
function genSuggest(){

    searchReq.abort();
	
	if (searchReq.readyState ==4||searchReq.readyState==0){
		var str = null;
		if(_searchInput!=null) str = _searchInput.value;
		else str = document.getElementById('frmSearch_tbQueryStr').value;
		var isClosed = $('#search_suggest').css('display') == 'none';
		if(str.length>1&&(str!=c_sstr||isClosed)){
			c_sstr = str; liFocus = 0;
			str = encodeURIComponent(str);
			searchReq.open("GET", '/wtools/suggest/genSuggest.php?ls=48&tag=' + str, true);
			searchReq.onreadystatechange = handleSuggests; 
			searchReq.send(null);
		}
	}
	
	clearTimeout(tmr2);
}
arrKEY = {enter: 13, left: 37, up: 38, right: 39, down: 40};
function onTxtKeyUp(event,who) {
	var _o = _searchInput;
	if(who!=null&&who!='undefined') _searchInput = who;
	else _searchInput = document.getElementById('frmSearch_tbQueryStr');
	if(_o!=_searchInput) liFocus = 0;
	
	var keyCode= event.keyCode;
	var isOpen = $('#search_suggest').css('display') == 'block';
	var onChange = (keyCode != arrKEY.up && keyCode != arrKEY.down && keyCode != arrKEY.left && keyCode != arrKEY.right && keyCode != arrKEY.enter);

	if(!isOpen || isOpen&&onChange) tmr2 = setTimeout('genSuggest()',250);
}
function onTxtKeyDown() {
	if(tmr2) clearTimeout(tmr2);	
}

//Called when the AJAX response is returned.
function handleSuggests() {
	if (searchReq.readyState==4&&searchReq.status==200) {
		if(searchReq.responseText=='') return;
		var str = searchReq.responseText.split("\n");
		
		var cc = 0; height = null;
		$('#search_suggest').html('');
		var ss = document.getElementById('search_suggest');
		for(i=0; i < str.length - 1; i++) {
			//Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
			var suggest = '<div id="i'+(cc+1)+'" title="'+str[i]+'" onmouseover="suggestOver(this);" ';
			suggest += 'onmouseout="suggestOut(this);" ';
			suggest += 'onclick="setSearch(this.innerHTML);" ';
			suggest += 'class="suggest_link">' + str[i] + '</div>';
			ss.innerHTML += suggest;
			cc++; elems = cc+1; liFocus =0;
			if(cc>48) {
				ss.innerHTML += '<div align="center">..</div>'
				break;
			}
			if(cc<=12) height  = (cc*18)+'px';
		}

		if(_searchInput!=null) { 
			ss.style.left = offset(_searchInput, 'x') + 'px';
			
			if(height!=null) $('#search_suggest').css('height',height);
			if($('#'+_searchInput.id).offset().top>$(window).height()/2){
				ss.style.top = null;
				ss.style.bottom = '25px';
				ss.style.position = 'fixed';
			}
			else{
				var newtop = offset(_searchInput, 'y');
				
				ss.style.bottom = null;
				ss.style.top = (newtop + _searchInput.offsetHeight + 1) + 'px';
				ss.style.position = 'absolute';
			}
			
			if($('#search_suggest').css('display')=='none') {
				$('#search_suggest').show('fast');
			}
		}		
	}
}
//Toggle function
var tmr = null;
function closeSuggest(){
	$('#search_suggest').html('');
	$('#search_suggest').hide();
	clearTimeout(tmr);
}
function hideMe(value) {	
	if(document.activeElement==document.getElementById('search_suggest')) return;
	tmr = setTimeout('closeSuggest()',180);	
}
//Mouse over function
function suggestOver(div_value) {
	$('div#i'+liFocus).removeClass('suggest_link_over');
	$('div#i'+liFocus).addClass('suggest_link');

	liFocus = div_value.id.substr(1);
	div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
	_searchInput.value = value;
	$('#search_suggest').html('');
	$('#search_suggest').hide();
}
