/*
 * Tv schedule toggle
 */
function ts_toggle(obj, id)
{
  $('#ts' + id).toggle();

  var img = $(obj).children();
  var src = img.attr('src');

  if(new RegExp('_close').test(src))
  {
    img.attr('src', src.replace('_close', ''));
  }
  else
  {
    img.attr('src', src.replace('.gif', '_close.gif'));
  }
}


function fnHasClass(el, className) {
  return new RegExp(className).test(el.className);
}

function array_merge()
{
  var merged = new Array();
  var arr;

  for (var i = 0; i < arguments.length; i++)
  {
    arr = arguments[i];
    for (var j = 0; j < arr.length; j++)
    {
      merged.push(arr[j]);
    }
  }

  return merged;
}

var g_tv_filter_type = false;
var g_tv_filter_time = false;
var g_tv_filter_elements = undefined;

// Tv shedule
function tvSetFilterProductType(anchor, product_type)
{
  g_tv_filter_type = product_type;

  $('div .b-tvlist-anons-full').hide();

  var classname = 'pt_' + product_type;
  if(undefined == g_tv_filter_elements)
  {
    g_tv_filter_elements = array_merge($('#dl_tv_schedule dd'), $('#dl_tv_schedule dt'));;
  }
  var i, el;

  $('#tv_filter_product_type a.active').removeClass('active')
  $(anchor).addClass('active');

  for(var i=0; i< g_tv_filter_elements.length; i++)
  {
    el = g_tv_filter_elements[i];

    if(product_type == 0)
    {
      el.style.display = '';
      el.disabled_product_type = false;
    }
    else
    {
      isClass = fnHasClass(el, classname);

      if(g_tv_filter_time)
      {
        isClass = isClass && fnHasClass(el, 'tof_' + g_tv_filter_time);
      }

      if(isClass)
      {
        el.style.display = '';
        el.disabled_product_type = false;
      }
      else
      {
        el.style.display = 'none';
        el.disabled_product_type = true;
      }
    }
  }
}

function tvSetFilterTime(anchor, time_of_day)
{
  g_tv_filter_time = time_of_day;

  $('div .b-tvlist-anons-full').hide();

  var classname = 'tof_' + time_of_day;
  var i, el, td;

  if(undefined == g_tv_filter_elements)
  {
    g_tv_filter_elements = array_merge($('#dl_tv_schedule dd'), $('#dl_tv_schedule dt'));;
  }

  $('#tv_filter_time a.active').removeClass('active');
  $(anchor).addClass('active');

  for(var i=0; i< g_tv_filter_elements.length; i++)
  {
    el = g_tv_filter_elements[i];

    if(time_of_day == 0)
    {
      el.style.display = '';
      el.disabled_time = false;
    }
    else
    {
      isClass = fnHasClass(el, classname);

      if(g_tv_filter_type)
      {
        isClass = isClass && fnHasClass(el, 'pt_' + g_tv_filter_type);
      }

      if(isClass)
      {
        el.style.display = '';
        el.disabled_time = false;
      }
      else
      {
        el.style.display = 'none';
        el.disabled_time = true;
      }
    }
  }
}

/* jQuery functions for smooth bug-less fade in and out */
(function($) {
    $.fn.ClearTypeFadeTo = function(options) {
        if (options)
            $(this)
            .show()
            .each(function() {
                if (jQuery.browser.msie) {
                    $(this).attr('oBgColor', $(this).css('background-color'));
                    $(this).css({ 'background-color': (options.bgColor ? options.bgColor : '#fff') })
                }
            })
            .fadeTo(options.speed, options.opacity, function() {
                if (jQuery.browser.msie) {
                    if (options.opacity == 0 || options.opacity == 1) {
                        $(this).css({ 'background-color': $(this).attr('oBgColor') }).removeAttr('oBgColor');
                        if(options.opacity == 0) $(this).css('display', 'none');
                        $(this).get(0).style.removeAttribute('filter');
                    }
                }
                if (options.callback != undefined) options.callback();
            });
    };

    $.fn.ClearTypeFadeIn = function(options) {
        if (options)
            $(this)
            .css({ opacity: 0 })
            .ClearTypeFadeTo({ speed: options.speed, opacity: 1, callback: options.callback });
    };

    $.fn.ClearTypeFadeOut = function(options) {
        if (options)
            $(this)
            .css({ opacity: 1 })
            .ClearTypeFadeTo({ speed: options.speed, opacity: 0, callback: options.callback });
    };
})(jQuery);


