Livesearch = Class.create(); Livesearch.prototype = { initialize: function(father, url, pars, searchtext) { this.father = father; this.url = url; this.pars = pars; this.searchtext = searchtext; this.searchfield = 's'; this.loaditem = 'search-loading'; this.resetitem = 'search-reset'; this.contentitem = 'search-results'; this.lastsearch = ''; this.t = null; Event.observe(window, "load", this.onLoading.bindAsEventListener(this)); }, onLoading: function() { if ( $(this.father) ) { $(this.father).update('
'); $(this.resetitem).hide(); $(this.loaditem).hide(); $(this.contentitem).hide(); this.focusListener = this.onInputFocus.bindAsEventListener(this); this.blurListener = this.onInputBlur.bindAsEventListener(this); this.keyupListener = this.readyLivesearch.bindAsEventListener(this); Event.observe(this.searchfield, 'focus', this.focusListener); Event.observe(this.searchfield, 'blur', this.blurListener); Event.observe(this.searchfield, 'keyup', this.keyupListener); } }, onInputFocus: function() { if ($F(this.searchfield) == this.searchtext) { $(this.searchfield).value = ''; } }, onInputBlur: function() { if ($F(this.searchfield) == '') { $(this.searchfield).value = this.searchtext; } }, readyLivesearch: function(event) { var code = event.keyCode; var currentLivesearch = this; if (code == Event.KEY_ESC || ((code == Event.KEY_DELETE || code == Event.KEY_BACKSPACE) && $F(this.searchfield) == '')) { this.resetLivesearch(); } else if (code != Event.KEY_LEFT && code != Event.KEY_RIGHT && code != Event.KEY_DOWN && code != Event.KEY_UP && code != Event.KEY_RETURN) { if (this.t) { clearTimeout(this.t) }; this.t = setTimeout(this.doLivesearch.bind(this), 400); } }, searchComplete: function() { Effect.Fade(this.loaditem, { duration: .1}); Effect.Appear(this.resetitem, { duration: .8}); Effect.Appear(this.contentitem, {duration: .5}); Event.observe(this.resetitem, 'click', this.resetLivesearch.bindAsEventListener(this)); }, doLivesearch: function() { if ($F(this.searchfield) == this.lastsearch) return; $(this.resetitem).hide(); Effect.Appear(this.loaditem, {duration: .1}); new Ajax.Updater( this.contentitem, this.url, { method: 'get', parameters: this.pars + encodeURIComponent($F(this.searchfield)), onComplete: this.searchComplete.bind(this) }); this.lastsearch = $F(this.searchfield); }, resetLivesearch: function() { Effect.Fade(this.resetitem, { duration: .7 }); Effect.Fade(this.contentitem, {duration: .5}); this.lastsearch = ''; $(this.searchfield).value = this.searchtext; } } FastInit.addOnLoad( function() { new Livesearch('searchform', 'http://weblog.ib.hu-berlin.de/wp-content/themes/unnamed-one-021beta/livesearch.php', 'searchquery=', 'Type and Wait to Search'); } );