/* **************************
* This script allows you to fade up or down any item's opacity
* using the fadeUp, fadeDown, and fadeDownAndHide functions.
* These are the only "public" functions, all the rest can be
* left untouched. You can set the frame rate and percentage increase
* using the fs.setFps and fs.setIncrementPercent functions
**************************** */

var fs = new Object();
fs.faders = new Array();
fs.increment = 0.2;
fs.framerate = 50;

function Fader(elementId, opacity) {
	this.elementId = elementId;
	this.opacity = opacity || 0.0;
	fs.faders[elementId] = this;
	this.callbackDown = null;
	this.callbackUp = null;
}


Fader.prototype.setCallbackDown = function(func) {
	this.callbackDown = func;
}


Fader.prototype.setCallbackUp = function(func) {
	this.callbackUp = func;
}


Fader.prototype.setOpacity = function(value) 
{
	if(value > 1.0) value = 1.0;
	if(value < 0.0) value = 0.0;
	this.opacity = value;
	var mopacity = this.opacity * 100;
	var obj = document.getElementById(this.elementId);
	if(obj) {
		obj.style.filter = "alpha(opacity=" + mopacity + ")";
		obj.style.opacity = this.opacity;
	}
	
}

Fader.prototype.inc = function(amount) {
	this.setOpacity(this.opacity + amount);
}

Fader.prototype.dec = function(amount) {
	this.setOpacity(this.opacity - amount);
}

Fader.prototype.fullon = function() {
	var obj = document.getElementById(this.elementId);
	obj.style.filter = "none";
	obj.style.opacity = 1;
}

Fader.prototype.setShowing = function(val) {
	var obj = document.getElementById(this.elementId);
	if(val) {
		obj.style.display = "block";
	}
	else {
		obj.style.display = "none";
	}
}

fs.getFader = function(elementId, startingOpacity) 
{
	if(fs.faders[elementId]) {
		return fs.faders[elementId];
	}
	return new Fader(elementId, startingOpacity);
}

function setFps(val) {
	fs.framerate = Math.ceil(1000 / val);
}

function setIncrementPercent(val) {
	fs.increment = (val / 100);
}

function startFadeUp(elementId) {
	var fader = fs.getFader(elementId, 0.0);
	fader.setOpacity(0.0);
	fader.setShowing(true);
	fadeUp(elementId);
}
	
function getFader(elementId) {
	return fs.getFader(elementId);
}


function fadeUp(elementId)
{
	var fader = fs.getFader(elementId, 0.0);
	if(fader.opacity < 1) {
		fader.inc(fs.increment);
		setTimeout("fadeUp('" + elementId + "')", fs.framerate);
	}
	else {
		fader.fullon();
		if(fader.callbackUp) {
			fader.callbackUp.call();
		}
	}
}

function fadeDown(elementId)
{
	var fader = fs.getFader(elementId, 1.0);
	if(fader == null) {
		alert("fader not created for " + elementId);
		return;
	}
	if(fader.opacity > 0) {
		fader.dec(fs.increment);
		setTimeout("fadeDown('" + elementId + "')", fs.framerate);
	}
	else {
		if(fader.callbackDown) {
			fader.callbackDown.call();
		}
	}
}

function fadeDownAndHide(elementId)
{
	var fader = fs.getFader(elementId, 1.0);
	if(fader == null) {
		alert("fader not created for " + elementId);
		return;
	}
	if(fader.opacity > 0) {
		fader.dec(fs.increment);
		setTimeout("fadeDownAndHide('" + elementId + "')", fs.framerate);
	}
	else {
		var obj = document.getElementById(elementId);
		obj.style.display = "none";
		obj.style.filter = "alpha(opacity=100)";
		obj.style.opacity = 1.0;
		if(fader.callbackDown) {
			fader.callbackDown.call();
		}
	}
}

function hideElement(elementId) {
	var fader = fs.getFader(elementId);
	fader.setOpacity(0);
}


