/*
jquery plugin	: Tabs
Written by		: Brian Liccardo
Designed by		: Mike Payne
Version			: 0.2
Date			: 2009-09-29

Usage:
<ul id="mytabs">
	<li class="active" rel="divtab1">Tab 1</li>
	<li rel="divtab2">Tab 2</li>
</ul>
<div id="divtab1">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	: 'normal', // 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
				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;
			
			// set de activate active tab
			visible_tab.removeClass(settings.activeClass);
			
			// activate clicked tab
			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) {
				//alert('Call Toggle In ' + settings.toggle_in_function);
				//setTimeout ( settings.toggle_in_function , 0 );
				//this[settings.toggle_in_function]();
				//if (jQuery.isFunction(settings.toggle_in_function) == true) {
					this[settings.toggle_in_function]();
				//}
			}
		}
		
		function callToggleOutFunction() {
			if (settings.toggle_out_function !== false && settings.toggle_out_function !== undefined) {
				//alert('Call Toggle Out ' + settings.toggle_out_function);
				//setTimeout ( settings.toggle_out_function , 0 );
				//this[settings.toggle_out_function]();
				//if (jQuery.isFunction(settings.toggle_out_function) == true) {
					this[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);