<?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:Module 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%">

	<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']);
			[Bindable]
			private var dateTimePatternAryColl:ArrayCollection = new ArrayCollection(['MM-yyyy', 'MM/dd/yyyy', 'dd','hh:mm a','MM/dd/yy hh:mm:ss a', 'hh:mm:ss', 'EEEE, MMMM dd, yyyy h:mm:ss a']);
			
			//format the date which is selected in calender
			protected function formatDate():void
			{
				resultL.text = (dateField.selectedDate != null)
					? dtf.format(dateField.selectedDate):dtf.format(new Date());
			}
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<s:DateTimeFormatter id="dtf"/>
	</fx:Declarations>

	<s:layout>
		<s:VerticalLayout/>
	</s:layout>

	<s:Panel title="Spark DateTimeFormatter" width="100%" height="100%">

		<s:layout>
			<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10" />
		</s:layout>
		
		<s:Form height="100%" width="100%">
			<s:Label text="Select a locale to see the formatted date, weekday names and month names: "/>
			<s:Spacer height="15"/>
			
			<s:FormItem label="Locale: ">
				<s:ComboBox id="localeCB" dataProvider="{locales}" selectedIndex="0" updateComplete="dtf.setStyle('locale',localeCB.selectedItem)"/>
			</s:FormItem>
			<s:FormItem label="Please select the format of date:">
				<s:ComboBox id="dtpCB" dataProvider="{dateTimePatternAryColl}" selectedIndex="0" updateComplete="dtf.dateTimePattern=dtpCB.selectedItem"/>
			</s:FormItem>
			<s:FormItem label="Please select a date to format:">
				<mx:DateField id="dateField"/>
			</s:FormItem>
			<s:FormItem label="The Weekday Names are:">
				<s:Label text="{dtf.getWeekdayNames()}"/>
			</s:FormItem>
			<s:FormItem label="The Month Names are:">
				<s:Label text="{dtf.getMonthNames()}"/>
			</s:FormItem>
			<s:Label text="     ==========================================================================="/>
			<s:FormItem label="The formatted result is:">
				<s:Label id="resultL"/>
			</s:FormItem>
			<s:FormItem>
				<s:Button id="bt" label="Format Date" click="formatDate()"/>
			</s:FormItem>
		</s:Form>

	</s:Panel>
</s:Module>
