;(function($){

function moveUp() {
	$("#slider").slider("moveTo", "-=1")
}

function moveDown() {
	$("#slider").slider("moveTo", "+=1")
}

function unbind() {
	$(document).unbind("wheel").unbind("keydown");
	$("#content").unbind("wheel");
}

var PageDown = 34;
var PageUp = 33;
var ArrowDown = 40;
var ArrowUp = 38;

function setup() {
	var dH = $(window).height() - $("#wrap").height();
	var t = Math.round(dH /2);

	t>0 ? $("#wrap").css("top", t) : $("#wrap").css("top", "0");

	if (dH > 0) {
		unbind();

		$(document).wheel(function(event, delta){
			delta>0 ? moveUp() : moveDown();
		}).keydown(function(event){
			if ((event.keyCode == PageDown) || (event.keyCode == ArrowDown)) {
				moveDown();
			} else if ((event.keyCode == PageUp) || (event.keyCode == ArrowUp)) {
				moveUp();
			}
		});
	} else {
		unbind();

		$("#content").wheel(function(event, delta){
			delta>0 ? moveUp() : moveDown();
			return false;
		});
	}
}

function decode() {
	var tld_ = new Array();
	tld_[0] = "com";
	tld_[1] = "org";
	tld_[2] = "net";
	tld_[3] = "eu";
	tld_[4] = "si";

	var htmlHref = "mailto:";
	var charAt = "@";
	var charDot = ".";

	var elts = $("pre").filter(".epistula");
	$(elts).each(function() {
		var eData = eval("(" + $(this).text() + ")");
		$(this).replaceWith('<a href="'+ htmlHref + eData.name + charAt + eData.sub + charDot + tld_[eData.tld] + eData.param + '">' + eData.txt + '</a>');
	})
}

$(document).ready(function(){
	setup();
	decode();

	var stepSize = $("#content").height();
	var parts = $(".part").length;

	function scrollVertical(value, elt) {
		elt.scrollTop(value * stepSize);
	}

	$("#slider").slider({
		animate: true,
		handle: "#handle",
		min: 0,
		max: parts -1,
		steps: parts,
		slide: function(event,ui) {
			scrollVertical(ui.value, $("#content"));
		},
		change: function(event,ui) {
			scrollVertical(ui.value, $("#content"));
		}
	});
});

$(window).resize(function(event){
	setup();
});

})(jQuery);
