var imagePath				= "/images/slideshow/";
var slideShowXmlPath		= "/images/slideshow/slides.xml";
var slideShowXmlTagName		= "slide";
var slideShowFadeDuration	= .25;

var xmlDoc;

function initializeSlideShow() { 
	try {
		if ($('slideshow')) loadXML(slideShowXmlPath);
	} catch (e) {
		abort(e);
	}
}

function loadXML(url) {
	xmlDoc = false;
	if(window.XMLHttpRequest) {
		try {
			xmlDoc = new XMLHttpRequest();
		} catch(e) {
			xmlDoc = false;
		}
	} else if(window.ActiveXObject) {
		try {
			xmlDoc = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				xmlDoc = false;
			}
		}
	}
	if(xmlDoc) {
		xmlDoc.onreadystatechange = runSlideShow;
		xmlDoc.open("GET", url, true);
		xmlDoc.send("");
	}	
}

function runSlideShow() {
	try {
		if (xmlDoc.readyState == 4) {
	        	if (xmlDoc.status == 200) {
				var xmlObjects = xmlDoc.responseXML.getElementsByTagName(slideShowXmlTagName);
				if (xmlObjects.length > 0) { // if there's no problem parsing the xml file, continue
					loadFirstSlide(xmlObjects[0].attributes);
					for (var i=1; i < xmlObjects.length; i++) {
						var slideShowImageDiv		= document.createElement("div");
						var slideShowImageLink		= document.createElement("a");
						var slideShowImage			= document.createElement('img');
						slideShowImageDiv.id 			= "slideshow_image_" + i;
						slideShowImageDiv.className 	= "slides";
						slideShowImageDiv.style.display = "none";
						slideShowImageLink.href			= xmlObjects[i].attributes[1].nodeValue;
						slideShowImage.src				= imagePath + xmlObjects[i].attributes[0].nodeValue;
						slideShowImageLink.appendChild(slideShowImage);				
						slideShowImageDiv.appendChild(slideShowImageLink);
						$("slideshow").appendChild(slideShowImageDiv);
					}
					var slideShowControls = $("controls").getElementsByTagName("a");
					for (var i=0; i < slideShowControls.length; i++) {
						slideShowControls[i].onclick = function() {
							var linkId = this.id.split("_");
							changeSlide(linkId[1]);
							return false;
						};
					}
				} else throw("Cannot find '" + slideShowXmlTagName + "' tag in '" + slideShowXmlPath + "'.");
			} else throw("Server response was '" + xmlDoc.statusText + "' when a request was sent for '" + slideShowXmlPath + "'.");
		}
	} catch (e) {
		abort(e);
	}
}

function changeSlide(slide) {
	var slideShow	= $("slideshow");
	var slides	= document.getElementsByClassName("slides", slideShow);
	var numSlides	= slides.length;
	var newSlideId	= "slideshow_image_0";
	if (slide == "next" || slide == "prev") {
		var currentSlideNumber = 0;
		for (var i=0; i < numSlides; i++) {
			if (slides[i].alt == "active") {
				var tmp = slides[i].id.split("_");
				var currentSlideNumber = parseInt(tmp[2], 10);
			}
			slides[i].alt = "";
		}
		if (slide == "next") var newSlideNumber = (currentSlideNumber >= (numSlides - 1)) ?  numSlides - 1 : currentSlideNumber + 1;
		else var newSlideNumber = (currentSlideNumber == 0) ? 0 : currentSlideNumber - 1;
		newSlideId = "slideshow_image_" + newSlideNumber;
	} else {
		newSlideId = "slideshow_image_" + slide;
	}
	
	for (var j=0; j < numSlides; j++) {
		if (slides[j].style.display != "none") {
			new Effect.Opacity(slides[j], {
				duration: slideShowFadeDuration, 
				transition: Effect.Transitions.linear, 
				from: 1, 
				to: 0 }
			);
		}
	}
	window.setTimeout(	'Effect.Appear(\'' + newSlideId + '\', {duration:' + slideShowFadeDuration + '})',
				(slideShowFadeDuration*1200)
	);
	
	$(newSlideId).alt = "active";
}

function loadFirstSlide(attr) {
	$('slideshow').innerHTML = '<a href="' + attr[1].nodeValue + '"><div id="slideshow_image_0" class="slides"><img src="' + imagePath + attr[0].nodeValue + '" alt="" /></a>';
}

function openPage(loc) {
	window.location = loc;
}

function abort(exception) {
	var error = (typeof(exception) == "string") ? exception : exception.message;
	//$("slideshow").innerHTML = "<p>The slideshow is currently inactive.</p>";
	alert(error);
}

function debug(element) {
	var output = element;
	if (typeof(element) == "object") {
		for (var prop in element) output += prop + ' = ' + element[prop] + "\n";
	}
	var debugWindow = window.open();
	debugWindow.document.write('<pre>' + output + '</pre>');
}

	
window.onload = initializeSlideShow;
