/*___________________________________________________________________________________________________________________

	mediaCT webinterieur - www.mediact.nl - info@mediact.nl - 050 5799393 - Groningen - The Netherlands
	copyright: http://creativecommons.org/licenses/by-nc-nd/2.0/deed.nl
	author: Jasper Zeinstra (jasper@mediact.nl)
	18-01-2007 - tested on: Mozilla Firefox 2, Internet Explorer 5.5, 6.0 and 7.0

_____________________________________________________________________________________________________________________*/



function Photofader(sImageContainerId, sImageId, iStartNumber, iPauseSeconds, iFadeSeconds, bRandomBegin, bRandomNext) {
	// functions
	this.getFadingImages 	= getFadingImages;
	this.setOpacityImages 	= setOpacityImages;
	this.setStartImage 		= setStartImage;
	this.setNextImage 		= setNextImage;
	this.fadeImage 			= fadeImage;
	this.setOpacity 		= setOpacity;
	
	// variables
	var g_sImageContainerId 	= sImageContainerId; 	// ID name of the container containing the images.
	var g_sImageId				= sImageId; 			// ID name of the img, following with an image number. start counting at the var g_iStartNumber
	var g_iStartNumber			= iStartNumber; 		// Start Number of the images ID
	var g_iPauseSeconds 		= iPauseSeconds;
	var g_iFadeSeconds 			= iFadeSeconds;
	var g_bRandomBegin			= bRandomBegin;
	var g_bRandomNext			= bRandomNext;
	
	
	var g_aImages				= new Array();
	var g_iCount				= 1;
	var g_iCurrentNumber		= "";
	var g_oCurrentImage			= "";
	var g_iNextNumber			= "";
	var g_oNextImage			= "";
	
	
	// Set the images from the "g_sImageContainerId" that have an id "g_sImageId" in the "g_aImages" array
	function getFadingImages() {
		if(document.getElementById(g_sImageContainerId) && document.getElementById(g_sImageId + g_iStartNumber)) {
			while(document.getElementById(g_sImageId + g_iCount)) {
				g_aImages.push(document.getElementById(g_sImageId + g_iCount).src);
				g_iCount++;
			}
			g_iCount--;
			
			setOpacityImages();
			setStartImage();
		}
	}
	
	function setOpacityImages() {
		for(i=1; i <= g_iCount; i++) {
			var oImageObj = document.getElementById(g_sImageId + i);
			setOpacity(oImageObj, 0);
		}
	}
	
	// Define a starting image, this can be set to random or the first image from the array
	function setStartImage() {
		if(g_bRandomBegin) {
			while(g_iCurrentNumber == "" || g_iCurrentNumber < g_iStartNumber ) {
				g_iCurrentNumber = Math.round(g_iCount * Math.random());
			}
		} else {
			g_iCurrentNumber = g_iStartNumber;
		}
		
		g_oCurrentImage = document.getElementById(g_sImageId + g_iCurrentNumber);
		
		setNextImage();
		setOpacity(g_oCurrentImage, 100);
		
		setTimeout(fadeImage,g_iPauseSeconds * 1000);
	}
	
	// Define the next image that will fade
	function setNextImage() {
		if(g_bRandomNext) {
			g_iNextNumber = g_iCurrentNumber;
			while(g_iNextNumber == g_iCurrentNumber || g_iNextNumber < g_iStartNumber ) {
				g_iNextNumber = Math.round(g_iCount * Math.random());
			}
		} else {
			if(g_iCurrentNumber == g_iCount) {
				g_iNextNumber = g_iStartNumber;
			} else {
				g_iNextNumber = g_iCurrentNumber + 1;
			}
		}
		
		g_oNextImage = document.getElementById(g_sImageId + g_iNextNumber);
		if(g_oNextImage) {
			setOpacity(g_oNextImage, 0);
		} else {
			alert('error loading image number ' + g_iNextNumber);
			setNextImage();
		}
	}
	
	// Fade the image out
	function fadeImage() {		
		// if the nextImage has a higher view index then the current image, fade in the next image
		if(g_iNextNumber > g_iCurrentNumber) {
			var iImageOpacity 	= g_oNextImage.style.opacity * 100;
			var iFadeSteps 		= 100 / (30 * g_iFadeSeconds);
			
			if(iImageOpacity < 100) {
				iImageOpacity += iFadeSteps;
				setOpacity(g_oNextImage,iImageOpacity);
			  
				setTimeout(fadeImage,30);
			} else {
				setOpacity(g_oCurrentImage, 0);
				setOpacity(g_oNextImage, 100);
				
				g_oCurrentImage = g_oNextImage;
				g_iCurrentNumber = g_iNextNumber;
				
				setNextImage();
				setTimeout(fadeImage,g_iPauseSeconds * 1000);
			}
		}
		// if the nextImage has a lower view index then the current image, fade out the current image
		else {
			setOpacity(g_oNextImage,100);
			
			var iImageOpacity 	= g_oCurrentImage.style.opacity * 100;
			var iFadeSteps 		= 100 / (30 * g_iFadeSeconds);
			
			if(iImageOpacity > 0) {
				iImageOpacity -= iFadeSteps;
				setOpacity(g_oCurrentImage,iImageOpacity);
			  
				setTimeout(fadeImage,30);
			} else {
				setOpacity(g_oCurrentImage, 0);
				
				g_oCurrentImage = g_oNextImage;
				g_iCurrentNumber = g_iNextNumber;
				
				setNextImage();
				setTimeout(fadeImage,g_iPauseSeconds * 1000);
			}
		}
	}
	
	// set the opacity of an image
	function setOpacity(imageObj, opacity) {
		opacityVal = Math.round(opacity);
		
		
		// Mozilla and Firefox
		imageObj.style.MozOpacity = opacityVal/100;
	
		// Safari 1.2, Firefox and Mozilla, CSS3
		imageObj.style.opacity = opacityVal/100;
		
		// IE - Win
	//	imageObj.style.filter = "alpha(opacity:"+opacityVal+")";
		imageObj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+opacityVal+")";
	
	
		// Safari Version < 1.2
		// Konqueror
		imageObj.style.KHTMLOpacity = opacityVal/100;
	}
}