modoDemonio = (modo == 'demonio');
modoPractica = (modo == 'practica');
modoReto = (modo == 'reto');
modoAceptarReto = (modo == 'aceptar_reto');

if (idioma == "") idioma = "es";

if (modoPractica) modo = PRACTICA;
if (modoReto) modo = RETO;
if (modoAceptarReto) modo = RETO_ACEPTADO;

if (modoDemonio) {
   var iDemonio = 0;
   var tStopDemonio = false;
   var prefixUser = "Server";
} else {
   var prefixUser = "Guest";
}

/* global definitions */
var sm_loaded = false;

bSonido = sonido;
bSonidoTeclas = sonido_teclas;
setSonidoTeclas(bSonidoTeclas);
setSonido(bSonido);

var showMsgBox = true;

var tritonInitComplete = false;
var selectedNode = 'channel';
var channelTopic = '';
var scrollerActivated = true;
var modoP = '';
var sala = false;
var diferencia_servidor_local = -999;

var anchoPista = 880;
var anchoCorredor = 70;
//var ImagenesVehiculos = new Array('1_1','1_2','1_3','1_4','1_5','2_1','2_2','3_1','3_2','3_3','3_4','3_5','4_1','4_2','4_3','4_4','5_1','5_2','5_3');
var ImagenesVehiculos = new Array;
ImagenesVehiculos[1] = new Array('1_1','1_2');
ImagenesVehiculos[2] = new Array('2_1','2_2');
ImagenesVehiculos[3] = new Array('3_1','3_2','3_3','3_4','3_5','3_6');
ImagenesVehiculos[4] = new Array('4_1','4_2','4_3','4_4','4_5','4_6','4_7','4_8','4_9','4_a','4_b','4_c','4_d','4_e','4_f','4_g','4_h','4_i');
ImagenesVehiculos[5] = new Array('5_1','5_3','5_4','5_5','5_6','5_7','5_8','5_9','5_a','5_b','5_c','5_d','5_e','5_f','5_g','5_h','5_i','5_j');

var aUsers1 = new Array('antuan','manu','ciri32','yuma','pascal','under','juli','huerta','kiwi');
var aUsers2 = new Array('melon','jota','hidro','retro','quermi','kalor','nurse','morsa','lunes');
var aUsers3 = new Array('rojo','mantra','yogui','talion','andres','parco','pelanas','surco','mandril');
var aUsers4 = new Array('lopez','gris','martos12','yerba','jorge','norma','martin','igor','bestia');
var aUsers5 = new Array('avanza','lluvia','jardin','tambor','micky','rambo','argon','sota','jaque');

var sUser = new Array;
sUser[1] = aUsers1[aleatorio(1,aUsers1.length)-1];
sUser[2] = aUsers2[aleatorio(1,aUsers2.length)-1];
sUser[3] = aUsers3[aleatorio(1,aUsers3.length)-1];
sUser[4] = aUsers4[aleatorio(1,aUsers4.length)-1];
sUser[5] = aUsers5[aleatorio(1,aUsers5.length)-1];

var activarCuentaAtras = false;

var aCarrera;

var nivelCarrera = "1";
var imagenVehiculo = "1";

var alturaPista = 45;
var alturaVehiculo = 50;
var velocidadMinima = 250;
var velocidadMaxima = 350;
var arrayCarrera = null;
var arrayCorredores = new Array;
var tInicio_Inactividad = new Date();
var html_text_type = '';
var cRecibirNicks = true;
var sUltimoData = "";

var aListaMasRapidos;
var aListaMejoresCarreras;
var aListaTusMejoresCarreras;
var aListaTusUltimasCarreras;
var aListaNiveles;

var minutosCarrera;
var segundosCarrera;
var tiempoEmpleado;
var nArrayMe = 0;
var posicionFinal = 0;
var porcentajeCarrera = 0;
var nVelocidad = 0;
var id_carrera = -1;

var sSiguientePalabra;
var sQueda;
var keyCounter = 0;
var keyCounterReal = 0;
var keyCounterStroked = 0;
var textInput = '';
var tDate;
var situacion = 'esperando';

var tSegundosCuentaAtras = 10;
if (modoReto || modoAceptarReto)
	tSegundosCuentaAtras = 15;

var usersInChat = new Array;
var chatDataBuffer = new Object;

function aleatorio(inferior,superior){ 
   	numPosibilidades = superior - inferior; 
   	aleat = Math.random() * numPosibilidades;
   	aleat = Math.round(aleat);
   	return parseInt(inferior) + aleat;
} 

function controladorTexto(){
   clearTimeout(xControladorTexto);      
   reg_txt = document.getElementById('vdactil_text_type').innerHTML;
   if (reg_txt == "") {
      tritonInitComplete = false;
      launchTRITON();
   }
}

/* Triton Chat Starter */
function launchTRITON() {
	xControladorTexto = setTimeout('controladorTexto()', 6000);
	if (!tritonInitComplete) {
      if (modoPractica) {
         modoP = "&modo=practica" + "&libro=" + libro;
      } else if (modoReto) {
         modoP = "&modo=reto&usuarios_retados=" + usuarios_retados + "&libro=" + libro;
      } else if (modoAceptarReto) {
         modoP = "&modo=aceptar_reto&usuario_retador=" + usuario_retador + "&sala_reto=" + sala_reto;
      } else {
         modoP = "&modo=juego" + "&libro=" + libro;
      }

      ko = new Date();
      horaLocal = Math.round(ko.getTime()/1000);
      xHoraLocal = "&horalocal=" + horaLocal;

		ajFetch('timer.php?firstload=1&language_os=' + language_os + '&prefixUser=' + prefixUser + modoP + xHoraLocal, 'processReceivedData', false, 0);
		ajFetch('timer.php?sendSalasUsers=1&language_os=' + language_os, 'processReceivedData', true, 15000);
		
		setTimeout("cuentaAtras()", 2000);

		tritonInitComplete = true;
		keyCounterStroked = 0;

      posicionHelp();

	}
	
	document.getElementById('vdactil_textbox').innerHTML = '<input onpaste="return false" type="text" id="textInput" onkeyup="keyEventHandler(event.keyCode);" maxlength="1500"/>';

	document.getElementById('textInput').focus();
	document.getElementById('textInput').disabled = true;
	document.getElementById('textInput').style.backgroundColor = "#C0C0C0";
	document.getElementById('vdactil_textbox').style.backgroundColor = "#C0C0C0";
	document.getElementById('textInput').value = ESCRIBE_AQUI;	
	
	//recarga la página cuando es el demonio cada 12 minutos
	recargaPagina(true,1720000);
}

function launchSalaEspera() {
	if (!tritonInitComplete) {
      modoP = "&modo=sala_espera";
      sala = true;

		//ajFetch('timer.php?firstload=1&language_os=' + language_os + '&prefixUser=' + prefixUser + modoP, 'processReceivedData', false, 0);
		ajFetch('timer.php?sendSalasUsers=1&language_os=' + language_os, 'processReceivedData', true, 15000);
		
		tritonInitComplete = true;
		keyCounterStroked = 0;

      posicionHelp();

	}
}

function cuentaPulsaciones(texto){
	veces=0;
   for(i=0;i<=texto.length-1;i++) {
	   sLetras = 'ª!"·$%&/()=?¿QWERTYUIOP^*ASDFGHJKLÑÇZXCVBNM;:_áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛäëïöüÄËÏÖÜ';
	   sAnteri = 'QWERTYUIOPASDFGHJKLÑÇZXCVBNMÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ';
	   sMayusc = 'QWERTYUIOPASDFGHJKLÑÇZXCVBNM';
	   x = texto.substr(i,1);
      if (i>0)
         xAnt = texto.substr(i-1,1);
      else
         xAnt = " ";
      if (i>1)
         xAntAnt = texto.substr(i-2,1);
      else
         xAntAnt = " ";
	   
	   if (sLetras.indexOf(x) >= 0) {
	      if (sMayusc.indexOf(x) >= 0 && sAnteri.indexOf(xAnt) >= 0)
            veces++;
		   else
		      veces+=2;
		} else {
		   if (sMayusc.indexOf(x) < 0 && xAnt == " " && sAnteri.indexOf(xAntAnt) >= 0)
		      veces+=2;
		   else
		      veces++;
		}
	}
	return veces;   
}

function porcentajePista(valor,bici) {
   if (valor >= 100)
      valor = 100;   
   posicion = parseInt((anchoPista-(anchoCorredor*2))*valor/100+anchoCorredor);
   if (posicion > 808)
      posicion = 808;
   document.getElementById('abici'+bici).style.width = posicion + "px";
}		

function nickPintar(nNick) {
   if (nNick.length > 8 && nNick.substr(0,5) != 'Guest' && nNick.substr(0,6) != 'Server') {
      arrayNick = urlDecode(nNick).split('-');
      nickP = arrayNick[0];
   } else if (nNick.substr(0,5) == 'Guest') {
      nPos = nNick.indexOf("_");                        
      nickP = 'Guest' + nNick.substr(nPos+1);
   } else if (nNick.substr(0,6) == 'Server') {
      nPos = nNick.indexOf("_");
      if (nPos > -1)
         nickP = 'Server' + nNick.substr(nPos+1);
      else {
         if (nNick == tritonNickName)
            nickP = nNick;
         else {
            var i = parseInt(nNick.substr(6,1));
            nickP = sUser[i];
         }
      }
   } else
      nickP = nNick;
   return nickP;
}

