/* shwFade.js (c)2008 SugarHill Works LLC - http://www.sugarhillworks.com */


// randomize the order
slideshow.sort( randOrd );

var d = document; 
var imgs = new Array();
var current = 0;
var nIndex = 1;

var leftNum = 0;
var namesR_a = new Array(), namesL_a = new Array();
var namesR_li = new Array(), namesL_li = new Array();
var cNamesOnCol = new Array(), cNamesOffCol = new Array();

var ssRunning;
var nPause;
var lastRun;
var fadeComplete = true;

var addlImgs = new Array();
var restartDiv;

var ssPauseTO;
var pNum;

var resumeImg;

var xfsoContainer_cntr;



function so_init(arg) {
	if(!d.getElementById || !d.createElement)return;
	xfsoContainer_cntr = d.getElementById("xfsoContainer");
	// eliminate border blinking  on ff/saf
	xfsoContainer_cntr.style.border = "none";
	main_div_cntr.style.border = "none"; 
	//set up initial batch of imgs to run while the rest download in the background
	for(var i = 0; i < slideshow.length; i++) {
		imgs[i] = new Image();
		imgs[i].style.visibility = "hidden";			
		imgs[i].style.border = "#CCC solid 1px";
		//imgs[i].alt = slideshow[i].photogName;
		imgs[i].onload = function () {
			this.setAttribute('isloaded' ,'true');
		};
	}

	imgs.sort(randOrd);
	
	// get the photograher names menu itmes
	if (!isitIE) {
		d.getElementById("namesL").style.visibility = "hidden";
		d.getElementById("namesR").style.visibility = "hidden";
	}
	namesL_a = d.getElementById("namesL").getElementsByTagName("a");
	namesL_li = d.getElementById("namesL").getElementsByTagName("li");
	namesR_a = d.getElementById("namesR").getElementsByTagName("a");
	namesR_li = d.getElementById("namesR").getElementsByTagName("li");
	// check for and highlight photographer's name when their image is up
	
	safeStart(0);

	return ssRunning, namesOnCol, namesOffCol;
}



function posImgs(i, fr_init) {
	if (! fr_init) { fr_init = false; } else { xfsoContainer_cntr.style.display = 'none'; }
	// redundant positioning code is for Safari image rendering bug and IE not supporting image onload ...
	var imgsW = imgs[i].width;
	var imgsH = imgs[i].height;
	if ((imgsH < 50) || (imgsW < 50)) {
		window.setTimeout("posImgs("+i+","+fr_init+");",50);
	}
	imgs[i].style.visibility = "hidden";
	imgs[i].style.position = "absolute";
	imgs[i].style.left = Math.round((maxvpW - imgsW) / (2)) + "px";
	imgs[i].style.top = Math.round((maxvpH - (imgsH + 2)) / (2)) + "px";
	if(fr_init === true) {
		imgs[0].style.visibility = "visible";
		imgs[0].xOpacity = .99;
		imgs[0].style.MozOpacity = ".99";
		imgs[0].style.opacity = ".99";
		imgs[0].style.filter = "alpha(opacity=99)";
		for (var j = 0; j < namesL_a.length; j++) {
			if (imgs[0].alt == namesL_a[j].innerHTML) {
				namesL_li[j].style.backgroundColor = "rgb("+namesOnCol[0]+","+namesOnCol[1]+","+namesOnCol[2]+")";
			}
			else {
				namesL_li[j].style.backgroundColor = "rgb("+namesOffCol[0]+","+namesOffCol[1]+","+namesOffCol[2]+")";
			}
		}
		for (var j = 0; j < namesR_a.length; j++) {
			if (imgs[0].alt == namesR_a[j].innerHTML) {
				namesR_li[j].style.backgroundColor = "rgb("+namesOnCol[0]+","+namesOnCol[1]+","+namesOnCol[2]+")";
			}
			else {
				namesR_li[j].style.backgroundColor = "rgb("+namesOffCol[0]+","+namesOffCol[1]+","+namesOffCol[2]+")";
			}
		}
		window.setTimeout("xfsoContainer_cntr.style.display = 'block';main_div_cntr.style.background = 'none';", 2500); 
	}
	else {
		imgs[i].xOpacity = 0;
		imgs[i].style.filter = "alpha(opacity=0)";
		imgs[i].style.MozOpacity = "0";
		imgs[i].style.opacity = "0";
	}
}




