var u=0;	
var l=0;	
var p=0;	
var t=0;	
var b=0;	
var c=0;	
var q=0;	
var f=0;	
var a=0;	
function w(x){ 
	document.write(x);
}
function s(y,x){	
	return " style='position:absolute;top:"+y+"px;left:"+x+"px;text-align:center;vertical-align:middle;font-size:21px;";
}
function m(){ 
	
	w("<b id='l'"+s(9,9)+"width:96px'></b><b id='p'"+s(9,128)+"width:164px;border-top:1px solid white;border-bottom:1px solid white'></b><b id='s'"+s(9,280)+"width:128px'></b>");
	var k=0;
	for(var j=0;j<6;++j){
	w("<div"+s(42,j*64+9)+"'>");
	for(var i=0;i<6;++i){
		w("<div id='"+k+"' style='width:64px;height:64px;border: solid 1px #90f;'> </div>");
		++k;
	}
	w("</div>");
	}

	for(var i=0;i<3;++i){
	w("<img id='n"+(i+1)+"' src='n.gif' width='50' height='64'"+s(448,9+64*i)+"'>");
	}
	w("<img id='n' src='n.gif' width='50' height='64'"+s(448,9)+"'><img id='c' width='50' height='64' src=''"+s(0,0)+"'>");
	w("<h2 onclick='game=mult;ng(0)'"+s(448,9+64*3)+"background-color:gray;border:outset 4px gray;width:128px'>Multiples</h2>");
	w("<h2 onclick='game=fact;ng(0)'"+s(480,9+64*3)+"background-color:gray;border:outset 4px gray;width:128px'>Factors</h2>");
	w("<h2 onclick='game=prim;ng(0)'"+s(512,9+64*3)+"background-color:gray;border:outset 4px gray;width:128px'>Primes</h2>");
}


function g(x){	
	return document.getElementById(x);
}

function r(x){
	return Math.floor(Math.random()*x);
}

function d(x,y){	
	g(x).innerHTML=y;
}

function an(x,y,z){	
	g(x).src=y+".gif";
	setTimeout("g('"+x+"').src='"+x+".gif'",z);
}

function ch(){
	if(t==p){	
	clearInterval(b);	an('c','m',900);
	g("n"+l--).style.display="none";
	t=0;
	p=15;
	c-=100;
	u=0;
	setTimeout("v(0,0);v(0,1);++u;b=setInterval('o()',1500-q*50);",999);

	}
	if(!l){	
	clearInterval(b);	
	alert("U Dead!");
	}
	var j=0;
	for(i=0;i<36;++i){	
	if(parseInt(g(i).a)==0)
		++j;
	}
	if(!j){
	ng(++q);
	}
}

function v(x,z){	i=t;	
	if(z){	
	i=p;
	}
	
if((x==1&&!((i+1)%6))||(x==-1&&!(i%6)))	
	return;

	if(i+x>-1&&i+x<36){	
	if(z){	
		p+=x;
	}else{
		t+=x;	
	}
	}
	i=t;	
	if(z){	
	i=p;
	}
	x=Math.floor(i/6)*64+18;
	y=i%6*64+42;if(z){
	z='n';
	}else{
	z='c';
	}g(z).style.left= x+"px";
	g(z).style.top= y+"px";
}


function o(){
	if(l){	if(Math.floor(t/6)!=Math.floor(p/6)){
		if(r(2)){
		x=t<p?6:6*-1;
		}else{
		x=t<p?-1:1;
		}
	}else{	
		x=t<p?1:-1;
	}
	if(x+t==a){
		x=0;
	}
	if(r(2)){
		np(t);
	}
	v(x,0);	
	++c;	
	ch();	}
}

function range(from, to){
	var x=	Math.random()*(to-from) + from;
	if(Math.floor(from) == from){
		x=	Math.round(x);
	}
	if(this.last == x){
		x=	(x>to)? x--:x++;
	}
	this.last=	x;
	return x;
}


