jQuery.extend({
  doAjax:         function(rel, listTagsDiv, url, id) {
                    jQuery.getJSON(url, function(data) 
                    {
                      if(data['error_message'] != undefined)
                      {
                        jQuery('div.input-tag ul.success_list').remove();
                        jQuery('div.input-tag ul.error_list').remove();
                        jQuery(rel).before('<ul class="error_list"><li>' + data['error_message'] + '</li></ul>');
                      }
                      else
                      {
                        jQuery('div.input-tag ul.success_list').remove();
                        jQuery('div.input-tag ul.error_list').remove();
                        
                        if(data['success_message'] != undefined)
                        {
                          jQuery(rel).before('<ul class="success_list"><li>' + data['success_message'] + '</li></ul>');
                        }
                        
                        var value = data['value'];
                        
                        if(value != '')
                        {
                          var html = '<span style="display: none;" class="delete-tags ' + id + '-delete-tags" id="tag_' + id + '_' + value + '" title="' + id + '/' + value + '">' + value + ' <a>x</a></span>';
                                                    
                          if(jQuery(listTagsDiv + ' span:last').length > 0)
                          {
                            jQuery(listTagsDiv + ' span:last').after(html);
                            jQuery(listTagsDiv + ' span:last').fadeIn('slow');
                          }
                          else
                          {
                            jQuery(listTagsDiv).html(html);
                            jQuery(listTagsDiv + ' span:last').fadeIn('slow');
                          }
                          
                          jQuery(rel).val('');
                        }
                        else
                        {
                          var html = '';
                          jQuery.each(data['tags'], function(key, value)
                          {
                            html = html + '<span class="delete-tags ' + id + '-delete-tags" id="tag_' + id + '_' + value + '" title="' + id + '/' + value + '">' + value + ' <a>x</a></span>';
                          });
                          jQuery(listTagsDiv).html(html);
                        }
                        
                        
                        jQuery('span.' + id + '-delete-tags').unbind("click");
                        jQuery('span.' + id + '-delete-tags').click(function()
                        {
                          jQuery.deleteTag(this, rel, listTagsDiv, id);
                        });
                      }
                      
                      curvyCorners.redraw();
                    });
                  },
                  
  displayTags:    function(obj, e)
                  {
                    if(e && e.keyCode != 9)
                    {
                      e.preventDefault();
                    }
                    
                    var value = jQuery('input#' + jQuery(obj).attr('rel') + '[type=text]').val();
                    var id = jQuery(obj).attr('id');
                    var div = 'div#' + jQuery(obj).attr('id') + '-list-tags';
                    var rel = 'input#' + jQuery(obj).attr('rel') + '[type=text]';

                    var i = 0;
                    var listTagsDiv = 'div#' + jQuery(obj).attr('id') + '-list-tags';
                    
                    if(value != '')
                    {
                      var url = '/tag/image/' + id + '/' + escape(value);
                      
                      jQuery.doAjax(rel, listTagsDiv, url, id);
                    }
                    else
                    {
                      var url = '/tag/image/' + id;
                      jQuery.doAjax(rel, listTagsDiv, url, id);
                    }
                  },
  
  deleteTag:      function(obj, rel, listTagsDiv, id)
                  {
                    var url = '/tag/delete/image/' + jQuery(obj).attr('title');
                    jQuery.getJSON(url, function(data) 
                    {
                      if(data['error_message'] != undefined)
                      {
                        jQuery('div.input-tag ul.success_list').remove();
                        jQuery('div.input-tag ul.error_list').remove();
                        jQuery(rel).before('<ul class="error_list"><li>' + data['error_message'] + '</li></ul>');
                      }
                      else
                      {
                        jQuery('div.input-tag ul.success_list').remove();
                        jQuery('div.input-tag ul.error_list').remove();
                        jQuery(obj).fadeOut('slow');
                      }
                    });
                  },
  
  preventEnter:   function()
                  {
                    jQuery('div.input-tag button').each(function() 
                    {
                      var obj = this; 
                      var rel = jQuery(this).attr('id');
                      
                      // prevent enter key from submitting form
                      jQuery('input#' + jQuery(this).attr('rel') + '[type=text]').bind('keypress', function(event)
                      {
                        if(event.keyCode == 13 || event.keyCode == 9)
                        {
                          if(jQuery('input#' + jQuery(obj).attr('rel') + '[type=text]').val() != '')
                          {
                            jQuery.displayTags(jQuery('#' + rel), event);
                          }
                          
                          
                          if(event.keyCode == 13)
                          {
                            return false;
                          }
                        }
                      });
                    })
                  },
                  
  tag:            function() 
                  {
                    jQuery('div.input-tag button').each(function() 
                    {
                      jQuery(this).click(function(event) 
                      {
                        event.preventDefault();
                        jQuery.displayTags(this, event);
                      });
                      
                      jQuery.displayTags(this);
                    });
                  },
                  
  clearText:      function()
                  {
                    jQuery('.clear-text').live("click", function()
                    {
                      jQuery(this).val('');
                    });
                  }
});

jQuery(document).ready(function() {
  jQuery.preventEnter();
  jQuery.tag();
  jQuery.clearText();
});
