var chart = {
	settings:{	
		fontSize:5
	},
	timetable:'AnnotatedTimeLine',
	packages:{AnnotatedTimeLine:'annotatedtimeline',ImageSparkLine:'imagesparkline'},
	getInclude: function(type){
		var ret=['corechart'];
		if (chart.packages[type]) ret[ret.length]=chart.packages[type];
		return ret;
	},
	draw: function(type, obj){			
		var data= new google.visualization.DataTable();
		data.addColumn((type==chart.timetable)?'date':'string', data.xTitle);
		for (var i=0; i<obj.yTitle.length; i++){
			data.addColumn('number', obj.yTitle[i]);
		}
		var rows=[];
		for (var i=0; i<obj.rows.length; i++){				
			if (type==chart.timetable){
				var date=obj.rows[i][0].split('.');
				rows[i]=[new Date(date[2],date[1],date[0])];
			}
			else {
				rows[i]=[obj.rows[i][0]]; 
			}
			for (j=1; j<obj.rows[i].length; j++){
				rows[i][j]=parseFloat(obj.rows[i][j]);
			}
		}		
		data.addRows(rows);
		
		var gchart = new google.visualization[type](document.getElementById(obj.target));
		if (obj.gchart){
			for (key in obj.gchart){				
				gchart[key]=obj.gchart[key];
			}
		}
		//apply default settings:
		for (key in chart.settings) if (!obj.settings[key]) obj.settings[key]=chart.settings[key];		
		gchart.draw(data, obj.settings);		
	},
	readTable: function(div){		
		var ret=[];
		ret.settings={title:div.title};
		var th=div.getElementsByTagName('th');
		//Собираем заголовки:
		ret.xTitle=th[0].innerHTML;
		ret.yTitle=[];
		
		for (var i=1; i<th.length; i++){			
			ret.yTitle[ret.yTitle.length]=th[i].innerHTML;
		}
		//Собираем данные:
		ret.rows=[];
		var tr=div.getElementsByTagName('tr');
		var td=null;
		for (var i=0; i<tr.length; i++){
			td= tr[i].getElementsByTagName('td');
			if (td.length){
				rowID=ret.rows.length;
				ret.rows[rowID]=[];
				for (var j=0; j<td.length; j++){
					ret.rows[rowID][j]=td[j].innerHTML;
				}
			}
		}
		//Куда писать:
		ret.target=div.getAttribute('rel');
		
		$target=$('#'+ret.target);		
		if ($target.width()) ret.settings.width=$target.width();
		if ($target.height()) ret.settings.height=$target.height();	
		return ret;
	},
	readTotal: function(table){
		var ret={rows:[],yTitle:[]};
		var th=table.getElementsByTagName('th');
		for (var i=1; i<th.length; i++){
			ret.rows[i-1]=[th[i].innerHTML];
		}
		var tr=table.getElementsByTagName('tr');
		for (var i=1; i<tr.length; i++){
			var td=tr[i].getElementsByTagName('td');
			ret.yTitle[i-1]=td[0].innerHTML;
			for (var j=1; j<td.length; j++){
				ret.rows[j-1][i]=td[j].innerHTML;
			}
		}
		ret.target=table.getAttribute('rel');
		$target=$('#'+ret.target);
		ret.settings=[];
		if ($target.width()) ret.settings.width=$target.width();
		if ($target.height()) ret.settings.height=$target.height();
		ret.settings.isStacked=$target.hasClass('stacked');
		return ret;
	}
}

$(document).ready(function(){
	var types=[];
	$charts=$('.chartdata');
	if (!$charts.length) return;

	$charts.each(function(){
		var type=this.getAttribute('rev');				
		if (type=='TotalTable'){
			type='ColumnChart';
			var data=chart.readTotal(this);
		}
		else {
			var data=chart.readTable(this);
		}
		chart.draw(type,data);
	});

});
