<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="../xsltforms/xsltforms/xsltforms.xsl" type="text/xsl"?>
<html
 xmlns="http://www.w3.org/1999/xhtml"
 xmlns:xf="http://www.w3.org/2002/xforms"
 xmlns:ev="http://www.w3.org/2001/xml-events"
 xmlns:ps="http://www.web21.com/schemas"
 xmlns:htm="http://www.w3.org/1999/xhtml"
 >
 <head>
  <title>Persons and their hobbies</title>
  <link rel="stylesheet" href="../web21thhome.css" />
  <link rel="stylesheet href" href="xsltforms/samples.css"/>
  <style type="text/css">
   .inputdate { width:70px; }
   .inputkey { width:40px; }
   .inputkeyH { display:none; }
   .inputnameS { width:90px; }
   .inputnameL { width: 220px; }
   .about { width:300px; }
   .label { color:black }
   ul{list-style-type:none; margin:1px 1px 1px 1px;}
   .white {color:white; font-family:Tahoma;}
   .gray {color:silver; font-family:Tahoma;}
   .td1{width:40px;}
   .td1{width:100px;}
   .td1{width:100px;}
   .td1{width:80px;}
   .tabs{list-style-type:decimal;}
  </style>
  <xf:model>
   <xf:instance id="instance_root">
    <ps:root>
     <ps:clubs>
      <ps:club ps:flags="Hide" ps:status="I" ps:keyID="1">
       <ps:clubName>Les anciens artistes</ps:clubName>
       <ps:about>Club très fermé</ps:about>
       <ps:members ps:flags="" ps:status="I">
        <ps:member ps:status="I" ps:refKeyID="1">
         <ps:date>2003-10-12</ps:date>
         <ps:role>Président</ps:role>
         <ps:role>Baryton</ps:role>
         <ps:role>Choriste</ps:role>
         <ps:contrib>300</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="10">
         <ps:date>2003-11-11</ps:date>
         <ps:role>Secrétaire</ps:role>
         <ps:role>Piano</ps:role>
         <ps:role>Clarinette</ps:role>
         <ps:contrib>60</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="222">
         <ps:date>2003-10-02</ps:date>
         <ps:role>Chanteur soliste</ps:role>
         <ps:role>Flûte traversière</ps:role>
         <ps:contrib>120</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="4">
         <ps:date>2003-12-12</ps:date>
         <ps:role>Soprano</ps:role>
         <ps:role>Contrebasse</ps:role>
         <ps:contrib/>
        </ps:member>
       </ps:members>
      </ps:club>
      <ps:club ps:flags="Hide" ps:status="I" ps:keyID="2">
       <ps:clubName>Les bricoleurs du dimanche</ps:clubName>
       <ps:about>Des gens qui font des choses avec leurs mains et des outils</ps:about>
       <ps:members ps:flags="" ps:status="I">
        <ps:member ps:status="I" ps:refKeyID="10">
         <ps:date>2003-10-10</ps:date>
         <ps:role>Présidente</ps:role>
         <ps:role>Restauratrice de tabourets</ps:role>
         <ps:contrib>400</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="2">
         <ps:date>2003-10-11</ps:date>
         <ps:role>Généreux donateur anonyme</ps:role>
         <ps:contrib>2500</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="33">
         <ps:date>2003-11-20</ps:date>
         <ps:role>Expert en plantage de clous</ps:role>
         <ps:role>Scieur en biais</ps:role>
         <ps:contrib>120</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="4">
         <ps:date>2003-12-12</ps:date>
         <ps:role>Inspecteur des travaux en cours</ps:role>
         <ps:role>Démonteur d'horloges</ps:role>
         <ps:contrib>210</ps:contrib>
        </ps:member>
       </ps:members>
      </ps:club>
      <ps:club ps:flags="Hide" ps:status="I" ps:keyID="3">
       <ps:clubName>Les cuisiniers amateurs</ps:clubName>
       <ps:about>Régalez-vous avec eux</ps:about>
       <ps:members ps:flags="" ps:status="I">
        <ps:member ps:status="I" ps:refKeyID="51">
         <ps:date>2005-10-03</ps:date>
         <ps:role>Grand Marmiton</ps:role>
         <ps:role>Chef des fourneaux</ps:role>
         <ps:contrib>1200</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="52">
         <ps:date>2005-11-30</ps:date>
         <ps:role>Eplucheur de pommes</ps:role>
         <ps:role>Plongiste</ps:role>
         <ps:contrib>40</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="53">
         <ps:date>2006-01-02</ps:date>
         <ps:role>Goûte sauce</ps:role>
         <ps:role>Ouvreur de boîtes</ps:role>
         <ps:contrib>230</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="54">
         <ps:date>2006-02-25</ps:date>
         <ps:role>Patissière</ps:role>
         <ps:contrib>230</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="101">
         <ps:date>2006-03-10</ps:date>
         <ps:role>Webmaster</ps:role>
         <ps:role>Rotisseur</ps:role>
         <ps:contrib>180</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="203">
         <ps:date>2006-04-01</ps:date>
         <ps:role>Cookies designer</ps:role>
         <ps:contrib>300</ps:contrib>
        </ps:member>
       </ps:members>
      </ps:club>
      <ps:club ps:flags="Hide" ps:status="I" ps:keyID="4">
       <ps:clubName>General Purpose Software Ldt</ps:clubName>
       <ps:about>GPS can provide anybody with every application</ps:about>
       <ps:about>100% of GPS customers have bought a GPS application</ps:about>
       <ps:members>
        <ps:member ps:status="I" ps:refKeyID="100">
         <ps:date>2008-01-02</ps:date>
         <ps:role>CEO</ps:role>
         <ps:role>Sudoku Expert</ps:role>
         <ps:contrib>400</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="102">
         <ps:date>2008-01-02</ps:date>
         <ps:role>System and Network Administrator</ps:role>
         <ps:role>Program Management</ps:role>
         <ps:contrib>400</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="33">
         <ps:date>2008-03-10</ps:date>
         <ps:role>PDP11 Expert</ps:role>
         <ps:role>Miscellaneous maintenance</ps:role>
         <ps:contrib>120</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="103">
         <ps:date>2008-03-12</ps:date>
         <ps:role>Patch release manager</ps:role>
         <ps:contrib>130</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="4">
         <ps:date>2008-05-01</ps:date>
         <ps:role>Senior debugger analyst</ps:role>
         <ps:role>Web architect</ps:role>
         <ps:contrib>250</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="222">
         <ps:date>2008-05-02</ps:date>
         <ps:role>Software Quality Assurance</ps:role>
         <ps:role>ISO-9999999 Expert</ps:role>
         <ps:contrib>200</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="51">
         <ps:date>2008-06-03</ps:date>
         <ps:role>The programmer</ps:role>
         <ps:role>The technical writer</ps:role>
         <ps:role>The customer support</ps:role>
         <ps:role>The patch conceptor</ps:role>
         <ps:contrib>230</ps:contrib>
        </ps:member>
        <ps:member ps:status="I" ps:refKeyID="1">
         <ps:date>2008-06-13</ps:date>
         <!-- No role -->
         <role></role>
         <ps:contrib>200</ps:contrib>
        </ps:member>
       </ps:members>
      </ps:club>
     </ps:clubs>
     <ps:persons>
      <ps:person ps:keyID="1" ps:flags="" ps:status="I">
       <ps:firstName>Jean</ps:firstName>
       <ps:lastName>Bonheur</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="10" ps:flags="" ps:status="I">
       <ps:firstName>Nicole</ps:firstName>
       <ps:lastName>Sécotine</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="2" ps:flags="" ps:status="I">
       <ps:firstName>Nobody</ps:firstName>
       <ps:lastName>Anonymous</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="222" ps:flags="" ps:status="I">
       <ps:firstName>Jeremy</ps:firstName>
       <ps:lastName>Troubadour</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="33" ps:flags="" ps:status="I">
       <ps:firstName>Jean-Claude</ps:firstName>
       <ps:lastName>Tergal</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="4" ps:flags="" ps:status="I">
       <ps:firstName>Peter</ps:firstName>
       <ps:lastName>Flack</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="5" ps:flags="" ps:status="I">
       <ps:firstName>Louis</ps:firstName>
       <ps:lastName>Quatorze</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="51" ps:flags="" ps:status="I">
       <ps:firstName>Henri</ps:firstName>
       <ps:lastName>Treize</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="52" ps:flags="" ps:status="I">
       <ps:firstName>David</ps:firstName>
       <ps:lastName>Twenty</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="53" ps:flags="" ps:status="I">
       <ps:firstName>John</ps:firstName>
       <ps:lastName>Sixty</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="54" ps:flags="" ps:status="I">
       <ps:firstName>Margaret</ps:firstName>
       <ps:lastName>Teacher</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="100" ps:flags="" ps:status="I">
       <ps:firstName>Christopher</ps:firstName>
       <ps:lastName>Bond</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="101" ps:flags="" ps:status="I">
       <ps:firstName>Ingrid</ps:firstName>
       <ps:lastName>Rattlesnake</ps:lastName>
      </ps:person>
      <ps:person ps:keyID="203" ps:flags="" ps:status="I">
       <ps:firstName>Gertrud</ps:firstName>
       <ps:lastName>Kuchelein</ps:lastName>
      </ps:person>
     </ps:persons>
     <ps:personK></ps:personK>
     <ps:clubK></ps:clubK>
     <ps:switch ps:special="false()"/>
     <ps:admin ps:pswd="tiger" ps:id="scott"/>
     <ps:user ps:pswd="pswd" ps:id="user"/>
     <ps:toggle type="xsd:decimal"/>
    </ps:root>
   </xf:instance>

   <!-- Model Bindings -->
   <xf:bind nodeset="//ps:switch/@ps:special" type="xsd:boolean"/>
   <xf:bind nodeset="*//@ps:date" type="xsd:date"/>
   <xf:bind nodeset="*//@ps:refKeyID" readonly="//ps:switch/@ps:special=true() or (../@ps:status = 'I') or //ps:user@id='scott'"  type="xsd:decimal"/>
   <xf:bind nodeset="*//@ps:keyID" readonly="//ps:switch/@ps:special=true() or (../@ps:status = 'I') or //ps:user@id='scott'"  type="xsd:decimal"/>
   <xf:bind nodeset="ps:personK" calculate="max(//ps:person/@ps:keyID)+1" />
