<?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 DateTimeAxis class. -->
<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.collections.ArrayCollection;

            [Bindable] 
            public var stockDataAC:ArrayCollection = new ArrayCollection( [
                {date: "2005, 7, 27", close: 41.71},
                {date: "2005, 7, 28", close: 42.21},
                {date: "2005, 7, 29", close: 42.11},
                {date: "2005, 8, 1", close: 42.71},
                {date: "2005, 8, 2", close: 42.99},
                {date: "2005, 8, 3", close: 44} ]);
    
            public function myParseFunction(s:String):Date { 
                // Get an array of Strings from the comma-separated String passed in.
                var a:Array = s.split(",");
                // Create the new Date object. Subtract one from 
                // the month property because months are zero-based in 
                // the Date constructor.
                var newDate:Date = new Date(a[0],a[1]-1,a[2]);
                return newDate;
            }
        ]]>
    </fx:Script>

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

        <mx:LineChart id="mychart" height="100%" width="100%"
            paddingRight="5" paddingLeft="5" 
            showDataTips="true" dataProvider="{stockDataAC}">
            
            <mx:horizontalAxis>
                <mx:DateTimeAxis dataUnits="days" parseFunction="myParseFunction"/>
            </mx:horizontalAxis>

            <mx:verticalAxis>
                <mx:LinearAxis baseAtZero="false" />
            </mx:verticalAxis>

            <mx:series>
                <mx:LineSeries yField="close" xField="date" displayName="AAPL"/>
            </mx:series>
        </mx:LineChart>
        
    </mx:Panel>
</mx:Module>