/* RX data processor */
function processReceivedData(data) {
	streamLines = data.split('\n');
	for (var n=0; n < streamLines.length; n++) {
	   // reinicio la variable de inactividad
      tInicio_Inactividad = new Date();

		if (trim(streamLines[n]) != '') {
			contentArray = streamLines[n].split('\t');

			switch(contentArray[0]) {
				
				case 'CHANNELSTRING':
					if (!chatDataBuffer.channel) chatDataBuffer.channel = urlDecode(contentArray[3]) + '<br />';
					else {
						chatDataBuffer.channel += urlDecode(contentArray[3]) + '<br />';
					}
					showBuffer('channel');
				break;
				
				case 'CHANNELNAME':
				   content1 = contentArray[1];
					var channelNode = document.getElementById('nodeElement_channel');
					if (channelNode.innerHTML != urlDecode(content1)) {
					   channelNode.innerHTML = urlDecode(content1);
					   aChannel = urlDecode(content1).split("_");
					   
					   //activar cuando se pongan los niveles automáticos
            	   //nivelCarrera = arrayCorredores[nArrayMe][5];
            	   nivelCarrera = aChannel[2];
/*            	   if (nivelCarrera > 1) {
   					   velocidadMinima = (nivelCarrera-1)*100+1;
                     velocidadMaxima = nivelCarrera*100;
                  }  */
                  vehiculosNivel = ImagenesVehiculos[nivelCarrera];
            	   imagenVehiculo = vehiculosNivel[aleatorio(1,vehiculosNivel.length)-1];
					}
				break;

				case 'PRIVMSG':
				   content1 = contentArray[1];
					if (!chatDataBuffer[content1]) chatDataBuffer[content1] = urlDecode(contentArray[3]) + '<br />';
					else chatDataBuffer[content1] += urlDecode(contentArray[3]) + '<br />';
					showBuffer(content1);
				break;
				
				case 'NICKLISTPUSH':
				   content1 = contentArray[1];
				   content2 = contentArray[2];
					if (!document.getElementById('nickElement_'+content1)) {
						/* Push an element into the nicklist */
						var containerElement = document.getElementById('nickList');
						var newNickContainer = document.createElement('div');
						newNickContainer.setAttribute('id', 'nickElement_'+content1);
						newNickContainer.innerHTML = urlDecode(content2);
						containerElement.appendChild(newNickContainer);
						
						usersInChat.push(content1);
					}
				break;
				
				case 'NICKLISTPOP':
				   content1 = contentArray[1];
					/* Pop an element off the nicklist */
					if (document.getElementById('nickElement_'+content1)) {
						var containerElement = document.getElementById('nickList');
						containerElement.removeChild('nickElement_'+content1);
					}
					array_pop(usersInChat, content1);
				break;
				
				case 'NICKNAMES':
           	   if (!sala) {
     				   content1 = contentArray[1];
   					/* TEMPORARY TEMPORARY TEMPORARY TEMPORARY TEMPORARY TEMPORARY TEMPORARY TEMPORARY */
   					var containerElement = document.getElementById('nickContent');
   					containerElement.innerHTML = content1;
   				}
				break;
				
				case 'NICKNAMESARRAY':
	            if (situacion != 'llegada' && situacion != "finalizada") {   
   				   content1 = contentArray[1];
   					// primero el registro (nickName, carrerasDisputadas, numCarreras, mediaPPM, mediaPPM_ultimas, nivel, mejor_carrera)
   					arrayRegCorredores = urlDecode(content1).split(';');
   					
   					if (arrayRegCorredores.length > arrayCorredores.length) {
   					   //sólo guardo los nuevos corredores
      					//for (i=arrayCorredores.length; i<arrayRegCorredores.length; i++)
      					for (i=0; i<arrayRegCorredores.length; i++)
      					   arrayCorredores[i] = urlDecode(arrayRegCorredores[i]).split(',');
      					// rellena el resto del array hasta 5 corredores
   //   					while (arrayCorredores.length < 5)
   //   					   arrayCorredores[arrayCorredores.length] = new Array("null",0,0,0,0,0,0,0);
      
               	   // crea el array de la carrera
               	   arrayCarrera = new Array();
               	   var filaCorredor=null;
                     //for (i=arrayCarrera.length;i<arrayCorredores.length;i++){
                     for (i=0;i<arrayCorredores.length;i++){
               		   filaCorredor = new Array(arrayCorredores[i][0],0,0,0,0,0,0,0,0,0);
               			arrayCarrera.push(filaCorredor);
               	   }
               	   
               	   if (!sala) {
         					var containerElement = document.getElementById('vdactil_data_result');
         					//containerElement.innerHTML = '';
   					
                  	   html = '';            	   
         					for (i=0; i<arrayCorredores.length; i++) {
         					   nNick = arrayCorredores[i][0];
         					   if (nNick != 'null') {
            			   		html += '<table style="width: 1000px; height: ' + alturaPista + 'px; overflow: no;"><tr>';
         
                              html += '<div id="resumenCorredor">';
            			   		html += resumenCorredor(i);
         	                  html += '</div>';
         
            			   		html += '  <td style="vertical-align: top; width: ' + anchoPista + 'px; height: ' + alturaPista + 'px; overflow: no;">';
            			   		html += '     <div class="nickName" id="abici' + i + '" align="right" style="width: ' + anchoCorredor + 'px; height: ' + alturaVehiculo + 'px; overflow: no;">';
         
            			   		html += '        <a class="info" style="cursor:default" href="javascript:void(0);">';
            			   		nImagen = i+1;
            			   		if (nImagen > 5) {
            			   		   nImagen -= 5;
            			   		}
            			         html += '           <img alt="Vehiculo" align="absmiddle" height="' + alturaVehiculo + 'px" id="bici' + i + '" style="left: 0px" src="images/vehiculos/' + imagenVehiculo + '_' + (nImagen) + '.gif">';
         	                  html += '           <span style="left:-5em">';
            			   		html += '              <div id="vdactil_span_corredor' + i + '">&nbsp;</div>';
                           	html += '           </span>';
            			   		html += '        </a>';
         
            		            html += '     </div>';
            		            html += '  </td>';
            		            html += '  <td style="width: 110px; height: ' + alturaPista + 'px; overflow: no;">';
            			   		html += '     <div class="velocityName" id="aVelocidad' + i + '" valign="middle" align="right" style="width: 110px; height: ' + alturaPista + 'px; overflow: no;">';
            			   		html +=         '0 p.p.m.';
            		            html += '     </div>';
            		            html += '  </td></tr></table>';
            		         }
         					}		   		
                        
         					containerElement.innerHTML = html;					
         				}
      
               	   document.getElementById('vdactil_ppmmedia').innerHTML = arrayCorredores[nArrayMe][4] + ' p.p.m.';
               	   document.getElementById('vdactil_nivel').innerHTML = arrayCorredores[nArrayMe][6];;
      					posicionHelp();
                     if (arrayCorredores[nArrayMe][1] < 5)
                        toggleHelp('visible');
                  }
                  if (arrayCorredores.length >= 2 && arrayCorredores[0][0] == arrayCorredores[1][0])
                     a = 0;
               }
				break;		
				
				case 'ISWRITING':
           	   if (!sala) {
     				   content1 = contentArray[1];
   					if (trim(urlDecode(content1)) != '\n') {
     					   mostrarDIV('iswriting');
      				} else {
      				   ocultarDIV('iswriting');      				   
      				}

      				nNickPos = urlDecode(content1).indexOf(',');
      				sNick = urlDecode(content1).substr(0,nNickPos);
      				sResto = urlDecode(content1).substr(nNickPos+1);
      				document.getElementById('iswriting').innerHTML = nickPintar(sNick) + sResto;
       				setTimeout('ocultarDIV("iswriting");', 4000);
      			}
				break;
				
				case 'LATENCY':
				   content1 = contentArray[1];
					document.getElementById('vdactil_footer').innerHTML = urlDecode(content1);
				break; 
				
				case 'RELOJ_EXTERNO':
  				   content1 = contentArray[1];
					//if (!document.getElementById('nickElement_'+content1)) {
				   document.getElementById('reloj_externo').innerHTML = urlDecode(content1);
					//}
				break;
				
				case 'SALAS_Y_USERS':
               if (document.getElementById('menu0') == null || document.getElementById('menu0').style.visibility == 'hidden') {
     				   content1 = contentArray[1];
						if (!document.getElementById('nickElement_'+content1)) {
						   syu = urlDecode(content1).split(",");
						   document.title = "Velocidactil. Juego Online de Mecanografía. (" + syu[0] + ")";
						   
						   aListaUsuariosOnline = syu[2].split(";");
						   j = aListaUsuariosOnline.length-2;
   					   for (i=0;i<((aListaUsuariosOnline.length-1)/2);i++) {
   					      //if (aListaUsuariosOnline[i].substr(0,5) == "Guest") {
   					      a = aListaUsuariosOnline[i].indexOf("Guest");
   					      if (aListaUsuariosOnline[i].indexOf("Guest") != -1) {
   					         aux = aListaUsuariosOnline[i];
   					         aListaUsuariosOnline[i] = aListaUsuariosOnline[j];
   					         aListaUsuariosOnline[j] = aux;
   					         j--;
                        }
                     }
                       
	                  if (1==0) {
	                     // listado simple
	   					   sListaUsuariosOnline = "";
	   					   for (i=0;i<aListaUsuariosOnline.length-1;i++)
	   					      sListaUsuariosOnline += nickPintar(aListaUsuariosOnline[i]) + "<br>";
	
	                     html = '';
	                     html += "<a class='info'><font color=black>" + syu[0] + " " + USUARIOS_ONLINE + "</font>";
	                     html += "   <span style=\"left:3em;top:2em;background-image:url('a.jpg');min-width:0px;text-align:left;\">" + sListaUsuariosOnline + "</span>";
	                     html += "</a>"; 
	                  } else {
	                     // listado completo
	                     html = '';
	                     html += "<a style='text-decoration:none;' href='javascript:void(0);' onmouseout='ocultar=true;ocultarRetardoTodo(2000);' onmouseover='ocultarCapa(\"idioma0\");setNombre(\"menu\");ocultar=false;mostrarCapa(\"menu0\");\'><font color=black>" + syu[0] + " " + USUARIOS_ONLINE + "</font></a>";
	                     html += '<div class="markermenu" style="padding: 7px; z-index: 100; visibility: hidden;position: absolute; left:' + posX_users + 'px; top:' + posY_users + 'px;" id="menu0" onmouseout="ocultar=true;ocultarRetardoTodo(5000);" onmouseover="ocultar=false;mostrarCapa(\'menu0\');">';
	                     html += '   <table cellpadding="0" cellspacing="0" width="100%"><tr><td align="right">';
	                     html += '      <a href="javascript:void(0);" onclick="hePinchado=false;ocultarCapa(\'menu0\');">';
	                     html += '         x';
	                     html += '      </a><br>';
	                     html += '   </td></tr></table>';
	   					   html += '   <br><div class="markermenu_scroll"><table><tr><td class="tabla_users" valign="top" nowrap="wrap">';
	   					   for (i=0;i<aListaUsuariosOnline.length-1;i++) {
	   					         aUserOnline = aListaUsuariosOnline[i].split("_");
	   					         sUserOnline = aUserOnline[1];
	   					         if (aUserOnline.length == 3)
	   					            sUserOnline += "_" + aUserOnline[2];
                              if(parseInt(i/15)==i/15) {
                                 html += '</td><td class="tabla_users" valign="top" nowrap="wrap">';
                              }

         					      html += "<img alt='Bandera' height='13' src='images/idiomas/" + aUserOnline[0] + ".gif'>&nbsp;";
	                           html += '                     <input ' + (sUserOnline==tritonNickName||sUserOnline.substr(0,5) == "Guest"?'disabled':'') + ' name="aUsuariosRetos' + i + '" type="checkbox" id="aUsuariosRetos' + i + '" onclick="hePinchado=true;" value="' + sUserOnline + '" />';
         					      if (sUserOnline.substr(0,5) == "Guest")
   	                           html +=                    "<font color='gray'>" + nickPintar(sUserOnline) + "</font><br>";
   	                        else
	                              html +=                       nickPintar(sUserOnline) + "<br>";
	                              //html +=                       "<a class='tabla_users' href='perfil-" + nickPintar(sUserOnline) + "'>" + nickPintar(sUserOnline) + "</a><br>";
	                     }
	                     html += '   </td></tr></table></div>';
	                     html += '   <table><tr><td nowrap="wrap"><a style="text-decoration:none;font:bold;" href="javascript:void(0);" onclick="enviarRetoPrivado();ocultarCapa(\'menu0\');">';
	                     html += '      ' + ENVIAR_RETO;
	                     html += '   </a></td></tr></table>';
	                     html += '</div>';
	                  }
	
						   posicionHelp();
						   document.getElementById('salas_y_users').innerHTML = html;
						}
               }
				break;
				
				case 'TEXTOCARRERA':
  				   content1 = contentArray[1];
					if (!document.getElementById('nickElement_'+content1)) {
				      aCarrera = urlDecode(content1).replace('\n','').split('|');

              		reg_texto_id            = aCarrera[0];
              		reg_texto_libro         = aCarrera[1];
              		reg_texto_autor         = aCarrera[2];
              		reg_texto_texto         = aCarrera[3];
              		reg_texto_link_libreria = aCarrera[4];
              		reg_texto_link_imagen   = aCarrera[5];
              		id_carrera              = aCarrera[6];
              		reg_texto_aportacion    = aCarrera[7];
              		reg_texto_isbn          = aCarrera[8];
              		
              		if (reg_texto_texto == "undefined") {
              		   //delay
              		   i=0;
              		   while (reg_texto_texto == "undefined" && i<10000000) {
              		      reg_texto_texto = aCarrera[3];
              		      i++;
              		   }
              		   document.getElementById('textInput').value = "error";
              		   a = 0;
              		}

                  textLen = reg_texto_texto.length;
                  if (textLen < 700)
                     a = 0;
                  else if (textLen < 800)
                     document.getElementById('vdactil_text_type').style.fontSize = "17px";
                  else if (textLen < 900)
                     document.getElementById('vdactil_text_type').style.fontSize = "16px";
                  else if (textLen < 1000)
                     document.getElementById('vdactil_text_type').style.fontSize = "15px";
                  else if (textLen > 1000)
                     document.getElementById('vdactil_text_type').style.fontSize = "14px";
                  
                  //reg_texto_texto += " (" + textLen + ")";
					   //document.getElementById('vdactil_text_type').innerHTML = reg_texto_texto;
				      document.getElementById('vdactil_text_type').innerHTML = marcarSiguientePalabra(0);
					   //document.getElementById('vdactil_text_type').innerHTML = document.getElementById('vdactil_text_type').innerHTML;
                  posicionHelp();
					}
				break;
				
				case 'LISTADOSPRIVADOS':
				   try {
                  // recupera los listados
     				   content1 = contentArray[1];
                  sListados = urlDecode(content1);
                  aListados = sListados.split("||");
                  
                  aListaUsuarios = aListados[0].split(";");
                  aListaCarreras = aListados[1].split(";");
                  aListaUltimosConectados  = aListados[2].split(";");
                  aListaUsuariosFacebook  = aListados[3].split(";");
                  aListaTodosFacebook  = aListados[4].split(";");
   
                  cabeceraUltimosConectados = "foto, username, last_login";
                  aListaUltimosConectados.unshift(cabeceraUltimosConectados);
                  
                  cabeceraUsuarios = "id, username, email, city, state, country, age, gender, email_verified, active";
                  aListaUsuarios.unshift(cabeceraUsuarios);
                  
                  cabeceraCarreras = "id, username, id_carrera, ppm, posicion, pulsaciones, errores, fecha, id_texto, nivel, modo, idioma, ip";
                  aListaCarreras.unshift(cabeceraCarreras);
                  
                  cabeceraUsuariosFacebook = "username, contador, fecha";
                  aListaUsuariosFacebook.unshift(cabeceraUsuariosFacebook);

                  cabeceraTodosFacebook = "username";
                  aListaTodosFacebook.unshift(cabeceraTodosFacebook);
                  
                  document.getElementById('conectados').innerHTML = pintaListados(aListaUltimosConectados, "Ultimos Conectados",1);
                  document.getElementById('usuarios').innerHTML = pintaListados(aListaUsuarios, "Usuarios",1);
                  document.getElementById('carreras').innerHTML = pintaListados(aListaCarreras, "Carreras",0);
                  document.getElementById('usuariosfacebook').innerHTML = pintaListados(aListaUsuariosFacebook, "Usuarios Facebook",0);
                  document.getElementById('todosfacebook').innerHTML = pintaListados(aListaTodosFacebook, "Todos los usuarios de Facebook",0);
		         } catch (e) {
		            a = 0;
               }
            break;
				
				case 'ESTADISTICASPRIVADAS':
               // recupera los listados
               try {
     				   content1 = contentArray[1];
                  sListados = urlDecode(content1);
                  aListados = sListados.split("||");
                  
                  aListaCarrerasDias         = aListados[0].split(";");
                  //aListaCompetidoreCarrera   = aListados[1].split(";");
                  aListaBanners   = aListados[1].split(";");
   
                  cabeceraListaCarrerasDias = "fecha, contador";
                  aListaCarrerasDias.unshift(cabeceraListaCarrerasDias);
                  
                  //cabeceraListaCompetidoreCarrera = "id_carrera, contador";
                  //aListaCompetidoreCarrera.unshift(cabeceraListaCompetidoreCarrera);
                  
                  cabeceraListaBanners = "id, banner, clicks, clicks por día";
                  aListaBanners.unshift(cabeceraListaBanners);

                  document.getElementById('carreras_dia').innerHTML = pintaListados(aListaCarrerasDias, "Carreras por día",1);
                  //document.getElementById('competidores_carreras').innerHTML = pintaListados(aListaCompetidoreCarrera, "Competidores por carrera",1);
                  document.getElementById('banners').innerHTML = pintaListados(aListaBanners, "Banners",1);
		         } catch (e) {
		            a = 0;
               }
            break;
				
				case 'TEXTOSPRIVADOS':
               // recupera los listados
               try {
     				   content1 = contentArray[1];
                  sListados = urlDecode(content1);
                  aListados = sListados.split("||");
                  
                  aListaLibros          = aListados[0].split(";");
                  aListaTextosIdiomas   = aListados[1].split(";");
   
                  cabeceraLibros = "id, idioma, revisado, libro, autor, link";
                  aListaLibros.unshift(cabeceraLibros);
                  
                  cabeceraListaTextosIdiomas = "idioma, contador";
                  aListaTextosIdiomas.unshift(cabeceraListaTextosIdiomas);
                  
                  document.getElementById('libros').innerHTML = pintaListados(aListaLibros, "Libros",1);
                  document.getElementById('textos_idiomas').innerHTML = pintaListados(aListaTextosIdiomas, "Textos existentes por idioma",0);
		         } catch (e) {
		            a = 0;
               }
            break;
            
				case 'SALA_DE_ESPERA':
               // recupera los listados
				   content1 = contentArray[1];
               sListados = urlDecode(content1);
               aListados = sListados.split("||");
               
               aListaCarreras = aListados[0].split(";");

               cabeceraCarreras = " " + PPM + ", " + POSICION + ", " + PULSACIONES + ", " + ERRORES3 + ", " + FECHA + ", " + MODO;
               aListaCarreras.unshift(cabeceraCarreras);
               
               document.getElementById('carreras').innerHTML = pintaListados(aListaCarreras, TODAS_TUS_CARRERAS,0);
            break;
				
				case 'LISTADOSAJENOS':
               try {
   				   content1 = contentArray[1];
   					if (!document.getElementById('nickElement_'+content1)) {
                     // recupera los listados
                     sListados = urlDecode(content1);
                     aListados = sListados.split("||");
                     
                     aListaMasRapidos = aListados[0].split(";");
                     aListaMejoresCarreras = aListados[1].split(";");
   
                     cabeceraMasRapidos = "#," + USUARIO + "," + PPM_MEDIA + "," + NUM_CARRERAS + "," + ERR_MEDIA;
                     aListaMasRapidos.unshift(cabeceraMasRapidos);
                     
                     cabeceraMejoresCarreras = USUARIO + ",p.p.m.," + ERRORES + "," + FECHA;
                     aListaMejoresCarreras.unshift(cabeceraMejoresCarreras);
                     
                     document.getElementById('masRapidos').innerHTML = pintaListados(aListaMasRapidos, LOS_MAS_RAPIDOS,1);
                     document.getElementById('mejoresCarreras').innerHTML = pintaListados(aListaMejoresCarreras, LAS_MEJORES_CARRERAS,0);
                     document.getElementById('vdactil_modo').innerHTML = modo;
                  }
		         } catch (e) {
		            a = 0;
               }
            break;

				case 'LISTADOSPROPIOS':
				   try {
   				   content1 = contentArray[1];
   					if (!document.getElementById('nickElement_'+content1)) {
                     // recupera los listados
                     sListados = urlDecode(content1);
                     aListados = sListados.split("||");
                     
                     aListaTusMejoresCarreras = aListados[0].split(";");
                     aListaTusUltimasCarreras = aListados[1].split(";");
   
                     cabeceraTusMejoresCarreras = "p.p.m.," + ERRORES3 + "," + FECHA;
                     aListaTusMejoresCarreras.unshift(cabeceraTusMejoresCarreras);
                     
                     cabeceraTusUltimasCarreras = "p.p.m.," + ERRORES3 + "," + FECHA;
                     aListaTusUltimasCarreras.unshift(cabeceraTusUltimasCarreras);
                     
                     document.getElementById('tusMejoresCarreras').innerHTML = pintaListados(aListaTusMejoresCarreras, TUS_MEJORES_CARRERAS,0);
                     document.getElementById('vdactil_nickname_span').innerHTML = pintaListados(aListaTusUltimasCarreras, TUS_ULTIMAS_CARRERAS,0);
                  }
		         } catch (e) {
		            a = 0;
               }
            break;

				case 'LISTADOSESTATICOS':
				   try {
   				   content1 = contentArray[1];
   					if (!document.getElementById('nickElement_'+content1)) {
                     // recupera los listados
                     sListados = urlDecode(content1);
                     aListados = sListados.split("||");
                     
                     aListaNiveles = aListados[0].split(";");
                     aListaEvolucionUsuario = aListados[1].split(";");
   
                     cabeceraListaNiveles = ", , ";
                     aListaNiveles.unshift(cabeceraListaNiveles);
                     
                     arrayEvolucion = new Array();
                     for (i=0; i<aListaEvolucionUsuario.length-1; i++) {
                        aListaAux = aListaEvolucionUsuario[i].split(",");
                        // convierto a número
                        for (j=0; j<aListaAux.length;j++)
                           aListaAux[j] = parseInt(aListaAux[j]);
                        arrayEvolucion[i] = aListaAux;
                     }
                     if (arrayEvolucion.length > 1)
                        pintaGrafico(arrayEvolucion);
                     
                     document.getElementById('vdactil_nivel_span').innerHTML = pintaListados(aListaNiveles, NIVELES,false);
                  }
		         } catch (e) {
		            a = 0;
               }
				break;
				
/*				case 'ID_CARRERA':
				   content1 = contentArray[1];
					if (!document.getElementById('nickElement_'+content1)) {
                  id_carrera = contentArray[1];
               }				   
            break; */

            case 'DIFERENCIA_SERVIDOR-LOCAL':
				   content1 = contentArray[1];
				   diferencia_servidor_local = content1;
            break;
            
            case 'RETOPRIVADO':
				   content1 = contentArray[1];
					if (trim(urlDecode(content1)) != '\n') {
   					showMsgBox = true;
   					mostrarDIV("retoprivado");
   					aviso();
   				} else {
   				   ocultarDIV("retoprivado");
   				}
   				
   				aReto = urlDecode(content1).replace('\n','').split("|");
   				sNick = aReto[0];
   				sResto = aReto[1];
   				sSalaReto = aReto[2];
   				sNick1 = urlEncode(sNick);
   				sSalaReto1 = urlEncode(sSalaReto);
   				sOnClick = "aceptarReto('" + sNick1 + "','" + sSalaReto1 + "');";
   				if (sSalaReto != "")
   				   sBotones = "<br><center><a style='color:red' onclick=" + sOnClick + " href='javascript:void(0)'>Aceptar</a>&nbsp;&nbsp;&nbsp;&nbsp;<a style='color:red' onclick='rechazarReto(\"" + sNick1 + "\");' href='javascript:void(0)'>Rechazar</a></center>";
   				else {
   				   sBotones = "";
        				setTimeout('ocultarDIV("retoprivado")', 10000);
        			}
   				document.getElementById('retoprivado').innerHTML = nickPintar(sNick) + sResto + "<br>" + sBotones;
   				//document.getElementById('retoprivado2').innerHTML = nickPintar(sNick) + sResto + sBotones;
            break;
            
				case 'DATARESULT':
				   content1 = contentArray[1];
					//document.getElementById('vdactil_data_result').innerHTML = document.getElementById('vdactil_data_result').innerHTML + urlDecode(content1);
					var containerElement = document.getElementById('vdactil_data_result');

					var dataResultArray = urlDecode(content1).split(';'); 
					
					if (arrayCarrera != null) {
   					for (var i=0;i<arrayCarrera.length;i++){   		
   					   if (nArrayMe != i) {
      					   if (arrayCarrera[i][0] == dataResultArray[0]) {
   					         arrayCarrera[i][1] = parseInt(dataResultArray[1]);    // keyCounter
   					         arrayCarrera[i][2] = dataResultArray[2];              // tiempo
   					         arrayCarrera[i][3] = parseInt(dataResultArray[3]);    // P.P.M.
   					         arrayCarrera[i][4] = parseInt(dataResultArray[4]);    // Porcentaje
   					         arrayCarrera[i][5] = parseInt(dataResultArray[5]);    // posicionFinal
   					         arrayCarrera[i][6] = dataResultArray[6];              // situación
   					         arrayCarrera[i][7] = parseInt(dataResultArray[7]);    // keyCounterStroked
   					         arrayCarrera[i][8] = dataResultArray[9];              // Time Server
   					         
      					      document.getElementById('vdactil_span_corredor' + i).innerHTML = spanCorredor(i);
      					   }
      					}
				         arrayCarrera[i][8] = dataResultArray[9];              // Time Server
                     ajustaClasificacion();
                     pintaResultados(i);
   					}
   				}
				break;				
				
				default:
					document.getElementById('chatContentBlock').innerHTML += streamLines[n] + '<br />';
					scrollDown();
				break;
			}
		}
	}
}

