







dojo.locale = "en-us";
                   
var blogsDate = {
	init: function() {
		this.Now = new Date();
		this.Now_Mills = this.Now.getTime();
	}
		
}

blogsDate.date = {
	MILLS_IN_DAY:       86400000,
	
	Days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	
	Month: [ "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	
	Yesterday: "Yesterday ",
	Today: "Today ",
	Tomorrow: "Tomorrow ",
		
	delta: function ( dateMillis ) {
		var todayMidnight = new Date();
		todayMidnight.setHours(0);
		todayMidnight.setMinutes(0);
		todayMidnight.setSeconds(0);
		todayMidnight.setMilliseconds(0);
	
		var diff  = todayMidnight.getTime() - dateMillis;
		/* calculate the number of days away from _now_ the date is
		 * this uses the truncate function (we defined it) since floor() won't
		 * work with negative numbers */
		var dayDelta = Math.ceil( diff / ( blogsDate.date.MILLS_IN_DAY) );	
		return dayDelta;
	},
	
	localize: function ( dateMillis, onlydate ) {
		var serverDate = new Date();
		serverDate.setTime( dateMillis );
		var dayDelta = blogsDate.date.delta(dateMillis);
		var resultTime = "";
		
		if ( dayDelta <= 2 && dayDelta >= -2) {
		
			if ( dayDelta == 2 ) {
				//output "<day name> <at hour>"
				if(onlydate === undefined)
					resultTime = blogsDate.date.Days[ serverDate.getDay() ] + " " + blogsDate.date.getLocalizedTime( serverDate );
				else
					resultTime = blogsDate.date.Days[ serverDate.getDay() ];			
			} else if( dayDelta == 1 ) {
				//output "Yesterday <at hour>"
				if(onlydate === undefined)
					//resultTime = blogsDate.date.Yesterday + blogsDate.date.correctHoursAndMins( serverDate );
					resultTime =  blogsDate.date.Yesterday + blogsDate.date.getLocalizedTime( serverDate );
				else
					resultTime = blogsDate.date.Yesterday;
			} else if( dayDelta == 0 ) {
				//output "Today at hour"
				if(onlydate === undefined)
					//resultTime = blogsDate.date.Today + blogsDate.date.correctHoursAndMins( serverDate );
					resultTime =  blogsDate.date.Today + blogsDate.date.getLocalizedTime( serverDate );
				else
					resultTime = blogsDate.date.Today;
			} else if( dayDelta == -1 ) {
				//output "Tomorrow"
				resultTime = blogsDate.date.Tomorrow;
			} else if( dayDelta == -2 ) {
				//output "<day name>"
				resultTime = blogsDate.date.Days[ serverDate.getDay() ];
			}
			
		} else  if ( blogsDate.Now.getFullYear() == serverDate.getFullYear() ) {
			//output "<day num> <month>"
			var mainLocale = dojo.locale.substring(0,2);
			if(mainLocale == 'en'){
				resultTime = serverDate.getDate() + " " + blogsDate.date.Month[ serverDate.getMonth() ];
			}else {
				resultTime = blogsDate.date.getLocalizedDate(serverDate);
			}
		} else {
			//output "<day num> <month> <year>"
			var mainLocale = dojo.locale.substring(0,2);
			if(mainLocale == 'en'){
				resultTime = serverDate.getDate() + " " + blogsDate.date.Month[ serverDate.getMonth() ] + " " + serverDate.getFullYear();
			}else {
				resultTime = blogsDate.date.getLocalizedDate(serverDate);
			}
		}
		
		return "<span title=\"" + resultTime + "\">" + resultTime + "</span>";
	},
	
	correctHoursAndMins: function( date ) {
		var hours = date.getHours();
		var mins = date.getMinutes();
		
		if (mins < 10) {
			mins = "0" + mins;
		}
		
		var resultTime = "";
		
		if ( hours == 0 ) {
			resultTime = "12:" + mins + "am";
		} else if ( hours < 12) {
			resultTime = hours + ":" + mins + "am";
		} else if ( hours < 13) {
			resultTime = hours + ":" + mins + "pm";
		} else {
			resultTime = (hours - 12) + ":" + mins + "pm";
		}
		
		return resultTime;
	},
	
	getLocalizedTime: function( date ) {
		return dojo.date.format(date, {selector:'timeOnly',formatLength:'short', locale: dojo.locale });
	},
	
	getLocalizedDate: function( date ) {
		return dojo.date.format(date, {selector:'dateOnly',formatLength:'short', locale: dojo.locale });
	}
	
}

blogsDate.init();