// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//
// Coded by Travis Beckham
// http://www.squidfingers.com | http://www.podlob.com
// If want to use this code, feel free to do so, but please leave this message intact.
//
// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// --- version date: 01/17/03 ---------------------------------------------------------

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Cross-Browser Functions

//Modified by David Liebeherr, 2006

var dom = document.getElementById;
var iex = document.all;
var ns4 = document.layers;

function addEvent(event, method) {
	this[event] = method;
	if (ns4) this.captureEvents(Event[event.substr(2, event.length).toUpperCase()]);
}
function removeEvent(event) {
	this[event] = null;
	if (ns4) this.releaseEvents(Event[event.substr(2, event.length).toUpperCase()]);
}
function getElement(name, nest) {
	nest = nest ? "document." + nest + "." : "";
	var el = dom ? document.getElementById(name) : iex ? document.all[name] : ns4 ? eval(nest + "document." + name) : false;
	el.css = ns4 ? el : el.style;
	el.hideVis = function() {
		el.css.visibility = "hidden"
	};
	el.showVis = function() {
		el.css.visibility = "visible"
	};
	el.getLeft = function() {
		return parseInt(el.css.left) || 0
	};
	el.setLeft = function(x) {
		el.css.left = ns4 ? x: x + "px"
	};
	el.getWidth = function() {
		return ns4 ? el.document.width : el.offsetWidth
	};
	el.getClipWidth = function() {
		return ns4 ? el.clip.width : el.offsetWidth
	};
	el.addEvent = addEvent;
	el.removeEvent = removeEvent;
	return el;
}
function getMouse(e) {
	return iex ? event.clientX : e.pageX;
}

document.addEvent = addEvent;
document.removeEvent = removeEvent;

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Scroll Functions

var currentContent = null;
var docLoaded = false;

function initScroller() {
	scrollSpeed = 6;
	// scrolling speed
	dragWidth = 21;
	// Width of scrollbar drag
	trackWidth = 720;
	// Width of scrollbar track
	trackObj = getElement("track");
	// Reference to the scrollbar track div
	upObj = getElement("up");
	// Reference to the up arrow div
	downObj = getElement("down");
	// Reference to the down arrow div
	dragObj = getElement("drag");
	// Reference to the scrollbar drag div
	contentMaskObj = getElement("contentMask");
	// Reference to the content mask div
	trackLeft = dragObj.getLeft();
	// Scrollbar left contraint
	trackLength = trackWidth - dragWidth;
	// Adjusted track width
	trackRight = trackLeft + trackLength;
	// Scrollbar bottom contraint
	contentMaskWidth = contentMaskObj.getClipWidth();
	// Width of the div that masks the content div
	scrollTimer = null;
	trackObj.addEvent("onmousedown", scrollJump);
	upObj.addEvent("onmousedown", function() {
		scroll(scrollSpeed);
		return false
	});
	upObj.addEvent("onmouseup", stopScroll);
	upObj.addEvent("onmouseout", stopScroll);
	downObj.addEvent("onmousedown", function() {
		scroll(-scrollSpeed);
		return false
	});
	downObj.addEvent("onmouseup", stopScroll);
	downObj.addEvent("onmouseout", stopScroll);
	dragObj.addEvent("onmousedown", startDrag);
	if (iex) dragObj.addEvent("ondragstart", function() {
		return false
	});
	docLoaded = true;
	loadContent("main");
}
function loadContent(name) {
	if (!docLoaded) return;
	if (currentContent != null) {
		contentObj.setLeft(0);
		contentObj.hideVis();
	}
	currentContent = name;
	contentObj = getElement(currentContent + "Content", "contentMask");
	contentWidth = contentObj.getWidth();
	// Width of the content div
	contentLength = contentWidth - contentMaskWidth;
	// Adjusted content width
	scrollLength = trackLength / contentLength;
	// Width difference between the scrollbar track and the content
	contentObj.showVis();
	dragObj.setLeft(trackLeft);
}
function startDrag(e) {
	dragStartMouse = getMouse(e);
	// Holds the starting x mouse position
	dragStartOffset = dragObj.getLeft();
	// Holds the starting left position of the scrollbar drag
	document.addEvent("onmousemove", drag);
	document.addEvent("onmouseup", stopDrag);
	return false;
}
function stopDrag() {
	document.removeEvent("onmousemove");
	document.removeEvent("onmouseup");
}
function drag(e) {
	var currentMouse = getMouse(e);
	var mouseDifference = currentMouse - dragStartMouse;
	var dragDistance = dragStartOffset + mouseDifference;
	var dragMovement = (dragDistance < trackLeft) ? trackLeft : (dragDistance > trackRight) ? trackRight : dragDistance;
	dragObj.setLeft(dragMovement);
	var contentMovement = -(dragMovement - trackLeft) * (1 / scrollLength);
	contentObj.setLeft(contentMovement);
	return false;
}
function scroll(speed) {
	var contentMovement = contentObj.getLeft() + speed;
	var dragMovement = trackLeft - Math.round(contentObj.getLeft() * (trackLength / contentLength));
	if (contentMovement > 0) {
		contentMovement = 0;
	} else if (contentMovement < -contentLength) {
		contentMovement = -contentLength;
	}
	if (dragMovement < trackLeft) {
		dragMovement = trackLeft;
	} else if (dragMovement > trackRight) {
		dragMovement = trackRight;
	}
	contentObj.setLeft(contentMovement);
	dragObj.setLeft(dragMovement);
	scrollTimer = window.setTimeout("scroll(" + speed + ")", 25);
}
function stopScroll() {
	if (scrollTimer) {
		window.clearTimeout(scrollTimer);
		scrollTimer = null;
	}
}
function scrollJump(e) {
	var currentMouse = getMouse(e);
	var dragDistance = currentMouse - (dragWidth / 2) - absLeft(trackObj);
	var dragMovement = (dragDistance < trackLeft) ? trackLeft : (dragDistance > trackRight) ? trackRight : dragDistance;
	dragObj.setLeft(dragMovement);
	var contentMovement = -(dragMovement - trackLeft) * (1 / scrollLength);
	contentObj.setLeft(contentMovement);
	return false;
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Utility Functions

function hideScrollbars() {
	if (document.getElementsByTagName) {
		document.getElementsByTagName("body")[0].style.overflow = "hidden";
	}
}
function fixNetscape4() {
	if (ns4origWidth != window.innerWidth || ns4origWidth != window.innerWidth) {
		window.location.reload();
	}
}
if (document.layers) {
	ns4origWidth = window.innerWidth;
	ns4origWidth = window.innerWidth;
	window.onresize = fixNetscape4;
}


function absLeft(el) {
	return (el.offsetParent)?
		   el.offsetLeft + absLeft(el.offsetParent) : el.offsetLeft;
}

function absTop(el) {
	return (el.offsetParent)?
		   el.offsetTop + absTop(el.offsetParent) : el.offsetTop;
}
// ||||||||||||||||||||||||||||||||||||||||||||||||||