//Handing tabbed interfaces
(function($) {
  $.fn.tabs = function(options){
    
    var opts = $.extend({ callback: ''}, options);
    
    $(this).each(function() {

      var $this = $(this),
        $current = $this.children('.current'),
        indicatorPos = getIndicatorPos($current),
        $tabs = $this.closest('.section').find('.tabs:first'),
        startIndex = $this.find('.current').prevAll().length;
              
      $tabs.find('.tab').eq(startIndex).addClass('current').siblings().removeClass('current').addClass('hide');

      $this.after('<span class="indicator" style="left:'+indicatorPos+'px;"></span>');

      $this.children().children('a').click(function(e) {
        
        var $link = $(this),
            $par = $link.parent();
        $link.addClass('no-outline');
        
        if(!$par.hasClass('current')) {
          var $tabNav = $par.parent(),
            $indicator = $tabNav.siblings('.indicator'),
            indicatorPos = getIndicatorPos($par),
            newIndex = $par.prevAll().length;
            
          $tabNav.children('.current').removeClass('current');
          $par.addClass('current');

          $tabs.find('div.current').eq(0).removeClass('current').fadeOut(250,function() {
            $tabs.find('div.tab:eq('+newIndex+')').eq(0).fadeIn(250, function() {
              $(this).addClass('current');
              
              //If there is a callback, execute it
              if(opts.callback != '') {
                opts.callback();
              }
            });
          });
          $indicator.animate({ left: indicatorPos }, 500, function() { $link.trigger("animation-finished"); });
        }
        e.preventDefault();
        
      });

    });
    
    return $(this);
  };
})(jQuery);
