var VinesAutocomplete=new Class({Implements:[Events,Options],options:{delay:300,offset:{x:0,y:0,relativeTo:false},loadingImg:"http://media.giantbomb.com/media/vine/img/generic/loading.gif",cacheSize:5,makeChoice:function(){},selectChoice:function(){},selectFirst:true,changeOption:function(){},queryResponse:function(){},showOptions:function(){},hideOptions:function(){},formatChoice:false,formatNone:false,className:false,filters:{},data:{},queryParam:false},element:{},getTemplate:function(){},initialize:function(b,a,c){this.id_prefix=b;this.input=$(b);if(!this.input){return}this.script=a;if(!this.script){return}this.setOptions(c);Object.append({},this.observeOptions,this.options.observeOptions);this.buildFilters();this.observe(this.input);this.input.set("autocomplete","off");this.cache_keys=[];this.cache_values=[];this.page=0;this.encoded_post_data={};this.input.vacSet=function(d,e){this.options[d]=e}.bind(this);this.input.vacGet=function(d){return this.options[d]}.bind(this);this.input.vacBuildFilters=function(){this.buildFilters()}.bind(this);this.input.store("VinesAutocomplete",this)},observe:function(b){var d,a,c;a=function(f){if(f.key&&!f.shift&&["up","down","left","right","enter"].contains(f.key)){return}if(b.get("value").clean()===""){if(this.request){this.request.cancel()}this.hideFoundation();return}clearTimeout(this.timeout);this.timeout=this.query.delay(this.options.delay,this)};c=function(e){if(e){if(!this.input.hasClass("ready")){this.input.addClass("ready").setProperty("value","")}this.hideFilters();if(this.results){this.showFoundation()}}else{this.hideFoundation()}};b.addEvent((Browser.ie||Browser.safari||Browser.chrome)?"keydown":"keypress",this.onControl.bind(this));b.addEvents({keyup:a.bind(this),blur:c.bind(this,false),focus:c.bind(this,true)})},onControl:function(a){if(a.key&&!a.shift){switch(a.key){case"up":a.stop();this.selectPrevious();break;case"down":a.stop();this.selectNext();break;case"enter":a.stop();this.makeChoice();break;default:break}}},query:function(){if(this.input.get("value").clean()===""){return}if(this.request){this.request.cancel()}this.results=null;this.post_string=this.buildPostData();this.showLoading();var a=this.getCache(this.post_string);if(a){this.queryResponse(a)}else{this.request=new Request.JSON({url:this.script,onSuccess:this.queryResponse.bind(this),onFailure:this.queryFail.bind(this),sendJson:false});this.request.get({json:this.post_string})}},queryResponse:function(a){this.setCache(this.post_string,a);this.populateResults(a);this.hideLoading();this.showResults();this.options.queryResponse(a)},queryFail:function(b){var a=new Element("li",{text:"Your search failed, please try again.","class":"fail"});this.element.results.empty().grab(a);this.hideLoading();this.showResults()},populateResults:function(d){var a,c,b;this.results=d.results;this.element.results.empty();if(!this.results||!this.results.length){this.element.results.grab(this.options.formatNone?this.options.formatNone():this.formatNone())}else{if(this.page>0){a=new Element("li",{text:"See previous 10 results","class":"prev"});b=new Element("span",{"class":"arrow"}).inject(a,"top");a.addEvent("mouseover",this.overResult.bind(this,a));a.addEvent("mousedown",this.prevPage.bind(this));this.element.results.grab(a)}this.results.each(function(f,e){var g=this.options.formatChoice?this.options.formatChoice(f):this.formatChoice(f);g.addEvents({mouseover:this.overResult.bind(this,g),mousedown:this.makeChoice.bind(this)});g.store("result",f);this.element.results.grab(g)}.bind(this));if(d.count>this.results.length+this.current_offset){c=new Element("li",{text:"See next 10 results ","class":"next"});b=new Element("span",{"class":"arrow"}).inject(c,"top");c.addEvent("mouseover",this.overResult.bind(this,c));c.addEvent("mousedown",this.nextPage.bind(this));this.element.results.grab(c)}}},nextPage:function(a){if(a){a.stop()}if(this.request.running){return}this.page+=1;this.query()},prevPage:function(a){if(a){a.stop()}if(this.request.running){return}this.page-=1;this.query()},setCache:function(a,b){this.cache_keys.push(a);this.cache_values.push(b);if(this.cache_keys.length>this.options.cacheSize){this.cache_keys.shift();this.cache_values.shift()}},getCache:function(a){if(this.cache_keys.indexOf(a)>=0){return this.cache_values[this.cache_keys.indexOf(a)]}else{return false}},showLoading:function(){this.hideResults();this.showFoundation();this.element.loading.setStyle("display","block")},hideLoading:function(){this.element.loading.setStyle("display","none")},showFoundation:function(){if(!this.element.foundation){this.buildFoundation()}this.setPosition();this.element.foundation.setStyle("display","block");this.fireEvent("onShowFoundation")},hideFoundation:function(){if(this.element.foundation){this.element.foundation.setStyle("display","none");this.fireEvent("onHideFoundation")}},showResults:function(){if(!this.element.foundation){this.buildFoundation()}if(this.results&&this.post_string===this.buildPostData()){this.element.results.setStyle("display","block");if(this.options.selectFirst){this.selectResult(this.element.results.getFirst())}}else{if(this.post_string!==this.buildPostData()){this.query()}}},hideResults:function(){if(this.element.results){this.element.results.setStyle("display","none");this.fireEvent("onHideResults")}},selectNext:function(){var a=this.getSelected();if(!a){this.selectResult(this.element.results.getFirst());return}else{if(a.hasClass("next")){this.makeChoice();return}}this.selectResult(a.getNext())},selectPrevious:function(){var a=this.getSelected();if(!a){this.selectResult(this.element.results.getLast());return}else{if(a.hasClass("prev")){this.makeChoice();return}}this.selectResult(a.getPrevious())},getSelected:function(){return this.element.results.getElement(".on")},selectResult:function(a){if(!a||a===this.element.selected){return}this.selected=a.retrieve("result");if(this.element.selected){this.element.selected.removeClass("on")}this.element.selected=a;this.element.selected.addClass("on");this.options.selectChoice(this.selected,a);this.fireEvent("onSelect",[this.selected,this.input])},overResult:function(a){this.selectResult(a)},makeChoice:function(){if(!this.element.selected){searchResultsURI="/search/?q="+this.input.get("value");window.location=searchResultsURI}if(this.element.selected.hasClass("next")){this.nextPage()}else{if(this.element.selected.hasClass("prev")){this.prevPage()}else{this.options.makeChoice(this.selected);this.hideFoundation();this.fireEvent("onSelection",[this.selected,this.input])}}},setPosition:function(){var a=this.options.offset.relativeTo?this.options.offset.relativeTo.getCoordinates():this.input.getCoordinates();this.element.foundation.setStyles({top:a.top+a.height+(this.options.offset.y||0),left:a.left+(this.options.offset.x||0),width:a.width-4})},buildFoundation:function(){var b,a,c;b={"class":"vac-foundation",styles:{position:"absolute",display:"block"}};this.element.foundation=new Element("div",b);if(this.options.className){this.element.foundation.addClass(this.options.className)}this.element.foundation.inject($(document.body),"bottom");a={"class":"vac-loading",src:this.options.loadingImg};this.element.loading=new Element("img",a);this.element.loading.inject(this.element.foundation);c={"class":"vac-results"};this.element.results=new Element("ul",c);this.element.results.inject(this.element.foundation)},formatChoice:function(f){var k=this.getTemplate(f);if(k){return k}var o,a,j,l,g,c,d,e,b,i,n,m,h;o=new Element("li",{"class":"row"});j=new Element("div",{"class":"body"}).inject(o);if(f.image){g=new Element("img",{src:f.image,"class":"image"}).inject(j)}d=new Element("div",{"class":"info"}).inject(j);b=new Element("span",{text:f.name,"class":"name"}).inject(d);if(f.type){n=new Element("span",{text:f.type,"class":"type"}).inject(d)}switch(f.result_type){case"alias":h=new Element("span",{text:"(alias)","class":"alias"}).inject(d);break;case"exact":o.addClass("exact");break;default:break}return o},formatNone:function(){var a;a=new Element("li");a.addClass("empty").set("text","no results found");return a},buildFilters:function(){if(!this.options.filters.length||this.options.filters.length===0){return}this.filters_first=true;var h=new Element("span",{"class":"vac-filters-toggle"}).inject(this.input,"after");var k=new Element("span",{text:window.VINES_SITE_FULL_NAME=="Tested"?"":"wiki"}).inject(h);var e=new Element("a",{text:"More"}).inject(h);var a=function(){var l=this.element.filters.getElements("input:checked").length;var m=l==1?" type":" types";k.set("text",l+m);this.filters_first=false}.bind(this);this.element.filters_foundation=new Element("div.vac-filters").inject($(document.body));this.element.filters=new Element("dl.filters").inject(this.element.filters_foundation);var g=[],b={},d={};Array.each(this.options.filters,function(p){if(!d[p.search_group]){var q=new Element("dt",{text:p.search_group,"class":"search-group-"+p.search_group});var m=new Element("dd",{"class":"search-group-"+p.search_group});d[p.search_group]=new Element("ul").inject(m);b[p.search_group]=[q,m];g.push(p.search_group)}var n=new Element("input",{name:"models","class":p.model_string,type:"checkbox"});var o=new Element("label",{text:p.name_plural.toLowerCase()}).grab(n,"top");var l=new Element("li").adopt(o).inject(d[p.search_group]);if(p["default"]=="True"){n.setProperties({checked:"checked","data-default":true})}}.bind(this));Array.each(g.sort().reverse(),function(l){this.element.filters.adopt(b[l])}.bind(this));var f=new Element("div.toggles");this.element.filters_foundation.grab(f);var j=new Element("a.checkall",{text:"check all"});f.grab(j);j.addEvent("click",function(){this.element.filters.getElements("input").setProperty("checked","checked");a()}.bind(this));var i=new Element("a.uncheck",{text:"uncheck all"});f.grab(i);i.addEvent("click",function(){this.element.filters.getElements("input").removeProperty("checked");a()}.bind(this));if(window.VINES_SITE_FULL_NAME!="Tested"){var c=new Element("a.wikionly",{text:"wiki only"});f.grab(c);c.addEvent("click",function(){this.element.filters.getElements("input").removeProperty("checked");this.element.filters.getElements("input[data-default=true]").setProperty("checked","checked");a()}.bind(this))}this.element.filters_foundation.getElements("input").addEvent("change",a.bind(this));this.element.filters_foundation.getElements("li").addEvent("mousedown",function(){if(this.filters_first){i.fireEvent("click")}}.bind(this));e.addEvent("click",function(l){l.stopPropagation();if(this.element.filters_foundation.getStyle("display")=="none"){this.showFilters()}else{this.hideFilters()}}.bind(this));this.element.filters_foundation.addEvent("click",function(l){l.stopPropagation()});$(document.body).addEvent("click",function(l){this.hideFilters()}.bind(this))},showFilters:function(){if(this.element.filters_foundation){var a=this.options.offset.relativeTo?this.options.offset.relativeTo.getCoordinates():this.input.getCoordinates();this.element.filters_foundation.setStyles({top:a.top+a.height+(this.options.offset.y||0),left:a.left+(this.options.offset.x||0)});this.element.filters_foundation.setStyle("display","block")}},hideFilters:function(){if(this.element.filters_foundation){this.element.filters_foundation.setStyle("display","none")}},buildPostData:function(){var a={},b;Object.append(a,this.options.data);if(this.element.filters){a.models=a.models||[];this.element.filters.getElements("input").each(function(c){if(c.getProperty("checked")){a.models.include(c.getProperty("class").clean())}})}a[this.options.queryParam||this.input.get("name")||"q"]=this.input.get("value");if(this.query_data!=JSON.encode(a)){this.page=0;this.query_data=JSON.encode(a)}if(this.page===0){a.search_matches=8;a.alias_matches=2;this.current_offset=0}else{a.search_matches=10;a.alias_matches=0;a.offset=10*this.page-2;this.current_offset=a.offset}return JSON.encode(a)},reset:function(){this.element.selected=null;this.selected=null;this.input.value="";this.results=null}});VinesAutocomplete.WithSubMenus=new Class({Extends:VinesAutocomplete,initialize:function(b,a,d,c){this.sub_menus={};this.sub_menu_url=d;this.parent(b,a,c)},makeChoice:function(){if(this.element.selected.hasClass("next")||this.element.selected.hasClass("prev")){this.parent()}else{this.sub_menus[this.element.selected.getElement("input").value].makeChoice()}},selectResult:function(d){if(!d||d==this.element.selected){return}Object.each(this.sub_menus,function(f,e){f.hideFoundation()});var a,c;a=d.retrieve("result");if(!a){this.parent(d);return}c=this.input.value+"-"+this.page+"-"+a.content_type_id+"-"+a.id;if(this.sub_menus[c]){this.sub_menus[c].showFoundation()}else{var b=new Element("input",{type:"text",value:a.content_type_id+"-"+a.id,styles:{display:"none"}});b.inject(d);this.sub_menus[c]=new VinesAutocomplete(b,this.sub_menu_url,Object.append({},this.options,{offset:{relativeTo:d,y:d.getCoordinates().height*-1,x:150},selectFirst:false}));this.sub_menus[c].buildFoundation();this.sub_menus[c].query();this.sub_menus[c].addEvents({hideFoundation:function(){this.in_sub=false}.bind(this),onSelection:function(){this.fireEvent("onSelection",[this.sub_menus[c].selected,this.sub_menus[c].input])}.bind(this)});this.addEvent("onHideFoundation",this.sub_menus[c].hideFoundation.bind(this.sub_menus[c]));this.addEvent("onHideResults",this.sub_menus[c].hideFoundation.bind(this.sub_menus[c]))}this.parent(d)}});VinesAutocomplete.Multi=new Class({Extends:VinesAutocomplete,options:{ct_ids:"",content_objects:[],content_type_id:null,object_id:null,disable_delete:false,disable_add:false,name:null,search_input:null,input_name:"assoc",input_values_with_ct:true,single_value:false},content_objects:[],initialize:function(d,b,c){if(!$(d)||d.retrieve("VinesAutocomplete")){return}var a=new Element("input",{type:"text"});a.inject(d);this.addEvent("onSelection",this.create.bind(this));d.store("VinesAutocomplete",this);this.parent(a,b,c);if(c.content_type_id&&c.object_id){this.create({content_type_id:c.content_type_id,object_id:c.object_id,name:c.name,disable_delete:c.disable_delete})}if(c.content_objects){c.content_objects.each(this.create.bind(this))}},onControl:function(c,a){if(c.key&&!c.shift&&c.key=="backspace"&&this.input.value===""){c.stop();var b=this.input.getPrevious();if(b&&!b.hasClass("disable_delete")){this.removeNode(b)}}this.parent(c)},create:function(k){if(!k.content_type_id||!(k.id||k.object_id)||!k.name){return}var i=k.id||k.object_id;var d=k.content_type_id;var b=k.name;var c=k.disable_delete;var j=d+"-"+i;var g=$("text-complete-object"+j);if(this.content_objects.contains(j)&&g){g.highlight().get("tween").chain(function(){g.setStyle("background-color","transparent")});return}this.content_objects.push(j);var h=new Element("span#text-complete-object"+j+".text-complete-object",{html:b});h.inject(this.input,"before").setProperties({content_type_id:d,object_id:i}).store("selection",k);if(c){h.addClass("disable_delete")}else{var f=new Element("a",{html:" (x) ","class":"negative",events:{click:function(){this.removeNode(h)}.bind(this)}}).inject(h)}var e=new Element("input",{type:"hidden",name:this.options.input_name,value:this.options.input_values_with_ct?d+"-"+i:i}).inject(h);if(this.options.single_value){this.input.addClass("dn");this.input.setProperty("disabled","true")}this.fireEvent("onCreateNode",k);this.reset()},removeNode:function(a){if(!a){return}a.destroy();this.content_objects.erase(a.getProperty("content_type_id")+"-"+a.getProperty("object_id"));if(this.options.single_value&&(this.content_objects.length===0)){this.input.removeProperty("disabled");this.input.removeClass("dn")}this.fireEvent("onRemoveNode",a.retrieve("selection"))}});
