YUKU.reportPost = {
   posts : [],
   options : [],
   title : '',
   base : '',
   button : '',
   layout : '',
   auto : false,
   xml : null,

   init : function (base, options, button, layout, auto)
   {
      if (!window.gs.isLoged || !(YUKU.get_by_id('forum_viewtopic') ||
                                  YUKU.get_by_id('forum_setpost')))
         return;

      this.base = base;
      this.button = button;
      this.layout = layout;
      this.auto = auto;
      this.options = options;

      this.discoverPosts();
   },

   discoverPosts : function ()
   {
      var tbods = YUKU.get_by_tag('TBODY', YUKU.get_by_id('wrapper'));

      for (var t = 0; l = tbods.length, t < l; t++)
      {
         if (!YUKU.className.test(tbods[t], 'post'))
            continue;

         var id = tbods[t].id.replace('post-id-', '');

         if (YUKU.className.test(tbods[t], 'lead'))
            var url = this.base + '/topic/' + id;
         else if (YUKU.className.test(tbods[t], 'reply'))
            var url = this.base + '/reply/' + id + '#reply-' + id;

         var where = this.getWhere(tbods[t]);

         if (this.options.length == 0)
            this.buildLink(where, url);
         else
            this.buildDropdown(where, url);
      }
   },

   getWhere : function (tbody)
   {
      if (this.layout == 0) // yuku table layout
      {
         var postTools = YUKU.get_by_tag('TR', tbody)[2];
         var replyTools = YUKU.get_by_tag('TD', postTools)[1];
         var editTools = YUKU.get_by_tag('DIV', replyTools)[1];

         return editTools;
      }
      else // ezboard table layout
      {
         var postRow = YUKU.get_by_tag('TR', tbody)[1];
         var posterDetail = YUKU.get_by_tag('TD', postRow)[0];
         var replyOptions = YUKU.get_by_tag('UL', posterDetail)[0];

         var li = YUKU.make_el('LI', {className : 'report'}, replyOptions);

         return li;
      }
   },

   buildDropdown : function (el, url)
   {
      var dropdown = YUKU.make_el('DIV', {className : 'dropdown report'}, el);

      if (this.button.indexOf('http://') != -1)
      {
         var button = YUKU.make_el('IMG', {src : this.button, className : 'image-button'}, dropdown);
      }
      else
      {
         if (this.layout == 0)
         {
            var button = YUKU.make_el('P', {className : 'button'}, dropdown);
            var span = YUKU.make_el('SPAN', this.button, button);
         }
         else
         {
            make_text(this.button, dropdown);
         }

      }

      var ul = YUKU.make_el('UL', dropdown);
      for (i = 0; i < this.options.length; i++)
      {
         var li = YUKU.make_el('LI', {url : url, reason : this.options[i]}, this.options[i], ul);
         li.onclick = function (e) { YUKU.reportPost.sendReport(this); }
      }
   },

   buildLink : function (el, url)
   {
      if (this.button.indexOf('http://') != -1)
      {
         var buttonClass = 'image-button';
         var link = YUKU.make_el('A', {href : '#', className : buttonClass, url : url}, el);
         var button = YUKU.make_el('IMG', {src : this.button}, link);
      }
      else
      {
         var button = this.button
         var buttonClass = '';
         var link = YUKU.make_el('A', {href : '#', className : buttonClass, url : url}, button, el);
      }

      link.onclick = function (e) { preventDefault(e); YUKU.reportPost.sendReport(this); }
   },

   sendReport : function (el)
   {
      var me = this;
      var reason = el.reason ? el.reason : 'Unknown';
      var url = el.url ? el.url : '';

      var txt_msg = "Report Post\n\nReason: " + reason + "\nURL: " + url + "\n\n";

      var html_msg = '<h3>Report Post</h3><p><strong>Reason:</strong> ' + reason;
          html_msg += '<br><strong>URL:</strong> <a href="' + url + '">' + url + '</a></p>';

      if (this.auto == false)
      {
         window.location.href = this.base + '/help/me/?question=' + encodeURIComponent(txt_msg);
         return;
      }

      if (!confirm('Are you sure you want to report this post?'))
         return;

      var post = 'question=' + encodeURIComponent(html_msg) + '&validate=1&submit=submit&js=1';
      var post_url = this.base + '/help/me';

      this.xml = new XHConn();
      this.xml.connect(post_url, 'POST', post, function (doc) { me.reportSent(doc); });
   },

   reportSent : function (doc)
   {
      if (doc.responseText && doc.responseText == '1')
         alert('Report sent succesfully');
      else
         alert('There was a problem reporting this post, or was there...');
   },

   moveLink : function (button, layout)
   {
      this.layout = layout;
      this.button = button;

      var tbods = YUKU.get_by_tag('TBODY', YUKU.get_by_id('wrapper'));

      for (var t = 0; l = tbods.length, t < l; t++)
      {
         if (!YUKU.className.test(tbods[t], 'post'))
            continue;

         var id = tbods[t].id.replace('post-id-', '');
         var where = this.getWhere(tbods[t]);

         if (YUKU.className.test(tbods[t], 'lead'))
            var url = '/report/newreport/lead/' + id;
         else if (YUKU.className.test(tbods[t], 'reply'))
            var url = '/report/newreport/reply/' + id ;

         var links = YUKU.get_by_tag('A', tbods[t]);
         for (var i = 0; i < links.length; i++)
         {
            if (links[i].href.indexOf(url) != -1)
            {
               YUKU.remove_el(links[i].parentNode);
               break;
            }
         }

         if (this.button.indexOf('http://') != -1)
         {
            var buttonClass = 'image-button';
            var link = YUKU.make_el('A', {href : url, className : buttonClass}, where);
            var button = YUKU.make_el('IMG', {src : this.button}, link);
         }
         else
         {
            var button = this.button
            var buttonClass = '';
            var link = YUKU.make_el('A', {href : url, className : buttonClass}, button, where);
         }
      }
   }
}