/*

DHTML SCROLLER v4.0 RC (c) 2001-2005 Angus Turnbull, http://www.twinhelix.com
Altering this notice or redistributing this file is prohibited.

*/


var isDOM=document.getElementById?1:0,
 isIE=document.all?1:0,
 isNS4=navigator.appName=='Netscape'&&!isDOM?1:0,
 isIE4=isIE&&!isDOM?1:0,
 isOp=self.opera?1:0,
 isDyn=isDOM||isIE||isNS4;

function getRef(i,p)
{
 p=!p?document:p.navigator?p.document:p;
 return isIE?p.all[i]:
  isDOM?(p.getElementById?p:p.ownerDocument).getElementById(i):
  isNS4?p.layers[i]:null;
};

function getSty(i,p)
{
 var r=getRef(i,p);
 return r?isNS4?r:r.style:null;
};

if(!self.LayerObj)var LayerObj=new Function('i','p',
 'this.ref=getRef(i,p);this.sty=getSty(i,p);return this');
function getLyr(i,p){return new LayerObj(i,p)};

function LyrFn(n,f)
{
 LayerObj.prototype[n]=new Function('var a=arguments,p=a[0],px=isNS4||isOp?0:"px";'+
  'with(this){'+f+'}');
};
LyrFn('x','if(!isNaN(p))sty.left=p+px;else return parseInt(sty.left)');
LyrFn('y','if(!isNaN(p))sty.top=p+px;else return parseInt(sty.top)');
LyrFn('w','if(p)(isNS4?sty.clip:sty).width=p+px;'+
 'else return(isNS4?ref.document.width:ref.offsetWidth)');
LyrFn('h','if(p)(isNS4?sty.clip:sty).height=p+px;'+
 'else return(isNS4?ref.document.height:ref.offsetHeight)');
LyrFn('vis','sty.visibility=p');
LyrFn('clip','if(isNS4)with(sty.clip){left=a[0];top=a[1];right=a[2];bottom=a[3]}'+
 'else sty.clip="rect("+a[1]+"px "+a[2]+"px "+a[3]+"px "+a[0]+"px)" ');

if(!self.page)var page={win:self,minW:0,minH:0,MS:isIE&&!isOp};

page.db=function(p){with(this.win.document)return(isDOM?documentElement[p]:0)||body[p]||0};

page.winW=function(){with(this)return Math.max(minW,MS?db('clientWidth'):win.innerWidth)};
page.winH=function(){with(this)return Math.max(minH,MS?db('clientHeight'):win.innerHeight)};

page.scrollY=function(){with(this)return MS?db('scrollTop'):win.pageYOffset};

page.elmPos=function(e,p)
{
 var x=0,y=0,w=p?p:this.win;
 e=e?(e.substr?(isNS4?w.document.anchors[e]:getRef(e,w)):e):p;
 if(isNS4){if(e&&(e!=p)){x=e.x;y=e.y};if(p){x+=p.pageX;y+=p.pageY}}
 if(e&&this.MS&&navigator.platform.indexOf('Mac')>-1&&e.tagName=='A')
 {
  e.onfocus=new Function('with(event){self.tmpX=clientX-offsetX;'+
   'self.tmpY=clientY-offsetY}');
  e.focus();x=tmpX;y=tmpY;e.blur()
 }
 else while(e){x+=e.offsetLeft;y+=e.offsetTop;e=e.offsetParent}
 return{x:x,y:y};
};

function addProps(obj,data,names,addNull)
{
 for(var i=0;i<names.length;i++)if(i<data.length||addNull)obj[names[i]]=data[i];
};

function ScrDiv()
{
 addProps(this,arguments,['id','x','y','w','h','v','par','lyr'],true);
};

function DHTMLScroller()
{
 var names=['myName','loadingFile','loadedFile','loadedHTML','bookmark',
  'buf','div','bar','thm','loaded','timer','loadFix','noXFrame',
  'divHeight','thmHeight','barHeight','cHeight','cWidth','dragOffset',
  'onbeforeload','onload','onscroll','onsetup','onlayout','onthumbdown','onthumbup'];
 addProps(this,arguments,names,true);

 this.cTop=0;

 this.history=new Array();
 this.histPos=-1;

 this.divs=new Array();

 this.minThmHeight=100;
 this.maxThmHeight=100;

 this.padTop=this.padBot=0;
 this.checkBounds=true;

 this.ySpeed=this.stepsLeft=0;

 this.stick=1;
 this.stickTop=0;

 DHTMLScroller.list[this.myName]=this;
};

