// CLASS Scrollbar 
scrollbarArray = new Array();
var dragTrigger = false;

function makeScrollbar(scrollbarName, contentArea, scrollbarArea)
{
	if(document.getElementById(contentArea) && document.getElementById(scrollbarArea))
	{
		scrollbarArray[scrollbarName] = new scrollbarObj(contentArea, scrollbarArea);
		initScrollbar(scrollbarName);
	}
}

function scrollbarObj(contentArea, scrollbarArea)
{
	this.scrollTrigger= new Array();
	this.scrollTrigger['content'] = 0;
	this.scrollTrigger['scrollbar'] = 0;
		
	this.scrollPosition= new Array();
	this.scrollPosition['content'] = 0;
	this.scrollPosition['scrollbar'] = 0;

	this.scrollElement = new Array();
	this.scrollElement['content'] = document.getElementById(contentArea);
	this.scrollElement['scrollbar'] = document.getElementById(scrollbarArea);

	this.initH = 0;
	this.aktH = 0;
	
}


function initScrollbar(scrollbarName)
{
	if(checkScrollbar(scrollbarName))
	{
		scrollbarArray[scrollbarName].scrollElement['scrollbar'].parentNode.parentNode.style.visibility="visible";
	}
	else
	{
		scrollbarArray[scrollbarName].scrollElement['scrollbar'].parentNode.parentNode.style.visibility="hidden";
		scrollbarArray[scrollbarName].scrollElement['scrollbar'].parentNode.parentNode.style.display="none";
	}
}

function checkScrollbar(scrollbarName)
{
	if(scrollbarArray[scrollbarName].scrollElement['content'].offsetHeight > scrollbarArray[scrollbarName].scrollElement['content'].parentNode.offsetHeight)
	{	return true;	}
	else
	{	return false; }
}	

function scrollBoth(scrollbarName, firstArea, pixelAmount)
{
	if(firstArea == "content")
	{	secondArea = "scrollbar";	}
	else if(firstArea == "scrollbar")
	{	secondArea = "content";	}
	scrollStart(scrollbarName, firstArea, pixelAmount);
	scrollStart(scrollbarName, secondArea, getSecondScrollAmount(scrollbarName, firstArea, pixelAmount));
}

// Umrechner der Scrollweite Scrollbar / Content
function getSecondScrollAmount(scrollbarName, firstArea, firstAmount)
{
	if(firstArea == "content")
	{	secondArea = "scrollbar";	}
	else if(firstArea == "scrollbar")
	{	secondArea = "content";	}

	firstElement = scrollbarArray[scrollbarName].scrollElement[firstArea];
	secondElement = scrollbarArray[scrollbarName].scrollElement[secondArea];
	
	secondAmount = -(firstAmount * Math.abs(secondElement.offsetHeight - secondElement.parentNode.offsetHeight) / Math.abs(firstElement.offsetHeight - firstElement.parentNode.offsetHeight));

	//writeDebug(firstArea+": "+firstAmount+" / "+secondArea+": "+secondAmount);

	return secondAmount;
}

function scrollStart(scrollbarName, scrollArea, y)
{
	//writeDebug("sS: "+scrollbarArray[scrollbarName].scrollElement);
	if(scrollbarArray[scrollbarName].scrollTrigger[scrollArea])
	{	window.clearInterval(scrollbarArray[scrollbarName].scrollTrigger[scrollArea]);	}
	scrollbarArray[scrollbarName].scrollTrigger[scrollArea] = window.setInterval("scrollAmount('"+scrollbarName+"', '"+scrollArea+"', "+y+")", 70);
	//writeDebug(scrollbarName+"."+scrollArea+" - "+scrollbarArray[scrollbarName]+" - "+scrollbarArray[scrollbarName].scrollTrigger+" - "+scrollbarArray[scrollbarName].scrollTrigger.length);
	//writeDebug(scrollbarName+"."+scrollArea+" - "+scrollbarArray[scrollbarName]+" - "+scrollbarArray[scrollbarName].scrollElement+" - "+scrollbarArray[scrollbarName].scrollTrigger.length);
}

