<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="800" height="600" onload="startAnimation(evt)" xmlns="http://www.w3.org/2000/svg">
<script><![CDATA[
if (window.layoutTestController)
    window.layoutTestController.waitUntilDone();

    var step = 1, opacityStep = (1/50);
    var x = 30, y = 30, opacity = 0;
    var danceTime = 1;

    var count = 0;   
    var stopAfter = 75;

    var xdir = 0; // 0 = Add, 1 = Sub
    var ydir = 0; // 0 = Add, 1 = Sub
    var odir = 0; // 0 = Add, 1 = Sub

    var bounce;
    function startAnimation(evt) {
        bounce = evt.target.ownerDocument.getElementById("bounce");
        danceAround();
    }

    function danceAround() {
        count++;
        if (count == stopAfter) {
            if (window.layoutTestController)
                window.layoutTestController.notifyDone();
            return;
        }

        if (xdir == 0) {
            x = x + step;
        } else {
            x = x - step;
        }

        if (ydir == 0) {    
            y = y + step;
        } else {
            y = y - step;
        }

        if (x > (800 - 65)) {
            xdir = 1;
        } else if (x < 10) {
            xdir = 0;
        }

        if (y > (600 - 65)) {
            ydir = 1;
        } else if (y < 10) {
            ydir = 0;
        }

        if (odir == 0) {
            opacity = opacity + opacityStep;
        } else {
            opacity = opacity - opacityStep;
        }

        if (opacity > 1) {
            odir = 1;
        } else if (opacity < 0) {
            odir = 0;
        }
    
        bounce.setAttribute("transform", "translate(" + x + "," + y + ")");    
        bounce.setAttribute("opacity", opacity);

        setTimeout("danceAround()", danceTime);
    }
    ]]></script>
    
    <circle id="bounce" cx="35" cy="35" r="30" style="fill:navy;stroke:red;stroke-width:5px;"/>
</svg>
