/*================================================== * Gregorian Date Labeller *================================================== */ Timeline.GregorianDateLabeller = function(locale, timeZone) { this._locale = locale; this._timeZone = timeZone; }; Timeline.GregorianDateLabeller.monthNames = []; Timeline.GregorianDateLabeller.dayNames = []; Timeline.GregorianDateLabeller.labelIntervalFunctions = []; Timeline.GregorianDateLabeller.getMonthName = function(month, locale) { return Timeline.GregorianDateLabeller.monthNames[locale][month]; }; Timeline.GregorianDateLabeller.prototype.labelInterval = function(date, intervalUnit) { var f = Timeline.GregorianDateLabeller.labelIntervalFunctions[this._locale]; if (f == null) { f = Timeline.GregorianDateLabeller.prototype.defaultLabelInterval; } return f.call(this, date, intervalUnit); }; Timeline.GregorianDateLabeller.prototype.labelPrecise = function(date) { return SimileAjax.DateTime.removeTimeZoneOffset( date, this._timeZone //+ (new Date().getTimezoneOffset() / 60) ).toUTCString(); }; Timeline.GregorianDateLabeller.prototype.defaultLabelInterval = function(date, intervalUnit) { var text; var emphasized = false; date = SimileAjax.DateTime.removeTimeZoneOffset(date, this._timeZone); switch(intervalUnit) { case SimileAjax.DateTime.MILLISECOND: text = date.getUTCMilliseconds(); break; case SimileAjax.DateTime.SECOND: text = date.getUTCSeconds(); break; case SimileAjax.DateTime.MINUTE: var m = date.getUTCMinutes(); if (m == 0) { text = date.getUTCHours() + ":00"; emphasized = true; } else { text = m; } break; case SimileAjax.DateTime.HOUR: text = date.getUTCHours() + "hr"; break; case SimileAjax.DateTime.DAY: text = Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(), this._locale) + " " + date.getUTCDate(); break; case SimileAjax.DateTime.WEEK: text = Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(), this._locale) + " " + date.getUTCDate(); break; case SimileAjax.DateTime.MONTH: var m = date.getUTCMonth(); if (m != 0) { text = Timeline.GregorianDateLabeller.getMonthName(m, this._locale); break; } // else, fall through case SimileAjax.DateTime.YEAR: case SimileAjax.DateTime.DECADE: case SimileAjax.DateTime.CENTURY: case SimileAjax.DateTime.MILLENNIUM: var y = date.getUTCFullYear(); if (y > 0) { text = date.getUTCFullYear(); } else { text = (1 - y) + "BC"; } emphasized = (intervalUnit == SimileAjax.DateTime.MONTH) || (intervalUnit == SimileAjax.DateTime.DECADE && y % 100 == 0) || (intervalUnit == SimileAjax.DateTime.CENTURY && y % 1000 == 0); break; default: text = date.toUTCString(); } return { text: text, emphasized: emphasized }; }