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

<!-- Simple custom MXML TitleWindow component.
     The TitleWindowApp application displays this component. 
     You cannot run it independently. -->
     
<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
    title="Title Window" x="168" y="86">

     <fx:Script>
        <![CDATA[       
            import mx.managers.PopUpManager;
            import mx.controls.Text;
	       
            // A reference to the TextInput control in which to put the result.
            public var loginName:Text;
		   
            // Event handler for the OK button.
            private function returnName():void {
                loginName.text="Name entered: " + userName.text; 
                PopUpManager.removePopUp(this);
            }
        ]]>
    </fx:Script>

    <mx:HBox>
        <mx:Label text="Enter Name: "/>
        <mx:TextInput id="userName" width="100%"/>
    </mx:HBox>

    <mx:HBox>
        <mx:Button label="OK" click="returnName()"/>
        <mx:Button label="Cancel" click="PopUpManager.removePopUp(this)"/>
    </mx:HBox>

</mx:TitleWindow>  
