<?xml version="1.0"?>
<!-- $Id$ -->
<!DOCTYPE script PUBLIC
	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
<!--

  Creates a script for validating that a field is required and/or has a minimum
  field length.

  Input symbols:
     field, form, validator:  As normal for a validation script.
	 requiredMessage: Message to display if the field is required yet blank.
	 minimumLengthMessage: Message to display if the field length is too short.

-->

<script>

<include-script resource-path="/org/apache/tapestry/valid/Validator.js"/>

<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
<input-symbol key="validator" class="org.apache.tapestry.valid.StringValidator" required="yes"/>
<input-symbol key="requiredMessage" class="java.lang.String"/>
<input-symbol key="minimumLengthMessage" class="java.lang.String"/>

<let key="function" unique="yes">
validate_${field.name}
</let>

<body>
function ${function}()
{
  var field = document.${form.name}.${field.name};
<if expression="validator.required">
  if (field.value.length == 0)
     return validator_invalid_field(field, "${requiredMessage}");
</if>

<if-not expression="validator.required">
  if (field.value.length == 0)
     return true;
</if-not>

<if expression="validator.minimumLength">
  if (field.value.length &lt; ${validator.minimumLength})
     return validator_invalid_field(field, "${minimumLengthMessage}");
</if>
  return true;
}
</body>

</script>