
		
		debug=0;
		
	id=0;

	//muestra la información de la pregunta
	function muestraPregunta(){
		var response=document.getElementById("response");
		response.value="";
		response.focus();
		
		setText("name",nueva_pregunta);
		document.getElementById("mensaje_respuesta_correcta").style.display="none";
		document.getElementById("mensaje_respuesta_acertada").style.display="none";
		document.getElementById("mensaje_respuesta_fallada").style.display="none";
		
		document.getElementById("campo_respuesta").style.display=""
		document.getElementById("esplicacion").style.display=""
		
	}

//establece el texto de un elemento
function setText(element,text){
	var name=document.getElementById(element);
	while ( name.firstChild) name.removeChild( name.firstChild );
	name.appendChild(document.createTextNode(text));
}

//parsea las respuestas para compararlas
function splitAndTrim(cadena){
	var data=cadena;
	
	
	
	
	data=data.toUpperCase().split(",")
	for(var i=0;i<data.length;i++){
		data[i]=data[i].replace(/^\s+|\s+$/g,"")
	}
	return data.sort()
}

//elimina todoas los hijos de un elemento
function vaciar(element){
	while(element.firstChild) element.removeChild(element.firstChild);
}

// indica si estamos respondiendo o mostrando el resultado de la respuesta
var respondido=false;

function comprueba_equivalencia(respuesta){
	for(var i=0;i<listado_preguntas.length;i++)
		if(listado_preguntas[i][4]>1 && compara_equivalencia(respuesta,listado_preguntas[i][2])){
			decrementaTabla(listado_preguntas[i][4])
			listado_preguntas[i][4]=1;
			listado_preguntas[i][3]=fecha_inicio+Math.floor((new Date()).getTime()/1000);
			//alert(respuesta+" "+listado_preguntas[i][2]+" "+listado_preguntas[i][4])
		}
}

function comprueba_pregunta(){
	var response=document.getElementById("response");
	return compara_equivalencia(listado_preguntas[pregunta_actual][2],response.value)
}

function compara_equivalencia(a,b){
	var correctas=splitAndTrim(a)
	var respuestas=splitAndTrim(b)
	
	var bien=correctas.length==respuestas.length;
	for(var i=0;i<correctas.length;i++)
		if(respuestas[i]!=correctas[i]) bien=false;
	return bien
}

function pulsaTecla(e){

	if(comprueba_pregunta()) preguntaRespondida();
}


var tabla_tiempos=[0,3,10,30,100,600,36000]
var repaso=4 // Nivel a partir del cual consideramos preguntas de repaso
var max_repaso=2

