/**
 * @author mwatts
 */

 date_time = 
 {
 	processRelativeTimes : function()
	{
		$$('span.timestamp').each(
			function(ele)
			{
				if ($(ele).title)
					$(ele).innerHTML = date_time.getRelativeTime($(ele).title);
				else
				{
					$(ele).title = $(ele).innerHTML;
					$(ele).innerHTML = date_time.getRelativeTime(ele.innerHTML);
				}
			}
		);
	},	
	
	getRelativeTime : function(time)
	{
		var d = new Date();
		var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")); // create the new date from the date string
		date.setUTCHours(date.getUTCHours()-(d.getTimezoneOffset()/60));
		var diff = (((new Date()).getTime() - date.getTime()) / 1000); // calculate the difference in seconds
		var day_diff = Math.floor(diff / 86400); // calculate the difference in days
		return date_time.output(diff, day_diff, date); // retrieve the output and return
	},
	
	output : function(diff, day_diff, timestamp)
	{ 
		if(day_diff <= 0) {
			if(diff < 60)			return "just now";
			else if(diff < 120) 	return "one minute ago";
			else if(diff < 3600)	return Math.floor( diff / 60 ) + " minutes ago";
			else if(diff < 7200)	return "one hour ago";
			else if(diff < 86400)	return Math.floor( diff / 3600 ) + " hours ago";
		}
		else if(day_diff == 1) 		return "yesterday";
		else {
			if(day_diff < 7)		return day_diff + " days ago";
			else if(day_diff < 56)	return ((Math.ceil(day_diff / 7)>1)?Math.ceil(day_diff / 7) + " weeks ago":"one week ago");
			else if(day_diff < 365) return ((Math.floor(day_diff / 30)>1)?Math.floor(day_diff / 30) + " months ago":"one month ago");
			else if(day_diff > 365) return ((Math.ceil(day_diff / 365)>1)?Math.ceil(day_diff / 365) + " years ago":"one year ago");
		}
		return timestamp.toUTCString();
	}
 }
 
 document.observe('dom:loaded', function(){date_time.processRelativeTimes()});
 
 new PeriodicalExecuter(date_time.processRelativeTimes,60);