	
	function alcargar(){
		if(ayuda_visual)
		resaltar_boton_segun_la_letra(t0);
		
		
		resaltar_texto_leccion(texto_leccion);
	}	
	//var segundos=t.getTime()/100;
	//alert(segundos);
	
	function nivel(n){
		nivel_dificultad=n;
	}
	
		
	function envio_form(meca_resultado,meca_caracteres,meca_errores,meca_errores_permitidos,meca_segundos,meca_ppm){
		xGetElementById("meca_resultado").value=meca_resultado;
		xGetElementById("meca_caracteres").value=meca_caracteres;
		xGetElementById("meca_errores").value=meca_errores;
		xGetElementById("meca_errores_permitidos").value=meca_errores_permitidos;
		xGetElementById("meca_segundos").value=meca_segundos;
		xGetElementById("meca_ppm").value=meca_ppm;
		
		xGetElementById("meca_form").submit();		
	}
	function fPPM(){
				var t= new Date();
				tiempo_fin=t.getTime();
				var segundos=tiempo_fin-tiempo_inicio;
				segundos=segundos/1000;
				segundos=parseInt(segundos);
				if(segundos!=0){
					var pps=(texto_escrito.length)/segundos;
					var ppm=pps*60;
					ppm=parseInt(ppm);
					return ppm;
				}else return 0;
	}
	
	//alert(salida);
	function si_ayuda_visual(opcion){
		if(opcion==1){ 
			ayuda_visual=true;
			var sca=siguiente_caracter(texto_leccion,texto_escrito);
			resaltar_boton_segun_la_letra(sca);
		}else{ 
			ayuda_visual=false;
			quitar_resalto();
		}
	}
	function empezar(){
		if(xGetElementById("escrito").value=="Click aqui para empezar."){
			xGetElementById("escrito").value="";
			if(ayuda_visual)
			resaltar_boton_segun_la_letra(t0);
		}
	}
	function verbose(errores,errores_permitidos,PPM_actuales){		
		xInnerHtml("estadisticas", "<b>Errores:</b> "+errores+" &nbsp;&nbsp;<b>PPM:</b> "+PPM_actuales+"<br><b>Errores Permitidos:</b> "+errores_permitidos);
	}
	function reiniciar(){
		xGetElementById("escrito").value="Click aqui para empezar.";
		verbose(0,errores_permitidos,0);		
		texto_leccion_imprimir=adapta_imprimir(texto_leccion);
		t0=texto_leccion_imprimir.substring(0,1);			
		t1=texto_leccion_imprimir.substring(1,texto_leccion_imprimir.length);
		texto_leccion_imprimir='<font color="#009999" style="border: 1px solid #009999; background: #ffffff;">'+t0+"</font>"+t1;
		xInnerHtml("id_texto_curso", texto_leccion_imprimir);
		alcargar();
			
		texto_escrito= "";
	    tiempo_inicio= 0;
	    tiempo_fin= 0;
		PPM_actuales=0;
	    errores=0;
		
	}
	function tamanio(tam){
		xGetElementById("escrito").style.fontSize=tam+"px";
		xGetElementById("id_texto_curso").style.fontSize=tam+"px";
	}
// Códigos escape:
//
// \b = Backspace
// \f = Form feed
// \n = Line feed
// \r = Carriage return
// \t = Horizontal tab




//compara las dos cadenas y devuelve:
//	una cadena igual="[&igual]"; si  tex_escrito conincide entero con la primera parte de tex_curso
//  y devuelve la parte inicial que conciden de las cadenas en otro caso.
//  y devuelve esfinal="[$esfinal]" si las dos cadenas son exactamente iguales.
var igual="[&igual]";
var esfinal="[$final]";
function compara_textos(tex_curso,tex_escrito){
	var sub_curso="[&vacio]";
	var salida=igual;
	
	if(tex_curso==tex_escrito) return esfinal;
	
	if(tex_escrito.length<=tex_curso.length){
		var tamanio=tex_escrito.length;
		sub_curso=tex_curso.substring(0,tamanio);
		
	}
	
	//alert(sub_curso+" | "+tex_escrito);
	if(sub_curso!=tex_escrito){
		var fin=false;
		if(tex_escrito.length>0 && tex_curso.length>0) salida="";
		for(var i=0; i<tex_escrito.length && i<tex_curso.length && fin==false; i++){
				if(tex_escrito.charAt(i)==tex_curso.charAt(i)){
					salida=salida+tex_escrito.charAt(i);
				}else{
					fin=true;
				}
		}
		
	}
	return salida;
}