function ocultarDIV(objeto) {
   //desaparecer(objeto, '10%');
   showMsgBox = true;
	document.getElementById(objeto).style.zIndex = '0';
	setTimeout("hiddenDIV('" + objeto + "')",2000);
	document.getElementById(objeto).style.opacity = '0.0';
}

function mostrarDIV(objeto) {
   if (showMsgBox) {
      showDIV(objeto);
      //aparecer(objeto, '10%');
		showMsgBox = false;
		document.getElementById(objeto).style.zIndex = '9999';
		document.getElementById(objeto).style.opacity = '1.0';
	}
}

function hiddenDIV(objeto) {
   document.getElementById(objeto).style.visibility = 'hidden';
}

function showDIV(objeto) {
   document.getElementById(objeto).style.visibility = 'visible';
}

function contarRetosPrivados() {
   var i=0;
   var numRetos = 0;
   sNicks = '';
   while (document.getElementById('aUsuariosRetos' + i) != null) {
   	if (document.getElementById('aUsuariosRetos'+i).checked) {
	      numRetos++;
	   }
	   i++;
   }
   return numRetos;
}

function enviarRetoPrivado() {
   if (contarRetosPrivados() == 0) {
      alert(ERROR_SIN_RETO);
   } else if (contarRetosPrivados() <= 4) {
      var i=0;
      sNicks = '';
      while (document.getElementById('aUsuariosRetos' + i) != null) {
      	if (document.getElementById('aUsuariosRetos'+i).checked) {
   	      sNicks = sNicks + document.getElementById('aUsuariosRetos'+i).value + ",";
   	   }
   	   i++;
      }
      // quitar la ultima coma
      sNicks = sNicks.substr(0,sNicks.length-1);
      setTimeout("window.location='index.php?L=run&modo=reto&usuarios_retados=" + sNicks + "'", 0);
   } else {
      alert(ERROR_RETO);
   }
}

