// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// 
// 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: 09/29/02 ---------------------------------------------------------

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Cross-Browser Functions

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.getTop = function(){return parseInt(el.css.top) || 0};
	el.setTop = function(y){el.css.top=y};
	el.setLeft = function(x){el.css.left=x};
	el.getHeight = function(){return ns4 ? el.document.height : el.offsetHeight};
	el.getClipHeight = function(){return ns4 ? el.clip.height : el.offsetHeight};
	el.addEvent = addEvent;
	el.removeEvent = removeEvent;
	return el;
}
function getMouse(e){
	return iex ? event.clientY : e.pageY;
}

document.addEvent = addEvent;
document.removeEvent = removeEvent;


// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Utility Functions

function newImage(src){
	img = new Image();
	img.src = src;
	return img;
}
function imageSwap(img,obj,div){
	obj = eval(obj);
	if(document.layers && div != null){
		document.layers[div].document.images[img].src = obj.src;
	}else{
		document.images[img].src = obj.src;
	}
}
function fixNetscape(){
	if(ns4origWidth != window.innerWidth || ns4origHeight != window.innerHeight){
		window.location.reload();
	}	
}
if(document.layers){
	ns4origWidth = window.innerWidth;
	ns4origHeight = window.innerHeight;
	window.onresize = fixNetscape;
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Scroll Functions

var docLoaded = false;
var dragOnly = false;

function initScroller(p_trackHeight, p_dragHeight, p_dragonly, p_scrollSpeed){
	
	scrollSpeed = p_scrollSpeed; 				// scrolling speed
	dragHeight = p_dragHeight; 					// Height of scrollbar drag
	trackHeight = p_trackHeight; 				// Height of scrollbar track
	trackObj = getElement('track'); 			// Reference to the scrollbar track div
	dragObj = getElement('drag'); 				// Reference to the scrollbar drag div
	dragOnly = p_dragonly						// mmartin
	
	
	contentMaskObj = getElement('contentMask'); // Reference to the content mask div
	trackTop = dragObj.getTop(); 				// Scrollbar top contraint
	
	dragObj_startpos = dragObj.getTop();
	
	trackLength = trackHeight-dragHeight; 				// Adjusted track height
	trackBottom = trackTop+trackLength; 				// Scrollbar bottom contraint
	contentMaskHeight = contentMaskObj.getClipHeight();	// Height of the div that masks the content div
	scrollTimer = null;
	
//	trackObj.addEvent('onmousedown',scrollJump);
	
	if (!dragOnly)
	{
		downObj = getElement('down');
		upObj = getElement('up');

		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);
	dragObj.addEvent('ondragstart', function(){return false});

	docLoaded = true;
	loadContent	();
}
function loadContent(){
	if(!docLoaded) return;

	contentObj = getElement('contentBox','contentMask');
	contentHeight = contentObj.getHeight(); // Height of the content div
	contentLength = contentHeight-contentMaskHeight; // Adjusted content height
	scrollLength = trackLength/contentLength; // Height difference between the scrollbar track and the content
	contentStart = contentObj.getTop()
	contentObj.showVis();
	dragObj.setTop(trackTop);

	if(contentHeight<=contentMaskHeight){
		if (!dragOnly)
		{
			up.hideVis();
			down.hideVis();
		}
		trackObj.hideVis();
		dragObj.hideVis();
	}else{
		if (!dragOnly)
		{
			up.showVis();
			down.showVis();
		}
		trackObj.showVis();
		dragObj.showVis();
	}
}
function startDrag(e){
	dragStartMouse = getMouse(e); // Holds the starting y mouse position
	dragStartOffset = dragObj.getTop(); // Holds the starting top 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<trackTop) ? trackTop : (dragDistance>trackBottom) ? trackBottom : dragDistance;
	dragObj.setTop(dragMovement);
	var contentMovement = -(dragMovement-trackTop)*(1/scrollLength);
	contentObj.setTop(contentStart+contentMovement);
	return false;
}
function scroll(speed){
	var contentMovement = contentObj.getTop()+speed;
	var dragMovement = trackTop-Math.round(contentObj.getTop()*(trackLength/contentLength));
	if(contentMovement > 0){
		contentMovement = 0;
	}else if(contentMovement < -contentLength){
		contentMovement = -contentLength;
	}
	if(dragMovement < trackTop){
		dragMovement = trackTop;
	}else if(dragMovement > trackBottom){
		dragMovement = trackBottom;
	}
	
	contentObj.setTop(contentStart+contentMovement);
	dragObj.setTop(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-(dragHeight/2);
	var dragMovement = (dragDistance<trackTop) ? trackTop : (dragDistance>trackBottom) ? trackBottom : dragDistance;
	dragObj.setTop(dragMovement);
	var contentMovement = -(dragMovement-trackTop)*(1/scrollLength);
	
	contentObj.setTop(contentMovement);
	return false;
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||


