/* 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,
    
    //NEEDSWORK DOJO Month: dojo.i18n.getLocalization("dojo.i18n.calendar", "gregorian")['months-format-abbr'],
    //NEEDSWORK DOJO Days: dojo.i18n.getLocalization("dojo.i18n.calendar", "gregorian")['days-format-wide'],
    //NEEDSWORK DOJO Yesterday: OA.getDateString( 'yesterday' ),
    //NEEDSWORK DOJO Today: OA.getDateString( 'today' ),
    //NEEDSWORK DOJO Tomorrow: OA.getDateString( 'tomorrow' ),
    
    //NEEDSWORK DOJO Remove these
    Month: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    Days: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
    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 / ( 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 = djConfig.locale.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 = djConfig.locale.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 ) {
        //NEEDSWORK DOJO return dojo.date.format(date, {selector:'timeOnly',formatLength:'short', locale: djConfig.locale });
        return "";
    },
    
    getLocalizedDate: function( date ) {
        //NEEDSWORK DOJO return dojo.date.format(date, {selector:'dateOnly',formatLength:'short', locale: djConfig.locale });
         return "";
    }
    
}

function getLocalBrowserTime ( dateMillis ) {
            var serverDate = new Date();
            serverDate.setTime (dateMillis);

            return serverDate.toLocaleString();
}

OA.init= function() {
    this.Now = new Date();
    this.Now_Mills = this.Now.getTime();
};


OA.init();