function aceptarReto(sNick, sSalaReto) {
   ocultarDIV("retoprivado");
   setTimeout("window.location='index.php?L=run&modo=aceptar_reto&usuario_retador=" + sNick + "&sala_reto=" + sSalaReto + "'", 0);
}

function rechazarReto(sNick) {
   ocultarDIV("retoprivado");
   ajFetch('timer.php?sendRetoPrivado=' + sNick + '&language_os=' + language_os + '&tipoReto=rechazar', 'processReceivedData', false, 0);
}

function resumenCorredor(i) {
	nClass = "";
	usname = arrayCorredores[i][0];
	mainpicture = arrayCorredores[i][11];
   	                         
   if (tritonNickName == nNick) {
      nClass = 'color:green;';
      nArrayMe = i;
   } else {
      nClass = 'color:#C0C0C0;';
   }
   if (nickPintar(usname).length > 40)
      nClass += 'font-size: 8px;';
   else if (nickPintar(usname).length > 26)
      nClass += 'font-size: 9px;';

	html  = '  <td style="vertical-align: middle; max-width:65px; min-width:65px; width: 65px; height: ' + alturaPista + 'px; overflow: no;">';			   		
   if (nNick.substr(0,5) != 'Guest' && nNick.substr(0,6) != 'Server')
	   html += '        <a class="info" style="font-weight: bold;' + nClass + '" href="perfil-' + usname + '">';
	else
	   html += '        <a class="info" style="cursor:default;font-weight: bold;' + nClass + '" href="javascript:void(0);">';
	html +=           nickPintar(usname);
	html += '         <span style="left: 0em">';
	html += '         	<center>';
	
   html += '         	    <table>';
   html += '         	        <tr>';
   html += '         	            <td align="center">';
   html += '         	                <font style="color:blue; font-size:20px; font-weight: bold;">' + nickPintar(nNick)  +  '&nbsp<img alt="idioma" id="idioma_activo" src="images/idiomas/' + idioma + '.gif" width="20px"/>' + '</font>';   
   if (nickPintar(usname).length > 8)
  	   html += '&nbsp;<img alt="facebook" src="images/share/ico_facebook.gif">';
   html += '         	            </td>';
   html += '         	        </tr>';
   html += '         	        <tr>';
   html += '         	            <td align="center">';
	if (mainpicture != 'undefined' && mainpicture != "")
	   html += '<img alt="' + nickPintar(usname) + '" width="100px" style="border:2px solid" src="system/cache/pictures/' + mainpicture + '">';
   html += '         	            </td>';
   html += '         	         </tr>';   
   html += '         	    </table>';

	html += '            </center>';
//	if (arrayCorredores[i][8])
//	   html += 'facebook';
	html += '         	<hr><br>';
	
	html += '           <table align="center"><tr><td align="right">' + CARRERAS_TERMINADAS + '</td><td class="datos_estadistica" align="right">' + arrayCorredores[i][1] + '</td></tr>';
	html += '           <tr><td align="right">' + CARRERAS_GANADAS + '</td><td class="datos_estadistica" align="right">' + arrayCorredores[i][2] + '</td></tr>';
	html += '           <tr><td align="right">' + MEDIA_PPM + '</td><td class="datos_estadistica" align="right">' + arrayCorredores[i][3] + '</td></tr>';
	html += '           <tr><td align="right" nowrap="wrap">' + MEDIA_PPM_ULTIMAS_CARRERAS + '</td><td class="datos_estadistica" align="right">' + arrayCorredores[i][4] + '</td></tr>';
	html += '           <tr><td align="right" nowrap="wrap">' + PPM_MEJOR_CARRERA + '</td><td class="datos_estadistica" align="right">' + arrayCorredores[i][8] + '</td></tr>';
   html += '           <tr><td align="center" colspan="2">' + NIVEL_ACTUAL + '<img alt="nivel actual" align="absmiddle" width="100px" src="' + arrayCorredores[i][7] + '"></td></tr></table>';

	html += '         </span>';
	html += '      </a>';
	
   html += '  </td>';
   
   return html;
}

