if (!Array.prototype.forEach) {
	Array.prototype.forEach = function(fun /*, thisp*/) {
		var len = this.length >>> 0;
		if (typeof fun != "function")
			throw new TypeError();

		var thisp = arguments[1];
		for (var i = 0; i < len; i++) {
			if (i in this)
				fun.call(thisp, this[i], i, this);
		}
	};
}

var slides = new Array();
var running = false;
var timer;
var nextSlide = -1;
var slideTime = 1000;

function addSlide(filename, index, list) {
	if (typeof filename != "string")
		throw new TypeError();
	if (typeof index != "number")
		throw new TypeError();
	slides[index] = new Image();
	slides[index].src = filename;
}

function showNext(delay) {
	if (!running || nextSlide < 0)
		return;
	document["slideshow"].src = slides[nextSlide].src;
	if (++nextSlide >= slides.length)
		nextSlide = 1;
	if (running)
		slideTimer(delay);
}

function slideTimer(delay) {
	timer = setTimeout("showNext(" + delay + ")", delay);
}

function loadSlides(filenames) {
	if (typeof filenames != "object")
		throw new TypeError();
	if (!(filenames instanceof Array) && !Array.prototype.isPrototypeOf(filenames))
		throw new TypeError();
	filenames.forEach(addSlide);
}

function startSlideShow(startIndex, delay) {
	nextSlide = startIndex;
	running = true;
	slideTimer(delay);
	slideTime = delay;
}

function toggleSlideShow() {
	if (running = !running)
		showNext(slideTime);
	else
		clearTimeout(timer);
	return running;
}

function currentSlide() {
	if (nextSlide < 1)
		return -1;
	if (nextSlide == 1)
		return slides.length - 1;
	return nextSlide - 1;
}