/*      (c) 2009 Jaimie Murdock, some rights reserved
	Licensed under a Creative Commons license (http://creativecommons.org/licenses/by-sa/3.0/)
*/

// Loading feed widgets 
// Feeds are stored by widget selector and URL pairs in JSON.
// The onLoad is called by the Google Feeds API and sets each feed as loading.
// When each feed is loaded, the loadFeed function is called, which publishes the data to the specified widget.
// Default is 5 entries, set JSON
var feeds = [
	{'selector' : '#tweet', 
		'url'   : "http://twitter.com/statuses/user_timeline/24012732.rss",
		'fn'    : loadTweets,
			'username'  : "JaimieMurdock",
			'linkTweet' : true},
	{'selector' : '#lastfmlist', 
		'url'   : "http://ws.audioscrobbler.com/1.0/user/JaimieMurdock/recenttracks.rss",
		'date'  : relative_time}, 
	{'selector' : '#blogfeed',
		'url'   : "http://feeds2.feedburner.com/takethelongcut",
		'date'  : relative_time},
	{'selector' : '#sharedfeed',
		'url'   : "http://www.google.com/reader/public/atom/user%2F14918795825791764923%2Fstate%2Fcom.google%2Fbroadcast"},
	{'selector' : '#delicious',
		'url'   : "http://feeds.delicious.com/v2/rss/JaimieMurdock"}
];

google.load("feeds", "1");
google.setOnLoadCallback(onLoad);

function onLoad() {
	$.each(feeds, function(i, n) {
		$(n.selector).append('<div class="loading">Loading&hellip;</div>');
		var feed = new google.feeds.Feed(n.url);
		feed.setNumEntries((n.num || 5));
		feed.load(function(result) {
			(n.fn || loadFeed)(result, n);
		});
	});
}

function loadFeed(result, n) {
	if (!result.error) {
		var html = '';
		html += '<ul>';
		for (var i = 0; i < result.feed.entries.length; i++) {
			var entry = result.feed.entries[i];
			html += '<li>'
				+ '<a href="' + entry.link + '">'
				+ (n.date ? '<span class="date">' 
						+ n.date(entry.publishedDate)
						+ '</span>'
						+ '<span class="text">' : '')
				+ entry.title
				+ (n.date ? '</span>' : '')
				+ '</a>'
				+ '</li>';  
		}
		html += '</ul>';
		$(n.selector).empty().append(html);
		gridflow();
	}	
}

function loadTweets(result, n) {
	$.fn.extend({
		removeUsername: function() {
	        var returning = [];
	        var regexp = new RegExp("("+n.username+": )", "gi");
	        this.each(function() {
	          returning.push(this.replace(regexp,""))
	        });
	        return $(returning);
	      },
		removeAtReply: function() {
	        var returning = [];
	        var regexp = new RegExp("("+n.username+": )", "gi");
	        this.each(function() {
	          returning.push(this.replace(regexp,""))
	        });
	        return $(returning);
	      },
	    linkUrl: function() {
	        var returning = [];
	        var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
	        this.each(function() {
	          returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"))
	        });
	        return $(returning);
	      },
	    linkUser: function() {
	        var returning = [];
	        var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
	        this.each(function() {
	          returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"))
	        });
	        return $(returning);
	      },
	    linkHash: function() {
	        var returning = [];
	        var regexp = / [\#]+([A-Za-z0-9-_]+)/gi;
	        this.each(function() {
	          returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all">#$1</a>'))
	        });
	        return $(returning);
	      },
	    makeHeart: function() {
	        var returning = [];
	        this.each(function() {
	          returning.push(this.replace(/[&lt;]+[3]/gi, "<tt class='heart'>&#x2665;</tt>"))
	        });
	        return $(returning);
	      }
	    });
	
	if (!result.error) {
		var html = '';
		html += '<ul>';
		for (var i = 0; i < result.feed.entries.length; i++) {
			var entry = result.feed.entries[i];
			html += '<li>'
				+ '<a href="' + entry.link + '" class="date">'
				+ relative_time(entry.publishedDate)
				+ '</a>'
				+ '<span class="text">' + $([entry.title]).removeUsername().linkUrl().linkUser().linkHash()[0] + '</span>'
				+ '</li>';  
				//eventually add support for entry.publishedDate
		}
		html += '</ul>';
		//html.children('li:first').addClass('tweet_first');
		$(n.selector).empty().append(html);
		gridflow();
	}
}

// Image Resize for Livingsocial books  

function resizeBooks() {
	$('.livingsocial img').each(function(i) {
		var ratio = $(this).width()/$(this).height();
		$(this).width(58);
		$(this).height(58/ratio);
	});
	$('.livingsocial').show();
	gridflow();
}

function relative_time(time_value) {
    var parsed_date = Date.parse(time_value);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
    if(delta < 120) {
    return '1 min';
    } else if(delta < (45*60)) {
    return (parseInt(delta / 60)).toString() + ' mins';
    } else if(delta < (90*60)) {
    return '1 hour';
    } else if(delta < (24*60*60)) {
    return '' + (parseInt(delta / 3600)).toString() + ' hours';
    } else if(delta < (48*60*60)) {
    return '1 day';
    } else {
    return (parseInt(delta / 86400)).toString() + ' days';
    }
  }

function absolute_time(time_value) {
    var parsed_date = Date.parse(time_value);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
    if(delta < (24*60*60)) {
    return 'today';
    } else {
    return parsed_date.getMonth() + "/" + parsed_date.getDay();
    }
  }






