if (document.getElementById && document.createElement) {
	window.onload = buildSlides;
	document.onkeydown = captureKeystrokes;
}

function buildSlides() {

	// attach stylesheet
	/*
	var stylesheet = "slideshow/slideshow.css";
	if (document.createStyleSheet) {
		document.createStyleSheet(stylesheet);
	}
	else {
		var link = document.createElement("link");
		link.rel = "stylesheet";
		link.type = "text/css";
		link.href = stylesheet;
		document.getElementsByTagName("head")[0].appendChild(link);
	}
	*/
	// start timer
	var startTime = new Date();

	// build slides
	var childNodes = document.body.childNodes;
	var slideNumber = 0;
	var slideTitle = null;
	for (var i = 0, n = childNodes.length; i < n; i++) {
		var child = childNodes[i];
		if (child.nodeName.match(/div/i)) {
			slideNumber++;
			var frame = getFrame();
			var slide = getSlide();
			var body = getBody();
			var header = getHeader();
			var footer = getFooter();
			slide.appendChild(header);
			slide.appendChild(body);
			slide.appendChild(footer);
			frame.appendChild(slide);
			child.parentNode.replaceChild(frame, child);
			body.style.marginTop = (((slide.offsetHeight - body.offsetHeight) / 2) - header.offsetHeight - 16).toString() + "px";
		}
	}

	// remove back & bar from first slide
	var firstSlideFooterControls = document.getElementById("slide1").firstChild.lastChild.lastChild;
	firstSlideFooterControls.removeChild(firstSlideFooterControls.childNodes[2]); // back
	firstSlideFooterControls.removeChild(firstSlideFooterControls.childNodes[1]); // bar

	//	remove bar & next from last slide
	var lastSlideFooterControls = document.getElementById("slide" + slideNumber.toString()).firstChild.lastChild.lastChild;
	lastSlideFooterControls.removeChild(lastSlideFooterControls.childNodes[1]); // bar
	lastSlideFooterControls.removeChild(lastSlideFooterControls.childNodes[0]); // next

	// add an <hr> so IE shows last slide bottom margin
	var end = document.createElement("hr");
	end.className = "end";
	document.body.appendChild(end);
	
	// assign body class to set background color
	document.body.className += " show";

	// end & show timer
	var endTime = new Date();
	window.status = slideNumber.toString() + " slides loaded in " + ((endTime - startTime)/1000).toString() + " seconds";

	function getFrame() {
		var frame = document.createElement("div");
		frame.className = "frame";
		frame.id = "slide" + slideNumber.toString();
		return frame;
	}

	function getSlide() {
		var slide = document.createElement("div");
		slide.className = "slide";
		return slide;
	}

	function getBody() {
		var body = childNodes[i].cloneNode(true);
		body.className += " body";
		return body;
	}

	function getHeader() {
		var header = document.createElement("div");
		header.className = "header";
		var sectionHeading = body.getElementsByTagName("h2");
		if (sectionHeading[0]) {
			slideTitle = sectionHeading[0].cloneNode(true);
			header.appendChild(sectionHeading[0]);
		}
		else if (slideTitle) {
			header.appendChild(slideTitle.cloneNode(true));
		}
		return header;
	}

	function getFooter() {
		var footer = document.createElement("div");
		footer.className = "footer";
		var controls = document.createElement("div");
		controls.className = "controls";
		var next = document.createElement("span");
		next.className = "next";
		next.id = "next" + (slideNumber + 1).toString();
		next.onclick = goNext;
		var bar = document.createElement("span");
		bar.className = "bar";
		var back = document.createElement("span");
		back.className = "back";
		back.id = "back" + (slideNumber - 1).toString();
		back.onclick = goBack;
		controls.appendChild(next);
		controls.appendChild(bar);
		controls.appendChild(back);
		footer.appendChild(controls);
		return footer;
	}
}

function goBack() {
	document.location = "#" + this.id.replace("back", "slide");
}

function goNext() {
	document.location = "#" + this.id.replace("next", "slide");
}

function captureKeystrokes(event) {
	if (typeof event == "undefined") { event = window.event;	} // IE
	switch (event.keyCode) {
	case 32 : // Space
	case 34 : // Page Down
	case 39 : // Right Arrow
		cancelEvent(event);
		window.scrollBy(0, getFrameHeight());
		break;
	case 33 : // Page Up
	case 37 : // Left Arrow
		cancelEvent(event);
		window.scrollBy(0, -getFrameHeight());
		break;
	default :
		//alert(event.keyCode);
		break;
	}
}

function getFrameHeight() {
	if (typeof frameHeight == "undefined") {
		if (window.innerHeight) { frameHeight = window.innerHeight; } // Mozilla
		else if (document.documentElement.clientHeight) { frameHeight = document.documentElement.clientHeight; } // IE6
		else if (document.body.clientHeight ) { frameHeight = document.body.clientHeight; } // IE5
		else { frameHeight = 0; }
	}
	return frameHeight;
}

function cancelEvent(event) {
	if (event.preventDefault) { event.preventDefault(); } // Mozilla
	else { event.returnValue = false; } // IE
}
