<?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.*" 
				xmlns:acc="org.apache.royale.html.accessories.*">
	
	<fx:Style>
		.title {
			font-size: 14pt;
			font-weight: bold;
		}

	</fx:Style>
	
	<fx:Script>
		<![CDATA[			
			import org.apache.royale.core.IPopUpHost;
			import org.apache.royale.events.Event;
			import org.apache.royale.utils.UIUtils;
						
		]]>
	</fx:Script>
	
	<js:Container width="600" height="700" x="50" y="50">
		<js:beads>
			<js:VerticalLayout />
		</js:beads>
		
		<js:Label text="Loan Form" className="title" />
		
		<js:Container width="500" height="600" >
			<js:beads>
				<js:VerticalColumnLayout numColumns="2" />
			</js:beads>
			<js:Label text="Name:" />
			<js:TextInput id="nameField" />
			<js:Label text="Age:" />
			<js:TextInput id="ageField">
				<js:beads>
					<js:NumericOnlyTextInputBead />
				</js:beads>
			</js:TextInput>
			<js:Label text="Phone Number:" />
			<js:TextInput id="phoneField" >
			</js:TextInput>
			<js:Label text="Date of Loan:" />
			<js:DateField id="dateOfLoan"/>
			<js:Label text="Loan Amount:" />
			<js:TextInput id="loanAmount">
			</js:TextInput>
		</js:Container>		
	</js:Container>
	
</js:View>
