if (document.getElementById && document.createElement) {
	document.write('<link rel="stylesheet" type="text/css" href="/slideshow/slideshow.css" />');
	if ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
		document.write('<link rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px)" href="/slideshow/iphone.css" />');
		document.write('<meta name="viewport" content="width=720" />');
		window.onload = function() {
			window.scrollTo(0, 1);
			setTimeout(buildSlides, 100);
		}
	}
	else {
		window.onload = buildSlides;
	}
	document.onkeydown = captureKeystrokes;
}

function buildSlides() {
	// 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 content = getContent(); // must get content before header
			var header = getHeader();
			var footer = getFooter();
			slide.appendChild(header);
			slide.appendChild(content);
			slide.appendChild(footer);
			frame.appendChild(slide);
			child.parentNode.replaceChild(frame, child);
			content.style.marginTop = (((slide.offsetHeight - content.offsetHeight) / 2) - header.offsetHeight).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 5 & 6 show bottom margin on last slide
	var end = document.createElement("hr");
	end.className = "end";
	document.body.appendChild(end);
	
	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 getContent() {
		var content = childNodes[i].cloneNode(true);
		content.className += " content";
		return content;
	}

	function getHeader() {
		var header = document.createElement("div");
		header.className = "header";
		var sectionHeadings = content.getElementsByTagName("h2");
		if (sectionHeadings[0]) {
			slideTitle = sectionHeadings[0];
			content.removeChild(sectionHeadings[0]);
		}
		if (slideTitle) {
			header.appendChild(slideTitle.cloneNode(true));
			var slideNumberSpan = document.createElement("span");
			slideNumberSpan.className = "slidenumber";
			slideNumberSpan.appendChild(document.createTextNode(" Slide " + slideNumber + ": "));
			header.firstChild.insertBefore(slideNumberSpan, header.firstChild.childNodes[0]);
			//header.firstChild.appendChild(slideNumberSpan);
		}
		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
}