/**
 * @author Daniel M. Story
 */

var fsbTimer = false;
var scrollBar = false;
var scrollButton = false;

var divCode = false;

var buttonIsDown = false;

var oldMX = 0;
var oldMY = 0;

var scrollVisible = false;

function updateScrollbar()
{
	
	var pageSize = getPageSize();
	var pageScoll = getPageScroll();
	
	if(divCode != false)
	{
		if( ((pageScoll[1] + pageSize[3]) < (divCode.offsetTop+divCode.offsetHeight)) && ((divCode.scrollWidth-divCode.offsetWidth)>0) )
		{
			scrollBar.style.display="block";
			scrollBar.style.left = (divCode.offsetLeft + 1) + "px";
			scrollBar.style.top = (pageScoll[1] + pageSize[3]-18) + "px";
			scrollBar.style.width = (divCode.offsetWidth - 2) + "px";
			//set position of the scrollbar area
			
			scrollButton.style.width = ((scrollBar.offsetWidth / divCode.scrollWidth) * divCode.offsetWidth) + "px";
			
			scrollVisible = true;
				
			if(buttonIsDown){ updateScrollPosition(); }
		}else{
			scrollBar.style.display="none";
			scrollVisible = false;
		}
	}
	
	
}

function scrollButtonDown(e)
{
	//var objTarget = false;
	//if (e.target){objTarget = e.target; }else if (e.srcElement){objTarget = e.srcElement;}
	
	oldMX = mX;
	oldMY = mY;
	
	if(scrollVisible==false){return;}
	
	updateScrollPosition();
	
	buttonIsDown = true;
}

function scrollButtonUp(e)
{
	//var objTarget = false;
	//if (e.target){objTarget = e.target; }else if (e.srcElement){objTarget = e.srcElement;}
	
	oldMX = mX;
	oldMY = mY;
	
	if(scrollVisible==false){return;}
	
	buttonIsDown = false;
	
	updateScrollPosition();
}

function updateScrollPosition()
{
	var diffX = mX - oldMX;

	if( (scrollButton.offsetLeft+diffX)<0 )
	{
		scrollButton.style.left = "0px";
	}else if( ((scrollButton.offsetLeft+scrollButton.offsetWidth)+diffX)>scrollBar.offsetWidth )
	{
		scrollButton.style.left = (scrollBar.offsetWidth - scrollButton.offsetWidth) + "px";
	}else{
		scrollButton.style.left = (scrollButton.offsetLeft+diffX) + "px";
	}
	
	divCode.scrollLeft = (scrollButton.offsetLeft) * ( divCode.scrollWidth / (scrollBar.offsetWidth-10) );
	
	oldMX = mX;
	
}

function getCodeNode()
{
	var divs = document.getElementsByTagName('div');
	for(i=0;i<divs.length;i++)
	{
		if(divs[i].className == 'code')
		{
			return divs[i];	
		}
	}
	return false;
}

function onBodyLoad()
{
	startMouseTrack();
	
	divCode = getCodeNode();
	
	scrollBar = createElement('div');
	scrollBar.style.position="absolute";
	scrollBar.style.display="none";
	scrollBar.className="scrollBar";
	
	document.body.appendChild(scrollBar);
	
	scrollButton = createElement('div');
	scrollButton.style.position="relative";
	scrollButton.className="scrollBarButton";
	
	scrollBar.appendChild(scrollButton);
	
	scrollButton.onmousedown = function (oEvent){ if(!oEvent){ oEvent = window.event; } scrollButtonDown(oEvent); };
	scrollButton.onmouseup = function (oEvent){ if(!oEvent){ oEvent = window.event; } scrollButtonUp(oEvent); };
	divCode.onmouseup = function (oEvent){ if(!oEvent){ oEvent = window.event; } scrollButtonUp(oEvent); };
	
	fsbTimer = setInterval( updateScrollbar, 66 );
}

addEvent(window,'load', onBodyLoad )
