<?xml version="1.0" encoding="utf-8"?>
<!--
  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 SwitchSymbolFormatter. -->
<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 mx.formatters.SwitchSymbolFormatter;                
            import mx.events.ValidationResultEvent;			
            
            private var vResult:ValidationResultEvent;

            // Event handler to validate and format input.            
            private function Format():void
            {
                vResult = scVal.validate();

                if (vResult.type==ValidationResultEvent.VALID) {
                    var switcher:SwitchSymbolFormatter=new SwitchSymbolFormatter('#');

                    formattedSCNumber.text = 
                        switcher.formatValue("Formatted Social Securty number: ###-##-#### ", scNum.text);
                }

                else {
                    formattedSCNumber.text= "";
                }
            }
        ]]>
    </fx:Script>

	<fx:Declarations>
    	<mx:SocialSecurityValidator id="scVal" source="{scNum}" property="text"/>
	</fx:Declarations>

    <mx:Panel title="SwitchSymbolFormatter Example"
			  paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"
			  height="100%" width="100%">

        <mx:Label text="Enter a 9 digit Social Security number with no separator characters:"/>
        <mx:TextInput id="scNum" text="" maxChars="9" width="50%"/>

        <mx:Button label="Validate and Format" click="Format()"/>
        <mx:TextInput id="formattedSCNumber" editable="false" width="75%"/>

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