
var content_width = 156;
var content_mask_height;

var scroll_rate = 8;
var jump_rate = 6;

var scroll_pause = 250;

var scroll_pad = 8;
var scroll_container_name = 'leftsubnav';

var scroll_content_container_name = 'leftsubnav_scroll';

var scroll_content_container_padding = 10;

var top_pad = 199; 

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



function get_el(id) {
return document.getElementById(id);
}


var up_h;
var dn_h;

var drag_h;

var top_stop = 0;
var bottom_stop;

var scroller_top_stop;
var scroller_bottom_stop;


function scroller_init() {

content_mask_height = scrollarea_height-27;

document.getElementById(scroll_container_name).style.width = content_width + 'px';
document.getElementById(scroll_container_name).style.height = content_mask_height - scroll_content_container_padding + 'px';

var cc_h = parseInt(get_el(scroll_container_name).style.height,10);
up_h = parseInt(get_el('arrow_up').style.height,10);
dn_h = parseInt(get_el('arrow_dn').style.height,10);


get_el('scrollbar_container').style.left = content_width-20 + 'px';
get_el('scrollbar_container').style.height = cc_h + scroll_content_container_padding + 'px';

//get_el('scrollbar_bg').style.height = cc_h + 'px';

get_el('arrow_dn').style.top = cc_h- dn_h + scroll_content_container_padding + 23 + 'px';

get_el(scroll_content_container_name).style.width = content_width - 40 + 'px';

define_vars();

}



// Global object to hold drag information.

var container_obj = new Object();
container_obj.zIndex = 10;

var content_obj = new Object();
content_obj.zIndex = 10;

var scroller_obj = new Object();
scroller_obj.zIndex = 0;

var scrollerbar_obj = new Object();
scrollerbar_obj.zIndex = 0;

var x, y;

var scroller_y;

var content_y = 0;

var click_offset;

var content_offset;



function define_vars() {
scroller_top_stop = scroll_pad;//parseInt(get_el('arrow_up').style.height,10);
scroller_y = scroller_top_stop;
}


// Determine browser and version.

function Browser() {
var ua, s, i;
this.isIE    = false;
this.isNS    = false;
this.version = null;
ua = navigator.userAgent;
s = "MSIE";
	if ((i = ua.indexOf(s)) >= 0) {
	this.isIE = true;
	this.version = parseFloat(ua.substr(i + s.length));
	return;
	}
s = "Netscape6/";
	if ((i = ua.indexOf(s)) >= 0) {
	this.isNS = true;
	this.version = parseFloat(ua.substr(i + s.length));
	return;
	}
// Treat any other "Gecko" browser as NS 6.1.
s = "Gecko";
	if ((i = ua.indexOf(s)) >= 0) {
	this.isNS = true;
	this.version = 6.1;
	return;
	}
}

var browser = new Browser();


function define_divs(event) {

var el;
content_obj.elNode = get_el(scroll_content_container_name);
//if (content_obj.elNode.nodeType == 3)

container_obj.elNode = get_el(scroll_container_name);
container_obj_top = parseInt(container_obj.elNode.style.top, 10);

scroller_obj.elNode = get_el('scroller');
scroller_obj_top = parseInt(scroller_obj.elNode.style.top, 10);
scroller_obj_height = parseInt(scroller_obj.elNode.style.height, 10);

scrollerbar_obj.elNode = get_el('scrollbar_container');

	if (!y) {
		if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		y = 0;//window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
		}
		if (browser.isNS) {
		x = event.clientX + window.scrollX;
		y = 0;//scroller_obj_top+event.clientY + window.scrollY;
		}

	// Save starting positions of cursor and element.
	
	content_obj.cursorStartX = x;
	content_obj.cursorStartY = y;
	content_obj.elStartLeft  = parseInt(content_obj.elNode.style.left, 10);
	content_obj.elStartTop   = 0;//parseInt(content_obj.elNode.style.top,  10);
	
	scroller_obj.cursorStartY = y;
	scroller_obj.elStartTop   = scroll_pad;
	
	if (isNaN(content_obj.elStartLeft)) content_obj.elStartLeft = 0;
	if (isNaN(content_obj.elStartTop))  content_obj.elStartTop  = 0;
	
	}

