<svg version="1.1" baseProfile="basic" id="svg-root"
  width="100%" height="100%" viewBox="0 0 480 360"
  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="Jon Ferraiolo" status="accepted"
    version="$Revision: 1.5 $" testname="$RCSfile: interact-order-02-b.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/interact.html#UIEventProcessing">
      <p>
        Test event bubbling of event attributes, part b.
      </p>
      <p>
        The two circles test whether events are handled in the
        proper order. Events listeners and event attributes are processed
        before hyperlink processing, which is processed before text selection.

      </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>Click on the first circle, then the second, and lastly the new third circle.</p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Clicking on the first circle should change the circle from black to red.  Clicking
        on the second circle should take you to another SVG file titled "Hyperlink target for
        interact-order-02.svg.  Cliking on the circle in this SVG file should return you to the orginal
        two circles.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: interact-order-02-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">
    <defs>
      <script type="text/ecmascript"><![CDATA[

        function bubbleYes(evt, color){
        // Get Document
        var target = evt.target;
        target.setAttribute('fill', '' +color);
        }
        function bubbleNo(evt, color){
        // Get Document
        var target = evt.target;
        target.setAttribute('fill', '' +color);
        evt.stopPropagation();
        evt.preventDefault();
        }

      ]]></script>
    </defs>
    <text font-family="Arial" font-size="40" x="60" y="45">Event bubbling - b</text>
    <g id="background">
      <rect fill="#EEE" stroke="#000" x="10" y="60" width="460" height="120"/>
      <rect fill="#FFF" stroke="#000" x="10" y="180" width="460" height="120"/>
    </g>
    <g fill="#000" font-family="Arial" font-size="40">
      <!-- Test the order of events -->
      <!-- Ensure that events get the event before the hyperlink. -->
      <a xlink:href="../images/interact-order-02-b-targ.svg">
        <circle onclick="bubbleNo(evt, 'red')" onmouseout="bubbleNo(evt, 'inherit')" cx="70" cy="120" r="50"/>
        <circle onclick="bubbleYes(evt, 'blue')" onmouseout="bubbleNo(evt, 'inherit')" cx="70" cy="240" r="50"/>
      </a>
      <text x="135" y="110">
        Click on circle,
      </text>
      <text x="135" y="150">
        circle turns red
      </text>
      <text x="135" y="230">
        Click on circle,
      </text>
      <text x="135" y="270">
        hyperlink
      </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.5 $</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>
