/****************************************************
* Bryan's Scroller									*
* This allows a web developer to use custom 		*
* designed scrollbars instead of any browsers		*
* default scrollbar.								*
*													*
* Created: 10th January 2008						*
* Copyright: Bryan Ennis 2008						*
*													*
*****************************************************/



var i,j,k;var divs,parent,retDivs;var trackHeight,contentHeight,scrollbarHeight,wrapperHeight,ratio;var scrollBarVIndent=6;var scrollBarTop=11;var currentContentY=0;var currentScrollbarY=scrollBarTop;var slider,timeout,activeEl; var sliding=false;var IE=document.all?true:false;var tempY=0;var delta=0;var oldDelta=0;var doTracking=false;var prevY=0;var initialTime=true;var moveByY=0;var newTopScroll=scrollBarTop;document.onmousemove=moveSlider;document.onmouseup=stopSlider;function initScroll(){addListenersScroll();}
function addListenersScroll(){divs=document.getElementsByTagName("div");var aa=new Array();var ba=0;for(i=0;i<divs.length;i++){if(divs[i].className=="scroller"){divs[i].style.display="block";}
else if(divs[i].className=="content"){if(divs[i].parentNode){if(divs[i].parentNode.className=="custom-scroll"){if(divs[i].addEventListener)addEventScroll(divs[i],"DOMMouseScroll",handleMouseScrollScroll);divs[i].onmousewheel=handleMouseScrollScroll;if(!browser.isIE)divs[i].style.width=parseInt(divs[i].offsetWidth-15)+"px";}}}else if(divs[i].className=="bar"){addEventScroll(divs[i],"mousedown",handleMouseDownScroll);addEventScroll(divs[i],"mousemove",handleMouseMoveScroll);addEventScroll(divs[i],"mouseup",handleMouseUpScroll);addEventScroll(divs[i],"dblclick",handleDblClickScroll);aa[ba]=divs[i];ba++;}
else if(divs[i].className=="custom-scroll"){addEventScroll(divs[i],"mouseover",handleMouseOverScroll);divs[i].style.overflow="hidden";}}
for(i=0;i<aa.length;i++){findHeights(aa[i]);}}
function addEventScroll(ca,da,ea){if(typeof(ca)=="object"){if(ca.addEventListener)ca.addEventListener(da,ea,false);else if(ca.attachEvent)ca.attachEvent("on"+da,ea);}
else{return;}}
function removeEventScroll(fa,ga,ha){if(typeof(fa)=="object"){if(fa.removeEventListener)fa.removeEventListener(ga,ha,false);else if(fa.detachEvent)fa.detachEvent("on"+ga,ha);}
else{return;}}
function findHeights(el){wrapperHeight=el.parentNode.parentNode.offsetHeight;divs=el.getElementsByTagName("div");trackHeight=el.offsetHeight-2*scrollBarVIndent-38;if(trackHeight<0)trackHeight=0;for(i=0;i<el.parentNode.parentNode.childNodes.length;i++){if(el.parentNode.parentNode.childNodes[i].className=="content"){contentHeight=el.parentNode.parentNode.childNodes[i].offsetHeight;}}
if(contentHeight>0){ratio=wrapperHeight/contentHeight;if(ratio>1){for(i=0;i<el.parentNode.parentNode.childNodes.length;i++){if(el.parentNode.parentNode.childNodes[i].className=="scroller"){el.parentNode.parentNode.childNodes[i].style.display="none";}}}}
else{ratio=1;}
for(i=0;i<divs.length;i++){if(divs[i].className=="slider-inner"){divs[i].style.height=Math.round(trackHeight*ratio)+"px";scrollbarHeight=trackHeight*ratio;}}}
function handleMouseDownScroll(e){if(!e)var e=window.event;var ia=e.target||e.srcElement;switch(ia.className){case "bar":clickBar(e);break;case "slider-inner":clickSlider(e);break;case "up-arrow":clickArrow(e,"up");break;case "down-arrow":clickArrow(e,"down");break;default:clickBar(e);}}
function handleMouseMoveScroll(e){if(!e)var e=window.event;var ja=e.target||e.srcElement;switch(ja.className){case "slider-inner":moveSlider(e);break;}}
function handleMouseUpScroll(e){if(!e)var e=window.event;var ka=e.target||e.srcElement;switch(ka.className){case "bar":offBar(e);break;case "slider-inner":stopSlider(e);break;case "up-arrow":offArrow(e,"up");break;case "down-arrow":offArrow(e,"down");break;default:stopSlider(e);}}
function handleMouseOverScroll(e){if(!e)var e=window.event;retrieveWrapperInfo(e);}
function handleDblClickScroll(e){if(!e)var e=window.event;var la=e.target||e.srcElement;switch(la.className){case "up-arrow":dblClickArrow(e,"up");break;case "down-arrow":dblClickArrow(e,"down");break;}}
function handleMouseScrollScroll(e){if(!e)var e=window.event;scrollWrapper(e);}
function clickBar(e){if(!e)var e=window.event;var ma=e.target||e.srcElement;if(IE){tempY=event.clientY+document.body.scrollTop;}
else{tempY=e.pageY;}
if(tempY<0){tempY=0;}
if(ma.className=="bar"){for(i=0;i<ma.childNodes.length;i++){if(ma.childNodes[i].className=="slider"){ma.childNodes[i].id="scroller-active";}}
for(i=0;i<ma.parentNode.parentNode.childNodes.length;i++){if(ma.parentNode.parentNode.childNodes[i].className=="content"){ma.parentNode.parentNode.childNodes[i].id="content-active";}}
if(tempY<currentScrollbarY){newTopScroll=tempY;}
else{newTopScroll=tempY-scrollbarHeight-7;}
if(newTopScroll<scrollBarTop){newTopScroll=scrollBarTop;}
else if(newTopScroll>(trackHeight-scrollbarHeight+scrollBarTop)){newTopScroll=(trackHeight-scrollbarHeight+scrollBarTop);}
document.getElementById("scroller-active").style.top=newTopScroll+'px';document.getElementById("content-active").style.marginTop=(newTopScroll-scrollBarTop)*(-1*(contentHeight-wrapperHeight)/(trackHeight-scrollbarHeight))+"px";currentContentY=(newTopScroll-scrollBarTop)*(-1*(contentHeight-wrapperHeight)/(trackHeight-scrollbarHeight));currentScrollbarY=newTopScroll;if(document.getElementById("scroller-active")){document.getElementById("scroller-active").id="";}
if(document.getElementById("content-active")){document.getElementById("content-active").id="";}}}
function offBar(e){}
function clickSlider(e){if(!e)var e=window.event;var na=e.target||e.srcElement;doTracking=true;document.body.onselectstart=function(){return false;};document.body.unselectable="on";document.body.style.MozUserSelect="none";document.body.style.cursor="default";}
function moveSlider(e){if(!e)var e=window.event;var oa=e.target||e.srcElement;if(doTracking){if(IE){tempY=event.clientY+document.body.scrollTop;}
else{tempY=e.pageY;}
if(tempY<0){tempY=0;}
if(initialTime){prevY=tempY;oa.parentNode.id="scroller-active";for(i=0;i<oa.parentNode.parentNode.parentNode.parentNode.childNodes.length;i++){if(oa.parentNode.parentNode.parentNode.parentNode.childNodes[i].className=="content"){oa.parentNode.parentNode.parentNode.parentNode.childNodes[i].id="content-active";}}}
moveByY=tempY-prevY;newTopScroll=currentScrollbarY+moveByY;if(newTopScroll<scrollBarTop){newTopScroll=scrollBarTop;}
else if(newTopScroll>(trackHeight-scrollbarHeight+scrollBarTop)){newTopScroll=(trackHeight-scrollbarHeight+scrollBarTop);}
if(moveByY!=0){document.getElementById("scroller-active").style.top=newTopScroll+'px';document.getElementById("content-active").style.marginTop=(newTopScroll-scrollBarTop)*(-1*(contentHeight-wrapperHeight)/(trackHeight-scrollbarHeight))+"px";}
initialTime=false;sliding=true;return true;}
/*return false;*/}
function stopSlider(e){document.body.onselectstart=function(){return true;};document.body.unselectable="off";document.body.style.MozUserSelect="";document.body.style.cursor="auto";if(!e)var e=window.event;var pa=e.target||e.srcElement;prevY=0;doTracking=false;initialTime=true;if(pa.className!="up-arrow"&&pa.className!="down-arrow"&&sliding){currentContentY=(newTopScroll-scrollBarTop)*(-1*(contentHeight-wrapperHeight)/(trackHeight-scrollbarHeight));currentScrollbarY=newTopScroll;sliding=false;}
if(document.getElementById("scroller-active")){document.getElementById("scroller-active").id="";}
if(document.getElementById("content-active")){document.getElementById("content-active").id="";}}
function clickArrow(e,qa){if(!e){var e=window.event;var ra=e.srcElement;}
else{if(e.target||e.srcElement){var ra=e.target||e.srcElement;}
else{var ra=e;}}
clearTimeout(timeout);activeEl=ra;findHeights(ra.parentNode);if(qa=="up"){currentContentY=parseInt(currentContentY)+10;currentScrollbarY=-1*currentContentY*((trackHeight-scrollbarHeight)/(contentHeight-wrapperHeight))+scrollBarTop;if(currentContentY>0){currentContentY=0;currentScrollbarY=scrollBarTop;}}
else{currentContentY=parseInt(currentContentY)-10;currentScrollbarY=-1*currentContentY*((trackHeight-scrollbarHeight)/(contentHeight-wrapperHeight))+scrollBarTop;if(currentContentY<(wrapperHeight-contentHeight)){currentContentY=(wrapperHeight-contentHeight);currentScrollbarY=trackHeight-scrollbarHeight+scrollBarTop;}}
divs=ra.parentNode.parentNode.parentNode.getElementsByTagName("div");for(i=0;i<divs.length;i++){if(divs[i].className=="content"){divs[i].style.marginTop=currentContentY+"px";}
if(divs[i].className=="slider"){divs[i].style.top=currentScrollbarY+"px";}}
if(qa=="up"){timeout=setTimeout("clickArrow(activeEl,'up')",120);}
else{timeout=setTimeout("clickArrow(activeEl,'down')",120);}}
function offArrow(e,sa){clearTimeout(timeout);}
function dblClickArrow(e,ta){if(!e){var e=window.event;var ua=e.srcElement;}
else{if(e.target||e.srcElement){var ua=e.target||e.srcElement;}
else{var ua=e;}}
clearTimeout(timeout);activeEl=ua;findHeights(ua.parentNode);if(IE){if(ta=="up"){currentContentY=parseInt(currentContentY)+10;currentScrollbarY=-1*currentContentY*((trackHeight-scrollbarHeight)/(contentHeight-wrapperHeight))+scrollBarTop;if(currentContentY>0){currentContentY=0;currentScrollbarY=scrollBarTop;}}
else{currentContentY=parseInt(currentContentY)-10;currentScrollbarY=-1*currentContentY*((trackHeight-scrollbarHeight)/(contentHeight-wrapperHeight))+scrollBarTop;if(currentContentY<(wrapperHeight-contentHeight)){currentContentY=(wrapperHeight-contentHeight);currentScrollbarY=trackHeight-scrollbarHeight+scrollBarTop;}}
divs=ua.parentNode.parentNode.parentNode.getElementsByTagName("div");for(i=0;i<divs.length;i++){if(divs[i].className=="content"){divs[i].style.marginTop=currentContentY+"px";}
if(divs[i].className=="slider"){divs[i].style.top=currentScrollbarY+"px";}}}}
function scrollWrapper(e){if(!e)var e=window.event;var va=e.target||e.srcElement;var wa;if(e.wheelDelta){delta+=e.wheelDelta/120;if(window.opera)delta=-delta;}
else if(e.detail){delta+=-1*(e.detail/3);}
if(e.preventDefault)e.preventDefault();e.returnValue=false;if(delta>oldDelta)wa="up";else wa="down";oldDelta=delta;var xa="";for(i=0;i<10;i++){eval('if(va'+xa+'){ if(va'+xa+'.className != "custom-scroll"){ xa += ".parentNode"; } else { va = va'+xa+'; divs = va.getElementsByTagName("div"); for(j=0;j<divs.length;j++){ if(divs[j].className == "bar") va = divs[j]; } } }');}
findHeights(va);if(wa=="up"){currentContentY=parseInt(currentContentY)+10;currentScrollbarY=-1*currentContentY*((trackHeight-scrollbarHeight)/(contentHeight-wrapperHeight))+scrollBarTop;if(currentContentY>0){currentContentY=0;currentScrollbarY=scrollBarTop;}}
else if(wa=="down"){currentContentY=parseInt(currentContentY)-10;currentScrollbarY=-1*currentContentY*((trackHeight-scrollbarHeight)/(contentHeight-wrapperHeight))+scrollBarTop;if(currentContentY<(wrapperHeight-contentHeight)){currentContentY=(wrapperHeight-contentHeight);currentScrollbarY=trackHeight-scrollbarHeight+scrollBarTop;}}
divs=va.parentNode.parentNode.getElementsByTagName("div");for(i=0;i<divs.length;i++){if(divs[i].className=="content"){divs[i].style.marginTop=currentContentY+"px";}
if(divs[i].className=="slider"){divs[i].style.top=currentScrollbarY+"px";}}}
function retrieveWrapperInfo(e){if(!e)var e=window.event;var ya=e.target||e.srcElement;var za;if(ya.className=="scroller"){retDivs=ya.parentNode.getElementsByTagName("div");}
else if(ya.className=="scroller-top"||ya.className=="bar"||ya.className=="scroller-bottom"){retDivs=ya.parentNode.parentNode.getElementsByTagName("div");}
else if(ya.className=="top-grey"||ya.className=="slider"||ya.className=="bottom-grey"||ya.className=="up-arrow"||ya.className=="down-arrow"){retDivs=ya.parentNode.parentNode.parentNode.getElementsByTagName("div");}
else if(ya.className=="slider-inner"){retDivs=ya.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("div");}
else if(ya.className=="top-blue"||ya.className=="bottom-blue"){retDivs=ya.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("div");}
else{retDivs=ya.getElementsByTagName("div");}
for(i=0;i<retDivs.length;i++){if(retDivs[i].className=="bar"){findHeights(retDivs[i]);}
else if(retDivs[i].className=="slider"){if(retDivs[i].currentStyle){currentScrollbarY=parseFloat(retDivs[i].currentStyle.top);}
else{za=getComputedStyle(retDivs[i],'');currentScrollbarY=parseFloat(za.getPropertyCSSValue("top"));}}
else if(retDivs[i].className=="content"){if(retDivs[i].currentStyle){currentContentY=parseFloat(retDivs[i].currentStyle.marginTop);}
else{za=getComputedStyle(retDivs[i],'');currentContentY=parseFloat(za.getPropertyCSSValue("margin-top").getFloatValue(CSSPrimitiveValue.CSS_PT));}}}}
addEventScroll(window,"load",initScroll);