// Update element's z-index.

content_obj.elNode.style.zIndex = ++content_obj.zIndex;
scroller_obj.elNode.style.zIndex = ++scroller_obj.zIndex;

content_top = parseInt(content_obj.elNode.style.top,10);

content_div_height = get_el(scroll_content_container_name).clientHeight;

bottom_stop = -(content_div_height-content_mask_height-(scroll_content_container_padding*2));

drag_h = content_mask_height-(scroll_pad*2)+38-scroller_obj_height;

time_factor = (content_div_height-content_mask_height)/scroll_rate;

scroller_scroll_rate = drag_h/time_factor;

height_ratio = (content_div_height-content_mask_height)/drag_h;

scroller_bottom_stop = content_mask_height-scroller_obj_height-scroll_pad+19;
scroller_top = parseInt(scroller_obj.elNode.style.top,10);


}



var doscroll;

function click_go(direction) {

	content_top = parseInt(content_obj.elNode.style.top,10);
	scroller_top = parseInt(scroller_obj.elNode.style.top,10);
	
	if ((direction == 'dn' && content_top <= bottom_stop) || (direction == 'up' && content_top >= 0)) {
	clearTimeout(doscroll);
	content_obj.elNode.style.top = (direction == 'dn') ? bottom_stop+'px' : '0px';
	content_y = (direction == 'dn') ? -bottom_stop : 0;
	scroller_obj.elNode.style.top = (direction == 'dn') ? scroller_bottom_stop+'px' : scroller_top_stop+'px';
	clearTimeout(doscroll);
	} else {
	// content
	content_y = (direction == 'dn') ? content_y+scroll_rate : content_y-scroll_rate;
	content_obj.elNode.style.top = (direction == 'dn') ? -(content_y)+'px' : -(content_y)+'px';
	// scroller
	scroller_y = (direction == 'dn') ? scroller_y+scroller_scroll_rate : scroller_y-scroller_scroll_rate;
	scroller_obj.elNode.style.top = scroller_y+'px';

	doscroll = setTimeout("click_go('"+direction+"')",0);
	}

}




var click_count = 0;
var click_pause;
/*
	click_pause = setTimeout("click_go('"+direction+"')",scroll_pause);
	clearTimeout(click_pause);
*/

function do_scroll(dowhat,direction,event) {

	if (!y && direction && click_count < 1) { define_divs(event); click_count = 1;}

	if (dowhat == 'scroll') {
	click_go(direction);
	} else {
	clearTimeout(doscroll);
	}
}







var dojump;
var jump_direction = 'none';

function jump_to(click_spot) {

jump_height = (drag_h/jump_rate > 100) ? 100 : parseInt(drag_h/jump_rate,10);

	if (click_spot > scroller_top) {
		if (jump_direction == 'down' || jump_direction == 'none') {
		content_jump_spot = (scroller_top+jump_height+scroller_obj_height > content_mask_height) ? -bottom_stop : content_y+(jump_height*height_ratio);
		scroller_jump_spot = (scroller_top+jump_height+scroller_obj_height > content_mask_height) ? scroller_bottom_stop : scroller_top+jump_height;
		jump_direction = 'down';
		} else {
		clearTimeout(dojump);
		}
	} else if (click_spot < scroller_top) {
		if (jump_direction == 'up' || jump_direction == 'none') {
		content_jump_spot = (scroller_top-jump_height-scroller_obj_height < scroller_top_stop) ? top_stop : content_y-(jump_height*height_ratio);
		scroller_jump_spot = (scroller_top-jump_height-scroller_obj_height < scroller_top_stop) ? scroller_top_stop : scroller_top-jump_height;
		jump_direction = 'up';
		} else {
		clearTimeout(dojump);
		}
	}

content_obj.elNode.style.top = -(content_jump_spot) + "px";
scroller_obj.elNode.style.top = scroller_jump_spot + "px";

content_top = parseInt(content_obj.elNode.style.top,10);
content_y = -content_top;

scroller_top = parseInt(scroller_obj.elNode.style.top,10);
scroller_y = scroller_top;

dojump = setTimeout("jump_to('"+click_spot+"')",150);

}


