
function Point( x, y ) {
	this.x = x;
	this.y = y;
}

var SCROLL_DELAY = 40;
var SCROLL_MOVE_COUNT = 24;

function showLess() {
	disableScrolling();
	var b_l = document.getElementById('burriterialist');
	var r_u = remainingUpper(b_l);
	if ( r_u <= 0 )
		return enableScrolling();

	var s_m = Math.min(SCROLL_MOVE_COUNT,Math.floor(getParabolicWidth(r_u)));
	var a = makeParabolicArray(0,0,0,1,s_m);

	var s = 0;
	for ( var i in a )
		s += a[i].y;
	while ( s++ < r_u && a.length < SCROLL_MOVE_COUNT )
		a.push(new Point(0,1));

	var mba = moveByArray(a,b_l,SCROLL_DELAY);
	mba();
}

function showMore() {
	disableScrolling();
	var b_l = document.getElementById('burriterialist');
	var r_l = remainingLower(b_l);
	if ( r_l <= 0 )
		return enableScrolling();

	var s_m = Math.min(SCROLL_MOVE_COUNT,Math.floor(getParabolicWidth(r_l)));
	var a = makeParabolicArray(0,0,0,-1,s_m);

	var s = 0;
	for ( var i in a )
		s -= a[i].y;
	while ( s++ < r_l && a.length < SCROLL_MOVE_COUNT )
		a.push(new Point(0,-1));

	var mba = moveByArray(a,b_l,SCROLL_DELAY);
	mba();
}

function disableScrolling() {
	var scroll_less = document.getElementById('burriteriascrollless');
	var scroll_more = document.getElementById('burriteriascrollmore');

	scroll_less.style.visibility = 'hidden';
	scroll_more.style.visibility = 'hidden';
}

function enableScrolling() {
	var b_l = document.getElementById('burriterialist');
	document.getElementById('burriteriascrollless').style.visibility = remainingUpper(b_l) > 0 ? 'visible' : 'hidden';
	document.getElementById('burriteriascrollmore').style.visibility = remainingLower(b_l) > 0 ? 'visible' : 'hidden';
}

function remainingUpper( elt ) {
	return -parseInt(elt.offsetTop);
}

function remainingLower( elt ) {
	var ot = parseInt(elt.offsetTop);
	var ch = parseInt(elt.clientHeight);

	var ph = 0;
	if ( elt.parentNode )
		ph = parseInt(elt.parentNode.clientHeight);

	return ot+ch-ph;
}

function getParabolicWidth( d ) {
	return -1+Math.sqrt(4*d+1);
}

function makeParabolicArray( x_0, y_0, m_dx, m_dy, c ) {
	var a = new Array();

	var dx = 0;
	var dy = 0;

	for ( var i = 0; i < c; ++i ) {
		if ( i < c/2 ) {
			dx += m_dx;
			dy += m_dy;
			a.push(new Point(dx,dy));
		} else {
			dx -= m_dx;
			dy -= m_dy;
			a.push(new Point(dx,dy));
		}
	}

	return a;
}

function moveByArray( a, e, t ) {
	return function() {
		var p = a.shift();
		moveElement(e,p.x,p.y);

		if ( a.length < 1 )
			return enableScrolling();

		setTimeout(moveByArray(a,e,t),t);
	};
}

function moveElement( elt, dx, dy ) {
	var x_0 = parseInt(elt.offsetLeft);
	var y_0 = parseInt(elt.offsetTop);

	var x_1 = x_0 + dx;
	var y_1 = y_0 + dy;

	elt.style.left = x_1+'px';
	elt.style.top = y_1+'px';
}

