(function($){var o=[];window.setGlobalTags=function(a){o=getTags(a)};function getTags(a){var b,i,goodTags=[];for(i=0;i<a.length;i++){b=a[i];if(typeof a[i]=='object'){b=a[i].tag}goodTags.push(b.toLowerCase())}return goodTags}$.fn.tagSuggest=function(l){var n={'matchClass':'tagMatches','tagContainer':'span','tagWrap':'span','sort':true,'tags':null,'url':null,'delay':0,'separator':' '};var i,tag,userTags=[],settings=$.extend({},n,l);if(settings.tags){userTags=getTags(settings.tags)}else{userTags=o}return this.each(function(){var d=$(this);var e=this;var f,fromTab=false;var g=false;var h=[];var j={"position":0,tag:""};var k=document.createElement(settings.tagContainer);function showSuggestionsDelayed(a,b){if(settings.delay){if(e.timer)clearTimeout(e.timer);e.timer=setTimeout(function(){showSuggestions(a,b)},settings.delay)}else{showSuggestions(a,b)}}function showSuggestions(a,b){h=a.value.split(settings.separator);f=[];var i,html='',chosenTags={},tagSelected=false;j={position:currentTags.length-1,tag:''};for(i=0;i<currentTags.length&&i<h.length;i++){if(!tagSelected&&currentTags[i].toLowerCase()!=h[i].toLowerCase()){j={position:i,tag:h[i].toLowerCase()};tagSelected=true}chosenTags[currentTags[i].toLowerCase()]=true}if(j.tag){if(settings.url){$.ajax({'url':settings.url,'dataType':'json','data':{'tag':j.tag},'async':false,'success':function(m){f=m}})}else{for(i=0;i<userTags.length;i++){if(userTags[i].indexOf(j.tag)===0){f.push(userTags[i])}}}f=$.grep(f,function(v,i){return!chosenTags[v.toLowerCase()]});if(settings.sort){f=f.sort()}for(i=0;i<f.length;i++){html+='<'+settings.tagWrap+' class="_tag_suggestion">'+f[i]+'</'+settings.tagWrap+'>'}k.html(html);g=!!(f.length)}else{hideSuggestions()}}function hideSuggestions(){k.empty();f=[];g=false}function setSelection(){var v=d.val();if(v==d.attr('title')&&d.is('.hint'))v='';currentTags=v.split(settings.separator);hideSuggestions()}function chooseTag(a){var i,index;for(i=0;i<currentTags.length;i++){if(currentTags[i].toLowerCase()!=h[i].toLowerCase()){index=i;break}}if(index==h.length-1)a=a+settings.separator;h[i]=a;d.val(h.join(settings.separator));d.blur().focus();setSelection()}function handleKeys(a){fromTab=false;var b=a.type;var c=false;switch(a.keyCode){case 37:case 38:case 39:case 40:{hideSuggestions();return true}case 224:case 17:case 16:case 18:{return true}case 8:{if(this.value==''){hideSuggestions();setSelection();return true}else{b='keyup';c=true;showSuggestionsDelayed(this)}break}case 9:case 13:{if(g){chooseTag(f[0]);fromTab=true;return false}else{return true}}case 27:{hideSuggestions();setSelection();return true}case 32:{setSelection();return true}}if(b=='keyup'){switch(a.charCode){case 9:case 13:{return true}}if(c){setSelection()}showSuggestionsDelayed(this,a.charCode)}}d.after(k).keypress(handleKeys).keyup(handleKeys).blur(function(){if(fromTab==true||g){fromTab=false;d.focus()}});k=$(k).click(function(a){if(a.target.nodeName==settings.tagWrap.toUpperCase()&&$(a.target).is('._tag_suggestion')){chooseTag(a.target.innerHTML)}}).addClass(settings.matchClass);setSelection()})}})(jQuery);
