<?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">
	<fx:Script>
		<![CDATA[	
			import mx.formatters.DateFormatter;
			
			private var formatter:DateFormatter;
			
			protected function formatDate(event:Event):void
			{
				formatter = new DateFormatter();
				
				if (int1.selected) {
					formatter.formatString = "DD/MM/YYYY";
				}
				else if (int2.selected) {
					formatter.formatString = "D/M/YYYY";
				}
				else if (int3.selected) {
					formatter.formatString = "D.M.YYYY";
				}
				else if (jap.selected) {
					formatter.formatString = "YYYY年MM月DD日";
				}
				else if (chi.selected) {
					formatter.formatString = "YYYY年MM月DD日";
				}
				else if (kor.selected) {
					formatter.formatString = "YYYY년 MM월 DD일";
				}
				
				formatted.text = formatter.format(date.selectedDate);
				parsed.text = DateFormatter.parseDateString(formatted.text, formatter.formatString).toString();
			}
		]]>
	</fx:Script>
	
	<s:Panel title="International Date Formating Example" width="100%" height="100%">	
		<s:layout>
			<s:VerticalLayout paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10"/>
		</s:layout>
		<s:HGroup verticalAlign="middle">
			<s:Label text="Date" />
			<mx:DateField id="date" change="formatDate(event)" />
		</s:HGroup>
		<s:HGroup verticalAlign="middle">
			<s:Label text="Date Format" />
			<s:RadioButton id="int1" label="DD/MM/YYYY" selected="true" click="formatDate(event)" />	
			<s:RadioButton id="int2" label="D/M/YYYY" click="formatDate(event)" />	
			<s:RadioButton id="int3" label="D.M.YYYY" click="formatDate(event)" />
			<s:RadioButton id="jap" label="Japanese" click="formatDate(event)" />	
			<s:RadioButton id="chi" label="Chinese" click="formatDate(event)" />	
			<s:RadioButton id="kor" label="Korean" click="formatDate(event)" />	
		</s:HGroup>
		<s:HGroup>
			<s:Label text="Formatted Date" />
			<s:Label id="formatted" />
		</s:HGroup>
		<s:HGroup>
			<s:Label text="Parsed Date String" />
			<s:Label id="parsed" />
		</s:HGroup>
	</s:Panel>
</s:Module>
