(function ($) {

AjaxSolr.AutocompleteWidget = AjaxSolr.AbstractFacetWidget.extend({
																  
	init: function () {
		var self = this;
				
		$(this.target).find('input').bind('keydown', function(e) {
			if (self.requestSent === false && e.which == 13) {
				var value = $(this).val();
				if (value && self.add(value.replace(/\€/g, '&euro;'))) {
					self.manager.doRequest(0);
				}
			}
		});
	},
	
	cleanText: function(text) {
		text = text.replace(/\\\"/g,'');
		text = text.replace(/\\/g,'');
		text = text.replace(/"/g,'');
		text = text.replace(/:/g,'');
		text = text.replace(/\s/g,'');
		text = text.replace(/,/g,'');
		text = text.replace(/\*/g,'');
		text = text.substring(0,1).toUpperCase()+text.substring(1,text.length);
		return text;
	},
	afterRequest: function () {
		
		if(Manager.custom.autoCompleteInit){
			return;	
		}
		Manager.custom.autoCompleteInit = true;
		
		//$(this.target).find('input').val('');
	
		var self = this;

		var callback = function (response) {
			var list = [];
			var listNoDouble = [];
			for (var i = 0; i < self.fields.length; i++) {
				var field = self.fields[i];
				for (var facet in response.facet_counts.facet_fields[field]) {
					var field_alias = field == 'libelle' ? 'Article' : field;
					for (var j = 0; j < self.manager.custom.autoCompleteFields.length; j++) {
						if (self.manager.custom.autoCompleteFields[j] == field)
							field_alias = self.manager.custom.autoCompleteAliases[j];
						}
						

						if ($.inArray( self.cleanText(facet), listNoDouble ) == -1 ) {
							listNoDouble.push(self.cleanText(facet));
							list.push({
								field: field,
								value: self.cleanText(facet),
								text: self.cleanText(facet)
								//text: facet + ' (' + response.facet_counts.facet_fields[field][facet] + ') - ' + field_alias
							});
						}
					}
				}

				self.requestSent = false;
			
				$(self.target).find('input').autocomplete(list, {
					formatItem: function(facet) {
						return facet.text;
					},
					max: 20
				}).result(function(e, facet) {
					self.requestSent = true;
					var facet_field = facet.field;
					for (var i = 0; i < self.manager.custom.autoCompleteFields.length; i++) {
						if (self.manager.custom.autoCompleteAliases[i] == facet.field) {
							facet_field = self.manager.custom.autoCompleteFields[i];
						}
					}
					if (self.manager.store.addByValue('fq', facet_field + ':' + facet.value)) {
						self.manager.doRequest(0);
					}
				});

			} // end callback

			var params = [ 'q=*:*&facet=true&rows=0&facet.limit=-1&facet.mincount=1&json.nl=map' ];
			for (var i = 0; i < this.fields.length; i++) {
				params.push('facet.field=' + this.fields[i]);
			}
			jQuery.getJSON(this.manager.solrUrl + this.manager.servlet + '?' + params.join('&') + '&wt=json&json.wrf=?', {}, callback);
  		}

	});

})(jQuery);

