define( [

"../core",
"../var/document",
"../var/documentElement",
"../var/support"

], function( jQuery, document, documentElement, support ) {

“use strict”;

( function() {

// Executing both pixelPosition & boxSizingReliable tests require only one layout
// so they're executed at the same time to save the second computation.
function computeStyleTests() {

        // This is a singleton, we need to execute it only once
        if ( !div ) {
                return;
        }

        container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
                "margin-top:1px;padding:0;border:0";
        div.style.cssText =
                "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
                "margin:auto;border:1px;padding:1px;" +
                "width:60%;top:1%";
        documentElement.appendChild( container ).appendChild( div );

        var divStyle = window.getComputedStyle( div );
        pixelPositionVal = divStyle.top !== "1%";

        // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
        reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;

        // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
        // Some styles come back with percentage values, even though they shouldn't
        div.style.right = "60%";
        pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;

        // Support: IE 9 - 11 only
        // Detect misreporting of content dimensions for box-sizing:border-box elements
        boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;

        // Support: IE 9 only
        // Detect overflow:scroll screwiness (gh-3699)
        // Support: Chrome <=64
        // Don't get tricked when zoom affects offsetWidth (gh-4029)
        div.style.position = "absolute";
        scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;

        documentElement.removeChild( container );

        // Nullify the div so it wouldn't be stored in the memory and
        // it will also be a sign that checks already performed
        div = null;
}

function roundPixelMeasures( measure ) {
        return Math.round( parseFloat( measure ) );
}

var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
        reliableTrDimensionsVal, reliableMarginLeftVal,
        container = document.createElement( "div" ),
        div = document.createElement( "div" );

// Finish early in limited (non-browser) environments
if ( !div.style ) {
        return;
}

// Support: IE <=9 - 11 only
// Style of cloned element affects source element cloned (#8908)
div.style.backgroundClip = "content-box";
div.cloneNode( true ).style.backgroundClip = "";
support.clearCloneStyle = div.style.backgroundClip === "content-box";

jQuery.extend( support, {
        boxSizingReliable: function() {
                computeStyleTests();
                return boxSizingReliableVal;
        },
        pixelBoxStyles: function() {
                computeStyleTests();
                return pixelBoxStylesVal;
        },
        pixelPosition: function() {
                computeStyleTests();
                return pixelPositionVal;
        },
        reliableMarginLeft: function() {
                computeStyleTests();
                return reliableMarginLeftVal;
        },
        scrollboxSize: function() {
                computeStyleTests();
                return scrollboxSizeVal;
        },

        // Support: IE 9 - 11+, Edge 15 - 18+
        // IE/Edge misreport `getComputedStyle` of table rows with width/height
        // set in CSS while `offset*` properties report correct values.
        // Behavior in IE 9 is more subtle than in newer versions & it passes
        // some versions of this test; make sure not to make it pass there!
        reliableTrDimensions: function() {
                var table, tr, trChild, trStyle;
                if ( reliableTrDimensionsVal == null ) {
                        table = document.createElement( "table" );
                        tr = document.createElement( "tr" );
                        trChild = document.createElement( "div" );

                        table.style.cssText = "position:absolute;left:-11111px";
                        tr.style.height = "1px";
                        trChild.style.height = "9px";

                        documentElement
                                .appendChild( table )
                                .appendChild( tr )
                                .appendChild( trChild );

                        trStyle = window.getComputedStyle( tr );
                        reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;

                        documentElement.removeChild( table );
                }
                return reliableTrDimensionsVal;
        }
} );

} )();

return support;

} );