// DOM what?:

var ie4 = document.all ? true : false;
var nn4 = document.layers ? true : false;
var dom = document.getElementById ? true : false;



// Begin condition:

uperPics = new Array();
downerPics = new Array();
dragerPics = new Array();
dragbtnPics = new Array();
contentPack = new Array();

clickUp = new Array();				// click on UP cursor
clickDown = new Array();			// click on DOWN cursor
clickDrag = new Array();			// click on SCROLLER
clickScroll = new Array();			// click on SCROLLBAR BG
clickAbove = new Array();			// click ABOVE scroller
clickBelow = new Array();			// click BELOW scroller

startY = new Array();				// Y start
containerHi = new Array();			// Height of container
scrollRatio = new Array();			// Scroll ratio

loadBox = new Array();				// loader block
infoBox = new Array();				// inform block

var mouseX;							// X mouse
var mouseY;							// Y mouse

var timer;
var speed = 4;						// Scrolling speed

// Scroller:
var dragHi = 236;					// Height of scroller
dragY = new Array();				// Y scroller

for (i = 1; i <= scrollQuant; i++) {
	dragY[i] = beginTop;
	clickUp[i] = false;
	clickDown[i] = false;
	clickDrag[i] = false;
	clickScroll[i] = false;
	clickAbove[i] = false;
	clickBelow[i] = false;
}

// Content:
contentY = new Array();				// Y content
contentHi = new Array();			// Height of content



// Up button press:

function upPress(number) {
	uperPics[number].visibility = "hidden";
	clickUp[number] = true;
	return scrollUp(number);
}



// Down button press:

function downPress(number) {
	downerPics[number].visibility = "hidden";
	clickDown[number] = true;
	return scrollDown(number);
}



// Scroller press:

function dragPress(number) {
	dragbtnPics[number].visibility = "hidden";
	clickDrag[number] = true;
	return false;
}



// Scrollbar press:

function scrollbarPress(number) {
	clickScroll[number] = true;
	return false;
}



// Up scrolling:

function scrollUp(number) {
	getContentY(number);

	if (clickAbove[number]) {
		if( dragY[number] <= (mouseY - (dragHi / 2)) ) {
			return up();
		}
	}

	if (clickUp[number]) {
		if(contentY[number] < 0){		
			dragY[number] = dragY[number] - (speed * scrollRatio[number]);
			
			if (dragY[number] < (beginTop)) {
				dragY[number] = beginTop;
			}
			contentY[number] = contentY[number] + speed;
			if (contentY[number] > 0) {
				contentY[number] = 0;
			}
			moveTo(number);
			if (clickScroll[number]) {
				timer = setTimeout("scrollUp(" + number + ")", 5);
			} else {
				timer = setTimeout("scrollUp(" + number + ")", 30);
			}
		}
	}
	return true;
}



// Down scrolling:

function scrollDown(number) {
	getContentY(number);

	if (clickBelow[number]) {
		if ( dragY[number] >= (mouseY - (dragHi / 2)) ) {
			return up();
		}
	}

	if (clickDown[number]) {
		if (contentY[number] > -(contentHi[number] - containerHi[number])) {			
			dragY[number] = dragY[number] + (speed * scrollRatio[number]);
			if (dragY[number] > (beginTop + scrollbarHi - dragHi)) {
				dragY[number] = (beginTop + scrollbarHi - dragHi);
			}
			contentY[number] = contentY[number] - speed;
			if (contentY[number] < -(contentHi[number] - containerHi[number])) {
				contentY[number] = -(contentHi[number] - containerHi[number]);
			}
			moveTo(number);
			if (clickScroll[number]) {
				timer = setTimeout("scrollDown(" + number + ")", 5);
			} else {
				timer = setTimeout("scrollDown(" + number + ")", 30);
			}
		}
	}
	return false;
}



function down(e) {
	for (i = 1; i <= scrollQuant; i++) {
		if (clickScroll[i] || clickDown[i]) {
			number = i;
		}
	}

	if (clickScroll[number]) {
		getMouse(e);

		startY[number] = (mouseY - dragY[number]);

		if (mouseY < dragY[number]) {
			clickAbove[number] = true;
			clickUp[number] = true;
			return scrollUp(number);
		} else if (mouseY > (dragY[number] + dragHi) ) {
			clickBelow[number] = true;
			clickDown[number] = true;
			return scrollDown(number);
		}
	}
}



function up() {
	clearTimeout(timer);

	// Clear click vars:
	for (i = 1; i <= scrollQuant; i++) {
		clickUp[i] = false;
		clickDown[i] = false;
		clickDrag[i] = false;
		clickScroll[i] = false;
		clickAbove[i] = false;
		clickBelow[i] = false;
		if (contentHi[i] >= containerHi[i]) {
			uperPics[i].visibility = "visible";
			downerPics[i].visibility = "visible";
			dragbtnPics[i].visibility = "visible";
		}
	}

	return true;
}



