/************************************

	Slide Show VI
	version 1.0
	last revision: 01.28.2005
	steve@slayeroffice.com

	Should you modify or improve upon
	this source, please let me know so
	that i can update the version hosted 
	at slayeroffice

	PLEASE LEAVE THIS NOTICE IN TACT!

************************************/

window.onload = init;
var d=document;

var IMG_WIDTH=250;
var SPLICE_WIDTH = d.all?2:5;
var MASK_SPEED = d.all?2:5;
if(window.opera)MASK_SPEED = 5;
var MAX_MASKS = 0;

var mImages = new Array();
var splices = new Array();
var masks = new Array();
var flipped = new Array();
var bgFlipped = new Array();
var maskTops = new Array();
var clearMe = 0;
var zInterval = null;
var flipping = 0;

function init() {
	if(!d.getElementById)return;
	mObj = d.getElementById("mContainer");
	mImages = mObj.getElementsByTagName("img");
	createSplices(0);
	createNav();
}

function createNav() {
	navObj = d.getElementById("navContainer");
	for(i=0;i<mImages.length;i++) {
		a = navObj.appendChild(d.createElement("a"));
		a.setAttribute("href","#");
		a.xIndex = i;
		a.onclick = function() { initTransition(this.xIndex); }
		a.appendChild(d.createTextNode(i+1));
	}
}

function createSplices(imgIndex) {
	numSplices = IMG_WIDTH/SPLICE_WIDTH;
	mObj = d.getElementById("mContainer");
	x=0;offset=0;
	bg = mImages[imgIndex].getAttribute("src");
	for(i=0;i<numSplices;i++) {
		splices[i] = mObj.appendChild(d.createElement("div"));
		splices[i].className = "splice";
		splices[i].style.backgroundImage = "url(" + bg + ")";
		splices[i].style.backgroundPosition = offset + "px 0px";
		splices[i].style.left = x+"px";

		masks[i] = mObj.appendChild(d.createElement("div"));
		masks[i].className = "mask";
		masks[i].style.top = "-334px";
		masks[i].style.left = x + "px";
		masks[i].id = "m" + i;

		x+=SPLICE_WIDTH;
		offset-=SPLICE_WIDTH;
		flipped[i] = 0;
		bgFlipped[i] = false;
		maskTops[i] = -334;

	}

	MAX_MASKS = masks.length;
}

function initTransition(nxtImage) {
	if(zInterval!=null)return;
	setCaptionText(nxtImage);
	fn = function() { runTransition(nxtImage); }
	zInterval = setInterval(fn,10);
}

function runTransition(nxtImage) {
	
	do {
		nextFlip = Math.floor(Math.random() * MAX_MASKS);
	} while(flipped[nextFlip] && flipping<MAX_MASKS);

	if(flipping<MAX_MASKS) {
		flipped[nextFlip] = 1;
		flipping++;
	}

	for(i=0;i<MAX_MASKS;i++) {
		if(flipped[i]==1) {
			if(maskTops[i]>=-60 && !bgFlipped[i]) {
				bgFlipped[i] = true;
				bg = mImages[nxtImage].getAttribute("src");
				splices[i].style.backgroundImage = "url(" + bg + ")";
			}
			if(maskTops[i]<=167) {
				maskTops[i]+=MASK_SPEED;
				masks[i].style.top = maskTops[i]+"px";
			} else {
				flipped[i] = 2;
				clearMe++;
				if(clearMe>=MAX_MASKS) {
					clearInterval(zInterval);
					zInterval = null;
					normalize();
				}
			}
		}
	}
}


function normalize() {
	for(n=0;n<MAX_MASKS;n++) {
		flipped[n] = 0;
		bgFlipped[n] = false;
		maskTops[n] = -334;
		masks[n].style.top = "-334px";
	}

	clearMe = 0;
	flipping=0;
}


// sets the caption elements text as the image elements alt text
function setCaptionText(imgIndex) {					
	captionObj = d.getElementById("caption");
	removeTextNodes(captionObj);
	captionObj.appendChild(d.createTextNode(mImages[imgIndex].getAttribute("alt")));
}

// utitlity function to clear the text of an object
function removeTextNodes(parentObj) {
	_i=0;
	while(parentObj.childNodes[_i]) {
		if(parentObj.childNodes[_i].nodeType == 3) parentObj.removeChild(parentObj.childNodes[_i]);
		_i++;
	}
}