var TAB			= 9;
var ESC			= 27;
var KEYLEFT		= 37;
var KEYUP		= 38;
var KEYRIGHT	= 38;
var KEYDOWN		= 40;

var keyCode		= null;
var lastTerm	= null;
var highlight	= -1;
$(document).ready(function() {
	$("#q").keydown(function(e) {
		keyCode = e.keyCode;
		switch(keyCode) {
			case KEYUP:
				highlight--;
				setHighlight(this);
				break;
			case KEYDOWN:
				highlight++;
				setHighlight(this);
				break;
		}
	}).keyup(function(e) {
		switch(keyCode) {
			//case TAB:
			case ESC:
			case KEYLEFT:
			case KEYUP:
			case KEYRIGHT:
			case KEYDOWN:
				return;
			default:
				var val = trim(this.value);
				    val = val.toLowerCase();
				if (val != lastTerm && val.length > 2) {
					lastTerm = val;			
					getAutoSuggestion(val);
				}
				else{
				     hideDiv(true);
				}
 
		}
	});
});


function trim(str) {
	return str.replace(/^\s+|\s+$/g, "") ;
}

function showDiv(reset) {
	if (reset) highlight = -1;
	$("#AutoSuggest").css("display", "block");
	$("#AutoSuggest div").each(function(){
	    $(this).css('cursor','pointer');
	    $(this).bind("mouseenter mouseleave", function(e){	    
	        $(this).toggleClass('selected');	    
	    });	
	    $(this).bind("click",function(e){
	        $('#q').val($(this).find('span').text());
	        $("#AutoSuggest").slideUp("slow");
	    });
	   
	});
}

function hideDiv(reset) {
	if (reset) highlight = -1;
	$("#AutoSuggest").css("display", "none");
}

function setDivXY(element) {
	var xy = getXY(element);
	$("#AutoSuggest").css("left", xy.X + "px").css("top", (xy.Y + element.offsetHeight - 1) + "px").css("width", (element.offsetWidth-2) + "px");
}

function setHighlight(input) {
	var allDivs = document.getElementById("AutoSuggest").getElementsByTagName("div");
	for (var ii=0; ii<allDivs.length; ii++) {
		if (ii == highlight) {
			allDivs[ii].className = "selected";
			input.value = allDivs[ii].getElementsByTagName("span")[0].innerHTML;
		}
		else {
			allDivs[ii].className = "";
		}
	}
	if (highlight < 0) {
		highlight = -1;
		input.value = lastTerm;
	}
	else if (highlight >= allDivs.length) {
		highlight = allDivs.length;
		input.value = lastTerm;
	}
  setTimeout('showDiv(false)',2000);
}

function getXY(srcElement) {
	var iXCoord = srcElement.offsetLeft;
	var iYCoord = srcElement.offsetTop;
	while (srcElement.offsetParent != null) {
		srcElement = srcElement.offsetParent;
		iXCoord += srcElement.offsetLeft;
		iYCoord += srcElement.offsetTop - srcElement.scrollTop;
	}
	return { X: iXCoord, Y: iYCoord }
};


// this function grabs the auto complete data
function getAutoSuggestion(term) {
	var head	= document.getElementsByTagName("head")[0];
	var	script	= document.createElement("script");
	var	date	= new Date();
	script.type	= "text/javascript";
	script.src	= LM.Domain + "/auto-suggest.aspx?term=" + encodeURIComponent(term) + "&date=" + encodeURIComponent(date);
	head.appendChild(script);
}