/**
* CommentFormClass class
*/
function CommentFormClass() {
  // id of container
  this.containerId = 'containerComment0';

  // isAjaxRequest
  this.isAjaxRequest = false;

  // attributes
  this.commentPage    = 1;
  this.commentObject  = '';
  this.commentId      = 0;
  this.commentPid     = 0;
  this.commentSort    = 'desc';
  this.commentPerPage = 20;
  this.commentLang    = 'uk';
  this.langAnswer     = 'відповісти';
  this.langCommentsShow = 'Показати коментарі';
  this.langCommentsHide = 'Сховати коментарі';


  // update object
  this.updateObject = function(object, id)
  {
    this.commentObject = object;
    this.commentId = id;
  }


  // showForm function
  this.showForm = function() {
    this.answer(0);
  }

  // processForm function
  this.processForm = function() {
    var jsonData = {};

    this.hideError();
    this.prepareData();

    var inputs = $('#formComment input');

    for(var i = 0; i < inputs.length; i++)
    {
      var el = inputs[i];

      if(el.type != 'submit' && el.type != 'button')
      {
        jsonData[el.name] = el.value;
      }
    }

    var el = $('#formComment textarea')[0];
    jsonData[el.name] = el.value;

    this.isAjaxRequest = true;

    jQuery.post("/comment_post", jsonData,
      function(data){
        commentFormObject.isAjaxRequest = false;

        if(data.status)
        {
          commentFormObject.addComment(data);
          commentFormObject.formClear();

          // increment comments count
          $('#countComment').html(($('#countComment').html().replace(/(\d+)/, parseInt($('#countComment').html().match(/(?:\d+)/)) + 1)));

          if(typeof(wcReloadCaptcha) === 'function')
          {
            wcReloadCaptcha();
          }
        }
        else{
          commentFormObject.renderError(data);
          if(typeof(wcReloadCaptcha) === 'function')
          {
            wcReloadCaptcha();
          }
        }
      }, "json");


    return false;
  }


  // prepareData
  this.prepareData = function()
  {
    $('#comment_object')[0].value = this.commentObject;
    $('#comment_id')[0].value     = this.commentId;
    $('#comment_pid')[0].value    = this.commentPid;
  }


  // formCancel function
  this.formCancel = function() {
    document.getElementById(this.containerId).style.display = 'none';
    return false;
  }


  // formClear
  this.formClear = function() {
    var inputs = $('#formComment input');

    for(var i = 0; i < inputs.length; i++)
    {
      var el = inputs[i];

      if(el.type != 'submit' && el.type != 'button')
      {
        if(el.name == 'comment[code]' || el.name == 'comment[name]' || el.name == 'comment[text]')
        {
          el.value = '';
        }
      }
    }

    $('#formComment textarea')[0].value = '';
  }


  // moveForm
  this.moveForm = function(pid)
  {
    var containerId = 'containerComment' + pid;
    var oldContainerId = this.containerId;

    document.getElementById(this.containerId).style.display = 'none';
    var container = document.getElementById(this.containerId).cloneNode(true);
    this.containerId = containerId;

    $('#' + oldContainerId).remove();

    container.id = containerId;
    this.commentPid = pid;

    if(pid == 0)
    {
      $('#b-comments-header').after(container);
    }
    else
    {
      $('#comment-' + pid).next().after(container);
    }
  }


  // answer function
  this.answer = function(pid) {
    if(this.isAjaxRequest === true)
    {
      return false;
    }

    var containerId = 'containerComment' + pid;
    var oldContainerId = this.containerId;

    if(containerId == oldContainerId)
    {
      $('#' + this.containerId).toggle();

      return false;
    }

    this.moveForm(pid);
    $('#' + this.containerId).toggle();

    return false;
  }


  // addComment function
  this.addComment = function(data) {
    this.formCancel();

    var cid = data.cid;
    var class_tree = '';
    var sex = data.sex;

    if(data.pid > 0)
    {
      // get level for parent
      var level = 1;

      var match = $('#comment-' + data.pid).next()[0].className.match(/b-comments-tree-(\d)+/);
      if(match)
      {
        var level = parseInt(match[1], 10) + 1;
      }

      if(level > 5)
      {
        level = 5;
      }

      class_tree = 'b-comments-tree b-comments-tree-' + level;
    }

    var html = '' +
    '<a name="comment-' + cid + '" id="comment-' + cid + '"/>' +
    '<div class="b-comments-item ' + class_tree + '">' +
        '<div class="b-comments-entry">' +
          '<p>' + data.text + '</p>' +
        '</div>' +
        '<div><img src="/images/bq_corner.gif" alt="" /></div>' +
        '<div class="b-comments-author">' +
          '<span class="b-comments-user">'  + data.name + '</span> <span class="b-comments-date">' + data.date + ' <a href="javascript:;" onclick="commentFormObject.answer(\'' + cid + '\')">' + this.langAnswer + '</a></span>' +
        '</div>' +
     '</div>';


    if(data.pid == 0)
    {
      var children = $('#commentList').children();

      if(children.length > 0)
      {
        $(children[0]).before(html);
      }
      else
      {
        $('#commentList').append(html);
      }
    }
    else
    {
      $('#comment-' + data.pid).next().after(html);
    }

    if(!$('#commentList:visible').length)
      this.toggleShowComments();

    this.scrollTo(data.cid);
  }

  // scroll to comment
  this.scrollTo = function(cid){
    var href = document.location.href;
    var ref = '#comment-' + cid;

    if(cid === '')
    {
      ref = '#comment';
    }

    document.location.href = href.substring(0, href.lastIndexOf('#')) + ref;
  }


  // renderError function
  this.renderError = function(data) {
    for(var field in data.error)
    {
      $('#comment_error_msg_' + field)[0].style.display = 'block';
    }
  }


  // hideError
  this.hideError = function() {
    var el = $('#' + this.containerId + ' span.comment_error_msg');

    for(var i = 0; i < el.length; i++)
    {
      el[i].style.display = 'none';
    }
  }


  // showCommentForPage
  this.showCommentForPage = function(page) {
    this.commentPage = page;

    this.updateComment(2);
  }


  // switchCommentPerPage
  this.switchCommentPerPage = function(number) {
    this.commentPerPage = number;
    this.commentPage = 1;

    this.updateComment();
  }


  // showCommentPerPage
  this.switchSortMode = function() {
    if(this.commentSort == 'asc')
    {
      this.commentSort = 'desc';
    }
    else
    {
      this.commentSort = 'asc';
    }

    this.commentPage = 1;

    this.updateComment();
  }

  this.toggleShowComments = function() {
    $('#commentShowComments').html($('#commentList:visible').length ? this.langCommentsShow : this.langCommentsHide).show();
    $('#commentList').slideToggle();
  }


  // update comment block
  this.updateComment = function(img_ajax_number) {
    var jsonData = {};

    this.moveForm(0);

    if(undefined == img_ajax_number)
    {
      img_ajax_number = 2;
    }

    var el = $('#formComment textarea')[0];

    jsonData['page']    = this.commentPage;
    jsonData['object']  = this.commentObject;
    jsonData['id']      = this.commentId;
    jsonData['sort']    = this.commentSort;
    jsonData['cpp']     = this.commentPerPage;
    jsonData['lang']    = this.commentLang;

    //jQuery('#img_ajax_loading_' + img_ajax_number).css('display', 'block');

    this.isAjaxRequest = true;

    jQuery.post("/comment_get", jsonData,
      function(data){
        commentFormObject.isAjaxRequest = false;

        //jQuery('#img_ajax_loading_2').css('display', 'none');

        if(data.length > 0)
        {
          var div = document.getElementById('blockComments');
          div.removeChild(document.getElementById('commentList'));

          $(div).append(data);
          commentFormObject.formCancel();
          commentFormObject.scrollTo('');
        }
      }, "html");
  }

}

