/**
 * Fader to support fade in / out effects to elements.
 *
 * @author tam
 */ 
function Fader()
{
	var element = null;
	var opacity = null;
	var numSteps = null;
	var intervalId = null;
}

Fader.prototype.fadeOutElementById = function(_elementId)
{
	var element = getElement(_elementId);
	this.fadeOut(element);
}

Fader.prototype.fadeOut = function(_element)
{
	this.element = _element;

	// start at opacity 1.0
	this.opacity = 1.0;
	this.numSteps = 10;
	// set opacity of element.
	this.element.style.opacity = "" + this.opacity;

	var _this = this;	
	
	var faderFunction = function() { _this.internalFadeOut() };

	this.intervalId = window.setInterval(faderFunction, 20);
}

Fader.prototype.fadeInElementById = function(_elementId)
{
	var element = getElement(_elementId);
	this.fadeId(element);
}


Fader.prototype.fadeIn = function(_element)
{
	this.element = _element;

	// start at opacity 0.0
	this.opacity = 0.0;
	this.numSteps = 10;
	// set opacity of element.
	this.element.style.opacity = "" + this.opacity;
	this.element.style.visibility = "visible";

	var _this = this;
	var faderFunction = function() { _this.internalFadeIn() };	

	this.intervalId = window.setInterval(faderFunction, 20);		
}
			
Fader.prototype.internalFadeOut = function()
{
	this.internalFade(-1);
}

Fader.prototype.internalFadeIn = function()
{
	this.internalFade(1);
}
	
Fader.prototype.internalFade = function(inOut)
{
	var opacityDiff = 1.0 / this.numSteps;
	this.opacity += (inOut) * opacityDiff;
	if(this.opacity <= 0)
	{
		this.opacity = null;
		this.element.style.visibility = "hidden";
		this.element.style.opacity = "" + 1.0;
		window.clearInterval(this.intervalId);
	}
	else if(this.opacity >= 1)
	{
		this.opacity = null;
		this.element.style.opacity = "" + 1.0;
		window.clearInterval(this.intervalId);
	}
	else
	{
		this.element.style.opacity = "" + this.opacity;
	}
}