Search = function() {

	var DEFAULT_INPUT_VALUE = "";//"Recherche..."

	var isBusy = false;

	var ajaxService;

	var inputTargetId;

	var responseDisplayerId;

	var callbackFunction;

	var showExtra;

	var justTestimonable;
	
	var onBlackList;
	
	var defaultResultContent;

	this.initialize = function(inValue, inAjaxService, inResponseDisplayerId, inInputTargetId, inCallbackFunction, inShowExtra, inJustTestimonable, searchNow, inOnBlackList) {
		if (inInputTargetId == undefined) {
			inputTargetId = 's';
		} else {
			inputTargetId = inInputTargetId;
		}
		if (inShowExtra == undefined) {
			inShowExtra = "true";
		}
		if (inJustTestimonable == undefined) {
			inJustTestimonable = "true";
		}
		if (inOnBlackList == undefined) {
			inOnBlackList = "false";
		}
		onBlackList = inOnBlackList;
		justTestimonable = inJustTestimonable;
		showExtra = inShowExtra
		ajaxService = inAjaxService;
		responseDisplayerId = inResponseDisplayerId;
		defaultResultContent = $(responseDisplayerId).innerHTML;
		
		init(inValue, searchNow);
		callbackFunction = inCallbackFunction;
	}
	
	var init = function(inValue, searchNow) {
		if (inValue == '' && $(inputTargetId).value != DEFAULT_INPUT_VALUE) {
			//$(inputTargetId).value = DEFAULT_INPUT_VALUE;
		} else if ($(inputTargetId).value == '' && inValue != '') {
			$(inputTargetId).value = inValue;
		}
		if (searchNow == undefined) searchNow = true;
		Event.observe(inputTargetId, 'click', function() {
			if (this.value == DEFAULT_INPUT_VALUE) {
				//this.value = "";
			}
		}); 
		
		Event.observe(inputTargetId, 'keyup', doSearch);
		if (searchNow) {
			doSearch();
		}
	}
	
	var doSearch = function() {
		
		if (!isBusy) {
			isBusy = true;
			var txt = $(inputTargetId).value;
			if (txt.length > 0 && txt != DEFAULT_INPUT_VALUE) {
				new Ajax.Request(ajaxService+"?showExtra="+showExtra+"&onBlackList="+onBlackList+"&justTestimonable="+justTestimonable+"&q="+txt, {
					method: 'get',
					onSuccess: function(transport) {
						isBusy = false;
						$(responseDisplayerId).innerHTML = transport.responseText;
						eval(callbackFunction)
						if (window['Highlights']) {
							new Highlights('highlight');
						}
					}
				});
			} else {
				isBusy = false;
				if ($(responseDisplayerId))
					$(responseDisplayerId).innerHTML = defaultResultContent;
			}
		}
	}

}

search = new Search();
