$(window).load(function ()
{
	var SlideWidth = 850;
	var SlideDuration = 400;
	var AutoSlideDuration = 17000;
	var SlideContainer = $(".campaign-slideshow");
	var SlideList = $(".campaign-slideshow > .slides > ul");
	var SlideNav = $(".campaign-slideshow > .navigation > ul > li");
	var SlideCount = SlideList.children("li").length;
	var CurrentSlideIndex = 0;
	var AutoSlideTimeout = null;

	var CancelAutoSlide = function ()
	{
		if(AutoSlideTimeout)
		{
			clearTimeout(AutoSlideTimeout);
			AutoSlideTimeout = null;
		}
	};

	var GotoSlide = function (index, duration, jump)
	{
		if(SlideList.filter(":animated").length > 0)
			return;

		if(!jump && index == 0 && CurrentSlideIndex == SlideCount - 1)
		{
			// Wrap around to first slide
			SlideList.animate({ left: "-" + (SlideWidth * (SlideCount + 1)) }, duration, "swing", function () { SlideList.css("left", -SlideWidth); });
		}
		else if(!jump && index == SlideCount - 1 && CurrentSlideIndex == 0)
		{
			// Wrap around to last slide
			SlideList.animate({ left: 0 }, duration, "swing", function () { SlideList.css("left", -(SlideWidth * SlideCount)); });
		}
		else
		{
			// Behave normally
			SlideList.animate({ left: -(SlideWidth * (index + 1)) }, duration, "swing");
		}

		CurrentSlideIndex = index;
		SlideNav.removeClass("current");
		$(SlideNav[index]).addClass("current");
	};

	var NextSlide = function ()
	{
		var NewIndex = CurrentSlideIndex + 1;
		var Duration = SlideDuration;

		if(NewIndex >= SlideCount)
		{
			NewIndex = 0;
			Duration *= 1.5;
		}

		if(arguments.length < 1 || (arguments.length > 0 && arguments[0]))
			CancelAutoSlide();

		GotoSlide(NewIndex, Duration, false);
	};

	var PreviousSlide = function ()
	{
		var NewIndex = CurrentSlideIndex - 1;
		var Duration = SlideDuration;

		if(NewIndex < 0)
		{
			NewIndex = SlideCount - 1;
			Duration *= 1.5;
		}

		CancelAutoSlide();
		GotoSlide(NewIndex, Duration, false);
	};

	var PrevArrow = $(document.createElement("a"));
	var NextArrow = $(document.createElement("a"));

	PrevArrow.addClass("previous");
	PrevArrow.attr("href", "#");
	PrevArrow.click(PreviousSlide);
	PrevArrow.append("Previous Slide");

	NextArrow.addClass("next");
	NextArrow.attr("href", "#");
	NextArrow.click(NextSlide);
	NextArrow.append("Next Slide");

	SlideContainer.append(PrevArrow, NextArrow);
	$(SlideNav[0]).addClass("current");

	for(var i = 0; i != SlideNav.length; ++i)
		$(SlideNav[i]).data("index", i);

	SlideNav.click(function (e)
	{
		CancelAutoSlide();
		GotoSlide($(this).data("index"), SlideDuration, true);
		e.preventDefault();
	});

	var FirstSlide = SlideList.children("li").first().clone(false);
	var LastSlide = SlideList.children("li").last().clone(false);

	SlideList.css("width", SlideWidth * (SlideCount + 2));
	SlideList.prepend(LastSlide);
	SlideList.append(FirstSlide);
	SlideList.css("left", -SlideWidth);

	var AutoSlide = function () { NextSlide(false); AutoSlideTimeout = setTimeout(AutoSlide, AutoSlideDuration + SlideDuration); };

	AutoSlideTimeout = setTimeout(AutoSlide, AutoSlideDuration);
});