function scrollStop(scrollbarName)
{
	window.clearInterval(scrollbarArray[scrollbarName].scrollTrigger['content']);
	window.clearInterval(scrollbarArray[scrollbarName].scrollTrigger['scrollbar']);
}

function scrollAmount(scrollbarName, scrollArea, y)
{
	if(checkScrollbar(scrollbarName))
	{
		thisElement = scrollbarArray[scrollbarName].scrollElement[scrollArea];
		maxDown= thisElement.parentNode.offsetHeight - thisElement.offsetHeight;

		if(!scrollbarArray[scrollbarName].scrollPosition[scrollArea])
		{ newY= thisElement.offsetTop;}
		else
		{ newY = scrollbarArray[scrollbarName].scrollPosition[scrollArea];	}
		if(scrollArea == "content")
		{
			newY = (y + newY);
			if(newY > 0)
			{	newY = 0;	}
			else if(newY < maxDown)
			{	newY = maxDown;	}
		}
		else if(scrollArea == "scrollbar")
		{
			newY = (y + newY);
			if(newY < 0)
			{	newY = 0;	}
			else if(newY > maxDown)
			{	newY = maxDown;	}
		}

		scrollbarArray[scrollbarName].scrollPosition[scrollArea] = newY;
		thisElement.style.top = parseInt(newY);
	}		
}

function jumpScroll(scrollbarName, firstArea, firstAmount, hStart, hEnd)
{
	firstElement = scrollbarArray[scrollbarName].scrollElement[firstArea];
	hEnd += hStart;
	
	if (hStart < firstElement.offsetTop)
	{	scrollBoth(scrollbarName, firstArea, -firstAmount);	}
	else if(hEnd > (firstElement.offsetTop + firstElement.offsetHeight))
	{	scrollBoth(scrollbarName, firstArea, firstAmount);	}
}


function mouseObj()
{
	document.onmousemove = runMouseFunctions;
	document.onmouseup = stopDrag;
}

function runMouseFunctions(e)
{
	savePos(e);
	scrollByMouse();
}

function startDrag(scrollbarName)
{
	scrollbarArray[scrollbarName].initH = aktH;
	dragTrigger = scrollbarName;
	//writeDebug("initH: "+scrollbarArray[dragTrigger].initH+" - aktH: "+aktH+" = "+(aktH-scrollbarArray[dragTrigger].initH));
}

function savePos(e)
{
	var Pos = chkPos(e);
	aktH = Pos;
	return true;
}

function stopDrag()
{
	dragTrigger = false;	
}

function scrollByMouse()
{
	if(dragTrigger)
	{	
		//writeDebug("initH: "+scrollbarArray[dragTrigger].initH+" - aktH: "+aktH+" = "+(aktH-scrollbarArray[dragTrigger].initH));
		scrollAmount(dragTrigger, 'scrollbar', (aktH-scrollbarArray[dragTrigger].initH));
		scrollAmount(dragTrigger, 'content', getSecondScrollAmount(dragTrigger, 'scrollbar', (aktH-scrollbarArray[dragTrigger].initH)));
		scrollbarArray[dragTrigger].initH=aktH;
	}
	//writeDebug("Drag: "+dragTrigger+" / aktH: "+aktH+" - initH: "+initH+" = "+(aktH-initH));
}

function chkPos(e)
{
	var posy = 0;
	if (!e) var e = window.event;
	if(e)
	{
		if (e.pageY)
		{
			pos = e.pageY;
		}
		else if (e.clientY)
		{
			pos = e.clientY + document.body.scrollTop;
		}
		return pos;
	}

}


// NOCLASS 
function writeDebug(str)
{
	window.status=str;
	return true;
}