<svg version="1.1" baseProfile="full" onload="CreatePath();setTimeout('AnimatePath();', 0);" 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="[reviewer]" author="ED" status="created"
    version="$Revision: 1.5 $" testname="$RCSfile: paths-dom-02-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/paths.html#DOMInterfaces">
        <p>
          This test is designed to test the PathSegList interface. At first a flower-like shape with 6 petals should be displayed.
          The roundness and number of petals are then animated using script.
        </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        The roundness of the petals is animated from star-like sharp petals to softly rounded petals and back again, and is repeated like that until the animation stops.
        The number of petals should increase one by one until the flower has a total of 12 petals, and then go back one by one until it has 6 petals, then increase again one by one until the flower has 9 petals.
        Then the animation will stop. The rendered image should look exactly like the reference image.
      </p>
      <p>
        If the flower is clicked after the animation has finished, it will restart the animation and repeat it for some time.
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        [[Describe the pass criteria of the test here. The pass criteria is what
        should be displayed when the test is run.]]
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: paths-dom-02-f.svg,v $</title>
  <defs>
    <font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F">
      <font-face-src>
        <font-face-uri xlink:href="../custom/resources/SVGFreeSans.svg#ascii"/>
      </font-face-src>
    </font-face>
  </defs>
  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
    <script><![CDATA[
       if (window.testRunner)
        testRunner.waitUntilDone();
      var offset_angle = 90;
      var current_shift = 0;
      var shift_inc = 1;
      var THRESHOLD = 60;
      var segments_added = 0;
      var seg_diff = 1;
      var adjust_count = 0;
      var anim_count = 0;
      var adjust_count_max = 8;
      var anim_count_max = 10;
      var stopped = false;

      function DegToRad(degs)
      {
      return (degs * Math.PI) / 180;
      }

      function CreatePath()
      {
      var pathelm = document.getElementById("mypath");
      var pathlist = pathelm.pathSegList;

      var move = pathelm.createSVGPathSegMovetoAbs(240 + 30 * Math.cos(DegToRad(offset_angle - 30)),
      180 + 30 * Math.sin(DegToRad(offset_angle - 30)));
      pathlist.appendItem(move);

      var angle = offset_angle;
      for (var i = 0; i < 6; i++)
      {
      var x, y, xcp, ycp;

      x = 240 + 30 * Math.cos(DegToRad(angle + 30));
      y = 180 + 30 * Math.sin(DegToRad(angle + 30));

      xcp = 240 + 120 * Math.cos(DegToRad(angle));
      ycp = 180 + 120 * Math.sin(DegToRad(angle));

      var curve = pathelm.createSVGPathSegCurvetoCubicAbs(x, y,
      xcp, ycp,
      xcp, ycp);

      pathlist.appendItem(curve);

      angle += 60;
      }

      pathlist.appendItem(pathelm.createSVGPathSegClosePath());
      setTimeout('AdjustPath()', 0);
      }

      function AddSegment()
      {
      var pathelm = document.getElementById("mypath");
      var pathlist = pathelm.pathSegList;

      var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
      var angle = offset_angle;
      var inc_angle = 360/(segments+1);
      var shift_v_x, shift_v_y, xcp, ycp;

      var move = pathlist.getItem(0);
      move.x = 240 + 30 * Math.cos(DegToRad(offset_angle - inc_angle/2));
      move.y = 180 + 30 * Math.sin(DegToRad(offset_angle - inc_angle/2));

      for (var i = 0; i < segments; i++)
      {
      var curve = pathlist.getItem(1+i);

      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));

      xcp = 240 + 120 * Math.cos(DegToRad(angle));
      ycp = 180 + 120 * Math.sin(DegToRad(angle));

      curve.x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
      curve.y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));

      curve.x1 = xcp - shift_v_x;
      curve.y1 = ycp - shift_v_y;

      curve.x2 = xcp + shift_v_x;
      curve.y2 = ycp + shift_v_y;

      angle += inc_angle;
      }

      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));

      xcp = 240 + 120 * Math.cos(DegToRad(angle));
      ycp = 180 + 120 * Math.sin(DegToRad(angle));

      var x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
      var y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));

      var curve = pathelm.createSVGPathSegCurvetoCubicAbs(x, y,
      xcp - shift_v_x,
      ycp - shift_v_y,
      xcp + shift_v_x,
      ycp + shift_v_y);

      pathlist.insertItemBefore(curve, pathlist.numberOfItems-1);
      }

      function RemoveSegment()
      {
      var pathelm = document.getElementById("mypath");
      var pathlist = pathelm.pathSegList;

      var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
      var angle = offset_angle;
      var inc_angle = 360/(segments-1);
      var shift_v_x, shift_v_y, xcp, ycp;

      var move = pathlist.getItem(0);
      move.x = 240 + 30 * Math.cos(DegToRad(offset_angle - inc_angle/2));
      move.y = 180 + 30 * Math.sin(DegToRad(offset_angle - inc_angle/2));

      for (var i = 0; i < segments-1; i++)
      {
      var curve = pathlist.getItem(1+i);

      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));

      xcp = 240 + 120 * Math.cos(DegToRad(angle));
      ycp = 180 + 120 * Math.sin(DegToRad(angle));

      curve.x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
      curve.y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));

      curve.x1 = xcp - shift_v_x;
      curve.y1 = ycp - shift_v_y;

      curve.x2 = xcp + shift_v_x;
      curve.y2 = ycp + shift_v_y;

      angle += inc_angle;
      }

      pathlist.removeItem(pathlist.numberOfItems-2);
      }

      function AdjustPath()
      {
      if (seg_diff > 0)
      {
      AddSegment();
      }
      else
      {
      RemoveSegment();
      }

      segments_added += seg_diff;

      if (segments_added > 5)
      seg_diff = -1;
      else if (segments_added <= 0)
      seg_diff = 1;

      if(adjust_count < adjust_count_max)
      {
      adjust_count++;
      setTimeout('AdjustPath()', 0);
      }
      }

      function AnimatePath()
      {
      var pathelm = document.getElementById("mypath");
      var pathlist = pathelm.pathSegList;

      var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
      var angle = offset_angle;
      var inc_angle = 360/segments;
      for (var i = 0; i < segments; i++)
      {
      var curve = pathlist.getItem(1+i);

      var shift_v_x, shift_v_y, xcp, ycp;

      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));

      xcp = 240 + 120 * Math.cos(DegToRad(angle));
      ycp = 180 + 120 * Math.sin(DegToRad(angle));

      curve.x1 = xcp - shift_v_x;
      curve.y1 = ycp - shift_v_y;

      curve.x2 = xcp + shift_v_x;
      curve.y2 = ycp + shift_v_y;

      angle += inc_angle;
      }

      current_shift += shift_inc;
      if (current_shift >= THRESHOLD || current_shift < 0)
      shift_inc = -shift_inc;

      if(adjust_count >= adjust_count_max)
      {
      anim_count++;
      }

      if(anim_count < anim_count_max)
      setTimeout('AnimatePath();', 0);
      else {
        document.getElementById("mypath").addEventListener("click", function func() { adjust_count_max=32768;anim_count_max=32768; AdjustPath(); AnimatePath(); }, false);
        if (window.testRunner)
          testRunner.notifyDone();
      }
      }

    ]]></script>
    <path d="" id="mypath" stroke="black" fill="blue"/>
  </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="#000"/>
  <!-- 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>
