Event.observe(window, 'load', projector_init);

// ekran ograniczający wyświetanie treści
var projector = 'projector';
// element zawierający przesuwaną treść
var projectorView = 'projector_view';
// przycisk przesuwający treść do góry
var pBtnUp = 'projector_btn_up';
// przycisk przesuwający treść w dół
var pBtnDown = 'projector_btn_down';
// suwak przesuwający treść w obu kierunkach
var pBar = 'projector_bar';
// element rodzic zawierający w sobie guziki i suwak przesuwu treści
var pSBar = 'scroll_bar';
// szybkość przesuwu treści po wcisnięciu guzików
var moveSpeed;
// ograniczenia ruchu suwaka przesuwu
var minY;
var maxY;
// odległość miedzy początkiem suwaka a miejscem gdzie został klikniety
var displacement;
// czy uruchomina jest akcja przesuwu suwaka
var drag;
var stop;
// róznica pomiedzu drogą suwaka dlugoscią wyświetlanej treści
var ratio;
// interwał przesuwu suwaka po przcisnieciu guzików up lub down
var projectorInterwal;
// częstotliwość Interwału
var projectorLoop;
var bar_margin = 2

function projector_init(){
	var abs_projector =  $(projectorView).offsetHeight - $(projector).offsetHeight;
	var abs_bar	= $(pSBar).offsetHeight - ($(pBtnUp).offsetHeight + $(pBar).offsetHeight + $(pBtnDown).offsetHeight);
	stop = abs_projector * (-1) + bar_margin;
	if(abs_projector>0){
		minY = $(pBtnUp).offsetHeight+bar_margin;
		maxY = $(pSBar).offsetHeight - ($(pBar).offsetHeight + $(pBtnDown).offsetHeight)-bar_margin;
		ratio = abs_projector/abs_bar;
		Event.observe($(pBtnUp), 'mousedown', function(s){ moveInit(s); });
		Event.observe($(pBtnDown), 'mousedown', function(s){ moveInit(s); });
		Event.observe($(pBar), 'mousedown', function(s){ startDrag(s); });
		Event.observe(document, 'mousemove', function(s){ rollProjector(s); });
		Event.observe(document, 'mouseup', function(s){ stopDrag(s); });
		moveSpeed = 10;
		projectorLoop = 10;
		$(pBtnUp).setStyle({'background':'url(public/img/projector_btn_up_1.gif) no-repeat'});
		$(pBtnDown).setStyle({'background':'url(public/img/projector_btn_down_1.gif) no-repeat'});
		$(pBar).setStyle({'background':'url(public/img/projector_btn_middle.gif) no-repeat'});
	}
}
function startDrag(MouseE){
	Event.stop(MouseE);
	$$('body')[0].style.MozUserSelect="none";
	document.onselectstart = function() {return false;}
	displacement=Event.pointerY(MouseE)-getRealCoordinates($(pBar));
	drag = 1;
}

function stopDrag(MouseE){
	drag = 0;
	clearInterval(projectorInterwal);
	Event.stop(MouseE);
	$$('body')[0].style.MozUserSelect="text";
	document.onselectstart = function() {return true;}
	$(pBtnUp).setStyle({'background':'url(public/img/projector_btn_up_1.gif) no-repeat'});
	$(pBtnDown).setStyle({'background':'url(public/img/projector_btn_down_1.gif) no-repeat'});
}

function rollProjector(MouseE){
	if(drag==1){
		var coor = (Event.pointerY(MouseE)-(displacement*2))-$(pSBar).offsetTop ;
		if(coor < minY) coor = minY;
		if(coor > maxY) coor = maxY;
		$(pBar).setStyle({'top': coor + 'px'});
		var top = (($(pBar).offsetTop - $(pBtnUp).offsetHeight) * ratio) * (-1);
		$(projectorView).setStyle({'top': top + 'px'});
	}
}

function moveInit(MouseE){
	var id = Event.element(MouseE).id;
	Event.stop(MouseE);
	if(id==pBtnUp) {$(id).setStyle({'background':'url(public/img/projector_btn_up_2.gif) no-repeat'}); projectorInterwal = window.setInterval("moveUp()", projectorLoop);}
	else if(id==pBtnDown) {$(id).setStyle({'background':'url(public/img/projector_btn_down_2.gif) no-repeat'}); projectorInterwal = window.setInterval("moveDown()", projectorLoop);}
}

function moveUp(){
	var top = $(projectorView).offsetTop + moveSpeed;
	if(top>(bar_margin*(-1))) {top = (bar_margin*(-1)); window.clearInterval(projectorInterwal);}
	$(projectorView).setStyle({'top': top + 'px'});
	$(pBar).setStyle({'top': (top / ratio) * (-1) + $(pBtnUp).offsetHeight + 'px'});
}

function moveDown(){
	var top = $(projectorView).offsetTop - moveSpeed;
	if(top<stop) {top = stop; window.clearInterval(projectorInterwal);}
	$(projectorView).setStyle({'top': top + 'px'});	
	$(pBar).setStyle({'top': (top / ratio) * (-1) + $(pBtnUp).offsetHeight + 'px'});
}

function getRealCoordinates(obj){
	var y = 0;
	if (obj.offsetParent)
		do{
			y += obj.offsetTop;
		}while (obj = obj.offsetParent);
		
 	return y;
}
