//VARIABLES GLOBALES
var estadoCrono=0; // Los estados del crono son 
	// 0 parado y en 90
	// 1 para en marcha
	// 2 para crono a cero. El botón de inicio se reactiva y al presionar de nuevo se pone a 60 y el estado vuelve a ser 1.
var puntuacion_minima=15;  //puntuacion minima para entrar en el ranking. // 0 para las pruebas.
var tiempoInicial = 90;
var tiempoRestante; 
var horaunix0; var horaunix1;

// Números y operación.
var n1;
var n2;
var d1;
var d2;
var operacion;
var sol= new Array(1,1);
var puntos;
var aciertos;
var errores;
var flag =0;
var recarga = 0; // cuando se le da al botón de "jugar de nuevo" que también sirve para el crono esta variable aumenta una unidad.
// sirve para que no salga la pantalla de "cargando"

function comienzo() {
	// función que  inicia los datos, limpia los campos y activa los botones.

	// Elimina la capa de cargado de pagina (solo si esta
	if (recarga == 0) {muestra('cargando');}
	recarga++;
	
	//inicializamos tiempo y crono
	tiempoRestante=tiempoInicial;
 	estadoCrono=0;
	ajustaCrono(tiempoRestante);
	
	// estado de los botones y cajas correcto
	document.getElementById("start").disabled=false; //activa el botón para empezar el juego
	document.getElementById("respuesta_num").value=''; // limpia el hueco para poner la respuesta
	document.getElementById("respuesta_den").value=''; // limpia el hueco para poner la respuesta

	//inicializamos puntos y marcador
	puntos = 0; 
	aciertos = 0; 
	errores = 0;
	
	ajustaMarcador();

	// iniciar panel de juego

	document.getElementById("num1").innerHTML='?';
	document.getElementById("num2").innerHTML='?';
	document.getElementById("den1").innerHTML='?';
	document.getElementById("den2").innerHTML='?';

	
	//document.getElementById('enviarPuntos').style.display = 'none';
	document.getElementById('botonMuestraEnvio').style.display = 'none';	
	document.getElementById("respuesta_num").disabled=true; // caja de respuesta deshabilitada
	document.getElementById("respuesta_den").disabled=true; // caja de respuesta deshabilitada

}

var n = 3; // variable para la cuenta atrás peliculera

function ya(e) {

	evento = e;
	// el usuario acaba de hacer click en el botón de "empezar juego"
	if (estadoCrono == 1) {
		devolverFalso(e);
		// No se hace nada. Esto no debería ser necesario porque el botón de empezar juego está desactivado
	}
	
	if (n<0) {
		document.getElementById('mensaje_atras').style.display = 'none';
		document.getElementById('botonMuestraEnvio').style.display = 'none';	
		horaunix0 = horaunix();
		crono(); 
		generar();
	}
	if (n >= 0){	
		document.getElementById('mensaje_atras').style.display = 'block';
		document.getElementById('mensaje_atras').innerHTML=n;
		setTimeout("ya(evento)", 700);
		n--;
		devolverFalso(e);
	}
}


//FIN VARIABLES GLOBALES.

//FUNCIONES AUXILIARES O QUE NO SIENDO AUXILIARES
//OCUPAN MUY POCO.

//
//funcion que devuelve falso (es necesario por que return false no funciona para ie).
function devolverFalso(e){
 // e es un evento
 if(e.preventDefault){
    // forma estandar de evitar el submit.
    e.preventDefault();
   }else{
    // forma de IE de evitar el submit
    e.returnValue = false;
  }
}

//
// Esta funcion muestra en pantalla el tiempo de cronometro.
function ajustaCrono(t){
	document.getElementById("segundos").innerHTML=t;
	if (t==0) {document.getElementById("segundos").style.color="#F44";}	//pone el tiempo en rojo.
		else {document.getElementById("segundos").style.color="#000"}; //pone el tiempo en negro

}

	
//

//

//Lleva el contenido de un elemento HTML en otro, conocidos sus id
function PonerPuntosEn(u){
	document.getElementById(u).value = aciertos + '-'  +puntos;
}
		

