<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()
    {
      // Scroll so that frame view offsets are non-zero
      // window.scrollTo(20, 100);

      // document.getElementById('overflow').scrollLeft = 80;
      // document.getElementById('overflow').scrollTop = 60;
      
      // In non-test mode, show the mouse coords for testing
      if (!window.layoutTestController)
        document.body.addEventListener('mousemove', mousemoved, false);

      dispatchEvent(44, 44, 'box1', 2, 2);
      dispatchEvent(74, 68, 'box2', 2, 2);
      dispatchEvent(157, 164, 'box2', 98, 98);

      dispatchEvent(320, 68, 'box4', 2, 2);
      dispatchEvent(336, 87, 'box5', 2, 2);

      dispatchEvent(582, 87, 'box8', 2, 2);
      dispatchEvent(658, 174, 'box8', 86, 86);

      dispatchEvent(74, 314, 'box10', 2, 2);
      dispatchEvent(91, 351, 'box11', 2, 2);

      dispatchEvent(320, 314, 'box13', 2, 2);
      dispatchEvent(343, 351, 'box14', 2, 2);
      dispatchEvent(365, 375, 'box15', 2, 2);

      dispatchEvent(566, 314, 'box17', 2, 2);
      dispatchEvent(587, 352, 'box18', 2, 2);
      dispatchEvent(629, 401, 'box19', 2, 2);
      dispatchEvent(653, 422, 'box20', 2, 2);
      dispatchEvent(745, 505, 'box20', 86, 87);
    }
  </script>
  <style type="text/css" media="screen">
  
    body {
      margin: 0;
      border: 1px solid black;
      cursor: crosshair;
    }

    .test {
      display: inline-block;
      height: 200px;
      width: 200px;
      border: 1px solid black;
      margin: 20px;
    }

    .box {
      height: 100px;
      width: 100px;
      -webkit-box-sizing: border-box;
      background-color: #DDD;
      border: 1px solid black;
    }

    .box:hover {
      outline: 3px solid orange;
    }
    
    .container {
      height: 140px;
      width: 140px;
      margin: 20px;
      border: 1px solid black;
      -webkit-box-sizing: border-box;
      -webkit-perspective: 400;
    }
    
    .transformed-3d {
      position: relative;
      height: 100px;
      width: 100px;
      padding: 20px;
      margin: 20px;
      border: 1px solid black;
      background-color: #81AA8A;
      -webkit-transform-style: preserve-3d;
      -webkit-box-sizing: border-box;
      -webkit-transform: rotateY(-30deg);
    }

    .transformed-flat {
      position: relative;
      height: 100px;
      width: 100px;
      padding: 20px;
      margin: 20px;
      border: 1px solid black;
      background-color: #AA7994;
      -webkit-transform-style: flat;
      -webkit-box-sizing: border-box;
      -webkit-transform: rotateY(-30deg);
    }
    
    .inner {
      background-color: blue;
      height: 90px;
      width: 90px;
    }
    
    #results {
      position: absolute;
      left: 30px;
      top: 500px;
    }
    
    #mousepos {
      position: absolute;
      left: 430px;
      top: 550px;
      color: gray;
      font-size: smaller;
    }
  </style>
</head>
<body onclick="clicked(event)">

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

<div class="test">
  <!-- Simple transformed div in perpsective; preserve-3d on leaf -->
  <div class="container box" id="box1">
    <div class="transformed-3d box" id="box2">
    </div>
  </div>
</div>

<div class="test">
  <!-- Transformed, preserve-3d div in perpsective with non-layer child -->
  <div class="container box" id="box3">
    <div class="transformed-3d box" id="box4">
      <div class="inner box" id="box5">
      </div>
    </div>
  </div>
</div>

<div class="test">
  <!-- Transformed, preserve-3d div in perpsective with layer child -->
  <div class="container box" id="box6">
    <div class="transformed-3d box" id="box7">
      <div class="inner box" style="position: relative" id="box8">
      </div>
    </div>
  </div>
</div>
<br>
<div class="test">
  <!-- Nested transformed, preserve-3d divs in perpsective -->
  <div class="container box" id="box9">
    <div class="transformed-3d box" id="box10">
      <div class="transformed-3d box" style="-webkit-transform: translateZ(20px) rotateY(50deg)" id="box11">
      </div>
    </div>
  </div>
</div>

<div class="test">
  <!-- Transformed, preserve-3d div in perpsective with non-layer child -->
  <div class="container box" id="box12">
    <div class="transformed-3d box" id="box13">
      <div class="transformed-3d box" style="-webkit-transform: translateZ(10px) rotateY(50deg)" id="box14">
        <div class="inner box" id="box15">
        </div>
      </div>
    </div>
  </div>
</div>

<div class="test">
  <!-- Flatten in the middle of 3d -->
  <div class="container box" id="box16">
    <div class="transformed-3d box" id="box17">
      <div class="transformed-3d box" style="-webkit-transform: translateZ(10px) rotateY(20deg)" id="box18">
        <div class="transformed-flat box" style="-webkit-transform-style: flat; -webkit-transform: rotateX(-20deg)" id="box19">
          <div class="inner box" id="box20">
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

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

</body>
</html>
