var searchLive=new Class({initialize:function(container,options){this.setOptions({fieldText:'search...',formSelector:'form',fieldSelector:'input.searchfield',closeSelector:'button.search-close',resultsSelector:'div.resultbox',msgResults:'Search results',msgCategories:'Search categories',msgNoResults:'No results found',msgMoreResults:'More results',url:'index.php?option=com_search&tmpl=raw&type=json&ordering=&searchphrase=all'},options);this.form=$(container).getElement(this.options.formSelector);this.field=$(container).getElement(this.options.fieldSelector);this.close=$(container).getElement(this.options.closeSelector);this.resultbox=$(container).getElement(this.options.resultsSelector);this.sections=new Array();this.focussed=false;this.selection=false;this.observer=new Observer(this.field,this.processSearch.bind(this),{delay:400});this.field.setProperty('autocomplete','off');this.field.addEvents({focus:this.toggleFocus.bind(this,[true]),blur:this.toggleFocus.bind(this,[false])});this.close.setStyle('display','none');this.close.addEvents({mousedown:this.clearSearch.bindWithEvent(this)})},requestSearch:function(){this.close.setStyle('display','inline');this.close.removeClass('search-close');this.close.addClass('search-loader')},clearSearch:function(){this.close.setStyle('display','none');this.field.value=this.options.fieldText;this.clearResults()},processSearch:function(){if(this.field.value){var url=this.options.url;var ajaxRequest=new Ajax(url,{method:'post',data:'searchword='+this.field.value,onRequest:this.requestSearch.bind(this),onComplete:this.processResults.bind(this)}).request()}},processResults:function(data){this.clearResults();this.resultbox.setStyle('display','block');this.close.addClass('search-close');this.close.removeClass('search-loader');if(data){data=Json.evaluate(data);var results=new Element('div',{'class':'resultbox-bg'});if(data.categories.length>0){var section=this.createSection('search-categories',this.options.msgCategories);data.categories.each(function(res){this.createResult(res.title,res.text,res.url,res.image).injectInside(section)}.bind(this))}var section=this.createSection('search-results',this.options.msgResults);if(data.results.length>0){data.results.each(function(res){this.createResult(res.title,res.text,res.url).injectInside(section)}.bind(this))}else{this.createResult(this.options.msgNoResults,data.error,'#').injectInside(section)}this.sections.each(function(section,i){section.injectInside(results)});results.injectInside(this.resultbox);this.createResultbox(data.results.length>0).injectInside(this.resultbox)}},clearResults:function(){this.sections=new Array();this.select=false;this.resultbox.empty();this.resultbox.setStyle('display','none')},selectResult:function(state){this.selection=state},createSection:function(css,name){var div=new Element('div',{'class':css});var h3=new Element('h3',{'class':'search-header'}).setHTML(name).injectInside(div);var ul=new Element('ul',{'class':'results'}).injectAfter(h3);this.sections.include(div);return ul},createResult:function(title,text,url,image){var li=new Element('li');var a=new Element('a').setProperty('href',url).injectInside(li);if(image)var img=new Element('img').setProperty('src',image).injectInside(a);var h3=new Element('h3').setHTML(title).injectInside(a);a.appendText(text);a.addEvents({mouseenter:this.selectResult.bind(this,[true]),mouseleave:this.selectResult.bind(this,[false])});return li},createResultbox:function(searchMore){var bl=new Element('div',{'class':'resultbox-bl'});var br=new Element('div',{'class':'resultbox-br'}).injectInside(bl);var b=new Element('div',{'class':'resultbox-b'}).injectInside(br);if(searchMore){var a=new Element('a',{'class':'search-more'}).injectInside(b);var span=new Element('span',{'class':'search-more'}).injectInside(a);a.appendText(this.options.msgMoreResults);a.addEvents({mouseenter:this.selectResult.bind(this,[true]),mouseleave:this.selectResult.bind(this,[false]),mousedown:function(){this.form.submit()}.bind(this)})}return bl},toggleFocus:function(state){this.focussed=state;if(!state&&!this.selection)this.clearResults()}});

searchLive.implement(new Options);var Observer=new Class({options:{periodical:false,delay:1000},initialize:function(el,onFired,options){this.setOptions(options);this.addEvent('onFired',onFired);this.element=$(el);this.listener=this.fired.bind(this);this.value=this.element.getValue();if(this.options.periodical)this.timer=this.listener.periodical(this.options.periodical);else this.element.addEvent('keyup',this.listener)},fired:function(){var value=this.element.getValue();if(this.value==value)return;this.clear();this.value=value;this.timeout=this.fireEvent.delay(this.options.delay,this,['onFired',[value]])},clear:function(){$clear(this.timeout);return this}});Observer.implement(new Options);Observer.implement(new Events);
