var frame = null;
var delay = FADE;
var transition = false;
var initialized = false;
var reverse = false;
var mainTimer = null;
var fadeTimer = null;

window.onload = init;

function start() {
	if(ss == null) {
		return;
	}
	if(ss.children.length == 2 && frame != ss.firstChild) {
		return;
	}
	ss.filters[0].apply();
	frame.style.display = "none";
	ss.filters[0].play(duration=FADE);
	//window.status = "SLIDESHOW START: " + (FADE * 1000);
	//fadeTimer = window.setTimeout(finish, FADE * 1000);
	fadeTimer = window.setTimeout(finish, FADE * 1000);
	transition = true;
}

function finish() {
	if(ss == null) {
		return;
	}
	transition = false;
	if(reverse) {
		frame = frame.previousSibling;
		if(frame == null || frame == ss.firstChild) {
			frame = ss.lastChild;
		}
		reverse = false;
	}
	else {
		frame = frame.nextSibling;
		if(frame == null) {
			frame = ss.firstChild.nextSibling;
		}
	}
	parseDelay();
	ss.filters[0].apply();
	frame.style.display = "block";
	ss.filters[0].play(duration=FADE);
	//window.status = "SLIDESHOW FINISH: " + (FADE * 1000 + delay);
	//mainTimer = window.setTimeout(start, FADE * 1000 + delay);
	mainTimer = window.setTimeout(start, FADE * 1000 + delay);
}

function pause() {
	if(!transition) {
		window.clearTimeout(fadeTimer);
		window.clearTimeout(mainTimer);
		//window.status = "SLIDESHOW PAUSE: " + (FADE * 1000 + delay);
		//mainTimer = window.setTimeout(start, (FADE * 1000 + delay));
		mainTimer = window.setTimeout(start, (FADE * 1000 + delay));
	}
}

function init() {
	if(ss == null) {
		return;
	}
	frame = ss.firstChild;
	parseDelay();
	ss.onmousemove = pause;
	//window.status = "SLIDESHOW INIT: " + delay;
	mainTimer = window.setTimeout(start, delay);
}

function next() {
	if(!transition) {
		window.clearTimeout(fadeTimer);
		window.clearTimeout(mainTimer);
		start();
	}
}

function prev() {
	if(!transition) {
		window.clearTimeout(fadeTimer);
		window.clearTimeout(mainTimer);
		reverse = true;
		start();
	}
}

function parseDelay() {
	try {
		delay = parseInt(frame.delay);
	}
	catch(ex) {
		delay = DELAY;
	}
	if(delay < FADE) {
		delay = DELAY;
	}
}