// JavaScript Document

function FadeObject(element)
{
	var me = this;
	
	var steps = 15;
	var defaultTime = SECOND / 2;
	this.element = element;
	
	var opaque = true;
	var fading = false;
	
	this.callback = null;
	
	this.setOpacity = function(opacity)
	{
		me.element.style.opacity = opacity;
		me.element.style.filter = 'alpha(opacity='+(100*opacity)+')';
	};
	
	this.hide = function()
	{
		me.setOpacity(0);
	};
	this.show = function()
	{
		me.setOpacity(1);
	};
	this.dim = function()
	{
		me.setOpacity(0.5);
	};
	
	var fadeTimer;
	this.fadeOut = function(time)
	{
		fading = true;
		time = time ? time : defaultTime;
		if(me.element.style.opacity == null || me.element.style.opacity == '')
		{
			me.setOpacity(1);
		}
		var opacity = parseFloat(me.element.style.opacity);
		var change = 1 / steps;
		opacity -= change;
		if(opacity < 0)
		{
			opacity = 0;
		}
		me.setOpacity(opacity);
		if(opacity == 0)
		{
			fading = false;
			opaque = false;
			if(me.callback)
			{
				setTimeout(function(){me.callback()}, 0);
			}
			return true;
		}
		fadeTimer = setTimeout(function(){me.fadeOut(time)}, time / steps);
	};
	this.fadeIn = function(time)
	{
		fading = true;
		time = time ? time : defaultTime;
		if(me.element.style.opacity == null || me.element.style.opacity == '')
		{
			me.setOpacity(0);
		}
		var opacity = parseFloat(me.element.style.opacity);
		var change = 1 / steps;
		opacity += change;
		if(opacity > 1)
		{
			opacity = 1;
		}
		me.setOpacity(opacity);
		if(opacity == 1)
		{
			fading = false;
			opaque = true;
			if(me.callback)
			{
				setTimeout(function(){me.callback()}, 0);
			}
			return true;
		}
		fadeTimer = setTimeout(function(){me.fadeIn(time)}, time / steps);
	};
	this.stopFade = function()
	{
		clearTimeout(fadeTimer);
	};
	this.toggleFade = function(time)
	{
		if(fading)
		{
			return false;
		}
		if(opaque)
		{
			me.fadeOut(time);
			return true;
		}
		else
		{
			me.fadeIn(time);
			return true;
		}
	}
}
