var SearchSuggest=Class.create({Version:"0.9",initialize:function(b,a,d){this.field=$(b);this.maxResults=a;this.method;this.keywords=false;this.letter=null;if(d){this.method=d}else{this.method="heuristic"}if(this.field){this.form=this.field.up("form");this.setupResults();this.form.observe("submit",function(f){f.stop()});this.form.writeAttribute("autocomplete","off");$("go").observe("click",this.keyEnter.bindAsEventListener(this));this.field.observe("keyup",this.keyPress.bindAsEventListener(this));this.field.observe("blur",this.watchBlur.bindAsEventListener(this));var c=$F(this.field).toLowerCase();if(c!=""){this.getKeywords(c.substring(0,1));if(this.method=="heuristic"){this.getHeuristicScores(c)}else{if(this.method=="exact"){this.getExactMatches(c)}}}}},keyPress:function(a){switch(a.keyCode){case Event.KEY_ESC:this.clearResults();break;case Event.KEY_RETURN:this.keyEnter();break;case Event.KEY_UP:this.moveUp();break;case Event.KEY_DOWN:this.moveDown();break;default:this.filter();return}},watchBlur:function(){var a=this.results_container.select("div.noblur");if(a.length==0){this.clearResults()}},moveUp:function(){var a=true;var b=this.results_container.childElements();if(b.length>0){b.each(function(c){if(c.hasClassName("selected")){c.removeClassName("selected");if(c.previous()){c.previous().addClassName("selected");a=false}else{a=true}}});if(a){b[b.length-1].addClassName("selected")}}},moveDown:function(){var c=false;var a=true;var b=this.results_container.childElements();if(b.length>0){b.each(function(d){if(d.hasClassName("selected")){d.removeClassName("selected");c=true}else{if(c){d.addClassName("selected");c=false;a=false}}});if(a){b[0].addClassName("selected")}}},keyEnter:function(){var a=this.results_container.select("div.selected");if(a.length==1){var b=a[0].select("a")[0].readAttribute("href");window.location.href=b}else{if(a.length==0){this.form.submit()}else{}}},filter:function(){var b=$F(this.field).toLowerCase();var c=b.substring(0,1);if(b!=""){if(this.letter!=c){this.getKeywords(c)}var a;if(this.method=="heuristic"){a=this.getHeuristicScores(b)}else{if(this.method=="exact"){a=this.getExactMatches(b)}}if(a!==false){this.displayResults(a)}else{}}else{this.clearResults()}},getKeywords:function(a){switch(a){case"a":this.keywords=keywords_a;break;case"b":this.keywords=keywords_b;break;case"c":this.keywords=keywords_c;break;case"d":this.keywords=keywords_d;break;case"e":this.keywords=keywords_e;break;case"f":this.keywords=keywords_f;break;case"g":this.keywords=keywords_g;break;case"h":this.keywords=keywords_h;break;case"i":this.keywords=keywords_i;break;case"j":this.keywords=keywords_j;break;case"k":this.keywords=keywords_k;break;case"l":this.keywords=keywords_l;break;case"m":this.keywords=keywords_m;break;case"n":this.keywords=keywords_n;break;case"o":this.keywords=keywords_o;break;case"p":this.keywords=keywords_p;break;case"q":this.keywords=keywords_q;break;case"r":this.keywords=keywords_r;break;case"s":this.keywords=keywords_s;break;case"t":this.keywords=keywords_t;break;case"u":this.keywords=keywords_u;break;case"v":this.keywords=keywords_v;break;case"w":this.keywords=keywords_w;break;case"x":this.keywords=keywords_x;break;case"y":this.keywords=keywords_y;break;case"z":this.keywords=keywords_z;break}this.letter=a},setupResults:function(){this.results_container=new Element("div",{id:"search_results_container"});this.form.insert({after:this.results_container});this.results_container=$("search_results_container");var a=this.field.positionedOffset();/*this.results_container.setStyle({top:(a.top+this.field.getHeight()-1)+"px",left:a.left+"px"});*/this.clearResults()},displayResults:function(b){var a;this.clearResults();if(b.length>0){this.results_container.show();b.each(function(d,c){if(c<this.maxResults){a=new Element("div");a.addClassName("search_suggestion_result");a.update('<strong><a href="'+this.keywords[d[1]].url+'">'+this.keywords[d[1]].title+"</a></strong>");a.writeAttribute({onclick:'SearchSuggest_goTo("'+this.keywords[d[1]].url+'")'});a.observe("mouseover",function(){a.addClassName("noblur")});a.observe("mouseout",function(){a.removeClassName("noblur")});this.results_container.insert({bottom:a})}}.bind(this))}},getHeuristicScores:function(a){var b=$A([]);if(this.keywords.length==0){return false}else{this.keywords.each(function(c,d){if(c.hasOwnProperty("keyword")){var e=c.keyword.score(a);if(e>0){b.push([e,d])}}});return b.sort(function(d,c){return c[0]-d[0]})}},getExactMatches:function(a){var c=$A([]);var b=new RegExp("^"+a,"i");if(this.keywords.length==0){return false}else{this.keywords.each(function(d,e){if(d.hasOwnProperty("keyword")){var f=b.test(d.keyword);if(f){c.push([1,e])}}});return c.sort(function(e,d){return d[0]-e[0]})}},clearResults:function(){this.results_container.hide();this.results_container.update("")}});function SearchSuggest_goTo(a){if(a){window.location.href=a}}String.prototype.score=function(l,d){d=d||0;if(l.length==0){return 0.9}if(l.length>this.length){return 0}for(var g=l.length;g>0;g--){var n=l.substring(0,g);var h=this.indexOf(n);if(h<0){continue}if(h+l.length>this.length+d){continue}var m=this.substring(h+n.length);var f=null;if(g>=l.length){f=""}else{f=l.substring(g)}var e=m.score(f,d+h);if(e>0){var a=this.length-m.length;if(h!=0){var b=0;var k=this.charCodeAt(h-1);if(k==32||k==9){for(var b=(h-2);b>=0;b--){k=this.charCodeAt(b);a-=((k==32||k==9)?1:0.15)}}else{a-=h}}a+=e*m.length;a/=this.length;return a}}return 0};
