/*********************************************************************\
|* Pausing up-down scroller- © Dynamic Drive (www.dynamicdrive.com)  *|
|* This notice MUST stay intact for legal use                        *|
|* Visit http://www.dynamicdrive.com/ for this script and 100s more. *|
\*********************************************************************/

// TO POPULATE A SCROLLER:
//   Declare an array and populate it with text strings
/* EXAMPLE:
			var pausecontent=new Array();
			pausecontent[0]='<a href="http://www.javascriptkit.com">JavaScript Kit</a><br />Comprehensive JavaScript tutorials and over 400+ free scripts!';
			pausecontent[1]='<a href="http://www.codingforums.com">Coding Forums</a><br />Web coding and development forums.';
			pausecontent[2]='<a href="http://www.cssdrive.com" target="_new">CSS Drive</a><br />Categorized CSS gallery and examples.';
*/

// TO INSTANTIATE A SCROLLER:
//   var objScroller = new pausescroller(name_of_message_array, CSS_ID, CSS_classname, pause_in_miliseconds);
// EXAMPLE:
//   var myScroller = new pausescroller(pausecontent, "ddScroller", "ddScrollerClass", 3000);


// TO ADD CONTROL BUTTONS TO A SCROLLER:
//   var objButtons = new pausescroller(name_of_scroller, CSS_ID, CSS_classname, html_of_prev_button, html_of_next_button);
// EXAMPLE:
//   var myButtons = new scrollerbuttons(myScroller,"ddScrollButtons","ddScrollerButtonsClass","<img src='/images/btn_prev.gif' />","<img src='/images/btn_next.gif' />");


function scrollerbuttons(scrollerVarname,divId,divClass,btnPrevious,btnPlay,btnPause,btnNext){
	// this.scroller=scroller; //attaches to a scroller
	// this.divId=divId; //CSS ID of the buttons' div
	document.write('<div id="'+divId+'" class="'+divClass+'" style="position:relative;">');
	document.write('<a href="#" onclick="' + scrollerVarname + '.previous();return false;"><img alt="Previous" border="0" src="'+btnPrevious+'" /></a> ');
	document.write('<a href="#" onclick="' + scrollerVarname + '.play();return false;"><img alt="Play" border="0" src="'+btnPlay+'" /></a> ');
	document.write('<a href="#" onclick="' + scrollerVarname + '.pause();return false;"><img alt="Pause" border="0" src="'+btnPause+'" /></a> ');
	document.write('<a href="#" onclick="' + scrollerVarname + '.next();return false;"><img alt="Next" border="0" src="'+btnNext+'" /></a> ');
	document.write('</div>');
}


function pausescroller(content, divId, divClass, delay){
	this.isPaused=false;
	this.timeoutHandle=null;
	this.content=content //message array content
	this.tickerid=divId //ID of ticker div to display information
	this.delay=delay //Delay between msg change, in miliseconds.
	this.mouseoverBol=0 //Boolean to indicate whether mouse is currently over scroller (and pause it if it is)
	this.hiddendivpointer=1 //index of message array for hidden div
	document.write('<div id="'+divId+'" class="'+divClass+'" style="position: relative; overflow: hidden"><div class="innerDiv" style="position: absolute; width: 100%" id="'+divId+'1">'+content[0]+'</div><div class="innerDiv" style="position: absolute; width: 100%; visibility: hidden" id="'+divId+'2">'+content[1]+'</div></div>')
	var scrollerinstance=this
	if (window.addEventListener) {         //run onload in DOM2 browsers
		window.addEventListener("load", function(){scrollerinstance.initialize()}, false);
	}	else if (window.attachEvent) {       //run onload in IE5.5+
		window.attachEvent("onload", function(){scrollerinstance.initialize()});
	}	else if (document.getElementById) {  //if legacy DOM browsers, just start scroller after 0.5 sec
		setTimeout(function(){scrollerinstance.initialize()}, 500);
	}
}

// -------------------------------------------------------------------
// initialize()- Initialize scroller method.
// -Get div objects, set initial positions, start up down animation
// -------------------------------------------------------------------

pausescroller.prototype.initialize=function(){
	this.tickerdiv=document.getElementById(this.tickerid);
	this.visiblediv=document.getElementById(this.tickerid+"1");
	this.hiddendiv=document.getElementById(this.tickerid+"2");
	this.visibledivtop=parseInt(pausescroller.getCSSpadding(this.tickerdiv));
	//set width of inner DIVs to outer DIV's width minus padding (padding assumed to be top padding x 2)
	this.visiblediv.style.width=this.hiddendiv.style.width=this.tickerdiv.offsetWidth-(this.visibledivtop*2)+"px";
	this.getinline(this.visiblediv, this.hiddendiv);
	this.hiddendiv.style.visibility="visible";
	var scrollerinstance=this;
	document.getElementById(this.tickerid).onmouseover=function(){scrollerinstance.mouseoverBol=1}
	document.getElementById(this.tickerid).onmouseout=function(){scrollerinstance.mouseoverBol=0}
	if (window.attachEvent) //Clean up loose references in IE
	window.attachEvent("onunload", function(){scrollerinstance.tickerdiv.onmouseover=scrollerinstance.tickerdiv.onmouseout=null});
	this.timeoutHandle = setTimeout(function(){scrollerinstance.animateup()}, this.delay);
}

