//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?");
	}
}


var searchReq = getXmlHttpRequestObject();

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest(e) {
	var keynum = 0;
	var e = e ? e : window.event;
	var KeyCode = e.which ? e.which : e.keyCode;
	
	if (KeyCode != 38 && KeyCode != 40) {	
		if (searchReq.readyState == 4 || searchReq.readyState == 0) {		
			var str = escape(document.getElementById('title').value);		
			if(str!="" && str!="%20") {			
				searchReq.open("GET", 'searchSuggest.php?search=' + str, true);
				searchReq.onreadystatechange = handleSearchSuggest; 
				searchReq.send(null);
			} else {			
				document.getElementById('search_suggest').style.height="0px";
				document.getElementById('search_suggest').style.display="none";
			}
		}		
	}
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
	if (searchReq.readyState == 4) {
		var ss = document.getElementById('search_suggest')			
		ss.innerHTML = '';
		ss.style.display='block';
		
		var obj = document.getElementById('title');
		var lef = findPosX(obj);		
		var topp = findPosY(obj);
		
		ss.style.top = (parseInt(topp) + 25) + "px";
		ss.style.left = parseInt(lef) + "px";
		
		var str = searchReq.responseText.split("\n");
		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 onmouseover="javascript:suggestOver(this);" ';
			suggest += 'onmouseout="javascript:suggestOut(this);" ';
			suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
			suggest += 'class="suggest_link" pos='+ i +'>' + str[i] + '</div>';
			if(i <= 10) {
				ss.style.height='auto';
			} else {
				ss.style.height='250px'
			}
			ss.innerHTML += suggest;
		}		
		if(str == "") {
			ss.style.display='none';
			ss.innerHTML = "";
		}
	}
}

function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }


function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }


//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) {
	document.getElementById('title').value = value;
	document.getElementById('search_suggest').innerHTML = '';
	suggestHideout(value);	
	document.searchform.submit();
}

function suggestHideout(value) {
 if(document.getElementById('search_suggest').innerHTML == "") {
	document.getElementById('search_suggest').style.display="none";
 }
}

function suggestHideslow(value) {
 document.getElementById('search_suggest').style.display="block";
}

function autocomplete( textBoxId, containerDivId ) {
    
    var ac = this;
    this.textbox     = document.getElementById(textBoxId);
    this.div         = document.getElementById(containerDivId);
    this.list        = this.div.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';			
            this.textbox.value = this.list[this.pointer].innerHTML;
        }
        if( this.pointer === null ) {
            this.pointer = 0;
            this.list[this.pointer].className = 'suggest_link_over';
            this.textbox.value = this.list[this.pointer].innerHTML;
        }
    }
	
	
} 