// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// 
// 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/24/03 ---------------------------------------------------------
// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// 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.getTop = function() {return parseInt(el.css.top) || 0};
el.setTop = function(y) {el.css.top = ns4 ? y: y+"px"};
el.getHeight = function() {return ns4 ? el.document.height : el.offsetHeight};
el.getClipHeight = function() {return ns4 ? el.clip.height : el.offsetHeight};
el.hideVis = function() {el.css.visibility="hidden"};
el.addEvent = addEvent;
el.removeEvent = removeEvent;
return el; }

function getYMouse(e) {
return iex ? event.clientY : e.pageY; }

document.addEvent = addEvent;
document.removeEvent = removeEvent;

// Scroller Class
ScrollObj = 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;
	
if(this.contentHeight <= this.contentMaskHeight) {
this.dragObj.hideVis(); }
else {
var self = this;
this.trackObj.addEvent("onmousedown", function(e){self.scrollJump(e);return false});
this.upObj.addEvent("onmousedown", function(){self.scroll(self.speed);return false});
this.upObj.addEvent("onmouseup", function(){self.stopScroll()});
this.upObj.addEvent("onmouseout", function(){self.stopScroll()});
this.downObj.addEvent("onmousedown", function(){self.scroll(-self.speed);return false});
this.downObj.addEvent("onmouseup", function(){self.stopScroll()});
this.downObj.addEvent("onmouseout", function(){self.stopScroll()});
this.dragObj.addEvent("onmousedown", function(e){self.startDrag(e);return false});
if(iex) this.dragObj.addEvent("ondragstart", function(){return false}); }}

ScrollObj.prototype.startDrag = function(e) {
this.dragStartMouse = getYMouse(e);
this.dragStartOffset = this.dragObj.getTop();
var self = this;
document.addEvent("onmousemove", function(e) {self.drag(e)});
document.addEvent("onmouseup", function() {self.stopDrag()}); }

ScrollObj.prototype.stopDrag = function() {
document.removeEvent("onmousemove");
document.removeEvent("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) {	 
topindent = ( getRealHeight() - 599 ) / 2 + 117;
var currentMouse = getYMouse(e) - topindent;
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); }

// Misc Functions
function fixNetscape4() {
if(ns4origWidth != window.innerWidth || ns4origHeight != window.innerHeight) {
window.location.reload(); }}
if(document.layers) {
ns4origWidth = window.innerWidth;
ns4origHeight = window.innerHeight;
window.onresize = fixNetscape4; }


function getRealHeight() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return myHeight;
}

//window.onload = function() {
// speed, dragHeight, trackHeight, trackObj, upObj, downObj, dragObj, contentMaskObj, contentObj
// myScroll = new ScrollObj(6,19,371,"track_simmple","up_simmple","down_simmple","drag_simmple","contentMask_simmple","content");
// myScroll = new ScrollObj(6,19,371,"track_left","up_left","down_left","drag_left","contentMask_left","content_left");
// myScroll = new ScrollObj(6,19,321,"track","up","down","drag","contentMask","content");
// myScroll = new ScrollObj(6,19,320,"track_local","up_local","down_local","drag_local","contentMask_local","content_local");
// };


/** This is high-level function.
 * It must react to delta being more/less than zero.
 */
function handle(delta) {
        if (delta < 0)
        {
			myScroll.scroll( -myScroll.speed);

        }else 
        {
       
        	myScroll.scroll( myScroll.speed);
        	
        }
        
       
       
}

/** Event handler for mouse wheel event.
 */
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;
        } 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)
                handle(delta);
        /** Prevent default actions caused by mouse wheel.
         * That might be ugly, but we handle scrolls somehow
         * anyway, so don't bother here..
         */
        if (event.preventDefault)
                event.preventDefault();
	event.returnValue = false;
}

/** Initialization code. 
 * If you use your own event management code, change it as required.
 */
//if (window.addEventListener)
        /** DOMMouseScroll is for mozilla. */
  //      window.addEventListener('DOMMouseScroll', wheel, false);
/** IE/Opera. */
//window.onmousewheel = document.onmousewheel = wheel;