var fnInitializeSlideshow = function( oSlideshowElement, iTransitionDelay, iTransitionSpeed ) {
	var iTransitionDelay = iTransitionDelay || 5000;
	var iTransitionSpeed = iTransitionSpeed || 2000;
	var oSlides = $( 'div.slide', oSlideshowElement );
	var oSlideLinks = $( 'div.slide-links a', oSlideshowElement );
	var iActiveSlide = 0;

	var iTimeoutId = 0;
	var bIsAnimating = false;
	var aiSlideQueue = [];

	oSlideLinks.removeClass( 'active' );
	oSlides.hide();
	$( oSlideLinks[iActiveSlide] ).addClass( 'active' );
	$( oSlides[iActiveSlide] ).show();


	var fnSelectNextSlide = function() {

		var iNextSlide = iActiveSlide + 1;

		if( iNextSlide >= oSlides.length ) {
			iNextSlide = 0;
		}
		fnSelectSlide( iNextSlide );
	}

	var fnSelectSlide = function( iSlide ) {

		if ( !bIsAnimating ) {

			if ( iActiveSlide != iSlide ) {

				$('.slideshowButtons li').removeClass('active');
				$('#slideshowButton' + iSlide ).addClass('active');

				$( oSlideLinks[iActiveSlide] ).removeClass( 'active' );

				bIsAnimating = true;
				$( oSlides[iActiveSlide] ).css( 'z-index', 1 );
				$( oSlides[iActiveSlide] ).fadeOut( parseInt( $( oSlides[iSlide] ).attr( 'speed' ) ) || iTransitionSpeed, function() {
					bIsAnimating = false;
					if ( aiSlideQueue.length > 0 ) {
						fnSelectSlide( aiSlideQueue.shift() );
					}
				} );

				iActiveSlide = iSlide;

				$( oSlideLinks[iActiveSlide] ).addClass( 'active' );
				$( oSlides[iActiveSlide] ).css( 'z-index', 0 );
				$( oSlides[iActiveSlide] ).fadeIn( iTransitionSpeed /2  );
			}

			clearTimeout( iTimeoutId );
			iTimeoutId = setTimeout( fnSelectNextSlide, $( oSlides[iActiveSlide] ).attr( 'delay' ) || iTransitionDelay);
		} else {
			aiSlideQueue.push( iSlide );
		}
	}

	oSlideLinks.each( function( iIndex, oElement ) {
		$( oElement ).click( function() {
			fnSelectSlide( iIndex );
			return false;
		} );
	} );

	fnSelectSlide( 0 );

	$('.slideshowButtons li').hover().css('cursor', 'pointer');
	$('.slideshowButtons li').click( function() {
		var selSlide = parseInt( $(this).attr( 'id' ).substr( 15 ) );
		fnSelectSlide(selSlide);
	});
}

$( function() {
	fnInitializeSlideshow( '#container' );
} );
