/**
 * The autocompletion feature implemented with RightJS
 *
 * Home page: http://rightjs.org/ui/autocompleter
 *
 * @copyright (C) 2009-2010 Nikolay V. Nemshilov
 */
if (!RightJS) { throw "Gimme RightJS. Please." };
var Autocompleter=new Class(Observer,{extend:{EVENTS:$w('show hide update load select done'),Options:{url:document.location.href,param:'search',method:'get',minLength:1,threshold:200,cache:true,local:null,fxName:'slide',fxDuration:'short',spinner:'native',cssRule:'[rel^=autocompleter]'},current:null,instances:{},find:function(e){var i=e.target;if(i.match(Autocompleter.Options.cssRule)){var u=$uid(i);if(!Autocompleter.instances[u])new Autocompleter(i)}},rescan:function(s){}},initialize:function(i,o){this.input=$(i);this.$super(o);this._watch=this.watch.bind(this);this._hide=this.hide.bind(this);this.input.onKeyup(this._watch).onBlur(this._hide);this.holder=$E('div',{'class':'right-autocompleter'}).insertTo(this.input,'after');this.container=$E('div',{'class':'autocompleter'}).insertTo(this.holder);this.input.autocompleter=Autocompleter.instances[$uid(i)]=this},destroy:function(){this.input.stopObserving('keyup',this._watch).stopObserving('blur',this._hide);delete(this.input.autocompleter);return this},setOptions:function(o){this.$super(this.grabOptions(o));if(!this.options.url.includes('%{search}'))this.options.url+=(this.options.url.includes('?')?'&':'?')+this.options.param+'=%{search}'},show:function(){if(this.container.hidden()){var d=this.input.dimensions(),p=this.holder.position();this.container.setStyle({top:(d.top+d.height-p.y)+'px',left:(d.left-p.x)+'px',width:d.width+'px'}).show(this.options.fxName,{duration:this.options.fxDuration,onFinish:this.fire.bind(this,'show')})}return Autocompleter.current=this},hide:function(){if(this.container.visible()){this.container.hide();this.fire.bind(this,'hide')}Autocompleter.current=null;return this},prev:function(){return this.select('prev',this.container.select('li').last())},next:function(){return this.select('next',this.container.first('li'))},done:function(c){var c=c||this.container.first('li.current');if(c)this.input.value=c.innerHTML.stripTags();return this.fire('done').hide()},grabOptions:function(o){var i=this.input;var o=o||eval('('+i.get('data-autocompleter-options')+')')||{};var a=Autocompleter.Options.cssRule.split('[').last().split(']')[0].split('^='),k=a[1],v=i.get(a[0]),m;if(v&&(m=v.match(new RegExp('^'+k+'+\\[(.*?)\\]$')))){m=m[1];if(m.match(/^['"].*?['"]$/))o.local=eval('['+m+']');else if(!m.blank())o.url=m}return o},select:function(w,f){var c=this.container.first('li.current');if(c)c=c[w]('li')||c;return this.fire('select',(c||f).radioClass('current'))},watch:function(e){if([27,37,38,39,40,13].include(e.keyCode))return;if(this.input.value.length>=this.options.minLength){if(this.timeout)this.timeout.cancel();this.timeout=this.trigger.bind(this).delay(this.options.threshold)}else return this.hide()},trigger:function(){this.timeout=null;this.cache=this.cache||{};var s=this.input.value;if(s.length<this.options.minLength)return this.hide();if(this.cache[s])this.suggest(this.cache[s],s);else if(this.options.local)this.suggest(this.findLocal(s),s);else this.request=Xhr.load(this.options.url.replace('%{search}',encodeURIComponent(s)),{method:this.options.method,spinner:this.getSpinner(),onComplete:function(r){this.fire('load').suggest(r.responseText,s)}.bind(this)})},suggest:function(r,s){this.container.update(r).select('li').each(function(l){l.onmouseover=function(){l.radioClass('current')};l.onmousedown=function(){this.done(l)}.bind(this)},this);if(this.options.cache)this.cache[s]=r;return this.fire('update').show()},findLocal:function(s){var r=new RegExp("("+RegExp.escape(s)+")",'ig');return $E('ul').insert(this.options.local.map(function(o){if(r.test(o))return $E('li',{html:o.replace(r,'<strong>$1</strong>')})}).compact())},getSpinner:function(){this._spinner=this._spinner||this.options.spinner;if(this._spinner=='native'){this._spinner=$E('div',{'class':'autocompleter-spinner'}).insertTo(this.holder);var c='123'.split('').map(function(a){return $E('div',{'class':'dot-'+a,html:'&raquo;'})});(function(){var d=c.shift();c.push(d);this._spinner.update(d)}.bind(this)).periodical(400)}if(this.options.spinner=='native'){var b=this.input.dimensions(),p=this.holder.position();this._spinner.setStyle('visiblity: hidden').show();this._spinner.setStyle({visibility:'visible',top:(b.top+1-p.y)+'px',height:(b.height-2)+'px',lineHeight:(b.height-2)+'px',left:(b.left+b.width-this._spinner.offsetWidth-1-p.x)+'px'}).hide()}return this._spinner}});document.on({keydown:function(e){if(Autocompleter.current){var n;switch(e.keyCode){case 27:n='hide';break;case 37:n='prev';break;case 39:n='next';break;case 38:n='prev';break;case 40:n='next';break;case 13:n='done';break}if(n){Autocompleter.current[n]();e.stop()}}else Autocompleter.find(e)}});document.write("<style type=\"text/css\">div.right-autocompleter,div.autocompleter,div.autocompleter ul,div.autocompleter ul li,div.autocompleter-spinner,div.autocompleter-spinner div{border:none;background:none;margin:0;padding:0;list-style:none;font-weight:normal}div.right-autocompleter{position:absolute;display:inline}div.autocompleter{display:none;position:absolute;z-index:9999999;background:white;-moz-box-shadow:#BBB .2em .2em .4em;-webkit-box-shadow:#BBB .2em .2em .4em;overflow:hidden}div.autocompleter ul{*border-bottom:1px solid #CCC}div.autocompleter ul li{padding:.2em .4em;border:1px solid #CCC;border-top:none;border-bottom:none;cursor:pointer}div.autocompleter ul li:first-child{border-top:1px solid #CCC}div.autocompleter ul li:last-child{border-bottom:1px solid #CCC;*border-bottom:none}div.autocompleter ul li.current{background:#DDD}div.autocompleter-spinner{position:absolute;z-index:100000000;text-align:center;font-size:140%;font-family:Georgia;background:#DDD;color:#666;display:none;width:1em}div.autocompleter-spinner div.dot-1{margin-left:-4px}div.autocompleter-spinner div.dot-2{}div.autocompleter-spinner div.dot-3{margin-left:4px}</style>");