<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Transparent Flash Test File</title>
<style>
    #overlayDiv {
        position: relative;
        color: white;
        background: black;
        top: 50px;
        left: -50px;
        width: 200px;
        opacity: 0.6;
        float: left;
        z-index: 1;
        display: none;
    } 
    embed { 
        float: left; 
        -webkit-transition: -webkit-transform 3s ease-in;
    }
</style>
<script>
    function testVisibility() {
        var flashPlugin = document.getElementById('flashPlugin');
        if (flashPlugin.style.display == 'none') {
            flashPlugin.style.display = 'block';
        } else {
            flashPlugin.style.display = 'none';
        }
    }

    function testResize() {
        var flashPlugin = document.getElementById('flashPlugin');
        flashPlugin.width = flashPlugin.width == "200" ? "100" : "200";
        flashPlugin.height = flashPlugin.height == "200" ? "100" : "200";
    }

    function testMove() {
        var flashPlugin = document.getElementById('flashPlugin');
        var t = parseInt(flashPlugin.style.top);
        flashPlugin.style['padding-left'] = "100px";
    }

    function testAnimation() {
        var flashPlugin = document.getElementById('flashPlugin');
        flashPlugin.style.webkitTransform='rotate(180deg)';
    }

    function toggleDivOverFlash() {
        var overlayDiv = document.getElementById('overlayDiv');
        if (overlayDiv.style.display != 'block') {
            overlayDiv.style.display = 'block';
        } else {
            overlayDiv.style.display = '';
        }
    }
</script>
</head>

<body>

    <b> Verify the following tests with and without the page scrolled (including seeming unrelated test cases like printing). <br/>
        For the Qt port, test with QGraphicsView enabled and disabled</b> <br/><br/>

    <!-- <embed id="flashPlugin" src="http://www.youtube.com/v/loXfcsXRB-w&#038;hl=en&#038;fs=1" --!>
    <embed id="flashPlugin" src="test.swf"
           width="200" height="200"
           type="application/x-shockwave-flash">
    </embed>

    <div id="overlayDiv"> This is an overlay that will display over the flash. In addition, you should be able to see
            the flash through the div contents. </div>

    <div style="clear:both"/>

    <input type="checkbox" name="visibilityCheckBox"> Verify if the flash toggles visibility
            <input type="button" id="visibilityButton" value="Test Visibility" onClick="testVisibility()"/><br/>

    <input type="checkbox" name="resizeCheckBox"> Verify if the flash resizes when element is resized
            <input type="button" id="resizeButton" value="Test Resize" onClick="testResize()"/><br/>

    <input type="checkbox" name="moveCheckBox"> Verify if the flash moves when element is moved
            <input type="button" id="moveButton" value="Test Move" onClick="testMove()"/><br/>

    <input type="checkbox" name="animationCheckBox"> Verify css animations with flash
            <input type="button" id="animationButton" value="Test Animation" onClick="testAnimation()"/><br/>

    <input type="checkbox" name="printCheckBox"> Verify if printing displays flash on the print preview and printer output <br/>

    <input type="checkbox" name="zoomCheckBox"> Verify if elements in flash are correctly painted and clickable after zooming <br/>

    <input type="checkbox" name="screenshotBox"> Verify if taking a screenshot from QtTestBrowser displays flash <br/>

    <input type="checkbox" name="paintSystemsCheckBox"> Verify if flash is displayed with graphicssystems - raster, opengl <br/>

    <input type="checkbox" name="focusCheckBox"> Verify if shifting focus back and forth from flash to html works
            <input value="Shift focus here"/></br/>

    <input type="checkbox" name="testZIndex"> Test if html can display over flash
            <input type="button" value="Toggle transparent div" onClick="toggleDivOverFlash()"<br/>

    <input type="checkbox" name="testZIndex"> Test opaque mode by setting wmode to opaque <br/>

    <br/>
</body>

</html>
