var targetTagName = "h2";

function nextEntry() {
	var elements = document.getElementsByTagName(targetTagName);
	var scrollTop = getScrollTop();
	for (i=0; i<elements.length; i++) {
		var element = elements[i];
		var offsetTop = getOffsetTop(element);
		if ( offsetTop > scrollTop ) {
			window.scrollTo(0, offsetTop);
			break;
		}
	}
}

function prevEntry() {
	var elements = document.getElementsByTagName(targetTagName);
	var scrollTop = getScrollTop();
	for (i=0; i<elements.length; i++) {
		var element = elements[i];
		var offsetTop = getOffsetTop(element);
		if ( offsetTop >= scrollTop ) {
			if(i==0) {
				window.scrollTo(0, 0);
			} else {
				window.scrollTo(0, getOffsetTop(elements[i-1]));
			}
			break;
		}
	}
}

function getOffsetTop(obj) {
	var top = 0;
	if (obj.offsetParent) {
		top = obj.offsetTop
		while (obj = obj.offsetParent) top += obj.offsetTop;
	}
	return top;
}

function getScrollTop() {
	var st = (!document.all)?window.pageYOffset:((document.compatMode=='CSS1Compat')?document.documentElement.scrollTop:document.body.scrollTop);
	return st;
}

function getKeyCode(e) {
	var evt=(e)?e:(window.event)?window.event:null;
	if(evt){
		var key=(evt.charCode)?evt.charCode:((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
		return key;
	}
}

function keybind(e) {
	var keyCode;
	if (keyCode = getKeyCode(e)) {
		var keyChar = String.fromCharCode(keyCode);
		switch(keyChar) {
			case 'j': nextEntry(); break;
			case 'k': prevEntry(); break;
		}
	}
}

document.onkeypress=keybind;