/**
 * Autocompleter.Request
 *
 * http://digitarald.de/project/autocompleter/
 *
 * @version		1.1.2
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */

Autocompleter.Request = new Class({

	Extends: Autocompleter,

	options: {/*
		indicator: null,
		indicatorClass: null,
		onRequest: $empty,
		onComplete: $empty,*/
		postData: {},
		ajaxOptions: {},
		postVar: 'value',
		minLength: 2,
      maxChoices: 10, // was 5
      width: '254px' //was 204

	},

	checkedCheckBoxes: function(){
		var categoryIds = [];
		//checkboxes = document.getElements('input[name^="tx_gtrererences_pi1[catIdArr][]"]');
		var formEl = $('gtReferenceSearchForm');
		if($defined(formEl)){
			checkboxes = formEl.getElements('input[name^="tx_gtrererences_pi1[catIdArr][]"]');
			if($defined(checkboxes)){
				checkboxes.each(function(el,index) {
					if(el.checked){
						categoryIds.push(el.getProperty('value'));
						//alert(el.getProperty('value'));
					}
				});
			}
		}
		//console.log(categoryIds);
		return categoryIds;

	},

	query: function(){
		var data = $unlink(this.options.postData) || {};
		//alert(this.options.postVar);
		data[this.options.postVar] = this.queryValue;
		data['categories'] = this.checkedCheckBoxes();
      data['inDescription'] = 0;
      var descriptionSearchCheckbox = $('descriptionSearchCheckbox');
      if($defined(descriptionSearchCheckbox)){
         if(descriptionSearchCheckbox.checked){
            data['inDescription'] = 1;
         }
      }
		var indicator = $(this.options.indicator);
		if (indicator) indicator.setStyle('display', '');
		var cls = this.options.indicatorClass;
		if (cls) this.element.addClass(cls);
		this.fireEvent('onRequest', [this.element, this.request, data, this.queryValue]);
		this.request.send({'data': data});
	},

	/**
	 * queryResponse - abstract
	 *
	 * Inherated classes have to extend this function and use this.parent()
	 */
	queryResponse: function() {
		var indicator = $(this.options.indicator);
		if (indicator) indicator.setStyle('display', 'none');
		var cls = this.options.indicatorClass;
		if (cls) this.element.removeClass(cls);
		return this.fireEvent('onComplete', [this.element, this.request]);
	}

});

Autocompleter.Request.JSON = new Class({

	Extends: Autocompleter.Request,

	initialize: function(el, url, options) {
		this.parent(el, options);
		this.request = new Request.JSON($merge({
			'url': url,
			'link': 'cancel'
		}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
	},

	queryResponse: function(response) {
		this.parent();
		this.update(response);
	}

});

Autocompleter.Request.HTML = new Class({

	Extends: Autocompleter.Request,

	initialize: function(el, url, options) {
		this.parent(el, options);
		this.request = new Request.HTML($merge({
			'url': url,
			'link': 'cancel',
			'update': this.choices
		}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
	},

	queryResponse: function(tree, elements) {
		this.parent();
		if (!elements || !elements.length) {
			this.hideChoices();
		} else {
			this.choices.getChildren(this.options.choicesMatch).each(this.options.injectChoice || function(choice) {
				var value = choice.innerHTML;
				choice.inputValue = value;
				this.addChoiceEvents(choice.set('html', this.markQueryValue(value)));
			}, this);
			this.showChoices();
		}

	}

});

/* compatibility */

Autocompleter.Ajax = {
	Base: Autocompleter.Request,
	Json: Autocompleter.Request.JSON,
	Xhtml: Autocompleter.Request.HTML
};

