// -------------------------------------------------------------------
// gAjax RSS Pausing Scroller- By Dynamic Drive, available at: http://www.dynamicdrive.com
// Created: Aug 2nd, 2007 Updated: n/a
// REQUIRES: gfeedfetcher.js class, available at http://dynamicdrive.com/dynamicindex18/gajaxrssdisplayer.htm
// RE-AUTHORED: Aug 10th, 2011 - Clayton F. - Requires JQuery
// -------------------------------------------------------------------

var gfeedfetcher_loading_image="indicator.gif" //Specify full URL to "loading" image. Overwrites same var from gfeedfetcher.js


function gfeedpausescroller(divid, divClass, delay, linktarget){
	this.tickerid=divid //ID of outermost scroller div
	this.delay=parseInt(delay) //Default delay between msg change, in miliseconds.
	this.mouseoverBol=0 //Boolean to indicate whether mouse is currently over scroller (and pause it if it is)
	document.write('<div id="'+divid+'" class="'+divClass+'" style="position: relative; overflow: hidden">')
	document.write('<div class="innerDiv" id="'+divid+'1"><span style="position: absolute">Initializing RSS scroller...</span></div>')
	gfeedfetcher.call(this, divid+"unneeded", divClass+"unneeded", linktarget) //inherit properties from "gfeedfetcher" class, but feed it bogus ID/Class, as we won't be using the DIV generated by "gfeedfetcher"
	document.write('</div>')
	this.itemcontainer="<div>" //default element wrapping around each RSS entry
	this.feedcontainer.style.display="none" //Hide unneeded div generated after inheriting properties from "gfeedfetcher" class
	this.feedcontainer=document.getElementById(divid+'1') //overwrite inherited "feedcontainer" to reference the first DIV within scroller container
	this.tickerdiv=document.getElementById(divid)
	this.innerdiv=document.getElementById(divid+"1")
	this.timeoutID; //stub for variable to store reference to setTimeout ID
}

gfeedpausescroller.prototype=new gfeedfetcher //inherit methods from gfeedfetcher class
gfeedpausescroller.prototype.constructor=gfeedpausescroller
gfeedpausescroller.prototype._displayresult=null //Remove inherited method "_displayresult()"


// -------------------------------------------------------------------
// entries_per_page()- Sets the number of RSS entries to display per page (at once)
// -------------------------------------------------------------------

gfeedpausescroller.prototype.entries_per_page=function(num){
	this.itemsperpage=num
}

// -------------------------------------------------------------------
// _signaldownloadcomplete()- Signals to the rest of the script when the fetching of all RSS feeds is complete
// -------------------------------------------------------------------

gfeedpausescroller.prototype._signaldownloadcomplete=function(){ //overwrite inherited method "_signaldownloadcomplete()"
	this.feedsfetched+=1
	if (this.feedsfetched==this.feedurls.length) //if all feeds fetched
		this._populateticker(this.feeds) //Populate the two DIVs within scroller with the fetched data
}

// -------------------------------------------------------------------
// _populateticker()- Pre-populates the two DIVs of the scroller with the 1st and 2nd RSS entries.
// -------------------------------------------------------------------

gfeedpausescroller.prototype._populateticker=function(feeds){
	gfeedfetcher._sortarray(feeds, this.sortstring)
	this.innerdiv.innerHTML=formatrssmessage(feeds, this.showoptions, this.itemcontainer, this.linktarget)
	this._initscroller()
}


// -------------------------------------------------------------------
// _initscroller()- Initialize the scroller by setting initial positions of the two dinner DIVs, start up down animation
// -------------------------------------------------------------------

gfeedpausescroller.prototype._initscroller=function(){
	var scrollerinstance=this;
	$(scrollerinstance.innerdiv).children().mouseover(function(){pauseScroller();});
	$(scrollerinstance.innerdiv).children().mouseout(function(){startScroller();});
	if (window.attachEvent) //Clean up loose references in IE
		window.attachEvent("onunload", function(){scrollerinstance.tickerdiv.onmouseover=scrollerinstance.tickerdiv.onmouseout=null});

	startScroller();
	
	function pauseScroller() {
		clearTimeout(scrollerinstance.timeoutID);
	}
	function startScroller() {
		scrollerinstance.timeoutID = setTimeout(rotateTicker, scrollerinstance.delay);
	}
	
	function rotateTicker(){
		var firstChild = $(scrollerinstance.innerdiv).children(":first-child");
		firstChild.slideUp(500, function() {nextTickerItem();});
	}
	function nextTickerItem() {
		$(scrollerinstance.innerdiv).children(":first-child").appendTo($(scrollerinstance.innerdiv)).show();
		//$(scrollerinstance.innerdiv).children(":first-child").appendTo($(scrollerinstance.tickerdiv)).remove();
		startScroller();	
	}
	
}


// -------------------------------------------------------------------
// formatrssmessage()- Global function that formats a RSS entry(s) to the desired components (title, date, description etc)
// -------------------------------------------------------------------

function formatrssmessage(feedslice, showoptions, itemcontainer, linktarget){
	var rssoutput=(itemcontainer=="<li>")? "<ul>\n" : "" //if "itemcontainer" is set to "<li>", define a "<ul>" tag to wrap around the result
	for (var i=0; i<feedslice.length; i++){ //Loop through the entered slice of a RSS feed (1 or more entries)
		var itemtitle="<a href=\"" + feedslice[i].link + "\" target=\"" + linktarget + "\" class=\"titlefield\">" + feedslice[i].title + "</a>"
		var itemlabel=/label/i.test(showoptions)? '<span class="labelfield">['+feedslice[i].ddlabel+']</span>' : " "
		var itemdate=gfeedfetcher._formatdate(feedslice[i].publishedDate, showoptions)
		var itemdescription=/description/i.test(showoptions)? "<br />"+feedslice[i].content : /snippet/i.test(showoptions)? "<br />"+feedslice[i].contentSnippet  : ""
		rssoutput+=itemcontainer + itemtitle + " " + itemlabel + " " + itemdate + "\n" + itemdescription + itemcontainer.replace("<", "</") + "\n\n"
	}
	rssoutput+=(itemcontainer=="<li>")? "</ul>\n" : "";
	return rssoutput;
}

