





// jQuery.noConflict();

(function($){

$.sfs = $.extend($.sfs, 
{
	tabs :
	{
		settings : 
		{
			rotationDelay:10000, 
			hoverDelay:500, 
			activeClass:'active',
			panel : 
			{
				data: {},
				setActiveClass : function(id, val)
				{
					$.sfs.tabs.settings.panel.setData(id, 'activeClass', val);
				},
				setData : function(id, par, val)
				{
					$.sfs.tabs.settings.panel.data[id] = $.sfs.tabs.settings.panel.data[id]? $.sfs.tabs.settings.panel.data[id] : {};
					$.sfs.tabs.settings.panel.data[id][par] = val;
				},
				getData : function(id, par)
				{
					var r = $.sfs.tabs.settings.panel.data[id];
					r = r? r[par] : false;
					return r;
				}
			}
		},
		init : function()
		{
			$('.js-tab-panel').each(function(i, p)
			{
				// detect tab-mode
				if($(p).hasClass('js-tab-mode-hover')){
					$.sfs.tabs.panel.create.hoverTabs(p);
				}
				else if ($(p).hasClass('js-tab-mode-over')){
					$.sfs.tabs.panel.create.overTabs(p);
				}
				else if ($(p).hasClass('js-tab-mode-click')){
					$.sfs.tabs.panel.create.clickTabs(p);
				}
				else if ($(p).hasClass('js-tab-mode-toggle')){
					$.sfs.tabs.panel.create.toggleTabs(p);
				}
				else  {
					$.sfs.tabs.panel.create.clickTabs(p);
				}
			});
		},
		manager : 
		{
			data : {panel:[]},
			addPanel : function(_p)
			{
				var c = $('.js-tab-container:first', _p);
				var content = $('.' + $(c).attr('id'), _p);
				if (!content[0]) content = $('.' + $(c).attr('id'));
				
				var defaultCollapsed = $(_p).hasClass('js-tab-default-collapsed');
				var fade = $(_p).hasClass('js-tab-transition-fade');
				var autoFocus = $(_p).hasClass('js-tab-auto-focus');
								
				// active tab
				var activeClass = ($.sfs.tabs.settings.panel.getData($(c).attr('id'), 'activeClass'))? $.sfs.tabs.settings.panel.getData($(c).attr('id'), 'activeClass') : $.sfs.tabs.settings.activeClass;
				var at = $('.'+activeClass, c);
				// add panel
				$.sfs.tabs.manager.data.panel.push({element:_p, content:content, activeTab:(at[0])? at : false, defaultTab:(at[0])? at : false, autoFocus:autoFocus, defaultTimeout:false, rotationTimeout:false, defaultCollapsed:defaultCollapsed, fade:fade});
				_p.sfsTabPanelId = $.sfs.tabs.manager.data.panel.length-1;
				// add panel active class
				$.sfs.tabs.manager.setPanelData(_p.sfsTabPanelId, 'activeClass', activeClass);
				// rotation
				if($(_p).hasClass('js-tab-rotation')) $.sfs.tabs.rotate(_p);
			},
			getPanel : function(id)
			{
				return $.sfs.tabs.manager.data.panel[id].element;
			},
			setPanelData : function(id, type, val)
			{
				$.sfs.tabs.manager.data.panel[id][type] = val;
			},
			getPanelData : function(id, type)
			{
				return ($.sfs.tabs.manager.data.panel[id])? $.sfs.tabs.manager.data.panel[id][type] : false;
			},
			clearPanelTimeout : function(id, type)
			{
				clearTimeout($.sfs.tabs.manager.data.panel[id][type]);
			},
			addTab : function(_p, _t, _i)
			{
				var pId = _p.sfsTabPanelId;
				var defaultCollapsed = $.sfs.tabs.manager.getPanelData(pId, 'defaultCollapsed');
				
				_t.sfsTabIndex = _i;
				_t.sfsTabPanelId = pId;
				
				var c_1 = $(_t).hasClass($.sfs.tabs.manager.getPanelData(pId, 'activeClass')) && !defaultCollapsed;
				var c_2 = $.sfs.tabs.manager.getPanelData(pId, 'autoFocus') && !defaultCollapsed;
				
				if(c_1) { 
					$.sfs.tabs.manager.getContent(_p, _t).show(); 
				}
				else if (c_2 && _i==0) { 
					$(_t).addClass($.sfs.tabs.manager.getPanelData(pId, 'activeClass'));
					$.sfs.tabs.manager.getContent(_p, _t).show(); 
					$.sfs.tabs.manager.setActiveTab(_p, _t);
				}
			},
			getContent : function(_p, _t)
			{
				return $($.sfs.tabs.manager.data.panel[_p.sfsTabPanelId].content[_t.sfsTabIndex]);
			},
			setActiveTab : function(_p, _t)
			{
				$.sfs.tabs.manager.data.panel[_p.sfsTabPanelId].activeTab = (_t)? $(_t) : _t;
			},
			getActiveTab : function(_p)
			{
				var t = $.sfs.tabs.manager.data.panel[_p.sfsTabPanelId].activeTab;
				return (t[0])? t[0] : false ;
			},
			set : function(_par, _val){$.sfs.tabs.manager.data[_par] = _val;},
			get : function(_par){return $.sfs.tabs.manager.data[_par];}
		},
		panel : 
		{
			create :
			{
				hoverTabs : function(_p)
				{
					$.sfs.tabs.manager.addPanel(_p);
					var activateDefault = [];
					
					var tabs = $('.js-tab-element', $('.js-tab-container:first', _p));
					tabs = tabs[0]? tabs : $('.js-tab-container:first', _p).children();
					
					tabs.each(function(i, t)
					{
						$.sfs.tabs.manager.addTab(_p, t, i);
						
						activateDefault[i] = ($(t).hasClass('js-tab-prevent-default'))? false : true;
						if(activateDefault[i]){
							$(t).hover(
								function(){
									if(!this.sfsTabRotationStopped) { this.sfsTabRotationStopped=true; $.sfs.tabs.manager.clearPanelTimeout(this.sfsTabPanelId, 'rotationTimeout') }
									$.sfs.tabs.activateTab(this);
								},
								function(){$.sfs.tabs.activateDefaultTab(this)}
							);
						} else {
							$(t).hover(
								function(){
									if(!this.sfsTabRotationStopped) { this.sfsTabRotationStopped=true; $.sfs.tabs.manager.clearPanelTimeout(this.sfsTabPanelId, 'rotationTimeout') }
									$.sfs.tabs.activateTab(this);
								},
								function(){}
							);
						}
					});
					var pId = _p.sfsTabPanelId;
					$.sfs.tabs.manager.getPanelData(pId, 'content')
					.each(function(i,c){
						c.sfsTabPanelId=pId;
						if(activateDefault[i])
						{
							$(c).hover
							(
								function(){
									$.sfs.tabs.manager.clearPanelTimeout(this.sfsTabPanelId, 'defaultTimeout');
								},
								function(){
									var dt = $.sfs.tabs.manager.getPanelData(this.sfsTabPanelId, 'defaultTab');
									if(dt[0]) {
										$.sfs.tabs.activateDefaultTab(dt[0]);
									} else {
										$.sfs.tabs.activateDefaultTab(this);
									}
								}
							);
						}
					});
				},
				overTabs : function(_p)
				{
					$.sfs.tabs.manager.addPanel(_p);
					
					var tabs = $('.js-tab-element', $('.js-tab-container:first', _p));
					tabs = tabs[0]? tabs : $('.js-tab-container:first', _p).children();
					
					tabs.each(function(i, t)
					{
						$.sfs.tabs.manager.addTab(_p, t, i);
						$(t).mouseover(function(){
							if(!this.sfsTabRotationStopped) { this.sfsTabRotationStopped=true; $.sfs.tabs.manager.clearPanelTimeout(this.sfsTabPanelId, 'rotationTimeout') }
							$.sfs.tabs.activateTab(this)
						});
					});
				},
				clickTabs : function(_p)
				{
					$.sfs.tabs.manager.addPanel(_p);
					
					var tabs = $('.js-tab-element', $('.js-tab-container:first', _p));
					tabs = tabs[0]? tabs : $('.js-tab-container:first', _p).children();
					
					tabs.each(function(i, t)
					{
						$.sfs.tabs.manager.addTab(_p, t, i);
						$(t).click(function()
						{
							if(!this.sfsTabRotationStopped) {this.sfsTabRotationStopped=true; $.sfs.tabs.manager.clearPanelTimeout(this.sfsTabPanelId, 'rotationTimeout') }
							$.sfs.tabs.activateTab(this);
							return false;
						});
					});
				},
				toggleTabs : function(_p)
				{
					$.sfs.tabs.manager.addPanel(_p);
					
					var tabs = $('.js-tab-element', $('.js-tab-container:first', _p));
					tabs = tabs[0]? tabs : $('.js-tab-container:first', _p).children();
					
					tabs.each(function(i, t)
					{
						$.sfs.tabs.manager.addTab(_p, t, i);
						$(t).click(function()
						{
							var pId = this.sfsTabPanelId;
							if(!this.sfsTabRotationStopped) {this.sfsTabRotationStopped=true; $.sfs.tabs.manager.clearPanelTimeout(pId, 'rotationTimeout') }
							var p = $.sfs.tabs.manager.getPanel(pId);
							var t = $.sfs.tabs.manager.getActiveTab(p);
							if(t===this) 
							{ $.sfs.tabs.deactivateActiveTab(this) }
							else{ $.sfs.tabs.activateTab(this) }
							return false;
						});
					});
				}
			}
		},
		activateTab : function(_t, _defaultCollapsed)
		{
			var pId = _t.sfsTabPanelId;
			var p = $.sfs.tabs.manager.getPanel(pId);
			var fade = $.sfs.tabs.manager.getPanelData(pId, 'fade');
			
			$.sfs.tabs.manager.clearPanelTimeout(pId, 'defaultTimeout');
			
			if(!_defaultCollapsed && !fade) 
			{
				$.sfs.tabs.deactivateActiveTab(_t);
				$.sfs.tabs.manager.getContent(p, _t).show();
				$.sfs.tabs.manager.setActiveTab(p, _t);
				$(_t).addClass($.sfs.tabs.manager.getPanelData(pId, 'activeClass'));
			} else if (!_defaultCollapsed && fade) {
				if(!$.sfs.tabs.manager.getPanelData(pId, 'transitionActive'))
				{
					$.sfs.tabs.manager.setPanelData(pId, 'transitionActive', true);
					var fadedContent = $.sfs.tabs.manager.getContent(p, _t);
					$.sfs.tabs.deactivateActiveTab(_t, fadedContent);
					$.sfs.tabs.manager.setActiveTab(p, _t);
					$(_t).addClass($.sfs.tabs.manager.getPanelData(pId, 'activeClass'));
				}
			} else 
			{
				$.sfs.tabs.deactivateActiveTab(_t);
				$.sfs.tabs.manager.setActiveTab(p, _t);
				$(_t).addClass($.sfs.tabs.manager.getPanelData(pId, 'activeClass'));
			}
		},
		deactivateActiveTab : function(_t, fadedContent)
		{
			var pId = _t.sfsTabPanelId;
			var p = $.sfs.tabs.manager.getPanel(pId);
			var t = $.sfs.tabs.manager.getActiveTab(p);
			var fade = $.sfs.tabs.manager.getPanelData(pId, 'fade');
			
			if(t) {
				$(t).removeClass($.sfs.tabs.manager.getPanelData(pId, 'activeClass'));
				if(fadedContent)
				{
					$.sfs.tabs.manager.getContent(p, t).fadeOut('normal', function(){
						$(this).hide();
						$(fadedContent).fadeIn('slow', function(){
							$.sfs.tabs.manager.setPanelData(pId, 'transitionActive', false);
						});
					});
				} else {
					$.sfs.tabs.manager.getContent(p, t).hide();
				}
				$.sfs.tabs.manager.setActiveTab(p, false);
			}
		},
		activateDefaultTab : function(_t)
		{
			var pId = _t.sfsTabPanelId;
			var dt = $.sfs.tabs.manager.getPanelData(pId, 'defaultTab');
			var defaultCollapsed = $.sfs.tabs.manager.getPanelData(pId, 'defaultCollapsed');
			
			if(dt[0]){
				$.sfs.tabs.manager.setPanelData(pId, 'defaultTimeout', window.setTimeout(function(){$.sfs.tabs.activateTab(dt[0], defaultCollapsed)}, $.sfs.tabs.settings.hoverDelay));
			} else {
				$.sfs.tabs.manager.setPanelData(pId, 'defaultTimeout', window.setTimeout(function(){$.sfs.tabs.deactivateActiveTab(_t)}, $.sfs.tabs.settings.hoverDelay));
			}
		},
		rotate : function(_p)
		{
			var pId = _p.sfsTabPanelId;
			$.sfs.tabs.manager.clearPanelTimeout(pId, 'rotationTimeout');
			
			if($.sfs.tabs.manager.get('domContentLoaded'))
			{
				var at = $.sfs.tabs.manager.getActiveTab(_p);
				var tabContainer = $('.js-tab-container:first', _p);
				var tabHasTabElementClass = (at)? $(at).hasClass('js-tab-element') : $('.js-tab-element', tabContainer).get(0);
				
				if(at)
				{
					if(tabHasTabElementClass)
					{
						var next = $(at).nextAll('.js-tab-element');
						next = (next[0])? next[0] : $(at).siblings('.js-tab-element').eq(0)[0];
					}
					else 
					{
						var next = $(at).next().eq(0);
						next = (next[0])? next[0] : $('.js-tab-container:first', _p).children().eq(0)[0];
					}
				} 
				else 
				{
					if(tabHasTabElementClass)
					{
						var next = $('.js-tab-element', tabContainer).eq(0);
						next = (next[0])? next[0] : false;
					}
					else
					{
						var next = $('.js-tab-container:first', _p).children().eq(0);
						next = (next[0])? next[0] : false;
					}
				}
				
				if(next) $.sfs.tabs.activateTab(next);
			}
			$.sfs.tabs.manager.setPanelData(pId, 'rotationTimeout', window.setTimeout(function(){$.sfs.tabs.rotate(_p)}, $.sfs.tabs.settings.rotationDelay));
		}
	}
});

$(function(){
	$.sfs.tabs.init();
	$.sfs.tabs.manager.set('domContentLoaded', true);
});

})(jQuery);

