/*--------------------------------------*
 *   Autocomplete de filtros de loja    *
 *--------------------------------------*/
/** Opcoes
 * 
 * segmentFilter    - Filtro de segmentos de loja 		 													  (obrigatorio)
 * nameFilter       - Filtro pelo nome fantasia da loja 													  (obrigatorio)
 * filterPageId     - id da pagina do lumis onde esta localizado o xml com os dados 						  (obrigatorio)
 * threshold        - Numero minimo de caracteres buscados no campo de nome que ativa o autocomplete 		  (Default = 3)
 * loadingIndicator - Elemento DOM que possui a imagem de indicador de carregamento dos dados do autocomplete (opcional) 
 * 
 */

function StoreAutocomplete(options) {
	this.segments = new Array();
	this.names = new Array();
	this.searched = false;
	this.segmentFilter = options.segmentFilter;
	this.nameFilter = options.nameFilter;
	this.filterPageId = options.filterPageId;
	this.threshold = (options.threshold != undefined) ? options.threshold : 3;
	this.loadingIndicator = (options.loadingIndicator != undefined) ? options.loadingIndicator : null;
	
	var sa = this;
	
	// Metodos privados
	function getStoreData() {
		var attrs = {
			pageId : sa.filterPageId
		};
		if(sa.segmentFilter.val() != '')
			attrs["segmentos"] = sa.segmentFilter.val();
		else if(sa.nameFilter.val() != '')
			attrs["fantasia"] = sa.nameFilter.val();
		
		if((attrs.segmentos != undefined && $.inArray(sa.segmentFilter.val(), sa.segments) == -1) ||
		   (attrs.fantasia != undefined && $.inArray(sa.nameFilter.val(), sa.names) == -1)) {
			
			if(sa.segmentFilter.val() != '')
				sa.segments.push(sa.segmentFilter.val());
			if(sa.nameFilter.val() != '')
				sa.names.push(sa.nameFilter.val());			
			
			if(sa.loadingIndicator != null)
				sa.loadingIndicator.show();
			$.get("/wkm/xml/interface.jsp", attrs, function(result) {
				var obj = eval('(' + xml2json(result) + ')');
				
				sa.searched = true;
				if(sa.loadingIndicator != null)
					sa.loadingIndicator.hide();
				
				if(obj.data.itens != null) {
					var items = $.isArray(obj.data.itens.item) ? obj.data.itens.item : [obj.data.itens.item];
					var searchData = new Array();
					
					for(var i = 0; i < items.length; i++) {
						var item = items[i];
						var nome = item.fantasia;
						
						nome = retirarAcentos(nome);
						searchData.push(nome);
						
						searchData = unique(searchData);
					}
					sa.nameFilter.flushCache();
					sa.nameFilter.autocomplete(searchData, {
						max: 10
					});
					//console.log(searchData);
				}
			});
		}
		else
			sa.searched = true;
	}
	
	// bind do evento de keyup do nameFilter
	sa.nameFilter.keyup(function() {
		if($(this).val().length >= sa.threshold && !sa.searched && sa.segmentFilter.val() == '')
			getStoreData();
		
		if(sa.searched && $(this).val().length < sa.threshold) {
			sa.searched = false;
		}
	});
	
	// bind do evento de change do segmentFilter
	sa.segmentFilter.change(function() {
		getStoreData();
	});
}
