Ext.define('Ext.rtl.grid.plugin.HeaderResizer', {
    override: 'Ext.grid.plugin.HeaderResizer',

    adjustColumnWidth: function(offsetX) {
        if (!this.headerCt.getHierarchyState().rtl !== !Ext.rootHierarchyState.rtl) {
            offsetX = -offsetX;
        }
        this.callParent(arguments);
    },

    adjustConstrainRegion: function(region, t, r, b, l) {
        return (!this.headerCt.getHierarchyState().rtl !== !Ext.rootHierarchyState.rtl) ?
            region.adjust(t, -l, b, -r) : this.callParent(arguments);
    },

    calculateDragX: function(gridSection) {
        var gridX = gridSection.getX(),
            mouseX = this.tracker.getXY('point')[0];

        return (!this.headerCt.getHierarchyState().rtl !== !Ext.rootHierarchyState.rtl) ?
            (gridX + gridSection.getWidth() - mouseX) : (mouseX - gridX);

    },

    getDragHdX: function() {
        var el = this.dragHd.el;
        return this.headerCt.getHierarchyState().rtl ? el.rtlGetLocalX() : el.getLocalX();
    },

    getViewOffset: function(gridSection) {
        var headerCtRtl = this.headerCt.getHierarchyState().rtl,
            borderWidth = gridSection.el.getBorderWidth(headerCtRtl ? 'r': 'l'),
            view = gridSection.view,
            offset = view.getX() - gridSection.getX();
            
        if (!headerCtRtl !== !Ext.rootHierarchyState.rtl) {
            offset = -(offset + view.getWidth() - gridSection.getWidth());
        }

        return offset - borderWidth;
    },

    setMarkerX: function(marker, x) {
        this.headerCt.getHierarchyState().rtl ? marker.rtlSetLocalX(x) : marker.setLocalX(x);
    }
});