<svg version="1.1" baseProfile="basic" id="svg-root"
  width="100%" height="100%" viewBox="0 0 480 360" onload="initTest(evt)"
  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <!--======================================================================-->
  <!--=  SVG 1.1 2nd Edition Test Case                                     =-->
  <!--======================================================================-->
  <!--=  Copyright 2009 World Wide Web Consortium, (Massachusetts          =-->
  <!--=  Institute of Technology, European Research Consortium for         =-->
  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
  <!--=  All Rights Reserved.                                              =-->
  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
  <!--======================================================================-->
  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
    template-version="1.4" reviewer="SVGWG" author="Vincent Hardy" status="accepted"
    version="$Revision: 1.8 $" testname="$RCSfile: interact-dom-01-b.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/interact.html#DOMInterfaces">
        <p>
          Verify basic support for DOM event listener registration. The root svg element
          has an onload handler where a click event listener is registered on group element 'Start Button'.
        </p>
      <p>
        If UI events listener registration is supported (and UI events),
        when the user clicks on the button a text node is inserted reading "Event Listeners supported".
      </p>
      <p>
        At the end of the test, the start test button is changed to green,
        and the click event listener is removed from the the start button.
      </p>
      <p>
        Subsequent clicks on the start button should cause no effect if
        the event listener has been removed successfully.
        If additional lines of text appear in the document that say "Event Listeners supported",
        then the implementation has not successfully removed the event listener.
      </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
	<p>This test requires user interaction. Run the test, then click on the grey rectangle.
	  If it turns green, click it again.
	</p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        After clicking once on the button, the rectangle should have a green fill 
	and the text "Event listeners supported" should appear, once.
        
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: interact-dom-01-b.svg,v $</title>
  <defs>
    <font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F">
      <font-face-src>
        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
      </font-face-src>
    </font-face>
  </defs>
  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">

    <script type="text/ecmascript">
      <![CDATA[

      var svg_ns = "http://www.w3.org/2000/svg"
      var doc;
      var content;
      var startButton;
      var buttonRect;
      var yLocation = 280;
      //
      // onload handler for top level svg element. Sets a UI event listener for
      // the test start button.
      //
      function initTest(evt){
      // Get Document
      var target = evt.target;
      doc = target.ownerDocument;
      content = doc.getElementById("test-body-content");

      // Get start rect and add a UI listener
      startButton = doc.getElementById("startButton");
      buttonRect = doc.getElementById("buttonRect");
      startButton.addEventListener("click", uiEventDetected, false);
      }

      //
      // click handler for 'startButton' rect element.
      //
      function uiEventDetected(evt) {
      //
      // Add an element to show that UI event was detected
      //
      var newText = doc.createElementNS(svg_ns, 'text');
      newText.setAttribute('x', '5');
      newText.setAttribute('y', yLocation);
      newText.setAttribute('font-size', '40');
      var message = "Event Listeners supported";
      var textContent = doc.createTextNode(message);
      newText.appendChild(textContent);
      content.appendChild(newText);

      startButton.removeEventListener("click", uiEventDetected, false);

      // Make start button green
      buttonRect.setAttribute("fill", "#88ff88");
      buttonRect.setAttribute("stroke", "black");

      // If test does not successfully remove the event listener, then
      // a second click will cause a subsequent text string to appear 50 units
      // below the first new text string.
      yLocation = yLocation + 50;
      }

    ]]>
    </script>

    <!-- ===================================================================== -->
    <!-- Start button                                                          -->
    <!-- ===================================================================== -->
    <g id="startButton">
      <rect id="buttonRect" x="65" y="20" width="350" height="200" fill="#dddddd" stroke="black"/>
      <text font-size="54" x="120" y="130">Start Test</text>
    </g>
  </g>
  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
    <text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.8 $</text>
  </g>
  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/>
  <!-- comment out this watermark once the test is approved -->
  <!--<g id="draft-watermark">
    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
  </g>-->
</svg>
