YUKU.quickTags =
{
   ptag : null,
   etag : null,
   box_id : 0,
   topic_id : 0,

   click : function (e)
   {
      var src = YUKU.get_target(e);
      var me = YUKU.quickTags;

      if (src.nodeName != 'A') return;

      if (src.href.indexOf('edittopic') != -1 && YUKU.class_name.test(src.parentNode.parentNode, 'post-tags'))
      {
         YUKU.prevent_default(e);

         me.topic_id = /edittopic\/id\/([0-9]+)/.test(src.href) && RegExp.$1;
         me.box_id = /forum([0-9]+)/.test(YUKU.get_by_tag('BODY')[0].className) && RegExp.$1;

         if (me.ptag == null)
            me.ptag = src.parentNode.parentNode;

         if (me.etag == null)
         {
            var para = YUKU.make_el('P', {className: 'post-tags', style: {display: 'none'}});
            var strong = YUKU.make_el('STRONG', para);

            YUKU.make_text('Edit Tags [', strong);
            YUKU.make_el('A', {href: '#', title: 'Cancel', cancel: 'true'}, 'Cancel', strong);
            YUKU.make_text('] [', strong);
            YUKU.make_el('A', {href: '#', title: 'Save', save: 'true'}, 'Save', strong);
            YUKU.make_text(']: ', strong);
            YUKU.make_el('INPUT', {type: 'text', className: 'text', style: {width: '70%'}, id: 'post-tags', name: 'post-tags'}, para);

            me.etag = para;
            YUKU.insert_after(me.etag, me.ptag);
         }

         me.ptag.style.display = 'none';
         me.etag.style.display = '';
         YUKU.get_by_id('post-tags').value = me.get_tags();
      }
      else if (src.nodeName == 'A' && src.cancel)
      {
         YUKU.prevent_default(e);

         me.etag.style.display = 'none';
         me.ptag.style.display = '';
      }
      else if (src.nodeName == 'A' && src.save)
      {
         YUKU.prevent_default(e);
         me.set_tags();
      }
   },

   get_tags : function ()
   {
      if (!this.ptag) return '';

      var tags = [];
      var links = YUKU.get_by_tag('A', this.ptag);

      if (links.length == 1) return '';

      for (var i = 1; i < links.length; i++)
         tags[tags.length] = links[i].innerHTML;

      return tags.join(', ');
   },

   set_tags : function ()
   {
      if (!this.ptag || !this.topic_id || !this.box_id) return;

      var me = this;

      function ondone (xhr)
      {
         var holder = me.ptag;
         while (holder.lastChild && holder.lastChild.nodeName != 'STRONG')
            YUKU.remove_el(holder.lastChild);

         YUKU.make_text(' ', holder);
         if (xhr.responseText)
         {
            var tags = xhr.responseText.split(/\s*,\s*/);
            for (var i = 0; i < tags.length; i++)
            {
               var href = '/forum/view/id/' + me.box_id + '/mode/or/addtags/' + encodeURIComponent(tags[i]);
               YUKU.make_el('A', {href: href, rel: 'tag'}, tags[i], holder);

               if (i != tags.length - 1)
                  YUKU.make_text(', ', holder);
            }
         }
         else
            YUKU.make_text('None', holder);

         me.etag.style.display = 'none';
         me.ptag.style.display = '';

         conn = null;
      }

      var tags = YUKU.get_by_id('post-tags').value.stripHTML().trim();
      var url = '/forum/edittags/id/' + this.topic_id;
      var body = 'tags=' + encodeURIComponent(tags);

      (new XHConn()).connect(url, 'POST', body, ondone);
   }
}

YUKU.add_event(document, 'click', YUKU.quickTags.click, false);