// global vars
var SCROLL_BAR;
var SCROLL_UP;
var SCROLL_DOWN;
var TEXT_BOX;
var STATUS_BOX;

var SCROLL_END_OFFSET = 25;
var SCROLL_TEMPO = 30;
var SCROLL_POSITION;

function createScrollBar( parent , up , down , bar , region , scroll ,  hit ){
	var parent_holder = document.getElementById( parent );
	
	var scroll_up = document.createElement( "div" );
	scroll_up.setAttribute( "id" , up );
	scroll_up.onclick = function(){ scrollUp(); };
	scroll_up.appendChild( document.createTextNode( " " ) );
	var scroll_down = document.createElement( "div" );
	scroll_down.setAttribute( "id" , down );
	scroll_down.onclick = function(){ scrollDown(); };
	scroll_down.appendChild( document.createTextNode( " " ) );
	
	var scroll_bar = document.createElement( "div" );
	scroll_bar.setAttribute( "id" , bar );
		var scroll_bar_region = document.createElement( "div" );
		scroll_bar_region.setAttribute( "id" , region );
		scroll_bar_region.appendChild( document.createTextNode( " " ) );
			var scroller = document.createElement( "div" );
			scroller.setAttribute( "id" , scroll );
			scroller.appendChild( document.createTextNode( " " ) );
				var scroller_hit = document.createElement( "span" );
				scroller_hit.setAttribute( "id" , hit );
				scroller_hit.appendChild( document.createTextNode( " " ) );
			scroller.appendChild( scroller_hit );
		scroll_bar_region.appendChild( scroller );
		scroll_bar_region.appendChild( document.createTextNode( " " ) );
	scroll_bar.appendChild( scroll_bar_region );
	
	parent_holder.appendChild( scroll_up );
	parent_holder.appendChild( scroll_bar );
	parent_holder.appendChild( scroll_down );
}


function setScroller(){
	var text_scroll_factor = ( SCROLL_BAR.offsetHeight - SCROLL_END_OFFSET ) / ( TEXT_BOX.scrollHeight - TEXT_BOX.offsetHeight );
	SCROLL_POSITION = parseInt( TEXT_BOX.scrollTop * text_scroll_factor );
	SCROLL_BAR.style.top = SCROLL_POSITION + "px";
}

function setScrollBox(){
	var text_scroll_factor = ( TEXT_BOX.scrollHeight - TEXT_BOX.offsetHeight ) / ( SCROLL_BAR.offsetHeight - SCROLL_END_OFFSET );
	TEXT_BOX.scrollTop = parseInt( SCROLL_BAR.style.top ) * text_scroll_factor;
}

function scrollUp(){
	if( TEXT_BOX.scrollTop > 0 ){
		TEXT_BOX.scrollTop = TEXT_BOX.scrollTop - SCROLL_TEMPO;
	}
	setScroller();
}

function scrollDown(){
	if( ( ( TEXT_BOX.scrollHeight - TEXT_BOX.offsetHeight ) - TEXT_BOX.scrollTop ) > 0 ){
		TEXT_BOX.scrollTop = TEXT_BOX.scrollTop + SCROLL_TEMPO;
	}
	setScroller();	
}

function scrollWheel(){
	if( event.wheelDelta >= 120 ){
		scrollUp();
	}else if( event.wheelDelta <= -120 ){
		scrollDown();
	}
	return false;
}

function interceptAnchors(){
	var links = TEXT_BOX.getElementsByTagName( "a" );
	var doc_loc = document.location.toString();
	var doc_loc_parts_path = doc_loc.split( "/" );
	var doc_loc_paths = [];
	var path_slash_check = /^\//;
	for( var x = 3 ; x < doc_loc_parts_path.length ; x++ ){
		 doc_loc_paths[ x - 2 ] = doc_loc_parts_path[ x ];
	} 
	var doc_loc_path = doc_loc_paths.join( "/" );
	doc_loc_path = doc_loc_path.split( "?" )[0];
	doc_loc_path = doc_loc_path.split( "#" )[0];
	doc_loc_path = ( ( path_slash_check.test( doc_loc_path ) ) ? "" : "/" ) + doc_loc_path;
	for( var i = 0 ; i < links.length ; i++ ){
		var link = links[ i ];
		var link_href = link.getAttribute( "href" );
		if( link_href ){
			if( link_href.indexOf( "#" ) >= 0 ){
				var link_path = link.pathname;
				link_path = ( ( path_slash_check.test( link_path ) ) ? "" : "/" ) + link_path;
				if( link_path == doc_loc_path ){
					link.onmouseup = function(){
						setTimeout( "setScroller()" , 100 );
					}
				}
			}
		}
	}
}

var Slide = {
	obj : null,

	init : function( o , root ){
		o.root = ( root ) ? root : null;
		o.onmousedown = Slide.start;
	},

	start : function(e){
		e = Slide.fix( e );
		var o = Slide.obj = this;
		var y = parseInt( o.root.style.top );
		var x = parseInt( o.root.style.left );
		o.lastMouseY = e.clientY;
		o.parentOffset = findPosY( o.parentNode.parentNode );
		document.onmousemove = Slide.slide;
		document.onmouseup = Slide.end;
		return false;
	},

	slide : function(e){
		e = Slide.fix( e );
		var o = Slide.obj;
		var eX = e.clientX;
		var eY = e.clientY;
		// any corrections to be done here, IE bug
		var nX = eX;
		var nY = eY;
		nY = nY - o.parentOffset;
		if( eY >= o.lastMouseY ){
			// going down
			if( ( ( ( TEXT_BOX.scrollHeight - TEXT_BOX.offsetHeight ) - TEXT_BOX.scrollTop ) >= 0 ) && ( eY <= ( SCROLL_BAR.offsetHeight + o.parentOffset - SCROLL_END_OFFSET ) ) ){
				Slide.obj.root.style.top = nY + "px";
				setScrollBox();
			}else{
				Slide.end;
			}
		}
		if( eY <= o.lastMouseY ){
			// going up
			if( TEXT_BOX.scrollTop >= 0 && eY >= o.parentOffset ){
				Slide.obj.root.style.top = nY + "px";
				setScrollBox();
			}else{
				Slide.end;
			}
		}
		return false;
	},

	end : function(e){
		e = Slide.fix( e );
		document.onmousemove = null;
		document.onmouseup   = null;				
		return false;
	},

	fix : function(e){
		if (typeof e == 'undefined') e = window.event;
		if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
		if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
		return e;
	}

};

