var c; // timers for the moving boxes
var d;
var e;
var f;
var g;
var h;
var t; // game timer
var i; // timers for the questions
var j;
var k;
var l;
var m;
var box3;
var box4;
var box5;
var box6;
var box7;
var box8;
var num1;
var num2;
var num3;
var guess1; // the 4 answer boxes
var guess2;
var guess3;
var guess4;
var answer1;
var answer2;
var answer3;
var answer4;
var arith = "add";
var z = 0; // dummy variable to get a function to return a value
var posx = 800; // initial x position (from left)
var space = 480; // height of bars minus height of boxes
var level = 1;
var miss = 0;
var hit = 0;
var percentage = 0;
var factor = 5;
var timeout = 60000; // in milliseconds, i.e., 1 minute
var first = true;
var run = false;
var guessed = false;
var runOnceTimer;

function fillbox(x) {
	this.id = x;
	this.speed = level * Math.random();
	this.posx = posx;
	if(first == true) {
		this.posy = -30;
	}
	else if(first == false) {
		this.posy = (space * Math.random()) + 90;
	}
	else {
		alert('ERROR >> Is this your first time playing the game?');
	}
	this.speed = level * Math.random();
	document.getElementById(this.id).style.top = this.posy + "px";
}

function populate() {
	box3 = new fillbox("yellow1");
	box4 = new fillbox("yellow2");
	box5 = new fillbox("red1");
	box6 = new fillbox("red2");
	box7 = new fillbox("green1");
	box8 = new fillbox("green2");
}

function advance(x,y) {
	if(run == true) {
		if(x <= 0) {
			z = posx;
			miss = miss + 1;
		}
		else {
			z = x - y;
		}
	}
	else {
		z = x
	}
	return z;
}

function funcbox3() {
	box3.posx = advance(box3.posx,box3.speed);
	document.getElementById(box3.id).style.left = box3.posx + "px";
	c = setTimeout("funcbox3()",10);
}

function funcbox4() {
	box4.posx = advance(box4.posx,box4.speed);
	document.getElementById(box4.id).style.left = box4.posx + "px";
	d = setTimeout("funcbox4()",10);
}

function funcbox5() {
	box5.posx = advance(box5.posx,box5.speed);
	document.getElementById(box5.id).style.left = box5.posx + "px";
	e = setTimeout("funcbox5()",10);
}

function funcbox6() {
	box6.posx = advance(box6.posx,box6.speed);
	document.getElementById(box6.id).style.left = box6.posx + "px";
	f = setTimeout("funcbox6()",10);
}

function funcbox7() {
	box7.posx = advance(box7.posx,box7.speed);
	document.getElementById(box7.id).style.left = box7.posx + "px";
	g = setTimeout("funcbox7()",10);
}

function funcbox8() {
	box8.posx = advance(box8.posx,box8.speed);
	document.getElementById(box8.id).style.left = box8.posx + "px";
	h = setTimeout("funcbox8()",10);
}

function start() {
	first = false;
	miss = 0;
	hit = 0;
	percentage = 0;
	run = true;
	genquestion();
	change();
	populate();
	t = setTimeout("end()",timeout);
}

function end() {
	run = false;
	if(box3.posx <= 300) {
		miss = miss + 1;
	}
	if(box4.posx <= 300) {
		miss = miss + 1;
	}
	if(box5.posx <= 500) {
		miss = miss + 1;
	}
	if(box6.posx <= 500) {
		miss = miss + 1;
	}
	if(box7.posx <= 700) {
		miss = miss + 1;
	}
	if(box8.posx <= 700) {
		miss = miss + 1;
	}
	percentage = 100 * (hit / (hit + miss));
	alert('You played for '+(timeout / 1000)+' seconds'+'\n'+'You were on difficulty level '+level+'\n'+'You hit '+hit+' and you missed '+miss+'\n'+'\n'+'Remember that the maths is '+factor+' times more important than the boxes'+'\n'+'\n'+'You got a score of '+Math.round(percentage)+'%');
}

function yellow() {
	if((box3.posx <= 480) && (box3.posx >= 300)) {
		hit = hit + 1;
		box3.posx = posx;
	}
	else if((box4.posx <= 480) && (box4.posx >= 300)) {
		hit = hit + 1;
		box4.posx = posx;
	}
	else {
		miss = miss + 1;
	}
}

function red() {
	if((box5.posx <= 680) && (box5.posx >= 500)) {
		hit = hit + 1;
		box5.posx = posx;
	}
	else if((box6.posx <= 680) && (box6.posx >= 500)) {
		hit = hit + 1;
		box6.posx = posx;
	}
	else {
		miss = miss + 1;
	}
}

function green() {
	if((box7.posx <= 880) && (box7.posx >= 700)) {
		hit = hit + 1;
		box7.posx = posx;
	}
	else if((box8.posx <= 880) && (box8.posx >= 700)) {
		hit = hit + 1;
		box8.posx = posx;
	}
	else {
		miss = miss + 1;
	}
}

function change() {
	timeout = 1000 * parseInt(document.getElementById("duration").value);
	level = parseInt(document.getElementById("difficulty").value);
}

function genquestion() {
	if(run == true) {
		arith = 3 * Math.random();
		arith = Math.floor(arith) + 1;
		if(arith == 1) {
			document.getElementById("question").innerHTML = add();
		}
		else if(arith == 2) {
			document.getElementById("question").innerHTML = take();
		}
		else if(arith == 3) {
			document.getElementById("question").innerHTML = multiply();
		}
		i = setTimeout("preludeanswer()",5000);
	}
}

