// 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 - NOT USED

// MARQUEE VARIABLES
var totalMarqueeMessages;
var maxMarqueeMessages = 50;
var marqueeMessageSpacing = 25;
var marqueeTrainEnd = marqueeMessageSpacing;

var marqueeBoxHeight = 14;                  // height of the marquee in pixels
var marqueeBoxWidth = 778;                  // width of the marquee in pixels
var marqueeBoxColor = "#cfcfcf";            // background color of the marquee (not used in this script)
var marqueeRef;
var marqueeOuter;
var marqueeMessages = new Array();
var marqueeMessageLength = new Array();
var marqueeMessageName = 'marqueeMessageHolder';

// MARQUEE MOVEMENT
var marqueeInterval;      // an interval the marquee will step once every marqueeInterval
var marqueeSpeed = 50;    // lower is faster (interval length for when to do the next step, from 1-10 all seem to be the same)
var marqueePixelStep = 1;
var marqueePaused = 0;                     

// SLIDESHOW VARIABLES
var left_totalSlides;                             // total number of slides
var left_slideMessageName = 'left_slideShowSlide';     // id of the <div>'s holding the individual slide content
var right_totalSlides;                             // total number of slides
var right_slideMessageName = 'right_slideShowSlide';     // id of the <div>'s holding the individual slide content
var minTotalSlides;
var currentSlide = 0;                        // number of the current slide being displayed
var maxSlides = 25;                          // max number of slides, used as a safegaurd


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

// GENERAL SCROLLING FUNCTIONS
function initScrolling() {
	
	// initialize the marquee
	initMarquee();
	
	// initialize the features slideshow 
	//initSlideshow();

	// start the marquee interval
	marqueeInterval = setInterval( 'scrollMarquee()', marqueeSpeed );
}

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] + marqueeMessageSpacing );
		marqueeMessages[i].style.clip = 'rect( 0px, ' + ( marqueeMessageLength[i] ) + 'px, ' + ( marqueeBoxHeight ) + ' 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";
}

function pauseMarquee() {
	marqueePaused = 1;
}
function resumeMarquee() {
	marqueePaused = 0;
}


// MARQUEE MOVEMENT
function scrollMarquee() {
	
	if( !marqueePaused ) {   // check if the marquee is paused
		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] + marqueeMessageSpacing );
			}					
		}
	}

}

// SLIDESHOW FUNCTIONS
function initSlideshow() {
	left_totalSlides = renameObjects( left_slideMessageName, maxSlides );     // rename the slides incrementally
	right_totalSlides = renameObjects( right_slideMessageName, maxSlides );     // rename the slides incrementally
	var left_slideObj;	
	var right_slideObj;
	
	// find out the lowest number of slides. if one side doesn't have enough slides then there will be an error when trying to find that slide
	if( left_totalSlides < right_totalSlides ) {
		minTotalSlides = left_totalSlides;
	} else {
		minTotalSlides = right_totalSlides;
	}
	
	//select a random slide
	currentSlide = Math.floor( Math.random() * minTotalSlides );
	//alert("left_totalSlides:" + left_totalSlides + "\nright_totalSlides:" + right_totalSlides + "\nminTotalSlides:" + minTotalSlides + "\ncurrentSlide:" + currentSlide );
	
	//display random slides
	left_slideObj = document.getElementById( left_slideMessageName + currentSlide );
	left_slideObj.style.visibility = 'visible';
	right_slideObj = document.getElementById( right_slideMessageName + currentSlide );
	right_slideObj.style.visibility = 'visible';
	
}