var commentFormObject = new CommentFormClass();


/* End Comment */


/**
* videoScrollerClass class
*/
function videoScrollerClass() {

  this.busy = false;
  this.channel = '';
  this.skip = 0;
  this.ts1 = 0;
  this.ts2 = 0;
  this.dir = '';

  this.init = function(channel, skip, ts1, ts2) {
    this.channel = channel;
    if(!this.channel)
      this.channel = 'all';
    this.skip = skip;
    this.ts1 = ts1;
    this.ts2 = ts2;
    this.dir = '';
    this.updateButtons();
  }

  this.prev = function() {
    if(this.ts1)
      this.scroll('prev');
  }

  this.next = function(channel, skip) {
    if(this.ts2)
      this.scroll('next');
  }

  this.updateButtons = function() {
    $('#video_scroller_prev')[0].src = (videoScroller.ts1) ? '/images/nav_left.gif' : '/images/nav_left_ina.gif';
    $('#video_scroller_next')[0].src = (videoScroller.ts2) ? '/images/nav_right.gif' : '/images/nav_right_ina.gif';
  }

  // update comment block
  this.scroll = function(dir) {
    if(this.busy)
      return;

    this.dir = dir;
    this.busy = true;

    $('#ajax_loader').show();

    jQuery.get("/ajax/video_channel/" + this.channel + "/" + this.skip, { ts1: this.ts1, ts2: this.ts2, dir: this.dir },
      function(data){
        videoScroller.busy = false;
        $('#ajax_loader').hide();

        if(data.length) {
          var matches;
          if(matches = data.match(/^(\d+)\|(\d+)\|/)) {
            videoScroller.ts1 = parseInt(matches[1], 10);
            videoScroller.ts2 = parseInt(matches[2], 10);
            data = data.substr(matches[0].length);
          }
          $('#video_scroller_container').html(data);
        }
        else {
          if(videoScroller.dir == 'prev')
            videoScroller.ts1 = 0;
          if(videoScroller.dir == 'next')
            videoScroller.ts2 = 0;
        }

        videoScroller.updateButtons();
      }, "html");
  }

}

