/**
 * This class provides a dataview-based chart legend.
 */
Ext.define('Ext.chart.legend.Legend', {
    extend: 'Ext.chart.legend.LegendBase',
    alternateClassName: 'Ext.chart.Legend',
    xtype: 'legend',
    alias: 'legend.dom',
    type: 'dom',
    isLegend: true,
    isDomLegend: true,
 
    config: {
        /**
         * @cfg {Array} 
         * The rect of the legend relative to its container.
         */
        rect: null,
 
        /**
         * @cfg {Boolean} toggleable
         * `true` to allow series items to have their visibility
         * toggled by interaction with the legend items.
         */
        toggleable: true
 
        /**
         * @cfg {Ext.chart.legend.store.Store} store
         * The {@link Ext.chart.legend.store.Store} to bind this legend to.
         * @private
         */
    },
 
    baseCls: Ext.baseCSSPrefix + 'legend',
 
    horizontalCls: Ext.baseCSSPrefix + 'legend-horizontal',
    verticalCls: Ext.baseCSSPrefix + 'legend-vertical',
 
    toggleItem: function(index) {
        var disabledCount = 0,
            canToggle = true,
            disabled, store, count, record, i;
 
        if (!this.getToggleable()) {
            return;
        }
        
        store = this.getStore();
 
        if (store) {
            count = store.getCount();
 
            for (= 0; i < count; i++) {
                record = store.getAt(i);
 
                if (record.get('disabled')) {
                    disabledCount++;
                }
            }
 
            canToggle = count - disabledCount > 1;
 
            record = store.getAt(index);
 
            if (record) {
                disabled = record.get('disabled');
 
                if (disabled || canToggle) {
                    // This will trigger AbstractChart.onLegendStoreUpdate.
                    record.set('disabled', !disabled);
                }
            }
        }
    },
 
    onResize: function(width, height, oldWidth, oldHeight) {
        var me = this,
            chart = me.chart;
 
        if (!me.isConfiguring) {
            if (chart) {
                chart.scheduleLayout();
            }
        }
    }
});