/*
 * Generic image rotation script
 * 
 * Author: Alex Panayotopoulos
 * Copyright (c) 2009 VisitScotland.com
 * 
 * Requires: prototype.js, scriptaculous.js, effects.js
 */

/*
 * Start a new set of rotating images
 * 
 * cssSelector:	selector to match all images/divs to fade in and out
 * fadeTimeMs:	time in ms that a image takes to fade in/out
 * flipTimeMs:	time in ms that an image shows before it fades out
 */
function startNewRotation(cssSelector, fadeTimeMs, flipTimeMs) {
	var fadeImgs = $$(cssSelector);
	
	/* For benefit of IE6, which can't deal with 'first-child' selector */
	if (fadeImgs.length > 0) {
		fadeImgs[0].setStyle({display: 'block', zIndex: 1});
	}
	
	if (fadeImgs.length > 1) {
		var arrayName = 'rotating images ' + cssSelector;
		window[arrayName] = fadeImgs;
		
		/* All but first image: show, but make transparent and send to back */
		for (var i = 1; i < fadeImgs.length; i++) {
			fadeImgs[i].setStyle({opacity: 0, display: 'block', zIndex: 0});
		}
	
		scheduleNextRotation(arrayName, 0, fadeTimeMs, flipTimeMs);
	}
}

/* Schedule a call to rotateImages(...) */
function scheduleNextRotation(arrayName, index, fadeTimeMs, flipTimeMs) {
	var jsCall = "rotateImages('" + arrayName + "', " + index + ", " + fadeTimeMs + ", " + flipTimeMs + ")";
	setTimeout(jsCall, flipTimeMs);
}

/* Rotate to the next image in the sequence */
function rotateImages(arrayName, currIndex, fadeTimeMs, flipTimeMs) {
	var fadeImgs = window[arrayName];
	var nextIndex = (currIndex + 1) % fadeImgs.length;
	
	new Effect.Opacity(fadeImgs[currIndex], {from: 1, to: 0, duration: (fadeTimeMs / 1000)});
	new Effect.Opacity(fadeImgs[nextIndex], {from: 0, to: 1, duration: (fadeTimeMs / 1000)});
	fadeImgs[currIndex].setStyle({zIndex: 0});
	fadeImgs[nextIndex].setStyle({zIndex: 1});
	
	scheduleNextRotation(arrayName, nextIndex, fadeTimeMs, flipTimeMs);
}