/*
  jQuery Tabs by Alisey Lebedev
*/

(function($) {
  $.fn.tabs = function(options) {
    var opts = $.extend({}, $.fn.tabs.defaults, options);
    var selector = $(this).selector;
    
    return this.each(function() {
      var $container = $(this);
      var $heads = $(this).find(opts.heads);
      var $bodies = $(this).find(opts.bodies);
      var $selectedHead = $heads.filter('.selected');
      var $selectedBody = $bodies.filter('.selected');
      
      $container.bind('deselectTabs', function() {
        if (!$selectedHead) return;
        $selectedHead.removeClass('selected');
        $selectedBody.removeClass('selected');
        stopFlash($selectedBody);
        opts.deselect($selectedHead, $selectedBody);
        $selectedHead = null;
        $selectedBody = null;
      });

      $(opts.heads, $container).live('click', function() {
        $heads = $container.find(opts.heads);
        $bodies = $container.find(opts.bodies);
        var $head = $(this);
        var index = $heads.index($head);
        var $body = $bodies.eq(index);
        
        if (!$selectedHead || !$selectedHead.length);
        else if ($head[0] == $selectedHead[0]) {
          if (!opts.toggle) return;
          if ($.isFunction(opts.toggle)) opts.toggle($head, $body, function() {
            if ($selectedHead && $selectedHead[0] == $head[0]) return;
            $head.removeClass('selected');
            $body.removeClass('selected');
            stopFlash($body);
          });
          $selectedHead = null;
          $selectedBody = null;
          return;
        } else {
          $selectedHead.removeClass('selected');
          $selectedBody.removeClass('selected');
          stopFlash($selectedBody);
          opts.deselect($selectedHead, $selectedBody);
        }
        
        $selectedHead = $head.addClass('selected');
        $selectedBody = $body.addClass('selected');
        opts.select($head, $body);
      });
    })};
    
    function stopFlash(container) {
      $(container).find('object').replaceWith(function() {
        return unescape($(this).next('span.serialized-html').text());
      });
    }
    
    $.fn.tabs.defaults = {
      heads: 'div.tab-head',
      bodies: 'div.tab-body',
      select: function(head, body) { },
      deselect: function(head, body) { },
      animate: null, // selector or true for tab body animation
      toggle: null // function or boolean
    }
})(jQuery);