<?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 TabBar 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.events.ItemClickEvent;
            import mx.controls.TabBar;

            [Bindable]
            public var STATE_ARRAY:Array = [{label:"Alabama", data:"Montgomery"},
                {label:"Alaska", data:"Juneau"},
                {label:"Arkansas", data:"LittleRock"}
            ];
            
    		private function clickEvt(event:ItemClickEvent):void {
    			// Access target TabBar control.
    			var targetComp:TabBar = TabBar(event.currentTarget);
    			forClick.text="label is: " + event.label + ", index is: " + 
    				event.index + ", capital is: " +
    				targetComp.dataProvider[event.index].data;
    		}	            
       ]]>
    </fx:Script>

    <mx:Panel title="TabBar Control Example"
				paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"
				height="100%" width="100%">

        <mx:Label width="100%" 
            text="Select a tab to change the current panel."/>

        <mx:TabBar itemClick="clickEvt(event)">
            <mx:dataProvider>{STATE_ARRAY}</mx:dataProvider>
        </mx:TabBar>

        <mx:TextArea id="forClick" height="100%" width="100%"/>

    </mx:Panel>
</mx:Module>
