(function ( $ ) 
{

    jQuery.fn.clRssScroller = function ( options ) {

       if (jQuery.jGFeed == null)
           jQuery.error("The jGFeed jQuery plugin is missing. This plugin is required by clRssScroller. Please import it.");

        var settings =
        {
           feedURL : null,
           maxItems : 10,
           scrollContainerSelector : ".scroll-content",
           upButtonSelector : ".arrow-up",
           downButtonSelector : ".arrow-down",
           scrollSpeed : 500,
           easing : "swing"
        };
        
        var noFeed = false;
        
        if ( options )
            $.extend( settings, options );
            
        if (settings.feedURL == null || settings.feedURL.length < 1) noFeed = true;

        // functions used by clRssScroller
        
        var formatDate = function(dateString)
            {
                var m_names = new Array("January", "February", "March", 
                                        "April", "May", "June", "July", "August", "September", 
                                        "October", "November", "December");

                var date = new Date(dateString);

                var monthName = m_names[date.getMonth()];

                var day = date.getDate();

                var fullYear = date.getFullYear();

                var out = monthName+" "+day+", "+fullYear;

                return out;
            };
            

        return this.each(function()
        {
            
            var context = $(this);
            
            context.data('currentItem', 1);
                        
            var upButton = $(settings.upButtonSelector, context);
            
            var downButton = $(settings.downButtonSelector, context);
            
            var rssLoaded = function(rss)
            {
            	if (!noFeed)
            	{
            		
	                for (var i = 0; i < rss.entries.length; i++)
	                {
	                    var currentEntry = rss.entries[i];
	                    var title = currentEntry.title;
	                    var link = currentEntry.link;
	                    var date = currentEntry.publishedDate;
	
	                    var formattedDate = formatDate(date);
	
	                    var p = $("<p></p>");
	
	                    var linkedTitle = $("<a>"+title+",</a>&nbsp;").attr("href", link).attr("target", "_blank");
	
	                    var eventsHeadingSpan = $("<span></span>").addClass("events-heading").append(linkedTitle);
	
	                    var attributionSpan = $("<span>"+formattedDate+"</span>").addClass("attribution");
	
	                    p.append(eventsHeadingSpan).append(attributionSpan);
	
	                    $(settings.scrollContainerSelector, context).append(p);
	                    
	                }
	        }
	
                context.data("numItems", $(settings.scrollContainerSelector+" p", context).size());
                
                context.data("pHeight", $(settings.scrollContainerSelector+" p", context).height());
                               
                upButton.click(function()
                {
                    var currentItem = context.data("currentItem");
                    var pHeight = context.data("pHeight");
                    
                    if (context.data("currentItem") > 1)
                    {
                        var top = - (currentItem - 1) * (pHeight) ;
                        
                        var newTop = top + pHeight;
                        
                        $(settings.scrollContainerSelector, context).animate(
                        {
                            "top" : newTop
                        },
                        settings.scrollSpeed,
                        settings.easing);
                        
                        currentItem--;
                       
                        context.data("currentItem", currentItem);
                    }

                });
                
                
                downButton.click(function()
                {
                   var currentItem = context.data("currentItem");
                   var pHeight = context.data("pHeight");
                   var numItems = context.data("numItems");
                   
                   if (currentItem < numItems)
                   {
                       var top = - (currentItem - 1) * (pHeight) ;
                        
                       var newTop = top - pHeight;
                        
                       $(settings.scrollContainerSelector, context).animate(
                       {
                           "top" : newTop
                       },
                       settings.scrollSpeed,
                       settings.easing);
                       
                       currentItem++;
                       
                       context.data("currentItem", currentItem);
                   }
                   
                });
            };
            
	    if (noFeed)
            {
            	rssLoaded(null);
            }
            else
 	    {
	            $.jGFeed(
	                settings.feedURL,
	                function(rss) { rssLoaded(rss); },
	                settings.maxItems
            		);
            }
            
            
        });




    };


}
)( jQuery );

