<html>
<head>
  <title>Transition End Events</title>
  <style type="text/css" media="screen">
    .box {
      position: relative;
      left: 0;
      height: 100px;
      width: 100px;
      margin: 10px;
      background-color: blue;
      -webkit-transition-property: width, left, background-color, height, top;
      -webkit-transition-duration: 0.5s;
    }
    
    .box1 {
      left: 50px;
    }
    
    .box2 {
      background-color: red;
      left: 50px;
    }
    
    .box3 {
      width: 150px;
      background-color: green;
      left: 50px;
      height: 120px;
      -webkit-transition-duration: 0.6s;
    }

    .box4 {
      left: 100px;
      height: 140px;
      -webkit-transition-duration: 0.3s;
    }

    .box5 {
      /* nothing */
    }

  </style>
  <script src="transition-end-event-helpers.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript" charset="utf-8">
    
    var expectedEndEvents = [
      // [property-name, element-id, elapsed-time, listen]
      ["background-color", "box2", 0.5, false],
      ["background-color", "box3", 0.6, false],
      ["height", "box3", 0.6, false],
      ["height", "box4", 0.3, false],
      ["left", "box1", 0.5, false],
      ["left", "box2", 0.5, false],
      ["left", "box3", 0.6, false],
      ["left", "box4", 0.3, false],
      ["width", "box3", 0.6, false]
    ];
    
    function transitionElement(index)
    {
      var boxes = document.body.getElementsByClassName('box');
      boxes[index-1].className = "box box" + index;
    }

    function setupTest()
    {
      var boxes = document.body.getElementsByClassName('box');
      for (var i = 0; i < boxes.length; ++i) {
        boxes[i].addEventListener("webkitTransitionEnd", recordTransitionEndEvent, false);
      }

      window.setTimeout(function() { transitionElement(1); }, 100);
      window.setTimeout(function() { transitionElement(2); }, 150);
      window.setTimeout(function() { transitionElement(3); }, 200);
      window.setTimeout(function() { transitionElement(4); }, 50);
      window.setTimeout(function() { transitionElement(5); }, 150);
    }
    
    runTransitionTest(expectedEndEvents, 2.0, setupTest);
    
  </script>
</head>
<body>

<p>Initiating transitions on various properties of all boxes, with different start times on the transitions.</p>

<div id="container">
  <div id="box1" class="box"></div>
  <div id="box2" class="box"></div>
  <div id="box3" class="box"></div>
  <div id="box4" class="box"></div>
  <div id="box5" class="box"></div>
</div>

<div id="result"></div>

</body>
</html>