﻿var flechaArriba = 38; 
var flechaAbajo = 40;
var flechaIzquierda = 37;
var flechaDerecha = 39;
var espacio = 32;
var may = 16;
var controlarFinal = false;

function keyUp_tb_XX(tb, evt)
{  
    manejaCaracteresEspeciales(tb,evt);
    manejaCaracteresEspeciales_switch(tb, evt);

    soloNumeros(tb);

    if (!tb.readOnly)
    {
        tb.style.textDecoration = '';
        tb.style.color = '';
        if(tb.value == '' || !noValido(tb.value))
        {            
            if (controlarFinal)
            {
                controlarFinal();
            }
            
            //if (!noValido(tb.value))
            //    envioAntiHacking(tb);
        }
    }  
}

function envioAntiHacking(tb)
{
    //PageMethods.antiHackeoWS(tb.id, tb.value)
}


// Queremos funcionalidad cuando se usen las flechas
function manejaCaracteresEspeciales(tb,evt)
{    
    var charCode = (evt.which) ? evt.which : event.keyCode;
    
    // Si hemos presionado la tecla de mayúsculas
    if (charCode == 17)
    {
        tb.select();
        return;
    }
    
    // Si hemos presionado una flecha...
    if ((charCode >= 37) && (charCode <= 40))
    {
        var prefijo = tb.id.substring(0, tb.id.lastIndexOf('_')+1);
        var my_Id = tb.id.substring(tb.id.lastIndexOf('_') + 1);
        
        // Sólo movemos si el cursor está en el primer o último lugar del tb
        var cursor = -1;
        // IE
        if (document.selection && (document.selection != 'undefined'))
        {
            var _range = document.selection.createRange();
            var contador = 0;
            while (_range.move('character', -1))
                contador++;
            cursor = contador;
        }
        else if (tb.selectionStart >= 0)
            cursor = tb.selectionStart;     
        
        var seguimos = (cursor == 0) || (cursor >= tb.value.length);
        
        if (!seguimos)
		    return true;
        
        if (my_Id.length == 2)
        {
            var fila = my_Id.charAt(0);
            var columna = my_Id.charAt(1);
            
            var contador = 0;
            switch(charCode)
            {
                case flechaArriba:
                    do
                    {
                        fila = manejaCaracteresEspeciales_Aux_Intervalo(--fila);
                    }
                    while ((contador++ < 10) && manejaCaracteresEspeciales_Aux_ReadOnly(prefijo+fila+columna))
                    break;
                case flechaAbajo:
                    do
                    {
                        fila = manejaCaracteresEspeciales_Aux_Intervalo(++fila);
                    }
                    while ((contador++ < 10) && manejaCaracteresEspeciales_Aux_ReadOnly(prefijo+fila+columna))
                    break;
                case flechaIzquierda:
                    do
                    {
                        columna = manejaCaracteresEspeciales_Aux_Intervalo(--columna);
                    }
                    while ((contador++ < 10) && manejaCaracteresEspeciales_Aux_ReadOnly(prefijo+fila+columna))
                    break;
                case flechaDerecha:
                    do
                    {
                        columna = manejaCaracteresEspeciales_Aux_Intervalo(++columna);
                    }
                    while ((contador++ < 10) && manejaCaracteresEspeciales_Aux_ReadOnly(prefijo+fila+columna))
                    break;
            }
            
            if (contador < 10)
                document.getElementById(prefijo+fila+columna).focus();
        }
         
    }
}


// Nos aseguramos que pertenecen a [0,8];
function manejaCaracteresEspeciales_Aux_Intervalo(i)
{
    i = i%9;
    if (i<0) i = 8;
    
    return i;
}

function manejaCaracteresEspeciales_Aux_ReadOnly(id)
{
    return document.getElementById(id).readOnly;
}

/*****************************************************/

// Pasamos de apuntador a casilla, y viceversa
function manejaCaracteresEspeciales_switch(tb, evt)
{
    var charCode = (evt.which) ? evt.which : event.keyCode;

    if (charCode == 16)
    {
        var prefijo = tb.id.substring(0, tb.id.lastIndexOf('_')+1);
        var my_Id = tb.id.substring(tb.id.lastIndexOf('_') + 1);
        
        if (prefijo.indexOf('apunte_') > 0)
            prefijo = prefijo.replace('apunte_','');
        else
            prefijo = prefijo + 'apunte_';
            
        if (document.getElementById(prefijo+my_Id) != null)
            document.getElementById(prefijo+my_Id).focus();
    }
}

/*****************************************************/

// Evitamos que se pueda usar el 'enter'
function keyPress_tb__XX(tb, evt)
{

		//var keyCode = event.keyCode ? event.keyCode : evt.which ? evt.which : evt.charCode;
		var keyCode;
		if (evt.which || evt.charCode)		
		{
		    keyCode = evt.which ? evt.which : evt.charCode;
		    return (keyCode != 13);
		}
		else if (window.event)
		{
		    keyCode = event.keyCode;
		    if (keyCode == 13) 
		    {		    
		        if (event.keyCode) 
		            event.keyCode = 9;

			    return false;
		    } 
		    else
		        return true;
		}
}

/*****************************************************/


function keyUp_tb_apunte_XX(tb, evt)
{
    manejaCaracteresEspeciales_switch(tb,evt);
    manejaCaracteresEspeciales(tb,evt)
    
    soloNumerosApuntes(tb);
    
    if (tb.value.length > 7)
    {
        tb.style.color = 'red';
    }
    else
    {
        tb.style.color = '';
    }
}

/******************************************************/

function soloNumerosApuntes(tb)
{
    var retorno = '';
    
    var caracterMalo = false;
    for (i = 0; i < tb.value.length; i++)
    {
        if (!noValido(tb.value.charAt(i)))
        {
            retorno += tb.value.charAt(i);
        }
        else
            caracterMalo = true;
    }
    
    // Sólo cambiaremos el tb si ha habido un caracter no permitido
    if (caracterMalo)
        tb.value = retorno;
}

function soloNumeros(tb)
{
    if (noValido(tb.value))
    {
        tb.value='';
    }
}

function noValido(texto)
{
    return (isNaN(texto) | texto == 0);
}