function spanCorredor(iSpanCorredor) {
	html = '';
	errores = (parseInt((arrayCarrera[iSpanCorredor][7]-arrayCarrera[iSpanCorredor][1])*100/arrayCarrera[iSpanCorredor][7]));
	if (arrayCarrera[iSpanCorredor][0].substr(0,6) == 'Server')
	   errores = aleatorio(3,7);
	if (errores<0) errores = 0;
	html += '	<center><font style="color:blue; font-size:20px">' + nickPintar(arrayCarrera[iSpanCorredor][0]) + '</font></center>';
	html += '	<br>' + arrayCarrera[iSpanCorredor][8];
	html += '	<hr><br>';
	html += '  <table align="center"><tr><td align="right">' + PULSACIONES2 + '</td><td class="datos_estadistica" align="right">' + arrayCarrera[iSpanCorredor][7] + '</td></tr>';
	html += '  <table align="center"><tr><td align="right">' + TIEMPO + '</td><td class="datos_estadistica" align="right">' + arrayCarrera[iSpanCorredor][2] + '</td></tr>';
	html += '  <tr><td align="right">P.P.M.: </td><td class="datos_estadistica" align="right">' + arrayCarrera[iSpanCorredor][3] + '</td></tr>';
	html += '  <tr><td align="right">' + ERRORES2 + '</td><td class="datos_estadistica" align="right">' + errores + '%</td></tr>';
	return html;
}

/* show buffer to client */
function showBuffer(node) {
	if (node == selectedNode) {
		document.getElementById('chatContentBlock').innerHTML = (chatDataBuffer[node] ? chatDataBuffer[node] : '');
		scrollDown();
	}
	
	else document.getElementById('nodeElement_' + node).className = 'noticeNode';
}

function keyEventHandlerChat(key) {
	switch (key) {
		case 13: /* Return key */
			sendChat();
		break;

		case 32: /* Space */
		   sendIsWriting();
		break;
	}
}

function sendIsWriting() {
   /* Send IsWriting from textChat element */
	dataIsWriting = document.getElementById('textChat').value;

	/* Don't act if dataIsWriting is null */
	if (dataIsWriting != null && trim(dataIsWriting) != '') {
		if (selectedNode != 'channel' && dataIsWriting.substring(0,1) != '/')
			dataIsWriting = '/msg ' + selectedNode + ' ' + dataIsWriting;
		ajFetch('timer.php?sendChatDataWriting=' + urlEncode(dataIsWriting) + '&language_os=' + language_os, 'processReceivedData', false, 0);
	}
}

/* KeyCodes handler */
function keyEventHandler(key) {
	/* This is called when a key has been pressed in the text area */
	
	// no cuenta los BS
	if (key != 8)
   	keyCounterStroked++;
	
//   if (document.getElementById('textInput').value.length > 50) {
//      document.getElementById('textInput').value = "";
//   }

	switch (key) {
		case 32: /* Space */         
			sendInfoData();
		break;
		
		default:
         // fin de la carrera
		   if (reg_texto_texto == sHecho + document.getElementById('textInput').value) {
            refrescarDatos(document.getElementById('textInput').value);

            situacion = "llegada";
            tecleo_ordenador(false);
           	
            arrayCarrera[nArrayMe][6] = situacion;
            ajustaClasificacion();            
            for(i=0;i<arrayCarrera.length;i++)
               pintaResultados(i);
            // y después leo MI resultado
            posicionFinal = arrayCarrera[nArrayMe][5];

  			   sendInfoData();
	         sendData();
	         escribeTextoResumen(true);

  	         //corrige el problema de las pulsaciones simultáneas para mayúsculas
  	         if (keyCounterStroked < keyCounterReal)
  	            keyCounterStroked = keyCounterReal;

            sendLlegada();
            
   	      recargaPagina(true,20000);
         }
		break;
	}

   //sSig = sSiguientePalabra + " ";
	if (situacion != 'llegada') {
      if (document.getElementById('textInput').value == sQueda.substr(0,document.getElementById('textInput').value.length)) {
         document.getElementById('textInput').style.backgroundColor = "#EEEEEE";
         document.getElementById('vdactil_textbox').style.backgroundColor = "#EEEEEE";
         ocultarDIV('aviso');
      } else {
         document.getElementById('textInput').style.backgroundColor = "#FF8080";
         document.getElementById('vdactil_textbox').style.backgroundColor = "#FF8080";
         len = document.getElementById('textInput').value.length;
         if(parseInt(len/25)==len/25) {
			   if (showMsgBox)
     	         blip();
			   mostrarDIV('aviso');
         }
         if(parseInt(len/65)==len/65) {
            ocultarDIV('aviso');
         }
      }
	}
}

function sendLlegada(){
   // para dar de alta el registro del corredor: ($username, $id_carrera, $ppm, $posicion, $pulsaciones, $errores)
   var datosCorredor = 
      tritonNickName + ';' + 
      id_carrera + ';' + 
      nVelocidad + ';' + 
      posicionFinal + ';' + 
      keyCounterStroked + ';' + 
      (keyCounterStroked-keyCounterReal) + ';' + 
      !modoPractica;
   ajFetch('timer.php?sendChatLlegada=1&language_os=' + language_os + '&datosCorredor='+datosCorredor, 'processReceivedData', false, 0);   	      
}

function pintaListados(aListado, titulo, colorea) {
   var spanListado = "";
   spanListado = titulo + '&nbsp<img alt="idioma" id="idioma_activo" src="images/idiomas/' + idioma + '.gif" width="20px" align="right"/>';
   spanListado += '<table border="0">';
   for (i=0;i<aListado.length;i++) {
      var aRegistro = aListado[i].split(",");
      spanListado += '<tr>';
      for (j=0;j<aRegistro.length;j++) {
         if (titulo == "Carreras") {
            if (aRegistro[11] == 'es')
               fondo = '';
            else if (aRegistro[11] == 'en')
               fondo = 'bgcolor="#B0B7CE"';
            else if (aRegistro[11] == 'gl')
               fondo = 'bgcolor="#CFB0AF"';
            else if (aRegistro[11] == 'ca')
               fondo = 'bgcolor="#D1D773"';
            else if (aRegistro[11] == 'jur')
               fondo = 'bgcolor="#9DA299"';
         } else {
            fondo = '';
         }

         spanListado += '<td ' + fondo + ' nowrap="wrap">';
         if (i==0)
            spanListado += '<font color=red>';

         if (j==colorea || i==0)
            spanListado += '<b>';

         if (j==colorea && (titulo == LOS_MAS_RAPIDOS || titulo == LAS_MEJORES_CARRERAS))
            aRegistro[j] = nickPintar(aRegistro[j]);

         if (colorea > 0 && colorea == j && nickPintar(tritonNickName) == aRegistro[j]) {
            spanListado += '<font color=blue>' + aRegistro[j] + '</font>';
         } else {
            spanListado += aRegistro[j];
         }

         if (j==0 || i==0)
            spanListado += '</b>';
         if (i==0)
            spanListado += '</font>';

         spanListado += '</td>';
      }
      spanListado += '</tr>';
   }
   spanListado += '</table>';
   return spanListado;
}
   
