//-----------------------------------------------------------------------------
// SCROLL FUNCTIONS v1.51, 2001-11-06
// Magnus Hübner (magnus.hubner@adcore.com)
// Joel Lundberg (joel.lundberg@adcore.com)
//
// Version History: -----------------------------------------------------------
// v1.01:	* Added functionality to support Netscape 6 and other standard
//			  compliant browsers.
//			* IE4 PC and IE Mac bugfixes.
// v1.02:	* The variables top.ie and top.ns, indicating which browser is
//		 	  being used, are no longer necessary. Browser control is from
//			  now on included in the Scroll Functions.
// v1.03:	* When re-initing a layer, the content layer and the scrollPos are
//			  now reset to their respective starting positions.
// v1.5:	* The scroll area now responds to mouse clicks and positions the
//			  scroll content relative to where the click occurred.
//			* If the scrollbar isn't needed, i.e. the content of the
//			  ScrollContentDiv fits into the ScrollWindowDiv-layer without
//			  having to scroll, it will be hidden.
// v1.51:	* Added functionality to support overlapping scroll-layers.
// Extra TCB feature: 	* variables scrollObj[x].extraY and scrollObj[x].extraX
//						  added to support the Layer tag in Netscape 4 where
//						  this information is needed to position the scrollpos.
//-----------------------------------------------------------------------------
var scrollBySize = 5;
var scrollArrowHeight = 11;
var scrollPosAreaWidth = 11;
var scrollPosWidth = 11;
var scrollPosHeight = 11;
var scrollObj = new Array();
var numberOfScrolls;

function initScroll(intNoOfScrolls) {
	numberOfScrolls = intNoOfScrolls;
	document.onmousedown = doMouseDown;
	document.onmousemove = doMouseMove;
	document.onmouseup = doMouseUp;

	for(i=0;i<numberOfScrolls;i++) {
		scrollObj[i] = new Object();
		scrollObj[i].extraX = 0;
		scrollObj[i].extraY = 0;
		if (document.all) {
			scrollObj[i].scrollPosAreaDiv=eval("document.all.scrollPosAreaDiv"+i).style;
			scrollObj[i].scrollPosAreaDiv.h=parseInt(scrollObj[i].scrollPosAreaDiv.height);
			scrollObj[i].scrollPos=eval("document.all.scrollPosDiv"+i).style;
			scrollObj[i].scrollWindow=eval("document.all.scrollWindowDiv"+i).style;
			scrollObj[i].scrollWindow.h=parseInt(scrollObj[i].scrollWindow.height);
			scrollObj[i].scrollContent=eval("document.all.scrollContentDiv"+i).style;
			scrollObj[i].scrollContent.h=eval("document.all.scrollContentDiv"+i).scrollHeight;
		} else if (document.layers) {
			document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
			scrollObj[i].scrollPosAreaDiv=eval("document.scrollPosAreaDiv"+i);
			scrollObj[i].scrollPosAreaDiv.h=scrollObj[i].scrollPosAreaDiv.document.height;
			scrollObj[i].scrollPos=eval("document.scrollPosDiv"+i);
			scrollObj[i].scrollWindow=eval("document.scrollWindowDiv"+i);
			scrollObj[i].scrollWindow.h=scrollObj[i].scrollWindow.clip.height;
			scrollObj[i].scrollContent=eval("document.scrollWindowDiv"+i+".document.scrollContentDiv"+i);
			scrollObj[i].scrollContent.h=scrollObj[i].scrollContent.document.height;
		} else {
			scrollObj[i].scrollPosAreaDiv=document.getElementById("scrollPosAreaDiv"+i).style;
			scrollObj[i].scrollPosAreaDiv.h=parseInt(scrollObj[i].scrollPosAreaDiv.height);
			scrollObj[i].scrollPos=document.getElementById("scrollPosDiv"+i).style;
			scrollObj[i].scrollWindow=document.getElementById("scrollWindowDiv"+i).style;
			scrollObj[i].scrollContent=document.getElementById("scrollContentDiv"+i).style;
			scrollObj[i].scrollWindow.h=parseInt(document.getElementById("scrollWindowDiv"+i).style.height);
			scrollObj[i].scrollContent.h=document.getElementById("scrollContentDiv"+i).offsetHeight;
		}
		scrollObj[i].scrollWindow.offset=scrollObj[i].scrollContent.h-scrollObj[i].scrollWindow.h;
		scrollObj[i].scrollWindow.offset=(scrollObj[i].scrollWindow.offset<0)? 0 : scrollObj[i].scrollWindow.offset;
		scrollObj[i].scrollContent.ypos=0;
		scrollObj[i].scrollContent.active=false;
		scrollObj[i].scrollPosAreaDiv.xpos=parseInt(scrollObj[i].scrollPosAreaDiv.left);
		scrollObj[i].scrollPosAreaDiv.ypos=parseInt(scrollObj[i].scrollPosAreaDiv.top);
		scrollObj[i].scrollPos.xpos=parseInt(scrollObj[i].scrollPos.left);
		scrollObj[i].scrollPos.ypos=parseInt(scrollObj[i].scrollPos.top);
		scrollObj[i].scrollPos.startPos=scrollObj[i].scrollPos.ypos;
		scrollObj[i].scrollPos.dragActive = false;
		scrollObj[i].scrollPosAreaHeight = scrollObj[i].scrollPosAreaDiv.h-scrollArrowHeight*2;

		setScrollState(i);
	}
}

