<svg 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">
  <!--======================================================================-->
  <!--=  Copyright 2008 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="DAS" author="CM" status="accepted"
    version="$Revision: 1.11 $" testname="$RCSfile: animate-dom-01-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/animate.html#InterfaceSVGAnimationElement">
        <p>
          This tests the return value required for the
          SVGAnimationElement.getStartTime() method, as described in
          section 19.5 DOM Interfaces.
        </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        After the loading the document, some animations that have no
        visible effect will run.  The text "Test running..." will
        appear in the bottom right corner until the test has
        completed.  (This takes 2.5s.)
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        The test is passed if all seven rectangles are green once the animations
        have stopped running (i.e., 2.5s after the document has loaded.)
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: animate-dom-01-f.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">
    
    <text x='30' y='30'>Testing SVGAnimationElement.getStartTime()</text>

    <text x='340' y='340' display='none'>Test running...
      <set attributeName='display' to='inline' begin='0s' dur='2.5s'/>
    </text>

    <g id='g' display='none'/>

    <animate id='a1' attributeName='display' values='inline; inline'
             calcMode='discrete' begin='1s' dur='1s'/>
    <animate id='a2' attributeName='display' values='inline; inline'
             calcMode='discrete' begin='1s' dur='1s' fill='freeze'/>
    <animate id='a3' attributeName='display' values='inline; inline'
             calcMode='discrete' begin='indefinite' dur='1s'/>
    <animate id='a4' attributeName='display' values='inline; inline'
             calcMode='discrete' begin='indefinite; 100s; g.click; 1s; indefinite' dur='1s'/>
    <animate id='a5' attributeName='display' values='inline; inline'
             calcMode='discrete' begin='100s; 1s' dur='1s'/>
    <animate id='a6dep' attributeName='display' values='inline; inline'
             calcMode='discrete' begin='5s' dur='1s'/>
    <animate id='a6' attributeName='display' values='inline; inline'
             calcMode='discrete' begin='a6dep.begin+2s' dur='1s'/>

    <animate attributeName='display' values='inline; inline'
             calcMode='discrete' begin='0.5s' dur='1s' onbegin='before()'/>
    <animate attributeName='display' values='inline; inline'
             calcMode='discrete' begin='1.5s' dur='1s' onbegin='during()'/>
    <animate attributeName='display' values='inline; inline'
             calcMode='discrete' begin='2.5s' dur='1s' onbegin='after()'/>

    <g transform='translate(30,-10)'>
      <rect id='r1' y='50' width='25' height='25'/>
      <rect id='r2' y='80' width='25' height='25'/>
      <rect id='r3' y='110' width='25' height='25'/>
      <rect id='r4' y='140' width='25' height='25'/>
      <rect id='r5' y='170' width='25' height='25'/>
      <rect id='r6' y='200' width='25' height='25'/>
      <rect id='r7' y='230' width='25' height='25'/>
      <rect id='r8' y='260' width='25' height='25'/>
    </g>

    <g font-size='14' transform='translate(70,-15)'>
      <text y='72'>Called before a lone interval starts</text>
      <text y='102'>Called on an animation with no intervals</text>
      <text y='132'>Called during an interval</text>
      <text y='162'>Called after a lone interval ends, fill="remove"</text>
      <text y='192'>Called after a lone interval ends, fill="freeze"</text>
      <text y='222'>Called with multiple begin values</text>
      <text y='252'>Called with multiple begin values including "indefinite"</text>
      <text y='282'>Called with syncbase begin value</text>
    </g>
    <script><![CDATA[
      var i, ids = 'a1 a2 a3 a4 a5 a6 r1 r2 r3 r4 r5 r6 r7 r8'.split(' ');
      for (i in ids) {
        this[ids[i]] = document.getElementById(ids[i]);
      }

      function before() {
        try {
          if (a1.getStartTime() == 1) {
            r1.setAttributeNS(null, 'fill', 'lime');
          }
        } catch (e) {
          r1.setAttributeNS(null, 'fill', 'red');
        }

        r2.setAttributeNS(null, 'fill', 'red');
        try {
          a3.getStartTime();
        } catch (e) {
          if (e.code == DOMException.INVALID_STATE_ERR) {
            r2.setAttributeNS(null, 'fill', 'lime');
          }
        }

        try {
          if (a4.getStartTime() == 1) {
            r6.setAttributeNS(null, 'fill', 'lime');
          }
        } catch (e) {
          r6.setAttributeNS(null, 'fill', 'red');
        }

        try {
          if (a5.getStartTime() == 1) {
            r7.setAttributeNS(null, 'fill', 'lime');
          }
        } catch (e) {
          r7.setAttributeNS(null, 'fill', 'red');
        }

        try {
          if (a6.getStartTime() == 7) {
            r8.setAttributeNS(null, 'fill', 'lime');
          }
        } catch (e) {
          r8.setAttributeNS(null, 'fill', 'red');
        }
      }

      function during() {
        try {
          if (a1.getStartTime() == 1) {
            r3.setAttributeNS(null, 'fill', 'lime');
          }
        } catch (e) {
          r3.setAttributeNS(null, 'fill', 'red');
        }
      }

      function after() {
        r4.setAttributeNS(null, 'fill', 'red');
        try {
          a1.getStartTime();
        } catch (e) {
          if (e.code == DOMException.INVALID_STATE_ERR) {
            r4.setAttributeNS(null, 'fill', 'lime');
          }
        }

        r5.setAttributeNS(null, 'fill', 'red');
        try {
          a2.getStartTime();
        } catch (e) {
          if (e.code == DOMException.INVALID_STATE_ERR) {
            r5.setAttributeNS(null, 'fill', 'lime');
          }
        }
      }
    ]]></script>
  </g>
  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
  <text id="revision" x="10" y="340" stroke="none" 
    fill="black">$Revision: 1.11 $</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>
