view war/scripts/sti/ExtendedSimileTimeDate.js @ 68:8b58d9bc0bb6 trimmed_data

add functionality for additional tabular data from the description field (work in progress)
author Sebastian Kruse <skruse@mpiwg-berlin.mpg.de>
date Thu, 03 Jan 2013 18:43:28 +0100
parents cf06b77a8bbd
children
line wrap: on
line source

SimileAjax.DateTime.MILLISECOND = 0;
SimileAjax.DateTime.SECOND = 1;
SimileAjax.DateTime.FIVESECONDS = 2;
SimileAjax.DateTime.TENSECONDS = 3;
SimileAjax.DateTime.HALFMINUTE = 4;
SimileAjax.DateTime.MINUTE = 5;
SimileAjax.DateTime.FIVEMINUTES = 6;
SimileAjax.DateTime.TENMINUTES = 7;
SimileAjax.DateTime.HALFHOUR = 8;
SimileAjax.DateTime.HOUR = 9;
SimileAjax.DateTime.TWOHOURS = 10;
SimileAjax.DateTime.FOURHOURS = 11;
SimileAjax.DateTime.EIGHTHOURS = 12;
SimileAjax.DateTime.DAY = 13;
SimileAjax.DateTime.TWODAYS = 14;
SimileAjax.DateTime.FOURDAYS = 15;
SimileAjax.DateTime.WEEK = 16;
SimileAjax.DateTime.TWOWEEKS = 17;
SimileAjax.DateTime.MONTH = 18;
SimileAjax.DateTime.QUARTER = 19;
SimileAjax.DateTime.SEMESTER = 20;
SimileAjax.DateTime.YEAR = 21;
SimileAjax.DateTime.TWOYEARS = 22;
SimileAjax.DateTime.LUSTRUM = 23;
SimileAjax.DateTime.DECADE = 24;
SimileAjax.DateTime.TWODECADES = 25;
SimileAjax.DateTime.HALFCENTURY = 26;
SimileAjax.DateTime.CENTURY = 27;
SimileAjax.DateTime.TWOCENTURIES = 28;
SimileAjax.DateTime.HALFMILLENNIUM = 29;
SimileAjax.DateTime.MILLENNIUM = 30;
SimileAjax.DateTime.TWOMILLENNIUMS = 31;
SimileAjax.DateTime.FIVEMILLENNIUMS = 32;
SimileAjax.DateTime.DECAMILLENNIUM = 33;
SimileAjax.DateTime.TWODECAMILLENNIUMS = 34;
SimileAjax.DateTime.FIVEDECAMILLENNIUMS = 35;
SimileAjax.DateTime.HECTOMILLENNIUM = 36;
SimileAjax.DateTime.TWOHECTOMILLENNIUMS = 37;
SimileAjax.DateTime.FIVEHECTOMILLENNIUMS = 38;
SimileAjax.DateTime.MEGENNIUM = 39;
SimileAjax.DateTime.TWOMEGENNIUMS = 40;
SimileAjax.DateTime.FIVEMEGENNIUMS = 41;
SimileAjax.DateTime.DECAMEGENNIUM = 42;
SimileAjax.DateTime.TWODECAMEGENNIUMS = 43;
SimileAjax.DateTime.FIVEDECAMEGENNIUMS = 44;
SimileAjax.DateTime.HECTOMEGENNIUM = 45;
SimileAjax.DateTime.TWOHECTOMEGENNIUMS = 46;
SimileAjax.DateTime.FIVEHECTOMEGENNIUMS = 47;
SimileAjax.DateTime.GIGENNIUM = 48;

