Scroller = function(speed, dragHeight, trackHeight, trackObj, upObj, downObj, dragObj, contentMaskObj, contentObj){
	this.speed = speed;
	this.dragHeight = dragHeight;
	this.trackHeight = trackHeight;
	this.trackObj = getElement(trackObj);
	this.upObj = getElement(upObj);
	this.downObj = getElement(downObj);
	this.dragObj = getElement(dragObj);
	this.contentMaskObj = getElement(contentMaskObj);
	this.contentObj = getElement(contentObj,contentMaskObj);
	this.obj = contentObj+'Object';
	eval(this.obj+'=this');
	
	this.trackTop = this.dragObj.getTop();
	this.trackLength = this.trackHeight-this.dragHeight;
	this.trackBottom = this.trackTop+this.trackLength;
	this.contentMaskHeight = this.contentMaskObj.getClipHeight();
	this.contentHeight = this.contentObj.getHeight();
	this.contentLength = this.contentHeight-this.contentMaskHeight;
	this.scrollLength = this.trackLength/this.contentLength;
	this.scrollTimer = null;
	
	var ref = this;
	this.trackObj.setEvent( 'onmousedown', function(e){ref.scrollJump(e);return false}     );
	this.upObj.setEvent(    'onmousedown', function(){ref.scroll(ref.speed);return false}  );
	this.upObj.setEvent(    'onmouseup',   function(){ref.stopScroll()}                    );
	this.upObj.setEvent(    'onmouseout',  function(){ref.stopScroll()}                    );
	this.downObj.setEvent(  'onmousedown', function(){ref.scroll(-ref.speed);return false} );
	this.downObj.setEvent(  'onmouseup',   function(){ref.stopScroll()}                    );
	this.downObj.setEvent(  'onmouseout',  function(){ref.stopScroll()}                    );
	this.dragObj.setEvent(  'onmousedown', function(e){ref.startDrag(e);return false}      );
	this.dragObj.setEvent(  'ondragstart', function(){return false}                        );
}
Scroller.prototype.startDrag = function(e){
	this.dragStartMouse = getYMouse(e);
	this.dragStartOffset = this.dragObj.getTop();
	var ref = this;
	document.setEvent('onmousemove', function(e){ref.drag(e)});
	document.setEvent('onmouseup', function(){ref.stopDrag()});
}
Scroller.prototype.stopDrag = function(){
	document.removeEvent('onmousemove');
	document.removeEvent('onmouseup');
}
Scroller.prototype.drag = function(e){
	var currentMouse = getYMouse(e);
	var mouseDifference = currentMouse-this.dragStartMouse;
	var dragDistance = this.dragStartOffset+mouseDifference;
	var dragMovement = (dragDistance<this.trackTop) ? this.trackTop : (dragDistance>this.trackBottom) ? this.trackBottom : dragDistance;
	this.dragObj.setTop(dragMovement);
	var contentMovement = -(dragMovement-this.trackTop)*(1/this.scrollLength);
	this.contentObj.setTop(contentMovement);
}
Scroller.prototype.scroll = function(speed){
	var contentMovement = this.contentObj.getTop()+speed;
	var dragMovement = this.trackTop-Math.round(this.contentObj.getTop()*(this.trackLength/this.contentLength));
	if(contentMovement > 0){
		contentMovement = 0;
	}else if(contentMovement < -this.contentLength){
		contentMovement = -this.contentLength;
	}
	if(dragMovement < this.trackTop){
		dragMovement = this.trackTop;
	}else if(dragMovement > this.trackBottom){
		dragMovement = this.trackBottom;
	}
	this.contentObj.setTop(contentMovement);
	this.dragObj.setTop(dragMovement);
	this.scrollTimer = window.setTimeout(this.obj+'.scroll('+speed+')',25);
}
Scroller.prototype.stopScroll = function(){
	if(this.scrollTimer){
		window.clearTimeout(this.scrollTimer);
		this.scrollTimer = null;
	}
}
Scroller.prototype.scrollJump = function(e){
	var currentMouse = getYMouse(e);
	var dragDistance = currentMouse-(this.dragHeight/2);
	var dragMovement = (dragDistance<this.trackTop) ? this.trackTop : (dragDistance>this.trackBottom) ? this.trackBottom : dragDistance;
	this.dragObj.setTop(dragMovement);
	var contentMovement = -(dragMovement-this.trackTop)*(1/this.scrollLength);
	this.contentObj.setTop(contentMovement);
}


window.onload = function(){
  myScroll = new Scroller(10,18,163,'track','up','down','drag','contentMask','content');
   // added for top nav components
  }