<?xml version="1.0"?>
<!-- @ Copyright 1998-2003 W3C (MIT, ERCIM, Keio), All Rights Reserved. See http://www.w3.org/Consortium/Legal/. @ -->
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"
      xmlns:conf="http://www.w3.org/2002/vxml-conformance">

<!--
    1138: Assigning a form item's variable to undefined via ECMAScript
    makes it eligible to be visited by the FIA, without resetting
    the error counters associated with the item.
-->

  <catch>
    <conf:comment>
      Toplevel caught event <value expr="_event"/>
    </conf:comment>
    <conf:fail expr="_event"/>
  </catch>



  <form id="check_error_counters">
    <var name="did_clear" expr="false"/>
    <var name="do_initial" expr="true"/>

    <conf:grammar utterance="alpha">
      <conf:key name="f" value="1234"/>
    </conf:grammar>

    <initial name="i" cond="do_initial">
      <conf:noinput/>
      <noinput count="1">
        <if cond="did_clear">
          <conf:fail reason="initial error counter was reset to one."/>
        </if>
        <assign name="f" expr="1234"/>
        <reprompt/>
        <goto nextitem="block_clear_initial"/>
      </noinput>
      <noinput count="2">
        <assign name="f" expr="1234"/>
        <reprompt/>
        <goto nextitem="block_clear_initial"/>
      </noinput>
    </initial>

    <!-- turn off the initial, so we can test the field -->
    <block name="block_clear_initial">
      <assign name="do_initial" expr="false"/>
      <assign name="f" expr="undefined"/>
    </block>

    <!-- Should never be filled in directly. -->
    <field name="f">
      <conf:speech value="alpha"/>
      <filled>
        <throw event="org.w3c.foo"/>
      </filled>
      <catch event="org.w3c.foo" count="1">
        <if cond="did_clear">
          <conf:fail reason="field error counter was reset to one."/>
        </if>
        <reprompt/>
      </catch>
      <catch event="org.w3c.foo" count="2">
        <reprompt/>
      </catch>
    </field>

    <record name="r">
      <conf:speech value="bravo"/>
      <filled>
        <throw event="org.w3c.foo"/>
      </filled>
      <catch event="org.w3c.foo" count="1">
        <if cond="did_clear">
          <conf:fail reason="record error counter was reset to one."/>
        </if>
        <reprompt/>
      </catch>
      <catch event="org.w3c.foo" count="2">
        <reprompt/>
      </catch>
    </record>

    <subdialog name="s" src="#prompt">
      <filled>
        <throw event="org.w3c.foo"/>
      </filled>
      <catch event="org.w3c.foo" count="1">
        <if cond="did_clear">
          <conf:fail reason="sub dialog error counter was reset to one."/>
        </if>
        <reprompt/>
      </catch>
      <catch event="org.w3c.foo" count="2">
        <reprompt/>
      </catch>
    </subdialog>

    <transfer name="t" dest="anunsupporteduri:+xxx-xxx-xxxxxxx">
      <!-- Assume platform doesn't handle <transfer> (or fails on our odd URI). -->
      <error>
        <conf:comment> Caught event <value expr="_event"/> in transfer element. </conf:comment>
        <assign name="t" expr="1234"/>
        <throw event="org.w3c.foo"/>
      </error>
      <filled>
        <throw event="org.w3c.foo"/>
      </filled>
      <catch event="org.w3c.foo" count="1">
        <if cond="did_clear">
          <conf:fail reason="transfer error counter was reset to one."/>
        </if>
        <reprompt/>
      </catch>
      <catch event="org.w3c.foo" count="2">
        <reprompt/>
      </catch>
    </transfer>

    <!-- Assume platform doesn't handle <object> (or our odd object). -->
    <object name="o" classid="awierduri://astupidobjectname">
      <error>
        <conf:comment> Caught event <value expr="_event"/> in object element. </conf:comment>
        <assign name="o" expr="1234"/>
        <throw event="org.w3c.foo"/>
      </error> 
      <filled>
        <throw event="org.w3c.foo"/>
      </filled>
      <catch event="org.w3c.foo" count="1">
        <if cond="did_clear">
          <conf:fail reason="object error counter was reset to one."/>
        </if>
        <reprompt/>
        <goto nextitem="block_clear"/>
      </catch>
      <catch event="org.w3c.foo" count="2">
        <reprompt/>
        <goto nextitem="block_clear"/>
      </catch>
    </object>

    <!-- Reset all the form items (but just once). -->
    <block name="block_clear">
      <if cond="!did_clear">
        <script>
          i = undefined;
          f = undefined;
          r = undefined;
          s = undefined;
          t = undefined;
          o = undefined;
          did_clear = true;
          do_initial = true;
          block_clear = undefined;
          block_clear_initial = undefined;
        </script>
      <else/>
        <conf:pass/>
      </if>
    </block>

    <block>
      <conf:fail reason="Should not be here."/>
    </block>
  </form>


  <form id="prompt">
    <var name="a" expr="'AAA'"/>
    <block>
      <return namelist="a"/>
    </block>
  </form>

</vxml>