SimileAjax.DateTime.gregorianUnitLengths = [];
(function(){
    var d = SimileAjax.DateTime;
    var a = d.gregorianUnitLengths;
    
    a[d.MILLISECOND] = 1;
    a[d.SECOND] = 1000;
    a[d.FIVESECONDS] = a[d.SECOND] * 5;
    a[d.TENSECONDS] = a[d.SECOND] * 10;
    a[d.HALFMINUTE] = a[d.SECOND] * 30;
    a[d.MINUTE] = a[d.SECOND] * 60;
    a[d.FIVEMINUTES] = a[d.MINUTE] * 5;
    a[d.TENMINUTES] = a[d.MINUTE] * 10;
    a[d.HALFHOUR] = a[d.MINUTE] * 30;
    a[d.HOUR] = a[d.MINUTE] * 60;
    a[d.TWOHOURS] = a[d.HOUR] * 2;
    a[d.FOURHOURS] = a[d.HOUR] * 4;
    a[d.EIGHTHOURS] = a[d.HOUR] * 8;
    a[d.DAY] = a[d.HOUR] * 24;
    a[d.TWODAYS] = a[d.DAY] * 2;
    a[d.FOURDAYS] = a[d.DAY] * 4;
    a[d.WEEK] = a[d.DAY] * 7;
    a[d.TWOWEEKS] = a[d.DAY] * 14;
    a[d.MONTH] = a[d.DAY] * 31;
    a[d.QUARTER] = a[d.DAY] * 91;
    a[d.SEMESTER] = a[d.DAY] * 182;
    a[d.YEAR] = a[d.DAY] * 365;
    a[d.TWOYEARS] = a[d.YEAR] * 2;
    a[d.LUSTRUM] = a[d.YEAR] * 5;
    a[d.DECADE] = a[d.YEAR] * 10;
    a[d.TWODECADES] = a[d.YEAR] * 20;
    a[d.HALFCENTURY] = a[d.YEAR] * 50;
    a[d.CENTURY] = a[d.YEAR] * 100;
    a[d.TWOCENTURIES] = a[d.YEAR] * 200;
    a[d.HALFMILLENNIUM] = a[d.YEAR] * 500;
    a[d.MILLENNIUM] = a[d.YEAR] * 1000;
    a[d.TWOMILLENNIUMS] = a[d.YEAR] * 2000;
    a[d.FIVEMILLENNIUMS] = a[d.YEAR] * 5000;
    a[d.DECAMILLENNIUM] = a[d.YEAR] * 10000;
    a[d.TWODECAMILLENNIUMS] = a[d.YEAR] * 20000;
    a[d.FIVEDECAMILLENNIUMS] = a[d.YEAR] * 50000;
    a[d.HECTOMILLENNIUM] = a[d.YEAR] * 100000;
    a[d.TWOHECTOMILLENNIUMS] = a[d.YEAR] * 200000;
    a[d.FIVEHECTOMILLENNIUMS] = a[d.YEAR] * 500000;
    a[d.MEGENNIUM] = a[d.YEAR] * 1000000;
    a[d.TWOMEGENNIUMS] = a[d.YEAR] * 2000000;
    a[d.FIVEMEGENNIUMS] = a[d.YEAR] * 5000000;
    a[d.DECAMEGENNIUM] = a[d.YEAR] * 10000000;
    a[d.TWODECAMEGENNIUMS] = a[d.YEAR] * 20000000;
    a[d.FIVEDECAMEGENNIUMS] = a[d.YEAR] * 50000000;
    a[d.HECTOMEGENNIUM] = a[d.YEAR] * 100000000;
    a[d.TWOHECTOMEGENNIUM] = a[d.YEAR] * 200000000;
    a[d.FIVEHECTOMEGENNIUM] = a[d.YEAR] * 500000000;
    a[d.GIGENNIUM] = a[d.YEAR] * 1000000000;
})();

