/*

Better(?) Image fader (C)2004 Patrick H. Lauke aka redux

Inspired by Richard Rutter / Clagnut http://www.clagnut.com/blog/1299/ 

Original concept and code adapted from Couloir http://www.couloir.org/ 

preInit "Scheduler" idea by Cameron Adams aka The Man in Blue
http://www.themaninblue.com/writing/perspective/2004/09/29/ 

*/

/* general variables */

var gfadeTargetId = 'photo11'; /* change this to the ID of the fadeable object */
var gfadeTargetId2 = 'photo22'; /* change this to the ID of the fadeable object */
var gfadeTargetId3 = 'photo33'; /* change this to the ID of the fadeable object */
var gfadeTargetId4 = 'photo44'; /* change this to the ID of the fadeable object */
var gfadeTargetId5 = 'photo55'; /* change this to the ID of the fadeable object */
var gfadeTargetId6 = 'photo66'; /* change this to the ID of the fadeable object */
var gfadeTargetId7 = 'photo77'; /* change this to the ID of the fadeable object */
var	preInitTimer;
var	preInitTimer2;
var	preInitTimer3;
var	preInitTimer4;
var	preInitTimer5;
var	preInitTimer6;
var	preInitTimer7;
preInit(gfadeTargetId);
preInit(gfadeTargetId2);
preInit(gfadeTargetId3);
preInit(gfadeTargetId4);
preInit(gfadeTargetId5);
preInit(gfadeTargetId6);
preInit(gfadeTargetId7);

/* functions */

function preInit(target) {
	var fadeTargetId = target;
	var fadeTarget;
	/* an inspired kludge that - in most cases - manages to initially hide the image
	   before even onload is triggered (at which point it's normally too late, and a nasty flash
	   occurs with non-cached images) */
	if ((document.getElementById)&&(fadeTarget=document.getElementById(fadeTargetId))) {
		//fadeTarget.style.visibility = "hidden";
		fadeTarget.style.visibility = 'visible';
		if (fadeTarget.style.MozOpacity!=null) {  
			/* Mozilla's pre-CSS3 proprietary rule */
			fadeTarget.style.MozOpacity = 0.001;
		} else if (fadeTarget.style.opacity!=null) {
			/* CSS3 compatible */
			fadeTarget.style.opacity = 0.001;
		} else if (fadeTarget.style.filter!=null) {
			/* IE's proprietary filter */
			fadeTarget.style.filter = "alpha(opacity=0)";
		}
		if(target=='photo11') clearTimeout(preInitTimer);
		else if(target=='photo22') clearTimeout(preInitTimer2);
		else if(target=='photo33') clearTimeout(preInitTimer3);
		else if(target=='photo44') clearTimeout(preInitTimer3);
		else if(target=='photo55') clearTimeout(preInitTimer3);
		else if(target=='photo66') clearTimeout(preInitTimer3);
		else if(target=='photo77') clearTimeout(preInitTimer3);
	} else {
		if(target=='photo11')
		preInitTimer = setTimeout("preInit('"+target+"')",2);
		else if(target=='photo22')
		preInitTimer2 = setTimeout("preInit('"+target+"')",2);
		else if(target=='photo33')
		preInitTimer3 = setTimeout("preInit('"+target+"')",2);
		else if(target=='photo44')
		preInitTimer3 = setTimeout("preInit('"+target+"')",2);
		else if(target=='photo55')
		preInitTimer3 = setTimeout("preInit('"+target+"')",2);
		else if(target=='photo66')
		preInitTimer3 = setTimeout("preInit('"+target+"')",2);
		else if(target=='photo77')
		preInitTimer3 = setTimeout("preInit('"+target+"')",2);
	}
}

function fadeInit(target) {
	var fadeTarget = document.getElementById(target);
	if (document.getElementById) {
		/* get a handle on the fadeable object, to make code later more manageable */
		preInit(target); /* shouldn't be necessary, but IE can sometimes get ahead of itself and
		trigger fadeInit first */
		/* set the initial opacity in a (hopefully) cross browser way
		   notice that because of the way the image is in front, and not obfuscated
		   by another object we need to "fade out", i don't need a fallback mechanism
		   to show/hide the covering object...the image is just there, full stop */

		if (fadeTarget.style.MozOpacity!=null) {  
			/* Mozilla's pre-CSS3 proprietary rule */
			fadeTarget.style.MozOpacity = 0.001;
		} else if (fadeTarget.style.opacity!=null) {
			/* CSS3 compatible */
			fadeTarget.style.opacity = 0.001;
		} else if (fadeTarget.style.filter!=null) {
			/* IE's proprietary filter */
			fadeTarget.style.filter = "alpha(opacity=0)";
		}
		/* make the object visible again */
		//fadeTarget.style.visibility = 'visible';
		window.setTimeout("fadeIn(0,'"+target+"')", 500);
	}
}

function fadeIn(opacity,target) {
	var fadeTarget = document.getElementById(target);
	if (fadeTarget) {
		if (opacity <= 100) {
			if (fadeTarget.style.MozOpacity!=null) {
				/* Mozilla's pre-CSS3 proprietary rule */
				if(opacity != 0)
				fadeTarget.style.MozOpacity = (opacity/100)-.001;
				else
				fadeTarget.style.MozOpacity = 0.001;
				/* the .001 fixes a glitch in the opacity calculation which normally results in a flash when reaching 1 */
			} else if (fadeTarget.style.opacity!=null) {
				/* CSS3 compatible */
				if(opacity != 0)
				fadeTarget.style.opacity = (opacity/100)-.001;
				else
				fadeTarget.style.opacity = 0.001;
			} else if (fadeTarget.style.filter!=null) {
				/* IE's proprietary filter */
				if(opacity == 0)
				fadeTarget.style.filter = "alpha(opacity=1)";
				else
				fadeTarget.style.filter = "alpha(opacity="+opacity+")";
				/* worth noting: IE's opacity needs values in a range of 0-100, not 0.0 - 1.0 */ 
			}
			opacity += 10;
			window.setTimeout("fadeIn("+opacity+",'"+target+"')", 10);
		}
	}
}

/* initialise fader by hiding image object first */
window.setTimeout("fadeInit('"+gfadeTargetId+"')", 2*1000);
window.setTimeout("fadeInit('"+gfadeTargetId2+"')", 4*1000);
window.setTimeout("fadeInit('"+gfadeTargetId3+"')", 5*1000);
window.setTimeout("fadeInit('"+gfadeTargetId4+"')", 6*1000);
window.setTimeout("fadeInit('"+gfadeTargetId5+"')", 7*1000);
window.setTimeout("fadeInit('"+gfadeTargetId6+"')", 8*1000);
window.setTimeout("fadeInit('"+gfadeTargetId7+"')", 4*1000);



/* 3rd party helper functions */

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