// 
/*
PACHumanDate.jss
	Extends Datejs to support humanized and localized dates.

Note:
	PACHumanDate requires Datejs.

Arguments:

Options:
	
Events:
	
*/

Date.prototype.__toString = Date.prototype.toString;

Date.prototype.toString = function(format, type){
	var that = this;
	
	var humanize = function (type){
		type = type || "";
		
		var dateStr = new Date(that).toISOString().replace(/\"/g, '').replace(/-/g,"/").replace(/[ZT]/g," "); // almost readable fallback ;)
		var timeFormats = Date.CultureInfo.humanFormats;
		var timeFormatsFuture = Date.CultureInfo.humanFormatsFuture;
		var token = Date.CultureInfo.humanTokens;
		//var time = ('' + dateStr).replace(/-/g,"/").replace(/[ZT]/g," "),
		var	dt = new Date;
		var	seconds = (type.test("relative")) ? new Date(that) /1000 : ((dt - new Date(that)) / 1000); //+ (dt.getTimezoneOffset() * 60000)
		var	i = 0,
			format;
		if (seconds < 0) {
			seconds = Math.abs(seconds);
		}
		if(type.test("relative")){
			var isAfter = new Date(that).isAfter(new Date(1970)) ? "date_after" : "date_before";
		} else {
			var isAfter = that.isAfter(new Date()) ? "date_after" : "date_before";			
		}
		var relativeTime = (type.test("approximate")) ? isAfter + "_approx" : isAfter;
		while (format = timeFormats[i++]) {
			if (seconds < format[0]) {
				if (format.length == 2) { 
					if(that.isAfter(Date.today()) && timeFormatsFuture[i-1]) format = timeFormatsFuture[i-1]
					return (i > 1 ? token[relativeTime].replace(/XX/,format[1]) : format[1]); // Conditional so we don't return Just Now Ago
				} else {
					return token[relativeTime].replace(/XX/, Math.round(seconds / format[2]) + ' ' + format[1]);
				}
			}
		}
		/*	// overflow for centurie5
		if(seconds > 4730400000)
			return Math.round(seconds / 4730400000) + ' Centuries' + token;
		*/
		return dateStr;
	};
	
	// I know this is ugly, but is doesn't involve messing with datejs stuff below
	if(format === "human"){
		return humanize(type);
	} else {
		return that.__toString(format);
	}
	
};
	
