// scrolling.js
// Used for various JavaScript scrolling on a page
// Originally from www.ScriptAsylum.com , but modified substanitially by msaxton.

// ******** VARIABLES ********

// GENERAL SCROLLING VARIABLES
var usingFirefox = false;                    // if the browser is Firefox
var newsScrolling = false;                   // if the news messages are currently scrolling - NOT USED


// TICKER VARIABLES
var totalTickerMessages;
var maxTickerMessages = 50;
var tickerMessageSpacing = 5;
var tickerTrainEnd = 0;

var tickerBoxHeight = 20;                  // height of the ticker in pixels
var tickerBoxWidth = 696;                  // width of the ticker in pixels
var tickerBoxColor = "#eaeaea";            // background color of the ticker (not used in this script)
var tickerRef;
var tickerOuter;
var tickerMessages = new Array();
var tickerMessageLength = new Array();
var tickerMessageName = 'marqueeMessage';


// TICKER MOVEMENT
var viewTickerMessageLength = 2000;       // length of time a ticker message is displayed
var changeTickerMessage;                   // timer to tell when to change ticker messages

var tickerInterval;      // the currency ticker will step at each tickerInterval.  the ticker will step once every tickerInterval inervals (see below)
var tickerSpeed = 80;    // lower is faster (interval length for when to do the next step, from 1-10 all seem to be the same)
var tickerPixelStep = 1;

var tickerPaused = 0;                     


// ******** FUNCTIONS ********

// GENERAL SCROLLING FUNCTIONS
function initScrolling() {
	
	//2009 09 23 terrible new requirements. we have to get multiple p tags out of some temporary places and then construct the marquee message divs. because of sitepilot.
	$('#marqueeParseBox p').each(function(){
		$('#marqueeOuter').append('<div id="marqueeMessage" style="visibility:hidden; left:2px; top:2px; height:18px; cursor:default; white-space: nowrap;"><p>' + $(this).html() + '</p></div>')
	});
	
	//alert('aborting the rest');
	//return null;
	
	// initialize the ticker
	initTicker();

	// start a timer to change ticker (but only if there is more than 1 message to scroll)
	if (tickerMessages.length > 1) {
		changeTickerMessage = setTimeout( 'nextTickerMessage()', viewTickerMessageLength );
	}

}

window.onresize=function(){
	//alert('WINDOW was resized');
	tickerOuter.style.left = getPageLeft( tickerRef ) + 'px';
	tickerOuter.style.top = getPageTop( tickerRef ) + 'px';
	//newsOuter.style.left=getPageLeft(newsRef)+'px';
	//newsOuter.style.top=getPageTop(newsRef)+'px';
}

		
function getElWidth( el ) {
	//alert( 'el.offsetWidth:' + el.offsetWidth + ', el.clientWidth:' + el.clientWidth + ', el.style.Width:' + el.style.Width );
	return parseInt(el.offsetWidth);
}

function getElHeight( el ) {
	//alert( 'el.offsetHeight:' + el.offsetHeight + ', el.clientHeight:' + el.clientHeight + ', el.style.Height:' + el.style.Height );
	return parseInt(el.offsetHeight);
}

function getPageLeft(el){
	var x = 0;
	if (!el)
{ return x;}
else
{ 
	while(el.offsetParent!=null){
		//alert( 'getPageLeft-->el.offsetLeft:' + el.offsetLeft ); 
		x+=el.offsetLeft;
		el=el.offsetParent;
	}
	x+=el.offsetLeft;
	//alert( 'getPageLeft-->final_X:' + x );
	return x;
}

}


function getPageTop(el){
	var y=0;
	while(el.offsetParent!=null){
		//alert( 'getPageTop-->el.offsetTop:' + el.offsetTop );
		y+=el.offsetTop;
		el=el.offsetParent;
	}
	y+=el.offsetTop;
	//alert( 'getPageTop-->final_Y:' + y );
	return y;
}

