<?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.

-->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   width="100%" height="100%" viewSourceURL="srcview/index.html">
	<fx:Style>
		@namespace s "library://ns.adobe.com/flex/spark";
		@namespace mx "library://ns.adobe.com/flex/mx";
		s|Label {
			color: #FFFFFF;
			font-weight: bold;
		}
		#titleL {
			font-size: 20;
		}
		s|ComboBox {
			alternating-item-colors: #424242;
		}
		
		s|Form {
			background-color: #424242;
		}
	</fx:Style>
	
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			
			[Bindable]
			private var locales:ArrayCollection = new ArrayCollection(['en-US','de-DE','ja-JP','ru-RU','ar-SA','zh-CN','fr-FR']);
			[Bindable]
			private var groupPatternArrColl:ArrayCollection = new ArrayCollection(['3;*', '1;*', '3;2;*', '3;2;1;*','2;1']);
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
		
		<!--Click Tab key to validate the number-->
		<s:NumberValidator id="nv" source="{inputTI}" property="text"/>
	</fx:Declarations>
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	<s:Scroller id="scroller" width="100%" height="100%">
		<s:Group>
			<s:Form>
				<s:Label id="titleL" text="Spark NumberValidator"/>
				<s:Label text="Create some criterions and validate the input number: "/>
				<s:Spacer height="15"/>
				
				<s:FormItem label="Locale:">
					<s:ComboBox id="localeCB" dataProvider="{locales}" selectedIndex="0" updateComplete="nv.setStyle('locale',localeCB.selectedItem);"/>
				</s:FormItem>
				<s:Label text="==================================================================="/>
				<s:Label text="     Create some criterions to validate number:" color="#DEB887"/>
				<s:FormItem label="Max Value:">
					<s:TextInput id="maxTI" change="nv.maxValue = Number(maxTI.text)"/>
				</s:FormItem>
				<s:FormItem label="Min Value:">
					<s:TextInput id="minTI" change="nv.minValue = Number(minTI.text)"/>
				</s:FormItem>
				<s:FormItem label="Fraction Digits:">
					<s:NumericStepper id="fdNS" maximum="5" minimum="0" change="nv.fractionalDigits = fdNS.value"/>
				</s:FormItem>
				<s:FormItem label="Decimal Separator:">
					<s:TextInput id="dsTI" change="nv.decimalSeparator = dsTI.text"/>
				</s:FormItem>
				<s:FormItem label="Grouping Separator:">
					<s:TextInput id="gsTI" change="nv.groupingSeparator = gsTI.text"/>
				</s:FormItem>
				<s:Label text="     Customize error messages:" color="#DEB887"
						 toolTip="Spark NumberValidator provide the ability to let user customize all the error messages."/>
				<s:FormItem label="Greater Than Max Error:" toolTip="Error message when the value exceeds the max value.">
					<s:TextInput id="gtmTI" change="nv.greaterThanMaxError = gtmTI.text"/>
				</s:FormItem>
				<s:Label text="==================================================================="/>
				<s:FormItem label="Input a number and press TAB key to validate:">
					<s:TextInput id="inputTI"/>
				</s:FormItem>
			</s:Form>
		</s:Group>
	</s:Scroller>
	
	
</s:Application>
