<?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;
			}
			
			protected function chooseEmployee_showPreviewHandler(event:Event):void
			{
				previewEmployeeOfTheMonth.visible = true;
			}
			
		]]>
	</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"
						   showPreview="chooseEmployee_showPreviewHandler(event)"/>
		
		<components:Preview id="previewEmployeeOfTheMonth"
							title="Employee of the Month"
							x="250" y="90"
							width="250"
							visible="false"/>
		
	</s:HGroup>
	
</s:Application>
