// Global variables
var scrollEngaged = false;
var scrollInterval;
var scrollBars = new Array();

//Read effective style property
function getElementStyle(elemID, IEStyleAttr, CSSStyleAttr) {
	var elem = document.getElementById(elemID);
	if(elem.currentStyle) {
		return elem.currentStyle[IEStyleAttr];
	} else if(window.getComputedStyle) {
		var compStyle = window.getComputedStyle(elem, "");
		return compStyle.getPropertyValue(CSSStyleAttr);
	}
	return "";
}

//Abstract object constructor function
function scrollBar(ownerID, ownerContentID, upID, dnID) {
	this.ownerID = ownerID;
	this.ownerContentID = ownerContentID;
	this.index = scrollBars.length;
	this.upButton = document.getElementById(upID);
	this.dnButton = document.getElementById(dnID);
	this.upButton.index = this.index;
	this.dnButton.index = this.index;
	
	this.ownerHeight = parseInt(getElementStyle(this.ownerID, "height", "height"));
	
	this.contentElem = document.getElementById(ownerContentID);
	
	this.contentFontSize = parseInt(getElementStyle(this.ownerContentID, "fontSize", "font-size"));
	
	this.contentScrollHeight = (this.contentElem.scrollHeight) ? this.contentElem.scrollHeight : this.contentElem.offsetHeight;
	this.initScroll = initScroll;
}

//Assign event handlers to actual scroll buttons
function initScroll() {
	this.upButton.onmousedown = handleScrollClick;
	this.upButton.onmouseup = handleScrollStop;
	this.upButton.oncontextmenu = blockEvent;
	
	this.dnButton.onmousedown = handleScrollClick;
	this.dnButton.onmouseup = handleScrollStop;
	this.dnButton.oncontextmenu = blockEvent;
	
	var isIEMac = (navigator.appName.indexOf("Explorer") != -1 && navigator.userAgent.indexOf("Mac") != -1);
	if(!isIEMac) {
		document.getElementById("textWindow").style.overflow = "hidden";
	}
	//alert("scrolling is turned on");
}

//Turn off scrolling
function handleScrollStop() {
	scrollEngaged = false;	
	//alert("scrolling is turned off");
}

//Block contextmenu for Mac (holding down the mouse button)
function blockEvent(evt) {
	evt = (evt) ? evt : event;
	evt.cancelBubble = true;
	return false;
}

//Initiate scrolling the content per the clicked button
function handleScrollClick(evt) {
	var fontSize;
	evt = (evt) ? evt : event;
	var target = (evt.target) ? evt.target : evt.srcElement;
	var index = target.index;
	//fontSize = scrollBars[index].contentFontSize;
	//fontSize = (target.className == "lineup") ? fontSize : -fontSize;
	fontSize = 9;
	scrollEngaged = true;
	//do single click scroll
	scrollBy(index, parseInt(fontSize));
	//trigger click and hold scrolling
	scrollInterval = setInterval("scrollBy(" + index + ", " + parseInt(fontSize) + ")", 100);
	evt.cancelBubble = true;
	return false;
}

//Perform actual scrolling
function scrollBy(index, px) {
	var scroller = scrollBars[index];
	var elem = document.getElementById(scroller.ownerContentID);
	//alert(elem.style.top);
	var top = parseInt(elem.style.top);
	//var top = -300;
	var scrollHeight = parseInt(scroller.contentScrollHeight);
	var height = scroller.ownerHeight;
	//alert(top);
	//alert(scrollEngaged);
	if(scrollEngaged && top + px >= -scrollHeight + height && top + px <= 0) {
		shiftBy(elem, 0, px);	
	} else{
		shiftBy(elem, 0, px);
		//alert(scrollEngaged);
		//alert("returned false");
		clearInterval(scrollInterval);	
	}
	//alert("scrollBy ran");
}