﻿jQuery.fn.switchTab = function(settings)
{
	settings = jQuery.extend({
		defaultIndex: 0,
		onCSStext: "on",
		titleSpan: "dt span",
		container: "dd",
		delayTime: 250,
		interTime: 0,
		trigger: "click",
		effect: "",
		omitLinks: false,
		callback: false,
		debug: ""
	},
	settings,
	{
		version: 120
	});

	this.each(function()
	{
		var st;
		var idx = -1;
		var obj = jQuery(this);
	
		if(settings.omitLinks)
		{
			settings.titleSpan = settings.titleSpan + "[href^='#']";
		}
	
		var title = obj.find(settings.titleSpan);
		var cntnr = obj.find(settings.container);
		var count = title.length;
		
		var ShowPage = function(index)
		{
			if (index != idx)
			{
				title.eq(idx).removeClass(settings.onCSStext);
				cntnr.hide();
				
				obj.find(settings.titleSpan + ":eq(" + index + ")").addClass(settings.onCSStext);
			
				if (settings.delayTime < 250 && settings.effect != "")
				  settings.effect = "";
				
				if (settings.effect == "fade")
				{
					obj.find(settings.container + ":eq(" + index + ")").fadeIn({queue: false, duration: 250});
				}
				else if(settings.effect == "slide")
				{
					obj.find(settings.container + ":eq(" + index + ")").slideDown({queue: false, duration: 250});
				}
				else
				{
					obj.find(settings.container + ":eq(" + index + ")").show();
				}
				
				idx = index;
				
				if (settings.callback)
				  settings.callback(index);
			}
		};
		
		var ShowNext = function()
		{
			title.eq(idx).removeClass(settings.onCSStext);
			cntnr.hide();
		
			if (++idx >= count)
			  idx = 0;
			
			title.eq(idx).addClass(settings.onCSStext);
			cntnr.eq(idx).show();
		};
		
		ShowPage(settings.defaultIndex);

		if (settings.interTime > 0)
		{
			var sInterval = setInterval(function(){ShowNext();}, settings.interTime);
		}

		title.each(function(i, e)
		{
			if (settings.trigger == "click")
			{
				jQuery(e).click(function()
				{
					ShowPage(i);
					return false;
				});
			}
			else if (settings.delayTime > 0)
			{
				jQuery(e).hover(function()
				{
					st = setTimeout(function(){ShowPage(i);st = null;}, settings.delayTime);
				},
				
				function()
				{
					if (st != null) clearTimeout(st);
				});
			}
			else
			{
				jQuery(e).mouseover(function()
				{
					ShowPage(i);
				});
			}
		});
	});
	
	return this;
};