<!-- Verbose Trace 
   <xf:message ev:event="xforms-model-construct" level="modeless">xforms-model-construct</xf:message>
   <xf:message ev:event="xforms-model-construct-done" level="ephemeral">xforms-model-construct-done	</xf:message>
   <xf:message ev:event="xforms-ready" level="ephemeral">xforms-ready</xf:message>
   <xf:message ev:event="xforms-model-destruct" level="ephemeral">xforms-model-destruct</xf:message>
-->
  </xf:model>
 </head>
 <body onload="displayElapse();">
  <h1>Persons and Hobbies</h1>
  <h3>XForms multiple testing purpose</h3>
  <h4 class="white">Try it with different browsers, you will see some differences !</h4>
  <p class="white">
Time spent for making XForms ready: <span id="probeElapse" style="font-style:italic; font-weight:bold; font-size:larger;"></span> milliseconds.
  </p>
  <script type="text/javascript">
   function displayElapse(){var p; if (p = document.getElementById('probeElapse')) {p.appendChild(document.createTextNode(probeElapse));}}
  </script>
  <div id="xformControl">
   <span>
    <input type="checkbox" onclick="$('console').style.display = this.checked? 'block' : 'none';"  checked="checked"/> Debug
   </span>
  </div>
  <fieldset style="width:820px; margin-left:20px; ">
   <legend>Persons List</legend>
   <xf:repeat nodeset="//ps:person" id="xf_repeat_person">
    <div style="margin-left:5px;" >
     <fieldset style="width:350px; float:left; margin-left:5px; margin-top:5px;">
      <table>
       <tr valign="top" class="bg">
        <td>
         <xf:input ref="current()/@ps:keyID"  class="xsltfDisplayV inputkey ">
         </xf:input>
         <xf:output ref="current()/@ps:keyID" class="white inputkeyH"/>
        </td>
        <td>
         <xf:input ref="current()/ps:firstName" class="xsltfDisplayV inputnameS ">
         </xf:input>
        </td>
        <td>
         <xf:input ref="current()/ps:lastName" class="xsltfDisplayV inputnameS ">
         </xf:input>
        </td>
        <td>
         <span class="gray" >
          <xf:output ref="current()/@ps:flags" class="xsltfDisplayH  gray"/> - <xf:output ref="current()/@ps:status" class="xsltfDisplayH  gray"/>
         </span>
        </td>
       </tr>
      </table>
     </fieldset>
    </div>
   </xf:repeat>
   <div style="clear:both">
    <fieldset style="width:350px; float:left; margin-left:5px; margin-top:5px;">
     <legend>Menu</legend>
     <xf:trigger>
      <xf:label class="label">New person</xf:label>
      <xf:action ev:event="DOMActivate">
       <xf:insert nodeset="//ps:person" position="after" at="last()"/>
       <xf:setvalue ref="//ps:person[last()]/@ps:keyID" value="//ps:personK"/>
       <xf:setvalue ref="//ps:person[last()]/ps:firstName" value="'?'"/>
       <xf:setvalue ref="//ps:person[last()]/ps:lastName" value="'?'"/>
       <xf:setvalue ref="//ps:person[last()]/@ps:status" value="'New'"/>
      </xf:action>
     </xf:trigger>
     <xf:trigger>
      <xf:label class="label">Toggle ID R/W</xf:label>
      <xf:hint>Reserved for advanced users</xf:hint>
      <xf:help>
       <p>This feature should cause damage<br>Only experimented users will be allowed to use it<br>Currently only scott user has the authorization</br>
      </br>
      </p>
      </xf:help>
      <xf:action ev:event="DOMActivate">
       <xf:setvalue ref="//ps:switch/@ps:special" value="not(//ps:switch/@ps:special)"/>
      </xf:action>
     </xf:trigger>
    </fieldset>
   </div>
  </fieldset>
  <fieldset style="width:800px; margin-left:40px; ">
   <legend>Clubs</legend>
