Ext.define('Ext.overrides.calendar.view.Weeks', {
    override: 'Ext.calendar.view.Weeks',

    requires: [
        'Ext.calendar.form.Edit',
        'Ext.calendar.form.Add'
    ],

    doDestroy: function() {
        this.tip = Ext.destroy(this.tip);
        this.callParent();
    },

    privates: {
        doRefresh: function() {
            this.callParent();
            this.updateLayout();
        },

        hideOverflowPopup: function() {
            var tip = this.tip;

            if (tip) {
                tip.hide();
                tip.removeAll();
            }
        },

        showOverflowPopup: function(events, date, cell) {
            var me = this,
                tip = me.tip;

            if (!tip) {
                me.tip = tip = new Ext.tip.ToolTip({
                    ui: 'calendar-overflow',
                    anchor: true,
                    renderTo: document.body,
                    hidden: true,
                    autoHide: false,
                    cls: me.$overflowPopupCls,
                    minWidth: 200,
                    defaultAlign: 'tc-bc?'
                });
                me.tip.el.on('tap', 'handleEventTap', me, {
                    delegate: '.' + me.$eventCls
                });
            }

            tip.removeAll();

            events = me.createEvents(events, {
                cls: me.$staticEventCls
            });

            tip.add(events);
            tip.el.dom.setAttribute('data-date', Ext.Date.format(date, me.domFormat));
            tip.showBy(cell);
        }
    }
});
