/**
 * @author dylan
 */

var pEl;
var originalId;
var fadeToEl;
var fadeFromEl;
var fadeInterval=false;
var currentToOpacity=0;
var currentFromOpacity=100;
var opacityIncrement;
var elId;

function fade(elId,img,speed) {
	// clean up if fade called in while already fading
	if (fadeInterval) {
		clearInterval(fadeInterval);
		fadeInterval=false;
		if (document.getElementById("fadeToImage")) {
			pEl.removeChild(fadeToEl);
		}
	}
	
	// get the element we'll be fading from
	fadeFromEl = document.getElementById(elId);
	if (!fadeFromEl) {
		return;
	}
	
	// set fade vars
	currentToOpacity=0;
	currentFromOpacity=100;
	opacityIncrement=5000/speed;
	originalId=elId;
	// get parent element of element we are fading from
	pEl = fadeFromEl.parentNode;
	
	// create img element to fade into
	fadeToEl = document.createElement('img');
	
	// set new img element's styles and put the image in it
	fadeToEl.id="fadeToImage";
	if (fadeToEl.style) {
		fadeToEl.style.filter='alpha(opacity=0)';
	}
	fadeToEl.style.opacity=0;
	fadeToEl.src=img;
	fadeToEl.alt="Slideshow Image";
	fadeToEl.className="fadeToImage";
	fadeToEl.style.zIndex=10;
	fadeToEl.style.position="absolute";
	
	// append new img to same parent as original img
	pEl.appendChild(fadeToEl);
	
	// fade that bitch
	// IE 0-100
	// FF 0-1
	fadeInterval = setInterval(doFade,50);
	return(true);
}

function doFade() {
	// clean up if we're done fading
	if (currentToOpacity>=100 || currentFromOpacity <=0) {
		// stop fading
		clearInterval(fadeInterval);
		fadeInterval=false;
		
		// remove fadeFromElement
		// The problem is HERE
		if (fadeFromEl) {
			try {
				pEl.removeChild(fadeFromEl);
			} catch(e) {
				// element doesnt exist.  oh well.
			}
		}
		
		// set opacity to max
		if (fadeToEl.style.filter) {
			fadeToEl.style.filter='alpha(opacity=100)';
		} else {
			fadeToEl.style.opacity=1;
		}
		
		// change the id of the new element to the id of the original element
		fadeToEl.id=originalId;
		//return(false);
	// change opacity of fadeFromEl and fadeToEl
	} else {
		currentFromOpacity-=opacityIncrement;
		currentToOpacity+=opacityIncrement;
		fadeFromEl.style.filter="alpha(opacity="+currentFromOpacity+")";
		fadeFromEl.style.opacity=(currentFromOpacity/100);
		
		fadeToEl.style.filter="alpha(opacity="+currentToOpacity+")";
		fadeToEl.style.opacity=currentToOpacity/100;
	}
}
