/*
 * Javascript Humane Dates
 * Copyright (c) 2008 Dean Landolt (deanlandolt.com)
 * Re-write by Zach Leatherman (zachleat.com)
 * Mods by Alastair Rankine (girtby.net)
 * 
 * Adopted from the John Resig's pretty.js
 * at http://ejohn.org/blog/javascript-pretty-date
 * and henrah's proposed modification 
 * at http://ejohn.org/blog/javascript-pretty-date/#comment-297458
 * 
 * Licensed under the MIT license.
 */

 function humane_date(date_str, base_date, token) {
	 var time_formats = [
		 [60, 'Just Now'],
		 [90, '1 Minute'], // 60*1.5
		 [3600, 'Minutes', 60], // 60*60, 60
		 [5400, '1 Hour'], // 60*60*1.5
		 [86400, 'Hours', 3600], // 60*60*24, 60*60
		 [129600, '1 Day'], // 60*60*24*1.5
		 [604800, 'Days', 86400], // 60*60*24*7, 60*60*24
		 [907200, '1 Week'], // 60*60*24*7*1.5
		 [2628000, 'Weeks', 604800], // 60*60*24*(365/12), 60*60*24*7
		 [3942000, '1 Month'], // 60*60*24*(365/12)*1.5
		 [31536000, 'Months', 2628000], // 60*60*24*365, 60*60*24*(365/12)
		 [47304000, '1 Year'], // 60*60*24*365*1.5
		 [3153600000, 'Years', 31536000], // 60*60*24*365*100, 60*60*24*365
		 [4730400000, '1 Century'], // 60*60*24*365*100*1.5
	 ];
     
	 var seconds = ((base_date - new Date(date_str) + (base_date.getTimezoneOffset() * 60000)) / 1000),
		 i = 0,
		 format;

	 if (seconds < 0) {
		 seconds = Math.abs(seconds);
	 }

	 while (format = time_formats[i++]) {
		 if (seconds < format[0]) {
			 if (format.length == 2) {
				 return format[1] + (i > 1 ? token : ''); // Conditional so we don't return Just Now Ago
			 } else {
				 return Math.round(seconds / format[2]) + ' ' + format[1] + (i > 1 ? token : '');
			 }
		 }
	 }
     
	 // overflow for centuries
	 if(seconds > 4730400000)
		 return Math.round(seconds / 4730400000) + ' Centuries' + token;
     
	 return date_str;
 };
 
 if(typeof jQuery != 'undefined') {
	 jQuery.fn.humane_dates = function(){
		 return this.each(function(){
			 var date = humane_date(this.title, new Date, ' Ago');
			 if(date && jQuery(this).text() != date) // don't modify the dom if we don't have to
				 jQuery(this).text(date);
		 });
	 };

	 jQuery.fn.humane_dates_from = function(base_selector){
		 return this.each(function(){
             var base_date = jQuery(this).prev(base_selector).val();
			 var date = humane_date(this.title, new Date(base_date), ' Later');
			 if(date && jQuery(this).text() != date) // don't modify the dom if we don't have to
				 jQuery(this).text(date);
		 });
	 };
 }

 jQuery(document).ready(function() {
     jQuery("abbr.published").humane_dates();
     jQuery("abbr.commented").humane_dates_from("input:hidden");
 });