function add() {
	num1 = Math.round(20 * Math.random());
	num2 = Math.round(15 * Math.random());
	num3 = num1 + num2;
	return num1+" + "+num2+" = ..."
}

function take() {
	num1 = Math.round(15 * Math.random());
	num2 = Math.round(10 * Math.random());
	num3 = num1 - num2;
	return num1+" - "+num2+" = ..."
}

function multiply() {
	num1 = Math.round(10 * Math.random());
	num2 = Math.round(8 * Math.random());
	num3 = num1 * num2;
	return num1+" x "+num2+" = ..."
}

function preludeanswer() {
	document.getElementById("question").innerHTML = "";
	createguesses();
	j = setTimeout("displayanswer()",5000);
}

function createguesses() {
	arith = 4 * Math.random();
	arith = Math.floor(arith) + 1;
	answer1 = num3;
	answer2 = Math.round(num3 * Math.random());
	if(answer2==answer1) {
		answer2 = answer2 + 1;
	}
	answer3 = Math.round(num3 * Math.random());
	if(answer3==answer1 || answer3==answer2) {
		answer3 = answer3 + 1;
		if(answer3==answer1 || answer3==answer2) {
			answer3 = answer3 + 1;
		}
	}
	answer4 = Math.round(num3 * Math.random());
	if(answer4==answer1 || answer4==answer2 || answer4==answer3) {
		answer4 = answer4 + 1;
		if(answer4==answer1 || answer4==answer2 || answer4==answer3) {
			answer4 = answer4 + 1;
			if(answer4==answer1 || answer4==answer2 || answer4==answer3) {
				answer4 = answer4 + 1;
			}
		}
	}
	if(arith==1) {
		guess1 = answer1;
		guess2 = answer2;
		guess3 = answer3;
		guess4 = answer4;
	}
	else if(arith==2) {
		guess2 = answer1;
		guess1 = answer2;
		guess3 = answer3;
		guess4 = answer4;
	}
	else if(arith==3) {
		guess3 = answer1;
		guess2 = answer2;
		guess1 = answer3;
		guess4 = answer4;
	}
	else if(arith==4) {
		guess4 = answer1;
		guess2 = answer2;
		guess3 = answer3;
		guess1 = answer4;
	}
}

function displayanswer() {
	document.getElementById("A-answer").innerHTML = guess1;
	document.getElementById("B-answer").innerHTML = guess2;
	document.getElementById("C-answer").innerHTML = guess3;
	document.getElementById("D-answer").innerHTML = guess4;
	document.getElementById("A-answer").style.left = "5px";
	document.getElementById("B-answer").style.left = "905px";
	document.getElementById("C-answer").style.left = "5px";
	document.getElementById("D-answer").style.left = "905px";
	document.getElementById("A-button").style.left = "5px";
	document.getElementById("B-button").style.left = "905px";
	document.getElementById("C-button").style.left = "5px";
	document.getElementById("D-button").style.left = "905px";
	k = setTimeout("ping()",5000);
}

function guess(x) {
	guessed = true;
	if(x == arith) {
		hit = hit + factor;
	}
	else {
		miss = miss + factor;
	}
	document.getElementById("A-answer").innerHTML = "";
	document.getElementById("B-answer").innerHTML = "";
	document.getElementById("C-answer").innerHTML = "";
	document.getElementById("D-answer").innerHTML = "";
	document.getElementById("A-answer").style.left = "1010px";
	document.getElementById("B-answer").style.left = "1010px";
	document.getElementById("C-answer").style.left = "1010px";
	document.getElementById("D-answer").style.left = "1010px";
	document.getElementById("A-button").style.left = "1010px";
	document.getElementById("B-button").style.left = "1010px";
	document.getElementById("C-button").style.left = "1010px";
	document.getElementById("D-button").style.left = "1010px";
	l = setTimeout("genquestion()",5000);
}

function ping() {
	if(guessed == false) {
		miss = miss + factor;
		document.getElementById("A-answer").innerHTML = "";
		document.getElementById("B-answer").innerHTML = "";
		document.getElementById("C-answer").innerHTML = "";
		document.getElementById("D-answer").innerHTML = "";
		document.getElementById("A-answer").style.left = "1010px";
		document.getElementById("B-answer").style.left = "1010px";
		document.getElementById("C-answer").style.left = "1010px";
		document.getElementById("D-answer").style.left = "1010px";
		document.getElementById("A-button").style.left = "1010px";
		document.getElementById("B-button").style.left = "1010px";
		document.getElementById("C-button").style.left = "1010px";
		document.getElementById("D-button").style.left = "1010px";
		m = setTimeout("genquestion()",5000);
	}
	else if(guessed == true) {
	}
	else {
		alert('ERROR >> Have you guessed?');
	}
}

function runonce() {
	if(document.getElementById("skill")) {
		populate();
		funcbox3();
		funcbox4();
		funcbox5();
		funcbox6();
		funcbox7();
		funcbox8();
		document.getElementById("duration").value = (timeout / 1000);
		document.getElementById("difficulty").value = level;
	}
	else {
		runOnceTimer = setTimeout("runonce()",100);
	}
}

document.onload = runonce();