SimileAjax.DateTime.roundDownToInterval = function(date, intervalUnit, timeZone, multiple, firstDayOfWeek){
	timeZone = (typeof timeZone == 'undefined') ? 0 : timeZone;
    var timeShift = timeZone * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.HOUR];
    
    var date2 = new Date(date.getTime() + timeShift);
    var clearInDay = function(d){
        d.setUTCMilliseconds(0);
        d.setUTCSeconds(0);
        d.setUTCMinutes(0);
        d.setUTCHours(0);
    };
    var clearInYear = function(d){
        clearInDay(d);
        d.setUTCDate(1);
        d.setUTCMonth(0);
    };
    
    switch (intervalUnit) {
        case SimileAjax.DateTime.MILLISECOND:
            var x = date2.getUTCMilliseconds();
            date2.setUTCMilliseconds(x - (x % multiple));
            break;
        case SimileAjax.DateTime.SECOND:
            date2.setUTCMilliseconds(0);
            var x = date2.getUTCSeconds();
            date2.setUTCSeconds(x - (x % multiple));
            break;
        case SimileAjax.DateTime.FIVESECONDS:
            date2.setUTCMilliseconds(0);
            var x = date2.getUTCSeconds();
            date2.setUTCSeconds(x - (x % 5));
            break;
        case SimileAjax.DateTime.TENSECONDS:
            date2.setUTCMilliseconds(0);
            var x = date2.getUTCSeconds();
            date2.setUTCSeconds(x - (x % 10));
            break;
        case SimileAjax.DateTime.HALFMINUTE:
            date2.setUTCMilliseconds(0);
            var x = date2.getUTCSeconds();
            date2.setUTCSeconds(x - (x % 30));
            break;
        case SimileAjax.DateTime.MINUTE:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            var x = date2.getUTCMinutes();
            date2.setTime(date2.getTime() - (x % multiple) * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.MINUTE]);
            break;
        case SimileAjax.DateTime.FIVEMINUTES:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            var x = date2.getUTCMinutes();
            date2.setUTCMinutes(x - x % 5);
            break;
        case SimileAjax.DateTime.TENMINUTES:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            var x = date2.getUTCMinutes();
            date2.setUTCMinutes(x - x % 10);
            break;
        case SimileAjax.DateTime.HALFHOUR:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            var x = date2.getUTCMinutes();
            date2.setUTCMinutes(x - x % 30);
            break;
        case SimileAjax.DateTime.HOUR:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            date2.setUTCMinutes(0);
            var x = date2.getUTCHours();
            date2.setUTCHours(x - (x % multiple));
            break;
        case SimileAjax.DateTime.TWOHOURS:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            date2.setUTCMinutes(0);
            var x = date2.getUTCHours();
            date2.setUTCHours(x - (x % 2));
            break;
        case SimileAjax.DateTime.FOURHOURS:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            date2.setUTCMinutes(0);
            var x = date2.getUTCHours();
            date2.setUTCHours(x - (x % 4));
            break;
        case SimileAjax.DateTime.EIGHTHOURS:
            date2.setUTCMilliseconds(0);
            date2.setUTCSeconds(0);
            date2.setUTCMinutes(0);
            var x = date2.getUTCHours();
            date2.setUTCHours(x - (x % 8));
            break;
        case SimileAjax.DateTime.DAY:
            clearInDay(date2);
            break;
        case SimileAjax.DateTime.TWODAYS:
        case SimileAjax.DateTime.FOURDAYS:
        case SimileAjax.DateTime.WEEK:
        case SimileAjax.DateTime.TWOWEEKS:
            clearInDay(date2);
            break;
        case SimileAjax.DateTime.MONTH:
            clearInDay(date2);
            date2.setUTCDate(1);
            var x = date2.getUTCMonth();
            date2.setUTCMonth(x - (x % multiple));
            break;
        case SimileAjax.DateTime.QUARTER:
            clearInDay(date2);
            date2.setUTCDate(1);
            var x = date2.getUTCMonth();
            date2.setUTCMonth(x - (x % 3));
            break;
        case SimileAjax.DateTime.SEMESTER:
            clearInDay(date2);
            date2.setUTCDate(1);
            var x = date2.getUTCMonth();
            date2.setUTCMonth(x - (x % 6));
            break;
        case SimileAjax.DateTime.YEAR:
            clearInYear(date2);
            var x = date2.getUTCFullYear();
            date2.setUTCFullYear(x - (x % multiple));
            break;
        case SimileAjax.DateTime.TWOYEARS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 2) * 2);
            break;
        case SimileAjax.DateTime.LUSTRUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 5) * 5);
            break;
        case SimileAjax.DateTime.DECADE:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 10) * 10);
            break;
        case SimileAjax.DateTime.TWODECADES:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 20) * 20);
            break;
        case SimileAjax.DateTime.HALFCENTURY:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 50) * 50);
            break;
        case SimileAjax.DateTime.CENTURY:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 100) * 100);
            break;
        case SimileAjax.DateTime.TWOCENTURIES:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 200) * 200);
            break;
        case SimileAjax.DateTime.HALFMILLENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 500) * 500);
            break;
        case SimileAjax.DateTime.MILLENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 1000) * 1000);
            break;
        case SimileAjax.DateTime.TWOMILLENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 2000) * 2000);
            break;
        case SimileAjax.DateTime.FIVEMILLENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 5000) * 5000);
            break;
        case SimileAjax.DateTime.DECAMILLENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 10000) * 10000);
            break;
        case SimileAjax.DateTime.TWODECAMILLENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 20000) * 20000);
            break;
        case SimileAjax.DateTime.FIVEDECAMILLENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 50000) * 50000);
            break;
        case SimileAjax.DateTime.HECTOMILLENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 100000) * 100000);
            break;
        case SimileAjax.DateTime.TWOHECTOMILLENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 200000) * 200000);
            break;
        case SimileAjax.DateTime.FIVEHECTOMILLENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 500000) * 500000);
            break;
        case SimileAjax.DateTime.MEGENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 1000000) * 1000000);
            break;
        case SimileAjax.DateTime.TWOMEGENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 2000000) * 2000000);
            break;
        case SimileAjax.DateTime.FIVEMEGENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 5000000) * 5000000);
            break;
        case SimileAjax.DateTime.DECAMEGENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 10000000) * 10000000);
            break;
        case SimileAjax.DateTime.HECTOMEGENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 100000000) * 100000000);
            break;
        case SimileAjax.DateTime.TWOHECTOMEGENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 200000000) * 200000000);
            break;
        case SimileAjax.DateTime.FIVEHECTOMEGENNIUMS:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 500000000) * 500000000);
            break;
        case SimileAjax.DateTime.GIGENNIUM:
            clearInYear(date2);
            date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 1000000000) * 1000000000);
            break;
    }
    
    date.setTime(date2.getTime() - timeShift);
};

