// livesearch.js - live search input field class
//
// copyright (c) 2009 mathonix e.K.
//
// author: andreas schubert
//

if (typeof Effect == "undefined" )
	throw("scriptaculous.js not found or loaded!")
	
var livesearch = Class.create({

	// variables
	
	inputfield : null,
	resultdiv : null,
	deleteimg : null,
	indicatorimg: null,
	searchResultVisible : false,
	
	// initialize menu
	initialize: function(inputfield,resultdiv,deleteimg,indicatorimg) {
		if (!$(inputfield)) {
			throw(inputfield+" does not exist!");
			return false;
		}
		if (!$(resultdiv)) {
			throw(resultdiv+" does not exist!");
			return false;
		}
		if (!$(deleteimg)) {
			throw(deleteimg+" does not exist!");
			return false;
		}
		if (!$(indicatorimg)) {
			throw(indicatorimg+" does not exist!");
			return false;
		}
		
		this.inputfield = inputfield;
		this.resultdiv = resultdiv;
		this.deleteimg = deleteimg;
		this.indicatorimg = indicatorimg;
		$(inputfield).value="suchen";
		$(deleteimg).hide();
		$(indicatorimg).hide();
		Event.observe($(deleteimg),'click', this.delete_input.bind(this),false);
		this.set_observers();
		new Ajax.Autocompleter(inputfield, resultdiv, '/search', {
			method: 'get',
	    	minChars: 3,
			indicator: indicatorimg,
			updateElement: function(item) { /* no update */ }
	  	});
	},

	mousedown : function() {
		$(this.inputfield).value="";
		$(this.inputfield).focus();
	},

	focus : function() {
		$(this.inputfield).writeAttribute("value","");
	},

	startseach : function() {
		if (! this.searchResultVisible && $(this.inputfield).value.length > 2) {
			$(this.deleteimg).show();
			new Effect.BlindDown($(this.resultdiv), { duration: 0.25});
			this.searchResultVisible = true;
		} else {
			if ( this.searchResultVisible && $(this.inputfield).value.length == 0) {
				$(this.deleteimg).hide();
				new Effect.BlindUp($(this.resultdiv), { duration: 0.25});
				this.searchResultVisible = false;			
			}
		}
	},

	stopsearch : function() {
		$(this.inputfield).value="suchen";
		$(this.deleteimg).hide();
		if (this.searchResultVisible) {
			new Effect.BlindUp($(this.resultdiv), { duration: 0.25});
			this.searchResultVisible = false;
		}
	},
	
	delete_input : function() {
		$(this.deleteimg).hide();
		$(this.inputfield).value="";
		$(this.inputfield).focus();
		if (this.searchResultVisible) {
				new Effect.BlindUp($(this.resultdiv), { duration: 0.25});
				this.searchResultVisible = false;
		}
	},
	
	set_observers : function() {
		Event.observe($(this.inputfield),'mousedown', this.mousedown.bind(this),false);
		Event.observe($(this.inputfield),'focus', this.focus.bind(this),false);
		Event.observe($(this.inputfield),'keyup', this.startseach.bind(this),false);
		Event.observe($(this.inputfield),'blur', this.stopsearch.bind(this),false);		
	}
});