<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"
           wmode="transparent"
           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/>

    <br/>
</body>

</html>
