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

-->
<js:View xmlns:fx="http://ns.adobe.com/mxml/2009"
				xmlns:js="library://ns.apache.org/royale/basic"
				xmlns:local="*" 
				xmlns:models="models.*">
	<fx:Style>
		@namespace js "library://ns.apache.org/royale/basic";
		
		
	</fx:Style>
	<fx:Script>
		<![CDATA[
			
			private function dateChanged():void
			{
				output.text = String(dateChooser.selectedDate);
				dateField.selectedDate = dateChooser.selectedDate;
			}
			
			private function dateChanged2():void
			{
				output.text = String(dateField.selectedDate);
				dateChooser.selectedDate = dateField.selectedDate;
			}
			
			private function toToday():void
			{
				dateChooser.selectedDate = new Date();
			}
		]]>
	</fx:Script>
		
	<js:DateChooser id="dateChooser" x="20" y="30" width="280" height="240" change="dateChanged()" />
	
	<js:Group x="400" y="35" width="300" height="200" className="Container1">
		<js:beads>
			<js:VerticalLayout />
		</js:beads>
		<js:Label id="output" text="Selected dates appear here" />
		<js:Spacer height="20" />
		<js:DateField id="dateField" change="dateChanged2()" />
		<js:Spacer height="20" />
		<js:TextButton text="Today!" click="toToday()" />
	</js:Group>
	
</js:View>
