!function(e,t){var n=8,o=9,s=13,i=27,a=38,r=40,d=188;e.tokenize=function(t){null==t&&(t=e.fn.tokenize.defaults),this.options=t},e.extend(e.tokenize.prototype,{init:function(t){var n=this;this.select=t.attr("multiple","multiple").css({margin:0,padding:0,border:0}).hide(),this.container=e("
").attr("class",this.select.attr("class")).addClass("Tokenize"),1==this.options.maxElements&&this.container.addClass("OnlyOne"),this.dropdown=e("").addClass("Dropdown"),this.tokensContainer=e("").addClass("TokensContainer"),this.searchToken=e("").addClass("TokenSearch").appendTo(this.tokensContainer),this.searchInput=e('').appendTo(this.searchToken),this.options.searchMaxLength>0&&this.searchInput.attr("maxlength",this.options.searchMaxLength),this.container.append(this.tokensContainer).append(this.dropdown).insertAfter(this.select),this.tokensContainer.on("click",function(e){e.stopImmediatePropagation(),n.searchInput.get(0).focus(),n.updatePlaceholder(),n.dropdown.is(":hidden")&&""!=n.searchInput.val()&&n.search()}),this.searchInput.on("focus click",function(){n.options.displayDropdownOnFocus&&"select"==n.options.datas&&n.search()}),this.searchInput.on("keydown",function(e){n.resizeSearchInput(),n.keydown(e)}),this.searchInput.on("keyup",function(e){n.keyup(e)}),this.searchInput.on("paste",function(){setTimeout(function(){n.resizeSearchInput()},10),setTimeout(function(){var t=n.searchInput.val().split(",");t.length>1&&e.each(t,function(e,t){n.tokenAdd(t.trim(),"")})},20)}),e(document).on("click",function(){n.dropdownHide(),1==n.options.maxElements&&n.searchInput.val()&&n.tokenAdd(n.searchInput.val(),"")}),this.resizeSearchInput(),e("option:selected",this.select).each(function(){n.tokenAdd(e(this).attr("value"),e(this).html(),!0)}),this.updatePlaceholder()},updatePlaceholder:function(){0!=this.options.placeholder&&(null==this.placeholder&&(this.placeholder=e("").addClass("Placeholder").html(this.options.placeholder),this.placeholder.insertBefore(e("li:first-child",this.tokensContainer))),0==this.searchInput.val().length&&0==e("li.Token",this.tokensContainer).length?this.placeholder.show():this.placeholder.hide())},dropdownShow:function(){this.dropdown.show()},dropdownPrev:function(){e("li.Hover",this.dropdown).length>0?e("li.Hover",this.dropdown).is("li:first-child")?(e("li.Hover",this.dropdown).removeClass("Hover"),e("li:last-child",this.dropdown).addClass("Hover")):e("li.Hover",this.dropdown).removeClass("Hover").prev().addClass("Hover"):e("li:first",this.dropdown).addClass("Hover")},dropdownNext:function(){e("li.Hover",this.dropdown).length>0?e("li.Hover",this.dropdown).is("li:last-child")?(e("li.Hover",this.dropdown).removeClass("Hover"),e("li:first-child",this.dropdown).addClass("Hover")):e("li.Hover",this.dropdown).removeClass("Hover").next().addClass("Hover"):e("li:first",this.dropdown).addClass("Hover")},dropdownAddItem:function(t,n,o){if(null==o&&(o=n),e('li[data-value="'+t+'"]',this.tokensContainer).length)return!1;var s=this,i=e("").attr("data-value",t).attr("data-text",n).html(o).on("click",function(t){t.stopImmediatePropagation(),s.tokenAdd(e(this).attr("data-value"),e(this).attr("data-text"))}).on("mouseover",function(){e(this).addClass("Hover")}).on("mouseout",function(){e("li",s.dropdown).removeClass("Hover")});return this.dropdown.append(i),!0},dropdownHide:function(){this.dropdownReset(),this.dropdown.hide()},dropdownReset:function(){this.dropdown.html("")},resizeSearchInput:function(){this.searchInput.attr("size",this.searchInput.val().length>1?this.searchInput.val().length:""),this.updatePlaceholder()},resetSearchInput:function(){this.searchInput.val(""),this.resizeSearchInput()},resetPendingTokens:function(){e("li.PendingDelete",this.tokensContainer).removeClass("PendingDelete")},keydown:function(t){if(t.keyCode==d)t.preventDefault(),this.tokenAdd(this.searchInput.val(),"");else switch(t.keyCode){case n:0==this.searchInput.val().length&&(t.preventDefault(),e("li.Token.PendingDelete",this.tokensContainer).length?this.tokenRemove(e("li.Token.PendingDelete").attr("data-value")):e("li.Token:last",this.tokensContainer).addClass("PendingDelete"),this.dropdownHide());break;case o:case s:if(e("li.Hover",this.dropdown).length){var h=e("li.Hover",this.dropdown);t.preventDefault(),this.tokenAdd(h.attr("data-value"),h.attr("data-text"))}else this.searchInput.val()&&(t.preventDefault(),this.tokenAdd(this.searchInput.val(),""));this.resetPendingTokens();break;case i:this.resetSearchInput(),this.dropdownHide(),this.resetPendingTokens();break;case a:t.preventDefault(),this.dropdownPrev();break;case r:t.preventDefault(),this.dropdownNext();break;default:this.resetPendingTokens()}},keyup:function(e){if(this.updatePlaceholder(),e.keyCode!=this.options.validator)switch(e.keyCode){case o:case s:case i:case a:case r:break;case n:this.searchInput.val()?this.search():this.dropdownHide();break;default:this.searchInput.val()&&this.search()}},search:function(){var t=this,n=1;if(this.options.maxElements>0&&e("li.Token",this.tokensContainer).length>=this.options.maxElements)return!1;if("select"==this.options.datas){var o=!1,s=new RegExp(this.searchInput.val().replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");this.dropdownReset(),e("option",this.select).not(":selected").each(function(){if(!(n<=t.options.nbDropdownElements))return!1;s.test(e(this).html())&&(t.dropdownAddItem(e(this).attr("value"),e(this).html()),o=!0,n++)}),o?(e("li:first",this.dropdown).addClass("Hover"),this.dropdownShow()):this.dropdownHide()}else e.ajax({url:this.options.datas,data:this.options.searchParam+"="+this.searchInput.val(),dataType:this.options.dataType,success:function(o){if(o&&(t.dropdownReset(),e.each(o,function(e,o){if(!(n<=t.options.nbDropdownElements))return!1;var s=void 0;o[t.options.htmlField]&&(s=o[t.options.htmlField]),t.dropdownAddItem(o[t.options.valueField],o[t.options.textField],s),n++}),e("li",t.dropdown).length))return e("li:first",t.dropdown).addClass("Hover"),t.dropdownShow(),!0;t.dropdownHide()},error:function(e,t){console.log("Error : "+t)}})},tokenAdd:function(t,n,o){if(null==t||""==t)return!1;if(null!=n&&""!=n||(n=t),null==o&&(o=!1),this.options.maxElements>0&&e("li.Token",this.tokensContainer).length>=this.options.maxElements)return this.resetSearchInput(),!1;var s=this,i=e("").addClass("Close").html("×").on("click",function(e){e.stopImmediatePropagation(),s.tokenRemove(t)});if(e('option[value="'+t+'"]',this.select).length)e('option[value="'+t+'"]',this.select).attr("selected","selected");else{if(!this.options.newElements)return this.resetSearchInput(),!1;var a=e("").attr("selected","selected").attr("value",t).attr("data-type","custom").html(n);this.select.append(a)}return!(e('li.Token[data-value="'+t+'"]',this.tokensContainer).length>0)&&(e("").addClass("Token").attr("data-value",t).append(""+n+"").prepend(i).insertBefore(this.searchToken),o||this.options.onAddToken(t,n),this.resetSearchInput(),this.dropdownHide(),!0)},tokenRemove:function(t){var n=e('option[value="'+t+'"]',this.select);"custom"==n.attr("data-type")?n.remove():n.removeAttr("selected"),e('li.Token[data-value="'+t+'"]',this.tokensContainer).remove(),this.options.onRemoveToken(t),this.resizeSearchInput(),this.dropdownHide()},clear:function(){var t=this;e("li.Token",this.tokensContainer).each(function(){t.tokenRemove(e(this).attr("data-value"))}),this.options.onClear()}}),e.fn.tokenize=function(t){return null==t&&(t={}),this.each(function(){var n=new e.tokenize(e.extend({},e.fn.tokenize.defaults,t));n.init(e(this)),e(this).data("tokenize",n)}),this},e.fn.tokenize.defaults={datas:"select",placeholder:!1,searchParam:"search",searchMaxLength:0,newElements:!0,nbDropdownElements:10,displayDropdownOnFocus:!1,maxElements:0,dataType:"json",valueField:"value",textField:"text",htmlField:"html",onAddToken:function(e,t){},onRemoveToken:function(e){},onClear:function(){}}}(jQuery);