Livesearch = Class.create();
Livesearch.prototype = {
initialize: function(searchform, attachitem, targetitem, hideitem, url, pars, loaditem, searchtext, resetbutton, submitbutton, buttonvalue) {
var thisSearch = this;
this.searchform = searchform;
this.attachitem = attachitem;
this.targetitem = targetitem;
this.hideitem = hideitem;
this.url = url;
this.pars = pars;
this.loaditem = loaditem;
this.searchtext = searchtext;
this.resetbutton = resetbutton;
this.submitbutton = submitbutton;
this.buttonvalue = buttonvalue;
this.searchstring = '';
this.t = null; // Init timeout variable
$(this.searchform).innerHTML = '';
$(this.submitbutton).style.display = "none";
$(this.loaditem).style.display = "none";
new Effect.Fade(this.resetbutton, { duration: 0, to: 0.3 });
Event.observe(thisSearch.attachitem, 'focus', function() {
if ($F(thisSearch.attachitem) == thisSearch.searchtext)
$(thisSearch.attachitem).setAttribute('value', '');
});
Event.observe(thisSearch.attachitem, 'blur', function() {
if ($F(thisSearch.attachitem) == '')
$(thisSearch.attachitem).setAttribute('value', thisSearch.searchtext);
});
// Bind the keys to the input
Event.observe(this.attachitem, 'keyup', this.readyLivesearch.bindAsEventListener(this));
},
readyLivesearch: function(event) {
var code = event.keyCode;
if (code == Event.KEY_ESC || ((code == Event.KEY_DELETE || code == Event.KEY_BACKSPACE) && $F(this.attachitem) == '')) {
this.resetLivesearch.bind(this);
} else if (code != Event.KEY_RETURN) {
if (this.t) clearTimeout(this.t);
this.t = setTimeout(this.doLivesearch.bind(this), 400);
}
},
doLivesearch: function() {
if ($F(this.attachitem) == this.searchstring) return;
new Effect.Fade(this.resetbutton, { duration: 0.1 });
new Effect.Appear(this.loaditem, { duration: 0.1 });
new Ajax.Updater(
this.targetitem,
this.url,
{
method: 'get',
evalScripts: true,
parameters: this.pars + encodeURIComponent($F(this.attachitem)) + '&rolling=1',
onComplete: this.searchComplete.bind(this)
});
this.searchstring = $F(this.attachitem);
},
searchComplete: function() {
$(this.hideitem).style.display = 'none';
new Effect.Fade(this.loaditem, { duration: 0.1 });
new Effect.Appear(this.resetbutton, { duration: 0.1 });
Event.observe(this.resetbutton, 'click', this.resetLivesearch.bindAsEventListener(this));
$(this.resetbutton).style.cursor = 'pointer';
// Support for Lightbox
if (window.initLightbox) {
initLightbox();
}
},
resetLivesearch: function() {
$(this.targetitem).innerHTML = '';
$(this.hideitem).style.display = 'block';
$(this.attachitem).value = this.searchtext;
new Effect.Fade(this.resetbutton, { duration: 0.1, to: 0.3 });
$(this.resetbutton).style.cursor = 'default';
}
}