function getFadeMethod()
{
	var img = new Image();
	if(typeof img.style.filter != 'undefined')
	{
		return this.FM_IE_WIN;
	}
	else if(typeof img.style.KHTMLOpacity != 'undefined')
	{
		return this.FM_SAFARI_OLD;
	}
	else if(typeof img.style.MozOpacity != 'undefined')
	{
		return this.FM_MOZILLA_OLD;
	}
	else if(typeof img.style.opacity != 'undefined')
	{
		return this.FM_MOZILLA;
	}
	else
	{
		return this.FM_UNKNOWN;
	}
}

function fadeIn()
{
	var obj = this;
	var opacity = this.getOpacity();

	if(opacity < 0.95)
	{
		this.setOpacity(Math.sqrt(opacity));
	}
	else
	{
		clearInterval(this.m_fadeTimer);
		this.setOpacity(0.99999);
		this.m_divBg.style.background = "url('" + this.m_aryImg[0]
		                              + "') no-repeat";
		this.m_aryImg.push(this.m_aryImg.shift());
		setTimeout(function(){obj.m_fadeTimer = setInterval(function(){obj.fadeOut()}, 100);}, 3000);
	}
}

function fadeOut()
{
	var obj = this;
	var opacity = this.getOpacity();

	if(opacity > 0.05)
	{
		this.setOpacity(opacity * opacity);
	}
	else
	{
		clearInterval(this.m_fadeTimer);
		this.setOpacity(0.00001);
		this.m_imgFg.src = this.m_aryImg[0];
		this.m_aryImg.push(this.m_aryImg.shift());
		setTimeout(function(){obj.m_fadeTimer = setInterval(function(){obj.fadeIn()}, 100);}, 3000);
	}
}

function setOpacity(opacity)
{
	opacity = (opacity == 1)?0.99999:opacity;

	if(this.FM_IE_WIN == this.m_fadeMethod)
	{ // IE/Win
	 	this.m_imgFg.style.filter = "alpha(opacity:"+ (opacity * 100) +");";
	}
	else if(this.FM_SAFARI_OLD == this.m_fadeMethod)
	{ // Safari<1.2, Konqueror
		this.m_imgFg.style.KHTMLOpacity = opacity;
	}
	else if(this.FM_MOZILLA_OLD == this.m_fadeMethod)
	{ // Older Mozilla and Firefox
		this.m_imgFg.style.MozOpacity = opacity;
	}
	else if(this.FM_MOZILLA == this.m_fadeMethod)
	{ // Safari 1.2, newer Firefox and Mozilla, CSS3
		this.m_imgFg.style.opacity = opacity;
	}
}

function getOpacity()
{
	var strOpacity = "";

	if(this.FM_IE_WIN == this.m_fadeMethod)
	{ // IE/Win
		strOpacity = new String(this.m_imgFg.style.filter);
		strOpacity = strOpacity.replace(/^.*opacity:([^\)]+)\).*$/,'$1');
		strOpacity /= 100;
	}
	else if(this.FM_SAFARI_OLD == this.m_fadeMethod)
	{ // Safari<1.2, Konqueror
		strOpacity = new String(this.m_imgFg.style.KHTMLOpacity);
	}
	else if(this.FM_MOZILLA_OLD == this.m_fadeMethod)
	{ // Older Mozilla and Firefox
		strOpacity = new String(this.m_imgFg.style.MozOpacity);
	}
	else if(this.FM_MOZILLA == this.m_fadeMethod)
	{ // Safari 1.2, newer Firefox and Mozilla, CSS3
		strOpacity = new String(this.m_imgFg.style.opacity);
	}

	return strOpacity;
}

function SlideShowFade(img, div, ary)
{
//	if(!(img instanceof Image)
//	|| !(div instanceof Div)
//	|| !(ary insatnceof Array))
//	{
//		return false;
//	}
	var obj = this;

	this.FM_UNKNOWN     = 0;
	this.FM_IE_WIN      = 1;
	this.FM_SAFARI_OLD  = 2; // Also Konquerer
	this.FM_MOZILLA_OLD = 3;
	this.FM_MOZILLA     = 4;

	this.m_fadeMethod   = this.FM_UNKNOWN;
	this.m_fadeTimer    = null;
	this.m_imgFg        = img;
	this.m_divBg        = div;
	this.m_aryImg       = ary;

	this.getFadeMethod  = getFadeMethod;
	this.fadeIn         = fadeIn;
	this.fadeOut        = fadeOut;
	this.setOpacity     = setOpacity;
	this.getOpacity     = getOpacity;

	this.m_fadeMethod   = this.getFadeMethod();

	if(this.m_fadeMethod != this.FM_UNKNOWN)
	{
		this.m_imgFg.src = this.m_aryImg[0];
		this.m_aryImg.push(this.m_aryImg.shift());
		this.m_divBg.style.background = "url(" + this.m_aryImg[0]
		                              + ") no-repeat";
		this.m_aryImg.push(this.m_aryImg.shift());
		this.m_fadeTimer = setInterval(function(){obj.fadeOut()}, 100);
	}
}