//
// Funcion cuenta atras (crono)
// La variable estadoCrono es global y es presentada fuera de esta función.
function crono()
{
	// cd = countDown
	if (estadoCrono == 0) {
		estadoCrono = 1;
		setTimeout("", 1000);
		document.getElementById("start").disabled=true;
		}

	// Activada cuentra atrás.
	//tiempoRestante=Math.round(10*tiempoRestante-1)/10;
	tiempoRestante --;
	
	if (estadoCrono == 2) { 
		comienzo();
		return 
		}
			
	if(tiempoRestante < 1){
			// El crono está a cero
			estadoCrono=2;
			finCuentaAtras();
	} else {
			//tV = (Math.floor(tiempoRestante) == tiempoRestante) ? tiempoRestante+'.'+0 : tiempoRestante;
			//tV = (Math.floor(tiempoRestante) == tiempoRestante) ? tiempoRestante+'.'+0 : tiempoRestante;
			tV = tiempoRestante;
			ajustaCrono(tV);
			setTimeout("crono()",1000);
	}

}
function finCuentaAtras(){
	//final
	// Lote de instrucciones cuando acaba la cuenta atrás
	
	ajustaCrono(tiempoRestante);
	document.getElementById("respuesta_num").disabled=true; //desactiva la caja para escribir la respueta
	document.getElementById("respuesta_den").disabled=true; //desactiva la caja para escribir la respueta
	document.getElementById("start").disabled=false; // Vuelve a activar el botón de juego
	
	horaunix1 = horaunix();
	//alert (horaunix1 - horaunix0);
	if (horaunix1- horaunix0 > (tiempoInicial + 3)){
		alert('Puntuaci\u00F3n invalidada por exceso de tiempo.\r\nSi estas leyendo esto debes saber que el sistema ha detectado un uso irregular del juego y la partida queda invalidada.');
		window.location.reload();
		//devolverFalso(evento);
	}
	
	if (puntos > 3*puntuacion_minima ) {
		alert ('Eres una m\u00e1quina.\r\nPuedes inscribir tu nombre entre los mejores');
		muestra("botonMuestraEnvio");
	} else if  (puntos > 2*puntuacion_minima ){
		alert('Enhorabuena, has hecho ' + puntos +' puntos y puedes inscribir tu nombre entre los mejores.');
		muestra("botonMuestraEnvio");
	} else if ( puntos > puntuacion_minima) {
		alert('Ya puedes colar tu nombre entre el de los mejores.');
		muestra("botonMuestraEnvio");
	} else if (puntos > puntuacion_minima - 2){
		alert('No lo has hecho nada bien. Intentalo de nuevo. \r\nSi consigues hacer m\u00e1s de ' + puntuacion_minima + ' puntos podr\u00e1s poner tu nombre entre los mejores');
	} else{
		alert('Espero que estuvieras distraido. Un mono adiestrado lo habr\u00eda hecho mejor.\r\nSi consigues hacer m\u00e1s de ' + puntuacion_minima + ' puntos podr\u00e1s poner tu nombre entre los mejores');
	}
		
}


