<?xml version="1.0" encoding="utf-8"?>
<dg:Surface xmlns:dg="com.degrafa.*" xmlns:geometry="com.degrafa.geometry.*" xmlns:paint="com.degrafa.paint.*"
    xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="updateData();">
<mx:Script>
<![CDATA[
import mx.effects.Effect;

[Bindable]
public var dataChangeEffect:Effect = null;

private var _data:Array = [];

private var _scale:Number = 1;

public function get scale() : Number {
    return _scale;
}

public function set scale( newScale:Number ) :  void {
    _scale = newScale;
    updateData();
}

public function get data() : Array {
    return _data;
}

public function set data( newData:Array ) : void {
    _data = newData;
    if ( initialized )
        updateData();
    if ( dataChangeEffect != null )
        dataChangeEffect.play([this]);
}

private function updateData() : void {
    var min:Number = Number.MAX_VALUE
    var max:Number = Number.MIN_VALUE;

    for each ( var dp1:Number in _data ) {
        min = Math.min( dp1, min );
        max = Math.max( dp1, max );
    }

    var ybase:Number = min - ( ( max - min ) * 0.2 );
    var yrange:Number = ( max - min ) * 1.4;
    var yscale:Number = height / yrange;
    var xscale:Number = width / ( _data.length - 1 );
    
    var points:Array = [];
    points.push( new Point( 0, height ) );
    var curx:Number = 0;
    for each ( var dp2:Number in _data ) {
        points.push( new Point( curx, height - ( ( ( dp2 - ybase ) * yscale ) * _scale ) ) );
        curx += xscale;
    }
    points.push( new Point( width, height ) );
    points.push( new Point( 0, height ) );
    chartPoly.points = points;
}
]]>
</mx:Script>
    <dg:fills>
        <paint:LinearGradientFill id="backfill" angle="90">
            <paint:GradientStop color="#000066" />
            <paint:GradientStop color="black" />
        </paint:LinearGradientFill>
        <paint:SolidFill id="solidblack" color="black" />
    </dg:fills>
    <dg:strokes>
        <paint:SolidStroke id="axis" color="#cccccc" weight="2" />
        <paint:SolidStroke id="chartstroke" color="#666666" weight="2" />
    </dg:strokes>
    <dg:graphicsData>
    <dg:GeometryGroup>
    <geometry:RegularRectangle width="400" height="300" fill="{solidblack}" />
    <geometry:Polygon id="chartPoly" fill="{backfill}" stroke="{chartstroke}" />
    <geometry:VerticalLine y="0" y1="{height}" stroke="{axis}" />
    <geometry:HorizontalLine y="{height}" x="0" x1="{width}" stroke="{axis}" />
    </dg:GeometryGroup>
    </dg:graphicsData>
</dg:Surface>