//fadeX.js
function opacity(id, opacStart, opacEnd, millisec) {
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacStart > opacEnd) {
		for(i = opacStart; i >= opacEnd; i--) {
			setTimeout("changeOpac('" + id + "'," + i + ")",(timer * speed));
			timer++;
		}
	} else if(opacStart < opacEnd) {
		for(i = opacStart; i <= opacEnd; i++)
			{
			setTimeout("changeOpac('" + id + "'," + i + ")",(timer * speed));
			timer++;
		}
	}
}

function fadeX(objToFadeID, IsFadeIn, timeToFade, delay) {
	//objToFadeID - Object ID of the Div or object you want to fade
	//IsFadeIn - Is this a fade in (vs fade out) 1 = true, 0 = false
	//timeToFade - Time in ms to fade the object
	//delay - Time in ms to delay the fade
	var objToFade = document.getElementById(objToFadeID);
	if (objToFade == null) return;

	var fadeXFactor = IsFadeIn == 1 ? 1 : -1; // used to reverse values for fade in vs out
	if ((timeToFade == 0) && (delay == 0)) {
		//if this is a simple instant popup, then make the settings are return
		objToFade.style.opacity = 1 * IsFadeIn;
		objToFade.style.filter = 'alpha(opacity = ' + 100 * IsFadeIn + ')';
		objToFade.fadeState = 2 * fadeXFactor;
		return;
	}

	if (delay == null) delay = 0;

	if (IsFadeIn) objToFade.OriginalFadeInTime = timeToFade;
	else objToFade.OriginalFadeOutTime = timeToFade;

	if (objToFade.fadeState != null) {

		if ((objToFade.fadeState == 1 * fadeXFactor) || (objToFade.fadeState == 2 * fadeXFactor) || (objToFade.fadeState == 3 * fadeXFactor)) {
			return; //Current fade is in same direction or already there so we are OK;
		}
		else if (objToFade.fadeState == -1 * fadeXFactor) {
			//reverse the time and the fade direction and let it continue
			objToFade.fadeState = 1 * fadeXFactor;
			objToFade.timeToFade = timeToFade;
			if (IsFadeIn) {
				objToFade.fadeTimeLeft = timeToFade * (1 - objToFade.fadeTimeLeft / objToFade.OriginalFadeOutTime);
			}
			else {
				objToFade.fadeTimeLeft = timeToFade * (1 - objToFade.fadeTimeLeft / objToFade.OriginalFadeInTime);
			}

			return;
		}
		else if (objToFade.fadeState == -3 * fadeXFactor) {
			//object is in hold status but directoin needs to be reversed and use the passed in time value
			objToFade.fadeState = 3 * fadeXFactor;
			objToFade.timeToFade = timeToFade;
			if (IsFadeIn) {
				objToFade.fadeTimeLeft = timeToFade * (1 - objToFade.fadeTimeLeft / objToFade.OriginalFadeOutTime);
			}
			else {
				objToFade.fadeTimeLeft = timeToFade * (1 - objToFade.fadeTimeLeft / objToFade.OriginalFadeInTime);
			}
			return;
		}
	}

	//if we got this far, then the object is in the fully opposite state
	objToFade.timeToFade = timeToFade;
	objToFade.fadeTimeLeft = timeToFade;
	objToFade.fadeState = 3 * fadeXFactor;
	var now = new Date();
	now.setMilliseconds(now.getMilliseconds() + delay);
	setTimeout("animateFade(" + now.getTime() + ",'" + objToFadeID + "')", 10 + delay);
}

function animateFade(lastTick, elementID) {
	var curTick = new Date().getTime();
	var elapsedTicks = curTick - lastTick;

	var element = document.getElementById(elementID);
	if (element.fadeState == 3) element.fadeState = 1;
	if (element.fadeState == -3) element.fadeState = -1;

	if (element.fadeTimeLeft <= elapsedTicks) {
		element.style.opacity = element.fadeState == 1 ? '1' : '0';
		element.style.filter = 'alpha(opacity = ' + (element.fadeState == 1 ? '100' : '0') + ')';
		element.fadeState = element.fadeState == 1 ? 2 : -2;
		return;
	}

	element.fadeTimeLeft -= elapsedTicks;
	var newOpVal = element.fadeTimeLeft / element.timeToFade;
	if (element.fadeState == 1) newOpVal = 1 - newOpVal;
	element.style.opacity = newOpVal;
	element.style.filter = 'alpha(opacity = ' + (newOpVal * 100) + ')';

	setTimeout("animateFade(" + curTick + ",'" + elementID + "')", 33);
}

//change the opacity for different browsers
function changeOpac(id, opacity) {
	var object = document.getElementById(id).style; 
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
}

function runSlideShow(objToFadeID, IsFadeIn, timeToFade, delay) {
	fadeX(objToFadeID, IsFadeIn, timeToFade, 10);
	if (IsFadeIn == 1) {
		IsFadeIn = 0;
		if (document.getElementById("L321").style.display == "none") {
			document.getElementById("L321").style.visibility = '';
			document.getElementById("L321").style.display = '';	
			document.getElementById("L322").style.display = "none"; 				
			document.getElementById("L322").style.visibility = 'hidden';			
		} else {
			document.getElementById("L322").style.visibility = '';
			document.getElementById("L322").style.display = '';	
			document.getElementById("L321").style.display = "none"; 				
			document.getElementById("L321").style.visibility = 'hidden';			
		}	
	} else {
		IsFadeIn = 1				
	}
	setTimeout("runSlideShow('"+objToFadeID+"',"+IsFadeIn+","+timeToFade+","+delay+")", 20 + delay);
}

function runSlideShowX(objToFadeLayer, objToFadeImage, IsFadeIn, timeToFade, delay, imageFiles, imageLinks) {
	var imageSeparator = imageFiles.indexOf(";");
	var nextImage = imageFiles.substring(0,imageSeparator);
	var futureImages = imageFiles.substring(imageSeparator+1,imageFiles.length)+ ';' + nextImage;
	var newImage = new Image();
	newImage.src = nextImage;
	var linkSeparator = imageLinks.indexOf(";");
	var nextLink = imageLinks.substring(0,linkSeparator);
	var futureLinks = imageLinks.substring(linkSeparator+1,imageLinks.length)+ ';' + nextLink;	
	//document.getElementById(objToFadeImage).onclick = "relocate('" + nextLink + "')";
	document.getElementById(objToFadeImage).onclick = new Function("relocate('"+nextLink+"')");	
	if (IsFadeIn == 0) {
		document.getElementById(objToFadeLayer).style.backgroundImage = "url("+ newImage.src + ")";
		fadeX(objToFadeImage, 0, timeToFade, 10);
		IsFadeIn = 1;
	} else {
		document.getElementById(objToFadeImage).src = newImage.src;	
		fadeX(objToFadeImage, 1, timeToFade, 10);
		IsFadeIn = 0
	}
	setTimeout("runSlideShowX('"+objToFadeLayer+"','"+objToFadeImage+"',"+IsFadeIn+","+timeToFade+","+delay+",'"+futureImages+"','"+futureLinks+"')", 20 + delay);
}