function do_jump(dowhat,event) {

	if (dowhat == 'jump') { define_divs(event); }

	if (dowhat == 'jump') {
	click_spot = ((browser.isIE) ? window.event.clientY : event.clientY) - (parseInt(container_obj.elNode.style.top, 10));
	jump_to(click_spot);
	} else {
	clearTimeout(dojump);
	jump_direction = 'none'
	}
}








function dragStart(event) {

var el;

	if (!y) {
	define_divs(event);
	}
	
click_offset = ((browser.isIE) ? window.event.clientY : event.clientY)-container_obj_top-scroller_top;

//drag_content_offset = click_offset + top_stop;

  // Capture mousemove and mouseup events on the page.

	if (browser.isIE) {
	document.attachEvent("onmousemove", drag_go);
	document.attachEvent("onmouseup",   drag_stop);
	window.event.cancelBubble = true;
	window.event.returnValue = false;
	}


	if (browser.isNS) {
	document.addEventListener("mousemove", drag_go,   true);
	document.addEventListener("mouseup",   drag_stop, true);
	event.preventDefault();
	}
}




function drag_go(event) {
  // Get cursor position with respect to the page.

	if (browser.isIE) {
	x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
	y = window.event.clientY + document.documentElement.scrollTop + (parseInt(container_obj.elNode.style.top, 10));//document.body.scrollTop;
	
	scroller_y = (window.event.clientY > container_obj_top) ? window.event.clientY - (parseInt(container_obj.elNode.style.top, 10)) : scroller_top_stop;

	}

	if (browser.isNS) {
	x = event.clientX + window.scrollX;
	y = event.clientY + (parseInt(container_obj.elNode.style.top, 10));// + window.scrollY;

	scroller_y = (event.clientY > container_obj_top) ? event.clientY - (parseInt(container_obj.elNode.style.top, 10)) : scroller_top_stop;
	
	}

	scroller_top = parseInt(scroller_obj.elNode.style.top,10);
	
	content_y = ((scroller_top-scroll_pad)*height_ratio);


	if (scroller_top <= scroller_bottom_stop && scroller_top >= scroller_top_stop) {
	content_obj.elNode.style.top = -(content_y) + "px";
	scroller_obj.elNode.style.top = ((content_obj.elStartTop  + scroller_y - content_obj.cursorStartY)-click_offset) + "px";
	} else if (scroller_top < scroller_top_stop) {
	content_obj.elNode.style.top = top_stop+"px";
	content_top = top_stop;
	content_y = content_top;
	scroller_obj.elNode.style.top = scroller_top_stop+"px";
	scroller_top = scroller_top_stop;
	scroller_y = scroller_top;
	drag_stop(event);
	} else if (scroller_top > scroller_bottom_stop) {
	content_obj.elNode.style.top = bottom_stop+"px";
	content_top = bottom_stop;
	content_y = -content_top;
	scroller_obj.elNode.style.top = scroller_bottom_stop + "px";
	scroller_top = scroller_bottom_stop;
	scroller_y = scroller_top;
	drag_stop(event);
	}


	if (browser.isIE) {
	window.event.cancelBubble = true;
	window.event.returnValue = false;
	}
	
	if (browser.isNS)
	event.preventDefault();


//content_top = parseInt(content_obj.elNode.style.top,10);

}









function drag_stop(event) {
// Stop capturing mousemove and mouseup events.
	if (browser.isIE) {
	document.detachEvent("onmousemove", drag_go);
	document.detachEvent("onmouseup",   drag_stop);
	window.event.cancelBubble = true;
	window.event.returnValue = false;
	}

	if (browser.isNS) {
	document.removeEventListener("mousemove", drag_go,   true);
	document.removeEventListener("mouseup",   drag_stop, true);
	}
}





function do_drag(event) {
dragStart(event);
}