<!--
   <xf:select ref="ps:toggle" appareance="full">
    <xf:itemset nodeset="//ps:club">
     <xf:value ref="current()/@keyID"/>
     <xf:label ref="current()/ps:clubName"/>
    </xf:itemset>
   </xf:select>
-->
   <ol class="tabs white">
    
     <xf:repeat nodeset="//ps:club"><div>
      <li onclick="toggleClub(this);" class="tabs">
        <xf:output ref="ps:clubName" class="xsltfDisplayH inputnameL " />
       <div style="display:none">
        [<xf:output ref="current()/@ps:keyID" />]</div>
      </li></div>
     </xf:repeat>
    
   </ol>
   <xf:repeat nodeset="//ps:club">
    <fieldset style="margin-top:4px;">
     <legend class="white">
      <span style="display:none">
       <xf:ouput ref="current()/@ps:keyID"/>
      </span>
      <xf:output ref="ps:clubName"/>
     </legend>
     <table>
      <tr>
       <td>
        <xf:input ref="ps:clubName" class="xsltfDisplayV inputnameL">
         <xf:label>Club</xf:label>
        </xf:input>
       </td>
       <td>
        <xf:input ref="ps:about" style="width:400px" class="xsltfDisplayV">
         <xf:label>About</xf:label>
        </xf:input>
       </td>
      </tr>
      <tr class="txt">
       <td>
        <xf:output ref="count(./ps:members/ps:member)"/> member(s)
       </td>
       <td>
        Budget: <xf:output ref="sum(./ps:members/ps:member/ps:contrib)"/>
       </td>
      </tr>
     </table>
     <p><b>Members</b></p>
     <xf:repeat nodeset="./ps:members/ps:member">
      <table>
       <tr class="txt">
        <td><xf:output ref="//ps:person[@ps:keyID=current()/@ps:refKeyID]/ps:firstName"/></td>
        <td><xf:output ref="//ps:person[@ps:keyID=current()/@ps:refKeyID]/ps:lastName"/></td>
        <td>keyID: <xf:input ref="@ps:refKeyID" class="xsltfDisplayV "/></td>
       </tr>
       <tr>
        <td>
        </td>
        <td>
         <xf:input ref="ps:date" class="xsltfDisplayV inputdate ">
          <xf:label>Member since</xf:label>
         </xf:input>
        </td>
        <td>
         <xf:input ref="ps:contrib" class="xsltfDisplayV inputnameS">
          <xf:label>Contribution</xf:label>
         </xf:input>
        </td>
       </tr>
       <tr>
        <td></td>
        <td></td>
        <td>
         <table>
          <tr>
           <xf:group>
            <td>
             <xf:output ref="count(current()/ps:role)" style="width:200px">
              <xf:label>Roles List: </xf:label>
             </xf:output>
            </td>
            <xf:repeat nodeset="current()/ps:role">
             <td>
              <!-- IE BUG -->
              <xf:input ref="current()" style="width:200px">
              </xf:input>
             </td>
            </xf:repeat>
            <xf:trigger>
             <xf:label class="label">Add role</xf:label>
             <xf:action ev:event="DOMActivate">
              <xf:insert nodeset="current()/ps:role" position="after" at="last()"/>
             </xf:action>
            </xf:trigger>
           </xf:group>
          </tr>
         </table>
        </td>
       </tr>
      </table>
     </xf:repeat>
     <xf:trigger>
      <xf:label class="label">Add member</xf:label>
      <xf:action ev:event="DOMActivate">
       <xf:insert nodeset="./ps:members/ps:member" position="after" at="last()"/>
       <xf:setvalue ref="./ps:members/ps:member[last()]/@ps:refKeyID" value=""/>
       <xf:setvalue ref="./ps:members/ps:member[last()]/ps:date" value="substring-before(now(), 'T')"/>
       <xf:setvalue ref="./ps:members/ps:member[last()]/ps:contrib" value=""/>
       <xf:setvalue ref="./ps:members/ps:member[last()]/@ps:status" value="New"/>
      </xf:action>
     </xf:trigger>
    </fieldset>
   </xf:repeat>
  </fieldset>
  <div id="console"></div>
 </body>
</html>