function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		//alert("Your Browser doesnot support ajax.");
	}
}

var searchReq = getXmlHttpRequestObject();

function searchSuggest() {
	var txt = document.getElementById('agkw');
	
	txt.onkeyup = function( e ) {
        e = (e) ? e : ((window.event) ? event : null);
		if (e)
		{
			switch( e.keyCode ) {
				case 27://Esc
					clearSuggest();
					break;
				case 38: //up
					break;
				case 40: //down
					break;
				default:
					if (searchReq.readyState == 4 || searchReq.readyState == 0) 
					{
						var str = escape(document.getElementById('agkw').value);
						searchReq.open("GET", 'http://www.onscreenasia.com/annualguide/includes/suggest.asp?search=' + str, true);
						searchReq.onreadystatechange = handleSearchSuggest; 
						searchReq.send(null);
					}
					else
					{
						clearSuggest();
					}

				break
			}
		}
    }
}

function handleSearchSuggest() {
var usrAgt = navigator.userAgent.toLowerCase();
	if (searchReq.readyState == 4) 
	{
		var ss = document.getElementById('search_suggest');
		var txt = document.getElementById('agkw');
		
		if (usrAgt.indexOf("msie") != -1)
		{
		    ss.style.left = txt.style.left;
		}
		else
		{
		    ss.style.left = txt.offsetLeft + 'px';	
		}
		
		   ss.style.width = txt.offsetWidth + 'px';	
		
		
		ss.innerHTML = '';
		ss.style.display = 'block';
		
		if (searchReq.responseText != '0')
		{
			var str = searchReq.responseText.split('x~x');

			for(i=0; i < str.length - 1; i++) 
			{
				var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
				suggest += 'onmouseout="javascript:suggestOut(this);" ';
				suggest += 'onclick="javascript:setSearch(this.innerHTML);clearSuggest();searchSubmit();" ';
				suggest += 'class="suggest_link">' + str[i] + '</div>';
				ss.innerHTML += suggest;
			}
			
			if (ss.innerHTML == "")
			{
			    clearSuggest();
			}
			else
			{
			    new autocomplete();
			}
		}
		else
		{
			clearSuggest();
		}
	}
	else
	{
		clearSuggest();
	}
}

//Mouse over function
function suggestOver(div_value) {
	div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
	value = refineString(value);
	document.getElementById('agkw').value = value;
	document.getElementById('search_suggest').innerHTML = '';
}
function clearSuggest()
{
	document.getElementById('search_suggest').innerHTML = '';
	document.getElementById('search_suggest').style.display = 'none';
}

function autocomplete() {
    var ac = this;
    this.textbox     = document.getElementById('agkw');
    this.layer         = document.getElementById('search_suggest');
    this.list        = this.layer.getElementsByTagName('div');
    this.pointer     = null;

    this.textbox.onkeydown = function( e ) {
        e = e || window.event;
        switch( e.keyCode ) {
            case 38: //up
                ac.selectDiv(-1);
                break;
            case 40: //down
                ac.selectDiv(1);
                break;
        }
    }

    this.selectDiv = function( inc ) {
        if( this.pointer !== null && this.pointer+inc >= 0 && this.pointer+inc < this.list.length ) {
            this.list[this.pointer].className = 'suggest_link';
            this.pointer += inc;
            this.list[this.pointer].className = 'suggest_link_over';
			var value = this.list[this.pointer].innerHTML;
			value = refineString(value);
			//alert ('here2');
            this.textbox.value = value;
        }
        if( this.pointer === null ) {
            this.pointer = 0;
            this.list[this.pointer].className = 'suggest_link_over';
			var value = this.list[this.pointer].innerHTML;
			value = refineString(value);
			//alert ('here');
            this.textbox.value = value;
        }
    }
} 

function refineString (value)
{
	var  val = value;
	val = val.replace(/&amp;/,'&');
	return val;
}