function renameObjects( messageName, maxMessages ) {
	// All message objects start off with the same name, so we go through and rename them incrementally, starting at 0
	var currentMessageObj;             // the current message object to be renamed
	var totalMessages = 0;             // a rolling number of messages found
	var foundAllMessages = false;      // determine when all the messages have been renamed
	var safeGaurd = 0;                 // just a safe gaurd to make sure we don't get stuck in an endless loop

	while( !foundAllMessages ) {   // loop until we've found all the messages
		//alert('Looking for ' + messageName + totalMessages );
		if( currentMessageObj = document.getElementById( messageName ) ) {
			currentMessageObj.id = messageName + totalMessages;
			//alert('Renamed: ' + currentMessageObj.id );
			totalMessages++;
		} else {
			foundAllMessages = true;
			//alert('All \'' + messageName + '\' messages are found');
		}
		safeGaurd++;
		// don't want to get stuck in an endless loop, so if we're still finding stuff when we hit the max, somethings gone wrong-o. Bail
		if( safeGaurd > maxMessages ) foundAllMessages = true;
	}
	return totalMessages;  // return the total number of messages found
}


// TICKER FUNCTIONS
function initTicker() {
	tickerRef = document.getElementById( 'marqueeRef' );
	tickerOuter = document.getElementById( 'marqueeOuter' );
	totalTickerMessages = renameObjects( tickerMessageName, maxTickerMessages );
	for( var i = 0; i < totalTickerMessages; i++ ) {
		tickerMessages[i] = document.getElementById( tickerMessageName + i );					
		tickerMessages[i].style.position = 'absolute';
		tickerMessages[i].style.overflow = 'hidden';
		tickerMessageLength[i] = getElHeight( tickerMessages[i] );
		//set inital postions for all items
		tickerMessages[i].style.top = tickerTrainEnd + 'px';
		tickerTrainEnd += ( tickerMessageLength[i] + tickerMessageSpacing );
		tickerMessages[i].style.clip = 'rect( 0px, ' + ( tickerBoxWidth ) + 'px, ' + ( tickerBoxHeight ) + 'px, 0px )';
		tickerMessages[i].style.visibility = 'visible';
	}
	tickerOuter.style.width = tickerBoxWidth;
	//tickerOuter.style.left = getPageLeft( tickerRef )+'px';
	//tickerOuter.style.top = getPageTop( tickerRef )+'px';
	tickerOuter.style.left = '10px';
	tickerOuter.style.top = '0px';
	tickerOuter.style.visibility = "visible";
	
	//alert('initd');
}

function pauseTicker() {
	tickerPaused = 1;
}
function resumeTicker() {
	tickerPaused = 0;
}


// TICKER MOVEMENT
function nextTickerMessage() {
	
	// start the ticker interval
	tickerInterval = setInterval( 'scrollTicker()', tickerSpeed );
	
}

function scrollTicker() {
	
	var finishedScrolling = 0;
	if( !tickerPaused ) {   // check if the ticker is paused  (this ticker should never be paused)
		tickerTrainEnd -= tickerPixelStep;
		for( var i = 0; i < totalTickerMessages; i++ ) {
			tickerMessages[i].style.top = ( parseInt( tickerMessages[i].style.top ) - tickerPixelStep ) + 'px';
			if( parseInt( tickerMessages[i].style.top ) <= ( 0 - (tickerMessageLength[i]+tickerMessageSpacing) ) ) {						
				// make sure a message always starts from the edge of the scrolling area
//				alert('message ' + i + ' top is at: ' + tickerMessages[i].style.top + ' height of that message is ' + tickerMessageLength[i]);
//				if( tickerTrainEnd < tickerBoxHeight ) { 
//					alert('its a trap since ' + tickerTrainEnd + ' is less than ' + tickerBoxHeight);
//					tickerTrainEnd = tickerBoxHeight;
//					//tickerTrainEnd = tickerMessageLength[i];
//				}
				tickerMessages[i].style.top = tickerTrainEnd + 'px';
				//alert('just set top of msg number ' + i + ' to ' + tickerTrainEnd);
				tickerTrainEnd += ( tickerMessageLength[i] + tickerMessageSpacing );
				finishedScrolling = 1;
			}					
		}
		if( finishedScrolling ) {
			clearInterval( tickerInterval );
			// reset timer to change ticker
			changeTickerMessage = setTimeout( 'nextTickerMessage()', viewTickerMessageLength );
		}
	}

}

