var Fader = function (o) 
{
	this._src = o;
	this._fadeTimerId = 0;
	this._pauseCounter = 0;
	this.parentElementId = "";
	this.x = 0;
	this.y = 0;
	this.width = 0;
	this.height = 0;
	this.speed = 5; 
	this.pause = 30;
};

Fader.prototype._fade = function (self, e1, e2, current)
{ 
	if (current == 1)
	{
		var i = parseInt(/(\d+)/.exec(e1.style.filter)[0]);
	}
	else
	{
		var i = parseInt(/(\d+)/.exec(e2.style.filter)[0]);
	}

	i = i + this.speed;

	if (i > 100)
	{	
		if (this._pauseCounter < this.pause)
		{
			this._pauseCounter++;
		}
		else
		{
			this._pauseCounter = 0;

			if (current == 1)
			{
				if (this.parentElementId != "")
				{
					document.getElementById(this.parentElementId).removeChild(e2);
				}
				else
				{
					document.body.removeChild(e2);	
				}
				self._src.freeImage(e2);
				var e2 = self._src.getImage(e2);	
				e2.style.position = "absolute";
				e2.style.left = this.x;
				e2.style.top = this.y;
				if (this.width != 0) e2.style.width = this.width;
				if (this.height != 0) e2.style.height = this.height;
				e2.style.filter = "alpha(opacity=0)";
				if (this.parentElementId != "")
				{
					document.getElementById(this.parentElementId).appendChild(e2);
				}
				else
				{
					document.body.appendChild(e2);	
				}
				var current = 2;
			}
			else
			{ 
				if (this.parentElementId != "")
				{
					document.getElementById(this.parentElementId).removeChild(e1);
				}
				else
				{
					document.body.removeChild(e1);	
				}
				self._src.freeImage(e1);
				var e1 = self._src.getImage(e1);
				e1.style.position = "absolute";
				e1.style.left = this.x;
				e1.style.top = this.y;
				if (this.width != 0) e1.style.width = this.width;
				if (this.height != 0) e1.style.height = this.height;
				e1.style.filter = "alpha(opacity=0)";
				if (this.parentElementId != "")
				{
					document.getElementById(this.parentElementId).appendChild(e1);
				}
				else
				{
					document.body.appendChild(e1);	
				}
				var current = 1;
			}
		}
	}
	else
	{
		if (current == 1)
		{
			e1.style.filter = "alpha(opacity=" + i + ")";
		}
		else
		{
			e2.style.filter = "alpha(opacity=" + i + ")";
		}	
	}
	
	self._fadeTimerId = setTimeout(function(){self._fade(self, e1, e2, current)}, 50);
}
	
Fader.prototype.play = function ()
{ 
	var e1 = this._src.getImage(); 
	e1.style.position = "absolute";
	e1.style.left = this.x;
	e1.style.top = this.y;
	if (this.width != 0) e1.style.width = this.width;
	if (this.height != 0) e1.style.height = this.height;
	if (this.parentElementId != "")
	{
		document.getElementById(this.parentElementId).appendChild(e1);
	}
	else
	{ 
		document.body.appendChild(e1);	
	}
	var e2 = this._src.getImage();
	e2.style.position = "absolute";
	e2.style.left = this.x;
	e2.style.top = this.y;
	if (this.width != 0) e2.style.width = this.width;
	if (this.height != 0) e2.style.height = this.height;
	e2.style.filter = "alpha(opacity=0)";
	if (this.parentElementId != "")
	{
		document.getElementById(this.parentElementId).appendChild(e2);
	}
	else
	{
		document.body.appendChild(e2);	
	}
	this._fade(this, e1, e2, 2);
};

Fader.prototype.stop =  function ()
{
	clearInterval(this._fadeTimerId);
};