<?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.

-->
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" layout="vertical" width="400" height="300"
           creationComplete="init()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
	<fx:Script>
		<![CDATA[
			
			import mx.events.ModuleEvent;	
			import mx.events.FlexEvent;	
			import mx.controls.Alert;	
			import mx.events.ModuleEvent;
			import mx.modules.Module;
			private var errMsg:String="";
			private function errorModuleHandler(e:ModuleEvent):void
			{
				e.currentTarget.removeEventListener(ModuleEvent.ERROR,errorModuleHandler);
				errMsg=e.errorText;
				Alert.show(e.errorText);


			}
			public function loadModule1():void
			{
				loadModule(subModuleLoader1, "assets/SimpleModuleWithLabel.swf");
			}
			private function loadModule(ml:ModuleLoader, moduleURL:String):void
			{
				if (ml.url==null)
					ml.url = moduleURL;
				else ml.loadModule();
			}
			private function init():void
			{
				subModuleLoader1.addEventListener(ModuleEvent.READY,handleModuleLoaded);
				subModuleLoader1.addEventListener(ModuleEvent.ERROR,errorModuleHandler);
				subModuleLoader1.addEventListener(ModuleEvent.UNLOAD,removeModuleLoaded);


			}
			public function handleModuleLoaded(e:ModuleEvent):void
			{
				e.currentTarget.removeEventListener(ModuleEvent.READY, handleModuleLoaded);
				dispatchEvent(new FlexEvent("moduleLoaded"));
			}
			public function removeModuleLoaded(e:ModuleEvent):void
			{
				e.currentTarget.removeEventListener(ModuleEvent.UNLOAD, removeModuleLoaded);
				dispatchEvent(new FlexEvent("moduleRemoved"));
			}
			
		]]>
	</fx:Script>

    <s:Label text="Module1" />
    
    <s:Button id="mdBtn1" label="load SubModule1" click="loadModule(subModuleLoader1,'assets/SimpleModuleWithLabel.swf')" />
    <s:Button id="mdBtn2" label="unload SubModule1" click="{subModuleLoader1.unloadModule(); subModuleLoader1.url=null;}" />
    <mx:ModuleLoader id="subModuleLoader1" />
    
</mx:Module>
