/**
 * tab-style.js
 */

$(function(){
	
	// Class
	var TabActionManager = function(nClass, sClass){
		var normalClass   = nClass;
		var selectedClass = sClass;
		var previousTab   = null;
		var previousId    = -1;
		return {
			setId: function(id) {
				previousId = id;
			},
			id: function() {
				return previousId;
			},
			setTab: function(tab) {
				if(previousTab != null) {
					previousTab.addClass(normalClass);
					previousTab.removeClass(selectedClass);
				}
				previousTab = tab;
			}
		};
	};
	
	// Variables
	var tabSpeed             = 1000;
	var tabTimerCurrentCount = 0;
	var tabTimerMaxCount     = 10;
	var tabTimerInt;
	var tabTotal = $('div.tab-entry-holder').length;
	var tabActionManager = new TabActionManager('tab-normal', 'tab-selected');
	tabActionManager.setTab($('a.tab-menu').eq(0));
	tabActionManager.setId(0);
	
	// Window Events
	if(tabTotal > 1) {
		$(window).bind('focus', function(){
			tabTimerCurrentCount = 0;
			clearInterval(tabTimerInt);
			tabTimerInt = window.setInterval(automateTab, tabSpeed);
		});
		$(window).bind('blur', function(){
			tabTimerCurrentCount = 0;
			clearInterval(tabTimerInt);
		});
	}
	
	// Events
	$('a.tab-menu').bind('click', function(e){
		
		// If Animation is happenging
		if($('div.tab-entry-holder').filter(':animated').length > 0 || tabTotal < 2) {
			return;
		}
		
		var currentTarget = $(e.currentTarget)
		var currentId     = currentTarget.attr('id');
		var results       = currentId.match(/tab-menu-([0-9]{1,})/i);
		var targetId      = parseInt(results[1]);
		if(tabActionManager.id() == targetId) return;
		
		currentTarget.removeClass('tab-normal');
		currentTarget.addClass('tab-selected');

		// Update the tab content
		var currentTab  = $('div#tab-content-' + tabActionManager.id());
		var nextTab    = $('div#tab-content-' + targetId);
		currentTab.stop(true, true).animate({opacity: 0}, 1000, 'linear', function(){
			$(this).css('filter', 'none');
		});
		nextTab.css('display', 'block');
		nextTab.css('opacity', 0);
		nextTab.stop(true, true).animate({opacity: 1}, 500, 'linear', function(){
			$(this).css('filter', 'none');
		});
		
		// Update TimerCount
		tabTimerCurrentCount = 0;
		
		// Update Mediator Data
		tabActionManager.setTab(currentTarget);
		tabActionManager.setId(targetId);
		
		Cufon.replace('a.tab-normal');
		Cufon.replace('a.tab-selected');
	});
	
	// Automate
	if(tabTotal > 1) {
		window.automateTab = function() {
			if(++ tabTimerCurrentCount > tabTimerMaxCount) {
				tabTimerCurrentCount = 0;
				var nextId = tabActionManager.id() + 1;
				if(nextId >= tabTotal) nextId = 0;
				$('a.tab-menu').eq(nextId).trigger('click');
			}
		}
		tabTimerInt = window.setInterval(automateTab, tabSpeed); 
	}
	
});
