/*
	DOMnews 1.0 
	homepage: http://www.onlinetools.org/tools/domnews/
	released 11.07.05

	2006-06-22: heavily modified by Rob Eberhardt; now autodetects dimensions, encapsulates vars, & allows pausing before scrolling
*/


function dn_props(){

	/* Variables, go nuts changing those! */

	// ID of the news box
	this.newsID= 'news';
	// ID of the block contained by the news box
	this.newsScrollID= 'newsScroll';

	this.classAdd= 'hasJS';			// class to add when JS is available
	this.stopMessage= '';	//  Message to stop scroller
	this.paraID= 'DOMNewsStopper';	 //ID of the generated paragraph

	this.startpos=0;	// initial position		//<-- TODO: make this work right when >0

	this.speed= 30;	// Speed of scroller; higher number = slower scroller 
	this.startDelay= 500;	// delay before starting scrolling

	this.newp_cssText = 'text-align:right; margin:0 1ex;';
	this.newa_cssText = 'color:#999; font-size:90%;';

	
	// Safari KHTML mis-reports itself as Netscape, Mozilla, and Gecko, but still says Vendor is apple
	this.isMoz = navigator.product=='Gecko' && navigator.vendor=='';	
	//alert(this.isMoz);
}

	
	
	/* Initialise scroller when window loads */
//	window.onload=function(){
//	function initScroller()	{
//		initDOMnews();
		// add more functions as needed
//	}
	/* stop scroller when window is closed */
/*	window.onunload=function()	{
		if(!dn_interval){return}
		clearInterval(dn_interval);
	}
*/
/*
	This is the functional bit, do not press any buttons or flick any switches
	without knowing what you are doing!
*/


/* Initialise scroller */
function initDOMnews()	{
	if(!document.getElementById || !document.createTextNode){return;}	// check for DOM

	//if(!dnProps dn_bScrollStarted==undefined){dn_bScrollStarted=true}else{return}

	try{
		var test = dnProps;
	}catch(e){
		dnProps = new dn_props;	// global property bag for scroller configuration 
	}
	if(test!=undefined){return} // already initialized, don't double up

	
	
/*
	try{
		var test = dnProps;
	}catch(e){}
	if(test!=undefined){return} // already initialized, don't double up
*/


	dnProps = new dn_props;	// global property bag for scroller configuration 
	initDNScroll();
}



function initDNScroll(){
	dnProps.oNews = document.getElementById(dnProps.newsID);	// outer News container
	dnProps.oNewsScroll = document.getElementById(dnProps.newsScrollID);	// inner News container
	if(!dnProps.oNews){return;}

	dnProps.scrollpos = dnProps.startpos;		// current position 
	dnProps.padding = dnProps.oNews.offsetHeight;	// padding for restarting from bottom
	dnProps.endpos = -dnProps.oNewsScroll.offsetHeight;	// end position
	
	dnProps.oNewsScroll.style.top = dnProps.startpos + 'px';
	dnProps.oNews.className =	dnProps.classAdd;
	var newp = document.createElement('p');
	newp.setAttribute('id', dnProps.paraID);
	var newa = document.createElement('a');
	newa.href = '#';
	newa.onclick = stopDOMnews;
	newa.appendChild(document.createTextNode(dnProps.stopMessage));
	newp.appendChild(newa);
	dnProps.oNews.parentNode.insertBefore(newp, dnProps.oNews.nextSibling);
	dnProps.oNews.onmouseover = function(){clearInterval(dnProps.interval);}
	dnProps.oNews.onmouseout = startScrollCycle;
	setTimeout(startScrollCycle, dnProps.startDelay);	// delay first startup by startDelay
}


function startScrollCycle(){
	if(dnProps.interval){	clearInterval(dnProps.interval);	}	// stop double-stop from mouseover during startdelay
	dnProps.interval = setInterval(scrollDOMnews, dnProps.speed);
}


function stopDOMnews()	{
	clearInterval(dnProps.interval);
	dnProps.oNews.className='';
	dnProps.oNews.parentNode.removeChild(dnProps.oNews.nextSibling);
	return false;
}


function scrollDOMnews(){
	dnProps.scrollpos = dnProps.scrollpos -1;
	dnProps.oNewsScroll.style.top = dnProps.scrollpos +'px';

	// Gecko (Netscape, Mozilla, Firefox, etc) jumps on seamless scroll, so need to do seamed scroll
	if(dnProps.isMoz){
		if(dnProps.scrollpos <= dnProps.endpos +30){	// reset		//<-- HACK: magic number
			dnProps.scrollpos= dnProps.startpos +dnProps.padding -25;
		}

	}else{ // seamless scroll for the rest

		// get first child
		var oTopItem = dnProps.oNewsScroll.childNodes[0];
		if(oTopItem.nodeType != 1 || oTopItem.offsetHeight==undefined){
			dnProps.oNewsScroll.appendChild(oTopItem);	// transplant from top to bottom
			return;
		}

		var iTopItem_BottomX = dnProps.oNewsScroll.offsetTop + oTopItem.offsetHeight;
		if(iTopItem_BottomX > 0){	// top item is visible
			
		}else{ // remove item
			dnProps.scrollpos = dnProps.scrollpos + parseInt(oTopItem.offsetHeight);
			dnProps.oNewsScroll.style.top = dnProps.scrollpos +'px';
			dnProps.oNewsScroll.appendChild(oTopItem);	// transplant from top to bottom
		}
		
	}

	
}
