/* Better(?) Image cross fader (C)2004 Patrick H. Lauke aka redux
* Inspired by Steve at Slayeroffice http://slayeroffice.com/code/imageCrossFade/ 
* preInit "Scheduler" idea by Cameron Adams aka The Man in Blue http://www.themaninblue.com/writing/perspective/2004/09/29/ 
*/
/* general variables */
var	previousImage, currentImage, galleryImages, gallery, galleryId = 'gallery';
//preInit();

function preInit() {
	/* hide the image gallery list before even onload is triggered */
	if ((document.getElementById)&&(gallery=document.getElementById(galleryId))) {
		gallery.style.visibility = "hidden";
		//gallery.style.visibility = "visible";
		clearTimeout(preInitTimer);
	} else {
		preInitTimer = setTimeout("preInit()",2);
	}
}

function fader(imageNumber,opacity) {
	var obj=galleryImages[imageNumber];
	if (obj.style.MozOpacity!=null) { obj.style.MozOpacity = (opacity/100) - .001; } 
	else if (obj.style.opacity!=null) { obj.style.opacity = (opacity/100) - .001; } 
	else if (obj.style.filter!=null) { obj.style.filter = "alpha(opacity="+opacity+")"; }
}

function fadeInit() {
	if (document.getElementById) {
		//preInit(); /* shouldn't be necessary, but IE can sometimes get ahead of itself and trigger fadeInit first */
		gallery=document.getElementById(galleryId);
		galleryImages = gallery.childNodes; /* get all child nodes... */
		for(i=0;i<galleryImages.length;i++) {
			galleryImages[i].style.position='absolute';
			galleryImages[i].style.top=0;
			galleryImages[i].style.zIndex=0;
			fader(i,0); /* set their opacity to transparent */
		}
		gallery.style.visibility = 'visible'; /* make the list visible again */
		currentImage=0; /* initialise a few parameters to get the cycle going */
		previousImage=galleryImages.length-1;
		opacity=100;
		fader(currentImage,100);
		window.setTimeout("crossfade(100)", 3000); /* start the whole crossfade process after a second's pause */
	}
}

function crossfade(opacity) {
    if (opacity < 101) {
        fader(currentImage,opacity);
        opacity += 5;
        window.setTimeout("crossfade("+opacity+")", 60);
    } else {
        fader(previousImage,0);
        previousImage=currentImage;
        currentImage+=1;
        if (currentImage>=galleryImages.length) { currentImage=0; }
        galleryImages[previousImage].style.zIndex = 0;
        galleryImages[currentImage].style.zIndex = 100;
        opacity=0;
        window.setTimeout("crossfade("+opacity+")", 3000);
    }	
}

/* initialise fader by hiding image object first */
addEvent (window,'load',fadeInit)

// addEvent and removeEvent cross-browser event handling for IE5+,  NS6 and Mozilla By Scott Andrew
function addEvent(elm, evType, fn, useCapture) {
 if (elm.addEventListener){
   elm.addEventListener(evType, fn, useCapture);
   return true;
 } else if (elm.attachEvent){
   var r = elm.attachEvent("on"+evType, fn);
   return r;
 }
} 