//// OLDER VERSION OF THIS STUFF THAT DID HORIZONTAL (that i dont feel like messing with) INCLUDED BELOW.
//// scrolling.js
//// Used for various JavaScript scrolling on a page
//// Originally from www.ScriptAsylum.com , but modified substanitially by Mike Saxton.  (and quite nicey I must add)
//
//// ******** VARIABLES ********
//
//// GENERAL SCROLLING VARIABLES
//var usingFirefox = false;                    // if the browser is Firefox
//var newsScrolling = false;                   // if the news messages are currently scrolling
//
//// VERTICAL NEWS SCROLLER VARIABLES
//var newsSpeed = 20;                          // length of time between scrolling intervals (except on Firefox)
//var newsPixelStep = 1;                       // distnace each news messages is moved on each scrolling interval (except Firfox)
//var firefoxNewsSpeed = 2;                    // length of time between scrolling intervals, on Firefox
//var firefoxNewsPixelStep = 4;                // distnace each news messages is moved on each scrolling interval, on Firefox
//
//// MARQUEE VARIABLES
//var totalMarqueeMessages;
//var maxMarqueeMessages = 50;
//var messageSpacing = 10;
//var marqueeTrainEnd = messageSpacing;
//var marqueeInterval;
//var marqueeSpeed=10;                      
//var marqueePixelStep=1;
//
//var marqueeBoxHeight=20;                  // height of the marquee in pixels
//var marqueeBoxWidth=730;                  // width of the marquee in pixels
//var marqueeBoxColor="#FFFFFF";            // background color of the marquee (not used in this script)
//var marqueeRef;
//var marqueeOuter;
//var marqueeMessages = new Array();
//var marqueeMessageLength = new Array();
//var marqueeMessageName = 'marqueeMessage';
//
//// ******** FUNCTIONS ********
//
//// GENERAL SCROLLING FUNCTIONS
//
//function initScrolling() {
//	// initialize the events marquee
//	initMarquee();
//		
//	//adjust if we are using Mozilla Firefox, since when both scrollers are scrolling, it lags.
//	var agt = navigator.userAgent.toLowerCase();
//	if( agt.indexOf( "firefox" ) != -1 ) {
//		//alert('Firefox detected');
//		newsSpeed = firefoxNewsSpeed;
//		newsPixelStep = firefoxNewsPixelStep;
//		usingFirefox = true;
//	}	
//
//	window.onresize=function(){
//		//alert('WINDOW was resized');
//		marqueeOuter.style.left=getPageLeft(marqueeRef)+'px';
//		marqueeOuter.style.top=getPageTop(marqueeRef)+'px';
//	};
//
//}
//
//			
//function getElWidth( el ) {
//	//alert( 'el.offsetWidth:' + el.offsetWidth + ', el.clientWidth:' + el.clientWidth + ', el.style.Width:' + el.style.Width );
//	return parseInt(el.offsetWidth);
//}
//
//function getPageLeft(el){
//	var x = 0;
//	while(el.offsetParent!=null){
//		//alert( 'getPageLeft-->el.offsetLeft:' + el.offsetLeft ); 
//		x+=el.offsetLeft;
//		el=el.offsetParent;
//	}
//	x+=el.offsetLeft;
//	//alert( 'getPageLeft-->final_X:' + x );
//	return x;
//}
//
//function getPageTop(el){
//	var y=0;
//	while(el.offsetParent!=null){
//		//alert( 'getPageTop-->el.offsetTop:' + el.offsetTop );
//		y+=el.offsetTop;
//		el=el.offsetParent;
//	}
//	y+=el.offsetTop;
//	//alert( 'getPageTop-->final_Y:' + y );
//	return y;
//}
//
//function renameObjects( messageName, maxMessages ) {
//	// All message objects start off with the same name, so we go through and rename them incrementally, starting at 0
//	var currentMessageObj;             // the current message object to be renamed
//	var totalMessages = 0;             // a rolling number of messages found
//	var foundAllMessages = false;      // determine when all the messages have been renamed
//	var safeGaurd = 0;                 // just a safe gaurd to make sure we don't get stuck in an endless loop
//
//	while( !foundAllMessages ) {   // loop until we've found all the messages
//		//alert('Looking for ' + messageName + totalMessages );
//		if( currentMessageObj = document.getElementById( messageName ) ) {
//			currentMessageObj.id = messageName + totalMessages;
//			//alert('Renamed: ' + currentMessageObj.id );
//			totalMessages++;
//		} else {
//			foundAllMessages = true;
//			//alert('All \'' + messageName + '\' messages are found');
//		}
//		safeGaurd++;
//		// don't want to get stuck in an endless loop, so if we're still finding stuff when we hit the max, somethings gone wrong-o. Bail
//		if( safeGaurd > maxMessages ) foundAllMessages = true;
//	}
//	return totalMessages;  // return the total number of messages found
//}
//
//// MARQUEE FUNCTIONS
//function initMarquee() {
//	marqueeRef = document.getElementById('marqueeRef');
//	marqueeOuter = document.getElementById('marqueeOuter');
//	totalMarqueeMessages = renameObjects( marqueeMessageName, maxMarqueeMessages );
//	
//	for( var i = 0; i < totalMarqueeMessages; i++ ) {
//		marqueeMessages[i] = document.getElementById( marqueeMessageName + i );					
//		marqueeMessages[i].style.position = 'absolute';
//		marqueeMessages[i].style.overflow = 'hidden';
//		marqueeMessageLength[i] = getElWidth( marqueeMessages[i] );
//		//set inital postions for all items
//		marqueeMessages[i].style.left = marqueeTrainEnd + 'px';
//		marqueeTrainEnd += ( marqueeMessageLength[i] + messageSpacing - 4 );  // minus 4 bacuse the MessageLength has 4 pixels of padding
//		marqueeMessages[i].style.clip='rect(0px, '+(marqueeMessageLength[i])+'px, '+(marqueeBoxHeight-2)+'px, 0px)';
//		marqueeMessages[i].style.visibility = 'visible';
//	}
//	marqueeOuter.style.width=marqueeBoxWidth;
//	marqueeOuter.style.left=getPageLeft(marqueeRef)+'px';
//	marqueeOuter.style.top=getPageTop(marqueeRef)+'px';
//	marqueeOuter.style.visibility="visible";
//	marqueeInterval = setInterval('scrollMarquee()',marqueeSpeed);
//}
//
//function scrollMarquee(){
//	if( !newsScrolling ) {
//		marqueeTrainEnd -= marqueePixelStep;
//		for( var i = 0; i < totalMarqueeMessages; i++ ) {
//			marqueeMessages[i].style.left = (parseInt(marqueeMessages[i].style.left) - marqueePixelStep)+'px';
//			if( parseInt( marqueeMessages[i].style.left ) < ( 2 - marqueeMessageLength[i] ) ) {						
//				if( marqueeTrainEnd < marqueeBoxWidth ) marqueeTrainEnd = marqueeBoxWidth;
//				marqueeMessages[i].style.left = marqueeTrainEnd + 'px';
//				marqueeTrainEnd += ( marqueeMessageLength[i] + messageSpacing );
//			}					
//		}
//	}
//}
//
//function pauseMarquee() {
//	clearInterval( marqueeInterval );
//}
//
//function resumeMarquee() {
//	marqueeInterval = setInterval('scrollMarquee()',marqueeSpeed);
//}
//
//
//
//
//
//