function safeStart(n) {
		//if (isitIE == true) { return; }
	if(n >= imgs.length || isitIE == true) { //this code block only happens when all the images have loaded.
		current = 0;
		nIndex = 1;
		if(fadeComplete == true) {
			if (ssRunning) { clearTimeout(ssRunning); }
			imgs[nIndex].alt = slideshow[nIndex].photogName; 
			imgs[nIndex].src = sPicsFolder + slideshow[nIndex].filename;
			imgs[current].alt = slideshow[current].photogName; 
			imgs[current].src = sPicsFolder + slideshow[current].filename;
			posImgs(nIndex);
			posImgs(current, true);
			xfsoContainer_cntr.appendChild(imgs[nIndex]);
			xfsoContainer_cntr.appendChild(imgs[current]);
			if ((imgs[current].getAttribute('isloaded') == 'true') && (imgs[nIndex].getAttribute('isloaded') == 'true')) {
				ssRunning = window.setTimeout("so_xfade("+current+","+nIndex+",'run',null);", 1500);
			} else {
				safeFade(current, nIndex, 'run', pNum, 1500);
			}
			d.getElementById("namesL").style.visibility = "visible";
			d.getElementById("namesR").style.visibility = "visible";
			return current, nIndex;
		} else {
			window.setTimeout("safeStart("+n+")", 25);
			return n;
		}
	}
	if (imgs[n].complete == false) {
		window.setTimeout("safeStart("+n+")", 250);
	} else {
		n++;
		safeStart(n);
	}
}



function switchToThisPhotogsImg(arg_pNum,ssPauseTO) {
//		window.clearTimeout(ssPauseTO);
//		window.clearTimeout(ssRunning);
//		window.clearTimeout(ssResumeTO);
		nPause = 'paused';
		pNum = arg_pNum;
		getImgsToFade(current, nPause);
//		window.setTimeout("getImgsToFade(current, nPause);",2000);
		return nPause, pNum, ssRunning;
}
function ssPause(arg_pNum, ssPauseTO) { 
	window.clearTimeout(ssRunning);
	window.clearTimeout(ssPauseTO);
	window.clearTimeout(ssResumeTO);
	if(arg_pNum === -1) { return; }
	if (fadeComplete == true) {
		window.setTimeout("switchToThisPhotogsImg("+arg_pNum+","+ssPauseTO+");", 50);
	}
	else { // try again later
		ssPauseTO = window.setTimeout("ssPause("+arg_pNum+","+ssPauseTO+");", 50);
		return arg_pNum, ssPauseTO;
	}
}




var ssResumeTO;
function ssResume() {
	if (fadeComplete == true) {
		window.clearTimeout(ssRunning);
		window.clearTimeout(ssPauseTO);
//		window.clearTimeout(ssResumeTO);
		nPause = 'resume';
		pNum = null;
		getImgsToFade(current, nPause);
		return nPause, pNum;
	} else {
		ssResumeTO = window.setTimeout("ssResume()", 250);
	}
}

