var nav;
var scrollButton;
var MousePos;
var scrollTrack;
var ButtonPosActual = 0;
var scrollContent;
var scrollArea;
var scrollButtonDown;
var scrollButtonUp;
var scrollInterval;
var scrollSpeed = 15;
var scrollStep = 5;
var scrollContentTopPos = 0;

function scrollInit(CONTENT, AREA, TRACK, BUTTON, BTNUP, BTNDOWN){
	if(BTNUP){ scrollButtonUp = document.getElementById(BTNUP); }
	if(BTNDOWN){ scrollButtonDown = document.getElementById(BTNDOWN); }
	scrollButton = document.getElementById(BUTTON);
	scrollTrack = document.getElementById(TRACK);
	scrollContent = document.getElementById(CONTENT);
	scrollArea = document.getElementById(AREA);
	nav = navigator.userAgent;
	if(nav.indexOf("IE") !== -1){
		if(document.attachEvent){
		if(scrollButtonDown){ scrollButtonDown.attachEvent('onmousedown', scrollMoveButtonDown); scrollButtonDown.attachEvent('onmouseup', scrollMoveButtonStop); scrollButtonDown.attachEvent('onmouseout', scrollMoveButtonStop); }
		if(scrollButtonDown){ scrollButtonUp.attachEvent('onmousedown', scrollMoveButtonUp); scrollButtonUp.attachEvent('onmouseup', scrollMoveButtonStop); scrollButtonUp.attachEvent('onmouseout', scrollMoveButtonStop); }
		document.attachEvent('onmouseup', scrollDragStop);
		scrollTrack.attachEvent('onmousedown', scrollMoveTrack);
		scrollButton.attachEvent('onmousedown', scrollActivate);
		scrollButton.attachEvent('onmouseup', scrollDragStop);
		scrollButton.attachEvent('onmouseout', scrollDragStop);
		}
	} else {
		if(document.addEventListener){
		if(scrollButtonDown){ scrollButtonDown.addEventListener('mousedown', scrollMoveButtonDown, false); scrollButtonDown.addEventListener('mouseup', scrollMoveButtonStop, false); scrollButtonDown.addEventListener('mouseout', scrollMoveButtonStop, false); }
		if(scrollButtonDown){ scrollButtonUp.addEventListener('mousedown', scrollMoveButtonUp, false); scrollButtonUp.addEventListener('mouseup', scrollMoveButtonStop, false);  scrollButtonUp.addEventListener('mouseout', scrollMoveButtonStop, false); }
		window.addEventListener("mouseup", scrollDragStop, false);
		window.addEventListener("mouseover", scrollDragStop, false);
		scrollTrack.addEventListener("mousedown", scrollMoveTrack, false);
		scrollButton.addEventListener("mousedown", scrollActivate, false);
		scrollButton.addEventListener("mouseup", scrollDragStop, false);
		scrollButton.addEventListener("mouseout", scrollDragStop, false);
		}
	}
}

function scrollMoveButtonStop(){
	clearInterval(scrollInterval);
}
function scrollMoveButtonUp(){
	scrollInterval = setInterval("scrollMoveButtonUpGo()", scrollSpeed);
}
function scrollMoveButtonUpGo(){
	if(scrollContent.offsetHeight > scrollArea.offsetHeight){
	if(scrollContentTopPos < 0){
		scrollContentTopPos = scrollContentTopPos + scrollStep;
		scrollContent.style.top = scrollContentTopPos + "px";
		var ButtonPos =  Math.abs(Math.round((scrollContentTopPos / (scrollContent.offsetHeight - scrollArea.offsetHeight)) * (scrollTrack.offsetHeight - scrollButton.offsetHeight)));
		scrollButton.style.top = ButtonPos + "px";
		ButtonPosActual = ButtonPos;
	} else {
		var ButtonPos = 0;
		scrollButton.style.top = ButtonPos + "px";
		ButtonPosActual = ButtonPos;
		scrollContentTopPos = 0;
		scrollContent.style.top = scrollContentTopPos + "px";
	}
	}
}
function scrollMoveButtonDown(){
	scrollInterval = setInterval("scrollMoveButtonDownGo()", scrollSpeed);
}
function scrollMoveButtonDownGo(){
	if(scrollContent.offsetHeight > scrollArea.offsetHeight){
	if(scrollContentTopPos > scrollArea.offsetHeight - scrollContent.offsetHeight){
		scrollContentTopPos = scrollContentTopPos - scrollStep;
		scrollContent.style.top = scrollContentTopPos + "px";
		var ButtonPos =  Math.abs(Math.round((scrollContentTopPos / (scrollContent.offsetHeight - scrollArea.offsetHeight)) * (scrollTrack.offsetHeight - scrollButton.offsetHeight)));
		scrollButton.style.top = ButtonPos + "px";
		ButtonPosActual = ButtonPos;
	} else {
		var ButtonPos = scrollTrack.offsetHeight - scrollButton.offsetHeight;
		scrollButton.style.top = ButtonPos + "px";
		ButtonPosActual = ButtonPos;
		scrollContentTopPos = scrollArea.offsetHeight - scrollContent.offsetHeight;
		scrollContent.style.top = scrollContentTopPos + "px";
	}
	}
}

