<?xml version="1.0"?>
<!--
  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 example to demonstrate the Alert control. -->
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
				paddingBottom="0" paddingTop="0" paddingLeft="0" paddingRight="0"
				height="100%" width="100%">

     <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.events.CloseEvent;
        
            // Event handler function uses a static method to show
            // a pop-up window with the title, message, and requested buttons.        
            private function clickHandler(event:Event):void {
                Alert.show("Do you want to save your changes?", "Save Changes", 3, this, alertClickHandler);
            }
        
            // Event handler function for displaying the selected Alert button.
            private function alertClickHandler(event:CloseEvent):void {
                if (event.detail==Alert.YES)
                    status.text="You answered Yes";
                else
                    status.text="You answered No";
            }

            // Event handler function changes the default Button labels and sets the
            // Button widths. If you later use an Alert with the default Buttons, 
            // you must reset these values.
            private function secondClickHandler(event:Event):void {
                Alert.buttonWidth = 100;
                Alert.yesLabel = "Magenta";
                Alert.noLabel = "Blue";
                Alert.cancelLabel = "Green";

                Alert.show("Select a color:","Color Selection",1|2|8,this);
                
                // Set the labels back to normal:
                Alert.yesLabel = "Yes";
                Alert.noLabel = "No";                
            }
        ]]>
    </fx:Script>

    <mx:Panel title="Alert Control Example" horizontalAlign="center"
				paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"
				height="100%" width="100%">
      <mx:Text width="100%" textAlign="center"
          text="Click the button below to display a simple Alert window."/>
      <mx:Button label="Click Me" click="Alert.show('Hello World!', 'Message')"/>

      <mx:Text width="100%" textAlign="center"
          text="Click the button below to display an Alert window and capture the button pressed by the user."/>
      <mx:Button label="Click Me" click="clickHandler(event)"/>
      <mx:Label id="status" fontWeight="bold"/>

      <mx:Text width="100%" textAlign="center"
          text="Click the button below to display an Alert window that uses custom Button labels."/>
      <mx:Button label="Click Me" click="secondClickHandler(event)"/>
    </mx:Panel>

</mx:Module>