function escribeTextoResumen(carreraFinalizada) {
   var textoResumen = '';

   // escribe el texto del resumen de abajo
   if (carreraFinalizada) {
      errores = keyCounterStroked-keyCounterReal;
      if (errores<0) errores = 0;
      textoResumen = 
         '<center>' + 
         TIEMPO + '<font color=red>' + tiempoEmpleado + ' | ' + '</font>' +
         PULSACIONES2 + '<font color=red>' + keyCounterStroked + ' | ' + '</font>' +
         'P.P.M.: <font color=red>' + nVelocidad + ' | ' + '</font>' +
         ERRORES2 + '<font color=red>' + (parseInt(errores*100/keyCounterStroked)) + '% (' + errores + ')</font><br><br>';
   }
   document.getElementById('vdactil_textbox').innerHTML = textoResumen;
   document.getElementById('vdactil_textbox').style.backgroundColor = "#EEEEEE";
   document.getElementById('vdactil_textbox').style.height = "23px";
   
   // escribe el resumen del libro y los enlaces de publicidad y recarga
   
   xModo = "";
   if (modoPractica) {
      xURL = "practicar-online";
   } else {
      xURL = "jugar-online";
   }

   textoResumen =
      '<table align="left" width="100%">' +
      '   <tr>' +
      '      <td class="clockCounter" colspan="2" align="left" style="font-size:14px; color:black" nowrap>' +
      '        ' + HAS_MECANOGRAFIADO +
      '      </td>' +
      '      <td align="center" rowspan="3" valign="top" width="40%">' +
      '         <br><br><br><a class="link_reload" href="' + xURL + '"><img alt="typewriter" border="0" src="images/typewriter.gif"><br><br>' +
      '         ' + QUIERES_JUGAR + '</a><br><div id=google>&nbsp;</div>' +
      '      </td>' +
      '   </tr>' +
      '   <tr>' +
      '      <td align="center">';
      
      if (idioma != "jur") {
         if (reg_texto_isbn != "") {
            textoResumen +=
               '         <a target="_blank" href="http://www.casadellibro.com/homeAfiliado?ca=4390&isbn=' + reg_texto_isbn + '">';
         } else {
            textoResumen +=
               '         <a target="_blank" class="link_libro" href="' + reg_texto_link_libreria + '">';
         }
      } else {
            textoResumen +=
               '         <a target="_blank" href="http://www.casadellibro.com/homeAfiliado?ca=4390&codigoCategoria=1030">';         
      }

   textoResumen += 
      '           <img alt="' + reg_texto_libro + '" src="' + reg_texto_link_imagen + '" width="80px">';

      if (reg_texto_link_libreria.indexOf("goear.com") > -1) {
         textoResumen += 
            '           <img alt="goear" height="30px" src="images/goear.gif">';
      }

   textoResumen += 
      '         </a>' +
      '      </td>' +
      '      <td class="link_autor" nowrap align="left" valign="top" width="440px">';

      if (idioma != "jur") {
         if (reg_texto_isbn != "") {
            textoResumen +=
               '         <a target="_blank" class="link_libro" href="http://www.casadellibro.com/homeAfiliado?ca=4390&isbn=' + reg_texto_isbn + '">' + reg_texto_libro + '</a>';
         } else {
            textoResumen +=
               '         <a target="_blank" class="link_libro" href="' + reg_texto_link_libreria + '">'+ reg_texto_libro + '</a>';
         }
      } else {
            textoResumen +=
               '         <a target="_blank" href="http://www.casadellibro.com/homeAfiliado?ca=4390&codigoCategoria=1030">'+ reg_texto_libro + '</a>';
      }

   textoResumen +=  '<br>' + reg_texto_autor +
      '         <br><font style="color:#0;font-size: 12px;">(' + APORTACION + reg_texto_aportacion + ')</font>';

      $casadellibro = false; 
      if (idioma != "jur") {
         if (reg_texto_isbn != "") {
            textoResumen +=
               '         <br><br><font size="2" color="black">¿te gustaría tener este libro? ¿quieres colaborar con Velocidactil?<br>cómpralo aquí:</font><br>' +
               '         <a target="_blank" class="link_libro" href="http://www.casadellibro.com/homeAfiliado?ca=4390&isbn=' + reg_texto_isbn + '"><img alt="casa del libro" width="200" src="images/CL-puntocom-Verde-AF_250.jpg" /></a>';
            $casadellibro = true; 
         }
      } else {
            textoResumen +=
               '         <br><br><font size="2" color="black">¿Necesitas temario de oposiciones? ¿quieres colaborar con Velocidactil?<br>cómpralos aquí:</font><br>' +
               '         <a target="_blank" href="http://www.casadellibro.com/homeAfiliado?ca=4390&codigoCategoria=1030"><img alt="casa del libro" width="200" src="images/CL-puntocom-Verde-AF_250.jpg" /></a>';
            $casadellibro = true; 
      }
   
   if ($casadellibro && fecha_hoy() <= "2009/10/29") {
      textoResumen += "<br><font size='1' color='black'>En <b>Casadellibro.com</> tenemos promoción de <font color='red'>GASTOS DE ENVÍO GRATIS</font> el próximo jueves, <br>29 de octubre. Se descontarán <font color='red'>5€</font> en gastos de envío para pedidos superiores a <font color='red'>30€</font>.</font>"
   }

   textoResumen += 
      '      </td>' +
      '   </tr>' +
/*      '   <tr>' +
      '      <td align="left" colspan="2">' +
      '        <a href="index.php">' + VOLVER + '</a>' +
      '      </td>' +
      '   </tr>' + */
      '</table>';
   document.getElementById('vdactil_text_type').style.backgroundColor = "#EEEEEE";
   document.getElementById('vdactil_text_type').style.height = "200px";
   document.getElementById('vdactil_text_type').innerHTML = textoResumen;
   
   posicionHelp();
}

/* Send data from textInput element */
function sendData() {
	//data = document.getElementById('textInput').value;
	data = textInput;

	/* Don't act if data is null */
	if (data != null && trim(data) != '') {

		if (selectedNode != 'channel' && data.substring(0,1) != '/')
			data = '/msg ' + selectedNode + ' ' + data;

		textBufferArray = data;

		//ajFetch('timer.php?sendChatData=' + urlEncode(data) + '&language_os=' + language_os, 'processReceivedData', false, 0);
		//envío la llegada otra vez pasado un segundo
		ajFetch('timer.php?sendDataResult=' + urlEncode(sUltimoData) + '&language_os=' + language_os, 'processReceivedData', false, 1000);

		/* Clear the textInput value */
		//document.getElementById('textInput').value = '';
		textInput = '';
		keyCounter = 0;
		tStopDemonio = true;
		//situacion = "finalizada";
		document.getElementById('vdactil_textbox').innerHTML = '';
		
		/* Hide the command helper */
		//setTimeout("document.getElementById('commandsHelper').style.visibility = 'hidden';", 500);
	}
}

function sendChat() {
	dataChat = document.getElementById('textChat').value;

	/* Don't act if dataChat is null */
	if (dataChat != null && trim(dataChat) != '') {

		if (selectedNode != 'channel' && dataChat.substring(0,1) != '/')
			dataChat = '/msg ' + selectedNode + ' ' + dataChat;

		ajFetch('timer.php?sendChatData=' + urlEncode(dataChat) + '&language_os=' + language_os, 'processReceivedData', false, 0);

		/* Clear the textChat value */
		document.getElementById('textChat').value = '';
	}
}

/* Send data from textInput element */
function sendInfoData() {
	data = document.getElementById('textInput').value;
	textInputAux = data;
	
   if (data == sQueda.substring(0,data.length)) {
   	if (data.substr(data.length-1,1) != " ") {
   	   //corrige el problema de la letra saltarina
   	   document.getElementById('textInput').value = data.substr(data.length-1,1);
   	   data = data.substr(0,data.length-1);
   	   textInputAux = data;
   	} else
   	   document.getElementById('textInput').value = '';
      
      // evita repetir el refresco de datos en la última palabra
      if (situacion != 'llegada')
         refrescarDatos(textInputAux);
   
   	data = keyCounterReal + ';' + tiempoEmpleado + ';' + nVelocidad + ";" + porcentajeCarrera + ";" + posicionFinal + ";" + situacion + ";" + keyCounterStroked  + ";" + data;
      arrayCarrera[nArrayMe][1] = keyCounterReal;
      arrayCarrera[nArrayMe][2] = tiempoEmpleado;
      arrayCarrera[nArrayMe][3] = nVelocidad;
      arrayCarrera[nArrayMe][4] = porcentajeCarrera;
      arrayCarrera[nArrayMe][5] = posicionFinal;
      arrayCarrera[nArrayMe][6] = situacion;
      arrayCarrera[nArrayMe][7] = keyCounterStroked;
      ajustaClasificacion();
      pintaResultados(nArrayMe);

      //document.getElementById('resumenCorredor').innerHTML = resumenCorredor(nArrayMe);

      document.getElementById('vdactil_span_corredor' + nArrayMe).innerHTML = spanCorredor(nArrayMe);
   
   	/* Don't act if data is null */
   	if (data != null && trim(data) != '') {
   
   		if (selectedNode != 'channel' && data.substring(0,1) != '/')
   			data = '/msg ' + selectedNode + ' ' + data;
   
   		textBufferArray = data;
   
   		ajFetch('timer.php?sendDataResult=' + urlEncode(data) + '&language_os=' + language_os, 'processReceivedData', false, 0);
   		sUltimoData = data;
   
   		/* Clear the textInput value */
	      textInput = textInput + textInputAux;
   		document.getElementById('vdactil_text_type').innerHTML = html_text_type + marcarSiguientePalabra(keyCounter)
   		
      }
	}
}

function borraTextoChat(){
   if (document.getElementById('textChat').value = CHATEA_AQUI)
      document.getElementById('textChat').value = "";
   ;
}

