<?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:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
				 xmlns:js="library://ns.apache.org/royale/basic"
				 xmlns:local="*"
				 className="LoginDialog"
				 width="280" height="90" title="Login">
	
	<fx:Metadata>
		[Event(name="close", type="org.apache.royale.events.Event")]
	</fx:Metadata>
	
	<fx:Script>
		<![CDATA[
			import org.apache.royale.events.Event;
			
			private function cancelLogin():void
			{
				dispatchEvent( new org.apache.royale.events.Event("close") );
			}
		]]>
	</fx:Script>
	
	<js:beads>
		<js:VerticalLayout />
	</js:beads>

	<js:Container width="200">
		<js:beads>
			<js:HorizontalLayout />
		</js:beads>
		<js:Label text="User Name:" />
		<js:TextInput />
	</js:Container>
	
	<js:Container width="200">
		<js:beads>
			<js:HorizontalLayout />
		</js:beads>
		<js:Label text="Password:" />
		<js:TextInput />
	</js:Container>
	
	<js:Container width="200">
		<js:beads>
			<js:HorizontalLayout />
		</js:beads>
		<js:TextButton text="Login" click="cancelLogin()" />
		<js:TextButton text="Cancel" click="cancelLogin()" />
	</js:Container>
	
</js:Panel>
