/**
 * Kapselt den dynamischen Zugriff auf das Chart
 */

Charter = {
	edit: function(id) {
		var o = OFC.getChart(id);
		var xaxis = '';
		if (o.get('x_legend').length > 0) {
			xaxis = o.get('x_legend')[0];
		}
		document.chartoptions.xaxis.value = xaxis;
		
		var ylegend = '';
		if (o.get('y_legend').length > 0) {
			ylegend = o.get('y_legend')[0];
		}
		document.chartoptions.yaxis.value  = ylegend;
		
		var title = '';
		if (o.get('title').length > 0) {
			title = o.get('title')[0];
		}
		document.chartoptions.titel.value = title;
		
		Element.toggle($(id+"editor"));
		$(id+"editor").style.top = "20px";
	}
	,setTitle: function(id, text) {
		var o = OFC.getChart(id);
		if (text.empty()) text = null;
		o.setTitle(text);
		this.doRedraw(id);
	}
	,setColorScheme: function(id) {
		var tr = $('ofc_' + id + '_DataColors').down('tr');
		if (tr == null) return;
		var dataColors = [];
		while (tr != null) {
			if (tr.down('input') == null) {
				tr = tr.next('tr');
				continue;
			}
			var rgb = $F(tr.down('input'));
			var names = tr.down('input').name.split('_');
			var key = names[names.length-1];
			var dataIndex = names[names.length-2] * 1;
			if (typeof dataColors[dataIndex] == 'undefined') {
				dataColors[dataIndex] = new Hash();
			}
			dataColors[dataIndex].set(key, rgb);
			tr = tr.next('tr');
		}
		var colors = new Hash();
		// 0 - bg
		colors.set('background', $F('ofc_'+id+'_BgColor'));
		// 1 - text
		colors.set('text', $F('ofc_'+id+'_TxtColor'));
		// 2 - axis
		colors.set('axis', $F('ofc_'+id+'_AxisColor'));
		// 3 - grid
		colors.set('grid', $F('ofc_'+id+'_GridColor'));

		var o = OFC.getChart(id);
		o.setColorScheme(
			colors,
			dataColors
		);
		o.redraw();
	}
	,changeChartType: function(id, number, newType) {
		var o = OFC.getChart(id);
		
		var n = o.getDataFromType(newType);
		if (n == null) {
			alert('Type not supported!');
		}
		o.convert(o.dataList[number], n);
		o.redraw();
	}
	,setXAxisLegend: function(id, text) {
		var o = OFC.getChart(id);
		if (text.empty()) text = null;
		o.setLegend('x', text);
		this.doRedraw(id);
	}
	,setYAxisLegend: function(id, text) {
		var o = OFC.getChart(id);
		if (text.empty()) text = null;
		o.setLegend('y', text);
		this.doRedraw(id);
	}
	,findSWF: function(movieName) {
		if (navigator.appName.indexOf("Microsoft")!= -1) {
			return window[movieName];
		} else {
			return document[movieName];
		}
	}
	,redrawing: false
	,doRedraw: function(id) {
		if(Charter.redrawing) return;
		Charter.redrawing = true;
		var o = OFC.getChart(id);
		o.redraw();
		Charter.redrawing = false;
	}
	,refreshData: function(id) {
		var ofcObj = OFC.getChart(id);
		
		$('ofc_'+id+'_BgColor').value = ofcObj.colorScheme.get('background');
		$('ofc_'+id+'_BgColorCont').setStyle({backgroundColor: ofcObj.colorScheme.get('background')});
		$('ofc_'+id+'_TxtColor').value = ofcObj.colorScheme.get('text');
		$('ofc_'+id+'_TxtColorCont').setStyle({backgroundColor: ofcObj.colorScheme.get('text')});
		$('ofc_'+id+'_AxisColor').value = ofcObj.colorScheme.get('axis');
		$('ofc_'+id+'_AxisColorCont').setStyle({backgroundColor: ofcObj.colorScheme.get('axis')});
		$('ofc_'+id+'_GridColor').value = ofcObj.colorScheme.get('grid');
		$('ofc_'+id+'_GridColorCont').setStyle({backgroundColor: ofcObj.colorScheme.get('grid')});
		
		var colDiv = $('ofc_'+id+'_DataList');
		colDiv.update();
		
		// create HTML for chart-data-editor
		var html = '';
		for (var i = 0; i < ofcObj.dataList.length; i++) {
			var dataObj = ofcObj.dataList[i];
			var reqColors = dataObj.getRequiredColors();
			html += '<tr><td colspan="2">'+dataObj.key+'</b></td></tr>';
			reqColors.each(function(pair) {
				if (typeof pair.value == "string") {
					html += '<tr><td><input id="ofc_'+id+'_DataColor_'+i+'_'+pair.key+'" name="ofc_'+id+'_DataColor_'+i+'_'+pair.key+'" type="hidden" style="display:none" />'+
					pair.value + ':</td><td align="right">' +
					'<div id="ofc_'+id+'_DataColorCont_'+i+'_'+pair.key+'" class="colorPicker"></div></td></tr>';
				}
			});
			
			html += '<tr><td>'+
				'Type:</td><td align="right"><select id="ofc_' + id + '_type_' + i + '" '+
				'onchange="Charter.changeChartType(\'' + id + '\', ' + i + ', this.value)" '+
				'style="width:130px">' + $(id+'_charttype_default').innerHTML + '</select></td></tr>';
			
		}
		
		// update html
		colDiv.update(colDiv.innerHTML + html);
		
		// register events, update form-elements
		for (var i = 0; i < ofcObj.dataList.length; i++) {
			var dataObj = ofcObj.dataList[i];
			
			var reqColors = dataObj.getRequiredColors();
			reqColors.each(function(pair) {
				if (typeof pair.value == 'string') {
					ColorPicker.register(
						'ofc_'+id+'_DataColorCont_'+i+'_'+pair.key,
						'ofc_'+id+'_DataColor_'+i+'_'+pair.key,
						null,
						dataObj.colors.get(pair.key),
						function() {
							Charter.setColorScheme(id);
						}
					);
				}
			});
			
			$('ofc_' + id + '_type_'+i).value = dataObj.getType();
		}
	},
	
	download: function(id) {
		var o = OFC.getChart(id);
		o.download();
	}
}
