/**
 * @filename chart.js
 * 
 * @description 
 * 
 * @author Michael Bina
 * @email michael.bina@garmin.com
 *
 * Copyright(c) 2008, Garmin International
 */

/**
 * ChartComponentConstants
 */
var ChartComponentConstants = {
	// Major version of Flash required
	FLASH_MAJOR_VERSION: 9,
	// Minor version of Flash required
	FLASH_MINOR_VERSION: 0,
	// Revision of Flash required
	FLASH_REVISION: 116,
	
	chartAxes: {
		INDEX_DURATION: {
			context: 'context_duration',
			modifier: 'modifier_sum'
		},
		INDEX_DISTANCE: {
			context: 'context_distance',
			modifier: 'modifier_sum'
		},
		PRIMARY_TIME: {
			context: 'context_speed',
			modifier: 'modifier_direct'
		},
		PRIMARY_ELEVATION: {
			context: 'context_elevation',
			modifier: 'modifier_direct'
		},
		PRIMARY_HEART_RATE: {
			context: 'context_heartRate',
			modifier: 'modifier_direct'
		},
		PRIMARY_BIKE_CADENCE: {
			context: 'context_bikeCadence',
			modifier: 'modifier_direct'
		},
		PRIMARY_RUN_CADENCE: {
			context: 'context_runCadence',
			modifier: 'modifier_direct'
		},
		PRIMARY_POWER: {
			context: 'context_power',
			modifier: 'modifier_direct'
		},
		PRIMARY_LAPS: {
			context: 'context_duration',
			modifier: 'modifier_direct'
		}
	}
};

ChartType = {
	area: 'area',
	bar: 'bar',
	line: 'line',
	column: 'column'
};

ChartComponent = {
		// available chart types are area, line, column, and bar
		init : function(){
			var	activityChartOptions = {
				chartOnly: true,
				initialChart: 'area',
				initialPrimaryContext: 'context_speed',
				initialPrimaryModifier: 'modifier_direct',
				startState: 'loadingScreen'
			};
	
			var hasReqestedVersion = DetectFlashVer(
					ChartComponentConstants.FLASH_MAJOR_VERSION, 
					ChartComponentConstants.FLASH_MINOR_VERSION, 
					ChartComponentConstants.FLASH_REVISION);
			
			if (hasReqestedVersion) {
				activityChartOptions.dataFile = $F("axmLocation");
				activityChartOptions.authHeader = escape($F("authHeader"));
			} else {
				activityChartOptions.dataFile = $F("axmLocationProxy");
			}
			
			this.chart = new ActivityChart("chartContainer", "chartPanel", activityChartOptions);
		},
		
		setChartDisplay	: function(chartType, indexAxis, primaryAxis) {
			if (this.chart !== null && this.chart != undefined && (this.chart.getChartElement() !== undefined)) {
				// update chart
				var chartElement = this.chart.getChartElement();

				if ((chartElement.showLineChart != null) && (chartType == ChartType.line)) {
					chartElement.showLineChart();
					if (chartElement.setLineChartIndexAxis != null) {
						chartElement.setLineChartIndexAxis(indexAxis.context, indexAxis.modifier);
					}
					
					if (chartElement.setLineChartPrimaryAxis != null) {
						chartElement.setLineChartPrimaryAxis(primaryAxis.context, primaryAxis.modifier);
					}
				} else if ((chartElement.showAreaChart != null) && (chartType == ChartType.area)) {
					chartElement.showAreaChart();
					if (chartElement.setAreaChartIndexAxis != null) {
						chartElement.setAreaChartIndexAxis(indexAxis.context, indexAxis.modifier);
					}
					
					if (chartElement.setAreaChartPrimaryAxis != null) {
						chartElement.setAreaChartPrimaryAxis(primaryAxis.context, primaryAxis.modifier);
					}
				} else if ((chartElement.showBarChart != null) && (chartType == ChartType.bar)) {
					chartElement.showLineChart();
					if (chartElement.setBarChartIndexAxis != null) {
						chartElement.setBarChartIndexAxis(indexAxis.context, indexAxis.modifier);
					}
					
					if (chartElement.setBarChartPrimaryAxis != null) {
						chartElement.setBarChartPrimaryAxis(primaryAxis.context, primaryAxis.modifier);
					}
				} else if ((chartElement.showColumnChart != null) && (chartType == ChartType.column)) {
					chartElement.showLineChart();
					if (chartElement.setColumnChartIndexAxis != null) {
						chartElement.setColumnChartIndexAxis(indexAxis.context, indexAxis.modifier);
					}
					
					if (chartElement.setColumnChartPrimaryAxis != null) {
						chartElement.setColumnChartPrimaryAxis(primaryAxis.context, primaryAxis.modifier);
					}
				}
				
				// update variables accessed by child window (for chart printing)
				this.indexAxis = indexAxis;
				this.primaryAxis = primaryAxis;
				this.showLineChart = (chartType == ChartType.line);
			}
		}


};
Ext.EventManager.onDocumentReady(ChartComponent.init, ChartComponent, true);