<html>
  <head>

    <script src="../../resources/js-test-pre.js"></script>
    <script src="resources/spatial-navigation-utils.js"></script>
    <script type="application/javascript">

    var resultMap = [
      ["Down", "1"],
      ["Down", "3"],
      ["Down", "5"],
      ["Up", "3"],
      ["Right", "4"],
      ["Right", "6"],
      ["Left", "4"],
      ["Up", "2"],
      ["Left", "1"],
      ["Up", "start"],
      ["DONE", "DONE"]
    ];

    if (window.testRunner) {
      testRunner.dumpAsText();
      testRunner.setSpatialNavigationEnabled(true);
      testRunner.overridePreference("WebKitTabToLinksPreferenceKey", 1);
      testRunner.waitUntilDone();
    }

    function runTest()
    {
      // starting the test itself: get to a known place.
      document.getElementById("start").focus();

      initTest(resultMap, testCompleted);
    }

    function testCompleted()
    {
      if (window.testRunner)
        testRunner.notifyDone();
    }

    window.onload = runTest;

    </script>
    <script src="../resources/js-test-post.js"></script>
  </head>

  <body id="some-content" xmlns="http://www.w3.org/1999/xhtml">
  <map name="map" title="map" id="firstmap">
    <area shape="rect" coords="20,20,70,70" href="#" id="1">
    <area shape="rect" coords="130,20,180,70" href="#" id="2">
    <area shape="rect" coords="20,130,70,180" href="#" id="3">
    <area shape="rect" coords="130,130,180,180" href="#" id="4">
  </map>

    <a id="start" href="a"><img src="resources/green.png" width=50px height=50px></a>
    <div>
      <img src="resources/green.png" width=200px height=200px usemap="#map"><a id="6" href="a"><img src="resources/green.png" width=50px height=50px></a>
    </div>
    <a id="5" href="a"><img src="resources/green.png" width=50px height=50px></a>
    <div id="console"></div>
    <div>This test tests that areas of an imagemap can be reached with spatial navigation.</div>
  </body>
</html>

