<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>
