/*

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=20;
	this.maxThmHeight=9999;
	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){
					//alert(s);
					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){
				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};
				document.onselectstart=document.onselect=function(){
					if(activeScr)return false
				};
			
		
	
	
