<html>
<head>
  <title>Point mapping through 3D transform hierarchies</title>
  <script src="point-mapping-helpers.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript" charset="utf-8">

    function test()
    {
      // In non-test mode, show the mouse coords for testing
      if (!window.layoutTestController)
        document.body.addEventListener('mousemove', mousemoved, false);

      dispatchEvent(158, 83, 'card', 2, 2);
      dispatchEvent(309, 112, 'card', 198, 2);
      dispatchEvent(158, 338, 'card', 2, 198);
      dispatchEvent(309, 308, 'card', 198, 198);
    }
  </script>
  <style type="text/css" media="screen">
  #scene {
    position: absolute;
    border: 1px solid black;
    height: 400px;
    width: 400px;
    -webkit-perspective: 600;
    -webkit-transform-style: preserve-3d;
  }
  
  #container {
    position: absolute;
    height: 300px;
    width: 300px;
    margin: 50px;
    border: 1px solid blue;
    -webkit-transform-style: preserve-3d;
  }
  
  #card {
    position: absolute;
    top: 50px;
    left: 50px;
    height: 200px;
    width: 200px;
    background-color: #81AA8A;
    -webkit-transform-origin: right top;
    -webkit-transform: rotateY(45deg);
  }
  
  #card:hover {
    background-color: orange;
  }

  #results {
    position: absolute;
    left: 30px;
    top: 500px;
  }
  
  #mousepos {
    position: absolute;
    left: 430px;
    top: 400px;
    color: gray;
    font-size: smaller;
  }
  </style>
</head>
<body onclick="clicked(event)">

<div id="results"></div>

<div id="scene">
  <div id="container">
    <div id="card"></div>
  </div>
</div>

<div id="mousepos"></div>

</body>
</html>
