﻿// JScript File
if (RHPConsulting == null)
    var RHPConsulting = {};
    
RHPConsulting.Chart = function(xamlContainer, scrollInterval) {
    
    // datapoints array ...
    this._series = new Array();
    
    // scroll interval ...
    this._scrollInterval = scrollInterval;
    
    // line colors ...
    this._seriesColor = new Array();
    this._seriesColor[0] = "Red";
    this._seriesColor[1] = "Orange";
    this._seriesColor[2] = "Blue";
    this._seriesColor[3] = "Yellow";
    
    // set properties ...
    this._index = 0;
    this._xamlContainer = xamlContainer;
    
    // create first series by default ...
    this._series[0] = {};
    this._series[0].dataPoints = new Array();
    this._series[0].previousHeight = 400;
    this._series[0].partIndex = 0;
    this._createValueLabelTextHolder(0);
    
    
    
}
RHPConsulting.Chart.prototype = {
    
    // private methods ...
    _createValueLabelTextHolder : function(seriesToken) {
        
        // create label ...
        var _chartLabel = new RHPConsulting.ChartValueLabel(this, seriesToken);
            
        // calc left ...
        _chartLabel.set_Left(_chartLabel.get_Left() - ((seriesToken) * 75));
        
        // set color ...
        _chartLabel.set_LabelTextColor(this._seriesColor[seriesToken]);
        
        // add to series object ...
        this._series[seriesToken].label = _chartLabel;
    
    }, 
    
    // event handlers ...
    _handle_DataPointAnimationComplete : function(sender, args) {
        if (sender.get_Location() < -550) {
        
            // dispose ...
            sender.Dispose();
            
            // iterate and remove from datapoints ...
            var _dataPoints = this._series[sender.get_SeriesToken()].dataPoints;
            for( var _index in _dataPoints) {
                if (sender == _dataPoints[_index]) 
                    _dataPoints.splice(_index,1);
            }
        }
    },
    
    // public readonly (properties) ...
    get_XamlContainer : function() {
        return this._xamlContainer;
    },
    // public properties ...
    set_ChartTitle : function(value) {
        this._xamlContainer.findName("TextBlockChartTitle").Text = value;
    },
    get_ChartTitle : function() {
        return this._xamlContainer.findName("TextBlockChartTitle").Text;
    },
    get_ScrollInterval : function() {
        return this._scrollInterval;
    },
    set_ScrollInterval : function(value) {
        this._scrollInterval = value;
        for(_seriesIndex in this._series) {
            for(_index in this._series[_seriesIndex].dataPoints) {
                this._series[_seriesIndex].dataPoints[_index].set_ScrollInterval(value);
            }
        }
    },
    
    // public methods ...
    FormatPartName : function(value, seriesToken, index) {
        return String.format(value, String.format("_{0}_{1}", seriesToken, index));
    },
    Scroll : function() {
        for(_seriesIndex in this._series) {
            for(_index in this._series[_seriesIndex].dataPoints) {
                this._series[_seriesIndex].dataPoints[_index].BeginScroll();
            }
        }
    },
    NewSeries : function() {
    
        // increment token index ...
        this._index++;
    
        // create new line ...
        this._series[this._index] = {};
        this._series[this._index].dataPoints = new Array();
        this._series[this._index].previousHeight = 400;
        this._series[this._index].partIndex = 0;
        
        // add new label information ...
        this._createValueLabelTextHolder(this._index);
    
        // return series token ...
        return this._index;
    },
    NewDataPoint : function(seriesToken, value) {
    
        var _height = (((100 - value) * 400)/ 100);
    
        // process height ...
        var _part = new RHPConsulting.ChartDataPoint(this
            , seriesToken
            , this._seriesColor[seriesToken]
            , this._series[seriesToken].partIndex
            , 550
            , this._series[seriesToken].previousHeight
            , 575
            , _height);
            
        // set scrolltime ...
        _part.set_ScrollInterval(this._scrollInterval);
        
        // save height ...
        this._series[seriesToken].previousHeight = _height;
        
        // increase index ...
        this._series[seriesToken].partIndex++;
            
        // add to collection ...
        this._series[seriesToken].dataPoints.push(_part);
        
        // add event handler ...
        _part.addEventListener("AnimationComplete", Function.createDelegate(this, this._handle_DataPointAnimationComplete));
        
        // add label information ...
        var _chartLabel = this._series[seriesToken].label;
        if (_chartLabel != null) {
            _chartLabel.set_LabelText(String.format("L{0}", seriesToken));
            _chartLabel.set_LabelValue(String.format("{0}%", value));
        }
        
    }
    
}
 