<?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:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   xmlns:components="components.*"
			   minWidth="1024" minHeight="768"
			   creationComplete="employeeService.send()">
	
	<!-- Exercise 3.01: Creating an event and dispatching the event object -->
	
	<!-- Properties of the parent ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
	
	<s:layout>
		<s:VerticalLayout gap="15"
						  paddingLeft="30" paddingTop="30"/>
	</s:layout>
	
	<!-- Metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
	
	
	
	<!-- Styles ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
	
	<fx:Style source="Styles.css"/>
	
	<!-- Script ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
	
	<fx:Script>
		<![CDATA[
			
			// import statements ----------------------------------------
			
			import mx.collections.ArrayCollection;
			
			import mx.rpc.events.ResultEvent;
			
			// variable declarations ------------------------------------
			
			[Bindable]
			private var employeeData:ArrayCollection;
			
			// getter/setters -------------------------------------------
			
			
			// helper methods -------------------------------------------
			
			
			// event handlers -------------------------------------------
			
			protected function employeeService_resultHandler(event:ResultEvent):void
			{
				employeeData = event.result.employees.employee;
			}
			
		]]>
	</fx:Script>
	
	<!-- Declarations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
	
	<fx:Declarations>
		
		<s:HTTPService id="employeeService" 
					   url="data/employees.xml"
					   result="employeeService_resultHandler(event)" />
		
	</fx:Declarations>
	
	<!-- UI components ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
	
	<s:Label width="485" height="40"
			 text="Employee Portal: Choose the Employee of the Month"
			 styleName="titleHeader" />
	
	<s:Label text="Select the Employee of the Month and preview the display for the Employee Portal."/>
	
	<s:HGroup gap="30">		
		
		<components:Choose id="chooseEmployee"
						   employeeData="{employeeData}"
						   x="30" y="90"/>
		
		<components:Preview id="previewEmployeeOfTheMonth"
							title="Employee of the Month"
							x="250" y="90"
							width="250"/>
		
	</s:HGroup>
	
</s:Application>
