// Made by geeeet@ghtml.com
// Keep these two lines and you're free to use this code
// Modified by roland
// Modified by claus

// benötigte Styles setzen
document.writeln ("<style>body{margin: 0px;width: 100%;height: 100%;overflow: hidden;} .scrollbar { position: absolute; top: 0; left: 0;}</style>");


var mouseY; // Mouse Y position onclick
var mouseX; // Mouse X position onclick

var clickUp = false; // If click on up-arrow
var clickDown = false; // If click on down-arrow
var clickDrag = false; // If click on scrollbar
var clickAbove = false; // If click above scrollbar
var clickBelow = false; // If click below scrollbar

var speed = 10; // Scroll speed
var timer = setTimeout("",500); // Repeat variable
var upL; // Up-arrow X
var upT; // Up-arrow Y
var upH; // Height of up-arrow
var upW; // Width of up-arrow
var downL; // Down-arrow X
var downT; // Down-arrow Y
var downH; // Height of down-arrow
var downW; // Width of down-arrow
var dragL; // Scrollbar X
var dragT; // Scrollbar Y
var dragH; // Height of scrollbar
var dragW; // Width of scrollbar
var rulerL; // Ruler X
var rulerT; // Ruler Y
var scrollbarL;
var scrollbarT;
var scrollbarH;
var contentT; // Content layer Y;
var contentH; // Content height
var contentClipH; // Content clip height
var scrollLength; // Number of pixels scrollbar should move
var startY; // Keeps track of offset between mouse and span
var scrollH; // Height of scrollbar


// Mousedown
function scrollbarDown(e){
	if((document.all && event.button!=1)) return true; // Enables the right mousebutton
	scrollbarGetMouse(e);
	startY = (mouseY - dragT);
	
	// If click on up-arrow
	if(mouseX >= upL && (mouseX <= (upL + upW)) && mouseY >= upT && (mouseY <= (upT + upH))){
		clickUp = true;
		return scrollUp();
	}	
	// Else if click on down-arrow
	else if(mouseX >= downL && (mouseX <= (downL + downW)) && mouseY >= downT && (mouseY <= (downT + downH))){
		clickDown = true;
		return scrollDown();
	}
	// Else if click on scrollbar
	else if(mouseX >= dragL && (mouseX <= (dragL + dragW)) && mouseY >= dragT && (mouseY <= (dragT + dragH))){
		clickDrag = true;
		return false;
	}
	else if(mouseX >= dragL && (mouseX <= (dragL + dragW)) && mouseY >= rulerT && (mouseY <= (rulerT + scrollH))){
		// If click above drag
		if(mouseY < dragT){
			clickAbove = true;
			clickUp = true;
			return scrollUp();
		}
		// Else click below drag
		else{
			clickBelow = true;
			clickDown = true;
			return scrollDown();
		}
	}
	// If no scrolling is to take place
	else{
		return true;
	}
}

// Drag function
function scrollbarMove(e){
	if(clickDrag && contentH > contentClipH){
		scrollbarGetMouse(e);
		dragT = (mouseY - startY);
		
		if(dragT < (rulerT))
			dragT = rulerT;		
		if(dragT > (rulerT + scrollH - dragH))
			dragT = (rulerT + scrollH - dragH);
		
		contentT = ((dragT - rulerT)*(1/scrollLength));
		contentT = eval('-' + contentT);

		scrollbarMoveTo();
		
		// So ie-pc doesn't select gifs
		if(document.all)
			return false;
	}
}

// Scrollrad funktioniert nur bei IE 6
function scrollbarRad ()
{
	if (event.wheelDelta >= 120) {
		clickUp = true;
		return scrollUp(true);
	} else
	if (event.wheelDelta <= -120) {
		clickDown = true;
		return scrollDown(true);
	}
}

function scrollbarUp(){
	clearTimeout(timer);
	// Resetting variables
	clickUp = false;
	clickDown = false;
	clickDrag = false;
	clickAbove = false;
	clickBelow = false;
	return true;
}

// Reads mouse X and Y coordinates
function scrollbarGetMouse(e){
	if(document.all){
		mouseY = event.clientY + document.body.scrollTop;
		mouseX = event.clientX + document.body.scrollLeft;
	}
	else{
		mouseY = e.pageY;
		mouseX = e.pageX;
	}
}

