var articles = document.getElementById('updates').getElementsByTagName('ARTICLE');
var maincontainer = document.getElementById('maincontainer');
var elevator = document.getElementById('elevator');
elevator.style.display = 'block';

var backlog = 0; // number of elevator calls since last stop
var p = getp(articles[0]);
document.getElementById('elevator').style.top = p+'px';
var dest;
var moving = false;
var interval = 20;
for(i=0;i<articles.length;i++) {
	articles[i].onmouseover = changedest;
}

// change destination to a given article
function changedest() {
	dest = this;
	backlog++;
	if(!moving) {
		move();
	}
}

// begin or continue moving the elevator to its destination
function move() {
	var destp = getp(dest); // position of destination
	moving = true;
	if(p<destp-backlog-1) { // elevator is higher than dest
		p = p+backlog+1;
	} else if(p>destp+backlog+1) { // elevator is lower than dest
		p = p-backlog-1;
	} else {
		p = destp;
	}
	document.getElementById('elevator').style.top = p+'px';
	if(p==destp) {
		backlog = 0;
		moving = false;
	} else {
		setTimeout('move()',interval);
	}
}

// get position relative to container
function getp(item) {
	return (getpos(item)-getpos(maincontainer));
}
// get position relative to document
// this function from ppk
function getpos(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		do {
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return curtop;
	}
}