/*--------------------------------------------------------------------

-- Slideshow Javascript file

--------------------------------------------------------------------*/


function prepareSlideshows() {

	if (slideshowSettings != undefined) {

		var wrapper;
		var wrapperIdentifier;
		var showSettings;
		var i;
		
		for (i = 0; i < slideshowSettings.length; i++)
		{
			showSettings = slideshowSettings[i];
			wrapperIdentifier = '#' + showSettings.wrapper;
			wrapper = $(wrapperIdentifier);

			wrapper.find('div.slideshow-image').css('display', 'none');

			showSettings.currentSlide = 0;
			showSettings.paused = 0;

			wrapper.find('div.slideshow-image').eq(showSettings.currentSlide).fadeIn(showSettings.fadeTime);
			wrapper.find('.slideshow-controls .previous').click(onSlideshowPrevious);
			wrapper.find('.slideshow-controls .next').click(onSlideshowNext);
			wrapper.find('.slideshow-controls ul.index > li > a').click(onSlideshowIndex);
			
			setTimeout(function(){rotateSlideshow(showSettings);}, showSettings.period);
		}
	}
}

function getSlideshowSettingsForWrapper(wrapperIdentifier) {
	
	var i;
	var showSettings;
	var retValue;
	
	for (i = 0; i < slideshowSettings.length; i++)
	{
		showSettings = slideshowSettings[i];
		
		if (showSettings.wrapper == wrapperIdentifier) {
			
			retValue = showSettings;
			break;
		}
	}
	return (retValue);
}

function onSlideshowPrevious() {
	var wrapper = $(this).parents('div.slideshow-wrapper');
	var wrapperId = wrapper.attr('id');
	var showSettings = getSlideshowSettingsForWrapper(wrapperId);
	
	pauseSlideshow(showSettings);
	iterateSlideshow(showSettings, 'backward', showSettings.fadeTime / 2);
}

function onSlideshowIndex() {
	var wrapper = $(this).parents('div.slideshow-wrapper');
	var wrapperId = wrapper.attr('id');
	var showSettings = getSlideshowSettingsForWrapper(wrapperId);

	var slideNumber = parseInt($(this).parent().attr('class').match(/slide-(\d+)/)[1]);
	
	if (showSettings.currentSlide != slideNumber) {

		pauseSlideshow(showSettings);
		var slideshowImages = wrapper.find('div.slideshow-image');

		// Half fade time for selected transitions.
		var fadeTime = showSettings.fadeTime / 2;
		
		slideshowImages.eq(showSettings.currentSlide).fadeOut(fadeTime);
		wrapper.find('div.slideshow-controls ul.index li.slide-' + showSettings.currentSlide).removeClass('selected');

		showSettings.currentSlide = slideNumber;

		slideshowImages.eq(showSettings.currentSlide).fadeIn(fadeTime);
		wrapper.find('div.slideshow-controls ul.index li.slide-' + showSettings.currentSlide).addClass('selected');
	}
}

function onSlideshowNext() {
	var wrapper = $(this).parents('div.slideshow-wrapper');
	var wrapperId = wrapper.attr('id');
	var showSettings = getSlideshowSettingsForWrapper(wrapperId);

	pauseSlideshow(showSettings);
	iterateSlideshow(showSettings, 'forward', showSettings.fadeTime / 2);
}

function iterateSlideshow(showSettings, direction, fadeTime) {
	
	var wrapperIdentifier = '#' + showSettings.wrapper;
	var wrapper = $(wrapperIdentifier);
	var slideshowImages = wrapper.find('div.slideshow-image');

	slideshowImages.eq(showSettings.currentSlide).fadeOut(fadeTime);
	wrapper.find('div.slideshow-controls ul.index li.slide-' + showSettings.currentSlide).removeClass('selected');

	if (direction == 'backward') {

		showSettings.currentSlide--;
		
		if (showSettings.currentSlide < 0) {
			
			showSettings.currentSlide = slideshowImages.length - 1;
		}
	} else {
		
		showSettings.currentSlide++;
		
		if (showSettings.currentSlide >= slideshowImages.length) {
			
			showSettings.currentSlide = 0;
		}
	}
	slideshowImages.eq(showSettings.currentSlide).fadeIn(fadeTime);
	wrapper.find('div.slideshow-controls ul.index li.slide-' + showSettings.currentSlide).addClass('selected');
}

function rotateSlideshow(showSettings) {

	if (showSettings.paused <= 0) {

		iterateSlideshow(showSettings, 'forward', showSettings.fadeTime);
		setTimeout(function(){rotateSlideshow(showSettings);}, showSettings.period);
	}
}

function pauseSlideshow(showSettings) {

	showSettings.paused++;
	
	setTimeout(function(){unpauseSlideshow(showSettings);}, showSettings.pausePeriod);
}

function unpauseSlideshow(showSettings) {
	
	showSettings.paused--;
	
	if (showSettings.paused <= 0) {
		
		showSettings.paused = 0;
		rotateSlideshow(showSettings);
	}
}