SimileAjax.DateTime.incrementByInterval = function(date, intervalUnit, timeZone){
    timeZone = (typeof timeZone == 'undefined') ? 0 : timeZone;
    
    var timeShift = timeZone * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.HOUR];
    
    var date2 = new Date(date.getTime() + timeShift);
    
    switch (intervalUnit) {
        case SimileAjax.DateTime.MILLISECOND:
            date2.setTime(date2.getTime() + 1)
            break;
        case SimileAjax.DateTime.SECOND:
            date2.setTime(date2.getTime() + 1000);
            break;
        case SimileAjax.DateTime.FIVESECONDS:
            date2.setTime(date2.getTime() + 5000);
            break;
        case SimileAjax.DateTime.TENSECONDS:
            date2.setTime(date2.getTime() + 10000);
            break;
        case SimileAjax.DateTime.HALFMINUTE:
            date2.setTime(date2.getTime() + 30000);
            break;
        case SimileAjax.DateTime.MINUTE:
            date2.setTime(date2.getTime() + SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.MINUTE]);
            break;
        case SimileAjax.DateTime.FIVEMINUTES:
            date2.setTime(date2.getTime() + 5 * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.MINUTE]);
            break;
        case SimileAjax.DateTime.TENMINUTES:
            date2.setTime(date2.getTime() + 10 * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.MINUTE]);
            break;
        case SimileAjax.DateTime.HALFHOUR:
            date2.setTime(date2.getTime() + 30 * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.MINUTE]);
            break;
        case SimileAjax.DateTime.HOUR:
            date2.setTime(date2.getTime() + SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.HOUR]);
            break;
        case SimileAjax.DateTime.TWOHOURS:
            date2.setTime(date2.getTime() + 2 * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.HOUR]);
            break;
        case SimileAjax.DateTime.FOURHOURS:
            date2.setTime(date2.getTime() + 4 * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.HOUR]);
            break;
        case SimileAjax.DateTime.EIGHTHOURS:
            date2.setTime(date2.getTime() + 8 * SimileAjax.DateTime.gregorianUnitLengths[SimileAjax.DateTime.HOUR]);
            break;
        case SimileAjax.DateTime.DAY:
            date2.setUTCDate(date2.getUTCDate() + 1);
            break;
        case SimileAjax.DateTime.TWODAYS:
            date2.setUTCDate(date2.getUTCDate() + 2);
            break;
        case SimileAjax.DateTime.FOURDAYS:
            date2.setUTCDate(date2.getUTCDate() + 4);
            break;
        case SimileAjax.DateTime.WEEK:
            date2.setUTCDate(date2.getUTCDate() + 7);
            break;
        case SimileAjax.DateTime.TWOWEEKS:
            date2.setUTCDate(date2.getUTCDate() + 14);
            break;
        case SimileAjax.DateTime.MONTH:
            date2.setUTCMonth(date2.getUTCMonth() + 1);
            break;
        case SimileAjax.DateTime.QUARTER:
            date2.setUTCMonth(date2.getUTCMonth() + 3);
            break;
        case SimileAjax.DateTime.SEMESTER:
            date2.setUTCMonth(date2.getUTCMonth() + 6);
            break;
        case SimileAjax.DateTime.YEAR:
            date2.setUTCFullYear(date2.getUTCFullYear() + 1);
            break;
        case SimileAjax.DateTime.TWOYEARS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 2);
            break;
        case SimileAjax.DateTime.LUSTRUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 5);
            break;
        case SimileAjax.DateTime.DECADE:
            date2.setUTCFullYear(date2.getUTCFullYear() + 10);
            break;
        case SimileAjax.DateTime.TWODECADES:
            date2.setUTCFullYear(date2.getUTCFullYear() + 20);
            break;
        case SimileAjax.DateTime.HALFCENTURY:
            date2.setUTCFullYear(date2.getUTCFullYear() + 50);
            break;
        case SimileAjax.DateTime.CENTURY:
            date2.setUTCFullYear(date2.getUTCFullYear() + 100);
            break;
        case SimileAjax.DateTime.TWOCENTURIES:
            date2.setUTCFullYear(date2.getUTCFullYear() + 200);
            break;
        case SimileAjax.DateTime.HALFMILLENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 500);
            break;
        case SimileAjax.DateTime.MILLENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 1000);
            break;
        case SimileAjax.DateTime.TWOMILLENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 2000);
            break;
        case SimileAjax.DateTime.FIVEMILLENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 5000);
            break;
        case SimileAjax.DateTime.DECAMILLENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 10000);
            break;
        case SimileAjax.DateTime.TWODECAMILLENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 20000);
            break;
        case SimileAjax.DateTime.FIVEDECAMILLENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 50000);
            break;
        case SimileAjax.DateTime.HECTOMILLENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 100000);
            break;
        case SimileAjax.DateTime.TWOHECTOMILLENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 200000);
            break;
        case SimileAjax.DateTime.FIVEHECTOMILLENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 500000);
            break;
        case SimileAjax.DateTime.MEGENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 1000000);
            break;
        case SimileAjax.DateTime.TWOMEGENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 2000000);
            break;
        case SimileAjax.DateTime.FIVEMEGENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 5000000);
            break;
        case SimileAjax.DateTime.DECAMEGENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 10000000);
            break;
        case SimileAjax.DateTime.TWODECAMEGENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 20000000);
            break;
        case SimileAjax.DateTime.FIVEDECAMEGENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 50000000);
            break;
        case SimileAjax.DateTime.HECTOMEGENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 100000000);
            break;
        case SimileAjax.DateTime.TWOHECTOMEGENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 200000000);
            break;
        case SimileAjax.DateTime.FIVEHECTOMEGENNIUMS:
            date2.setUTCFullYear(date2.getUTCFullYear() + 500000000);
            break;
        case SimileAjax.DateTime.GIGENNIUM:
            date2.setUTCFullYear(date2.getUTCFullYear() + 1000000000);
            break;
    }
    date.setTime(date2.getTime() - timeShift);
};