function generar(){

	if (estadoCrono==0) {return}
	// genera tres números al azar. El primero y el tercero entre -10 y 10. El otro será 0, 1, 2 o 3 y se corresponderá
	// con la operación suma, resta, multiplicación y división y con el símbolo correspondiente.
	// además se ocupa de mostrar en cada caso los caracteres que toquen.
	
	
	// inicialización de los valores y borrado en pantalla
	document.getElementById("mensaje_bien").innerHTML='';
	document.getElementById("mensaje_mal").innerHTML='';
	document.getElementById('divmensaje').style.display = 'none';	

	document.getElementById("solucion").innerHTML='';
	document.getElementById("respuesta_num").value='0';
	document.getElementById("respuesta_den").value='1';	
	document.getElementById("respuesta_num").disabled=false;
	document.getElementById("respuesta_den").disabled=false;
	
	// Operacion (0, suma; 1 resta; 2 multiplicación; 3 división
	operacion = aleatorio(0,3);
	flag=0;
	// esta variable es una cadena que incluye el número con el signo delante.
	//if (n2>0) {n2signo = '+'+n2;} else {n2signo=n2};
	switch(operacion){
		case 2: //multiplicacion
			n1 = aleatorio(1,10);
			n2 = aleatorio(1,10);
			d1 = aleatorio(1,10);
			d2 = aleatorio(1,10);
		break;
		case 3: // division
			n2 = aleatorio(1,10);
			d2 = aleatorio(1,10);
			if (aleatorio(1,10)<5){ // n1 multiplo de n2 y d1 de d2
				//alert("facil");
				n1 = n2*aleatorio(1,6);
				d1 = d2*aleatorio(1,6);
			} else { 
			n1 = aleatorio (1,10); 
			d1 = aleatorio(1, 10)
			}
		break;
		default:
			n1 = aleatorio (1,6);
			n2 = aleatorio (1,6);
			d1 = aleatorio (1,6);
			d2 = aleatorio (1,6);
		break;
	}
	sol = opera(n1, d1, n2, d2, operacion);
	//alert (n1 +'/' +d1 +' operacion ' + n2 + '/' + d2 + ' = ' + sol[0] + '/' + sol[1] );
	//n1signo es n1 con el signo + o - delante según si es positivo o negativo.
	
	document.getElementById("den1").innerHTML=d1;
	document.getElementById("den2").innerHTML=d2;
	document.getElementById("num1").innerHTML=n1;
	document.getElementById("num2").innerHTML=n2;
	
	
	operaciones = new Array(); 	operaciones[0] ='+'; operaciones[1] ='&ndash;'; operaciones[2] ='&middot;'; operaciones[3] =':';
	document.getElementById("op").innerHTML = operaciones[operacion];
	
	// ponemos el cursor en la casilla de respuesta
	document.getElementById('respuesta_num').select();
}

function ajustaMarcador(){
	document.getElementById("marcador").innerHTML = puntos;
	document.getElementById("marcador_aciertos").innerHTML = aciertos;
	document.getElementById("marcador_errores").innerHTML = errores;
}


function comprobar(e){
// Esta funcion comprueba si el usuario ha efectuado bien la cuenta,
// suma un punto a su puntuación en tal caso 
// y luego vuelve plantea otra cuenta
// siempre que aun esté rulando el crono.

// Si el crono está a cero no ha dado tiempo esta función 
// desactiva un par de elementos y devuelve falso
	if (estadoCrono ==2)
		{
			//El crono ha llegado a cero.
			document.getElementById("respuesta_num").disabled=true;
			document.getElementById("respuesta_den").disabled=true;
			document.getElementById("start").disabled=true;
			devolverFalso(e);
		}
		
	numerador = document.getElementById("respuesta_num").value;
		
	// Si el crono aún está funcionanado...
	if ( equivalentes(numerador, document.getElementById("respuesta_den").value, sol[0], sol[1])) {
		// solucion correcta. Sumar un punto. Mostrar mensaje.
		if (flag ==1) {
			puntos = puntos +3 ;
			aciertos++;
		} else {
			puntos = puntos -3000; 
			//puntos_pos = puntos_pos -10;
			errores = errores +30;
		}
		if ( Math.max(numerador, -numerador) == Math.max(sol[0], -sol [0] )){
			document.getElementById('divmensaje').style.display = 'block';	
			document.getElementById("mensaje_bien").innerHTML = 'perfe';
			puntos ++ ;
		} else {
			document.getElementById('divmensaje').style.display = 'block';	
			document.getElementById("mensaje_bien").innerHTML = 'bien';
		}

	} else {
		//Solucion incorrecta.
		document.getElementById('divmensaje').style.display = 'block';	
		document.getElementById("mensaje_mal").innerHTML ='mal';
		puntos=puntos-3;
		errores++;
		//document.getElementById("solucion").innerHTML ='Soluci&oacute;n:&nbsp;'+sol;
	}

	ajustaMarcador();
	//Tras 0,6 segundos se genera una nueva cuenta y se evita el envío por parte del formulario.
	setTimeout("generar()", 600);
	devolverFalso(e);
}


function horaunix(){
	mydate = new Date(); 
	strDate = mydate.getTime()/1000; 
	return Math.ceil(strDate); 
	// sacado de http://agarrate.net/blog/articulos/449
	
}	
