/* Copyright IBM Corp. 2007  All Rights Reserved.                    */
OA.init= function() {
    this.Now = new Date();
    this.Now_Mills = this.Now.getTime();
};

OA.date = {
    MILLS_IN_DAY:       86400000,

    Days: dojo.i18n.getLocalization("dojo.i18n.calendar", "gregorian")['days-format-wide'],
    Month: dojo.i18n.getLocalization("dojo.i18n.calendar", "gregorian")['months-format-abbr'],
    Today: dojo.i18n.getLocalization("jsresources.common","date").today,
    Yesterday: dojo.i18n.getLocalization("jsresources.common","date").yesterday,
    Tomorrow: dojo.i18n.getLocalization("jsresources.common","date").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 way 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 / ( OA.date.MILLS_IN_DAY) );
        return dayDelta;
    },

    localize: function ( dateMillis, onlydate ) {
        var serverDate = new Date();
        serverDate.setTime( dateMillis );
        var dayDelta = OA.date.delta(dateMillis);
        var resultTime = "";

        if ( dayDelta <= 2 && dayDelta >= -2) {

            if ( dayDelta == 2 ) {
                //output "<day name> at hour"
                if(onlydate === undefined)
                    resultTime = OA.date.Days[ serverDate.getDay() ] + " " + OA.date.getLocalizedTime( serverDate );
                else
                    resultTime = OA.date.Days[ serverDate.getDay() ];
            } else if( dayDelta == 1 ) {
                //output "Yesterday at hour"
                if(onlydate === undefined)
                    //resultTime =  OA.date.Yesterday + OA.date.correctHoursAndMins( serverDate );
                    resultTime =  OA.date.Yesterday + OA.date.getLocalizedTime( serverDate );
                else
                    resultTime =  OA.date.Yesterday;
            } else if( dayDelta == 0 ) {
                //output "Today at hour"
                if(onlydate === undefined)
                    //resultTime =  OA.date.Today + OA.date.correctHoursAndMins( serverDate );
                    resultTime =  OA.date.Today + OA.date.getLocalizedTime( serverDate );
                else
                    resultTime =  OA.date.Today;
            } else if( dayDelta == -1 ) {
                //output "Tomorrow"
                resultTime =  OA.date.Tomorrow;
            } else if( dayDelta == -2 ) {
                //output "<day name>"
                resultTime = OA.date.Days[ serverDate.getDay() ];
            }

        } else  if ( OA.Now.getFullYear() == serverDate.getFullYear() ) {
            //output "<day num> <month>"
            var mainLocale = dojoLocale.substring(0,2);
            if(mainLocale == 'en'){
                resultTime = serverDate.getDate() + " " + OA.date.Month[ serverDate.getMonth() ];
            }else {
                resultTime = OA.date.getLocalizedDate(serverDate);
            }
        } else {
            //output "<day num> <month> <year>"
            var mainLocale = dojoLocale.substring(0,2);
            if(mainLocale == 'en'){
                resultTime = serverDate.getDate() + " " + OA.date.Month[ serverDate.getMonth() ] + " " + serverDate.getFullYear();
            }else {
                resultTime = OA.date.getLocalizedDate(serverDate);
            }
        }

        return "<span title=\"" + serverDate.toLocaleString() + "\">" + 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:dojoLocale });
    },

    getLocalizedDate: function( date ) {
        return dojo.date.format(date, {selector:'dateOnly',formatLength:'short', locale:dojoLocale });
    }
}

OA.init();

function hasClassName ( id, classToCheck ) {
    var element = document.getElementById( id );
    var classes = element.className;
    return /classToCheck/.test( classes );
}

function addClassName ( id, classToAdd ) {
    var element = document.getElementById( id );
    var classes = element.className;
    element.setAttribute( 'class', classes + ' ' + classToAdd );
    element.setAttribute( 'className', classes + ' ' + classToAdd );  //for IE
}
