var section = []; // list of anchors added to each entry
var cursection = null;
var refpage = document.referrer;

// insert anchor tags at the top of each blog entry
function getentries() {
	var entry = 0;
	var div = document.getElementsByTagName('div');
	for (var i=0; i<div.length; i++) {
		if ((div[i].className == "copy") || (div[i].className == "comments") || (div[i].className == "comments best")) {
			if (div[i].className == "copy") {
				var span = div[i].getElementsByTagName('span');
				for (var s=0; s<span.length; s++) {
					if (span[s].className == "smallcopy") {
						var links = span[s].getElementsByTagName('a');
						for (var a=0; a<links.length; a++) {
							if (links[a].className == "more") {
								div[i].permalink = links[a];
							}
						}
					}
				}
			}
			section[section.length] = div[i];
		}
	}
}

// Determine the offset from the top of the page
function offsetTop(obj) {
	var y = 0;
	for (; obj; obj=obj.offsetParent) {
		y += obj.offsetTop;
		//	if (obj.scrollTop) y += obj.scrollTop;
	}
	return y;
}

// Get the value of the top left corner of the current viewport relative to the whole page
function getYScroll() {
	var yscroll;
	if (self.pageYOffset) // all except Explorer
	{ yscroll = self.pageYOffset; }
	else if (document.documentElement && document.documentElement.scrollTop) // Explorer 6 Strict
	{ yscroll = document.documentElement.scrollTop; }
	else if (document.body) // all other Explorers
	{ yscroll = document.body.scrollTop; }
	return yscroll;
}

// scroll back to the previous article
function prevArticle() {
	var ypos = getYScroll();
	for (var i=section.length; --i>=0;) {
		if (offsetTop(section[i]) < ypos) {
			window.scroll(0,offsetTop(section[i]));
			cursection = i;
			break;
		}
	}
}

// advance to the next article
function nextArticle() {
	var ypos = getYScroll();
	for (var i=0; i<section.length; i++) {
		if (offsetTop(section[i]) > ypos) {
			window.scroll(0,offsetTop(section[i]));
			cursection = i;
			break;
		}
	}
}

//	highlight the current post
function highlightPost(s) {
	s.style.background = '#FFFFE0';
}

// Follow a post's link to its permanent archive page
function followPost() {
	if ((cursection >= 0) && (section[cursection].permalink) && (section[cursection].permalink != null)) {
		window.location = section[cursection].permalink.href;
	}
}

//	Return to the referring page.
function prevPage() {
	if (refpage != '') {
		window.location = refpage;
	}
}

// process keypresses
function navkey(key) {
	var modifiedKey = false;
	if (!key) key=window.event;
	if (!key.target && !key.srcElement) return;
	if (key.target && ((key.target.tagName.toLowerCase() == 'input') || (key.target.tagName.toLowerCase() == 'textarea'))) return;
	if (key.srcElement && ((key.srcElement.tagName.toLowerCase() == 'input') || (key.srcElement.tagName.toLowerCase() == 'textarea'))) return;
	if ((key.metaKey) || (key.shiftKey) || (key.altKey) || (key.ctrlKey)) modifiedKey = true;
	if (key.keyCode) key=key.keyCode;

//	if (!document.documentElement) return;
	if (typeof section[0].offsetTop == 'undefined') return;

	if (!modifiedKey) {
		if (key == 190) nextArticle();
		if (key == 188) prevArticle();
		if (key == 13) {
			if (key.target && (key.target.tagName.toLowerCase() == 'a')) return;
			followPost();
		}
		if (key == 59) prevPage();
	}
}

// hook events
document.onkeydown = navkey;
window.onload = getentries;

