<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
      contributor license agreements.  See the NOTICE file distributed with
      this work for additional information regarding copyright ownership.
      The ASF licenses this file to You 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.
  -->

<!-- Simple example to demonstrate the Validator class. -->
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
				paddingBottom="0" paddingTop="0" paddingLeft="0" paddingRight="0"
				height="100%" width="100%">

     <fx:Script>
        <![CDATA[

			// Import necessary classes.
            import mx.controls.Alert;
			import mx.events.ValidationResultEvent;
			
			// Event listener for the valid and invalid events.
			private function handleValid(eventObj:ValidationResultEvent):void {
				if(eventObj.type==ValidationResultEvent.VALID)	
				    // Enable Submit button.
					submitButton.enabled = true;
				else
					submitButton.enabled = false;
			}

			// Submit form is everything is valid. 
			private function submitForm():void {
				Alert.show("Form Submitted!");
			}

        ]]>
    </fx:Script>

    <!-- The Validator class defines the required property and the validator events
         used by all validator subclasses. -->
	<fx:Declarations>
	    <mx:Validator id="reqValid" required="true"
	        source="{fname}" property="text" 
	        valid="handleValid(event)" invalid="handleValid(event)"/>
	</fx:Declarations>
        
    <mx:Panel title="Validator Example"	
				paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"
				height="100%" width="100%">

        <mx:Form>
            <mx:Text width="100%"
                text="Enter a value in the Name field before you can submit. The E-mail field is optional."/>

            <mx:FormItem label="Name: " required="true">
                <mx:TextInput id="fname" width="100%"/>
            </mx:FormItem>

            <mx:FormItem label="E-mail address: " required="false">
                <mx:TextInput id="email" width="100%"/>
            </mx:FormItem>
            
            <mx:FormItem>
                <mx:Button id="submitButton" enabled="false" 
                    label="Submit" click="submitForm()"/>
            </mx:FormItem>
        </mx:Form>

    </mx:Panel>
</mx:Module>
