/**
 * Date and Time management
 *
 * Internal format: "YYYY/MM/DD HH:MM:SS"
 *
 */

(function () {

    var assets = null;

    $.extend(TRAVEL.namespace('TRAVEL.DateTime'), {
        /**
         * Build string of date interval
         *
         * @param da {Date} first date of interval
         * @param db {Date} last date of interval
         */
        getDateInterval: function (a, b) {
            var str;

            var da = {
                "date": a.getDate(),
                "month": assets.month[a.getMonth()],
                "year": a.getFullYear()
            };
            var db = {
                "date": b.getDate(),
                "month": assets.month[b.getMonth()],
                "year": b.getFullYear()
            };

            if (da.month !== db.month) {
                if (da.year !== db.year) {
                    str = da.date + '&nbsp;' + da.month + '&mdash;' +
                          db.date + '&nbsp;' + db.month + '&nbsp;' + db.year;
                } else {
                    str = da.date + '&nbsp;' + da.month + '&mdash;' +
                          db.date + '&nbsp;' + db.month + '&nbsp;' + da.year;
                }
            } else {
                if (da.date !== db.date) {
                    str = da.date + '&mdash;' +
                          db.date + '&nbsp;' + da.month + '&nbsp;' + da.year;
                } else {
                    str = da.date + '&nbsp;' + da.month + '&nbsp;' + da.year;
                }
            }
            return str;
        },

        getDayOfWeekText: function (d, sundayFirst) {
//            if (!!sundayFirst) {
                d = d + 1;
//            }
            d = (7 + d) % 7;
            return assets.day[d];
        },

        /**
         * Get month of year as text
         * @param m         {Integer} month of year
         * @param zeroBased {Boolean} true if month is start from 0 else start from 1
         */
        getMonthOfYearText: function (m, zeroBased) {
            if (!zeroBased) {
                m = m - 1;
            }
            m = (12 + m) % 12;
            return assets.month[m];
        },

        /**
         * Get textual presentation of given date
         * @param d {Date}
         */
        getDate: function (d) {
            return '%d %s %d'.sprintf(d.getDate(), assets.month[d.getMonth()], d.getFullYear());
        },

        isWeekend: function (d) {
            var day = new Date(d).getDay();
            return (day === 0) || (day === 6);
        },

        /**
         * Private assets accessor
         */
        setAssets: function (obj) {
            assets = obj;
        },
        getAssets: function () {
            return assets;
        }

    });
})();