/**
 * @override Ext.rtl.layout.component.Dock
 * This override adds RTL support to Ext.layout.component.Dock.
 */
Ext.define('Ext.rtl.layout.component.Dock', {
    override: 'Ext.layout.component.Dock',
 
    rtlPositions: {
        top: 'top',
        right: 'left',
        bottom: 'bottom',
        left: 'right'
    },
 
    getDockCls: function(dock) {
        // When in RTL mode it is necessary to reverse "left" and "right" css class names.
        // We have to do it this way (as opposed to using css overrides) because of the
        // !important border-width rules, e.g.:
        // .x-docked-left { border-right-width: 0 !important; }
        return 'docked-' +
            (this.owner.getInherited().rtl ? this.rtlPositions[dock] : dock);
    },
 
    // Neptune + RTL :)
 
    getBorderClassTable: function() {
        var me = this;
 
        if (!me.borderTablesInited) {
            me.initBorderTables();
        }
 
        return me.owner.getInherited().rtl ? me.noBorderClassTableRtl : me.noBorderClassTableLtr;
    },
 
    getBorderCollapseTable: function() {
        var me = this,
            table = me.callParent();
 
        if (!table.rtl) {
            me.setupBorderTable(table, table.rtl = []);
        }
 
        return me.owner.getInherited().rtl ? table.rtl : table;
    },
 
    initBorderTables: function() {
        var me = Ext.layout.component.Dock.prototype,
            ltr = me.noBorderClassTable,
            rtl = [];
 
        me.setupBorderTable(ltr, rtl);
 
        me.noBorderClassTableLtr = ltr;
        me.noBorderClassTableRtl = rtl;
 
        me.borderTablesInited = true;
    },
 
    /* eslint-disable indent, no-multi-spaces */
    setupBorderTable: function(ltr, rtl) {
                            // TRBL
        rtl[0]  = ltr[0];   // 0000
        rtl[1]  = ltr[4];   // 0001 = 1   ==> 0100 = 4
        rtl[2]  = ltr[2];   // 0010 = 2   ==> same
        rtl[3]  = ltr[6];   // 0011 = 3   ==> 0110 = 6
        rtl[4]  = ltr[1];   // 0100 = 4   ==> 0001 = 1
        rtl[5]  = ltr[5];   // 0101 = 5   ==> same
        rtl[6]  = ltr[3];   // 0110 = 6   ==> 0011 = 3
        rtl[7]  = ltr[7];   // 0111 = 7   ==> same
        rtl[8]  = ltr[8];   // 1000 = 8   ==> same
        rtl[9]  = ltr[12];  // 1001 = 9   ==> 1100 = 12
        rtl[10] = ltr[10];  // 1010 = 10  ==> same
        rtl[11] = ltr[14];  // 1011 = 11  ==> 1110 = 14
        rtl[12] = ltr[9];   // 1100 = 12  ==> 1001 = 9
        rtl[13] = ltr[13];  // 1101 = 13  ==> same
        rtl[14] = ltr[11];  // 1110 = 14  ==> 1011 = 11
        rtl[15] = ltr[15];  // 1111 = 15  ==> same
    }
    /* eslint-enable indent, no-multi-spaces */
});