
function scrollMe(){
	document.getElementById('scroll_container').style.height = $('#scroll_container').height()+'px';
	// speed, scrollSpeed, dragHeight, trackHeight, trackObj, upObj, downObj, dragObj, contentMaskObj, contentObj
	myScroll = new ScrollObj(6,25,46,496,"scrollbar",null,null,"scroller","scroll","scroll_container");
}

////////////////////////////////////////////////////






// scroller.js

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

function addScrollEvent(event,method){
	this[event] = method;
	if(ns4) this.captureEvents(Event[event.substr(2,event.length).toUpperCase()]);
}
function removeScrollEvent(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.getTop = function(){return parseInt(el.css.top) || 0};
	el.setTop = function(y){el.css.top = parseInt(ns4 ? y: y)+"px"};
	el.getHeight = function(){return $(el).get(0).offsetHeight};
//	el.getHeight = function(){return ns4 ? el.document.Height : el.offsetHeight};
	el.getClipHeight = function(){return ns4 ? el.css.height : el.offsetHeight};
	el.hideVis = function(){el.css.visibility="hidden"};
	el.addScrollEvent = addScrollEvent;
	el.removeScrollEvent = removeScrollEvent;
	return el;
}
function getYMouse(e){
//	alert(iex ? event.clientY*1 + $(window).scrollTop() : e.pageY);
//	alert($(window).scrollTop());
	return iex ? event.clientY*1 + $(window).scrollTop() : e.pageY;
}

document.addScrollEvent = addScrollEvent;
document.removeScrollEvent = removeScrollEvent;

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Scroller Class
var noScroll;
ScrollObj = function(speed, scrollSpeed, dragHeight, trackHeight, trackObj, upObj, downObj, dragObj, contentMaskObj, contentObj){
	this.speed = speed;
	this.scrollSpeed = scrollSpeed;
	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;
	
	if(this.contentHeight <= this.contentMaskHeight){
		this.dragObj.hideVis();
		noScroll = true;
	}else{
		var self = this;
		if (window.addEventListener)
		{
		    /** DOMMouseScroll is for mozilla. */
		    this.contentObj.addEventListener('DOMMouseScroll', wheel, false);
		}
		/** IE/Opera. */
		this.contentObj.onmousewheel = wheel;
		this.trackObj.addScrollEvent("onmousedown", function(e){self.scrollJump(e);return false});
//		this.upObj.addScrollEvent("onmousedown", function(){self.scroll(self.speed);return false});
//		this.upObj.addScrollEvent("onmouseup", function(){self.stopScroll()});
//		this.upObj.addScrollEvent("onmouseout", function(){self.stopScroll()});
//		
//		this.downObj.addScrollEvent("onmousedown", function(){self.scroll(-self.speed);return false});
//		this.downObj.addScrollEvent("onmouseup", function(){self.stopScroll()});
//		this.downObj.addScrollEvent("onmouseout", function(){self.stopScroll()});
		
		this.dragObj.addScrollEvent("onmousedown", function(e){self.startDrag(e);return false});
		if(iex) this.dragObj.addScrollEvent("ondragstart", function(){return false});
	}
//	alert('this.trackTop='+this.trackTop+',this.trackLength='+this.trackLength+',this.trackBottom='+this.trackBottom+',this.contentMaskHeight='+this.contentMaskHeight+',this.contentHeight='+this.contentHeight+',this.contentLength='+this.contentLength+',this.scrollLength='+this.scrollLength);
}


function handle(delta) {
        if(! noScroll){
	        if (delta < 0){
				myScroll.scrollWheel('bottom')
			} else {
				myScroll.scrollWheel('top')
			}
		}
}


function wheel(event){
       var delta = 0;
        if (!event) /* For IE. */
                event = window.event;
        if (event.wheelDelta) { /* IE/Opera. */
                delta = event.wheelDelta/120;
                /** In Opera 9, delta differs in sign as compared to IE.
                 */
                if (window.opera)
                        delta = delta/40;
        } else if (event.detail) { /** Mozilla case. */
                /** In Mozilla, sign of delta is different than in IE.
                 * Also, delta is multiple of 3.
                 */
                delta = -event.detail/3;
        }
        /** If delta is nonzero, handle it.
         * Basically, delta is now positive if wheel was scrolled up,
         * and negative, if wheel was scrolled down.
         */
        if (delta){
        	if(! noScroll){
				myScroll.scrollWheel(delta)
			}
        }
//                handle(delta);
        /** Prevent default actions caused by mouse wheel.
         * That might be ugly, but we handle scrolls somehow
         * anyway, so don't bother here..
         */
        blockEvent(event);
//        if (event.preventDefault)
//                event.preventDefault();
		event.returnValue = false;

}