var videoScroller = new videoScrollerClass();
/* End videoScrollerClass */

/**
* Stars rating
*/
function starsOver(self)
{
  $('.rating', $(self).parent()).hide();
}

function starsOut(self)
{
  $('.rating', $(self).parent()).show();
}

function starsRate(self, vid, rating)
{
  $.post("/video_rate", {id: vid, rating: rating}, function(data)
  {
    if(data.rating)
    {
      $p = $(self).parent();
      $('.rating', $p).css('width', (parseFloat(data.rating) * 100 / 5) + '%').show();
      $('a', $p).remove();
    }
  }, "json");
}


(function($){
	$.fn.autohide = function(options, fn) {
    var defaults = {
      delay: 3000
    };
    var options = $.extend(defaults, options);

    var container = $(this);

    var containerTimer = null;

    if(container.is(":visible"))
    {
      container.mouseenter(function(){
          containerEnter();
        })
        .mouseleave(function(){
          containerLeave();
        });

      containerLeave();
    }
    else
    {
      clearTimeout(containerTimer);
      container.unbind();
    }

    function containerLeave()
    {
      containerTimer = setTimeout(function(){hideContainer();}, options.delay);
    }

    function containerEnter()
    {
      clearTimeout(containerTimer);
    }

    function hideContainer()
    {
      clearTimeout(containerTimer);
      container.unbind();
      container.hide();
    }
  }
})(jQuery);
