
(function($) {
	
	
	var activeTab = null;
	var activeSection = null;
	
	
	$.tabbr = {
		
	};
	
	
	$.tabbr.options = {
		activeTabClass: 'active',
		inactiveTabClass: 'inactive',
		activeSectionClass: 'visible',
		inactiveSectionClass: 'invisible',
		tabTargetAttribute: 'href',
		sectionAnimationEffect: 'fade',
		sectionAnimationDuration: 400,
		tabActivateEvent: 'click'
	};
	
	
	
	$.fn.tabbr = function(options) {
		
		$.tabbr.options = $.extend($.tabbr.options, options || {});
		
		
		return this.each(function() {
			var el = $(this).attr($.tabbr.options.tabTargetAttribute);
			
			if($(this).hasClass($.tabbr.options.activeTabClass)) {
				activeTab = $(this);
				activeSection = $(el);
				
				$(el).stop().show();
			} else {
				$(el).stop().hide();
			}
			
			$(this).bind($.tabbr.options.tabActivateEvent, function(e) {
				e.stopPropagation();
				e.preventDefault();
				
				activateTab($(this));
			});
			
			
		});
	}
	
	
	/**
	 * @param jQuery section jQuery DOM collection
	 */
	function activateSection(section) {
		deactivateCurrentSection();
		
		section.removeClass($.tabbr.options.inactiveSectionClass);
		section.addClass($.tabbr.options.activeSectionClass);
		
		switch($.tabbr.options.sectionAnimationEffect) {
			case 'toggle':
				section.stop().show();
				break;
				
			case 'fade':
			default:
				section.stop().fadeIn($.tabbr.options.sectionAnimationDuration);
				break;
		}
		
		activeSection = section;
	}
	
	
	
	/**
	 * @param jQuery section jQuery DOM collection
	 */
	function deactivateSection(section) {
		section.removeClass($.tabbr.options.activeSectionClass);
		section.addClass($.tabbr.options.inactiveSectionClass);
		
		switch($.tabbr.options.sectionAnimationEffect) {
			case 'toggle':
				section.stop().hide();
				break;
				
			case 'fade':
			default:
				section.stop().hide();
				//section.stop().fadeOut($.tabbr.options.sectionAnimationDuration);
				break;
		}
	}
	
	
	
	function deactivateCurrentSection() {
		deactivateSection(activeSection);
	}
	
	
	
	/**
	 * @param jQuery tab jQuery DOM collection
	 */
	function activateTab(tab) {
		deactivateCurrentTab();
		
		tab.removeClass($.tabbr.options.inactiveTabClass);
		tab.addClass($.tabbr.options.activeTabClass);
		
		activeTab = tab;
		
		activateSection($(tab.attr($.tabbr.options.tabTargetAttribute)));
	}
	
	
	
	/**
	 * @param jQuery tab jQuery DOM collection
	 */
	function deactivateTab(tab) {
		tab.removeClass($.tabbr.options.activeTabClass);
		tab.addClass($.tabbr.options.inactiveTabClass);
	}
	
	
	
	function deactivateCurrentTab() {
		deactivateTab(activeTab);
	}
	
	
	
})(jQuery);