//gestiona la respuesta del usuario
function preguntaRespondida(){
	var response=document.getElementById("response");
	if(respondido){
		respondido=false;
		document.getElementById("campo_respuesta").style.display="block"
		document.getElementById("esplicacion").style.display="block"
		document.getElementById("mensaje_respuesta_correcta").style.display="none";
		document.getElementById("mensaje_respuesta_acertada").style.display="none";
		document.getElementById("mensaje_respuesta_fallada").style.display="none";
		document.getElementById("form_aprender").onSubmit=preguntaRespondida
		//muestraPregunta();
		preguntar();
		return false;
	}
		var warningShow=document.getElementById("warning");
	if(comprueba_pregunta()){
		if(tabla_tiempos.length>listado_preguntas[pregunta_actual][4]){
			if(listado_preguntas[pregunta_actual][4]!=0)
				listado_preguntas[pregunta_actual][4]++ // Nivel
			else {
				incrementaTabla(1)
				listado_preguntas[pregunta_actual][4]=2
			}
			
			//incrementamos el valor de los aciertos en la tabla
			incrementaTabla(listado_preguntas[pregunta_actual][4])
		}
		 // Próxima aparicion
		listado_preguntas[pregunta_actual][3]=
			fecha_inicio+Math.floor((new Date()).getTime()/1000)+tabla_tiempos[listado_preguntas[pregunta_actual][4]-1]
		listado_preguntas[pregunta_actual][5]=1 // Indica que el resultado se ha modificado y hay que guardarlo
		preguntar();
		return false;
	}
	else if(response.value!=""){
		document.getElementById("mensaje_respuesta_fallada").style.display="block";
		vaciar(document.getElementById("respuesta_fallada"));
		document.getElementById("respuesta_fallada").appendChild(document.createTextNode(response.value));
		comprueba_equivalencia(response.value)
	}
	teclea_borrar=0;

	if(listado_preguntas[pregunta_actual][4]!=0)
		//decrementamos el valor de los aciertos en la tabla
		decrementaTabla(listado_preguntas[pregunta_actual][4])
	else incrementaTabla(1)
		
	listado_preguntas[pregunta_actual][4]=1 // Nivel
	// Próxima aparicion
	listado_preguntas[pregunta_actual][3]= 
			fecha_inicio+Math.floor((new Date()).getTime()/1000)+tabla_tiempos[listado_preguntas[pregunta_actual][4]-1]			
	listado_preguntas[pregunta_actual][5]=1 // Indica que el resultado se ha modificado y hay que guardarlo
	
	
	document.getElementById("ok_button").focus();
	respondido=true;
	document.getElementById("mensaje_respuesta_correcta").style.display="block";
	vaciar(document.getElementById("respuesta_correcta"));
	document.getElementById("respuesta_correcta").appendChild(document.createTextNode(listado_preguntas[pregunta_actual][2]));
	document.getElementById("campo_respuesta").style.display="none"
	document.getElementById("esplicacion").style.display="none"
	//getPregunta(response.value,(bien?"1":"0"));
	return false;
}

function decrementaTabla(nivel){
	for(var i=nivel;i>1;i--){
		var celda=document.getElementById("niveles_aciertos").childNodes[i]
		var valor=parseInt(celda.firstChild.nodeValue)-1
		vaciar(celda)
		celda.appendChild(document.createTextNode(valor));
	}
}

function incrementaTabla(nivel){
	var titulos=document.getElementById("titulos_aciertos")
	var niveles=document.getElementById("niveles_aciertos")
	//if(nivel==2) incrementaTabla(1);
	if(titulos.childNodes.length<=nivel){
		var td=document.createElement("td")
		td.appendChild(document.createTextNode("Acertadas "+(nivel-1)+" veces"))
		titulos.appendChild(td);
		
		celda=document.createElement("td")
		celda.appendChild(document.createTextNode(1))
		niveles.appendChild(celda);
	}
	else{
		celda=niveles.childNodes[nivel]
		var num=1+parseInt(celda.firstChild.nodeValue);
		vaciar(celda)
		celda.appendChild(document.createTextNode(num));
		
	}
	ilumina();
}

var pregunta_actual=null;

function preguntar(){
	var response=document.getElementById("response");
	response.value="";
	response.focus();
	
	pregunta_actual=escogerPregunta()
	
	setText("name",listado_preguntas[pregunta_actual][1]);
	document.getElementById("mensaje_respuesta_correcta").style.display="none";
	document.getElementById("mensaje_respuesta_acertada").style.display="none";
	document.getElementById("mensaje_respuesta_fallada").style.display="none";
	
	document.getElementById("campo_respuesta").style.display=""
	document.getElementById("esplicacion").style.display=""
	
	if(debug){
		setText("datos","Pregunta actual: "+pregunta_actual+"; Num. repasos: "+num_repasos+
			"; Preguntas restantes: "+preguntas_restantes+"; Nuevas preguntas restantes: "+nuevas_preguntas_restantes);
		var lp=document.getElementById("listado_preguntas");
		vaciar(lp)
		
		var tr=document.createElement("tr");
		var td=document.createElement("th");td.appendChild(document.createTextNode("pos"));tr.appendChild(td);
		var td=document.createElement("th");td.appendChild(document.createTextNode("id"));tr.appendChild(td);
		td=document.createElement("th");td.appendChild(document.createTextNode("pregunta"));tr.appendChild(td);
		td=document.createElement("th");td.appendChild(document.createTextNode("respuesta"));tr.appendChild(td);
		td=document.createElement("th");td.appendChild(document.createTextNode("proxima"));tr.appendChild(td);
		td=document.createElement("th");td.appendChild(document.createTextNode("nivel"));tr.appendChild(td);
		td=document.createElement("th");td.appendChild(document.createTextNode("actualizada"));tr.appendChild(td);
		lp.appendChild(tr);
			
		for(var i=0;i<listado_preguntas.length;i++){
			tr=document.createElement("tr");
			
			td=document.createElement("td");
			td.appendChild(document.createTextNode(i));
			tr.appendChild(td);
			
			for(var j=0;j<6;j++){
				td=document.createElement("td");
				
				if(j==3)
					td.appendChild(document.createTextNode((listado_preguntas[i][j]-Math.floor((new Date()).getTime()/1000))));
				else td.appendChild(document.createTextNode(listado_preguntas[i][j]));
				tr.appendChild(td);
			}
			lp.appendChild(tr);
		}
	}
}

