!function(d,m,p){XF.SmilieBox=XF.Element.newHandler({options:{inputSelector:""},loaded:!1,init:function(){var a=this;this.$input=d(this.options.inputSelector).on("keydown",function(b){if(9==b.which||9==b.keyCode)b.preventDefault(),a.$target.click(),a.$input.focus()});this.$menu=d(d.parseHTML(Mustache.render(d(".js-xfSmilieMenu").first().html())));this.$menu.insertAfter(this.$target);this.$target.attr("data-xf-click","menu");XF.activate(this.$target.parent());XF.Event.getElementHandler(this.$target, "menu","click");var c=0;this.$menu.on("menu:complete",function(){a.$menuScroll=a.$menu.find(".menu-scroller");if(!a.loaded){a.loaded=!0;if(m.IntersectionObserver){var b=new IntersectionObserver(XF.proxy(a,"onEmojiIntersection"),{root:a.$menuScroll[0],rootMargin:"0px 0px 100px 0px"});a.$menuScroll.find("span.smilie--lazyLoad").each(function(){b.observe(this)})}else a.$menuScroll.onPassive("scroll",loadVisibleImages);a.$menuScroll.find(".js-emoji").on("click",XF.proxy(a,"insertEmoji"));a.$menu.find(".js-emojiSearch").on("input", XF.proxy(a,"performSearch"));a.$menu.find(".js-emojiCloser").on("click",function(){a.$input.focus()});d(p).on("recent-emoji:logged",XF.proxy(a,"updateRecentEmoji"));a.$menu.on("menu:closed",function(){c=a.$menuScroll.scrollTop()})}a.$menuScroll.scrollTop(c);m.IntersectionObserver||a.loadVisibleImages(a.$menuScroll)})},insertEmoji:function(a){var c=d(a.currentTarget);a=c.html();a=d(a);var b=this.$input.val();a.hasClass("smilie--lazyLoad")||(this.$input.val((" "!=b.substr(-1)&&0f)return!1;k.find("span.smilie--lazyLoad").each(function(){var h=d(this);this.getBoundingClientRect().top<=f&&b.lazyLoadEmoji(h)})}})}},lazyLoadEmoji:function(a){var c= d("").attr({"class":a.attr("class").replace(/(\s|^)smilie--lazyLoad(\s|$)/," "),alt:a.attr("data-alt"),title:a.attr("title"),src:a.attr("data-src"),"data-shortname":a.attr("data-shortname")}),b=function(){var e=function(){a.replaceWith(c)};m.requestAnimationFrame?m.requestAnimationFrame(e):e()};if(c.prop("complete"))b();else c.on("load",b)},updateRecentEmoji:function(){var a=XF.getRecentEmojiUsage(),c=this.$menuScroll.find(".js-recentHeader"),b=this.$menuScroll.find(".js-recentBlock"),e=b.find(".js-recentList"), f=this.$menuScroll.find(".js-emojiList"),k=this;if(a){var g=e.clone(),h=[];g.empty();for(var l in a){var q=a[l],n;f.each(function(){n=d(this).find('.js-emoji[data-shortname="'+q+'"]').closest("li").clone();if(n.length)return n.find(".js-emoji").on("click",XF.proxy(k,"insertEmoji")),h.push(n),!1})}for(l in h)h[l].appendTo(g);e.replaceWith(g);b.hasClass("is-hidden")&&(b.hide(),b.removeClass("is-hidden"),c.removeClass("is-hidden"),b.xfFadeDown(XF.config.speed.fast));this.loadVisibleImages(g)}},onEmojiIntersection:function(a, c){for(var b,e,f=0;fk.length)e.hide(),b.show(),f.loadVisibleImages(b);else{var g=XF.canonicalizeUrl("index.php?editor/smilies-emoji/search");XF.ajax("GET",g,{q:k},function(h){h.html&& XF.setupHtmlInsert(h.html,function(l){l.find(".js-emoji").on("click",XF.proxy(f,"insertEmoji"));b.hide();e.replaceWith(l)})})}},300)}});XF.Element.register("smilie-box","XF.SmilieBox")}(window.jQuery,window,document);