/*
	Scroller 0.1
	written by Kae Verens (kae@verens.com)
	updates available from http://verens.com/
	please retain this notice
	licensed under FreeBSD license (basically, do what the hell you like with it, but keep this notice)
*/

function scroller_init(){
	var classReg,els,i,j,scroller;
	window.scrollers=[];

	// {{{ get scrollers
	classReg=/(^| )scroller($| )/;
	els=document.getElementsByTagName('div');
	for(i=0;i<els.length;++i)if(classReg.test(els[i].className))window.scrollers.push(els[i]);
	// }}}

	// {{{ set up the scrollbars
	for(i=0;i<window.scrollers.length;++i){
		scroller=window.scrollers[i];
		scroller.style.overflow='hidden';
		scroller.style.position='relative';
		scroller.sOffX=0;
		scroller.sId=i;
		// {{{ set up the slidy bit
		scroller.slideArea=document.createElement('div');
		scroller.slideArea.style.position='absolute';
		scroller.slideArea.style.top=0;
		scroller.slideArea.style.left=0;
		scroller.slideArea.style.width=scroller.offsetWidth+'px';
		scroller.appendChild(scroller.slideArea);
		for(j=scroller.childNodes.length-2;j>-1;--j){
			if('DIV'!=scroller.childNodes[j].tagName){ // not a DIV. remove
				scroller.removeChild(scroller.childNodes[j]);
				continue;
			}
			scroller.slideArea.appendChild(scroller.childNodes[j]); // move all scroller DIVs into sliding area
		}
		for(j=scroller.slideArea.childNodes.length-1;j>-1;--j)scroller.slideArea.appendChild(scroller.slideArea.childNodes[j]); // fix order of objects (line above reverses them!)
		addEvent(scroller.slideArea,'mouseover',function(e){
			var scroller;
			// {{{ make sure we are looking at the right element here
			scroller=e.currentTarget?e.currentTarget:e.fromElement;
			while(!scroller.slideArea && scroller.parentNode)scroller=scroller.parentNode;
			if(!scroller.slideArea)return;
			// }}}
			clearTimeout(scroller.timer);
		});
		addEvent(scroller.slideArea,'mouseout',function(e){
			var scroller;
			// {{{ make sure we are looking at the right element here
			scroller=e.currentTarget?e.currentTarget:e.fromElement;
			while(!scroller.slideArea && scroller.parentNode)scroller=scroller.parentNode;
			if(!scroller.slideArea)return;
			// }}}
			clearTimeout(scroller.timer);
			scroller.timer=setTimeout("window.scrollers["+scroller.sId+"].iterate()",1);
		});
		// }}}
		scroller.iterate=function(){
			var pause;
			this.sOffX-=1;
			pause=50;
			if(this.slideArea.childNodes[1].offsetTop+this.sOffX<1){
				this.slideArea.appendChild(this.slideArea.childNodes[0]);
				this.sOffX=-parseInt(this.slideArea.childNodes[0].offsetTop);
				pause=2000;
			}
			this.slideArea.style.top=this.sOffX+'px';
			this.timer=setTimeout("window.scrollers["+this.sId+"].iterate()",pause);
		}
		scroller.timer=setTimeout("window.scrollers["+i+"].iterate()",1);
	}
	// }}}
}

// addEvent and removeEvent written by John Resig (may he bless us all)
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  } else
    obj.removeEventListener( type, fn, false );
}