SimileAjax.DateTime.getTimeLabel = function( unit, t ){
		var time = SimileAjax.DateTime;
		var second = t.getUTCSeconds();
		var minute = t.getUTCMinutes();
		var hour = t.getUTCHours();
		var day = t.getUTCDate();
		var month = t.getUTCMonth()+1;
		var year = t.getUTCFullYear();
		switch(unit){
			case time.SECOND:
			case time.FIVESECONDS:
			case time.TENSECONDS:
			case time.HALFMINUTE:
           		return hour+":"+((minute<10)?"0":"")+minute+":"+((second<10)?"0":"")+second;
			case time.MINUTE:
			case time.FIVEMINUTES:
			case time.TENMINUTES:
			case time.HALFHOUR:
				return hour+":"+((minute<10)?"0":"")+minute;
			case time.TWOHOURS:
			case time.FOURHOURS:
			case time.EIGHTHOURS:				
			case time.HOUR:
				return hour + ":00";
			case time.DAY:
			case time.TWODAYS:
			case time.FOURDAYS:
			case time.WEEK:
			case time.TWOWEEKS:
			case time.MONTH:
			case time.QUARTER:
			case time.SEMESTER:
           		return year+"-"+((month<10)?"0":"")+month+"-"+((day<10)?"0":"")+day;
			case time.YEAR:
			case time.TWOYEARS:
			case time.LUSTRUM:
			case time.DECADE:
			case time.TWODECADES:
			case time.HALFCENTURY:
			case time.CENTURY:
			case time.TWOCENTURIES:
			case time.HALFMILLENNIUM:
			case time.MILLENNIUM:
				return year;
			case time.TWOMILLENNIUMS:
			case time.FIVEMILLENNIUMS:
			case time.DECAMILLENNIUM:
			case time.TWODECAMILLENNIUMS:
			case time.FIVEDECAMILLENNIUMS:
			case time.HECTOMILLENNIUM:
			case time.TWOHECTOMILLENNIUMS:
			case time.FIVEHECTOMILLENNIUMS:
				return Math.floor(year/1000) + "k";
			case time.MEGENNIUM:
			case time.TWOMEGENNIUMS:
			case time.FIVEMEGENNIUMS:
			case time.DECAMEGENNIUM:
			case time.TWODECAMEGENNIUMS:
			case time.FIVEDECAMEGENNIUMS:
			case time.HECTOMEGENNIUM:
			case time.TWOHECTOMEGENNIUMS:
			case time.FIVEHECTOMEGENNIUMS:
				return Math.floor(year/1000000) + "mill";		
		}
	};

