"use strict";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:$empty,selectChoice:$empty,selectFirst:true,changeOption:$empty,queryResponse:$empty,showOptions:$empty,hideOptions:$empty,formatChoice:false,formatNone:false,className:false,filters:{},data:{},queryParam:false},element:{},getTemplate:$empty,initialize:function(b,a,c){this.id_prefix=b;this.input=$(b);if(!this.input){return false}this.script=a;if(!this.script){return false}this.setOptions(c);$merge(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}$clear(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.Engine.trident||Browser.Engine.webkit)?"keydown":"keypress",this.onControl.bind(this)).addEvent("keyup",a.bind(this)).addEvent("blur",c.bind(this,false)).addEvent("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}}},query:function(){if(this.input.get("value").clean()===""){return}if(this.request){this.request.cancel()}$clear(this.results);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.bindWithEvent(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.bindWithEvent(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()}var a=this.options.offset.relativeTo?this.options.offset.relativeTo.getCoordinates():this.input.getCoordinates();this.element.foundation.setStyles({display:"block",top:a.top+a.height+(this.options.offset.y||0),left:a.left+(this.options.offset.x||0),width:a.width-4});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")}},selectNext:function(){var a=this.getSelected();if(!a){return}else{if(a.hasClass("next")){this.makeChoice();return}}this.selectResult(a.getNext())},selectPrevious:function(){var a=this.getSelected();if(!a){return}else{if(a.hasClass("prev")){this.makeChoice();return}}this.selectResult(a.getPrevious())},getSelected:function(){return this.element.results.getElement(".on")||this.element.results.getFirst()},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){this.selectResult(this.getSelected())}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])}}},buildFoundation:function(){var d,b,a,c;b={"class":"vac-foundation",styles:{position:"absolute"}};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");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}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=this.input.getCoordinates();this.input.setStyles({width:h.width-75,"padding-right":75});var c=new Element("span",{"class":"vac-filters-toggle"});c.setStyles({width:h.width,"margin-left":h.width*-1});c.inject(this.input,"after");var a=new Element("a",{text:"options"});a.inject(c);var e=function(){var i=this.element.filters.getElements("input[checked]").length;var j=i==1?" type":" types";a.set("text",i+j);this.filters_first=false}.bind(this);this.element.filters_foundation=new Element("div",{"class":"vac-filters"}).inject($(document.body));var f=new Element("div",{"class":"toggles"});this.element.filters_foundation.grab(f);var d=new Element("a",{text:"check all"});f.grab(d);d.addEvent("click",function(){this.element.filters.getElements("input").setProperty("checked","checked");e()}.bind(this));var b=new Element("a",{text:"uncheck all"});f.grab(b);b.addEvent("click",function(){this.element.filters.getElements("input").removeProperty("checked");e()}.bind(this));var g=new Element("a",{text:"wiki only"});f.grab(g);g.addEvent("click",function(){this.element.filters.getElements("input").removeProperty("checked");this.element.filters.getElements(".default input").setProperty("checked","checked");e()}.bind(this));this.element.filters=new Element("ul").inject(this.element.filters_foundation);$each(this.options.filters,function(l){var i=new Element("li");var j=new Element("input",{name:"models","class":l.model_string,type:"checkbox",id:"filter-"+l.name});if(l["default"]=="True"){j.setProperty("checked","checked");i.addClass("default")}var k=new Element("label",{text:l.name_plural.toLowerCase(),"for":"filter-"+l.name});i.grab(j);i.grab(k);this.element.filters.grab(i)}.bind(this));this.element.filters.getElements("input").addEvent("change",e.bind(this));this.element.filters.getElements("li").addEvent("mousedown",function(){if(this.filters_first){b.fireEvent("click")}}.bind(this));a.addEvent("click",function(i){i.stopPropagation();if(this.element.filters_foundation.getStyle("display")=="none"){this.showFilters()}else{this.hideFilters()}}.bind(this));this.element.filters_foundation.addEvent("click",function(i){i.stopPropagation()});$(document.body).addEvent("click",function(i){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;$extend(a,this.options.data);if(this.element.filters){a.models=a.models||[];b=[];this.element.filters.getElements("input").each(function(c){if(c.getProperty("checked")){b.push(c.getProperty("class").clean())}});a.models.combine(b)}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()}},onControl:function(b){if(b.key&&!b.shift){var a;switch(b.key){case"left":b.stop();a=this.sub_menus[this.element.selected.getElement("input").value];a.hideFoundation();this.in_sub=false;return;case"right":b.stop();a=this.sub_menus[this.element.selected.getElement("input").value];a.showFoundation();a.selectResult(a.element.results.getFirst());this.in_sub=true;return}if(this.in_sub){a=this.sub_menus[this.element.selected.getElement("input").value];a.onControl(b);return}}this.parent(b)},selectResult:function(d){if(!d||d==this.element.selected){return}$each(this.sub_menus,function(f,e){f.hideFoundation()});var a,c;a=d.retrieve("result");if(!a){this.parent(d);return}c=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:c,styles:{display:"none"}});b.inject(d);this.sub_menus[c]=new VinesAutocomplete(b,this.sub_menu_url,$merge(this.options,{offset:{relativeTo:d,y:d.getCoordinates().height*-1,x:100},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.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");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 false}this.content_objects.extend([j]);var h=new Element("span",{id:"text-complete-object"+j,html:b,"class":"text-complete-object"});h.injectBefore(this.input).setProperty("content_type_id",d).setProperty("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(b){if(!b){return}var a=b.retrieve("selection");var d=b.getProperty("content_type_id");var c=b.getProperty("object_id");b.remove();this.removeContentObjectElement(d+"-"+c);if(this.options.single_value&&(this.content_objects.length===0)){this.input.removeProperty("disabled");this.input.removeClass("dn")}this.fireEvent("onRemoveNode",a)},removeContentObjectElement:function(a){this.content_objects.erase(a)}});