var ninguno="[&ninguno]";
function siguiente_caracter(tex_curso,tex_escrito){
	var siguiente=ninguno;
	tex_escrito=adapta(tex_escrito);
	if(tex_escrito.length<tex_curso.length){
		
		var pos=tex_escrito.length;
		siguiente=tex_curso.charAt(pos);
	}
	return siguiente;
}
function adapta(texto)	{	
	if (texto.split('\r').length > 1)
			texto = texto.split('\r').join("");			
	
	if (texto.split('\t').length > 1)
			texto = texto.split('\t').join("");
	//&nbsp;
						
	return texto;
}
function adapta_imprimir(texto){
	if (texto.split('\r').length > 1)
			texto = texto.split('\r').join("");			
	
	if (texto.split('\t').length > 1)
			texto = texto.split('\t').join("");
			
	if (texto.split('\n').length > 1)
			texto = texto.split('\n').join("<br>");
			
	if (texto.split(' ').length > 1)
			texto = texto.split(' ').join("&nbsp;");
						
	return texto;
}
opacidad = function(valor,id){			
		  var e;
		  var set = xDef(valor);		
		  //  if (set && o == 1) o = .9999; // FF1.0.2 but not needed in 1.5
		  if(!(e=xGetElementById(id))) return false;
		  if (xStr(e.style.opacity)) { // CSS3
			if (set) e.style.opacity = (valor/100) + '';
			else return false;
		  }
		  else if (xStr(e.style.filter)) { // IE5.5+
			if (set) e.style.filter = 'alpha(opacity=' + (valor) + ')';
			else return false;
		  }
		  else if (xStr(e.style.MozOpacity)) { // Gecko before CSS3 support
			if (set) e.style.MozOpacity = (valor/100) + '';
			else return false;
		  }
		  else if (xStr(e.style.KhtmlOpacity)) { // Konquerer and Safari
			if (set) e.style.KhtmlOpacity = (valor/100) + '';
			else return false;
		  }else	return false;
		
		return true;	
		
	}
function quitar_resalto(){
	for(var i=1; i<=62; i++){
		tecla="tecla"+i;
		xGetElementById(tecla).style.border="0px solid #000099";
		op=opacidad(0,tecla);
		if(op)	xGetElementById(tecla).style.background="none";
	}
}	
function resaltar_tecla(tecla){
	
	xGetElementById(tecla).style.border="3px solid #ffff00";
	op=opacidad(50,tecla);
	if(op)	xGetElementById(tecla).style.background="#ffff00";
}
function resaltar_tecla_doble(tecla1,tecla2){
	
	xGetElementById(tecla1).style.border="3px solid #ffff00";
	op=opacidad(50,tecla1);
	if(op)	xGetElementById(tecla1).style.background="#ffff00";
	
	xGetElementById(tecla2).style.border="3px solid #000033";
	op=opacidad(50,tecla2);
	if(op)	xGetElementById(tecla2).style.background="#003333";
}
function colorear_texto_curso(tex_curso,tex_escrito){
	var sub_curso="";
	var cadena_coloreada="";
	if(tex_escrito.length<=tex_curso.length){
		var tamanio=tex_escrito.length+1;
		sub_curso=tex_curso.substring(tamanio,tex_curso.length);
		var sca=siguiente_caracter(tex_curso,tex_escrito);
		tex_escrito=adapta_imprimir(tex_escrito);
		sca=adapta_imprimir(sca);
		sub_curso=adapta_imprimir(sub_curso);
		
		cadena_coloreada='<font color="#009999">'+tex_escrito+'</font>'+'<font color="#009999" style="border: 1px solid #009999; background: #ffffff;">'+sca+"</font>"+sub_curso;
		
		xInnerHtml("id_texto_curso",cadena_coloreada);		
	}
	
}


