!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(t,i){return void 0===i&&(i="undefined"!=typeof window?require("jquery"):require("jquery")(t)),n(i),i}:n(jQuery)}(function(n){"use strict";var r=n(document),u=n(window),i="selectric",o="Input Items Open Disabled TempShow HideSelect Wrapper Hover Responsive Above Scroll Group GroupLabel",t=".sl",s=["a","e","i","o","u","n","c","y"],f=[/[\xE0-\xE5]/g,/[\xE8-\xEB]/g,/[\xEC-\xEF]/g,/[\xF2-\xF6]/g,/[\xF9-\xFC]/g,/[\xF1]/g,/[\xE7]/g,/[\xFD-\xFF]/g],e=function(t,i){var r=this;r.element=t;r.$element=n(t);r.state={enabled:!1,opened:!1,currValue:-1,selectedIdx:-1};r.eventTriggers={open:r.open,close:r.close,destroy:r.destroy,refresh:r.refresh,init:r.init};r.init(i)};e.prototype={utils:{isMobile:function(){return/android|ip(hone|od|ad)/i.test(navigator.userAgent)},replaceDiacritics:function(n){for(var t=f.length;t--;)n=n.toLowerCase().replace(f[t],s[t]);return n},format:function(n){var t=arguments;return(""+n).replace(/\{(?:(\d+)|(\w+))\}/g,function(n,i,r){return r&&t[1]?t[1][r]:t[i]})},nextEnabledItem:function(n,t){for(;n[t=(t+1)%n.length].disabled;);return t},previousEnabledItem:function(n,t){for(;n[t=(t>0?t:n.length)-1].disabled;);return t},toDash:function(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()},triggerCallback:function(t,r){var u=r.element,f=r.options["on"+t];n.isFunction(f)&&f.call(u,u,r);n.fn[i].hooks[t]&&n.each(n.fn[i].hooks[t],function(){this.call(u,u,r)});n(u).trigger(i+"-"+this.toDash(t),r)}},init:function(t){var r=this;if(r.options=n.extend(!0,{},n.fn[i].defaults,r.options,t),r.utils.triggerCallback("BeforeInit",r),r.destroy(!0),r.options.disableOnMobile&&r.utils.isMobile())return void(r.disableOnMobile=!0);r.classes=r.getClassNames();var u=n("<input/>",{"class":r.classes.input,readonly:r.utils.isMobile()}),f=n("<div/>",{"class":r.classes.items,tabindex:-1}),s=n("<div/>",{"class":r.classes.scroll}),e=n("<div/>",{"class":r.classes.prefix,html:r.options.arrowButtonMarkup}),o=n("<p/>",{"class":"label"}),h=r.$element.wrap("<div/>").parent().append(e.prepend(o),f,u);r.elements={input:u,items:f,itemsScroll:s,wrapper:e,label:o,outerWrapper:h};r.$element.on(r.eventTriggers).wrap('<div class="'+r.classes.hideselect+'"/>');r.originalTabindex=r.$element.prop("tabindex");r.$element.prop("tabindex",!1);r.populate();r.activate();r.utils.triggerCallback("Init",r)},activate:function(){var n=this,t=n.$element.width();n.utils.triggerCallback("BeforeActivate",n);n.elements.outerWrapper.prop("class",[n.classes.wrapper,n.$element.prop("class").replace(/\S+/g,n.classes.prefix+"-$&"),n.options.responsive?n.classes.responsive:""].join(" "));n.options.inheritOriginalWidth&&t>0&&n.elements.outerWrapper.width(t);n.$element.prop("disabled")?(n.elements.outerWrapper.addClass(n.classes.disabled),n.elements.input.prop("disabled",!0)):(n.state.enabled=!0,n.elements.outerWrapper.removeClass(n.classes.disabled),n.$li=n.elements.items.removeAttr("style").find("li"),n.bindEvents());n.utils.triggerCallback("Activate",n)},getClassNames:function(){var r=this,t=r.options.customClass,i={};return n.each(o.split(" "),function(n,u){var f=t.prefix+u;i[u.toLowerCase()]=t.camelCase?f:r.utils.toDash(f)}),i.prefix=t.prefix,i},setLabel:function(){var t=this,i=t.options.labelBuilder,r=t.lookupItems[t.state.currValue];t.elements.label.html(n.isFunction(i)?i(r):t.utils.format(i,r))},populate:function(){var t=this,r=t.$element.children(),u=t.$element.find("option"),f=u.index(u.filter(":selected")),i=0;t.state.currValue=t.state.selected=~f?f:0;t.state.selectedIdx=t.state.currValue;t.items=[];t.lookupItems=[];r.length&&(r.each(function(r){var u=n(this),f,e;u.is("optgroup")?(f={element:u,label:u.prop("label"),groupDisabled:u.prop("disabled"),items:[]},u.children().each(function(r){var u=n(this),e=u.html();f.items[r]={index:i,element:u,value:u.val(),text:e,slug:t.utils.replaceDiacritics(e),disabled:f.groupDisabled};t.lookupItems[i]=f.items[r];i++}),t.items[r]=f):(e=u.html(),t.items[r]={index:i,element:u,value:u.val(),text:e,slug:t.utils.replaceDiacritics(e),disabled:u.prop("disabled")},t.lookupItems[i]=t.items[r],i++)}),t.setLabel(),t.elements.items.append(t.elements.itemsScroll.html(t.getItemsMarkup(t.items))))},getItemsMarkup:function(t){var i=this,r="<ul>";return n.each(t,function(t,u){void 0!==u.label?(r+=i.utils.format('<ul class="{1}"><li class="{2}">{3}<\/li>',n.trim([i.classes.group,u.groupDisabled?"disabled":"",u.element.prop("class")].join(" ")),i.classes.grouplabel,u.element.prop("label")),n.each(u.items,function(n,t){r+=i.getItemMarkup(t.index,t)}),r+="<\/ul>"):r+=i.getItemMarkup(u.index,u)}),r+"<\/ul>"},getItemMarkup:function(t,i){var r=this,u=r.options.optionsItemBuilder;return r.utils.format('<li data-index="{1}" class="{2}">{3}<\/li>',t,n.trim([t===r.state.currValue?"selected":"",t===r.items.length-1?"last":"",i.disabled?"disabled":""].join(" ")),n.isFunction(u)?u(i,i.element,t):r.utils.format(u,i))},bindEvents:function(){var i=this;i.elements.wrapper.add(i.$element).add(i.elements.outerWrapper).add(i.elements.input).off(t);i.elements.outerWrapper.on("mouseenter"+t+" mouseleave"+t,function(t){n(this).toggleClass(i.classes.hover,"mouseenter"===t.type);i.options.openOnHover&&(clearTimeout(i.closeTimer),"mouseleave"===t.type?i.closeTimer=setTimeout(n.proxy(i.close,i),i.options.hoverIntentTimeout):i.open())});i.elements.wrapper.on("click"+t,function(n){i.state.opened?i.close():i.open(n)});i.elements.input.prop({tabindex:i.originalTabindex,disabled:!1}).on("keypress"+t,i.handleSystemKeys).on("keydown"+t,function(n){i.handleSystemKeys(n);clearTimeout(i.resetStr);i.resetStr=setTimeout(function(){i.elements.input.val("")},i.options.keySearchTimeout);var t=n.keyCode||n.which;if(t>36&&41>t){if(!i.options.allowWrap&&(39>t&&0===i.state.selectedIdx||t>38&&i.state.selectedIdx+1===i.items.length))return;i.select(i.utils[(39>t?"previous":"next")+"EnabledItem"](i.items,i.state.selectedIdx))}}).on("focusin"+t,function(n){i.state.opened||i.open(n)}).on("oninput"in i.elements.input[0]?"input":"keyup",function(){i.elements.input.val().length&&n.each(i.items,function(n,t){if(RegExp("^"+i.elements.input.val(),"i").test(t.slug)&&!t.disabled)return(i.select(n),!1)})});i.$li.on({mousedown:function(n){n.preventDefault();n.stopPropagation()},click:function(){return i.select(n(this).data("index"),!0),!1}})},handleSystemKeys:function(n){var t=this,i=n.keyCode||n.which;13==i&&n.preventDefault();/^(9|13|27)$/.test(i)&&(n.stopPropagation(),t.select(t.state.selectedIdx,!0))},refresh:function(){var n=this;n.populate();n.activate();n.utils.triggerCallback("Refresh",n)},setOptionsDimensions:function(){var n=this,u=n.elements.items.closest(":visible").children(":hidden").addClass(n.classes.tempshow),t=n.options.maxHeight,i=n.elements.items.outerWidth(),r=n.elements.wrapper.outerWidth()-(i-n.elements.items.width());!n.options.expandToItemText||r>i?n.finalWidth=r:(n.elements.items.css("overflow","scroll"),n.elements.outerWrapper.width(9e4),n.finalWidth=n.elements.items.width(),n.elements.items.css("overflow",""),n.elements.outerWrapper.width(""));n.elements.items.width(n.finalWidth).height()>t&&n.elements.items.height(t);u.removeClass(n.classes.tempshow)},isInViewport:function(){var n=this,t=u.scrollTop(),r=u.height(),i=n.elements.outerWrapper.offset().top,f=n.elements.outerWrapper.outerHeight(),e=i+f+n.itemsHeight<=t+r,o=i-n.itemsHeight>t,s=!e&&o;n.elements.outerWrapper.toggleClass(n.classes.above,s)},detectItemVisibility:function(n){var t=this,i=t.$li.eq(n).outerHeight(),r=t.$li[n].offsetTop,u=t.elements.itemsScroll.scrollTop(),f=r+2*i;t.elements.itemsScroll.scrollTop(f>u+t.itemsHeight?f-t.itemsHeight:u>r-i?r-i:u)},open:function(u){var f=this;f.utils.triggerCallback("BeforeOpen",f);u&&(u.preventDefault(),u.stopPropagation());f.state.enabled&&(f.setOptionsDimensions(),n("."+f.classes.hideselect,"."+f.classes.open).children()[i]("close"),f.state.opened=!0,f.itemsHeight=f.elements.items.outerHeight(),f.itemsInnerHeight=f.elements.items.height(),f.elements.outerWrapper.addClass(f.classes.open),f.elements.input.val(""),u&&"focusin"!==u.type&&f.elements.input.focus(),r.on("click"+t,n.proxy(f.close,f)).on("scroll"+t,n.proxy(f.isInViewport,f)),f.isInViewport(),f.options.preventWindowScroll&&r.on("mousewheel"+t+" DOMMouseScroll"+t,"."+f.classes.scroll,function(t){var i=t.originalEvent,u=n(this).scrollTop(),r=0;"detail"in i&&(r=-1*i.detail);"wheelDelta"in i&&(r=i.wheelDelta);"wheelDeltaY"in i&&(r=i.wheelDeltaY);"deltaY"in i&&(r=-1*i.deltaY);(u===this.scrollHeight-f.itemsInnerHeight&&0>r||0===u&&r>0)&&t.preventDefault()}),f.detectItemVisibility(f.state.selectedIdx),f.utils.triggerCallback("Open",f))},close:function(){var n=this;n.utils.triggerCallback("BeforeClose",n);n.change();r.off(t);n.elements.outerWrapper.removeClass(n.classes.open);n.state.opened=!1;n.utils.triggerCallback("Close",n)},change:function(){var n=this;n.utils.triggerCallback("BeforeChange",n);n.state.currValue!==n.state.selectedIdx&&(n.$element.prop("selectedIndex",n.state.currValue=n.state.selectedIdx).data("value",n.lookupItems[n.state.selectedIdx].text),n.setLabel());n.utils.triggerCallback("Change",n)},select:function(n,t){var i=this;void 0!==n&&(i.lookupItems[n].disabled||(i.$li.filter("[data-index]").removeClass("selected").eq(i.state.selectedIdx=n).addClass("selected"),i.detectItemVisibility(n),t&&i.close()))},destroy:function(n){var r=this;r.state&&r.state.enabled&&(r.elements.items.add(r.elements.wrapper).add(r.elements.input).remove(),n||r.$element.removeData(i).removeData("value"),r.$element.prop("tabindex",r.originalTabindex).off(t).off(r.eventTriggers).unwrap().unwrap(),r.state.enabled=!1)}};n.fn[i]=function(t){return this.each(function(){var r=n.data(this,i);r&&!r.disableOnMobile?"string"==typeof t&&r[t]?r[t]():r.init(t):n.data(this,i,new e(this,t))})};n.fn[i].hooks={add:function(n,t,i){this[n]||(this[n]={});this[n][t]=i},remove:function(n,t){delete this[n][t]}};n.fn[i].defaults={onChange:function(t){n(t).change()},maxHeight:300,keySearchTimeout:500,arrowButtonMarkup:'<b class="button">&#x25be;<\/b>',disableOnMobile:!0,openOnHover:!1,hoverIntentTimeout:500,expandToItemText:!1,responsive:!1,preventWindowScroll:!0,inheritOriginalWidth:!1,allowWrap:!0,customClass:{prefix:i,camelCase:!1},optionsItemBuilder:"{text}",labelBuilder:"{text}"}})