PropertyAutocomplete.prototype = {};

function PropertyAutocomplete(config)
{
	var element = jQuery(config.element),
		resultField = jQuery(config.field),
		searchType = config.searchType,
		selectedValue = null,
		selectedId = null,
		previousRequests = new Array();
	
	element.autocomplete({
		source : getSearchResults,
		select : onResultSelected
	});
	
	addChangeListener();
	
	jQuery.ui.autocomplete.prototype._renderItem = function( ul, item ) {
		var re  = new RegExp(this.term, "i"),
			t = item.label.replace(re,"<strong>$&</strong>"),
			reference = 'place';
				
		if (item.type == 'PROPERTY') {
			reference = 'property';
		}		
		
		return jQuery("<li class=\"" + reference + "\"></li>")
			.data("item.autocomplete", item)
			.append("<a>" + t + "</a>")
			.appendTo(ul);
	}
	
	function getSearchResults(request, response)
	{
		abortPreviousRequests();
		var ls = DVLocationService;
		ls.searchLocations(request.term, searchType, response);
		previousRequests.push(ls.request);
	}
	
	function abortPreviousRequests() {
		for (var i=0; i<previousRequests.length; i++) {
			previousRequests[i].abort();
			previousRequests.splice(i, i);
		}
	}
	
	function onResultSelected(ui, event)
	{
		selectedId = event.item.id;
		selectedValue = event.item.value;
		
		element.unbind("change");
		resultField.val(selectedId);
		addChangeListener();
	}
	
	function addChangeListener()
	{
		element.bind("change", function()
		{
			if (selectedValue != null && element.val() == selectedValue)
			{
				resultField.val(selectedId);
			}
			else
			{
				resultField.val("");
			}
		});
	}
	
}

PropertyAutocomplete.SEARCHTYPE_BEDROOM = 0;

