!function($){var keys_tab=9,keys_enter=13,keys_esc=27,keys_left=37,keys_up=38,keys_right=39,keys_down=40,defaults={throttle:300,renderItem:defaultRenderItem,noResults:defaultNoResults,regexpMatcher:defaultRegexpMatcher};function selectBased($select,$list,regexpMatcher,appendItemFn){var dummyRegexp={test:function(){return!0}},options=$select.find("option").map(function(){return itemFromOption($(this))}).get();function filter(term){var regexp=""===term?dummyRegexp:regexpMatcher(term);$list.empty(),$.each(options,function(ii,item){regexp.test(item.label)&&appendItemFn(item,term)})}function itemFromOption($option){return{value:$option.attr("value"),label:$option.text()}}function newTerm(term,callback){filter(term),callback&&callback()}return{load:newTerm,check:function(){}}}function infiniteScroll($list,loadFn,appendItemFn){var state={id:0,term:"",page:0,loading:!1,exhausted:!1,callback:void 0};function load(){if(!state.loading&&!state.exhausted){state.loading=!0,$list.addClass("loading");var stateId=state.id;loadFn(state.term,state.page,function(items){stateId===state.id&&(0==state.page&&$list.empty(),state.page++,items&&0!==items.length||(state.exhausted=!0),$.each(items,function(ii,item){appendItemFn(item,state.term)}),state.loading=!1,maybeLoadMore()||(state.callback&&state.callback(),state.callback=void 0,$list.removeClass("loading")))})}}function maybeLoadMore(){if(state.exhausted)return!1;var $lastChild=$list.children(":last");if(0===$lastChild.size())return load(),!0;var lastChildTop,lastChildVisible=$lastChild.offset().top-$list.offset().top<$list.outerHeight();return lastChildVisible&&load(),lastChildVisible}function newTerm(term,callback){state={id:state.id+1,term:term,page:0,loading:!1,exhausted:!1,callback:callback},load()}return $list.scroll(maybeLoadMore),{load:newTerm,check:maybeLoadMore}}function callInstance(fnName){return function(){var args=[].slice.call(arguments);return this.each(function(){var fn=$(this).data(fnName);fn&&fn.apply(void 0,args)})}}function throttled(ms,callback){if(ms<=0)return callback;var timeout=void 0;return function(){timeout&&clearTimeout(timeout),timeout=setTimeout(callback,ms)}}function defaultRenderItem(item,term){return null==item||null==item?"":"string"===$.type(item)?item:item.label?item.label:item.toString?item.toString():item}function defaultNoResults(term){return"No results for '"+(term||"")+"'"}function defaultRegexpMatcher(term){return new RegExp("(^|\\s)"+term,"i")}function navigable($list){var skipMouseEvent=!1;function next(){var $next=current().next("li");set($next)&&ensureBottomVisible($next)}function prev(){var $prev=current().prev("li");set($prev)&&ensureTopVisible($prev)}function current(){return $list.find(".current")}function ensure(){0===current().size()&&$list.find("li:first").addClass("current")}function set($item){return 0!==$item.size()&&(current().removeClass("current"),$item.addClass("current"),!0)}function onMouseEnter(){skipMouseEvent?skipMouseEvent=!1:set($(this))}function itemTop($item){return $item.offset().top-$list.offset().top}function ensureTopVisible($item){var scrollTop=$list.scrollTop(),offset=itemTop($item)+scrollTop;scrollTop>offset&&moveScroll(offset)}function ensureBottomVisible($item){var scrollBottom=$list.height(),itemBottom=itemTop($item)+$item.outerHeight();scrollBottom element must have a parent");var $select=$(this).hide().data("zelectItem",selectItem).data("refreshItem",refreshItem).data("reset",reset),$zelect=$("
").addClass("zelect"),$selected=$("
").addClass("zelected"),$dropdown=$("
").addClass("dropdown").hide(),$noResults=$("
").addClass("no-results"),$search=$('').addClass("zearch"),$list=$("
    "),listNavigator=navigable($list),itemHandler=opts.loader?infiniteScroll($list,opts.loader,appendItem):selectBased($select,$list,opts.regexpMatcher,appendItem),filter=throttled(opts.throttle,function(){var term=searchTerm();itemHandler.load(term,function(){checkResults(term)})});function selectItem(item,triggerChange){renderContent($selected,opts.renderItem(item)).removeClass("placeholder"),hide(),item&&void 0!==item.value&&$select.val(item.value),$select.data("zelected",item),null!=triggerChange&&!0!==triggerChange||$select.trigger("change",item)}function refreshItem(item,identityCheckFn){var eq=function(a,b){return identityCheckFn(a)===identityCheckFn(b)};eq($select.data("zelected"),item)&&(renderContent($selected,opts.renderItem(item)),$select.data("zelected",item));var term=searchTerm();$list.find("li").each(function(){eq($(this).data("zelect-item"),item)&&renderContent($(this),opts.renderItem(item,term)).data("zelect-item",item)})}function reset(){$search.val(""),itemHandler.load("",function(){initialSelection(!1)})}function toggle(){$dropdown.toggle(),$zelect.toggleClass("open"),$dropdown.is(":visible")&&($search.focus().select(),itemHandler.check(),listNavigator.ensure())}function hide(){$dropdown.hide(),$zelect.removeClass("open")}function renderContent($obj,content){return $obj[htmlOrText(content)](content),$obj;function htmlOrText(x){return x instanceof jQuery||null!=x.nodeType?"html":"text"}}function appendItem(item,term){$list.append(renderContent($("
  1. ").data("zelect-item",item),opts.renderItem(item,term)))}function checkResults(term){0===$list.children().size()?$noResults.html(opts.noResults(term)).show():($noResults.hide(),listNavigator.ensure())}function searchTerm(){return $.trim($search.val())}function initialSelection(useOptsInitial){var $s=$select.find('option[selected="selected"]');if(useOptsInitial&&opts.initial)selectItem(opts.initial);else if(!opts.loader&&$s.size()>0)selectItem($list.children().eq($s.index()).data("zelect-item"));else if(opts.placeholder)$selected.html(opts.placeholder).addClass("placeholder");else{var first=$list.find(":first").data("zelect-item");void 0!==first?selectItem(first):$selected.html(opts.noResults()).addClass("placeholder")}checkResults()}$search.keyup(function(e){switch(e.which){case keys_esc:return void hide();case keys_up:case keys_down:return;case keys_enter:var curr=listNavigator.current().data("zelect-item");return void(curr&&selectItem(curr));default:filter()}}),$search.keydown(function(e){switch(e.which){case keys_tab:return e.preventDefault(),void hide();case keys_up:return e.preventDefault(),void listNavigator.prev();case keys_down:return e.preventDefault(),void listNavigator.next()}}),$list.on("click","li",function(){selectItem($(this).data("zelect-item"))}),$zelect.mouseenter(function(){$zelect.addClass("hover")}),$zelect.mouseleave(function(){$zelect.removeClass("hover")}),$zelect.attr("tabindex",$select.attr("tabindex")),$zelect.blur(function(){$zelect.hasClass("hover")||hide()}),$search.blur(function(){$zelect.hasClass("hover")||hide()}),$selected.click(toggle),$zelect.insertAfter($select).append($selected).append($dropdown.append($("
    ").addClass("zearch-container").append($search).append($noResults)).append($list)),itemHandler.load($search.val(),function(){initialSelection(!0),$select.trigger("ready")})})},$.fn.zelectItem=callInstance("zelectItem"),$.fn.refreshZelectItem=callInstance("refreshItem"),$.fn.resetZelect=callInstance("reset")}(jQuery);