function AutoSuggest(field, popup_div, suggest_div)
{
	var me = this;
	//init vars for user interaction
	this.field = field; this.popup_div = popup_div; this.suggest_div = suggest_div;
	//init vars for suggestion highlighting
	this.selected = -1; this.list = Array();
	field.setAttribute("autocomplete", "off");
	//init vars for ajax
	this.xmlHttp;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer")
	{ this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
	else
	{ this.xmlHttp = new XMLHttpRequest(); }
	
	field.onkeyup = function(ev)
	{
		var key;
		if(ev)
		{ key = ev.keyCode; }
		if(window.event)
		{ key = window.event.keyCode; }
		switch(key)
		{
			case 13: //enter
				if (me.selected > -1)
				{
					var url = me.list[me.selected].split("[link]");
					window.location = url[1];
					me.hide();
				}
				break;
			case 27: //escape
				me.hide();
				break;
			case 38: //up arrow
				break;
			case 40: //down arrow
				break;
			default: //everything else
				me.suggest();
				me.selected = -1;
				break;
		}
		me.display();
	};
	
	field.onkeydown = function(ev)
	{
		var key;
		if(ev)
		{ key = ev.keyCode; }
		if(window.event)
		{ key = window.event.keyCode; }
		switch(key)
		{
			case 38: //up arrow
				me.selected--;
				if(me.selected < 0)
				{ me.selected = me.list.length - 1; }
				var url = me.list[me.selected].split("[link]");
				me.field.value = url[2];
				break;
			case 40: //down arrow
				me.selected++;
				if(me.selected > (me.list.length - 1))
				{ me.selected = 0; }
				var url = me.list[me.selected].split("[link]");
				me.field.value = url[2];
				break;
			default: //everything else
				break;
		}
		me.display();
	};
	
	field.onfocus = function(ev)
	{
		me.show();
	};
	
	field.onblur = function(ev)
	{
		setTimeout("$('div#PopUp').fadeOut('slow')",250);
		
		if ( $("input#q").val().length > 0 )
		{
			$("div#site_search").addClass("filled");
		}
		else
		{
			$("div#site_search").removeClass("filled");
		}
		
		// setTimeout("auto.hide();", 250);
	};
	
	this.show = function()
	{	
		// me.position();
		me.popup_div.style.display = 'block';
	};
	this.hide = function()
	{
		setTimeout("$('div#PopUp').hide('slow')",250);
		
		/*
		me.selected = -1;
		me.list = Array();
		me.popup_div.style.display = 'none';
		*/
	};
	
	//if the div can be placed correctly with css, this function wont be needed
	this.position = function()
	{
		var sfield = me.field;
		var x = 0;
		var y = sfield.offsetHeight;
		while (sfield.offsetParent && sfield.tagName.toUpperCase() != 'BODY')
		{
			x += sfield.offsetLeft;
			y += sfield.offsetTop;
			sfield = sfield.offsetParent;
		}
		x += sfield.offsetLeft;
		y += sfield.offsetTop;
		me.popup_div.style.left = x + 'px';
		me.popup_div.style.top = y + 'px';
	};
	
	this.suggest = function()
	{
		var q = me.field.value;
		url = '/_files/scripts/autosearch.php?q=' + q + '&u=' + Math.random();
		me.xmlHttp.open('GET', url, true);
		me.xmlHttp.onreadystatechange = me.gather;
		me.xmlHttp.send(null);
	};
	
	this.gather = function()
	{
		if(me.xmlHttp.readyState == 4)
		{
			me.list = me.xmlHttp.responseText.split("[suggestion]");
			me.list.pop();
			me.display();
		}
	};
	
	this.display = function()
	{
		var out = "<ul>";
		if(me.list.length > 0)
		{
			for (var i = 0; i < me.list.length; i++)
			{
				if(i == me.selected)
				{ out += "<li class='selected'>"; }
				else
				{ out += "<li>"; }
				var linkz = me.list[i].split("[link]");
				out += "<a href='" + linkz[1] + "'>" + linkz[0] + "</a></li>";
			}
		}
		out += "</ul>";
		me.suggest_div.innerHTML = out;
	};
};


jQuery(document).ready(function() {
	
	var auto = new AutoSuggest(document.getElementById('q'), document.getElementById('PopUp'), document.getElementById('AutoSuggest'));
	
});