// Draging:

function move(e){
	number = 0;

	for (i = 1; i <= scrollQuant; i++) {
		if (clickDrag[i]) {
			number = i;
		}
	}

	if (clickDrag[number] && contentHi[number] > containerHi[number]) {
		getMouse(e);
		
		dragY[number] = (mouseY - startY[number]);

		if (dragY[number] < (beginTop)) {
			dragY[number] = beginTop;
		}
		if (dragY[number] > (beginTop + scrollbarHi - dragHi)) {
			dragY[number] = (beginTop + scrollbarHi - dragHi);
		}		
		contentY[number] = ( (dragY[number] - beginTop) * (1 / scrollRatio[number]) );
		contentY[number] = eval('-' + contentY[number]);

		moveTo(number);
		
		// for Win IE:
		if (ie4) {
			return false;
		}
	}
}



function getContentY(number){
	if (ie4) {
		contentY[number] = contentPack[number].pixelTop;
	} else if (nn4) {
		contentY[number] = contentPack[number].top;
	} else if (dom) {
		contentY[number] = parseInt(contentPack[number].top);
	}
}



// Get Mouse coords:

function getMouse(e) {
	if (ie4) {
		mouseX = event.clientX + document.body.scrollLeft;
		mouseY = event.clientY + document.body.scrollTop;
	}
	else if (nn4) {
		mouseX = e.pageX;
		mouseY = e.pageY;
	}
	else if (dom) {
		mouseX = e.clientX;
		mouseY = e.clientY;
	}
}



// Content moving:

function moveTo(number){
	dragerPics[number].top = dragY[number];
	contentPack[number].top = contentY[number];
}



// After loading:

function loaded() {
	for (i = 1; i <= scrollQuant; i++) {
		if (ie4) {
			uperPics[i] = eval("document.all.uper" + i + ".style");
			downerPics[i] = eval("document.all.downer" + i + ".style");
			dragerPics[i] = eval("document.all.drager" + i + ".style");
			dragbtnPics[i] = eval("document.all.dragbtn" + i + ".style");
			contentPack[i] = eval("document.all.content" + i + ".style");
			loadBox[i] = eval("document.all.loader" + i + ".style");
			infoBox[i] = eval("document.all.info" + i + ".style");
		} else if (nn4) {
			uperPics[i] = eval("document.uper" + i);
			downerPics[i] = eval("document.downer" + i);
			dragerPics[i] = eval("document.drager" + i);
			dragbtnPics[i] = eval("document.drager" + i + ".document.dragbtn" + i);
			contentPack[i] = eval("document.container" + i + ".document.content" + i);
			loadBox[i] = eval("document.loader" + i);
			infoBox[i] = eval("document.info" + i);
		} else if (dom) {
			uperPics[i] = document.getElementById("uper" + i).style;
			downerPics[i] = document.getElementById("downer" + i).style;
			dragerPics[i] = document.getElementById("drager" + i).style;
			dragbtnPics[i] = document.getElementById("dragbtn" + i).style;
			contentPack[i] = document.getElementById("content" + i).style;
			loadBox[i] = document.getElementById("loader" + i).style;
			infoBox[i] = document.getElementById("info" + i).style;
		}

		loadBox[i].display = "none";
		infoBox[i].display = "block";

		document.getElementById("content" + i).style.top = 0;
		dragerPics[i].top = dragY[i];

		dragY[i] = parseInt(dragerPics[i].top);

		contentHi[i] = parseInt(document.getElementById("content" + i).offsetHeight);
		containerHi[i] = parseInt(document.getElementById("container" + i).offsetHeight);

		if (contentHi[i] < containerHi[i]) {
			uperPics[i].visibility = "hidden";
			downerPics[i].visibility = "hidden";
			dragerPics[i].visibility = "hidden";
		}

		scrollRatio[i] = ( (scrollbarHi - dragHi) / (contentHi[i] - containerHi[i]) );
	}

	document.onmouseup = up;
	document.onmousedown = down;
	document.onmousemove = move;

	if (nn4) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
		window.onresize = reloadPage;
	}
}



// Preloader:

function preloader() {
	if (ie4) {
		loadBox = eval("document.all.load.style");
		infoBox = eval("document.all.info.style");
	} else if (nn4) {
		loadBox = eval("document.load");
		infoBox = eval("document.info");
	} else if (dom) {
		loadBox = document.getElementById("load").style;
		infoBox = document.getElementById("info").style;
	}
	loadBox.display = "none";
	infoBox.display = "block";
}

onload = preloader;