/**
 *
 * This class enhances the {@link Ext.util.MixedCollection} class by allowing the
 * children objects to be destroyed on remove.
 *
 * @private
 *
 */
Ext.define('Ext.pivot.MixedCollection', {
    extend: 'Ext.util.MixedCollection',

    alternateClassName: [
        'Mz.aggregate.MixedCollection'
    ],

    removeAt: function(index) {
        Ext.destroy(this.callParent(arguments));
    },

    clear: function() {
        this.destroyItems();
        this.callParent(arguments);
    },

    removeAll: function() {
        this.destroyItems();
        this.callParent(arguments);
    },

    destroy: function() {
        // destroy all objects in the items array
        this.clear();
    },

    destroyItems: function() {
        var items = this.items,
            len, i, item;

        // when having hundreds of thousand of items Ext.destroy fails because
        // the "apply" function cannot accept so many arguments
        if (items) {
            len = items.length;

            for (i = 0; i < len; i++) {
                item = items[i];

                if (item.destroy) {
                    item.destroy();
                }
            }
        }
    }
});
