function start() {
	error = false;
	errorElement = document.createElement('h2');
	errorElement.style.display = 'none';
	errorElement.appendChild(document.createTextNode('testing'));
	document.getElementsByTagName('div').item(1).appendChild(errorElement);

	question = document.getElementById('question');
	input = document.getElementById('input');

	totalTime = 0;
	count = -1;

	ops = new Array();
	ops[0] = { string : ' + ', evaluate : function(a,b) { return a + b; } };
	ops[1] = { string : ' - ', evaluate : function(a,b) { return a - b; } };
	ops[2] = { string : ' / ', evaluate : function(a,b) { return Math.floor(a / b); } };
	ops[3] = { string : ' * ', evaluate : function(a,b) { return a * b; } };

	form = document.forms[0];
	form.setAttribute('method', 'post');
	form.setAttribute('action', '/games/highscore/?game=math');

	document.forms[0].onsubmit = function() {
		if (count === -1) {  // user enters his name
			var p = document.getElementById('instructions');
			p.parentNode.removeChild(p);
			count = 0;
			var nameInput = document.createElement('input');
			nameInput.setAttribute('type', 'hidden');
			nameInput.setAttribute('name', 'name');
			nameInput.setAttribute('value', input.value);
			document.forms[0].appendChild(nameInput);

			result = document.createElement('input');
			result.setAttribute('type', 'hidden');
			result.setAttribute('name', 'result');
			document.forms[0].appendChild(result);
			input.value = '';
		} else {  
			var guess = parseInt(input.value);
			if (guess === answer) {
				totalTime += (new Date().getTime() - starting);
				if (error) {
					errorElement.style.display = 'none';
					error = false;
				}
			} else {
				error = true;
				errorElement.replaceChild(document.createTextNode('Wrong answer: ' + questionString  + ' = ' + answer + ', not ' + guess), errorElement.firstChild);
				errorElement.style.display = 'block';
				totalTime += 10 * 1000;  // 10 seconds penalty for wrong answer
			}
			input.value = '';
			count++;
			if (count == 20) {
				input.parentNode.removeChild(input);
				question.replaceChild(document.createTextNode('Done - submitting result...'), question.firstChild);
				result.value = totalTime;
				// player is done so he may submit the form
				return true;
			}
		}

		poseQuestion();
		return false;
	}

	input.focus();
}

function poseQuestion() {
	var i1 = Math.floor(Math.random() * 100);
	var i2 = Math.floor(Math.random() * 100);
	var opNumber = Math.floor(Math.abs(Math.random() * 4 - 0.0001));
	if (opNumber == 2) {  // division
		i2 = Math.floor(i2 / 10);
		if (i2 === 0) {
			i2 = 7;
		}
	} else if (opNumber == 3) {
		i2 = Math.floor((Math.random() + 0.1) * 10); 
	}
	var operator = ops[opNumber];
	answer = operator.evaluate(i1, i2);
	starting = new Date().getTime();
	questionString = i1 + operator.string + i2;
	question.replaceChild(document.createTextNode(questionString), question.firstChild);
}
