<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Test Changing Keyframes Using CSSOM</title>
  <style type="text/css" media="screen">
    #box {
        position: relative;
        left: 0;
        top: 0;
        height: 100px;
        width: 100px;
        background-color: blue;
        -webkit-animation-duration: 1s;
        -webkit-animation-timing-function: linear;
        -webkit-animation-name: "anim";
    }
    @-webkit-keyframes "anim" {
        from { left: 100px; }
        10%  { left: 200px; }
        90%  { left: 200px; }
        to   { left: 300px; }
    }
    </style>
    <script src="resources/animation-test-helpers.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">
    
    const expectedValues = [
      // [animation-name, time, element-id, property, expected-value, tolerance]
      [null, 0.5, "box", "left", 200, 10],
      [null, 1, "box", "top", 100, 10],
    ];

    function findKeyframesRule(rule)
    {
        var ss = document.styleSheets;
        for (var i = 0; i < ss.length; ++i) {
            for (var j = 0; j < ss[i].cssRules.length; ++j) {
                if (ss[i].cssRules[j].type == window.CSSRule.WEBKIT_KEYFRAMES_RULE && ss[i].cssRules[j].name == rule)
                    return ss[i].cssRules[j];
            }
        }
        
        return null;
    }
        
    function change()
    {
        // change keyframes
        var keyframes = findKeyframesRule("anim");
        keyframes.deleteRule("0%");
        keyframes.deleteRule("40%");
        keyframes.deleteRule("60%");
        keyframes.deleteRule("100%");
        keyframes.insertRule("0% { top: 50px; }");
        keyframes.insertRule("10% { top: 100px; }");
        keyframes.insertRule("90% { top: 100px; }");
        keyframes.insertRule("100% { top: 150px; }");
        document.getElementById('box').style.webkitAnimationName = "anim";
    }
    
    function startChange()
    {
        document.getElementById('box').style.webkitAnimationName = "none";
        setTimeout("change()", 0);
    }
    
    function setup()
    {
        setTimeout("startChange()", 600);
    }
    
    runAnimationTest(expectedValues, setup);
    
  </script>
</head>
<body>
This test performs an animation of the left property and makes sure it is animating. Then it stops
the animation, changes the keyframes to an animation of the top property, restarts the animation
and makes sure top is animating.
<div id="box">
</div>
<div id="result">
</div>
</body>
</html>
