/*
jquery plugin	: Tabs
Written by		: Brian Liccardo
Designed by		: Mike Payne
Version			: 0.4
Date			: 2010-08-02

History
	0.4 Added 'data' attribute to li tabs. if filled out will override the active class. this is for custom active classes per tab
	0.3	Added 'rel' on content divs. if filled in it will call that function when content is visible and when its to be hidden
Usage:
<ul id="mytabs">
	<li class="active" rel="divtab1" data="add custom active class here">Tab 1</li>
	<li rel="divtab2">Tab 2</li>
</ul>
<div id="divtab1" rel="togglejsfunction">Content 1</div>
<div id="divtab2">Content 2</div>
<script type="text/javascript">
//<!CDATA[[
$(document).ready(function () {
	$('#mytabs').tabs({
		activeClass	: 'active', // class to add/remove to <li> on clicks
		fadeSpeed	: 'fast'	// speed of fade
	});
});
//]]>
</script>
*/
(function($){
	$.fn.tabs = function(settings) {
		var defaults = {
			clickAction	: 'fade', // fade, normal
			fadeSpeed	: 'fast',
			activeClass	: 'active',
			startTab	: 0,
			toggle_in_function : false,
			toggle_out_function : false
		}
		
		// override default settings with overridden vars
		var settings =  $.extend(defaults, settings);
		
		// get all li's
		var li_tabs = this.children('li');
		
		// hide content divs on start
		var div_name; var tab_name;
		for (var j=0; j < li_tabs.length; j++) {
			div_name = li_tabs.eq(j).attr('rel');
			if (j == settings.startTab) {
				// activate tab
				if (li_tabs.eq(j).attr('data')) {
					li_tabs.eq(j).addClass(li_tabs.eq(j).attr('data'));
				} else {
					li_tabs.eq(j).addClass(settings.activeClass);
				}
			} else {
				// hide div
				jQuery('#'+div_name).css({'display' : 'none'});
			}
		}
			
		// get visible div
		function getVisibleDiv() {
			for (var j=0; j < li_tabs.length; j++) {
				var unhidden_li = jQuery( '#' + li_tabs.eq(j).attr('rel'));
				if ( unhidden_li.css('display') != 'none') {
					return unhidden_li;
				}
			}
		}
		
		// get visible tab
		function getVisibleTab() {
			for (var j=0; j < li_tabs.length; j++) {
				var unhidden_li = jQuery( '#' + li_tabs.eq(j).attr('rel'));
				if ( unhidden_li.css('display') != 'none') {
					return li_tabs.eq(j);
				}
			}
		}
		
		function clickTab() {
			// get current visible div
			var visible_div = getVisibleDiv();
			var visible_tab = getVisibleTab();
			
			// set div to be fadded in
			settings.fadeInDiv = jQuery(this).attr('rel');
			
			// call toggle out
			callToggleOutFunction();
			
			// get toggle functions
			settings.toggle_in_function = jQuery('#'+settings.fadeInDiv).attr('rel');
			settings.toggle_out_function = jQuery('#'+settings.fadeInDiv).attr('rel');
			
			// if clicked tab is the active tab return false
			if (visible_div.attr('id') == jQuery('#'+settings.fadeInDiv).attr('id')) return false;
			
			// de activate active tab
			if (visible_tab.attr('data')) {
				visible_tab.removeClass(visible_tab.attr('data'));
			} else {
				visible_tab.removeClass(settings.activeClass);
			}
			
			// activate clicked tab
			if (jQuery(this).attr('data')) {
				jQuery(this).addClass(jQuery(this).attr('data'));
			} else {
				jQuery(this).addClass(settings.activeClass);
			}		

			// set visible div to hidden
			visible_div.css({'display' : 'none'});
			
			// click action switch
			switch (settings.clickAction) {
				case 'fade':
					// call fade out
					visible_div.fadeOut(settings.fadeSpeed, fadeInCallBack);
					break;
				case 'normal':
					// unhide clicked div
					jQuery('#'+settings.fadeInDiv).css({'display' : ''});
					// call toggle function
					callToggleInFunction();
					break;
			}
		}
		
		function fadeInCallBack() {
			jQuery('#'+settings.fadeInDiv).fadeIn(settings.fadeSpeed, callToggleInFunction);
		}
		
		function callToggleInFunction() {
			//if (settings.toggle_in_function !== false && settings.toggle_in_function !== undefined) {
				//settings.toggle_in_function();
			//}
		}
		
		function callToggleOutFunction() {
			//if (settings.toggle_out_function !== false && settings.toggle_out_function !== undefined) {
				//settings.toggle_out_function();
			//}
		}
		
		// assign event so the tabs work
		for (var i=0; i < li_tabs.length; i++) {
			li_tabs.eq(i).click(clickTab);
		}
	}
})(jQuery);