function safeFade(current,fadingIn,nP,pN,TO) {
	window.clearTimeout(ssRunning);
	if ((imgs[fadingIn].getAttribute('isloaded') == 'true') && (imgs[current].getAttribute('isloaded') == 'true')) { 
		ssRunning = window.setTimeout("so_xfade("+current+","+fadingIn+",'"+nP+"',"+pN+");", TO);
	} else {
		window.setTimeout("safeFade("+current+","+fadingIn+",'"+nP+"',"+pN+","+TO+");", 25);
	}
}
function getImgsToFade(current, nPause) {
	window.clearTimeout(ssRunning);
//	window.clearTimeout(ssPauseTO);
//	window.clearTimeout(ssResumeTO);
	var fadingOut = current;
	var fadingIn;
	// make moused-over photographer's work the next image to fade in
	if (nPause == 'paused')
	{ 
		for (var pi = 0; pi < slideshow.length; pi++) {
		//if (pi==10) break;
			if(slideshow[pi].photogName == photographerNames[pNum]) {
				fadingIn = pi;
				break;
			}
		}
		if (fadingOut == fadingIn) {
			return;
		}
		imgs[fadingIn].alt = slideshow[fadingIn].photogName; 
		imgs[fadingIn].src = sPicsFolder + slideshow[fadingIn].filename;
		posImgs(fadingIn);
		xfsoContainer_cntr.appendChild(imgs[fadingIn]);		
		if (imgs[fadingIn].isloaded === 'true') {
			ssRunning = window.setTimeout("so_xfade("+fadingOut+","+fadingIn+",'paused',pNum);", 100);
		} else {
			safeFade(current, fadingIn, 'paused', pNum, 100);
		}
	} else if(nPause == 'resume') {
		fadingIn = imgs[resumeImg+1]?resumeImg+1:0;
		if (fadingOut == fadingIn) {
			fadingIn = imgs[fadingIn+1]?fadingIn+1:0;
		}
		nPause = 'run';
		imgs[fadingIn].alt = slideshow[fadingIn].photogName; 
		imgs[fadingIn].src = sPicsFolder + slideshow[fadingIn].filename;
		posImgs(fadingIn);
		xfsoContainer_cntr.appendChild(imgs[fadingIn]);
		if (imgs[fadingIn].isloaded === 'true') {
			ssRunning = window.setTimeout("so_xfade("+current+","+fadingIn+",'run',pNum);", 250);
		} else {
			safeFade(current, fadingIn, 'run', pNum, 250);
		}
	} else if (nPause == 'run') { 
		fadingIn = imgs[current+1]?current+1:0;
		resumeImg = fadingIn;
		imgs[fadingIn].alt = slideshow[fadingIn].photogName; 
		imgs[fadingIn].src = sPicsFolder + slideshow[fadingIn].filename;
		posImgs(fadingIn);
		xfsoContainer_cntr.appendChild(imgs[fadingIn]);
		if (imgs[fadingIn].isloaded === 'true') {
			ssRunning = window.setTimeout("so_xfade("+current+","+fadingIn+",'run',pNum);", 1250);
		} else {
			safeFade(current, fadingIn, 'run', pNum, 1250);
		}
	}
	nIndex = fadingIn;
	return current, nIndex, nPause, ssRunning;
	
}
	



