// @tag core
 
/**
 * @class Ext.GlobalEvents
 */
 
Ext.define('Ext.overrides.GlobalEvents', {
    override: 'Ext.GlobalEvents',
 
    /**
     * @event resumelayouts
     * Fires after global layout processing has been resumed in {@link
     * Ext.Component#resumeLayouts}.
     */
    
    attachListeners: function() {
        var me = this,
            docElement, bufferedFn;
        
        // In IE9- when using legacy onresize event via attachEvent or onresize property,
        // the event may fire for *content size changes* as well as actual document view
        // size changes. See this: https://msdn.microsoft.com/en-us/library/ms536959(v=vs.85).aspx
        // and this: http://stackoverflow.com/questions/1852751/window-resize-event-firing-in-internet-explorer
        // The amount of these events firing all at once can be entirely staggering, and they
        // often happen during layouts so we have to be über careful to execute as few JavaScript
        // statements as possible to improve overall framework performance.
        if (Ext.isIE8) {
            docElement = Ext.getDoc().dom.documentElement;
            bufferedFn = Ext.Function.createBuffered(me.fireResize, me.resizeBuffer, me);
            
            Ext.getWin().dom.attachEvent('onresize', function() {
                if (docElement.clientWidth  !== Ext.GlobalEvents.curWidth ||
                    docElement.clientHeight !== Ext.GlobalEvents.curHeight) {
                    bufferedFn();
                }
            });
        }
        
        me.callParent();
    },
 
    deprecated: {
        5: {
            methods: {
                addListener: function(ename, fn, scope, options, order, caller, eventOptions) {
                    var name,
                        readyFn;
 
                    // The "ready" event was removed from Ext.globalEvents in 5.0 in favor of
                    // Ext.onReady().  This function adds compatibility for the ready event
 
                    if (ename === 'ready') {
                        readyFn = fn;
                    } else if (typeof ename !== 'string') {
                        for (name in ename) {
                            if (name === 'ready') {
                                readyFn = ename[name];
                            }
                        }
                    }
 
                    if (readyFn) {
                        //<debug>
                        Ext.log.warn("Ext.on('ready', fn) is deprecated.  Please use Ext.onReady(fn) instead.");
                        //</debug>
                        Ext.onReady(readyFn);
                    }
 
                    this.callParent([ename, fn, scope, options, order, caller, eventOptions]);
                }
            }
        }
    }
});