//--- TABS

(function($) { 
	$.fn.jtabs = function (o)
	{
		o = $.extend(
		{
			tabs: '',
			panels: '',
			mevent: 'click',
			before: function(){},
			after: function(){},
			activeIndex: 0,						// 1.1 : permit to activate a tab/panel by its index at init (or not if false)
			desactivation: false,				// 1.1 : permit to desactivate at n+1 event, when passed to true
			auto: 0									// 1.2 : permit to switch automatically specifying a delay	
		}, o);

		var wrap = null; if ($(this).length > 0) { wrap = $(this); } else { wrap = $('body'); }

		$(wrap).each(function(){
			var wrapCurrent = $(this);
			var tabs = $(o.tabs, wrapCurrent);
			var panels = $(o.panels, wrapCurrent);

			tabs.mouseenter(function(){ $(this).addClass('hovering'); }).mouseleave(function(){ $(this).removeClass('hovering'); });
			panels.mouseenter(function(){ $(this).addClass('hovering'); }).mouseleave(function(){ $(this).removeClass('hovering'); });

			var desactivation = o.desactivation;

			var activeIndex = o.activeIndex;
			if (parseInt(activeIndex) >= 0) {
				tabs.eq(activeIndex).addClass('active');
				panels.eq(activeIndex).addClass('active');
			}

			var tabChange = function (tabNext) {

				if (!$(o.panels + '.active').hasClass('hovering'))
				{

					var tabNextIndex = tabs.index(tabNext);

					if (!tabNext.hasClass('active') || desactivation)
					{
						o.before(wrapCurrent);

						var tabInactive = false;
						if (tabNext.hasClass('active') && desactivation) { tabInactive = true; }

						tabs.removeClass('active');
						panels.removeClass('active');

						if (!tabInactive) {
							tabs.eq(tabNextIndex).addClass('active');
							panels.eq(tabNextIndex).addClass('active');
						}

						o.after(wrapCurrent);

						if (o.auto > 0) {
							clearInterval(tabs_interval);
							tabs_interval = setInterval(tabs_rotate, o.auto);
						}
					}
				}
			};

			if (o.auto > 0) {
				var tabs_rotate = function rotation () {
					var tabNext = $(o.tabs + '.active', wrapCurrent).next(tabs);
					if(tabNext.length < 1){ tabNext = tabs.eq(0); }
					tabChange(tabNext);
				};
				var tabs_interval = setInterval(tabs_rotate, o.auto);
			}

			tabs.bind(o.mevent,function(){
				tabChange($(this));
				//return false;
			});
		});
	};
})(jQuery);