function so_xfade(current_arg,nIndex_arg,nPause,pNum) { 
	var fading; //for the fading timeouts
	// get opacity values for current and next images
	var fadingOut = current_arg;
	var fadingIn = nIndex_arg;
	if(fadingOut == fadingIn)return;
	// be sure imgs are visible 
	imgs[fadingOut].style.visibility = "visible";
	imgs[fadingIn].style.visibility = "visible";
	// increment the opacity of each image
	cOpacity = imgs[fadingOut].xOpacity;
	nOpacity = imgs[fadingIn].xOpacity;
	cOpacity-=.09; 
	cOpacity.toFixed(2);
	nOpacity+=.09; 
	nOpacity.toFixed(2);
//  positioning code: may not be necessary here
//	imgs[fadingIn].style.position = "absolute";
//	imgs[fadingIn].style.left = ((maxvpW - imgs[fadingIn].width) / (2)) + "px";
//	imgs[fadingIn].style.top = ((maxvpH - imgs[fadingIn].height) / (2)) + "px";
	imgs[fadingOut].xOpacity = cOpacity;
	imgs[fadingIn].xOpacity = nOpacity;
	setOpacity(imgs[fadingOut]);
	setOpacity(imgs[fadingIn]);
	// check for and highlight photographer's name when their image is up
	for (var i = 0; i < 3; i++) { //change the rgb values
		if (!cNamesOnCol[i]) {
			cNamesOnCol[i] = namesOnCol[i];
			cNamesOffCol[i] = namesOffCol[i];
		}
		else {
			cNamesOnCol[i] += 5;
			if (cNamesOnCol[i] > namesOffCol[i]) { cNamesOnCol[i] = namesOffCol[i]; }
			cNamesOffCol[i] -= 5;
			if (cNamesOffCol[i] < namesOnCol[i]) { cNamesOffCol[i] = namesOnCol[i]; }
		}
		
	}
	for (var j = 0; j < namesL_a.length; j++) {	//set the menu items bg color
		if (imgs[fadingOut].alt == namesL_a[j].innerHTML) {
			namesL_li[j].style.backgroundColor = "rgb("+cNamesOnCol[0]+","+cNamesOnCol[1]+","+cNamesOnCol[2]+")";
		}
		if (imgs[fadingIn].alt == namesL_a[j].innerHTML) {
			namesL_li[j].style.backgroundColor = "rgb("+cNamesOffCol[0]+","+cNamesOffCol[1]+","+cNamesOffCol[2]+")";
		}
	}
	for (var j = 0; j < namesR_a.length; j++) {
		if (imgs[fadingOut].alt == namesR_a[j].innerHTML) {
			namesR_li[j].style.backgroundColor = "rgb("+cNamesOnCol[0]+","+cNamesOnCol[1]+","+cNamesOnCol[2]+")";
		}
		if (imgs[fadingIn].alt == namesR_a[j].innerHTML) {
			namesR_li[j].style.backgroundColor = "rgb("+cNamesOffCol[0]+","+cNamesOffCol[1]+","+cNamesOffCol[2]+")";
		}
	}
	// things to do one time when the xfade is complete
	if (cOpacity <= 0) {
		imgs[fadingOut].xOpacity = 0;
		imgs[fadingOut].style.opacity = "0";
		imgs[fadingOut].style.MozOpacity = "0";
		imgs[fadingOut].style.filter = "alpha(opacity=0)";
		imgs[fadingIn].xOpacity = 0.99;
		imgs[fadingIn].style.opacity = ".99";
		imgs[fadingIn].style.MozOpacity = ".99";
		imgs[fadingIn].style.filter = "alpha(opacity=99)";
		for (var j = 0; j < namesL_a.length; j++) {	//set the menu items bg color
			if (imgs[fadingOut].alt == namesL_a[j].innerHTML) {
				namesL_li[j].style.backgroundColor = "rgb("+namesOffCol[0]+","+namesOffCol[1]+","+namesOffCol[2]+")";
			}
			if (imgs[fadingIn].alt == namesL_a[j].innerHTML) {
				namesL_li[j].style.backgroundColor = "rgb("+namesOnCol[0]+","+namesOnCol[1]+","+namesOnCol[2]+")";
			}
		}
		for (var j = 0; j < namesR_a.length; j++) {
			if (imgs[fadingOut].alt == namesR_a[j].innerHTML) {
				namesR_li[j].style.backgroundColor = "rgb("+namesOffCol[0]+","+namesOffCol[1]+","+namesOffCol[2]+")";
			}
			if (imgs[fadingIn].alt == namesR_a[j].innerHTML) {
				namesR_li[j].style.backgroundColor = "rgb("+namesOnCol[0]+","+namesOnCol[1]+","+namesOnCol[2]+")";
			}
		}
//		xfsoContainer_cntr.removeChild(imgs[fadingOut]);
		var latentImgs = xfsoContainer_cntr.getElementsByTagName('img');
		for (var i = 0; i < latentImgs.length; i++) {
			if (latentImgs[i].src !== imgs[fadingIn].src) {
				xfsoContainer_cntr.removeChild(latentImgs[i]);
			}
		}
		fadingOut = fadingIn;
		for (var i = 0; i < 3; i++) { //reset menu bg colors to the defaults for next fade
			cNamesOnCol[i] = namesOnCol[i];
			cNamesOffCol[i] = namesOffCol[i];
		}
		lastRun = new Date();
		fadeComplete = true;
		current = fadingOut;
		if (nPause == 'run') {
			getImgsToFade(current, nPause);
		}
	} else {
		fadeComplete = false;
		if (nPause == 'paused') { 
			fading = window.setTimeout("so_xfade("+fadingOut+","+fadingIn+",'paused',"+pNum+")", 50);//<-larger value here = slower fade
		} else { // if (nPause == 'run') {
			fading = window.setTimeout("so_xfade("+fadingOut+","+fadingIn+",'run',"+pNum+")", 50);//<-larger value here = slower fade
		}
	}
	
	function setOpacity(obj) {
		if(obj.xOpacity > .99) {
			obj.xOpacity = .99;
		}
		if(obj.xOpacity < 0) {
			obj.xOpacity = 0;
		}
		obj.style.opacity = obj.xOpacity;
		obj.style.MozOpacity = obj.xOpacity;
		obj.style.filter = "alpha(opacity=" + (obj.xOpacity*100) + ")";
	}
}
