var Slideshow = {
	transitionTime: 500,
	transitionWait: 4000,
	timer: null,
	timeoutRestart: null
};

function startTimer() {
	if (Slideshow.timer == null) {
		Slideshow.timer = setInterval("slideSwitch()", Slideshow.transitionWait);
	}
}

function stopTimer() {
	if (Slideshow.timer) {
		clearInterval(Slideshow.timer);
		Slideshow.timer = null;
	}
}

function slideSwitch() {
    var $active = jQuery('#slideshow img.active');
    if ( $active.length == 0 ) {
		$active = jQuery('#slideshow img:last');
	}

    var $next = ($active.next().length != 0) ? $active.next() : jQuery('#slideshow img:first');
	
	$active.addClass('last-active');
	jQuery('#slideshow_pagination li.current').removeClass('current');
	jQuery('#slideshow_pagination li').eq($next.index()).addClass('current');
	$next
		.css({opacity: 0.0})
		.addClass('active')
		.animate({opacity: 1.0}, Slideshow.transitionTime, function() {
			$active.css({opacity: 0.0}).removeClass('active last-active');
		});
}

jQuery(document).ready(function() {
	// Set the initial image to a random index.
	var initialIndex = Math.floor(Math.random()*jQuery('#slideshow img').length);
	jQuery('#slideshow img').removeClass('active').eq(initialIndex).addClass('active');
	jQuery('#slideshow_pagination li').removeClass('current').eq(initialIndex).addClass('current');
	
	startTimer();

	jQuery('#slideshow_pagination ul').mouseover(function() {
		if (Slideshow.timeoutRestart) {
			clearTimeout(Slideshow.timeoutRestart);
			Slideshow.timeoutRestart = null;
		}
	});
	jQuery('#slideshow_pagination ul').mouseout(function() {
		Slideshow.timeoutRestart = setTimeout("startTimer()", Slideshow.transitionWait);
	});

	jQuery('#slideshow_pagination a').click(function() { return false; });
	
	jQuery('#slideshow_pagination a').mouseover(function() {
		stopTimer();
		var $active = jQuery('#slideshow img.active');
		if ( $active.length == 0 ) {
			$active = jQuery('#slideshow img:last');
		}

		var nextIndex = jQuery(this).parent().index();
		if ($active.index() != nextIndex) {
			var $next = jQuery('#slideshow img').eq(nextIndex);

			$active.addClass('last-active');
			jQuery('#slideshow_pagination li.current').removeClass('current');
			jQuery('#slideshow_pagination li').eq($next.index()).addClass('current');
			$next
				.css({opacity: 0.0})
				.addClass('active')
				.animate({opacity: 1.0}, Slideshow.transitionTime, function() {
					$active.css({opacity: 0.0}).removeClass('active last-active');
				});
		}
		return false;
	});
});

