(function($){$.fn.tag=function(options){var defaults={separator:',',unique:true,addOnEnter:true,style:{list:'taglist',item:'tag',input:'input',remove:'delete'}};options=$.extend(defaults,options);$(this).each(function(){if((separator=$(this).attr('data-separator'))!='')options.separator=separator;var create_tag=function(text){var value=text.replace(/^\s+|\s+$/g,'');if(value=='')
return;var item=$('<li/>').addClass(options.style.item);var tag=$('<span/>');var close_text=$('<span/>').html('[X]');var close=$('<a/>',{tabindex:'-1'}).addClass(options.style.remove).append(close_text).click(function(){$(this).closest('li').remove();update_input();});if(options.unique&&$.inArray(value,values)>-1)return;values.push(value);tag.html(value);item.append(tag).append(' ').append(close);return item;};var add_tag=function(input){if($(input).val()!=''){var item=create_tag($(input).val());if(!item)
{$(input).val('');$(input).width(8);}
else{$(input).closest('li').before(item);$(input).val($(input).val().replace(options.separator,''));$(input).width(8).val('').focus();}
update_input();shadow.html('');}};var update_input=function(){var tags=[];$('li.'+options.style.item+' > span',list).each(function(){tags.push($(this).html());});values=tags;$(input).val(tags.join(options.separator));};var input=$(this);if(input.is(':input')){input.hide();var list=$('<ul/>').addClass(options.style.list).click(function(){$(this).find('input').focus();});var add=$('<input/>',{type:'text'});var tags=input.val().split(options.separator);var values=[];for(index in tags){var item=create_tag(tags[index]);list.append(item);}
update_input();input.after(list);var input_container=$('<li/>').addClass(options.style.input);var shadow=$('<span/>');shadow.hide();input_container.append(add);add.after(shadow);list.append(input_container);var auto_width=function(input)
{shadow.html($(input).val().replace(/\s/g,'&nbsp;'));var zone=($(input).val()==''?8:10);$(input).width(shadow.width()+zone);};add.bind('keyup',function(){auto_width(this);}).bind('keydown',function(event){auto_width(this);var key=event.keyCode||event.which;if($(this).val()==''&&(key==8||key==46))
{$(this).width($(this).val()!=''?shadow.width()+5:8);switch(key)
{case 8:if($(this).closest('li').prev().is('.ready-to-delete')){$('.ready-to-delete').removeClass('ready-to-delete');$(this).closest('li').prev().remove();}else{$('.ready-to-delete').removeClass('ready-to-delete');$(this).closest('li').prev().addClass('ready-to-delete');}
break;case 46:if($(this).closest('li').next().is('.ready-to-delete')){$('.ready-to-delete').removeClass('ready-to-delete');$(this).closest('li').next().remove();}else{$('.ready-to-delete').removeClass('ready-to-delete');$(this).closest('li').next().addClass('ready-to-delete');}
break;}
update_input();event.preventDefault();return false;}else{$('.ready-to-delete').removeClass('ready-to-delete');}
if($(this).val()=='')
{if(key==37||key==38)
{$(this).width($(this).val()!=''?shadow.width()+5:8);$(this).closest('li').prev().before($(this).closest('li'));$(this).focus();}
if(key==39||key==40)
{$(this).width($(this).val()!=''?shadow.width()+5:8);$(this).closest('li').next().after($(this).closest('li'));$(this).focus();}}}).bind('keypress',function(event){auto_width(this);var key=event.keyCode||event.which;if(options.separator==String.fromCharCode(key)||options.separator==key||(options.addOnEnter&&key==13)){add_tag(this);event.preventDefault();return false;}}).bind('blur',function(){add_tag(this);$(this).closest('ul').append($(this).closest('li'));});}});};})(jQuery);