function refrescarDatos(sTextInput) {
	// número total de teclas
	keyCounter = keyCounter + sTextInput.length;
	keyCounterReal = keyCounterReal + cuentaPulsaciones(sTextInput);

	//data = keyCounterReal(1) + minutos(2) + P.P.M.(3) + Porcentaje(4) + posicionFinal(5) + situacion(6) + keyCounterStroked(7);
	nMin = tDate.getMinutes();
	nSec = tDate.getSeconds();
   sMinutos = nMin + nSec/60 + tDate.getMilliseconds()/1000/60;
   tiempoEmpleado = str_pad(nMin, 2, "0") + ':' + str_pad(nSec, 2, "0")

   nVelocidad = parseInt(keyCounterReal/sMinutos);

	porcentajeCarrera = parseInt(keyCounterReal * 100 / cuentaPulsaciones(reg_texto_texto));
}

function pintaResultados(iCorredor) {
   if (arrayCarrera[iCorredor][0] != 'null') {
      porcentajePista(arrayCarrera[iCorredor][4],iCorredor);         
      textoFinal = '';
      if (arrayCarrera[iCorredor][6] == 'llegada') {
         if (arrayCarrera[iCorredor][5] > 0)
            textoFinal = "<br><font color='red'>#" + arrayCarrera[iCorredor][5] + "</font>";
      }
      if (isNaN(arrayCarrera[iCorredor][3])) 
   	   arrayCarrera[iCorredor][3] = 0;
      if (arrayCarrera[iCorredor][3] > 999) 
   	   arrayCarrera[iCorredor][3] = 999;
      document.getElementById('aVelocidad' + iCorredor).innerHTML = arrayCarrera[iCorredor][3] + ' p.p.m.' + textoFinal;
   }
}

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

function ajustaClasificacion() {
   var pos=0;
   miniArrayCarrera = new Array();
   for (var i=0;i<arrayCarrera.length;i++) {
      if (arrayCarrera[i][0] != 'null' && arrayCarrera[i][6] == 'llegada') {
         if (nArrayMe != i)
            a = 0;
         // sumo las PPM más la milésima parte de los errores cometidos para el caso de empate
         errores = parseInt(arrayCarrera[i][7]<0?0:arrayCarrera[i][7]);
         miniValor = parseInt(arrayCarrera[i][3])+((500-errores)/1000);
         miniArrayCarrera[pos] = new Array(miniValor,arrayCarrera[i][0]);
         pos++;
      }
   }
   qsort(miniArrayCarrera, 0, miniArrayCarrera.length-1);
      
   for (var i=0;i<miniArrayCarrera.length;i++)
      for (var j=0;j<arrayCarrera.length;j++)
         if (arrayCarrera[j][0] == miniArrayCarrera[i][1])
            arrayCarrera[j][5] = i+1;
}


function marcarSiguientePalabra(nKeyCounter) {
	sHecho = reg_texto_texto.substring(0,nKeyCounter);
	sQueda = reg_texto_texto.substring(nKeyCounter);
   palabra = sQueda.indexOf(" ");
   
   if (palabra == 0) {
      palabraAux = sQueda.substring(1);
      palabra = palabraAux.indexOf(" ")+1;
   }
   
   if (palabra != -1)
      sSiguientePalabra = sQueda.substring(0,palabra);
   else {
      sSiguientePalabra = sQueda.substring(0);
      palabra = sSiguientePalabra.length;
   }
   sQuedaAux = reg_texto_texto.substring(nKeyCounter+palabra);
   
   return (sHecho + "<font color='red'><u>" + sSiguientePalabra + "</u></font> " + sQuedaAux);
}

/* Scrolls the content div to its end */
function scrollDown() {
	if (scrollerActivated) {
		content = document.getElementById('chatContentBlock');
		content.scrollTop = content.scrollHeight;
	}
}

function restarTiempo(minInicio,segInicio,minFin,segFin) {
   resultado = (minInicio*60+segInicio) - (minFin*60+segFin);
   min = Math.floor(resultado/60);
   if (min < 0) min = 0;
   sec = resultado%60;
   if (sec < 0) sec = 0;
   return str_pad(min, 2, "0") + ":" + str_pad(sec, 2, "0");
}

var tStart = null;
function onlineTimerUpdate() {   
	if(!tStart) tStart = new Date();
	tDate = new Date();
	var tDiff = tDate.getTime() - tStart.getTime();
	tDate.setTime(tDiff);
	//document.getElementById('onlineTimer').innerHTML = "Tiempo restante: " + str_pad(tDate.getMinutes(), 2, "0") + ":" + str_pad(tDate.getSeconds(), 2, "0");
	tiempoRestante = restarTiempo(minutosCarrera,segundosCarrera,tDate.getMinutes(),tDate.getSeconds());
	document.getElementById('onlineTimer').innerHTML = TIEMPO_RESTANTE + tiempoRestante;
	if (tiempoRestante != "00:00") {
	   setTimeout("onlineTimerUpdate()", 1000);
	} else {
	   //document.getElementById('semaforo').style.top = "230px";
      document.getElementById('imgSemaforo').src = "images/vehiculos/bandera.gif";
	   document.getElementById('semaforo').style.color = "#000000";
      document.getElementById('countDown').innerHTML = CARRERA_FINALIZADA;
      document.getElementById('onlineTimer').innerHTML = CARRERA_FINALIZADA;
      document.getElementById('semaforo').style.visibility = "visible";
      setTimeout('ocultarSemaforo()',10000);

      ajustaClasificacion();
	   if (situacion != 'llegada') {
	      escribeTextoResumen(false);
	      sendLlegada();
	   }
      
		situacion = "finalizada";
		posicionHelp();

      recargaPagina(true,20000);

      ajStop('processReceivedData');
	}
}

function ocultarSemaforo() {
   document.getElementById('semaforo').style.visibility = "hidden";
}

var tCuentaAtras = null;
var tQueda = 9999;
var tClock = 9999;
var pitidoInicial = true;

function cuentaAtras() {
   // si soy el segundo que entra, mando yo
   if (arrayCorredores.length > 1)
      activarCuentaAtras = (arrayCorredores[0][0] != tritonNickName);
   
   // si estoy en prácticas siempre mando yo
   if (modoPractica) {
      activarCuentaAtras = true;
   }
   
   // el reloj lo pone en marcha el segundo que entra
   if (activarCuentaAtras || tQueda != 9999) {
      document.getElementById('semaforo').style.visibility = "visible";
      if(tQueda == 9999)
     	   tQueda = tSegundosCuentaAtras;      
     	if(!tCuentaAtras)
     	   tCuentaAtras = new Date();
   	tDate = new Date();
 	   tDiff = tDate.getTime() - tCuentaAtras.getTime();
   	tDate.setTime(tDiff);
   	tClock = tQueda - tDate.getSeconds();
   	if (activarCuentaAtras) {
   	   if (pitidoInicial) {
   	      // sólo un pitido al inicio
				semaforo();
      	   pitidoInicial = false;
      	}
         // 3 segundos de retardo para ajustar los tiempos con los otros corredores
         ajFetch('timer.php?sendChatTimer=' + (tQueda - tDate.getSeconds() - 3) + '&language_os=' + language_os, 'processReceivedData', false, 0);
      }
   } else {
      contadorExterno = document.getElementById('reloj_externo').innerHTML;
      if (contadorExterno) {
         tClock = contadorExterno.split(";")[1];
         tQueda = tClock;
      }
   }

   if (document.getElementById('vdactil_text_type').innerHTML == "") {
      a = 0;
   }
   
   if (tQueda == 9999) {
      document.getElementById('semaforo').style.visibility = "visible";
      document.getElementById('countDown').innerHTML = ESPERANDO;
     	if (nArrayMe > 1 && !contadorExterno) {
     		activarCuentaAtras = true;
     	}
   } else {
      // me sitúo en la zona importante de la página
      // setTimeout("window.location='#abajo'", 0);

      if (tClock < 0) tClock = 0;    	   
 	   document.getElementById('countDown').innerHTML = PREPARADO + str_pad(tClock, 2, "0") + ' ';
 	   
 	   if (tClock < 4 && tClock > 0) {
   		semaforo();
      }
      
 	   if (tClock < 2)
 	      document.getElementById('imgSemaforo').src = "images/vehiculos/semaforo_3.gif";
 	   else if (tClock < 5)
    	   document.getElementById('imgSemaforo').src = "images/vehiculos/semaforo_2.gif";
   }
   
   if (tClock > 0)
	   setTimeout("cuentaAtras()", 1000);
	else {
	   // borrar el semáforo de carrera
       borraSemaforoCarreraEmpezada();	   

      document.getElementById('semaforo').style.visibility = "hidden";

	   if (modoDemonio) {
	      setTimeout("demonioAutomatico()", 1000);
	   }
	   
	   //activar cuando se pongan los niveles automáticos
	   nivelCarrera = arrayCorredores[nArrayMe][5];
	   if (nivelCarrera == "0" || nivelCarrera == "")
	      nivelCarrera = "1";
	   //nivelCarrera = aChannel[2];
	   //if (nivelCarrera > 1) {
		   velocidadMinima = (nivelCarrera-1)*100+1;
         velocidadMaxima = nivelCarrera*100;
      //}

      var tiempoCarrera = cuentaPulsaciones(reg_texto_texto)/ velocidadMinima * 1.5;
      if (tiempoCarrera > 15) tiempoCarrera = 15;
      minutosCarrera = parseInt(tiempoCarrera);
      segundosCarrera = parseInt(60*(tiempoCarrera-minutosCarrera));

      document.getElementById('textInput').disabled = false;
      document.getElementById('textInput').style.backgroundColor = "#EEEEEE";
      document.getElementById('vdactil_textbox').style.backgroundColor = "#EEEEEE";
   	document.getElementById('textInput').value = '';
   	document.getElementById('textInput').focus();

	   setTimeout("onlineTimerUpdate()", 1000);
	   situacion = "empezada";
  		tecleo_ordenador(true);
	}
}

