nY.NOTICE_CHECKER = {

    // 10 seconds
    MIN_CHECK_NOTICE_INTERVAL : 10000,
    // 10 minutes
    MAX_CHECK_NEW_POST_INTERVAL : 600000,
    PUNISHMENT_RATIO : 1.5,
    REWARD_RATIO : 0.75,

    // 1/2 minute
    checkNoticeInterval : 30000,
    checkNoticeIntervalId : 0,

    // cached jquery objects
    $cache : {},

    // cache
    cache : {},

    noticeCount : 0,

    init : function () {
        var _self = this;
        // cache some jquery objects
        _self.$cache.$noticeBar = $("#notice-bar");
        _self.cache.pageTitle = document.title;

        if (_self.$cache.$noticeBar.size() > 0) {
            _self.startNoticeCheck();
        }
    },

    punishInterval : function() {
        this.checkNoticeInterval = parseInt(this.checkNoticeInterval * this.PUNISHMENT_RATIO);
        if (this.checkNoticeInterval > this.MAX_CHECK_NOTICE_INTERVAL) {
            this.checkNoticeInterval = this.MAX_CHECK_NOTICE_INTERVAL;
        }
    },

    rewardInterval : function() {
        this.checkNoticeInterval = parseInt(this.checkNoticeInterval * this.REWARD_RATIO);
        if (this.checkNoticeInterval < this.MIN_CHECK_NOTICE_INTERVAL) {
            this.checkNoticeInterval = this.MIN_CHECK_NOTICE_INTERVAL;
        }
    },

    startNoticeCheck : function () {
        var _self = this;
        this.checkNoticeIntervalId = setTimeout(function(){_self.checkNotices()}, this.checkNoticeInterval);
    },

    stopNoticeCheck : function () {
        clearTimeout(this.checkNoticeIntervalId);
    },

    checkNotices : function () {
        var _self = this;

        var url = project_settings.ROOT_URL + 'people/account/notification/check/';
        $.ajax({
            type: "GET",
            url: url,
            cache: false,
            dataType: "json",
            success: function(data) {
                if (data.notice_count <= 0) {
                    _self.punishInterval();
                    _self.startNoticeCheck();
                    _self.$cache.$noticeBar.slideUp(500);
                } else {
                    _self.$cache.$noticeBar.slideDown(1000);
                    document.title = _self.cache.pageTitle + ' (' + gettext("new notices") + ')';
                    _self.stopNoticeCheck();
                    _self.rewardInterval();
                }
                _self.noticeCount = data.count;
            },
            error: function(data) {
                //nY.UTILS.error_alert(gettext('Error loading more new posts. You could try again after refreshing the page.'));
            },
            complete: function() {
            }
        });
    }

};

$(document).ready(function() {
    nY.NOTICE_CHECKER.init();
});