// Moves the layer
function scrollbarMoveTo(){
	document.getElementById("scrollcontent").style.top = contentT + "px";
	document.getElementById("drag").style.top = (dragT - scrollbarT) + "px";
	document.getElementById("ruler").style.top = (dragT - scrollbarT) + "px";
}

// Scrolls up
function scrollUp(scrollrad){
	contentT = parseInt(document.getElementById("scrollcontent").style.top);
	
	var scrollspeed = scrollrad ? 4*speed : speed;

	if(clickAbove){
		if(dragT <= (mouseY-(dragH/2)))
			return scrollbarUp();
	}
	
	if(clickUp){
		if(contentT < 0){		
			dragT -= (scrollspeed*scrollLength);
			
			if(dragT < (rulerT))
				dragT = rulerT;
				
			contentT += scrollspeed;
			if(contentT > 0)
				contentT = 0;
			
			scrollbarMoveTo();
			if (!scrollrad) {
				timer = setTimeout("scrollUp()",25);
			}
		}
	}
	return false;
}

// Scrolls down
function scrollDown(scrollrad){
	contentT = parseInt(document.getElementById("scrollcontent").style.top);

	var scrollspeed = scrollrad ? 4*speed : speed;
	
	if(clickBelow){
		if(dragT >= (mouseY-(dragH/2)))
			return scrollbarUp();
	}

	if(clickDown){
		if(contentT > -(contentH - contentClipH)){			
			dragT += scrollspeed*scrollLength;
			if(dragT > (rulerT + scrollH - dragH))
				dragT = (rulerT + scrollH - dragH);
			
			contentT -= scrollspeed;
			if(contentT < -(contentH - contentClipH))
				contentT = -(contentH - contentClipH);
			
			scrollbarMoveTo();
			if (!scrollrad) {
				timer = setTimeout("scrollDown()",25);
			}
		}
	}
	return false;
}

// Preload
function scrollbarInit (){
	if (!document.getElementById("scrollbar") || !document.getElementById("content"))
		return;
	// Scrollbar-arrow X and Y variables
	scrollbarH = parseInt(document.getElementById("scrollbar").offsetHeight);
	scrollbarL = parseInt(document.getElementById("scrollbar").offsetLeft);
	scrollbarT = parseInt(document.getElementById("scrollbar").offsetTop);
	// Up-arrow X and Y variables
	upH = parseInt(document.getElementById("up").offsetHeight);
	upW = parseInt(document.getElementById("up").offsetWidth);
	upL = scrollbarL;
	upT = scrollbarT;
	// Down-arrow X and Y variables
	downH = parseInt(document.getElementById("down").offsetHeight);
	downW = parseInt(document.getElementById("down").offsetWidth);
	downL = scrollbarL;
	downT = scrollbarT + scrollbarH - downH;
	document.getElementById("down").style.top = (scrollbarH - downH) + "px";
	// Scrollbar X and Y variables
	dragH = parseInt(document.getElementById("drag").offsetHeight);
	dragW = parseInt(document.getElementById("drag").offsetWidth);
	dragL = scrollbarL;
	dragT = scrollbarT + upH;
	document.getElementById("drag").style.top = upH + "px";
	// Ruler Y variable
	scrollH = scrollbarH - upH - downH;
	rulerT = scrollbarT + upH;

	// Height of content layer and clip layer
	contentH = parseInt(document.getElementById("scrollcontent").offsetHeight);
	contentClipH = parseInt(document.getElementById("content").offsetHeight);
	document.getElementById("scrollcontent").style.top = 0 + "px";
	
	// Number of pixels scrollbar should move
	scrollLength = ((scrollH-dragH)/(contentH-contentClipH));
	// Initializes event capturing
	document.onmousedown = scrollbarDown;
	document.onmousemove = scrollbarMove;
	document.onmouseup = scrollbarUp;
	document.onmousewheel = scrollbarRad;

	// Softscroller ausblenden
	if ((contentH-3) < contentClipH) {
		document.getElementById("scrollbar").style.left = -20;
	}
}
