function autosuggest(field_id,hidden_id,url,cache,callback)
{
	$('#'+field_id).autocomplete
	({
		minLength: 1,
		source: function(request, response)
		{
			if(request.term in cache)
			{
				response(cache[request.term]);
				return;
			}
			
			$.ajax
			({
				url: url,
				dataType: 'json',
				data: ({query: request.term, json: true}),
				success: function(data)
				{
					cache[request.term] = data;
					response(data);
				}
			});
		},
		focus: function(event, ui)
		{
			$('#'+field_id).val(ui.item.label);
			return false;
		},
		select: function(event, ui)
		{
			$('#'+field_id).val(ui.item.label);
			$('#'+hidden_id).val(ui.item.value);
			
			if(null != callback)
				callback(ui.item.value);
			
			return false;
		}
	}).data('autocomplete')._renderItem = function(ul,item)
	{
		return $('<li></li>').data('item.autocomplete',item).append('<a>'+item.label+'<br /><span style="font-size: 70%;">'+item.desc+'</span></a>').appendTo(ul);
	};
}
