(function(b){b.fn.tokenInput=function(f,a){var e=b.extend({url:f,hintText:"Kezdj el gépelni...",noResultsText:"Nincs találat",searchingText:"Keresés...",searchDelay:300,minChars:1,tokenLimit:null,jsonContainer:null,method:"GET",contentType:"json",queryParam:"q",onResult:null},a);e.classes=b.extend({tokenList:"token-input-list",token:"token-input-token",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token",dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token"},a.classes);return this.each(function(){var c=new b.TokenList(this,e)})};b.TokenList=function(S,T){var N={BEFORE:0,AFTER:1,END:2};var am={BACKSPACE:8,TAB:9,RETURN:13,ESC:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,COMMA:188};var ak=[];var af=0;var P=new b.TokenList.Cache();var X;var a=b('<input type="text">').css({outline:"none"}).focus(function(){if(T.tokenLimit==null||T.tokenLimit!=af){M()}}).blur(function(){Q()}).keydown(function(e){var c;var f;switch(e.keyCode){case am.LEFT:case am.RIGHT:case am.UP:case am.DOWN:if(!b(this).val()){c=Z.prev();f=Z.next();if((c.length&&c.get(0)===ae)||(f.length&&f.get(0)===ae)){if(e.keyCode==am.LEFT||e.keyCode==am.UP){O(b(ae),N.BEFORE)}else{O(b(ae),N.AFTER)}}else{if((e.keyCode==am.LEFT||e.keyCode==am.UP)&&c.length){Y(b(c.get(0)))}else{if((e.keyCode==am.RIGHT||e.keyCode==am.DOWN)&&f.length){Y(b(f.get(0)))}}}}else{var d=null;if(e.keyCode==am.DOWN||e.keyCode==am.RIGHT){d=b(al).next()}else{d=b(al).prev()}if(d.length){ad(d)}return false}break;case am.BACKSPACE:c=Z.prev();if(!b(this).val().length){if(ae){ag(b(ae))}else{if(c.length){Y(b(c.get(0)))}}return false}else{if(b(this).val().length==1){Q()}else{setTimeout(function(){U(false)},5)}}break;case am.TAB:case am.RETURN:case am.COMMA:if(al){an(b(al));return false}break;case am.ESC:Q();return true;default:if(ah(e.keyCode)){setTimeout(function(){U(false)},5)}break}});var L=b(S).hide().focus(function(){a.focus()}).blur(function(){a.blur()});var ae=null;var al=null;var aj=b("<ul />").addClass(T.classes.tokenList).insertAfter(L).click(function(c){var d=ab(c,"li");if(d&&d.get(0)!=Z.get(0)){ac(d);return false}else{a.focus();if(ae){O(b(ae),N.END)}}}).mouseover(function(c){var d=ab(c,"li");if(d&&ae!==this){d.addClass(T.classes.highlightedToken)}}).mouseout(function(c){var d=ab(c,"li");if(d&&ae!==this){d.removeClass(T.classes.highlightedToken)}}).mousedown(function(c){var d=ab(c,"li");if(d){return false}});var W=b("<div>").addClass(T.classes.dropdown).insertAfter(aj).hide();var Z=b("<li />").addClass(T.classes.inputToken).appendTo(aj).append(a);R();function R(){li_data=T.prePopulate;if(li_data&&li_data.length){for(var e in li_data){var c=b("<li><p>"+li_data[e].name+"</p> </li>").addClass(T.classes.token).insertBefore(Z);b("<span>x</span>").addClass(T.classes.tokenDelete).appendTo(c).click(function(){ag(b(this).parent());return false});b.data(c.get(0),"tokeninput",{id:li_data[e].id,name:li_data[e].name});a.val("").focus();Q();var d=li_data[e].id+",";L.val(L.val()+d)}}}function ah(c){if((c>=48&&c<=90)||(c>=96&&c<=111)||(c>=186&&c<=192)||(c>=219&&c<=222)){return true}else{return false}}function ab(e,c){var d=b(e.target);var f=null;if(d.is(c)){f=d}else{if(d.parent(c).length){f=d.parent(c+":first")}}return f}function J(c,e){var d=b("<li><p>"+e+"</p> </li>").addClass(T.classes.token).insertBefore(Z);b("<span>x</span>").addClass(T.classes.tokenDelete).appendTo(d).click(function(){ag(b(this).parent());return false});b.data(d.get(0),"tokeninput",{id:c,name:e});return d}function an(f){var c=b.data(f.get(0),"tokeninput");var d=J(c.id,c.name);a.val("").focus();Q();var e=c.id+",";L.val(L.val()+e);af++;if(T.tokenLimit!=null&&T.tokenLimit>=af){a.hide();Q()}}function Y(c){c.addClass(T.classes.selectedToken);ae=c.get(0);a.val("");Q()}function O(c,d){c.removeClass(T.classes.selectedToken);ae=null;if(d==N.BEFORE){Z.insertBefore(c)}else{if(d==N.AFTER){Z.insertAfter(c)}else{Z.appendTo(aj)}}a.focus()}function ac(c){if(ae==c.get(0)){O(c,N.END)}else{if(ae){O(b(ae),N.END)}Y(c)}}function ag(e){var d=b.data(e.get(0),"tokeninput");e.remove();ae=null;a.focus();var c=L.val();var g=c.indexOf(d.id+",");var f=c.indexOf(",",g)+1;if(f>=c.length){L.val(c.slice(0,g))}else{L.val(c.slice(0,g)+c.slice(f,c.length))}af--;if(T.tokenLimit!=null){a.show().val("").focus()}}function Q(){W.hide().empty();al=null}function ai(){W.html("<p>"+T.searchingText+"</p>").show()}function M(){W.html("<p>"+T.hintText+"</p>").show()}function V(c,d){return c.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+d+")(?![^<>]*>)(?![^&;]+;)","gi"),"<b>$1</b>")}function I(c,e){if(e.length){W.empty();var d=b("<ul>").appendTo(W).mouseover(function(h){ad(ab(h,"li"))}).click(function(h){an(ab(h,"li"))}).mousedown(function(h){return false}).hide();for(var f in e){if(e.hasOwnProperty(f)){var g=b("<li>"+V(e[f].name,c)+"</li>").appendTo(d);if(f%2){g.addClass(T.classes.dropdownItem)}else{g.addClass(T.classes.dropdownItem2)}if(f==0){ad(g)}b.data(g.get(0),"tokeninput",{id:e[f].id,name:e[f].name})}}W.show();d.slideDown("fast")}else{W.html("<p>"+T.noResultsText+"</p>").show()}}function ad(c){if(c){if(al){aa(b(al))}c.addClass(T.classes.selectedDropdownItem);al=c.get(0)}}function aa(c){c.removeClass(T.classes.selectedDropdownItem);al=null}function U(d){var c=a.val().toLowerCase();if(c&&c.length){if(ae){O(b(ae),N.AFTER)}if(c.length>=T.minChars){ai();if(d){K(c)}else{clearTimeout(X);X=setTimeout(function(){K(c)},T.searchDelay)}}else{Q()}}}function K(e){var f=P.get(e);if(f){I(e,f)}else{var c=T.url.indexOf("?")<0?"?":"&";var d=function(g){if(b.isFunction(T.onResult)){g=T.onResult.call(this,g)}P.add(e,T.jsonContainer?g[T.jsonContainer]:g);I(e,T.jsonContainer?g[T.jsonContainer]:g)};if(T.method=="POST"){b.post(T.url+c+T.queryParam+"="+e,{},d,T.contentType)}else{b.get(T.url+c+T.queryParam+"="+e,{},d,T.contentType)}}}};b.TokenList.Cache=function(j){var h=b.extend({max_size:50},j);var g={};var i=0;var a=function(){g={};i=0};this.add=function(c,d){if(i>h.max_size){a()}if(!g[c]){i++}g[c]=d};this.get=function(c){return g[c]}}})(jQuery);
