var isDragger = false;
var oldMousePosition = 0;
var body = null;
var startScroller = 207;
var scrollWidth = 10;
var endScroller = 44;

function initScroller() {
	
	var scroller = document.createElement('div');
	scroller.id = 'scroller';
	
	var drag = document.createElement('div');
	drag.id = 'drag';
	
	document.body.appendChild(scroller);
	document.body.appendChild(drag);
	
	newPos = $('footer-info-scroller').cumulativeOffset().left - 10;
	$('scroller').style.left = newPos + 'px';
	$('scroller').style.top = startScroller + 'px';
	
	body = Element.extend(document.body);
	
	$('scroller').style.height = (body.getHeight() - startScroller - endScroller) + 'px';

	$('drag').style.left = ($('scroller').cumulativeOffset().left + ($('scroller').getWidth())) + 'px';
	$('drag').style.top = (document.viewport.getScrollOffsets().top + document.viewport.getHeight() / 2 - $('drag').getHeight() / 2) + 'px';
	oldPositionDragger = $('drag').viewportOffset().top;

	Event.observe(window, 'scroll', scrollWindow);
	Event.observe(window, 'resize', resizeWindow);
	new Draggable('drag', { constraint : 'vertical', onDrag : dragMe, onStart : startMe, onEnd : endMe, snap : snapIt});

}

function startMe(object, mouseEvent) {
	isDragger = true;
	oldMousePosition = Event.pointerY(mouseEvent);
}

function dragMe(object, mouseEvent) {
	
	completeHeight = body.getHeight() - document.viewport.getHeight() / 2 - document.viewport.getHeight() / 2 - $('drag').getHeight() / 2 + $('drag').getHeight();
	scrollWidth =  Math.floor(completeHeight / 100);
	
	y = Event.pointerY(mouseEvent);
	if(oldMousePosition  - scrollWidth > y /*&& document.viewport.getHeight() / 2 - $('drag').getHeight() / 2 <= y*/) {
		window.scrollBy(0, -scrollWidth);
		oldMousePosition = y;
	} else if(oldMousePosition  + scrollWidth < y /*&& body.getHeight() - document.viewport.getHeight() / 2 >= y*/) {
		window.scrollBy(0, scrollWidth);
		oldMousePosition = y;
	}
}

function endMe() {
	isDragger = false;
}

function resizeWindow() {
	if(!isDragger) {
		newPos = $('footer-info-scroller').cumulativeOffset().left - 10;
		$('scroller').style.left = newPos + 'px';
		$('drag').style.left = ($('scroller').cumulativeOffset().left + ($('scroller').getWidth())) + 'px';
		$('drag').style.top = (document.viewport.getScrollOffsets().top + document.viewport.getHeight() / 2 - $('drag').getHeight() / 2) + 'px';
	}
}

function scrollWindow() {
	if(!isDragger) {
		$('drag').style.top = (document.viewport.getScrollOffsets().top + document.viewport.getHeight() / 2 - $('drag').getHeight() / 2) + 'px';
	}
}

function snapIt(x,y,draggable) {
	begin = document.viewport.getHeight() / 2 - $('drag').getHeight() / 2;
	end = body.getHeight() - document.viewport.getHeight() / 2;
	return[x, 
	constrain(y - $('drag').getHeight(), begin, end)];
}
function constrain(n, lower, upper) {
    if (n > upper) return upper;
    else if (n < lower) return lower;
    else return n;
}