Adding annotations to a ColumnChart

This code uses a ComboChart to emulate a ColumnChart, and applies annotations to a hidden line within the ComboChart which shares the same data as the columns. This code was inspired by a post by Dezső Róbert on the Google Visualization API forum: https://groups.google.com/d/msg/google-visualization-api/1yWwsXV-Ysk/PMJsxe7tzjgJ

HTML

<script src="http://www.google.com/jsapi?fake=.js"></script>
<div id="chart_div"></div>
<br />
<br />
<div id="creativeCommons" style="text-align: center; width: 400px;"> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br/><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/InteractiveResource" property="dct:title" rel="dct:type">Code to add annotations to a ColumnChart</span> by <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Andrew Gallant</span> and inspired by Google Visualization API user Dezső Róbert is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US">Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License</a>.</div>

JavaScript

google.load("visualization", "1", {packages: ["corechart"]});
google.setOnLoadCallback(drawChart);

function drawChart() {
	var items = '2010_Math:68_Reading:68_Writing:75;2011_Math:70_Reading:74_Writing:82;2012_Math:78_Reading:61_Writing:71'.split(';');
	var data = new google.visualization.DataTable();
	var bars = 0;
    data.addColumn('string', 'Year');
             
   if (items.length > 0) {
		var col = items[0].split('_');
		for (j = 1; j < col.length; j++) {
			var score = col[j].split(':');
            data.addColumn({type: 'string', role: 'annotation'});
            data.addColumn({type: 'string', role: 'annotationText'});
            data.addColumn('number', score[0]);
        }
        bars = col.length - 1;
        data.addColumn('number', 'Average');
        data.addRows(items.length);
        for (i = 0; i < items.length; i++) {
			var item = items[i].split('_');
			data.setValue(i, 0, item[0]);                                                                
			var avg = 0;
			for (j = 1; j < item.length; j++) {
				var score = item[j].split(':');
				var k=j*3;
				data.setValue(i, (k-2), score[1]);
				data.setValue(i, (k-1), score[1]);
				data.setValue(i, k, parseInt(score[1]));
				avg += parseInt(score[1]);
			}
			avg = avg / (item.length - 1);
			data.setValue(i, ((item.length-1)*3)+1, avg);
        }
    }
    var color = ['#c8c8c8', '#00a3cc', '#5b5b5b', '#680202']
    var series = [];
    for (var k = 0; k < bars; k++) {
		series.push({ type: 'bar' });
    }
    series.push({ type: 'line' });
    var options = {
		'title': 'School Score',
		'titleTextStyle':{
			'fontSize':16,
			'fontName':'Montserrat,sans-serif',
			'color':'#4c4c4c',
			bold:false
        },
        'vAxis': { 'title': "% of Students at or Above Provincial Standards", 'minValue': 0, 'maxValue': 100,'textStyle': {'color': '#4c4c4c','fontName':'Montserrat,sans-serif','fontSize':12,bold:false,italic:false},'titleTextStyle': {'color': '#8b8b8b','fontName':'Myriad...