/*
 * Description: Rotates through a set of images.
 * Author: Philip Siedow-Thompson (psiedowthompson@gmail.com)
 * Requires: jquery-1.4.2.js or greater.
 * Version: $Id: com-siedowthompson-rossi-imagerotator.js 10 2010-03-10 04:16:55Z Philip $
 */
 
 //forward declarations
 var pageImageSets;
 var pageImageDisplayedSet;
 
(function(){
	
	//if the pageImageSets are are not defined then don't run script
	if(!pageImageSets) {
		
		return false;
	}
	
	//initialize
	var imageSets = pageImageSets;
	var currentImageSet = 0;
	var imageAppearInterval = 0.75 * 1000;	//msec time between each image appear effects
	var imageSetChangeInterval = 10 * 1000;	//msec time between set change
	var imageCache = {};
	
	/*
	 * Randomizes an array setting the current index as the last element in 
	 * the new array (this is destructive to the passed in array!)
	 */
	var RandomizeArray = function(a_srcArray, a_currentIndex) {
		var tArray = [];
		var tVal =  a_srcArray[a_currentIndex];
		a_srcArray.splice(a_currentIndex,1);
		
		while(a_srcArray.length > 0) {
			var rIndex = Math.round(Math.random() * (a_srcArray.length - 1));
			
			tArray.push(a_srcArray[rIndex]);
			a_srcArray.splice(rIndex,1);
		}
		
		tArray.push(tVal);
		
		return tArray;
	}
	
	/*
	 * Preloads an array of imgs from filenames
	 * and calls a callback when finished.
	 */
	var LoadImages = function(a_srcArray, a_callback) {
		var nLoaded = 0;
		var onImgLoad = function() {
			nLoaded++;
			
			if(nLoaded==a_srcArray.length) {
				a_callback();
			}
		}
		
		for(var i=0; i<a_srcArray.length; i++) {
			var tImg = document.createElement('img');
				$(tImg).load(onImgLoad);
				tImg.src = a_srcArray[i];
				
			imageCache[a_srcArray[i]] = tImg;
		}
	}
	
	/*
	 * Displays the images sequentialy with an animation.
	 */
	var DisplayImages = function(a_srcArray, a_callback) {
		var tdiImageContainers = $('#column1-embellishment div');
		var tdiImageNum = 0;
		var tdiTimer = window.setInterval(function() {
			
			//Create the img
			var tdiImg = imageCache[a_srcArray[tdiImageNum]];
				$(tdiImg).addClass('fadeInImage');
				
			//add the img to the dom
			tdiImageContainers[tdiImageNum].appendChild(tdiImg);
			
			//visual effect
			$(tdiImg).fadeIn(imageAppearInterval * 2);
			
			//check if this is the last img
			tdiImageNum++;
			if(tdiImageNum>=a_srcArray.length || tdiImageNum>=tdiImageContainers.length) {
				window.clearInterval(tdiTimer);
				a_callback();
				
			}
		},imageAppearInterval);
	}
	
	/*
	 * Starts the script after the dom is loaded
	 */
	$(window).ready(function() {
		//randomize the imageSets array
		imageSets = RandomizeArray(imageSets, ((pageImageDisplayedSet)?pageImageDisplayedSet:0));
	
		//start the animating sequence
		window.setInterval(function() {
			LoadImages(imageSets[currentImageSet], function(){
				DisplayImages(imageSets[currentImageSet], function(){
					currentImageSet++;
					if(currentImageSet>=imageSets.length) {
						currentImageSet = 0;
					}
				});
			});
			
		},imageSetChangeInterval);
	});
	
})();
