(function ($)
{
	$.fn.extend(
	{
		bosseeSlideshow: function (options)
		{
			var defaults = {
					images			: null,
					interval		: 5,
					transition		: 'fade',
					loop			: true,
					slideshowDiv	: null,
					navClass		: null,
					navOnClass		: null
			};
			
			var transitions = {
					fade	: {'in': 'fadeIn', 'out': 'fadeOut'}
			};
			
			var currentIdx = 0;
			var slideInterval;
			
			var options = $.extend(defaults, options);
			
			function activateNav()
			{
				$('.'+options.navClass).click(
					function()
					{
						var navId = $(this).attr('id');
						var dashPos = navId.indexOf('-');
						currentIdx = navId.substring(dashPos+1);
						clearInterval(slideInterval);
						
						// clear the nav
						$('.'+options.navClass).each(
							function()
							{
								$(this).removeClass(options.navOnClass);
							}
						);
						
						// highlight this one
						$(this).addClass(options.navOnClass);
						
						changeSlide();
						
						// restart
						startInterval();
					}
				);
			}
			
			function changeSlide()
			{
				var slides = $('#'+options.slideshowDiv+' img');
				var active = $('#'+options.slideshowDiv+' img.current-slide');
				var next = $(slides[currentIdx]);
				
				active.addClass('last-slide');
				next.css({opacity: 0.0})
					.addClass('current-slide')
					.animate(
								{opacity: 1.0},
								1000,
								function()
								{
									active.removeClass('current-slide last-slide');
								}
							);
			}
			
			function nextSlide()
			{
				var active = $('#'+options.slideshowDiv+' img.current-slide');
				
				var next;
				
				if (active.next().length)
				{
					next = active.next();
					var divs = $('.'+options.navClass);
					$(divs[currentIdx]).removeClass(options.navOnClass);
					currentIdx++;
					$(divs[currentIdx]).addClass(options.navOnClass);
				}
				else
				{
					var divs = $('.'+options.navClass);
					next = $('#'+options.slideshowDiv+' img.first');
					$(divs[currentIdx]).removeClass(options.navOnClass);
					currentIdx = 0;
					$(divs[currentIdx]).addClass(options.navOnClass);
				}
				
				
				active.addClass('last-slide');
				next.css({opacity: 0.0})
					.addClass('current-slide')
					.animate(
								{opacity: 1.0},
								1000,
								function()
								{
									active.removeClass('current-slide last-slide');
								}
							);
			}
			
			function startInterval()
			{
				//(options.interval*1000)
				if (options.interval == 0)
				{
					slideInterval = 0;
				}
				else
				{
					slideInterval = setInterval(nextSlide, (options.interval*1000));
				}
			}
			
			return this.each(function()
					{
						options.slideshowDiv = $(this).attr('id');
						if (options.navClass)
						{
							activateNav();
						}
						
						if ($('#'+options.slideshowDiv+' img').length > 1)
						{
							startInterval();
						}
					}
			);
		}
	}
	);
}
)(jQuery);