(function () {
	var script = document.getElementsByTagName ('script');
		script = script [script.length - 1];
		
	var container = document.getElementById (script.attributes.containerId.nodeValue);
	var nav = document.getElementById (script.attributes.navId.nodeValue);
	var pause = script.attributes.pause.nodeValue;
	
	var frameDelay = script.attributes.frameDelay.nodeValue;
	var transDelay = script.attributes.transDelay.nodeValue;
	var index = 0;
	var lastIndex = 0;
	var transIndex = -1;
	var frames = new Array ();
	var buttons = new Array ();
	var node = null;
	var i = 0;
	var timer = -1;
	var suspended = false;
	
	switch (pause.toLowerCase ()) {
		case 'never' :
			pause = pause.toLowerCase ();
			break;
		default :
			pause = 'mouseover';
	}
	
	for (i = 0; i < container.childNodes.length; i++) {
		node = container.childNodes [i];
		if (node.nodeType == 1) {
			frames.push (node);
		}
	}
	
	for (i = 0; i < nav.childNodes.length; i++) {
		node = nav.childNodes [i];
		if (node.nodeType == 1) {
			buttons.push (node);
		}
	}
	
	function setStatusClass (element, className) {
		element.className = element.className.split (' ') [0] + ' ' + className;
	}
	
	transition = function () {
		var delay = 0;
		var callback = null;
		
		transIndex++;
		if (transIndex == 10) {
			endTransition ();
			delay = frameDelay;
			callback = next;
		} else {
			if (transIndex < 3) updateButtons ();

			setStatusClass (frames [index], 'slideshow-transition-' + transIndex);
			delay = transDelay;
			callback = transition;
		}
		
		if (callback != next || !suspended) timer = setTimeout (callback, delay);
	}
	
	function endTransition () {
		if (transIndex > 0) {
			setStatusClass (frames [lastIndex], 'slideshow-inactive');
			setStatusClass (frames [index], 'slideshow-active');
			document.getElementById ('SlideshowLink').href = frames [index].attributes.link.nodeValue;
			transIndex = -1;
		}
		if (timer > -1) {
			clearTimeout (timer);
			timer = -1;
		}
	}
	
	function updateButtons () {
		switch (transIndex) {
			case 0 :
			case 1 :
				setStatusClass (buttons [lastIndex], 'slideshow-transition');
				setStatusClass (buttons [index], 'slideshow-transition');
				break;
			case 2 :
				setStatusClass (buttons [lastIndex], 'slideshow-inactive');
				setStatusClass (buttons [index], 'slideshow-active');
		}
	}
	
	function suspend () {
		suspended = true;
		if (transIndex == -1 && timer > -1) {
			clearTimeout (timer);
			timer = -1;
		}
	}
	
	function resume () {
		suspended = false;
		if (timer == -1) timer = window.setTimeout (next, frameDelay);
	}
	
	function next () {
		endTransition ();
		lastIndex = index;
		if (++index == frames.length) index = 0;
		transition ();
	}
	
	function back () {
		endTransition ();
		lastIndex = index;
		if (--index == -1) index = 9;
		transition ();
	}
	
	function jump (newIndex) {
		if (newIndex != index) {
			endTransition ();
			lastIndex = index;
			index = newIndex;
			transition ();
		}
	}
	
	if (pause == 'mouseover') {
		container.onmouseover =
		nav.onmouseover = suspend;
		container.onmouseout =
		nav.onmouseout = resume;
	}
	
	for (i = 0; i < frames.length; i++) {
		(function (ind) {
			buttons [ind].onmousedown = function () { jump (ind); };
		}) (i); 
	}
	
	timer = window.setTimeout (next, frameDelay);
}) ();