ScrollObj.prototype.startDrag = function(e){
	this.dragStartMouse = getYMouse(e);
	this.dragStartOffset = this.dragObj.getTop();
	var self = this;
	document.addScrollEvent("onmousemove", function(e){self.drag(e)});
	document.addScrollEvent("onmouseup", function(){self.stopDrag()});
}
ScrollObj.prototype.stopDrag = function(){
	document.removeScrollEvent("onmousemove");
	document.removeScrollEvent("onmouseup");
}
ScrollObj.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);
}
ScrollObj.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);

}
ScrollObj.prototype.stopScroll = function(){
	if(this.scrollTimer){
		window.clearTimeout(this.scrollTimer);
		this.scrollTimer = null;
	}
}
ScrollObj.prototype.scrollJump = function(e){
	var currentMouse = getYMouse(e) - $('#scrollbar').offset().top;

//	var deptCtn = $('#scrollbar').offset().top;
//	alert(deptCtn.top);
	
//	currentMouse = currentMouse - deptCtn;
	var dragDistance = currentMouse-(this.dragHeight/2);
	var dragMovement = (dragDistance<this.trackTop) ? this.trackTop : (dragDistance>this.trackBottom) ? this.trackBottom : dragDistance;
//	alert('currentMouse='+currentMouse+', dragHeight='+this.dragHeight+', dragDistance='+dragDistance+', dragMovement='+dragMovement+', ');
	this.dragObj.setTop(dragMovement);
	var contentMovement = -(dragMovement-this.trackTop)*(1/this.scrollLength);
	this.contentObj.setTop(contentMovement);
}

//var wheelLoc = 0;

ScrollObj.prototype.scrollWheel = function(delta){
	var i = (delta < 0) ? 1 : -1;
	
	var contentMovement = this.contentObj.getTop() - i*this.scrollSpeed;
//	alert(contentMovement+','+this.contentObj.getTop()+','+this.contentLength);
	if((contentMovement<0)&&(contentMovement>-this.contentLength))
	{
		dragMovement = - contentMovement*this.scrollLength - this.trackTop
		this.dragObj.setTop(dragMovement>0?(dragMovement<450?dragMovement:450) : 0);
		
		this.contentObj.setTop(contentMovement);
	}
	else if(contentMovement>=0)
	{
		dragMovement = contentMovement*this.scrollLength - this.trackTop
		this.dragObj.setTop(0);
		
		this.contentObj.setTop(0);
	}
	else{
		this.dragObj.setTop(450);
		
		this.contentObj.setTop(-this.contentLength);
	}
	
//	alert(dragMovement+','+this.trackTop+','+contentMovement+','+parseInt(this.dragObj.css.top));
}

//ScrollObj.prototype.scrollWheel = function(delta){
//	var i = (delta < 0) ? 1 : -1;
//	
//	var dragMovement = this.dragObj.getTop() + i*15;
//	if((dragMovement<500-50)&&(dragMovement>0)){
//		this.dragObj.setTop(dragMovement);
//		
//		var contentMovement = -(dragMovement-this.trackTop + i*15)*(1/this.scrollLength);
//	
//		this.contentObj.setTop(contentMovement);
//	}
//	else if(dragMovement<=0){
//		this.dragObj.setTop(0);
//
//		this.contentObj.setTop(0);
//	}
//	else{
//		this.dragObj.setTop(450);
//		
//		var contentMovement = -(450-this.trackTop + 15)*(1/this.scrollLength);
//	
//		this.contentObj.setTop(contentMovement);
//	}
//	
////	alert(dragMovement+','+this.trackTop+','+contentMovement+','+parseInt(this.dragObj.css.top));
//}

//
//ScrollObj.prototype.scrollWheel = function(delta){
//	var i = (delta < 0) ? 1 : -1;
//	
//	
//	if (dir == 'bottom'){
//		var dragMovement = this.dragObj.getTop() + 15;
//		if(dragMovement<500-50){
//			this.dragObj.setTop(dragMovement);
//			
//			var contentMovement = -(dragMovement-this.trackTop + 15)*(1/this.scrollLength);
//		
//			this.contentObj.setTop(contentMovement);
//		}
//		else{
//			this.dragObj.setTop(450);
//			
//			var contentMovement = -(450-this.trackTop + 15)*(1/this.scrollLength);
//		
//			this.contentObj.setTop(contentMovement);
//		}
//	} else {
//		var dragMovement = this.dragObj.getTop() - 15;
//		if(dragMovement>0){
//			this.dragObj.setTop(dragMovement);
//	
//			var contentMovement = -(dragMovement-this.trackTop-15)*(1/this.scrollLength);
//		
//			this.contentObj.setTop(contentMovement);
//		}
//		else{
//			this.dragObj.setTop(0);
//	
//			this.contentObj.setTop(0);
//		}
//	}	
////	alert(dragMovement+','+this.trackTop+','+contentMovement+','+parseInt(this.dragObj.css.top));
//}


function blockEvent(event)
{
    if (!event)
    {
        event = window.event;
    }
    if (event.stopPropagation) 
    {
        event.stopPropagation();
    }
    else 
    {
        event.cancelBubble = true;
    }
    if (event.preventDefault) 
    {
        event.preventDefault();
    }
    event.returnValue = false;
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Misc Functions

function fixNetscape4(){
	if(ns4origHeight != window.innerHeight || ns4origHeight != window.innerHeight){
		window.location.reload();
	}	
}
if(document.layers){
	ns4origWidth = window.innerWidth;
	ns4origHeight = window.innerHeight;
	window.onresize = fixNetscape4;
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||






$(document).ready(function(){scrollMe();});
//if(! noScroll){
//	document.getElementById('scroller').style.display = 'block';
//}

