(function(a){a.TokenList=function(c,w){this.addToken=function(aa,Z){if(!s(Z)&&Z!=""){q(aa,Z)}};this.getInputBox=function(){return t};this.setText=function(Z){if(t.val()==S.infoText){B()}D(Z)};this.setAddParams=function(Z){S.addParams=Z};this.startSearch=function(Z){l=new a.TokenList.Cache();u(true)};this.getText=function(){if(S.infoText!=""){if(t.val()==S.infoText){return""}}return t.val()};var S=a.extend({url:"",hintText:"Type in a search term",noResultsText:"No results",infoText:"",searchingText:"Searching...",searchDelay:500,minChars:3,useArrowKeysToNavigate:false,manuellInput:false,maxTokenLength:20,useLocalSearch:false,localSearchDataObject:null,prePopulate:null,tokenLimit:10,initTokenCount:0,resultLimit:4,jsonContainer:null,additionalTextBoxName:"additionalText",method:"POST",contentType:"json",queryParam:"q",addParams:"",onResult:null,clickTriggerFunction:null,disableTokenizing:false,preValue:"",hideDropDownAfterAdd:false,debug:false},w);S.classes=a.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",infoText:"info-text"},w.classes);var I={BEFORE:0,AFTER:1,END:2};var O={BACKSPACE:8,TAB:9,RETURN:13,ESC:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,COMMA:188};var y=[];var P=null;var p=0;var l=new a.TokenList.Cache();var k=(navigator.userAgent.match(/MSIE/i));var g=(navigator.userAgent.match(/safari/i));if(S.useLocalSearch){var E=new a.TokenList.LocalSearch({localSearchDataObject:S.localSearchDataObject})}var N;var Y=a.manageAjax.create("tokenInputAjaxRequests",{queue:"clear",abortOld:true,preventDoubbleRequests:true,cacheResponse:false,maxRequests:3});var t=a('<input autocomplete="off" name="'+S.additionalTextBoxName+'" id="'+S.additionalTextBoxName+'" type="text">').css({outline:"none"}).focus(function(){if(S.tokenLimit==null||S.tokenLimit!=p){if(S.disableTokenizing==true){if(S.infoText!=""){if(t.val()==S.infoText){B()}}}else{B()}}}).blur(function(){if(k){if(S.manuellInput==true){A();if(S.disableTokenizing==true){if(t.val()==""){F()}}else{F()}}}else{A();if(S.disableTokenizing==true){if(t.val()==""){F()}}else{F()}}}).keydown(function(ab){var ad;var aa;switch(ab.keyCode){case O.LEFT:case O.RIGHT:case O.UP:case O.DOWN:if(S.useArrowKeysToNavigate==true&&V.html()==""){return true}if(!a(this).val()){ad=i.prev();aa=i.next();if((ad.length&&ad.get(0)===v)||(aa.length&&aa.get(0)===v)){if(ab.keyCode==O.LEFT||ab.keyCode==O.UP){C(a(v),I.BEFORE)}else{C(a(v),I.AFTER)}}else{if((ab.keyCode==O.LEFT||ab.keyCode==O.UP)&&ad.length){T(a(ad.get(0)))}else{if((ab.keyCode==O.RIGHT||ab.keyCode==O.DOWN)&&aa.length){T(a(aa.get(0)))}}}}else{var ac=null;if(ab.keyCode==O.DOWN||ab.keyCode==O.RIGHT){ac=a(M).next()}else{ac=a(M).prev()}if(ac.length){W(ac)}if(P){W(P);P=null}return false}break;case O.BACKSPACE:ad=i.prev();if(!a(this).val().length){if(v){e(a(v))}else{if(ad.length){T(a(ad.get(0)))}}return false}else{if(a(this).val().length==1){A()}else{setTimeout(function(){u(false)},5)}}break;case O.TAB:case O.RETURN:case O.COMMA:if(M){if(S.disableTokenizing==true){J(a(M));G(a(M))}else{if(!m(a(M))){J(a(M))}}return false}else{if(S.disableTokenizing==true){D(t.val())}else{if(!s(t.val())&&S.manuellInput==true&&t.val()!=""){q(t.val(),t.val())}}}return false;break;case O.ESC:var Z=t.val();A();if(S.manuellInput==true){t.val(Z)}return true;default:if(Q(ab.keyCode)){setTimeout(function(){u(false)},5)}break}});var x=a(c).hide().focus(function(){t.focus()}).blur(function(){t.blur()});var v=null;var M=null;var j=a('<ul style="position:relative"/>').append(a('<img src="/public/images/ajax-loader-s-white.gif" id="tokenSearchLoadingIndicator'+S.additionalTextBoxName+'" style="display:none;position:absolute;right:8px;bottom:7px;z-index:10000" />')).addClass(S.classes.tokenList).insertAfter(x).click(function(aa){var Z=K(aa,"li");if(Z&&Z.get(0)!=i.get(0)){U(Z);return false}else{t.focus();if(v){C(a(v),I.END)}}}).mouseover(function(aa){var Z=K(aa,"li");if(Z&&v!==this){Z.addClass(S.classes.highlightedToken)}}).mouseout(function(aa){var Z=K(aa,"li");if(Z&&v!==this){Z.removeClass(S.classes.highlightedToken)}}).mousedown(function(aa){if(S.disableTokenizing==true){}else{var Z=K(aa,"li");if(Z){return false}}});var V=a("<div>").addClass(S.classes.dropdown).insertAfter(j).hide();var i=a("<li />").addClass(S.classes.inputToken).appendTo(j).append(t);R();if(S.infoText!=""){t.val(S.infoText);t.addClass(S.classes.infoText)}if(S.disableTokenizing==true){if(S.preValue!=""){t.val(S.preValue);t.removeClass(S.classes.infoText)}}function R(){li_data=S.prePopulate;if(li_data&&li_data.length){for(var Z in li_data){var ab=a("<li><p>"+li_data[Z].name+"</p> </li>").addClass(S.classes.token).insertBefore(i);a("<span>x</span>").addClass(S.classes.tokenDelete).appendTo(ab).click(function(){e(a(this).parent());return false});a.data(ab.get(0),"tokeninput",{id:li_data[Z].id,name:li_data[Z].name});t.val("").focus();A();var aa=li_data[Z].id+",";x.val(x.val()+aa)}}}function Q(Z){if((Z>=48&&Z<=90)||(Z>=96&&Z<=111)||(Z>=186&&Z<=192)||(Z>=219&&Z<=222)){return true}else{return false}}function X(){p++}function H(){p--}function K(aa,ac){var ab=a(aa.target);var Z=null;if(ab.is(ac)){Z=ab}else{if(ab.parent(ac).length){Z=ab.parent(ac+":first")}}return Z}function d(ab,Z){if(this.maxTokenLength!=null){Z=Z.substring(0,this.maxTokenLength)}var aa=a("<li><p>"+Z+"</p></li>").addClass(S.classes.token).insertBefore(i);a("<span>x</span>").addClass(S.classes.tokenDelete).appendTo(aa).click(function(){e(a(this).parent());return false});a.data(aa.get(0),"tokeninput",{id:ab,name:Z});return aa}function q(ac,Z){if(S.clickTriggerFunction!=null){S.clickTriggerFunction(li_data.id,li_data.name)}else{if(this.maxTokenLength!=null){Z=Z.substring(0,this.maxTokenLength)}var ab=d(ac,Z);t.val("").focus();if(S.hideDropDownAfterAdd==true){A()}else{}var aa=ac+",";x.val(x.val()+aa);X();if(S.tokenLimit!=null&&S.tokenLimit<=p){t.hide();A()}}}function m(Z){if(typeof Z=="undefined"||Z==null){return true}var aa=false;var ab=a.data(Z.get(0),"tokeninput");a("."+S.classes.tokenList).find("."+S.classes.token).each(function(){if(ab.name==a(this).find("p").html()){aa=true;a(this).fadeOut(80).fadeIn(80).fadeOut(80).fadeIn(80)}});if(aa){return true}return false}function s(aa){var Z=false;a("."+S.classes.tokenList).find("."+S.classes.token).each(function(){if(aa==a(this).find("p").html()){Z=true;a(this).fadeOut(80).fadeIn(80).fadeOut(80).fadeIn(80)}});if(Z){return true}return false}function G(Z){var aa=a.data(Z.get(0),"tokeninput");D(aa.name);a(t).trigger("add_simple_text")}function D(Z){t.val(Z);X();if(S.tokenLimit!=null&&S.tokenLimit<=p){A()}if(S.hideDropDownAfterAdd==true){A()}}function J(Z){var ac=a.data(Z.get(0),"tokeninput");if(S.clickTriggerFunction!=null){S.clickTriggerFunction(ac.id,ac.name)}else{var ab=d(ac.id,ac.name);t.val("").focus();if(S.hideDropDownAfterAdd==true){A()}if(k){A()}var aa=ac.id+",";x.val(x.val()+aa);X();if(S.tokenLimit!=null&&S.tokenLimit<=p){t.hide();A()}}}function T(Z){Z.addClass(S.classes.selectedToken);v=Z.get(0);t.val("");A()}function C(aa,Z){aa.removeClass(S.classes.selectedToken);v=null;if(Z==I.BEFORE){i.insertBefore(aa)}else{if(Z==I.AFTER){i.insertAfter(aa)}else{i.appendTo(j)}}t.focus()}function U(Z){if(v==Z.get(0)){C(Z,I.END)}else{if(v){C(a(v),I.END)}T(Z)}}function e(aa){var ab=a.data(aa.get(0),"tokeninput");aa.remove();v=null;t.focus();H();var ac=x.val();var ad=ac.indexOf(ab.id+",");var Z=ac.indexOf(",",ad)+1;if(Z>=ac.length){x.val(ac.slice(0,ad))}else{x.val(ac.slice(0,ad)+ac.slice(Z,ac.length))}H();if(S.tokenLimit!=null){t.show().val("").focus()}}function A(){if(S.debug==true){return}V.hide().empty();M=null}function h(){V.html("<p class='dropDownSearchingContainer'>"+S.searchingText+"</p>").show()}function f(){V.html("<p class='dropDownHintContainer'>"+S.hintText+"</p>").show()}function F(){if(S.infoText!=""){t.val(S.infoText);t.addClass(S.classes.infoText)}}function B(){if(S.infoText!=""){t.val("");t.removeClass(S.classes.infoText)}}function o(aa,Z){return aa}function r(Z){if(S.clickTriggerFunction!=null){var aa=a.data(Z.get(0),"tokeninput");S.clickTriggerFunction(aa.id,aa.name)}}function L(ac,aa){M=null;if(aa.length){V.empty();var ab=a("<ul class='dropDownResultList'>").appendTo(V).mouseover(function(ae){W(K(ae,"li"))}).click(function(ae){if(!k){if(S.disableTokenizing==true){r(K(ae,"li"));G(K(ae,"li"))}else{if(!m(K(ae,"li"))){J(K(ae,"li"))}}}}).mousedown(function(ae){if(k){if(S.disableTokenizing==true){r(K(ae,"li"));G(K(ae,"li"))}else{if(!m(K(ae,"li"))){J(K(ae,"li"))}}}return false}).hide();for(var Z in aa){if(aa.hasOwnProperty(Z)){if(aa[Z].type=="plain"){var ad=a("<li><span class='resultPlain'>"+aa[Z].name+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="topic"){var ad=a("<li><span class='addicon'>+</span><span class='resultTopic'>"+aa[Z].name+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="artist"){var ad=a("<li class='tokenSearchResultArtist'><span class='resultImage'><img class='shadow_30' src='"+aa[Z].image+"' /></span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span><span class='resultTitle2'>"+aa[Z].name2+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="label"){var ad=a("<li class='tokenSearchResultLabel'><span class='resultImage'><img class='shadow_30' src='"+aa[Z].image+"' /></span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span><span class='resultTitle2'>"+aa[Z].name2+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="release"){var ad=a("<li class='tokenSearchResultRelease'><span class='resultImage'><img class='shadow_30' src='"+aa[Z].image+"' /></span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span><span class='resultTitle2'>"+aa[Z].name2+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="track"){var ad=a("<li class='tokenSearchResultTrack'><span class='resultImage'><img class='shadow_30' src='"+aa[Z].image+"' /></span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span><span class='resultTitle2'>"+aa[Z].name2+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="playlist"){var ad=a("<li class='tokenSearchResultPlaylist'><span class='resultImage'><img class='shadow_30' src='"+aa[Z].image+"' /></span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span><span class='resultTitle2'>"+aa[Z].name2+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="friend"){var ad=a("<li class='succestFriend'><span class='resultImage'><img class='shadow_30' src='"+aa[Z].image+"' /></span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="tag"){var ad=a("<li><span class='addicon'>+</span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span></li>").appendTo(ab)}else{if(aa[Z].type=="user"){var ad=a("<li><span class='addicon'>+</span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span></li>").appendTo(ab)}else{var ad=a("<li><span class='addicon'>+</span><span class='resultImage'><img width='20' src='"+aa[Z].image+"' /></span><span class='resultTitle'>"+o(aa[Z].name,ac)+"</span><span class='resultSubTitle'>"+aa[Z].subTitle+"</span></li>").appendTo(ab)}}}}}}}}}}if(Z%2){ad.addClass(S.classes.dropdownItem)}else{ad.addClass(S.classes.dropdownItem2)}if(Z==0){P=ad}a.data(ad.get(0),"tokeninput",{id:aa[Z].id,name:aa[Z].name})}}V.show();ab.show("fast")}else{V.html("<p class='dropDownNoResultsContainer'>"+S.noResultsText+"</p>").show()}}function W(Z){if(Z){if(M){b(a(M))}Z.addClass(S.classes.selectedDropdownItem);M=Z.get(0)}}function b(Z){Z.removeClass(S.classes.selectedDropdownItem);M=null}function u(Z){var aa=t.val().toLowerCase();if(aa&&aa.length){if(v){C(a(v),I.AFTER)}if(aa.length>=S.minChars){h();if(Z){if(S.useLocalSearch){z(aa)}else{n(aa)}}else{clearTimeout(N);if(S.useLocalSearch){N=setTimeout(function(){z(aa)},S.searchDelay)}else{N=setTimeout(function(){n(aa)},S.searchDelay)}}}else{A()}}}function n(aa){var Z=l.get(aa);if(Z){L(aa,Z)}else{var ac=S.url.indexOf("?")<0?"?":"&";var ab=function(ad){a("#tokenSearchLoadingIndicator"+S.additionalTextBoxName).hide();if(a.isFunction(S.onResult)){ad=S.onResult.call(this,ad)}l.add(aa,S.jsonContainer?ad[S.jsonContainer]:ad);L(aa,S.jsonContainer?ad[S.jsonContainer]:ad)};a("#tokenSearchLoadingIndicator"+S.additionalTextBoxName).show();a.manageAjax.add("tokenInputAjaxRequests",{type:S.method,success:ab,error:function(af,ad,ae){a("#tokenSearchLoadingIndicator"+S.additionalTextBoxName).hide()},url:S.url+ac+S.queryParam+"="+aa+"&resultLimit="+S.resultLimit+"&"+S.addParams,dataType:S.contentType})}}function z(ab){var Z=l.get(ab);if(Z){L(ab,Z)}else{var ac=S.url.indexOf("?")<0?"?":"&";var aa=E.find(ab);if(a.isFunction(S.onResult)){aa=S.onResult.call(this,aa)}l.add(ab,S.jsonContainer?aa[S.jsonContainer]:aa);L(ab,S.jsonContainer?aa[S.jsonContainer]:aa)}}};a.TokenList.Cache=function(c){var e=a.extend({max_size:50},c);var f={};var d=0;var b=function(){f={};d=0};this.add=function(h,g){if(d>e.max_size){b()}if(!f[h]){d++}f[h]=g};this.get=function(g){return f[g]}};a.TokenList.LocalSearch=function(b){var d=a.extend({max_size:50},b);var f={};var c=0;var e=b.localSearchDataObject;this.find=function(j){var h=new Array();for(var g in e){var k=e[g].name;if(k.search(new RegExp(j,"gi"))==-1){}else{h.push(e[g])}}return h}}})(jQuery);