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