<?xml version="1.0"?>
<!--
   Copyright 2004 The Apache Software Foundation
  
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!-- $Id$ -->
<!DOCTYPE page-specification PUBLIC 
  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

<page-specification class="org.apache.tapestry.workbench.fields.Fields">

  <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate"/>

  <bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.valid.DateValidator">
  	<set-property name="required" expression="true"/>
  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
  </bean>

  <bean name="intValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  	<set-property name="required" expression="true"/>
  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@INT_MIN"/>
  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@INT_MAX"/>
  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
  	<set-property name="valueType">"int"</set-property>
  </bean>

  <bean name="doubleValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  	<set-property name="required" expression="true"/>
  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MIN"/>
  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MAX"/>
  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
  	<set-property name="valueType">"double"</set-property>
  </bean>


  <bean name="bigDecimalValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  	<set-property name="required" expression="true"/>
  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MIN"/>
  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MAX"/>
  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
  	<set-property name="valueType">"java.math.BigDecimal"</set-property>
  </bean>

  <bean name="longValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  	<set-property name="required" expression="true"/>
  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@LONG_MIN"/>
  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@LONG_MAX"/>
  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
  	<set-property name="valueType">"long"</set-property>
  </bean>

  <bean name="stringValidator" lifecycle="render" class="org.apache.tapestry.valid.StringValidator">
  	<set-property name="required" expression="true"/>
  	<set-property name="minimumLength" expression="@org.apache.tapestry.workbench.fields.Fields@STRING_MIN_LENGTH"/>
  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
  </bean>

  <bean name="emailValidator" lifecycle="render" class="org.apache.tapestry.valid.EmailValidator">
  	<set-property name="required" expression="true"/>
  	<set-property name="minimumLength" expression='6'/>
  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
  </bean>
  
  <component id="inputEnabled" type="Checkbox">
    <binding name="selected" expression="clientValidationEnabled"/> 
    <static-binding name="onclick">
    	javascript:this.form.submit();
    </static-binding>    
  </component>
  
  <component id="showError" type="ShowError">
     <binding name="delegate" expression="beans.delegate"/>
  </component>

  <component id="inputDate" type="ValidField">
    <binding name="validator" expression="beans.dateValidator"/>
    <binding name="value" expression="visit.dateValue"/>
    <static-binding name="displayName" value="Date Field"/>
  </component>

  <component id="inputInt" type="ValidField">
    <binding name="validator" expression="beans.intValidator"/>
    <binding name="value" expression="visit.intValue"/>
    <static-binding name="displayName" value="Integer Field"/>
  </component>

  <component id="inputDouble" type="ValidField">
    <binding name="validator" expression="beans.doubleValidator"/>
    <binding name="value" expression="visit.doubleValue"/>
    <static-binding name="displayName" value="Double Field"/>
  </component>

  <component id="inputBigDecimal" type="ValidField">
   <binding name="value" expression="visit.bigDecimalValue"/>
    <binding name="validator" expression="beans.bigDecimalValidator"/>
    <static-binding name="displayName" value="Big Decimal Field"/>
  </component>

  <component id="inputLong" type="ValidField">
    <binding name="value" expression="visit.longValue"/>
    <binding name="validator" expression="beans.longValidator"/>
    <static-binding name="displayName" value="Long Field"/>
  </component>

  <component id="inputString" type="ValidField">
    <binding name="value" expression="visit.stringValue"/>
    <binding name="validator" expression="beans.stringValidator"/>
    <static-binding name="displayName" value="String Field"/>
  </component>

  <component id="inputEmail" type="ValidField">
    <binding name="value" expression="visit.emailValue"/>
    <binding name="validator" expression="beans.emailValidator"/>
    <static-binding name="displayName" value="Email Field"/>
  </component>

  <context-asset name="continue" path="images/Continue.gif"/>

</page-specification>