function reInitScroll() {
	for(i=0;i<numberOfScrolls;i++) {
		reInitScrollByIndex(i);
	}
}

function reInitScrollByIndex(scrollIndex) {
	if (document.all) {
		scrollObj[scrollIndex].scrollContent.h=eval("document.all.scrollContentDiv"+scrollIndex).scrollHeight;
	} else if (document.layers) {
		scrollObj[scrollIndex].scrollContent.h=scrollObj[scrollIndex].scrollContent.document.height;
	} else {
		scrollObj[scrollIndex].scrollContent.h=document.getElementById("scrollContentDiv"+scrollIndex).offsetHeight;
	}
	scrollObj[scrollIndex].scrollWindow.offset=(scrollObj[scrollIndex].scrollContent.h-scrollObj[scrollIndex].scrollWindow.h<=0)? 0 : scrollObj[scrollIndex].scrollContent.h-scrollObj[scrollIndex].scrollWindow.h;

	scrollObj[scrollIndex].scrollPos.top=scrollObj[scrollIndex].scrollPos.ypos=scrollObj[scrollIndex].scrollPos.startPos;
	scrollObj[scrollIndex].scrollContent.top=scrollObj[scrollIndex].scrollContent.ypos=0;

	setScrollState(scrollIndex);
}

function setScrollState(i) {
	scrollObj[i].scrollPosAreaDiv.visibility = scrollObj[i].scrollPos.visibility = (scrollObj[i].scrollWindow.offset==0)?"hidden":"visible";
}

function toggleScroll(scrollIndex,bSwitch) {
	scrollObj[scrollIndex].scrollPosAreaDiv.visibility = scrollObj[scrollIndex].scrollPos.visibility = scrollObj[scrollIndex].scrollWindow.visibility = bSwitch?"visible":"hidden";
	if (bSwitch) setScrollState(scrollIndex);
}

function checkIfScrollPos(x,y) {
	for(var i=0;i<numberOfScrolls;i++) {
		if ((scrollObj[i].scrollPos.visibility=="visible"||scrollObj[i].scrollPos.visibility=="show") && (x>=scrollObj[i].scrollPos.xpos+scrollObj[i].extraX && x<=scrollObj[i].scrollPos.xpos+scrollPosWidth+scrollObj[i].extraX) && (y>=scrollObj[i].scrollPos.ypos+scrollObj[i].extraY && y<=scrollObj[i].scrollPos.ypos+scrollPosHeight+scrollObj[i].extraY)) return i;
	}
	return -1;
}

function checkIfScrollPosArea(x,y) {
	for(var i=0;i<numberOfScrolls;i++) {
		if ((scrollObj[i].scrollPosAreaDiv.visibility=="visible"||scrollObj[i].scrollPosAreaDiv.visibility=="show") && (x>=scrollObj[i].scrollPosAreaDiv.xpos+scrollObj[i].extraX && x<=scrollObj[i].scrollPosAreaDiv.xpos+scrollPosAreaWidth+scrollObj[i].extraX) && (y>=scrollObj[i].scrollPosAreaDiv.ypos+scrollArrowHeight+scrollObj[i].extraY && y<=scrollObj[i].scrollPos.startPos+scrollObj[i].scrollPosAreaHeight+scrollObj[i].extraY) && checkIfScrollPos(x,y)==-1) return i;
	}
	return -1;
}

function doMouseDown(e) {
	if ((!document.all && e.which!=1) || (document.all && event.button!=1)) return true;
	var x = (!document.all)? e.pageX : event.x+document.body.scrollLeft;
	var y = (!document.all)? e.pageY : event.y+document.body.scrollTop;

	if((i=checkIfScrollPos(x,y))!=-1) {
		scrollObj[i].scrollPos.dragYOffset = y-scrollObj[i].scrollPos.ypos;
		scrollObj[i].scrollPos.dragActive = true;
		return false;
	} else if ((i=checkIfScrollPosArea(x,y))!=-1) {
		if (y-scrollObj[i].extraY <= scrollObj[i].scrollPosAreaDiv.ypos+scrollArrowHeight+scrollPosHeight/2) {
			iPos = scrollObj[i].scrollPos.startPos;
		} else if (y-scrollObj[i].extraY >= scrollObj[i].scrollPosAreaDiv.ypos+scrollObj[i].scrollPosAreaDiv.h-scrollArrowHeight-scrollPosHeight/2) {
			iPos = scrollObj[i].scrollPosAreaDiv.ypos+scrollObj[i].scrollPosAreaDiv.h-scrollArrowHeight-scrollPosHeight;
		} else {
			iPos = (y-scrollPosHeight/2)-scrollObj[i].extraY;
		}
		scrollObj[i].scrollPos.top = scrollObj[i].scrollPos.ypos = parseInt(iPos);
		positionScrollContent(i);
	} else return (document.all)? true : routeEvent(e);
}

