Ext.applyIf(Ext.Element, {
    unitRe: /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,
    camelRe: /(-[a-z])/gi,
    opacityRe: /alpha\(opacity=(.*)\)/i,
    propertyCache: {},
    defaultUnit : "px",
    borders: {l: 'border-left-width', r: 'border-right-width', t: 'border-top-width', b: 'border-bottom-width'},
    paddings: {l: 'padding-left', r: 'padding-right', t: 'padding-top', b: 'padding-bottom'},
    margins: {l: 'margin-left', r: 'margin-right', t: 'margin-top', b: 'margin-bottom'},

    addUnits : function(size) {
        if (size === "" || size == "auto" || size === null || size === undefined) {
            size = size || '';
        }
        else if (!isNaN(size) || !this.unitRe.test(size)) {
            size = size + (this.defaultUnit || 'px');
        }
        return size;
    },

    
/** * Parses a number or string representing margin sizes into an object. Supports CSS-style margin declarations * (e.g. 10, "10", "10 10", "10 10 10" and "10 10 10 10" are all valid options and would return the same result) * @param {Number|String} box The encoded margins * @return {Object} An object with margin sizes for top, right, bottom and left */ parseBox : function(box) { if (typeof box != 'string') { box = box.toString(); } var parts = box.split(' '), ln = parts.length; if (ln == 1) { parts[1] = parts[2] = parts[3] = parts[0]; } else if (ln == 2) { parts[2] = parts[0]; parts[3] = parts[1]; } else if (ln == 3) { parts[3] = parts[1]; } return { top :parseFloat(parts[0]) || 0, right :parseFloat(parts[1]) || 0, bottom:parseFloat(parts[2]) || 0, left :parseFloat(parts[3]) || 0 }; },
/** * Parses a number or string representing margin sizes into an object. Supports CSS-style margin declarations * (e.g. 10, "10", "10 10", "10 10 10" and "10 10 10 10" are all valid options and would return the same result) * @param {Number|String} box The encoded margins * @return {String} An string with unitized (px) metrics for top, right, bottom and left */ unitizeBox : function(box){ var A = this.addUnits, B = this.parseBox(box); return A( B.top ) + ' ' + A( B.right ) + ' ' + A( B.bottom ) + ' ' + A( B.left ); }, // private camelReplaceFn : function(m, a) { return a.charAt(1).toUpperCase(); },
/** * Normalizes CSS property keys from dash delimited to camel case JavaScript Syntax. * For example: * */ normalize : function(prop) { return this.propertyCache[prop] || (this.propertyCache[prop] = prop == 'float' ? 'cssFloat' : prop.replace(this.camelRe, this.camelReplaceFn)); },
/** * Retrieves the document height * @returns {Number} documentHeight */ getDocumentHeight: function() { return Math.max(!Ext.isStrict ? document.body.scrollHeight : document.documentElement.scrollHeight, this.getViewportHeight()); },
/** * Retrieves the document width * @returns {Number} documentWidth */ getDocumentWidth: function() { return Math.max(!Ext.isStrict ? document.body.scrollWidth : document.documentElement.scrollWidth, this.getViewportWidth()); },
/** * Retrieves the viewport height of the window. * @returns {Number} viewportHeight */ getViewportHeight: function(){ return window.innerHeight; },
/** * Retrieves the viewport width of the window. * @returns {Number} viewportWidth */ getViewportWidth : function() { return window.innerWidth; },
/** * Retrieves the viewport size of the window. * @returns {Object} object containing width and height properties */ getViewSize : function() { return { width: window.innerWidth, height: window.innerHeight }; },
/** * Retrieves the current orientation of the window. This is calculated by * determing if the height is greater than the width. * @returns {String} Orientation of window: 'portrait' or 'landscape' */ getOrientation : function() { if (Ext.supports.OrientationChange) { return (window.orientation == 0) ? 'portrait' : 'landscape'; } return (window.innerHeight > window.innerWidth) ? 'portrait' : 'landscape'; },
/** Returns the top Element that is located at the passed coordinates * Function description * @param {Number} x The x coordinate * @param {Number} x The y coordinate * @return {String} The found Element */ fromPoint: function(x, y) { return Ext.get(document.elementFromPoint(x, y)); } });