/**
 * Plugin: jquery.zRSSFeed
 * 
 * Version: 1.0.1
 * (c) Copyright 2010, Zazar Ltd
 * 
 * Description: jQuery plugin for display of RSS feeds via Google Feed API
 *              (Based on original plugin jGFeed by jQuery HowTo)
 * 
 * History:
 * 1.0.1 - Corrected issue with multiple instances
 *
 **/

(function($){

	var current = null; 
	var numFromItem = 0;
	var numToItem = 0;
	var alreadyPaged = false;
	var objFeeds = null;
	var objOptions = null;
	var numCurrentPage = 0;
	
	$.fn.gopage = function (pagenumber){
	    numFromItem = (pagenumber * 2) + (pagenumber - 2);
		numToItem = (pagenumber * 3);
		numCurrentPage = pagenumber;
		_callback($('#test'), objFeeds, objOptions);
	};
	
	$.fn.rssfeed = function(url, options) {	
	
		// Set pluign defaults
		var defaults = {
			limit: 3,
			page: 1,
			header: false,
			titletag: 'h4',
			date: true,
			content: false,
			snippet: true,
			showerror: true,
			errormsg: '',
			key: null
		};  
		var options = $.extend(defaults, options); 
		
		// Functions
		return this.each(function(i, e) {
			var $e = $(e);
			
			// Add feed class to user div
			if (!$e.hasClass('rssFeed')) $e.addClass('rssFeed');
			
			// Check for valid url
			if(url == null) return false;

			// Create Google Feed API address
			var api = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=" + url;
			//if (options.limit != null) api += "&num=" + (options.limit*options.page);
			if (options.key != null) api += "&key=" + options.key;

			// Send request
			$.getJSON(api, function(data){
				
				// Check for error
				if (data.responseStatus == 200) {
	
					// Process the feeds
					objFeeds = data.responseData.feed;
					objOptions = options;
					_callback(e, data.responseData.feed, options);
				} else {

					// Handle error if required
					if (options.showerror)
						if (options.errormsg != '') {
							var msg = options.errormsg;
						} else {
							var msg = data.responseDetails;
						};
						$(e).html('<div class="rssError"><p>'+ msg +'</p></div>');
				};
			});				
		});
	};
	
	
	
	// Callback function to create HTML result
	var _callback = function(e, feeds, options) {
		if (!feeds) {
			return false;
		}
		var html = '';	
		var row = 'odd';			
		// Add header if required
		if (options.header)
			html +=	'<div class="rssHeader">' +
				'<a href="'+feeds.link+'" title="'+ feeds.description +'">'+ feeds.title +'</a>' +
				'</div>';
		
		// Add body
		html += '<div class="rssBody">';
		html += "<div class='rssHeader'>News</div>"	 +
			'<ul>';
		
		if (!alreadyPaged){
		    numFromItem = (options.page * 2) + (options.page - 2);
		    numToItem = (options.page * 3);
		    alreadyPaged = true;
		    numCurrentPage = 1;
		}
		
		var strPagging = "";
		var numLinks = parseInt(feeds.entries.length / 3);
		
		if ((feeds.entries.length % 3) > 0){
		    numLinks += 1;
		}
		
		//PAGGING ***********
		strPagging += "<div class='rssPagging'>"
		if (feeds.entries.length > 1){
		    var numPrevPage = numCurrentPage-1;
		    if (numCurrentPage == 1){
                //strPagging += "<a href='#' onclick='return false;'><</a>&nbsp;"		        
                strPagging += "&nbsp;";
		    }else{
		        strPagging += "<a href='#' title='previous page' onclick='GoPage2(" + numPrevPage.toString() + ");return false;'><</a>&nbsp;"
		    }
		}				
		
		var numStartPageNumber = 1;
		if (numLinks > 15 && numCurrentPage > 4){
		    numStartPageNumber = 10;
		}
		
		var strboldpage = "";
		for (var i = numStartPageNumber; i <= numLinks; i++){
		    if ( i == numCurrentPage){
		        strboldpage = " style='font-weight:bold;' "
		    }else{
		        strboldpage = "";
		    }		    
		    strPagging += "<a href='#' onclick='GoPage2(" + i.toString() + ");return false;' ><span " + strboldpage + ">" + i.toString() + "</span></a>&nbsp;";
		}
		if (feeds.entries.length > 3){
		    var numNextPage = numCurrentPage+1;
		    if (numNextPage > numLinks){
		        numNextPage = numLinks;
		        //strPagging += "<a href='#' onclick=';return false;'>></a>&nbsp;"
		        strPagging += "&nbsp;";
		    }else{
		        strPagging += "<a href='#' title='next page' onclick='GoPage2(" + numNextPage.toString() + ");return false;'>></a>&nbsp;"
		    }
		}
		strPagging += "</div>"
		//END PAGGING ***********
		
		var numCount = 0;
		// Add feeds
		for (var i=0; i<feeds.entries.length; i++){
			numCount += 1;
			if (numCount >= numFromItem && numCount <= numToItem){
			    // Get individual feed
			    var entry = feeds.entries[i];
    			
			    // Format published date
			    var entryDate = new Date(entry.publishedDate);
			    var pubDate = entryDate.getMonth() + "." + entryDate.getDay() + "." + entryDate.getFullYear().toString().substring(2,4); // .toLocaleDateString();// + ' ' + entryDate.toLocaleTimeString();
    			
			    // Add feed row
			    html += '<li class="rssRow '+row+'">' + 
				    '<'+ options.titletag +'>'+ pubDate +'</'+ options.titletag +'>'
			    if (options.date) html += '<div class="title">'+ entry.title +'</div>'
			    html += "<div class='morelink'><a target='_blank' href='" + entry.link + "' title='View this feed at "+ feeds.title +"'>Read More ></a></div>";
			    if (options.content) {
    			
				    // Use feed snippet if available and optioned
				    if (options.snippet && entry.contentSnippet != '') {
					    var content = entry.contentSnippet;
				    } else {
					    var content = entry.content;
				    }
    				
				    html += '<p>'+ content +'</p>'
			    }
    			
			    html += '</li>';
    			
			    // Alternate row classes
			    if (row == 'odd') {
				    row = 'even';
			    } else {
				    row = 'odd';
			    }
			}		
		}
		
		html += strPagging + '</ul>' +
			'</div>'
		
		$(e).html(html);
	};
})(jQuery);

