(function ($)
{
	$(document).ready(function ()
	{
		$.prepareSlides();
	});
	
	$.slides = [ ];
	$.slidesDelay = 6000;
	$.slidesDuration = 667;
	
	$.prepareSlides = function ()
	{
		var slides = $("div.slides");
		
		slides.each(function (index)
		{
			var current = $(this);
			
			$.slides[index] =
			{
				"slides": $(this).children("div.slide"),
				"current": 0,
				"timeout": null,
				"active": false
			};
			
			var dots = $("<ul />").addClass("dots");
			var height = 0;
			
			$.slides[index].slides.each(function (slideIndex)
			{
				$(this).show();
				
				if ($(this).outerHeight() > height)
				{
					height = $(this).outerHeight();
				}
				
				if ($.slides[index].slides.length > 1)
				{
					var dot = $("<li />").append($("<a />",
					{
						"href": "javascript:void(0);"
					})
					.click(function ()
					{
						if (!$(this).parent().hasClass("active"))
						{
							$.showSlide(index, slideIndex);
						}
					}));
					
					if (slideIndex == 0)
					{
						dot.addClass("active");
					}
					else if (current.hasClass("fade"))
					{
						$(this).fadeOut(0);
					}
					else
					{
						$(this).css("top", "-" + $(this).outerHeight() + "px");
					}
					
					dots.append(dot);
				}
			});
			
			$(this).css("min-height", height + "px");
			
			if ($.slides[index].slides.length > 1)
			{
				$(this).append(dots);
				
				var extraTime = (index == 0) ? 0 : index * Math.floor($.slidesDelay / slides.length);
				
				$.slides[index].timeout = setTimeout("jQuery.nextSlide(" + index + ");", $.slidesDelay + extraTime);
			}
		});
	};
	
	$.previousSlide = function (index)
	{
		var slide = $.slides[index].current - 1;
		
		if (slide < 0)
		{
			slide = $.slides[index].slides.length - 1;
		}
		
		$.showSlide(index, slide);
	};
	
	$.nextSlide = function (index)
	{
		var slide = $.slides[index].current + 1;
		
		if (slide >= $.slides[index].slides.length)
		{
			slide = 0;
		}
		
		$.showSlide(index, slide);
	};
	
	$.showSlide = function (index, slideIndex)
	{
		if (!$.slides[index].active)
		{
			$.slides[index].active = true;
			
			if ($.slides[index].timeout != null)
			{
				clearTimeout($.slides[index].timeout);
			}
			
			var parent = $.slides[index].slides.removeClass("animate").eq($.slides[index].current).addClass("animate").parent();
			var height = parent.height();
			
			$.slides[index].current = slideIndex;
			
			var timeout = setTimeout("jQuery.slides[" + index + "].slides.first().parent().find(\"ul.dots li\").removeClass(\"active\").eq(jQuery.slides[" + index + "].current).addClass(\"active\");", Math.floor($.slidesDuration / 2));
			var slide = $.slides[index].slides.eq($.slides[index].current).addClass("animate");
			
			if (parent.hasClass("fade"))
			{
				slide.parent().children("div.animate")
				.fadeToggle($.slidesDuration, function ()
				{
					$.slides[index].active = false;
				});
			}
			else
			{
				slide.css("top", "-" + height + "px").parent().children("div.animate")
				.animate(
				{
					"top": "+=" + height + "px"
				},
				{
					"duration": $.slidesDuration,
					"easing": "easeOutExpo",
					"queue": false,
					
					"complete": function ()
					{
						$.slides[index].active = false;
					}
				});
			}
			
			$.slides[index].timeout = setTimeout("jQuery.nextSlide(" + index + ");", $.slidesDelay + $.slidesDuration);
		}
	};
})(jQuery);

