(function($) {
PPAdvancedTabs = function( $scope )
{
//this.settings = settings;
this.elem = $scope;
this.elemClass = $scope.find('.pp-advanced-tabs');
this.tabs = $scope.find('.pp-tabs-labels .pp-advanced-tabs-title');
this.tabsResponsive = $scope.find('.pp-tabs-panels .pp-advanced-tabs-title');
this._init();
};
PPAdvancedTabs.prototype = {
settings : {},
elemClass : '',
_init: function()
{
var win = $(window);
this.tabs.click($.proxy(this._labelClick, this));
this.tabsResponsive.click($.proxy(this._responsiveLabelClick, this));
this._responsiveCollapsed();
if(this.elem.find('.at-vertical').length > 0) {
this._resize();
win.off('resize' + this.elemClass);
win.on('resize' + this.elemClass, $.proxy(this._resize, this));
}
this._hashChange();
$(window).on('hashchange', $.proxy( this._hashChange, this ));
//$(window).on('resize', $.proxy( this._responsiveCollapsed, this ));
},
_hashChange: function()
{
if ( location.hash && $(location.hash).length > 0 ) {
var element = $(location.hash + '.pp-tabs-label');
if ( element && element.length > 0 ) {
location.href = '#';
$('html, body').animate({
scrollTop: ( element.parents('.pp-advanced-tabs').offset().top - 50 ) + 'px'
}, 500, function() {
if ( ! element.hasClass('pp-tab-active') ) {
element.trigger('click');
}
});
}
}
},
_labelClick: function(e)
{
var label = $(e.target).closest('.pp-tabs-label'),
index = label.data('index'),
wrap = label.closest('.pp-advanced-tabs'),
scroll_top = wrap.data('scroll-top'),
tabs_wrap = label.closest('.pp-advanced-tabs-wrapper');
// Toggle the responsive icons.
//allIcons.addClass('fa-plus');
//icon.removeClass('fa-plus');
if ( tabs_wrap.hasClass('at-vertical') ) {
if ( scroll_top === 'yes' ) {
$('html, body').animate({
scrollTop: wrap.offset().top
}, 500 );
}
}
// Toggle the tabs.
wrap.find('.pp-tabs-labels:first > .pp-tab-active').removeClass('pp-tab-active');
wrap.find('.pp-tabs-panels:first > .pp-tabs-panel > .pp-tab-active').removeClass('pp-tab-active');
wrap.find('.pp-tabs-panels:first > .pp-tabs-panel > .pp-tabs-label').removeClass('pp-tab-active');
wrap.find('.pp-tabs-labels:first > .pp-tabs-label[data-index="' + index + '"]').addClass('pp-tab-active');
wrap.find('.pp-tabs-panels:first > .pp-tabs-panel > #pp-advanced-tabs-content-' + index ).addClass('pp-tab-active');
wrap.find('.pp-tabs-panels:first > .pp-tabs-panel > .pp-tabs-label[data-index="' + index + '"]').addClass('pp-tab-active');
$(document).trigger('ppe-tabs-switched', [ wrap.find( '#pp-advanced-tabs-content-' + index ) ]);
},
_responsiveLabelClick: function(e)
{
var label = $(e.target).closest('.pp-tabs-label'),
wrap = label.closest('.pp-advanced-tabs'),
index = label.data('index'),
content = label.siblings('.pp-advanced-tabs-content'),
activeContent = wrap.find('.pp-advanced-tabs-content.pp-tab-active'),
activeIndex = activeContent.data('index');
// Should we proceed?
if (index === activeIndex) {
activeContent.slideUp('normal');
activeContent.removeClass('pp-tab-active');
this.elemClass.find('.pp-tabs-panels .pp-tabs-label').removeClass('pp-tab-active');
//$(this.elemClass + ' .pp-tabs-panels .pp-tabs-label').removeClass('pp-tab-active');
wrap.removeClass('pp-tabs-animation');
return;
}
if (wrap.hasClass('pp-tabs-animation')) {
return;
}
// Toggle the icons.
//allIcons.addClass('fa-plus');
//icon.removeClass('fa-plus');
// Run the animations.
wrap.addClass('pp-tabs-animation');
activeContent.slideUp('normal');
content.slideDown('normal', function(){
wrap.find('.pp-tab-active').removeClass('pp-tab-active');
wrap.find('.pp-tabs-label[data-index="' + index + '"]').addClass('pp-tab-active');
content.addClass('pp-tab-active');
wrap.removeClass('pp-tabs-animation');
// Content Grid module support.
if ( 'undefined' !== typeof $.fn.isotope ) {
content.find('.pp-content-post-grid').isotope('layout');
}
if(label.offset().top < $(window).scrollTop() + 100) {
$('html, body').animate({ scrollTop: label.offset().top - 100 }, 500, 'swing');
}
$(document).trigger('ppe-tabs-switched', [ content ]);
});
},
_resize: function()
{
this.elem.find('.at-vertical').each($.proxy(this._resizeVertical, this));
},
_resizeVertical: function()
{
var wrap = this.elem.find('.at-vertical'),
labels = wrap.find('.pp-tabs-labels'),
panels = wrap.find('.pp-tabs-panels');
panels.css('min-height', labels.height() + 'px');
},
_responsiveCollapsed: function()
{
if ( $(window).innerWidth() < 769 ) {
if ( this.settings.responsiveClosed ) {
this.elemClass.find('.pp-tabs-panels .pp-tabs-label.pp-tab-active').trigger('click');
}
this.elemClass.find('.pp-tabs-panels').css('visibility', 'visible');
}
}
};
})(jQuery);