<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.testRunner)
        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 {
      position: absolute;
      height: 200px;
      width: 200px;
      border: 1px solid black;
      margin: 20px;
    }

	.one {
      top: 1px;
	  left: 1px;
	}
	.two {
	  top: 1px;
	  left: 247px;
	}
	.three {
	  top: 1px;
	  left: 493px;
	}
	.four {
	  top: 247px;
	  left: 1px;
	}
	.five {
	  top: 247px;
	  left: 247px;
	}
	.six {
	  top: 247px;
	  left: 493px;
	}

    .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 one">
  <!-- 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 two">
  <!-- 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 three">
  <!-- 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>
<div class="test four">
  <!-- 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 five">
  <!-- 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 six">
  <!-- 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>
