    /*
     * @class Ext.util.translatable.ScrollPosition
     * @private
     *
     * Scroll position implementation
     */
    Ext.define('Ext.util.translatable.ScrollPosition', {
        extend: 'Ext.util.translatable.Abstract',

        wrapperWidth: 0,
        wrapperHeight: 0,

        baseCls: 'x-translatable',

        getWrapper: function() {
            var wrapper = this.wrapper,
                baseCls = this.baseCls,
                element = this.getElement(),
                container;

            if (!wrapper) {
                container = element.getParent();

                if (!container) {
                    return null;
                }

                wrapper = element.wrap({
                    className: baseCls + '-wrapper'
                });

                wrapper.insertFirst(Ext.Element.create({
                    className: baseCls + '-stretcher'
                }));

                element.addCls(baseCls);
                container.addCls(baseCls + '-container');

                this.container = container;
                this.wrapper = wrapper;

                this.refresh();
            }

            return wrapper;
        },

        doTranslate: function(translation) {
            var wrapper = this.getWrapper(),
                wrapperDom;

            if (wrapper) {
                wrapperDom = wrapper.dom;

                if ('x' in translation) {
                    wrapperDom.scrollLeft = this.wrapperWidth - translation.x;
                }

                if ('y' in translation) {
                    wrapperDom.scrollTop = this.wrapperHeight - translation.y;
                }
            }

            return this.callParent(arguments);
        },

        refresh: function() {
            var wrapper = this.getWrapper(),
                wrapperDom;

            if (wrapper) {
                wrapperDom = wrapper.dom;

                this.wrapperWidth = wrapperDom.offsetWidth;
                this.wrapperHeight = wrapperDom.offsetHeight;

                this.callParent(arguments);
            }
        },

        destroy: function() {
            var element = this.getElement(),
                wrapper = this.getWrapper(),
                baseCls = this.baseCls;

            if (wrapper) {
                this.container.removeCls(baseCls + '-container');
                element.unwrap();
                element.removeCls(baseCls);
                wrapper.destroy();
            }

            this.callParent(arguments);
        }
    });