var peticion_anterior=0
var num_repasos=0
var preguntas_restantes=0; // Preguntas que se podrían preguntar actualmente
var nuevas_preguntas_restantes=0;
var preguntas_recibidas=0;
var nuevas_recibidas=0;
var avisado_sin_preguntas=false;

function escogerPregunta(){
	// Obtenemos el momento actual
	var momentoActual=fecha_inicio+Math.floor((new Date()).getTime()/1000)
	
	var minNivelEncontrado=100
	var maxTiempoEncontrado=-1
	var encontrada=null; // Pregunta encontrada
	preguntas_restantes=0
	nuevas_preguntas_restantes=0
	
	// Buscamos la pregunta de nivel mas bajo, no nulo, que se acerca mas al momento actual sin pasarlo
	for(var i=0;i<listado_preguntas.length;i++)
		if(listado_preguntas[i][3]<=momentoActual){
			preguntas_restantes++
			if(listado_preguntas[i][4]==0) nuevas_preguntas_restantes++;
			if((listado_preguntas[i][4] < minNivelEncontrado && listado_preguntas[i][4]!=0) || 
				((listado_preguntas[i][4]==minNivelEncontrado) && (maxTiempoEncontrado<listado_preguntas[i][3]))){
				maxTiempoEncontrado=listado_preguntas[i][3]
				minNivelEncontrado=listado_preguntas[i][4]
				encontrada=i
			}
		}
		
	if(encontrada && listado_preguntas[encontrada][4]>=repaso) num_repasos++;
	
	// si no hay, buscamos una nueva
	if (encontrada===null || num_repasos>max_repaso)
	for(var i=0;i<listado_preguntas.length;i++)
		if(listado_preguntas[i][4]==0) {
			encontrada=i
			num_repasos=0
			break
		}
		
	if(!preguntas_restantes && !preguntas_recibidas && !avisado_sin_preguntas){
		alert("No quedan preguntas, escoja una nueva leccion")
		avisado_sin_preguntas=true;
		return;
	}
		
		
	// Si no hay suficientes preguntas restantes, pediremos mas
	if((((preguntas_restantes-nuevas_preguntas_restantes<5) && (preguntas_recibidas-nuevas_recibidas>10)) || 
		(nuevas_preguntas_restantes<5 && nuevas_recibidas)) && 
		(peticion_anterior+2000<(new Date()).getTime())){
		peticion_anterior=(new Date()).getTime()
		getPregunta()
	}
	
	return encontrada
}

//realiza la llamada a AJAX
function getPregunta(respuesta,acertado){
	if (window.XMLHttpRequest)
	  {
	  xmlhttp=new XMLHttpRequest()
	  }
	// code for IE
	else if (window.ActiveXObject)
	  {
	  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
	  }
	if (xmlhttp!=null)	//comprueba la existencia del objeto XMLHttpRequest
	  {
		var url = "componente/ajax_getPregunta";
		var params = "id=512&data=";

		var primero=true;
		for(var i=0;i<listado_preguntas.length;i++){
			if (listado_preguntas[i][5]) // Si se ha modificado lo enviamos a guardar
			{
				if(primero) primero=false;
				else params+=";";
				
				params+=listado_preguntas[i][0]+","+listado_preguntas[i][3]+","+listado_preguntas[i][4]
				listado_preguntas[i][5]=0;
			}
		}
			
		xmlhttp.open("POST", url, true);
		xmlhttp.onreadystatechange =recibe_pregunta;
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", params.length);
		xmlhttp.setRequestHeader("Connection", "close");
		xmlhttp.send(params);
	  }
}

