var sagscroller_constants={navpanel:{height:'16px'},loadingimg:{src:'ajaxloading.gif',dimensions:[100,15]}}
function sagscroller(options){this.setting={mode:'manual',inittype:'stunted',pause:3000,animatespeed:500,ajaxsource:null,rssdata:null,refreshsecs:0,navpanel:{show:true,cancelauto:false}}
jQuery.extend(this.setting,options)
options=null
this.curmsg=0
this.addloadingpanel(jQuery,'preload')
if(this.setting.rssdata)
google.load("feeds","1")
var slider=this
jQuery(function($){slider.$slider=$('#'+slider.setting.id)
if(slider.setting.ajaxsource||slider.setting.rssdata)
slider.$slider.empty()
slider.addloadingpanel(jQuery,'show')
if(slider.setting.ajaxsource)
slider.getajaxul(slider.setting.ajaxsource)
else if(slider.setting.rssdata){slider.fetchfeeds()}
else{if(slider.setting.inittype=="onload")
$(window).load(function(){slider.init($)})
else
slider.init($)}})}
sagscroller.prototype={getajaxul:function(path){var $=jQuery,slider=this
this.stopscroll()
this.$loadingpanel.show()
$.ajax({url:path,async:true,error:function(ajaxrequest){slider.$slider.html('Error fetching content.<br />Server Response: '+ajaxrequest.responseText)},success:function(content){slider.reloadul(content)
if(slider.setting.refreshsecs>0)
setTimeout(function(){slider.getajaxul(path)},slider.setting.refreshsecs*1000)}})},addloadingpanel:function($,mode){var loadingimgref=sagscroller_constants.loadingimg
if(mode=="preload"){var loadingimg=new Image(loadingimgref.dimensions[0],loadingimgref.dimensions[1])
loadingimg.src=loadingimgref.src
this.$loadingimg=$(loadingimg).css({position:'absolute',zIndex:1003})}
else{var sliderdimensions=[this.$slider.width(),this.$slider.height()]
var $loadingpanel=$('<div />').css({position:'absolute',left:0,top:0,background:'black',opacity:0.5,width:sliderdimensions[0],height:sliderdimensions[1],zIndex:1002}).appendTo(this.$slider)
this.$loadingimg.css({left:sliderdimensions[0]/2-loadingimgref.dimensions[0]/2,top:sliderdimensions[1]/2-loadingimgref.dimensions[1]/2}).appendTo(this.$slider)
this.$loadingpanel=$loadingpanel.add(this.$loadingimg)}},addnavpanel:function(){var slider=this,setting=this.setting
var $navpanel=$('<div class="sliderdesc"><div class="sliderdescbg"></div><div class="sliderdescfg"><div class="sliderdesctext"></div></div></div>').css({position:'absolute',width:'100%',left:0,top:-1000,zIndex:'1001'})
$navpanel.css({top:this.$slider.height()-parseInt(sagscroller_constants.navpanel.height),height:sagscroller_constants.navpanel.height}).find('div').css({height:'100%'})},resetuls:function(){var $tempul=this.$mainul
this.$mainul=this.$secul.css({zIndex:1000})
this.$secul=$tempul.css({zIndex:999})
this.$secul.css('top',this.ulheight)},reloadul:function(newhtml){this.$slider.find('ul').remove()
this.ulheight=null
this.curmsg=0;this.$slider.append(newhtml)
this.init($)},setgetoffset:function($li){var recaldimensions=(this.setting.ajaxsource||this.setting.rssdata)&&this.setting.inittype=="onload"
if(this.curmsg==this.$lis.length)
return(!this.ulheight||recaldimensions)?this.ulheight=this.$mainul.height():this.ulheight
else{if(!$li.data('toppos')||recaldimensions)
$li.data('toppos',$li.position().top)
return $li.data('toppos')}},scrollmsg:function(repeat){var slider=this,setting=this.setting
var ulheight=this.ulheight||this.$mainul.height()
var endpoint=-this.setgetoffset(this.$lis.eq(this.curmsg))
this.$mainul.animate({top:endpoint},setting.animatespeed,function(){slider.curmsg=(slider.curmsg<slider.$lis.length+1)?slider.curmsg+1:0
if(slider.curmsg==slider.$lis.length+1){slider.resetuls()
slider.curmsg=1}
if(repeat)
slider.scrolltimer=setTimeout(function(){slider.scrollmsg(repeat)},setting.pause)})
var secendpoint=endpoint+ulheight
this.$secul.animate({top:secendpoint},setting.animatespeed)},stopscroll:function(){if(this.$mainul){this.$mainul.add(this.$secul).stop(true,false)
clearTimeout(this.scrolltimer)}},init:function($){var setting=this.setting
this.$loadingpanel.hide()
this.$mainul=this.$slider.find('ul:eq(0)').css({zIndex:1000})
this.$lis=this.$mainul.find('li')
if(setting.navpanel.show)
this.addnavpanel()
this.$secul=this.$mainul.clone().css({top:this.$mainul.height(),zIndex:999}).appendTo(this.$slider)
this.scrollmsg(setting.mode=="auto")},fetchfeeds:function(){var slider=this,rssdata=this.setting.rssdata
this.stopscroll()
this.$loadingpanel.show()
this.entries=[]
this.feedsfetched=0
for(var i=0;i<rssdata.feeds.length;i++){var feedpointer=new google.feeds.Feed(rssdata.feeds[i][1])
feedpointer.setNumEntries(rssdata.entries)
feedpointer.load(function(label){return function(r){slider.storefeeds(r,label)}}(rssdata.feeds[i][0]))}},storefeeds:function(result,label){var thisfeed=(!result.error)?result.feed.entries:""
if(thisfeed==""){alert("Google Feed API Error: "+result.error.message)}
for(var i=0;i<thisfeed.length;i++){result.feed.entries[i].label=label}
this.entries=this.entries.concat(thisfeed)
this.feedsfetched+=1
if(this.feedsfetched==this.setting.rssdata.feeds.length){if(this.setting.rssdata.groupbylabel){this.entries.sort(function(a,b){var fielda=a.label.toLowerCase(),fieldb=b.label.toLowerCase()
return(fielda<fieldb)?-1:(fielda>fieldb)?1:0})}
else{this.entries.sort(function(a,b){return new Date(b.publishedDate)-new Date(a.publishedDate)})}
this.formatfeeds()}},formatfeeds:function(){function formatdate(datestr,showoptions){var itemdate=new Date(datestr)
var parseddate=(showoptions.indexOf("datetime")!=-1)?itemdate.toLocaleString():(showoptions.indexOf("date")!=-1)?itemdate.toLocaleDateString():""
return"<span class='datefield'>"+parseddate+"</span>"}
var sagcontent='<ul>'
var slider=this,rssdata=this.setting.rssdata,entries=this.entries
for(var i=0;i<entries.length;i++){sagcontent+='<li><a href="'+entries[i].link+'" target="'+rssdata.linktarget+'">'+entries[i].title+'</a>'+'<div class="rsscontent">'+(/description/.test(rssdata.displayoptions)?entries[i].content:entries[i].contentSnippet)+'</div>'+'<div class="rsslabel">'+(/label/.test(rssdata.displayoptions)?"<b>Source("+(i+1)+"):</b> "+entries[i].label+" ":"")+(/date/.test(rssdata.displayoptions)?formatdate(entries[i].publishedDate,rssdata.displayoptions):"")+'</div>'+'</li>\n\n'}
sagcontent+='</ul>'
this.reloadul(sagcontent)
if(slider.setting.refreshsecs>0)
setTimeout(function(){slider.fetchfeeds()},slider.setting.refreshsecs*1000)}}
