/******************************************************************* 
* File    : JSFX_FadingSlide.js  © JavaScript-FX.com
* Created : 2001/11/08 
* Author  : Roy Whittle  (Roy@Whittle.com) www.Roy.Whittle.com 
* Purpose : To create a slide show that fades in/out
* Requires: JSFX_FadingRollovers.js
* History 
* Date         Version        Description 
* 2001-08-09	1.0		First version
* 2001-12-04	1.1		Fixed bug + added onClick to open a window
*					with an alternate image.
***********************************************************************/ 
JSFX.slide = function(theImg, theUrl)
{
	this.theImg = theImg;
	this.theUrl = theUrl;
}
JSFX.FadingSlideShow = function(theImageName, theDelay, theFadeStep, w, h)
{
	FadeInStep 	= theFadeStep;
	FadeOutStep = theFadeStep;
	if(!w) w = 300;
	if(!h) h = 200;

	this.id		= JSFX.FadingSlideShow.getId();
	this.state		= "stopped";
	this.timeId		= null;
	this.imgName	= theImageName;
	this.currSlide	= 0;
	this.delay		= theDelay*1000;
	this.slides		= new Array();
	this.win		= null;
	this.w		= w;
	this.h		= h;

	window[this.id] = this;
}
JSFX.FadingSlideShow.slideNo = 0;
JSFX.FadingSlideShow.getId = function()
{
	return "JSFXss" + JSFX.FadingSlideShow.slideNo++;
}

JSFX.FadingSlideShow.prototype.addSlide = function(theImg, theUrl)
{
	var theId = JSFX.FadingSlideShow.getId();
	JSFX.Rollover(theId, theImg);
	this.slides[this.slides.length]=new JSFX.slide(theId, theUrl);
}

JSFX.FadingSlideShow.prototype.animate = function()
{
	if(this.state=="running")
	{
		JSFX.fadeOut(this.imgName, this.slides[ this.currSlide ].theImg);
		this.currSlide = (this.currSlide + 1) % this.slides.length;
		JSFX.fadeIn(this.imgName, this.slides[ this.currSlide ].theImg);
		this.timeId = this.setTimeout("animate()", this.delay);
	}
}
JSFX.FadingSlideShow.prototype.start = function()
{
	if(this.state == "stopped")
	{
		this.currSlide = 0;
		JSFX.fadeIn(this.imgName, this.slides[ this.currSlide ].theImg );
		this.state="running";
		this.timeId = this.setTimeout("animate()", this.delay);
		theImg = JSFX.findImg(this.imgName, document);
		theImg.onmousedown = this.clickFn;
		theImg.ss = this;
	}
}
JSFX.FadingSlideShow.prototype.clickFn = function()
{
	ss = this.ss;
	if(ss.win)
		if(!ss.win.closed)
			ss.win.close();
	if(ss.slides[ ss.currSlide ].theUrl)
	{
		ss.win = window.open(ss.slides[ ss.currSlide ].theUrl,"FadeSS","width="+ss.w+",height="+ss.h);
		ss.win.moveTo(0,0);
		ss.win.focus();
	}
	return false;
}
JSFX.FadingSlideShow.prototype.stop = function()
{
	clearTimeout(this.timeId);
	this.state="stopped";
	JSFX.fadeOut(this.imgName, this.slides[ this.currSlide ].theImg);
}
JSFX.FadingSlideShow.prototype.pause = function()
{
	if(this.state == "running")
	{
		clearTimeout(this.timeId);
		this.state="paused";
		JSFX.fadeIn(this.imgName, this.slides[ this.currSlide ].theImg);
	}
}
JSFX.FadingSlideShow.prototype.resume = function()
{
	if(this.state == "paused" || this.state == "stopped")
	{
		this.state="running";
		this.animate();
	}
}
JSFX.FadingSlideShow.prototype.next = function()
{
	if(this.state=="paused" || this.state == "running")
	{
		JSFX.fadeOut(this.imgName, this.slides[ this.currSlide ].theImg);
		this.currSlide = (this.currSlide + 1) % this.slides.length;
		JSFX.fadeIn(this.imgName, this.slides[ this.currSlide ].theImg);
	}
}
JSFX.FadingSlideShow.prototype.prev = function()
{
	if(this.state=="paused" || this.state == "running")
	{
		JSFX.fadeOut(this.imgName, this.slides[ this.currSlide ].theImg);
		this.currSlide--;
		if(this.currSlide < 0)
			this.currSlide = this.slides.length - 1;
		JSFX.fadeIn(this.imgName, this.slides[ this.currSlide ].theImg);
	}
}
JSFX.FadingSlideShow.prototype.getState = function()
{
	return this.state;
}
JSFX.FadingSlideShow.prototype.getSlideCount = function()
{
	return this.slides.length;
}
JSFX.FadingSlideShow.prototype.getCurrentSlide = function()
{
	return this.currSlide;
}
JSFX.FadingSlideShow.prototype.setTimeout = function(f, t) 
{
	return setTimeout("window."+this.id+"."+f, t);
}

