Sorry about the display vs visibility thing...I meant to imply using display:block/none rather than visibility.
Is there any particular reason to redraw the chart when you unhide it a second time? Your error seems to stem from the redraw. If you rewrite the code like this:
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Google Visualization API Sample</title>
<script type="text/javascript">
google.load('visualization', '1', {packages: ['motionchart']});
function drawVisualization() {
var count = 0;
var data = new google.visualization.DataTable();
data.addRows(6);
data.addColumn('string', 'Fruit');
data.addColumn('date', 'Date');
data.addColumn('number', 'Sales');
data.addColumn('number', 'Expenses');
data.addColumn('string', 'Location');
data.setValue(0, 0, 'Apples');
data.setValue(0, 1, new Date (1988,0,1));
data.setValue(0, 2, 1000);
data.setValue(0, 3, 300);
data.setValue(0, 4, 'East');
data.setValue(1, 0, 'Oranges');
data.setValue(1, 1, new Date (1988,0,1));
data.setValue(1, 2, 950);
data.setValue(1, 3, 200);
data.setValue(1, 4, 'West');
data.setValue(2, 0, 'Bananas');
data.setValue(2, 1, new Date (1988,0,1));
data.setValue(2, 2, 300);
data.setValue(2, 3, 250);
data.setValue(2, 4, 'West');
data.setValue(3, 0, 'Apples');
data.setValue(3, 1, new Date(1988,1,1));
data.setValue(3, 2, 1200);
data.setValue(3, 3, 400);
data.setValue(3, 4, "East");
data.setValue(4, 0, 'Oranges');
data.setValue(4, 1, new Date(1988,1,1));
data.setValue(4, 2, 900);
data.setValue(4, 3, 150);
data.setValue(4, 4, "West");
data.setValue(5, 0, 'Bananas');
data.setValue(5, 1, new Date(1988,1,1));
data.setValue(5, 2, 788);
data.setValue(5, 3, 617);
data.setValue(5, 4, "West");
window.motionchart.draw(data, {'width': 800, 'height': 400});
}
function toggleVisibility(ctrl) {
container = document.getElementById('container');
console.log(ctrl.value);
if (ctrl.value=='Show_first') {
container.style.display = 'block';
ctrl.value='Hide';
drawVisualization();
}
else if (ctrl.value=='Show') {
container.style.display = 'block';
ctrl.value='Hide';
}
else {
container.style.display = 'none';
ctrl.value='Show';
}
}
google.setOnLoadCallback(function() {
document.getElementById('button').style.visibility = 'visible';
window.motionchart = new google.visualization.MotionChart(document.getElementById('visualization'));
console.log(window.motionchart);
});
</script>
</head>
<body style="font-family: Arial;border: 0 none;">
Refresh Motionchart
<input id="button" type="button" value="Show_first" onclick="toggleVisibility(this);"></input>
<div id="container" style="display:none"> <!-- use visibility:hidden for the other case -->
Motionchart
<div id="visualization" style="width: 800px; height: 400px;"></div>
</div>
</body>
</html>
Then it only draws the function the first time you click the button. You can then hide and unhide it as many times as you like.