/*
 * fhPrettyDate - jQuery Plugin
 * simple dynamic prettydate plugin
 *
 * Copyright (c) 2009 Gijs van Zon MA
 *
 * Version: 0.1.0 (16/03/2010)
 * Requires: jQuery v1.3+
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */

(function() {

  $.fhPrettyDate = {

  	now: function() {
      return new Date();
  	},

  	format: function(time) {

      var timezoneDifference = dateMessages.timeZone - dateMessages.timeZoneApp;
      timezoneDifference = timezoneDifference * 60 * 1000;

  		var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
  			diff = ($.fhPrettyDate.now().getTime() - date.getTime() - timezoneDifference) / 1000,
  			day_diff = Math.floor(diff / 86400);

  		if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 365 )
  			return;

  		var messages = $.fhPrettyDate.messages;

  		var weeks = Math.floor(day_diff / 7);
  		var days = day_diff % 7;
  		var hours = Math.floor( diff / 3600 );
  		var minutes = Math.floor( diff % 3600 / 60 );
  		var seconds = Math.floor(diff % 60);

  		var secondsText = (seconds == 1 ? dateMessages.second : dateMessages.seconds);
  		var minutesText = (minutes == 1 ? dateMessages.minute : dateMessages.minutes);
  		var hoursText = (hours == 1 ? dateMessages.hour : dateMessages.hours);
  		var daysText = (days == 1 && weeks == 0 ? dateMessages.yesterday : days + ' ' + (days == 1 ? dateMessages.day : dateMessages.days));
  		var weeksText = (weeks == 1 ? dateMessages.week : dateMessages.weeks);

  		if(day_diff == 0)
    		return (dateMessages.pre != '' ? dateMessages.pre + ' ' : '' ) + (hours > 0 ? hours + ' ' + hoursText + ' ' : '') + (minutes > 0 ? minutes + ' ' + minutesText + ' ' : '') + (hours || minutes ? ' ' + dateMessages.and + ' ' : '') + seconds + ' ' + secondsText + ' ' + dateMessages.post;
  		else
    		return (dateMessages.pre != '' ? dateMessages.pre + ' ' : '' ) + (weeks > 0 ? weeks + ' ' + weeksText + (days > 0 ? ' ' + dateMessages.and : '') : '') + ' ' + (days > 0 ? daysText + ' ' : '') + (weeks == 0 && days == 1 ? '' : (dateMessages.post != '' ? dateMessages.post : '' ));

  	}

  };

  $.fn.fhPrettyDate = function(options) {
  	options = $.extend({
  		value: function() {
  			return $(this).attr("title");
  		},
  		interval: 10000
  	}, options);
  	var elements = this;
  	function format() {
  		elements.each(function() {
  			var date = $.fhPrettyDate.format(options.value.apply(this));
  			if ( date && $(this).text() != date )
  				$(this).text( date );
  		});
  	}
  	format();
  	if (options.interval)
  		setInterval(format, options.interval);
  	return this;
  };

})();