SimileAjax.DateTime.getTimeString = function( unit, t ){
		var time = SimileAjax.DateTime;
		switch(unit){
			case time.MILLISECOND:
			case time.SECOND:
			case time.FIVESECONDS:
			case time.TENSECONDS:
			case time.HALFMINUTE:
			case time.MINUTE:
			case time.FIVEMINUTES:
			case time.TENMINUTES:
			case time.HALFHOUR:
			case time.HOUR:
			case time.TWOHOURS:
			case time.FOURHOURS:
			case time.EIGHTHOURS:
				var m = t.getUTCMonth()+1;
				var d = t.getUTCDate();
				var h = t.getUTCHours();
				var min = t.getUTCMinutes();
				var s = t.getUTCSeconds();
           		return t.getUTCFullYear()+"-"+((m<10)?"0":"")+m+"-"+((d<10)?"0":"")+d+" "+((h<10)?"0":"")+h+":"+((min<10)?"0":"")+min+":"+((s<10)?"0":"")+s;
			case time.DAY:
			case time.TWODAYS:
			case time.FOURDAYS:
			case time.WEEK:
			case time.TWOWEEKS:
			case time.MONTH:
			case time.QUARTER:
			case time.SEMESTER:
				var m = t.getUTCMonth()+1;
				var d = t.getUTCDate();
           		return t.getUTCFullYear()+"-"+((m<10)?"0":"")+m+"-"+((d<10)?"0":"")+d;
			case time.YEAR:
			case time.TWOYEARS:
			case time.LUSTRUM:
			case time.DECADE:
			case time.TWODECADES:
			case time.HALFCENTURY:
			case time.CENTURY:
			case time.TWOCENTURIES:
			case time.HALFMILLENNIUM:
			case time.MILLENNIUM:
				return t.getUTCFullYear();
			case time.TWOMILLENNIUMS:
			case time.FIVEMILLENNIUMS:
			case time.DECAMILLENNIUM:
			case time.TWODECAMILLENNIUMS:
			case time.FIVEDECAMILLENNIUMS:
			case time.HECTOMILLENNIUM:
			case time.TWOHECTOMILLENNIUMS:
			case time.FIVEHECTOMILLENNIUMS:
				return Math.floor(t.getUTCFullYear() / 1000) + "k";
			case time.MEGENNIUM:
			case time.TWOMEGENNIUMS:
			case time.FIVEMEGENNIUMS:
			case time.DECAMEGENNIUM:
			case time.TWODECAMEGENNIUMS:
			case time.FIVEDECAMEGENNIUMS:
			case time.HECTOMEGENNIUM:
			case time.TWOHECTOMEGENNIUMS:
			case time.FIVEHECTOMEGENNIUMS:
				return Math.floor(t.getUTCFullYear() / 1000000) + "mill";		
		}
	};