var SV=window.SV||{};SV.MultiPrefix=SV.MultiPrefix||{}; (function(c,l,m,n){c.extend(SV.MultiPrefix,{svMultiPrefixCounter:1});c.fn.extend({multiPrefixSelectorUniqueId:function(){var a=this.attr("id");a||(a="js-SVMultiPrefixUniqueId"+SV.MultiPrefix.svMultiPrefixCounter,this.attr("id",a),this.attr("data-sv-multiprefix-unique",SV.MultiPrefix.svMultiPrefixCounter),SV.MultiPrefix.svMultiPrefixCounter++);return a}});SV.MultiPrefix.Helpers={getHiddenInputName:function(a,b){b=void 0===b?!1:b;a=(a.attr("name")+"_internal").replace("[]","");return b?'[name="'+a+ '"]':a}};SV.MultiPrefix.PrefixMenu=XF.Element.newHandler({options:{realInput:null,minTokens:0,maxTokens:0},init:function(){var a=this.$target;this.template=this.$target.parent().find('script[type="text/template"]').html();this.template||(console.error("No prefix template could be found"),this.template="");a.on("config-update",c.proxy(this,"setupSelect2"));a.trigger("config-update")},loadPrefixes:function(){var a=[];this.$target.find("option").each(function(){var b=c(this);a[b.attr("value")]={prefix_id:b.attr("value"), title:b.text(),css_class:b.attr("data-prefix-class")}});this.prefixes=a},getSelectedPrefixIds:function(){this.$target.prop("multiple",!0);var a=this.$target.val();return"string"===typeof a?[parseInt(a)]:a},getMinTokens:function(){return this.getAllowedTokensCount("min")},getMaxTokens:function(){return this.getAllowedTokensCount("max")},getAllowedTokensCount:function(a){var b=this.$target;a+="-tokens";var e=b.data(a);void 0===e&&(e=b.attr("data-"+a),void 0===e&&(e=0));return e},hasTooManyItems:function(){var a= this.getMaxTokens();return a?this.getSelectedPrefixIds().length>a:!1},getSelect2Config:function(){return{language:SV.MultiPrefix.Phrases,width:"100%",minimumSelectionLength:this.getMinTokens(),maximumSelectionLength:this.getMaxTokens(),containerCssClass:"input prefix--title",selectOnClose:!1,placeholder:XF.phrase("sv_prefix_placeholder",null,"Prefix..."),disabled:this.$target.prop("disabled"),templateResult:c.proxy(this,"renderPrefix"),templateSelection:c.proxy(this,"renderPrefix"),dropdownParent:this.$target.parent(), dropdownCssClass:"select2-dropdown--forceHide",debug:!1}},getSelect2Api:function(){return this.$target.data("select2")},autoFocusIfNeeded:function(){var a=this.$target;a.prop("autofocus")&&a.select2("open")},handleInOverlayStateIfNeeded:function(){var a=this.$target.closest(".overlay-container");if(a.length){var b=this;a.on("overlay:hiding",function(){b.$target.select2("close")})}},getSearchField:function(){return this.$target.parent().find(".select2-selection")},signalTooManyItemsIfNeeded:function(){if(this.hasTooManyItems()){var a= this.getSearchField();a.length&&setTimeout(function(){a.trigger("click")})}},getHiddenInputName:function(a){a=void 0===a?!1:a;var b=(this.$target.attr("name")+"_internal").replace("[]","");return a?'[name="'+b+'"]':b},prepareInput:function(){var a=this.$target,b=a.find('option[value="0"]');a.multiPrefixSelectorUniqueId();a.data("select2")&&a.select2("destroy");b.length||(b=c("").attr({type:"hidden",name:SV.MultiPrefix.Helpers.getHiddenInputName(b)});g.val(d);g.insertAfter(b);b.val([])}});b.on("select2:closing",function(){if(a.isFauxSingleMode()){var d=SV.MultiPrefix.Helpers.getHiddenInputName(b); d=XF.findRelativeIf(d,b);d.length&&(b.val(d.val()),d.remove())}});b.on("select2:unselecting",function(d){XF.MenuWatcher.preventDocClick()});b.on("select2:unselect",function(d){setTimeout(function(){XF.MenuWatcher.allowDocClick()},0)})},setupSelect2:function(){this.prepareInput();this.loadPrefixes();this.initSelect2();this.signalTooManyItemsIfNeeded();this.autoFocusIfNeeded();this.handleInOverlayStateIfNeeded()},renderPrefix:function(a){return a.id&&""!==this.template?c(Mustache.render(this.template, {rich_prefix:this.prefixes[a.id]})):a.text},handleNoneValue:function(a){a=c(a.currentTarget).find('option[value=""]');a.length&&a.prop("selected")&&a.prop("selected",!1)}});SV.MultiPrefix.Phrases={errorLoading:function(){return XF.phrase("s2_error_loading")},inputTooLong:function(a){return XF.phrase("s2_input_too_long",{"{count}":a.input.length-a.maximum})},inputTooShort:function(a){return XF.phrase("s2_input_too_short",{"{count}":a.minimum-a.input.length})},loadingMore:function(){return XF.phrase("s2_loading_more")}, maximumSelected:function(a){return XF.phrase("s2_maximum_selected",{"{count}":a.maximum})},noResults:function(){return XF.phrase("s2_no_results")},searching:function(){return XF.phrase("s2_searching")}};SV.MultiPrefix.PrefixLoader=XF.Element.newHandler({options:{listenTo:"",initUpdate:!0,href:"",uniqueId:""},init:function(){if(this.$target.is("select")){if(this.options.uniqueId=this.$target.multiPrefixSelectorUniqueId(),this.options.href){var a=this.options.listenTo?XF.findRelativeIf(this.options.listenTo, this.$target):c([]);a.length?(a.on("change",c.proxy(this,"loadPrefixes")),this.options.initUpdate&&a.trigger("change")):console.error("Cannot load prefixes dynamically as no element set to listen to for changes")}}else console.error("Must trigger on select")},loadPrefixes:function(a){XF.ajax("POST",this.options.href,{val:c(a.target).val()},c.proxy(this,"loadSuccess"))},loadSuccess:function(a){if(a.html){var b=this.$target,e=b.val(),d=SV.MultiPrefix.Helpers.getHiddenInputName(b);d=XF.findRelativeIf(d, b);d.length&&(b.data("select2")&&b.select2("destroy"),e=d.val(),b.val(e.split(",")),d.remove());XF.setupHtmlInsert(a.html,function(g){var f=g.find("select");if(f.length){b.empty().append(f.children());e&&(b.val([]),c.each(e,function(p,h){b.find('option[value="'+h+'"]').attr("selected","selected").prop("selected",!0)}));var k=parseInt(f.data("min-tokens"));f=parseInt(f.data("max-tokens"));b.data("min-tokens",k).data("max-tokens",f);b.find("option:selected");b.attr("multiple","multiple");b.trigger("config-update")}g.empty()})}}}); XF.QuickThread&&XF.Element.extend("quick-thread",{__backup:{reset:"svMultiPrefix_reset"},reset:function(a,b){c('select[name="prefix_id[]"]').val("").trigger("change");this.svMultiPrefix_reset(a,b)}});XF.Element.register("sv-multi-prefix-loader","SV.MultiPrefix.PrefixLoader");XF.Element.register("sv-multi-prefix-menu","SV.MultiPrefix.PrefixMenu")})(jQuery,window,document);