<script src="full-screen-test.js"></script>
<style>
#float { 
    margin: 10px 0 0 10px;
    height: 50px;
    width: 50px;
    float: left;
    background-color: red;
}
#clear {
    clear:left;
}
#one { 
    background-color: lightblue; 
    float: left;
}
#two { 
    background-color: lightgreen;
}
</style>
<body>
<div>This layout test checks that the offset positions of the blue and green divs does not change when the red div enters full-screen mode.  Press <button onclick="document.getElementById('float').webkitRequestFullScreen()">go full-screen</a> to begin.</div>
<div id="float"></div>
<div id="one">One</div>
<div id="clear" />
<span id="two">Two</span>
<script>
    var one = document.getElementById('one');
    var two = document.getElementById('two');

    // Bail out early if the full screen API is not enabled or is missing:
    if (Element.prototype.webkitRequestFullScreen == undefined) {
        logResult(false, "Element.prototype.webkitRequestFullScreen == undefined");
        endTest();
    } else {
        var oneState = {'offsetLeft': one.offsetLeft, 'offsetTop': one.offsetTop };
        var twoState = {'offsetLeft': two.offsetLeft, 'offsetTop': two.offsetTop };


        var callback;
        var fullscreenChanged = function(event)
        {
            if (callback)
                callback(event)
        };
        waitForEvent(document, 'webkitfullscreenchange', fullscreenChanged);
    
        var div = document.getElementById('float');

        var divEnteredFullScreen = function() {
            testExpected("document.webkitCurrentFullScreenElement", div);
            testExpected("one.offsetLeft", oneState.offsetLeft);
            testExpected("one.offsetTop", oneState.offsetTop);
            testExpected("two.offsetLeft", twoState.offsetLeft);
            testExpected("two.offsetTop", twoState.offsetTop);
            callback = cancelledFullScreen;
            runWithKeyDown(function(){document.webkitCancelFullScreen()});
        };
    
        var cancelledFullScreen = function() {
            testExpected("document.webkitCurrentFullScreenElement", null);
            testExpected("one.offsetLeft", oneState.offsetLeft);
            testExpected("one.offsetTop", oneState.offsetTop);
            testExpected("two.offsetLeft", twoState.offsetLeft);
            testExpected("two.offsetTop", twoState.offsetTop);
            callback = null;
            endTest();
        };

        callback = divEnteredFullScreen;
        runWithKeyDown(function(){div.webkitRequestFullScreen()});
    }
</script>