DHTMLScroller.list=[];

var activeScr=null;

var DsPt=DHTMLScroller.prototype;

DsPt.load=function(fName){with(this)
{
 if(!fName||fName=='#'||!loaded||!isDyn)return;

 if(fName.match(/^(.*)#(.*)$/))
 {
  var r=RegExp;
  bookmark=r.$2;
  if(!r.$1||r.$1==loadedFile){fileLoaded();return}
  fName=r.$1;
 }
 else bookmark='';

 loadingFile=fName;
 if(onbeforeload)onbeforeload();

 if(fName!=history[histPos])
 {
  histPos++;
  history[histPos]=fName;
  history.length=histPos+1;
 }

 if(isOp&&!document.documentElement){fileLoaded();return}

 if(isIE||isDOM)with(isOp?getRef(myName+'Buf').contentDocument:buf.document)
 {
  if(document.readyState)
  {
   location.href=fName;
   setTimeout(myName+'.checkState()',100);
  }
  else
  {
   write('<html><body onload="setTimeout(\'parent.'+myName+'.swapContent()\',100)">'+
    '<iframe name="nestBuf" src="'+fName+'"></iframe></body></html>');
   close();
   if(!buf.nestBuf)
   {
    buf.location.href=fName;
    setTimeout(myName+'.swapContent()',5000);
   }
  }
 }
 else if(isNS4)
 {
  if(window.ns4LayerLoading)
  {
   setTimeout(myName+'.load("'+fName+'")',100);
   return;
  }
  window.ns4LayerLoading=true;

  div.ref.onload=new Function(myName+'.fileLoaded()');
  div.ref.load(fName,eval(divs[0].w));
 }
 return;
}};

DsPt.checkState=function(){with(this)
{
 var b=isOp?getRef(myName+'Buf').contentDocument:buf.document;
 if(b.location.href!='about:blank'&&b.readyState=='complete')swapContent();
 else setTimeout(myName+'.checkState()',50);
}};

DsPt.swapContent=function(){with(this)
{
 var bufDoc=buf.nestBuf?buf.nestBuf.document:buf.document;
 if(bufDoc&&bufDoc.body)
 {
  loadedHTML=bufDoc.body.innerHTML;
  buf.location.replace('about:blank');
  setTimeout('with('+myName+'){div.ref.innerHTML=loadedHTML;'+
   'setTimeout("'+myName+'.fileLoaded()",100)}',1);
 }
}};

DsPt.fileLoaded=function(){with(this)
{
 activeScr=null;

 if(isNS4)
 {
  window.ns4LayerLoading=false;
  var tags=div.ref.document.links;
  for(var i in tags)
  {
   tags[i].scrOC=tags[i].onclick;
   tags[i].onclick=new Function('return(!(this.scrOC?this.scrOC()==false:0))&&'+
    myName+'.checkURI(this.href)');
  }
 }

 loadedFile=loadingFile;

 var xfr='',DSL=DHTMLScroller.list;
 for(var s in DSL)if(!DSL[s].noXFrame&&DSL[s].loadedFile)xfr+=','+DSL[s].myName+'='+
  DSL[s].loadedFile;
 if(xfr&&isIE&&!noXFrame&&location.search.indexOf('frames(')<0)
  location.hash='frames('+xfr.substring(1)+')';

 layout();

 var newPos=0;
 if(isDOM)bookmark=document.getElementsByName(bookmark)[0];
 if(bookmark)
 {
  newPos=page.elmPos(bookmark,div.ref).y;
  if(newPos)newPos-=page.elmPos(null,div.ref).y;
 }

 scrollTo(newPos);
 if(onload)onload();
}};

DsPt.go=function(dir){with(this)
{
 histPos+=dir;
 if(histPos<0){histPos=0;return}
 if(histPos>=history.length){histPos=history.length-1;return}
 load(history[histPos]);
}};

DsPt.checkURI=function(uri){with(this)
{
 if(uri&&(uri.indexOf(':')<0||uri.match(new RegExp(location.hostname?
  '^(file|http.?):\/\/[^\/]*'+location.hostname:'^file:'))))
 {
  var hashPos=location.href.indexOf('#');
  if(hashPos==-1)hashPos=9999;
  var locPath=location.href.substring(0,hashPos),r=RegExp;
  if(uri.match(/(.*)#(.*)/)&&(!r.$1||locPath==r.$1))
  {
   if(r.$2)load('#'+r.$2);
  }
  else load(uri);
  return false;
 }
 return true;
}};

DsPt.scrollTo=function(pos,isStick){with(this)
{
 if(!isDyn||!loaded)return;

 cTop=pos;

 if(!isStick)stickTop=cTop;

 divHeight=div.h()+padTop+padBot;
 if(divHeight==0)divHeight=1;

 if(checkBounds)
 {
  if(cTop+cHeight>divHeight)cTop=divHeight-cHeight;
  if(cTop<0)cTop=0;
 }

 div.y(0-cTop+padTop);

 thmHeight=Math.ceil(barHeight*(cHeight/divHeight));

 with(Math)thmHeight=min(barHeight,min(maxThmHeight,max(thmHeight,minThmHeight)));

 thm.h(thmHeight);

 if(onscroll)onscroll();

 if(activeScr||isStick)return;

 var fracDivDown=(cTop/(divHeight-cHeight));
 thm.y(bar.y()+fracDivDown*(barHeight-thmHeight));
}};

DsPt.scrollBy=function(amount){with(this)
{
 scrollTo(cTop+amount);
}};

DsPt.setScroll=function(newSpeed,steps){with(this)
{
 if(!loaded)return;

 stepsLeft=steps;

 if(timer)clearInterval(timer);
 timer=setInterval('with('+myName+'){'+
  'if(stepsLeft>0){ySpeed+='+((newSpeed-ySpeed)/steps)+';stepsLeft--}'+
  'else if(parseInt(ySpeed)==0){clearInterval(timer);timer=null}scrollBy(ySpeed)}',50);
}};

DsPt.thumbDown=function(evt){with(this)
{
 var evt=evt?evt:window.event;

 activeScr=this;

 dragOffset=(isNS4?evt.pageY:page.scrollY()+evt.clientY)-thm.y();

 if(onthumbdown)onthumbdown();

 if(timer)clearInterval(timer);
 timer=null;

 return false;
}};

window.scrThumbMove=function(evt)
{
 var evt=evt?evt:window.event;

 if(!activeScr)return true;
 else with(activeScr)
 {
  if((cTop+cHeight>divHeight)||(thmHeight==barHeight))return true;

  var thmTop=(isNS4?evt.pageY:page.scrollY()+evt.clientY)-dragOffset-bar.y();

  if(thmTop<0)thmTop=0;
  if(thmTop+thmHeight>barHeight)thmTop=barHeight-thmHeight;
  thm.y(bar.y()+thmTop);

  stickTop=(divHeight-cHeight)*(thmTop/(barHeight-thmHeight));

  if(stick==1)scrollTo(stickTop);
  else if(!timer)timer=setInterval(myName+'.stickScroll()',40);

  return false;
 }
};

window.scrThumbUp=function(evt)
{
 if(activeScr)with(activeScr)if(onthumbup)onthumbup();

 activeScr=null;
};

DsPt.stickScroll=function(){with(this)
{
 if(Math.abs(cTop-stickTop)>1)
 {
  cTop+=(stickTop-cTop)*stick;
  scrollTo(cTop,true);
 }
 else if(cTop!=stickTop)
 {
  cTop=stickTop;
  scrollTo(cTop,true);
 }
}};

DsPt.barClick=function(evt){with(this)
{
 var evt=evt?evt:window.event;

 clickPos=isNS4?evt.pageY:page.scrollY()+evt.clientY;

 var thmY=page.elmPos(null,thm.ref).y;

 if(clickPos<thmY)scrollBy(0-cHeight);
 if(clickPos>(thmY+thmHeight))scrollBy(cHeight);

 if(isNS4)return document.routeEvent(evt);
}};

DsPt.layout=function(){with(this)
{
 if(!isDyn||!loaded)return;

 barHeight=eval(divs[1].h);
 cWidth=eval(divs[0].w);
 cHeight=eval(divs[0].h);

 divs[0].lyr.clip(0,0,cWidth,cHeight);
 div.vis('inherit');
 div.w(cWidth);

 var isSmall=(div.h()<cHeight);

 for(var i=0;i<divs.length;i++)with(divs[i].lyr)
 {
  x(eval(divs[i].x));w(Math.max(0,eval(divs[i].w)));
  y(eval(divs[i].y));h(Math.max(0,eval(divs[i].h)));
  if(divs[i].v)vis(divs[i].v==1&&isSmall?'hidden':'visible');
 }

 if(onlayout)onlayout();

 scrollBy(0);
}};

DsPt.setup=function(){with(this)
{
 if(!isDyn)return;

 for(var i=0;i<divs.length;i++)with(divs[i])
 {
  par=eval(par);
  lyr=getLyr(id,par);
 }

 div=getLyr(myName+'Inner',isNS4?divs[0].lyr.ref:null);
 bar=divs[1].lyr;
 thm=divs[2].lyr;

 if(!isNS4)buf=eval('window.'+myName+'Buf');

 if(isNS4)
 {
  bar.ref.captureEvents(Event.CLICK);
  thm.ref.captureEvents(Event.MOUSEDOWN);
 }

 bar.ref.onclick=new Function('evt','return '+myName+'.barClick(evt)');
 thm.ref.onmousedown=new Function('evt','return '+myName+'.thumbDown(evt)');

 thm.ref.ondragstart=new Function('return false');

 var fileName='';

 if(location.href.match(/frames\(([^)]+)\)/))
 {
  var files=RegExp.$1.split(',');
  for(var i=0;i<files.length;i++)
   if(files[i].match(/(\w+)\=(.+)/)&&myName==RegExp.$1)fileName=RegExp.$2;
 }

 if(onsetup)onsetup();

 loaded=true;
 if(fileName)load(fileName);
 else if(loadingFile)load(loadingFile);
 else fileLoaded();
}};

var scrOL=window.onload,scrOR=window.onresize,nsWinW=window.innerWidth,nsWinH=window.innerHeight;
document.scrMM=document.onmousemove;
document.scrMU=document.onmouseup;
document.scrOC=document.onclick;

var DSL=DHTMLScroller.list;

window.onload=function()
{
 document.write=new Function();
 if(scrOL)scrOL();
 for(var s in DSL)DSL[s].setup();
};

window.onresize=function()
{
 if(scrOR)scrOR();
 if(isNS4&&(nsWinW!=innerWidth||nsWinH!=innerHeight))location.reload();
 for(var s in DSL)DSL[s].layout();
};

if(isNS4)document.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP|Event.CLICK);

document.onmousemove=function(evt)
{
 var ret=scrThumbMove(evt);
 if(document.scrMM)return document.scrMM(evt)&&ret;
 else return ret?isNS4?document.routeEvent(evt):true:false;
};

document.onmouseup=function(evt)
{
 scrThumbUp(evt);
 return document.scrMU?document.scrMU(evt):(isNS4?document.routeEvent(evt):true);
};

document.onclick=function(evt)
{
 if(!window.justCollapsedMenu)
 {

  evt=evt||window.event;
  var e=evt.target||evt.srcElement,DSL=DHTMLScroller.list,uri='',ret=1;
  if(e.nodeType==3)e=e.parentNode;
  L:while(e)
  {
   for(var s in DSL)
   {
	if(e.tagName=='A')
	{
	 if(!e.target)uri=e.href;
	 if(e.target==DSL[s].myName){ret=DSL[s].checkURI(e.href);break L}
	}
	if(uri&&e==DSL[s].div.ref)ret=DSL[s].checkURI(uri);
   }
   e=e.parentNode||e.parentElement;
  }

  if(!ret){evt.cancelBubble=true;evt.returnValue=false}
  if(document.scrOC)return document.scrOC(evt)&&ret;
  else return ret?isNS4?document.routeEvent(evt):true:false;

 }
 window.justCollapsedMenu=false;
 return false;
};

document.onselectstart=document.onselect=function()
{
 if(activeScr)return false;
};