// -------------------------------------------------------------------
// pause()- Pause the scroller in response to a button click
// -
// -------------------------------------------------------------------

pausescroller.prototype.pause=function() {
	var scrollerinstance=this;
	clearTimeout(this.timeoutHandle);
}


// -------------------------------------------------------------------
// play()- Resume the scroller in response to a button click
// -
// -------------------------------------------------------------------

pausescroller.prototype.play=function() {
	var scrollerinstance=this;
	scrollerinstance.animateup();
}



// -------------------------------------------------------------------
// next()- Move the pointer so that the scroller displays the next message
// -
// -------------------------------------------------------------------

pausescroller.prototype.next=function() {
	clearTimeout(this.timeoutHandle);
	var i=this.hiddendivpointer;
	var theFloor=0;
	var theCeiling=(this.content.length-1);
	this.hiddendivpointer=(i+1>theCeiling)? theFloor : i+1;
	this.hiddendiv.innerHTML=this.content[this.hiddendivpointer];
	this.getinline(this.hiddendiv, this.visiblediv);
	this.swapdivs();
	this.timeoutHandle = setTimeout(function(){scrollerinstance.setmessage()}, this.delay);
}


// -------------------------------------------------------------------
// previous()- Move the pointer so that the scroller displays the previous message
// -
// -------------------------------------------------------------------

pausescroller.prototype.previous=function() {
	clearTimeout(this.timeoutHandle);
	var i=this.hiddendivpointer;
	var theFloor=0;
	var theCeiling=(this.content.length-1);
	this.hiddendivpointer=(i-1<theFloor)? theCeiling : i-1;
	this.hiddendiv.innerHTML=this.content[this.hiddendivpointer];
	this.getinline(this.hiddendiv, this.visiblediv);
	this.swapdivs();
	this.timeoutHandle = setTimeout(function(){scrollerinstance.setmessage()}, this.delay);
}



// -------------------------------------------------------------------
// animateup()- Move the two inner divs of the scroller up and in sync
// -------------------------------------------------------------------

pausescroller.prototype.animateup=function(){
	var scrollerinstance=this;
	if (parseInt(this.hiddendiv.style.top)>(this.visibledivtop+5)){
		this.visiblediv.style.top=parseInt(this.visiblediv.style.top)-5+"px";
		this.hiddendiv.style.top=parseInt(this.hiddendiv.style.top)-5+"px";
		this.timeoutHandle = setTimeout(function(){scrollerinstance.animateup()}, 30);
	}
	else{
		this.getinline(this.hiddendiv, this.visiblediv);
		this.swapdivs();
		this.timeoutHandle = setTimeout(function(){scrollerinstance.setmessage()}, this.delay);
	}
}

// -------------------------------------------------------------------
// swapdivs()- Swap between which is the visible and which is the hidden div
// -------------------------------------------------------------------

pausescroller.prototype.swapdivs=function(){
	var tempcontainer=this.visiblediv;
	this.visiblediv=this.hiddendiv;
	this.hiddendiv=tempcontainer;
}

pausescroller.prototype.getinline=function(div1, div2){
	div1.style.top=this.visibledivtop+"px";
	div2.style.top=Math.max(div1.parentNode.offsetHeight, div1.offsetHeight)+"px";
}

// -------------------------------------------------------------------
// setmessage()- Populate the hidden div with the next message before it's visible
// -------------------------------------------------------------------

pausescroller.prototype.setmessage=function(){
	var scrollerinstance=this;
	if (this.mouseoverBol==1) //if mouse is currently over scoller, do nothing (pause it)
		setTimeout(function(){scrollerinstance.setmessage()}, 100);
	else{
		var i=this.hiddendivpointer;
		var ceiling=this.content.length;
		this.hiddendivpointer=(i+1>ceiling-1)? 0 : i+1;
		this.hiddendiv.innerHTML=this.content[this.hiddendivpointer];
		this.animateup();
	}
}

pausescroller.getCSSpadding=function(tickerobj){ //get CSS padding value, if any
	if (tickerobj.currentStyle)
		return tickerobj.currentStyle["paddingTop"]
	else if (window.getComputedStyle) //if DOM2
		return window.getComputedStyle(tickerobj, "").getPropertyValue("padding-top")
	else
		return 0
}

