<?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 Formatter 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[

            // Event handler to format the input.            
            private function Format():void
            {
                // The format() method returns the formatted String,
                // or an empty String if there is an error.
                var formattedVal:String = numberFormatter.format(inputVal.text);

                if (formattedVal.length==0) {
                    // If there is an error, the Format.error property 
                    // contains the reason.
                	formattedNumber.text=numberFormatter.error;
                }
                
                else {
                    formattedNumber.text=formattedVal;
                }
            }
        ]]>
    </fx:Script>

	<fx:Declarations>
    	<mx:NumberFormatter id="numberFormatter"/>
	</fx:Declarations>

    <mx:Panel title="NumberFormatter Example" height="100%" width="100%">

        <mx:Form>
            <mx:FormItem label="Enter number - a letter is invalid:">
                <mx:TextInput id="inputVal" text="" width="75%"/>
            </mx:FormItem>

            <mx:FormItem label="Formatted number: ">
                <mx:TextInput id="formattedNumber" editable="false" width="75%"/>
            </mx:FormItem>

            <mx:FormItem>
                <mx:Button label="Validate and Format" click="Format()"/>
            </mx:FormItem>
        </mx:Form>
  
    </mx:Panel>
</mx:Module>
