var TvBroadcast = $.klass({
  
  initialize: function(link, options)
    {
    this.options = $.extend({
      }, options);
    
    var obj = this;
    
    this.link = $(link);
    this.link.fancybox({
      transitionIn:	  'elastic',
      transitionOut:	'elastic',
      scrolling:      'no',
      autoScale:      false,
      hideOnOverlayClick: false,
      overlayColor:   "#00468C",
      titleShow: false,
      onComplete: function(){
        obj.initialize_box.apply(obj);
        }
      });
    },
  
  initialize_box: function()
    {
    var obj = this;
    this.box = $("#fancybox-inner");
    
    /* tabs */
    this.box.find("div.section").hide().removeClass("hidden").first().show();
    this.box.find("ul.tabs a").removeClass("current").first().addClass("current");
    this.box.find("ul.tabs a").bind("click", this, function(e){
      e.preventDefault();
      var target = ($(e.target).attr("nodeName").toLowerCase() == "a")? $(e.target) : $(e.target).parent("a");
      e.data.open_tab(target);
      });
    
    /* comments */
    this.initialize_comments();
    
    /* action links on main page */
    this.summary_height = this.box.find('div.summary').outerHeight();
    this.initialize_summary();
    
    $.fancybox.resize();
    },
  
  open_tab: function(tab)
    {
    this.box.find("div.section").hide();
    this.box.find("ul.tabs a").removeClass("current");
    
    $(tab).addClass("current");
    this.box.find("#"+ $(tab).attr("href").split("#")[1]).show();
    
    $.fancybox.resize();
    },
  
  initialize_summary: function(options)
    {
    this.box.find("div.actions .rate a").bind("click", this, function(e){
      e.preventDefault();
      if(Nav.is_logged_in())
        {
        e.data.box.find("#add_comment").show();
        e.data.box.find("#comment_list").hide();
        e.data.open_tab(e.data.box.find("ul.tabs a").get(1));
        $.fancybox.resize();
        }
      else Nav.teaser.link.trigger("click");
      });
    
    this.initialize_send_to_friend(options);
    
    this.box.find("a.alert").bind("click", this, function(e){
      e.data.add_alert.apply(e.data, [e]);
      });
    
    this.box.find('div.summary').css({ height: "auto", overflow: "visible", 'overflow-x': 'hidden', 'overflow-y': 'visible' });
    
    if(this.box.find('div.summary').outerHeight() > this.summary_height) this.box.find('div.summary').css({ height: this.summary_height, overflow: "scroll", 'overflow-x': 'hidden', 'overflow-y': 'scroll' });
    },
  
  initialize_comments: function(options)
    {
    if(options && options.has_errors == true)
      {
      this.box.find("#comment_list").hide();
      this.box.find("#add_comment").removeClass("hidden").show();
      }
    else this.box.find("#add_comment").hide();
    
    this.box.find(".comments p.action a").bind("click", this, function(e){
      e.preventDefault();

      if(Nav.is_logged_in())
        {
        if($("#add_comment").is(":visible"))
          {
          $("#comment_list").slideDown(function(){ $.fancybox.resize(); });
          $("#add_comment").slideUp();
          }
        else
          {
          $("#comment_list").slideUp();
          $("#add_comment").slideDown(function(){ $.fancybox.resize(); });
          }
        }
      else Nav.teaser.link.trigger("click");
      });

    this.box.find("#add_comment p.cancel a").click(function(e){
      e.preventDefault();
      $("#comment_list").slideDown(function(){ $.fancybox.resize(); });
      $("#add_comment").slideUp();
      });

    /* rating */
    this.box.find("#add_comment p.rate a").bind("click", this, function(e){
      e.preventDefault();
      var value = parseInt($(e.target).html());
      $("#add_comment p.rate input").val(value);
      $("#add_comment p.rate a").removeClass("checked");
      $("#add_comment p.rate a").each(function(){
        if(parseInt($(this).html()) <= value) $(this).addClass("checked");
        });
      });

    this.box.find(".comments form").bind("submit", this, function(e){
      e.data.submit_comment.apply(e.data, [e]);
      });
    },
  
  submit_comment: function(e)
    {
    e.preventDefault();

    var form = $(e.target);
    var data = form.serialize();
    var obj = this;
    
    form.addClass("loading");
    
    $.ajax({
      url: form.attr("action"),
      type: "post",
      data: data,
      success: function(response)
        {
        Nav.check(response);
        obj.box.find(".comments").html(response.html);
        obj.initialize_comments(response);
        $.fancybox.resize();
        }
      });
    },
  
  initialize_send_to_friend: function(options)
    {
    if(options && options.has_errors == true)
      {
      this.box.find("#broadcast_summary").hide();
      this.box.find("#send_to_friend").removeClass("hidden").show();
      }
    else this.box.find("#send_to_friend").hide().removeClass("hidden");

    this.box.find("div.actions .mail a").bind("click", this, function(e){
      e.preventDefault();

      if($("#send_to_friend").is(":visible"))
        {
        $("#broadcast_summary").slideDown(function(){ $.fancybox.resize(); });
        $("#send_to_friend").slideUp();
        }
      else
        {
        $("#broadcast_summary").slideUp();
        $("#send_to_friend").slideDown(function(){ $.fancybox.resize(); });
        }
      });

    this.box.find("#send_to_friend p.cancel a").click(function(e){
      e.preventDefault();
      $("#broadcast_summary").slideDown(function(){ $.fancybox.resize(); });
      $("#send_to_friend").slideUp();
      });

    this.box.find("#send_to_friend form").bind("submit", this, function(e){
      e.data.submit_send_to_friend.apply(e.data, [e]);
      });
    },
  
  submit_send_to_friend: function(e)
    {
    e.preventDefault();

    var form = $(e.target);
    var data = form.serialize();
    var obj = this;
    
    form.addClass("loading");
    
    $.ajax({
      url: form.attr("action"),
      type: "post",
      data: data,
      success: function(response)
        {
        Nav.check(response);
        obj.box.find("#broadcast_summary").parent().html(response.html);
        obj.initialize_summary(response);
        $.fancybox.resize();
        }
      });
    },
  
  add_alert: function(e)
    {
    e.preventDefault();
    var obj = this;
    
    var target = ($(e.target).is("a"))? $(e.target) : $(e.target).parent("a");
    
    if(Nav.is_logged_in())
      {
      $.ajax({
        url: target.attr("href"),
        type: "post",
        success: function(response)
          {
          Nav.check(response);
          obj.box.find("#broadcast_summary").parent().html(response.html);
          obj.initialize_summary(response);
          $.fancybox.resize();
          }
        });
      }
    else Nav.teaser.link.trigger("click");
    }
    
  });
