function StringFilter()
{
	this.filter_result = null;

	this.FilterStrings = function (text, buffer, index)
	{
		var subset = new Array();
		
		for(i = 0; i < buffer.length; i++)
		{
			temp = buffer[i].toLowerCase();
			
			if( text.charAt(index) == temp.charAt(index)  )
			{
				subset.push( buffer[i] );
			}
		}

		return subset;
	}

	this.Run = function ( text, buffer, index )
	{
		var subset = this.FilterStrings(text, buffer, index);
		
		if(index < ( text.length - 1 ) ) 
		{
			this.Run( text , subset , index + 1 );
		}
		else
		{
			this.filter_result = subset;
		}
	}

	this.GetSubSet = function (current_text, string_buffer)
	{
		this.Run( current_text.toLowerCase(), string_buffer, 0 );

		return this.filter_result;
	}
}

function autocomplete(n, ac_array, e)
{
	var keycode = 0;
	if(e != null) { keycode = e.which; }
	else { keycode = event.keyCode; }

	if(keycode == 8  || // Backspace
	   keycode == 16 || // Shift
	   keycode == 36)   // Home Key
	{
		// Ignore these	 
	}
	else
	{
		var count	  = n.value.length;	

		var filter    = new StringFilter();

		var subset    = filter.GetSubSet(n.value, ac_array);
		
		if(subset.length > 0) 
		{
			n.value     = subset[0];

			if(navigator.appName == "Microsoft Internet Explorer")
			{
				var range = n.createTextRange(); 
				
				var buffer = "";
				
				for(i = count; i < n.value.length; i++)
				{
					buffer += n.value.charAt(i);
				}
				if(buffer.length > 0) range.findText(buffer);
				
				range.select();
			}
			else
			{
				n.setSelectionRange(count, n.value.length);
			}
		}
	}
}