function procesar_letras(letra,letra1,letra2,letra3,numero,numero2){
			//numero2 == 54 (Mayuscula derecho) ó 42 (Mayuscula izquierdo)
			//numero es el numero de la tecla
			//letra es la letra escrita
			//letra1 (letra de arriba del la tecla) 
			//letra2 (letra de la derecha de la tecla)
			//letra3 (letra de abajo izquierda de la tecla)
			//si en letra1 , letra2 ó letra3 no es posible se pone ninguno
		
			 if(letra==letra1){
			 	 resaltar_tecla_doble("tecla"+numero,"tecla"+numero2);
			 	 return "tecla"+numero+";tecla"+numero2;
			 }
			 if(letra==letra2){
			 	 resaltar_tecla_doble("tecla"+numero,"tecla59");
			 	 return "tecla"+numero+";tecla59";
			 }
			 if(letra==letra3){
			 	resaltar_tecla("tecla"+numero);
			 	return "tecla"+numero;
			}
		
}
function resaltar_texto_leccion(texto_leccion){
	//.charAt(pos);
	
	for(var i=0; i<texto_leccion.length; i++){
		var letra=texto_leccion.charAt(i);
		resaltar_boton_segun_la_letra(letra,1);
	}
}
function resaltar_boton_segun_la_letra(letra,resalto_definido){
	var op=null;
	if(resalto_definido!=1)
	quitar_resalto();
	var salida;
	
	salida=procesar_letras(letra,"ª","\\","º",1,54);
	if(xDef(salida)) return salida;
		
	salida=procesar_letras(letra,"!","|","1",2,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"\"","@","2",3,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,ninguno,"#","3",4,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"$","~","4",5,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"%",ninguno,"5",6,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"&","¬","6",7,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"/",ninguno,"7",8,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"(",ninguno,"8",9,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,")",ninguno,"9",10,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"=",ninguno,"0",11,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"?",ninguno,"'",12,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"¿",ninguno,"¡",13,42);
	if(xDef(salida)) return salida;
	
	//14 retroceso
	//15 retorno de carro
	
	salida=procesar_letras(letra,"Q",ninguno,"q",16,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"W",ninguno,"w",17,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"E",ninguno,"e",18,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"R",ninguno,"r",19,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"T",ninguno,"t",20,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"Y",ninguno,"y",21,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"U",ninguno,"u",22,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"I",ninguno,"i",23,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"O",ninguno,"o",24,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"P",ninguno,"p",25,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"^","[","`",26,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"*","]","+",27,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,ninguno,ninguno,"\n",28,42);
	if(xDef(salida)) return salida;
	
	//29 bloq mayús
	
	salida=procesar_letras(letra,"A",ninguno,"a",30,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"S",ninguno,"s",31,54);
	if(xDef(salida)) return salida;

	salida=procesar_letras(letra,"D",ninguno,"d",32,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"F",ninguno,"f",33,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"G",ninguno,"g",34,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"H",ninguno,"h",35,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"J",ninguno,"j",36,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"K",ninguno,"k",37,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"L",ninguno,"l",38,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"Ñ",ninguno,"ñ",39,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"¨","{","´",40,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"Ç","}",ninguno,41,42);
	if(xDef(salida)) return salida;
	
	//42 mayus izquierdo
	
	salida=procesar_letras(letra,">",ninguno,"<",43,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"Z",ninguno,"z",44,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"X",ninguno,"x",45,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"C",ninguno,"c",46,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"V",ninguno,"v",47,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"B",ninguno,"b",48,54);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"N",ninguno,"n",49,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"M",ninguno,"m",50,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,";",ninguno,",",51,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,":",ninguno,".",52,42);
	if(xDef(salida)) return salida;
	
	salida=procesar_letras(letra,"_",ninguno,"-",53,42);
	if(xDef(salida)) return salida;
	
	//54 mayus derecho
	//55 Ctrñ izquierdo
	//56 win izquierdo
	//57 Alt izquierdo
	
	salida=procesar_letras(letra,ninguno,ninguno," ",58,42);
	if(xDef(salida)) return salida;
	
	//59 Alt Gr 
	//60 win derecho
	//61 listado derecho
	//62 Ctrol derecho
	
	//tildes
	salida=procesar_letras(letra,ninguno,ninguno,"á",30,54);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"á",40,42);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,ninguno,ninguno,"é",18,54);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"é",40,42);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,ninguno,ninguno,"í",23,54);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"í",40,54);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,ninguno,ninguno,"ó",24,54);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"ó",40,54);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,ninguno,ninguno,"ú",22,54);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"ú",40,54);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,"Á",ninguno,ninguno,30,54);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"Á",40,42);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,"É",ninguno,ninguno,18,54);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"É",40,42);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,"Í",ninguno,ninguno,23,42);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"Í",40,54);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,"Ó",ninguno,ninguno,24,42);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"Ó",40,54);
		 if(xDef(salida2)) return salida;
	}
	
	salida=procesar_letras(letra,"Ú",ninguno,ninguno,22,42);
	if(xDef(salida)){
		 var salida2=procesar_letras(letra,ninguno,ninguno,"Ú",40,54);
		 if(xDef(salida2)) return salida;
	}	
}