function scrollMoveTrack(e){
	if (!e){ var e = window.event;	e.cancelBubble = true; }
	if (e.stopPropagation) e.stopPropagation();
	if(scrollContent.offsetHeight > scrollArea.offsetHeight){
	// Pobranie wysokości toru scrola
	var TrackHeight = scrollTrack.offsetHeight;
	// Pozycja kursora myszki
	if (nav.indexOf("IE") !== -1){
		MousePos = e.clientY;
	} else {
		MousePos = e.pageY;
	}
	// Pobranie pozycji toru scrola w oknie przeglądarki
	var obj = document.getElementById("scrollTrack");
	var TrackPos = 0;
	if (obj.offsetParent) {
		TrackPos = obj.offsetTop
		while (obj = obj.offsetParent) {
			TrackPos += obj.offsetTop
		}
	}
	// Oblicznia pozycji scrola podczas przeciągania
	var ButtonPos = MousePos- scrollButton.offsetHeight/2 - TrackPos;
	if(ButtonPos < (TrackHeight - scrollButton.offsetHeight) && ButtonPos > 0){
		scrollButton.style.top =  MousePos- scrollButton.offsetHeight/2 - TrackPos + "px";
		ButtonPosActual = ButtonPos;
		scrollContent.style.top = Math.round((scrollContent.offsetHeight - scrollArea.offsetHeight) * (ButtonPosActual) / (TrackHeight - scrollButton.offsetHeight)) * (-1) + "px";
		scrollContentTopPos = Math.round((scrollContent.offsetHeight - scrollArea.offsetHeight) * (ButtonPosActual) / (TrackHeight - scrollButton.offsetHeight)) * (-1);
	} else if(ButtonPos >= (TrackHeight - scrollButton.offsetHeight)) {
		scrollButton.style.top = TrackHeight - scrollButton.offsetHeight + "px";
		ButtonPosActual = ButtonPos;
		scrollContent.style.top = Math.round((scrollContent.offsetHeight - scrollArea.offsetHeight)) * (-1) + "px";
		scrollContentTopPos = Math.round((scrollContent.offsetHeight - scrollArea.offsetHeight)) * (-1);
	} else if(ButtonPos <= 0) {
		scrollButton.style.top = "0px";
		ButtonPosActual = ButtonPos;
		scrollContent.style.top = "0px";
		scrollContentTopPos = 0;
	}
	}
}

function scrollActivate(){
	// nadanie odpowiednich zdarzeń do elementów
	if(nav.indexOf("IE") !== -1){
		if(document.attachEvent){
		document.attachEvent('onmousemove', scrollDragGo);
		}
	} else {
		if(document.addEventListener){
		window.addEventListener("mousemove", scrollDragGo, false);
		}
	}
	scrollButton.style.backgroundPosition = "0 -"+scrollButton.offsetHeight+"px";
}

function scrollDragStop(){
	// zatrzymanie przeciągania scrola i usunięcie zradzeń
	if (nav.indexOf("IE") !== -1){
		document.detachEvent('onmousemove', scrollDragGo);
	} else {
		window.removeEventListener("mousemove", scrollDragGo, false);
	}
	scrollButton.style.backgroundPosition = "0 0";
}

function scrollDragGo(e){
	// Wyłaczenie dziedziczenia akcji
	if (!e){ var e = window.event;	e.cancelBubble = true; }
	if (e.stopPropagation) e.stopPropagation();
	if(scrollContent.offsetHeight > scrollArea.offsetHeight){
	// Pobranie wysokości toru scrola
	var TrackHeight = scrollTrack.offsetHeight;
	// Pozycja kursora myszki
	if (nav.indexOf("IE") !== -1){
		MousePos = e.clientY;
	} else {
		MousePos = e.pageY;
	}
	// Pobranie pozycji toru scrola w oknie przeglądarki
	var obj = document.getElementById("scrollTrack");
	var TrackPos = 0;
	if (obj.offsetParent) {
		TrackPos = obj.offsetTop
		while (obj = obj.offsetParent) {
			TrackPos += obj.offsetTop
		}
	}
	// Oblicznia pozycji scrola podczas przeciągania
	var ButtonPos = MousePos- scrollButton.offsetHeight/2 - TrackPos;
	if(ButtonPos < TrackHeight - scrollButton.offsetHeight+2 && ButtonPos >= 0){
	scrollButton.style.top = ButtonPos + "px";
	ButtonPosActual = ButtonPos;
	scrollContentTopPos = Math.round((scrollContent.offsetHeight - scrollArea.offsetHeight) * (ButtonPosActual) / (TrackHeight - scrollButton.offsetHeight)) * (-1);
	scrollContent.style.top = Math.round((scrollContent.offsetHeight - scrollArea.offsetHeight) * (ButtonPosActual) / (TrackHeight - scrollButton.offsetHeight)) * (-1) + "px";
	}
	}
}