function doMouseMove(e) {
	var x = (!document.all)? e.pageX : event.x+document.body.scrollLeft;
	var y = (!document.all)? e.pageY : event.y+document.body.scrollTop;

	for(i=0;i<numberOfScrolls;i++) {
		if (scrollObj[i].scrollPos.dragActive) {
			if (y-scrollObj[i].scrollPos.dragYOffset >= scrollObj[i].scrollPos.startPos && y-scrollObj[i].scrollPos.dragYOffset <= scrollObj[i].scrollPos.startPos+scrollObj[i].scrollPosAreaHeight-scrollPosHeight) {
				scrollObj[i].scrollPos.top = scrollObj[i].scrollPos.ypos = y-scrollObj[i].scrollPos.dragYOffset;
			} else if (y-scrollObj[i].scrollPos.dragYOffset <= scrollObj[i].scrollPos.startPos) {
				scrollObj[i].scrollPos.top = scrollObj[i].scrollPos.ypos = scrollObj[i].scrollPos.startPos;
			} else if (y-scrollObj[i].scrollPos.dragYOffset >= scrollObj[i].scrollPos.startPos+scrollObj[i].scrollPosAreaHeight-scrollPosHeight) {
				scrollObj[i].scrollPos.top = scrollObj[i].scrollPos.ypos = scrollObj[i].scrollPos.startPos+scrollObj[i].scrollPosAreaHeight-scrollPosHeight;
			}
			positionScrollContent(i);
			return false;
		}
	}
	return true;
}

function doMouseUp(e) {
	for(i=0;i<numberOfScrolls;i++) {
		scrollObj[i].scrollPos.dragActive=scrollObj[i].scrollContent.active=false;
	}
	return true;
}

function positionScrollContent(i) {
	scrollContentFactor = (scrollObj[i].scrollPos.ypos-scrollObj[i].scrollPos.startPos)/(scrollObj[i].scrollPosAreaHeight-scrollPosHeight);
	scrollObj[i].scrollContent.top = scrollObj[i].scrollContent.ypos = -Math.round(scrollObj[i].scrollWindow.offset*scrollContentFactor);
}

function scrollUp(i) {
	var scrollPosFactor;
	if (scrollObj[i].scrollContent.active) {
		if (scrollObj[i].scrollContent.ypos+scrollBySize < 0) {
			scrollObj[i].scrollContent.ypos += scrollBySize;
		} else {
			scrollObj[i].scrollContent.ypos = 0;
		} 
		scrollObj[i].scrollContent.top = scrollObj[i].scrollContent.ypos;

		scrollPosFactor = (scrollObj[i].scrollContent.ypos==0 && scrollObj[i].scrollWindow.offset==0)? 0 : -(scrollObj[i].scrollContent.ypos/scrollObj[i].scrollWindow.offset);
		scrollObj[i].scrollPos.top = scrollObj[i].scrollPos.ypos = Math.round((scrollObj[i].scrollPosAreaHeight-scrollPosHeight)*scrollPosFactor) + scrollObj[i].scrollPos.startPos;

		setTimeout("scrollUp("+i+")",10);
	}
}

function scrollDown(i) {
	var scrollPosFactor;
	if (scrollObj[i].scrollContent.active) {
		if (scrollObj[i].scrollContent.ypos-scrollBySize > -scrollObj[i].scrollWindow.offset) {
			scrollObj[i].scrollContent.ypos -= scrollBySize;
		} else {
			scrollObj[i].scrollContent.ypos = -scrollObj[i].scrollWindow.offset;
		}
		scrollObj[i].scrollContent.top = scrollObj[i].scrollContent.ypos;

		scrollPosFactor = (scrollObj[i].scrollContent.ypos==0 && scrollObj[i].scrollWindow.offset==0) ? 0 : -(scrollObj[i].scrollContent.ypos/scrollObj[i].scrollWindow.offset);
		scrollObj[i].scrollPos.top = scrollObj[i].scrollPos.ypos = Math.round((scrollObj[i].scrollPosAreaHeight-scrollPosHeight)*scrollPosFactor) + scrollObj[i].scrollPos.startPos;

		setTimeout("scrollDown("+i+")",10);
	}
}

