/**
  * NOTE: must ensure that within each slideshow group the tallest
  * image occurs first in the HTML list
*/
function initSlideshow() {
	var elems = document.getElementsByTagName("div");
	for (var i=0, j=elems.length; i<j; i++){
		if (elems[i].id.indexOf("jsSlideshow")>-1) {
			var images = elems[i].getElementsByTagName("img");
			oldBrowser = (images[0].filters) ? true : false;
			for (var k=0, l=images.length; k<l; k++) {
				setOpacity(images[k], 0);
				images[k].style.zIndex = 1;
			}
			images[0].style.zIndex = 2;
			fadeIn(images[0], images[1], 0);
			//New image nodes must be created after other image nodes have fades and click functions applied
			var imgCaption = document.createElement("p");
			var imgCapText = document.createTextNode(images[0].alt);
			var imgNav = document.createElement("p");
			var prevLink = document.createElement("a");
			var nextLink = document.createElement("a");
			var prevBtn = document.createElement("img");
			var nextBtn = document.createElement("img");
			var navText = document.createTextNode("1 of "+images.length);
			imgCaption.className = "slideCaption";
			imgNav.className = "slideshowNav";
			prevLink.href = "#";
			nextLink.href = "#";
			prevBtn.src = "img/miniLeft.gif";
			prevBtn.title = "Previous image";
			nextBtn.src = "img/miniRight.gif";
			nextBtn.title = "Next image";
			nextBtn.className = "nextButton"+i;
			prevLink.onclick = function() {
				if (!fadeInProgress) prevImage(this.parentNode.parentNode);
				return false;
			}
			nextLink.onclick = function() {
				if (!fadeInProgress) nextImage(this.parentNode.parentNode);
				return false;
			}
			prevLink.appendChild(prevBtn);
			nextLink.appendChild(nextBtn);
			imgNav.appendChild(prevLink);
			imgNav.appendChild(navText);
			imgNav.appendChild(nextLink);
			imgCaption.appendChild(imgCapText);
			elems[i].appendChild(imgCaption);
			elems[i].appendChild(imgNav);
		}
	}
}
function setOpacity(elem, level) {
	if (oldBrowser) {
		elem.style.filter = 'alpha(opacity=' + level*100 + ')';
	} else {
		elem.style.opacity = level;
	}
}
function nextImage (holder) {
	fadeInProgress = true;
	slides = getSlideInfo(holder);
	slides.curImg.style.zIndex = 1;
	slides.nextImg.style.zIndex = 2;
	fadeIn(slides.nextImg, slides.curImg, 0);
	slides.navTextNode.nodeValue = String(slides.nextImgNum+1)+" of "+slides.numImgs;
	slides.captionNode.nodeValue = String(slides.nextImg.alt);
}
function prevImage (holder) {
	fadeInProgress = true;
	slides = getSlideInfo(holder);
	slides.curImg.style.zIndex = 1;
	slides.prevImg.style.zIndex = 2;
	fadeIn(slides.prevImg, slides.curImg, 0);
	slides.navTextNode.nodeValue = String(slides.prevImgNum+1)+" of "+slides.numImgs;
	slides.captionNode.nodeValue = String(slides.prevImg.alt);
}
function getSlideInfo (holder) {
	var prevImg, nextImg, curImg, prevImgNum, currImgNum, navTextNode, captionNode;
	var images = holder.getElementsByTagName("img");
	var numImgs = images.length - 2; //ignores last two images, which are the nav buttons
	for (var i=0; i<numImgs; i++) {
		if (images[i].style.zIndex == 2){
			curImg = images[i];
			nextImgNum = (i==numImgs-1) ? 0 : i+1;
			nextImg = images[nextImgNum];
			prevImgNum = (i==0) ? numImgs-1 : i-1;
			prevImg = images[prevImgNum];
			break;
		}
	}
	var paras = holder.getElementsByTagName("p");
	for (var i=0, j=paras.length; i<j; i++) {
		if (paras[i].className == "slideshowNav") {
			navTextNode = paras[i].firstChild.nextSibling;
		}
		if (paras[i].className == "slideCaption") {
			captionNode = paras[i].firstChild;
		}
	}
	return {numImgs : numImgs, curImg : curImg , nextImgNum : nextImgNum, nextImg : nextImg, prevImgNum : prevImgNum, prevImg : prevImg, navTextNode : navTextNode, captionNode : captionNode};
}
function fadeIn(newSlide, oldSlide, thisStep) {
	var newOpacity = opacityArray[thisStep];
	setOpacity(newSlide, newOpacity);
	if (thisStep<(fadeSteps-1)) {
		myInterval = setTimeout (function(){fadeIn(newSlide, oldSlide, thisStep+1);}, stepTime);
	} else {
		fadeInProgress = false;
		setOpacity(oldSlide, 0);
	}
}
function setFadeArray() {
	for (var i = 0; i<(fadeSteps-1); i++) {
		opacityArray[i] = Math.sin((i*Math.PI)/(2*fadeSteps));
	}
	opacityArray[fadeSteps-1] = 1;
}
var oldBrowser;
var fadeInProgress = false;
var fadeSteps = 50;
var totalFadeTime = 500;
var stepTime = totalFadeTime/fadeSteps;
var opacityArray = new Array;
setFadeArray();
if (document.getElementsByName && document.getElementById) addOnLoad(initSlideshow);
