<?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.EmailValidator" required="yes"/>
<input-symbol key="requiredMessage" class="java.lang.String"/>
<input-symbol key="minimumLengthMessage" class="java.lang.String"/>
<input-symbol key="emailFormatMessage" class="java.lang.String"/>

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

<body>
function ${function}()
{
  var field = document.${form.name}.${field.name};

  strValue = field.value.replace(/ /g,"");

  field.value = strValue;

<if expression="validator.required">
  if (strValue.length == 0)
     return validator_invalid_field(field, "${requiredMessage}");
</if>

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

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

  atIndex = strValue.indexOf("@");
  if ((atIndex == -1) || (atIndex == 0) || (atIndex == strValue.length -1))
     return validator_invalid_field(field, "${emailFormatMessage}");

  return true;
}
</body>

</script>