var aciertos_anterior=null;
var celda=null;
var listado_preguntas=[];
var fecha_inicio=0; // Fecha relativa al servidor
var primera_pregunta=true;

//manejador de la respuesta AJAX
function recibe_pregunta(){
  if(xmlhttp.readyState==4){
		//alert(xmlhttp.responseText)
		if(xmlhttp.responseXML==null) alert(xmlhttp.responseText);
		var preguntas=xmlhttp.responseXML.documentElement;
		
		fecha_inicio=preguntas.getAttribute("fecha")-Math.floor((new Date()).getTime()/1000);
		
		preguntas_recibidas=preguntas.childNodes.length
		nuevas_recibidas=0;
		// Cargamos las preguntas recibidas
		for(var i=0;i<preguntas.childNodes.length;i++){
			listado_preguntas[listado_preguntas.length]=[
				preguntas.childNodes[i].getAttribute("id"),
				preguntas.childNodes[i].getAttribute("pregunta"),
				preguntas.childNodes[i].getAttribute("respuesta"),
				preguntas.childNodes[i].getAttribute("proxima"),
				preguntas.childNodes[i].getAttribute("nivel"),
				0
			];
			if(preguntas.childNodes[i].getAttribute("nivel")==0) nuevas_recibidas++;
		}
		
		var aciertos=preguntas.getAttribute("aciertos").split(",")
		for(var i=aciertos.length-2;i>=0;i--)
			aciertos[i]=parseInt(aciertos[i])+parseInt(aciertos[i+1])
			
		var titulos=document.getElementById("titulos_aciertos")
		var niveles=document.getElementById("niveles_aciertos")
		
		// Generar tabla de aciertos, si no lo estaba ya
		if(niveles.childNodes.length==0){
			while(titulos.firstChild) titulos.removeChild(titulos.firstChild)
			while(niveles.firstChild) niveles.removeChild(niveles.firstChild)
			for(var i=0;i<aciertos.length;i++){
				var td=document.createElement("td");
				if(i==0) td.appendChild(document.createTextNode("Preguntas"));
				else if(i==1) td.appendChild(document.createTextNode("Preguntadas"));
				else td.appendChild(document.createTextNode("Acertadas "+(i-1)+" veces"));
				titulos.appendChild(td);
				
				td=document.createElement("td");
				td.appendChild(document.createTextNode(aciertos[i]));
				niveles.appendChild(td);
			}
		}
		
		aciertos_anterior=aciertos;
		
		//respuesta=listado_preguntas[0][2];
		//id=listado_preguntas[0][0];
		
		//nueva_pregunta=listado_preguntas[0][1];
		
		if(primera_pregunta) preguntar();
		primera_pregunta=false;
	}
}

var paso=10;
var invertir=false;

function ilumina(){
	// Iluminamos y degradamos en 10 pasos
	celda.style.background="rgb("+Math.floor(207*paso/10)+","+
		Math.floor(255-2.3*paso)+","+Math.floor(242*paso/10)+")"
	if(paso==0) invertir=true;
	if(invertir) paso++;
	else paso--;
	if(paso==11 && invertir){
		paso=10;
		invertir=false;
		celda==null
	}
	else setTimeout(ilumina, 25);
}

//bloquea en el navegador la funcinalidad de autocompletar
function blockAutoComplete() {
    document.getElementById("form_aprender").setAttribute("autocomplete","off");
}

//función inicializadora del script
function initialize(){
	blockAutoComplete(); 
	getPregunta("");
	window.onunload = getPregunta;
}
		//llama a la función a ejecutar al cargar la página
		Behaviour.addLoadEvent(initialize)