var ChartConfigurations = {
	ANIMATION_NONE: "<configuration><animation type=\"none\" durationInSeconds=\"2\" framesPerSecond=\"25\" /></configuration>\n",
	ANIMATION_MIDDLE_OUT: "<configuration><animation type=\"middleOut\" durationInSeconds=\"2\" framesPerSecond=\"25\" /></configuration>\n",
	ANIMATION_LEFT_TO_RIGHT: "<configuration><animation type=\"addPixelsLeftToRight\" durationInSeconds=\"2\" framesPerSecond=\"25\" /></configuration>\n",
	INDICATOR_SMA: "<configuration><chart><technicalIndicators><SMA period=\"50\" separateChart=\"true\" showUnderlying=\"true\" /></technicalIndicators></chart></configuration>\n",
	INDICATOR_SMA_REMOVE: "<configuration><chart><technicalIndicators><SMA remove=\"true\" period=\"50\" separateChart=\"true\" showUnderlying=\"true\" /></technicalIndicators></chart></configuration>\n",
	INDICATOR_BBANDS: "<configuration><chart><technicalIndicators><BollingerBands period=\"20\" separateChart=\"false\" color=\"a02d33 26/91/76/21\" width=\"1\" showArea=\"true\" areaColor=\"886526 42/53/94/25\" areaAlpha=\"0.25\" /></technicalIndicators></chart></configuration>",
	INDICATOR_BBANDS_REMOVE: "<configuration><chart><technicalIndicators><BollingerBands remove=\"true\" period=\"20\" separateChart=\"false\" color=\"a02d33 26/91/76/21\" width=\"1\" showArea=\"true\" areaColor=\"886526 42/53/94/25\" areaAlpha=\"0.25\" /></technicalIndicators></chart></configuration>",

	TRACING_TEMPLATE: "<configuration><chart><tracing traceTicks=\"[traceValue]\" lastValue=\"true\" trackBallSize=\"5\" trackBallAlpha=\"0.75\" ticksPadding=\"2\" /></chart></configuration>"
};

var Chart = {

	initEventHandlers: function() {
		Chart.setAnimationHandler("chartAnimationNone", ChartConfigurations.ANIMATION_NONE);
		Chart.setAnimationHandler("chartAnimationLeftToRight", ChartConfigurations.ANIMATION_LEFT_TO_RIGHT);
		Chart.setAnimationHandler("chartAnimationMiddleOut", ChartConfigurations.ANIMATION_MIDDLE_OUT);
		Chart.setGenericEventHandler("chartIndicatorsSma", Chart.indicatorSmaHandler);
		Chart.setGenericEventHandler("chartIndicatorsBBands", Chart.indicatorBBandsHandler);
		Chart.setGenericEventHandler("chartOptionTrace", Chart.traceHandler);
	},

	setAnimationHandler: function(elementId, configurationXml) {
		$('#' + elementId).live('click', function(e) {
			Chart.configureChart(configurationXml);
		});
	},

	setGenericEventHandler: function(elementId, eventHandler) {
		$('#' + elementId).live('click', eventHandler);
	},

	traceHandler: function(e) {
		var showTrace = $("#chartOptionTrace:checked").val();
		showTrace = (showTrace == 'on');
		var configurationXml = ChartConfigurations.TRACING_TEMPLATE.replace("[traceValue]", showTrace);
		Chart.configureChart(configurationXml);
	},

	indicatorSmaHandler: function(e) {
		var showIndicator = $("#chartIndicatorsSma:checked").val() == 'on';
		if(showIndicator) {
			Chart.configureChart(ChartConfigurations.INDICATOR_SMA);
		} else {
			Chart.configureChart(ChartConfigurations.INDICATOR_SMA_REMOVE);
		}
	},

	indicatorBBandsHandler: function(e) {
		var showIndicator = $("#chartIndicatorsBBands:checked").val() == 'on';
		if(showIndicator) {
			Chart.configureChart(ChartConfigurations.INDICATOR_BBANDS);
		} else {
			Chart.configureChart(ChartConfigurations.INDICATOR_BBANDS_REMOVE);
		}
	},

	configureChart: function(newConfigurationXml) {
		Chart.getFlashMovie("fd_v2").setXMLConfiguration(newConfigurationXml);
	},

	getFlashMovie: function(movieName) {
		if (navigator.appName.indexOf("Microsoft") != -1) {
			return window[movieName];
		} else {
			return document[movieName];
		}
	},

	openDisplayWindow: function(url, name) {
		window.open(url, name, 'width=595,height=370,scrollbars=no,resizable=no,status=no,toolbar=no');
	},

	openAppletWindow: function(url) {
		window.open(url, 'Applet', 'width=576,height=400,scrollbars=no,resizable=no,status=no,toolbar=no');
	}
};

$(document).ready(function() {
	Chart.initEventHandlers();
});