function borraSemaforoCarreraEmpezada() {
   sChannel = document.getElementById('nodeElement_channel').innerHTML;
   sChannel = sChannel.substr(1);
	ajFetch('timer.php?sendChatDeleteSemaforo=' + sChannel + '&language_os=' + language_os, 'processReceivedData', false, 0);
}

function borraSemaforo() {
   // borro si el primero se va y estaba solo
   try {   
      nombreUser = urlDecode(arrayRegCorredores[0]).split(',');
      if (nombreUser[0] == tritonNickName && arrayCorredores.length == 1) {
         sChannel = document.getElementById('nodeElement_channel').innerHTML;
         sChannel = sChannel.substr(1);
      	ajFetch('timer.php?sendChatDeleteSemaforo=' + sChannel + '&language_os=' + language_os, 'processReceivedData', false, 0);
      }
   } catch (e) {
      a = 0;
   }
}

function quitChat() {
   try {   
   	if (!modoDemonio) {
   	   document.getElementById('textChat').value='/quit';
   	   sendChat();
   	}
   	//setTimeout("delay()", 3000);
   } catch (e) {
      a = 0;
   }
}

function delay() {
   a=1;
}

function str_pad(cad,len,que){
   cadcero='';
   cad = ''+cad;
   for(i=0;i<(len-cad.length);i++){
      cadcero+=que;
   }
   return cadcero+cad;
}

function recargaPagina(soloDemonio,delay) {
   if (modoDemonio) {
      //setTimeout("window.location='index.php?L=run&modo=demonio&aleat=" + aleatorio(1,999999) + "'", delay);
      setTimeout("window.location='index.php?L=run&modo=demonio'", delay);
   } else {
      if (!soloDemonio) {
         if (modoPractica) {
            setTimeout("window.location='practicar-online'", 0);
         } else {
            if (sala)
               setTimeout("window.location='sala-de-espera'", 0);
            else
               setTimeout("window.location='jugar-online'", 0);
         }
      }
   }
}

/* --------------------- HELPERS ----------------------- */

/* Set Selection */
function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

/* Array pop gizmo */
function array_pop(array, itemname) {
	var i = 0;
	while (i < array.length) {
		if (array[i] == itemname) array.splice(i, 1);
		i++;
  	}
	return array;
}

/* URLencode/decode helper */
function urlDecode(str){
    str=str.replace(new RegExp('\\+','g'), ' ');
   	return unescape(str);
}
	
function urlEncode(str){
	str = escape(str);
	str=str.replace(new RegExp('\\+','g'), '%2b');
	str=str.replace(new RegExp('%20','g'), '+');
	return str;
}

/* Base64 Helpers */
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function encode64(input) {
	if (input != null && input != '' && input != ' ') {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;

		do {
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);

			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;

			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}

			output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
			keyStr.charAt(enc3) + keyStr.charAt(enc4);
		} while (i < input.length);
   		
		return output;
	}
}

function decode64(input) {
	var output = "";
	var chr1, chr2, chr3;
	var enc1, enc2, enc3, enc4;
	var i = 0;

	input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

	do {
		enc1 = keyStr.indexOf(input.charAt(i++));
		enc2 = keyStr.indexOf(input.charAt(i++));
		enc3 = keyStr.indexOf(input.charAt(i++));
		enc4 = keyStr.indexOf(input.charAt(i++));

		chr1 = (enc1 << 2) | (enc2 >> 4);
		chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
		chr3 = ((enc3 & 3) << 6) | enc4;

		output = output + String.fromCharCode(chr1);

		if (enc3 != 64) {
			output = output + String.fromCharCode(chr2);
		}
		if (enc4 != 64) {
			output = output + String.fromCharCode(chr3);
		}
	} while (i < input.length);
	
	return output;
}

/* trim helper */
function trim(str) {
	/* Removes white spaces on the beginning and on the end of a string */
	if (str != null && str != '') {
		while (str.charAt(0) == ' ')
			str = str.substring(1);
		while (str.charAt(str.length - 1) == ' ')
			str = str.substring(0, str.length - 1);
	}
	return str;
}

function demonioAutomatico() {
   len = reg_texto_texto.length;
   if (iDemonio <= len-1){
      letra = reg_texto_texto.substring(iDemonio,iDemonio+1);      
      key = letra.charCodeAt(0);
      document.getElementById('textInput').value = document.getElementById('textInput').value + letra;
      keyEventHandler(key);
      iDemonio++;
      vMin = 200;
      vMax = 300;
      velAleatoria = aleatorio(vMin,vMax);
      tiempo = len/velAleatoria;
      min = Math.floor(tiempo);
      sec = parseInt((tiempo-min)*60);
      nProximo = min*60+sec;
      nProximo = nProximo*1000/len;
      if (modo == 'demonio' && arrayCarrera[nArrayMe][3] > 400) {
         nProximo = 1000;
      }      
      if (!tStopDemonio)
         setTimeout("demonioAutomatico()", nProximo/1.3);
   }
}

function compare ( arraySort, left, right ) {
   var depth = 0;
   while ( depth < arraySort[left].length && depth < arraySort[right].length ) {
      if ( arraySort[left][depth] < arraySort[right][depth] )
   	    return -1;
   	else if ( arraySort[left][depth] > arraySort[right][depth] )
   	    return 1;
   	depth++;	    
   }
   return 0;
}

function qsort ( arraySort, lo, hi ) {
   var low  = lo;
   var high = hi;
   mid = Math.floor( (low+high)/2 );

   if (arraySort.length > 1) {
      do {
         while ( compare(arraySort, low,  mid) > 0 )
            low++;
         while ( compare(arraySort, high, mid) < 0 )
            high--;
         if ( low <= high ) {
            swap( arraySort, low, high );
            low++;
            high--;
         }
      } while ( low <= high );
      if ( high > lo )
         qsort( arraySort, lo, high );
      if ( low < hi )
         qsort( arraySort, low, hi );
   }
}

function swap ( a, i, j ) {
   var tmp = a[i]; 
   a[i] = a[j];
   a[j] = tmp;
}

function pintaGrafico(myData) {
   desde = aumentaDias(myData[myData.length-1][0]-1000);
   hasta = aumentaDias(myData[0][0]-1000);
	var myChart = new JSChart('vdactil_ppmmedia_span', 'line');
	myChart.setDataArray(myData);
	myChart.setAxisNameFontSize(10);
	myChart.setAxisNameX(PERIODO + ' ' + desde + "-" + hasta);
	myChart.setAxisNameY('p.p.m.');
	myChart.setAxisNameColor('#787878');
	myChart.setAxisValuesNumberX(6);
	myChart.setShowXValues(false);
	myChart.setAxisValuesNumberY(5);
	myChart.setAxisValuesColor('#38a4d9');
	myChart.setAxisColor('#38a4d9');
	myChart.setLineColor('#C71112');
	myChart.setTitle(EVOLUCION + utf8_encode(nickPintar(tritonNickName)));
	myChart.setTitleColor('#383838');
	myChart.setGraphExtend(true);
	myChart.setGridColor('#38a4d9');
	myChart.setSize(600, 300);
	myChart.setAxisPaddingLeft(80);
	myChart.setAxisPaddingRight(80);
	myChart.setAxisPaddingTop(60);
	myChart.setAxisPaddingBottom(45);
	myChart.setTextPaddingLeft(20);
	myChart.setTextPaddingBottom(12);
//	myChart.setBackgroundImage('chart_bg.jpg');
	myChart.draw();
}

function aumentaDias(incremento) { 
   hoy=new Date();
   hoy.setTime(hoy.getTime()+incremento*24*60*60*1000); 
   mes=hoy.getMonth()+1; 
   if(mes<10) mes='0'+mes; 
   dia=hoy.getDate();
   if(dia<10) dia='0'+dia; 
   fecha=dia+'/'+mes+'/'+hoy.getFullYear(); 
   return fecha;   
} 

function fecha_hoy() { 
   hoy=new Date();
   mes=hoy.getMonth()+1; 
   if(mes<10) mes='0'+mes; 
   dia=hoy.getDate();
   if(dia<10) dia='0'+dia; 
   fecha=hoy.getFullYear()+'/'+mes+'/'+dia; 
   return fecha;   
} 

function semaforo() {
   if (sm_loaded && bSonido)
      soundManager.play('semaforo','sounds/censoredbeep.mp3');
}

function aviso() {
   if (sm_loaded && bSonido)
      soundManager.play('aviso','sounds/ploop.mp3');
}

function blip() {
   if (sm_loaded && bSonido)
      soundManager.play('blip','sounds/blip.mp3');
}

function tecleo_ordenador(bEstado) {
   if (arrayRegCorredores.length > 2)
      soundFile = "sala_ordenador.mp3";
   else
      soundFile = "tecleo_ordenador.mp3";
      
   if (bEstado && situacion == "empezada") {
      if (sm_loaded && bSonidoTeclas) {
         soundManager.play('tecleo_ordenador','sounds/' + soundFile);
      }
   } else {
      soundManager.destroySound('tecleo_ordenador');
   }
}

soundManager.onload = function() {
   sm_loaded = true;   
}

function utf8_encode(argString) {
    var string = (argString+'');
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}

/*
function desaparecer(objeto, caida){
   try {
      jQuery('#' + objeto).animate({
         opacity: 0.0,
         marginTop: caida,
      }, 500 ).hide("slow");
   } catch (e) {
      a = 0;
   }
}

function aparecer(objeto, caida){
   try {
      jQuery('#' + objeto)
         .animate({
             opacity: '0.0',
             marginTop: "-"+caida,
         }, 10 ).show()
         .animate({
             opacity: '1.0',
             marginTop: "0",
         }, 1000 );
   } catch (e) {
      a = 0;
   }
}
*/

$(document).ready(function() {
   $("#vdactil_container").bind('copy', function(e) {
       return false;
   });
   $("#textInput").bind('paste', function(e) {
       return false;
   });
});
        