var gs_fontCookie = 'gs_fontSize';
var gs_diagramCookie = 'gs_diagType';
var gs_cookieDays = 7;
var gs_animateFontSizeChange = true;

function init () {
	var body = document.body;
	var controls = document.getElementById('controls');
	if (!controls) return;
	controls = controls.getElementsByTagName('a');
	
	body._current = 8;
	body._active = (controls.length-1 >= (body._current/2)+1) ? controls[Math.floor(body._current/2)] : null; // imrprove
	if (body._active) body._active.className = "current";

	var sizes = [1,2,4,6,8,10,12,14,16];
	for (var i=0; i < controls.length-1 && i < sizes.length; i++) {
		controls[i]._to = sizes[i];
		controls[i].onclick = function() { changeFontSizeTo(this._to); return false; };
	}
	controls[i++].onclick = scoresControl; // Show/Hide scores
	controls[i++].onclick = showChart; // Show/Hide chart
	controls[i++].onclick = showTable; // Show/Hide table
	
	// restore user's preferences
	var fontSize = readCookie(gs_fontCookie);
	var diagram = readCookie(gs_diagramCookie);
	if (fontSize != null) changeFontSizeTo(parseInt(fontSize));
	if (diagram != null) {
		if (parseInt(diagram) == 1) showTable(); else showChart();
	}
}

function changeFontSizeTo (target) {
	var body = document.body;
	var controls = document.getElementById('controls');
	controls = controls.getElementsByTagName('a');
	body._target = target; // final size
	
	if (!gs_animateFontSizeChange) {
		body._current = body._target;
		if (body._active) body._active.className = '';
		body._active = (controls.length-1 >= (body._current/2)+1) ? controls[Math.floor(body._current/2)] : null; // improve
		if (body._active) body._active.className = "current";
		body.style.fontSize = body._current + 'px';
		
		
	} else if (!body._animating && body._current != target) {
		body._animating = window.setInterval(function() {
			body._current = (body._target > body._current) ? body._current+1 : body._current-1;
			if (body._active) body._active.className = '';
			body._active = (controls.length-1 >= (body._current/2)+1) ? controls[Math.floor(body._current/2)] : null; // improve
			if (body._active) body._active.className = "current";
			body.style.fontSize = body._current + 'px';
			
			if (body._current == body._target) {
				window.clearInterval(body._animating);
				body._animating = null;
			}
		}, 40 + ((10 - Math.abs(body._target-body._current))*4));
	}
	createCookie(gs_fontCookie, target, gs_cookieDays);
}

function scoresControl () {
	var draw = document.getElementById('draw');
	if (!draw) return false;
	while (this.firstChild) this.removeChild(this.firstChild);
	
	if (draw.className.indexOf('hidescores') == -1) {
		draw.className += ' hidescores';
		this.appendChild(document.createTextNode('Show scores'));
	} else {
		draw.className = draw.className.replace(/hidescores/, '');
		draw.className = draw.className.replace(/\s+/, ' ');
		this.appendChild(document.createTextNode('Hide scores'));
	}
	
	return false;
}

function showChart () {
	var draw = document.getElementById('draw');
	var button = document.getElementById('chartControl');
	if (!draw) return false;
	
	if (draw.className.indexOf('chart') == -1) { draw.className += ' chart'; }
	if (button) button.className = 'current';
	hideTable();
	createCookie(gs_diagramCookie, 0, gs_cookieDays);
	
	return false;
}
function showTable () {
	var draw = document.getElementById('draw');
	var button = document.getElementById('tableControl');
	if (!draw) return false;
	
	if (draw.className.indexOf('table') == -1) { draw.className += ' table'; }
	if (button) button.className = 'current';
	hideChart();
	createCookie(gs_diagramCookie, 1, gs_cookieDays);
	
	return false;
}
function hideChart () {
	var draw = document.getElementById('draw');
	var button = document.getElementById('chartControl');
	if (!draw) return false;
	
	if (draw.className.indexOf('chart') != -1) {
		draw.className = draw.className.replace(/chart/, '');
		draw.className = draw.className.replace(/\s+/, ' ');
	}
	if (button) button.className = '';
	return false;
}
function hideTable () {
	var draw = document.getElementById('draw');
	var button = document.getElementById('tableControl');
	if (!draw) return false;
	
	if (draw.className.indexOf('table') != -1) {
		draw.className = draw.className.replace(/table/, '');
		draw.className = draw.className.replace(/\s+/, ' ');
	}
	if (button) button.className = '';
	return false;
}

/* Cookie helpers courtesy of from www.quirksmode.org */
function createCookie (name, value, days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else { var expires = ""; }
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie (name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

