;(function($){$.fn.extend({tags:function(urlOrData,options){options=$.extend({},$.Tager.defaults,options);return this.each(function(){new $.Tager(this,urlOrData,options);});}});$.Tager=function(input,urlOrData,options){var $input=$(input);var KEY={LEFT:37,RIGHT:39,BACKSPACE:8};var inputName=$input.attr('name');var inputId=$input.attr('id');var inputValue=$input.val();$input.replaceWith($('<ul class="'+options.listClass+'"><li class="'+options.itemInputClass+'"><input type="text" id="'+inputId+'" class="'+options.inputClass+'" /></li></ul>'));$input=$('#'+inputId);if(inputValue.length>0){$(eval(inputValue)).each(function(){makeItem([this.tag,this.tagId],this.tag);});}
$input.autocomplete(urlOrData,{selectAnchor:'ul.'+options.listClass,parse:function(data){var parsed=[];$(eval(data)).each(function(){row=[this.tag,this.tagId];parsed[parsed.length]={data:row,value:this.tag,result:this.tag};});return parsed;}});$input.width(10);$('.'+options.listClass).click(function(event){$input.focus();});var $current=$input.parent();$input.keydown(function(event){resize();if($input.val().length>0)return;switch(event.keyCode){case KEY.LEFT:move('left');break;case KEY.RIGHT:move('right');break;case KEY.BACKSPACE:moveDispose();break;default:moveInput();break;}}).keypress(function(){}).result(function(event,data,formatted){value=makeItem(data,formatted);options.makeItem(value);$input.val('');$input.focus();});function resize(){$input.width(($input.val().length+1)*10);}
function move(direction){moveTo=(direction=='left'?$current.prev():$current.next());if(moveTo.length==0)return;if(moveTo.hasClass(options.itemClass))moveTo.addClass(options.itemSelectedClass);if($current.hasClass(options.itemSelectedClass))$current.removeClass(options.itemSelectedClass);$current=moveTo;}
function moveDispose(){if($current.hasClass(options.itemClass)){options.removeItem($current);$current.remove();$current=$input.parent();}else{select=$current.prev();if(select.length==0)return;if(select.hasClass(options.itemClass))select.addClass(options.itemSelectedClass);$current=select;}}
function moveInput(){if($current.hasClass(options.itemSelectedClass))$current.removeClass(options.itemSelectedClass);$current=$input.parent();}
function makeItem(data,formatted){var add=true;$('.'+options.itemClass+' input').each(function(){if(data[1]==$(this).val())add=false;});if($('.'+options.itemClass+' input').length>=options.itemLimit){alert('Tag limit has been reached.');add=false;}
if(!add){$input.val('');return false;}
html='<li class="'+options.itemClass+'">'+formatted+'<input type="hidden" name="'+inputName+'[]" value="'+data[1]+'" /><a href="#" class="'+options.itemCloseClass+'">&nbsp;</a></li>';$(html).mouseout(function(){$(this).removeClass(options.itemHoverClass);}).click(function(){$current.removeClass(options.itemSelectedClass);$current=$(this).removeClass(options.itemHoverClass).addClass(options.itemSelectedClass);$input.focus();$input.val();}).children('.'+options.itemCloseClass).click(function(){options.removeItem($(this).parent());$(this).parent().remove();$current=$input.parent();$input.focus();return false;}).parent().insertBefore($input.parent());return data[1];}};$.Tager.defaults={listClass:"tag_list",inputClass:"tag_input",itemClass:"tag_item",itemInputClass:"tag_item_input",itemSelectedClass:"tag_item_selected",itemHoverClass:"tag_item_hover",itemCloseClass:"tag_item_close",itemLimit:20,makeItem:function(item){},removeItem:function(item){}};})(jQuery);