<?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" minWidth="1024" minHeight="768" creationComplete="application1_creationCompleteHandler(event)">
	<fx:Style>
		@namespace s "library://ns.adobe.com/flex/spark";
		@namespace mx "library://ns.adobe.com/flex/mx";
		
		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-Regular.ttf");
			fontFamily: SparkVera;
			embedAsCFF: true;
		}


		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-Bold.ttf");
			fontWeight: bold;
			fontFamily: SparkVera;
			embedAsCFF: true;
		}

		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-Italic.ttf");
			fontStyle: italic;
			fontFamily: SparkVera;
			embedAsCFF: true;

		}
		
		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-BoldItalic.ttf");
			fontWeight: bold;
			fontStyle: italic;
			fontFamily: SparkVera;

			embedAsCFF: true;
		}


		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-BoldItalic.ttf");
			fontWeight: bold;
			fontStyle: italic;
			fontFamily: HaloVera;

			embedAsCFF: false;
		}

		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-Regular.ttf");
			fontFamily: HaloVera;
			embedAsCFF: false;
		}


		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-Bold.ttf");
			fontWeight: bold;
			fontFamily: HaloVera;
			embedAsCFF: false;
		}

		@font-face{
			src: url("../../../Assets/Fonts/Open_Sans/OpenSans-Italic.ttf");
			fontStyle: italic;
			fontFamily: HaloVera;
			embedAsCFF: false;
		
		}

		global {
			fontAntiAliasType: "normal";
			fontFamily: SparkVera;
			fontLookup: "embeddedCFF";
		}
		

		s|List
		{
			borderColor: #0000FF;
			fontSize: 16;
		}
		
		s|Button#gumboButton
		{
			chromeColor: #AAFFAA;
			fontSize: 16;
		}
		
		mx|Label
		{
			fontAntiAliasType: "normal";
			fontFamily: HaloVera;
			fontSize: 16;
		}
	</fx:Style>
	
	<fx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			import mx.collections.ArrayList;
			

			private var arr:Array =
				[
					{ label:'Apple', data:10.00},
					{ label:'Banana', data:15.00 },
					{ label:'Melon', data:3.50 },
					{ label:'Kiwi', data:7.65},
					{ label:'Strawberry',data:12.35 },
					{ label:'Other', data:00.00}
				];
			
			private var listArr :ArrayList = new ArrayList(arr);
			
			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				appList.dataProvider = listArr;
				swf_loader.addEventListener("complete",swfLoaded);
			}
			public function swfLoaded(event:flash.events.Event):void
			{
				dispatchEvent(new FlexEvent("swfLoaded"));
			}
			public function iniit():void
			{
				swf_loader.load("assets/SwfLoaderAppLoadsModule.swf");
			}

			public function iniit2():void
			{
				swf_loader.unloadAndStop();
				mod_loader.url = "assets/ModuleAppLoadsSwfLoader.swf";
			}
			

		]]>
	</fx:Script>
	<s:layout>
		<s:VerticalLayout />
	</s:layout>
	
	<s:Panel title="Gumbo Panel" id="appPanel" rotation="-5">
		<s:layout>
			<s:VerticalLayout />
		</s:layout>
		
		<s:List id="appList"  />
		<s:Button id="gumboButton" label="Gumbo Button"  />
		<mx:Label text="MX Label"  />
	</s:Panel>
	
	<mx:SWFLoader id="swf_loader" rotation="-5" />
	<mx:ModuleLoader id="mod_loader" rotation="-5" />
	
	<s:Button label="Load Child Swf/Module" click="iniit()" />
	<s:Button label="Load Child Module/Swf" click="iniit2()" />
</s:Application>
