$(document).ready(function() {
	var keywordCache = {};
	keywordCache.data = null;
	keywordCache.term = new String();
	var areaCache = {};
	areaCache.data = null;
	areaCache.term = new String();
	$("input[name='keyword']").autocomplete(
			{ 	minLength: 1,
				open: function(event, ui) {
						$("ul.ui-autocomplete li.ui-menu-item:odd").addClass("odd");
					},
				source: function( request, response ) {
						doAutocompleteSource(request, response, 
								$("meta[name=urlPrefix]").attr("content")+"/data/categories", 
								keywordCache);
					}

			} );
	$("input[name='area']").autocomplete(
			{ 
				minLength: 1,
				open: function(event, ui) {
					$("ul.ui-autocomplete li.ui-menu-item:odd").addClass("odd");
				},
				source: function( request, response ) {
					doAutocompleteSource(request, response, 
							$("meta[name=urlPrefix]").attr("content")+"/data/cities", 
							areaCache);
				}
			} );
	$("form#searchForm").submit(function() {
		$("div.ac_results").hide();
		return true;
	});
});

function doAutocompleteSource( request, response, url, cache) {
	var term = request.term;
	var termString = (new String(request.term)).toLowerCase();
	
	if ( cache.term != "" && termString.match("^"+cache.term+".*$") ) {
		response( filterData(cache.data,termString) );
		return cache;
	}

	lastXhr = $.getJSON( url, request, function( data, status, xhr ) {
		cache.data = data;
		cache.term = (new String(term)).toLowerCase();
		response( data );
	});
	
	return cache;
}

function filterData(cachedData,newTerm)
{
	var result = [];
	var j = 0;
	for(var i=0; i<cachedData.length; ++i)
	{
		var currentString = new String(cachedData[i]);
		if(currentString.toLowerCase().indexOf(newTerm.toLowerCase())>=0)
		{
			result[j++] = cachedData[i];
		}
	}
	
	return result;
}
