(function ($) {
	if (!$) return;

	$.fn.extend ({tabs: function (options)
	{
		var options = $.extend (true, {}, $.fn.tabs.defaults, options);

		return $($(this).filter('dl').each (function ()
		{
			var offset = 0;
			var dtAll = $(this).children('dt');
			var ddAll = $(this).children('dd');

			$(this).addClass (options.classes.dl)

			dtAll.each (function (i)
			{
				var dt = $(this);
				var dd = dt.next('dd');
				var isInit = (i == options.initTab);

				dt
					.addClass (options.classes.clickable)
					.addClass (isInit? options.classes.on: options.classes.off)
					.css ({left: offset+'px'})
					.click (function () {
						dtAll.addClass (options.classes.off).removeClass (options.classes.on);
						options.anim.hide (ddAll, options);

						dt.removeClass (options.classes.off).addClass (options.classes.on);
						options.anim.show (dd, options);
					});

				if (!isInit) options.anim.hide (dd, options);
				offset += dt.outerWidth();
			});
		}));
	}});

	// Default params
	$.fn.tabs.defaults =
	{
		classes:
		{
			dl: 'tabbed',
			off: 'off',
			on: 'on',
			clickable: 'clickable'
		},
		duration: 'fast',
		initTab: 0,
		anim:
		{
			show: function (elements, options) 
			{
				if ($.support.opacity)
					$(elements).css({'visibility':'visible','opacity':0}).animate ({'opacity':1}, options.duration);
				else
					$(elements).fadeIn (options.duration);
			},
			hide: function (elements, options) 
			{ 
				if ($.support.opacity)
					$(elements).css ({'visibility':'hidden'});
				else
					$(elements).hide ();
			}
		}
	};

})(jQuery);