var mult = {
	newSet: function(skill, level){
		//skill = like grade level (2 per grade)
		//level = game level
		var m;
		var b;
		this.start=	0;
		if(skill <= 2){
			m=	3;
			b=	3;
		}else if(skill == 3){
			m=	5;
			b=	5;
		}else if(skill == 4){
			m=	5;
			b=	10;
		}else if(skill == 5){
			m=	9;
			b=	11;
		}else if(skill == 6){
			m=	12;
			b=	12;
		}else if(skill == 7){
			m=	16;
			b=	12;
		}else if(skill == 8){
			m=	20;
			b= 12;
		}else{
			b=	20;
			m=	50;
		}
		if(level < 2){
			m=	2;
		}
		var o=	this.multiple;
		this.multiple=	range(2,m);
		if(o == this.multiple){
			this.multiple=	range(2,m);
		}
		this.end=	b;
		//2DO: somesort of lib function that looks up translations
		return 'Multiples of '+ this.multiple;
	}
	
	
	,correct: function(){ 
		return this.multiple * range(this.start, this.end);
	}
	
	,wrong: function(){
		return this.correct() + range(1, this.multiple-1);
	}
	
};

var prim=	{
	c: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
	,newSet: function(skill, level){
		this.end=	skill;
		return "Prime Numbers";
	}
	,correct: function(){
		return this.c[range(0,this.c.length-1)];
	}
	,wrong: function(){
		if(range(0,99)<5){
			return range(0,1);
		}else{
			return this.c[range(0,this.end)] * range(2,this.end);
		}
	}
};

var fact=	{
	newSet: function(skill, level){
		this.a=	[range(1,9)*range(4,9),1];
		
		for(var i=2;i<this.a[0];++i){
			if(this.a[0] % i == 0){
				this.a.push(i);
			}
		}
		return 'Factors of '+ this.a[0];
	}
	,correct: function(){ 
		return this.a[range(0,this.a.length-1)];
	}
	,wrong: function(){
		var x=	range(0,this.a.length-2);
		y=	x+1;
		if(this.a[y] - this.a[x] == 1){
			return 0;
		}
		return range(this.a[x]+1,this.a[y]-1);
	}
};

var game;

function np(x){	
	if( Math.random() > range(0.33,0.66)){//wrong
		g(x).a=0;
		z=	game.correct();
	}else{
		g(x).a=1;
		z=	game.wrong();
	}
	d(x,"<br>"+z);
}


function ng(x){
	++u;if(x==0){	
	c=0;
	l=3;
	q=1;
	for(i=1;i<=3;++i){g("n"+i).style.display="block";}
	}f=0;
	
	d("p", game.newSet(4,q));
	
	for(i=0;i<36;++i){
	np(i);
	}
	d('l',"Level: "+q);
	d('s',"Score: "+c);
	p=15;
	t=0;
	v(0,1);
	v(0,0);
	g('c').src="c.gif";
	clearInterval(b);
	b=setInterval("o()",1500-q*50);
}



function h(x){if(document.all){	
	x=window.event.keyCode;
	}else{
	x=x.which;	
	}
	

if(l&&u){
	if(x==38||x==105){	
		v(-1,1);}
	if(x==40||x==107){	
		v(1,1);}
	if(x==37||x==106){	
		v(-1*6,1);}
	if(x==39||x==108){	
		v(6,1);}
	if(x==32){	
		
		d(p," ");
		if(g(p).a==0){
		an('n','e',99);
		c+=100;
		d('s',"Score: "+c);
		}else{
		if(g(p).a==1){
		an('n','d',900);
		g("n"+l--).style.display="none";
		u=0;
		setTimeout("++u",999);
		}
		}
		g(p).a=2;	
		
	}
	ch();	
	}	
}


function pt(){

	g(a).style.background="#007";
	a=r(35);
	g(a);
	g(a).style.background="#00F";
}


setInterval("pt()",9999);	