﻿function Slideshow()
{
	this.counter = 0;
	this.currentItemIndex = -1;
	this.fadeDuration = 0.5;
	this.items = new Array();
	this.timer = null;
	this.timerInterval = 2000;
}

// creates a new slideshow in the specified element
Slideshow.create = function(id)
{
	var target = Tactica.getObject(id);
	
	if (target)
	{
		var slideshow = new Slideshow();
		
		for (var i = 1; i < arguments.length; i++)
		{
			var slide = target.appendChild(document.createElement("DIV"));
			var slideImage = Tactica.basePath + arguments[i];
			
			slide.className = "slide";
			slide.style.backgroundImage = "url('" + slideImage + "')";
			slide.style.filter = "alpha(opacity=0)";
			slide.style.height = target.offsetHeight + "px";
			slide.style.opacity = "0";
			slide.style.overflow = "hidden";
			slide.style.position = "absolute";
			slide.style.left = "0px";
			slide.style.textIndent = "-1000em";
			slide.style.top = "0px";
			slide.style.width = target.offsetWidth + "px";
			
			slideshow.items.push(slide);
		}
		
		slideshow.currentItemIndex = 0;
		slideshow.timerInterval = 5000;
		slideshow.start();
		
		return slideshow;
	}
	
	return null;
}

Slideshow.createFromList = function(targetID, sourceID)
{
	var source = Tactica.getObject(sourceID);
	var target = Tactica.getObject(targetID);
	
	if (source != null && target != null)
	{
		var links = source.getElementsByTagName("A");
		var slideshow = new Slideshow();
		var slideTitle = target.getElementsByTagName("H2")[0];
		var slideCaption = target.getElementsByTagName("P")[0];
		
		for (var i = 0; i < links.length; i++)
		{
			if (links[i].href.indexOf("javascript:") < 0)
			{
				var slide = target.appendChild(document.createElement("DIV"));
				var slideImage = links[i].href;
				
				slide.caption = links[i].getElementsByTagName("IMG")[0].alt;
				slide.captionElement = slideCaption;
				slide.className = "slide";
				slide.style.background = "url('" + slideImage + "') left top no-repeat";
				slide.style.filter = "alpha(opacity=0)";
				slide.style.height = target.offsetHeight + "px";
				slide.style.opacity = "0";
				slide.style.overflow = "hidden";
				slide.style.position = "absolute";
				slide.style.left = "0px";
				slide.style.textIndent = "-1000em";
				slide.style.top = "0px";
				slide.style.width = target.offsetWidth + "px";
				slide.title = links[i].title;
				slide.titleElement = slideTitle;
				slide.onswap = function()
				{
					this.captionElement.innerHTML = "";
					this.captionElement.appendChild(document.createTextNode(this.caption));
					this.titleElement.innerHTML = "";
					this.titleElement.appendChild(document.createTextNode(this.title));
				}
				
				slideshow.items.push(slide);
			}
		}
		
		slideshow.timerInterval = 5000;
		slideshow.show(0);
		slideshow.start();
		
		return slideshow;
	}
	
	return null;
}

// shows a specific slide and stops the slideshow
Slideshow.prototype.show = function(index)
{
	var instance = this;
	
	instance.currentItemIndex = index - 1;
	instance.swap();
	instance.stop();
}

// shows the next slide in the list
Slideshow.prototype.showNext = function()
{
	this.swap();
}

// shows the previous slide in the list
Slideshow.prototype.showPrev = function()
{
	this.currentItemIndex = Math.max(this.currentItemIndex - 2, -1);
	this.swap();
}

// starts the slideshow
Slideshow.prototype.start = function()
{
	this.startTimer();
}

// sets a timeout to show the next slide
Slideshow.prototype.startTimer = function()
{
	var instance = this;

	instance.timer = window.setTimeout(function(){instance.swap()}, instance.timerInterval);
}

// stops the slideshow
Slideshow.prototype.stop = function()
{
	var instance = this;

	window.clearTimeout(instance.timer);
	instance.timer = null;
}

// swaps slides
Slideshow.prototype.swap = function()
{
	var i1 = this.currentItemIndex;
	var i2 = this.currentItemIndex + 1;
	var instance = this;
	
	window.clearTimeout(instance.timer);
	
	i2 = i2 % this.items.length;
	
	var item1 = this.items[i1];
	var item2 = this.items[i2];
	
	if (item2)
	{
		item2.style.display = "block";
		item2.style.filter = "alpha(opacity=0)";	
		item2.style.opacity = 0;
		item2.style.zIndex = this.counter + 1;
		
		if (typeof(item2.onswap) == "function")
		{
			item2.onswap();
		}

		new FadeAnimation(item2, 0, 1, this.fadeDuration).execute();
	}
	
	if (item1 != null && item1.service != null) item1.service.className = "";
	if (item2 != null && item2.service != null) item2.service.className = "lit";

	this.counter++;
	this.currentItemIndex = i2;
	this.startTimer();
}
