/* Funciones JavaScript para el dietario */

/* DEFINICIONES GENERALES *****************************************************************/

var cod_key = 0;         // Guarda el código de la tecla pulsada
var dia_col = "";        // Guarda el color original del día seleccionado
var col_sel = "#CCFFCC"; // Color del día seleccionado
var txt_ant = "";        // Guarda texto 

/* FORMULARIOS ****************************************************************************/

function js_Refrescar( a )
{
	/* Refresca la página actual:
	- a		Valor de la variable accion.
	= Manda el formulario. */
	
	document.formulario.accion.value = a;
	document.formulario.submit();
}

function js_Foco( d )
{
	/* Pone el foco en el día elegido:
	- d		Día seleccionado
	= Poner el foco. */
	
	if ( !d ) d = 1;
	
	var n = "act_" + d;
	
	eval("document.formulario." + n + ".focus()");
}

function js_GuardarDia( d )
{
	/* Guarda el día indicado:
	- d		Día a guardar
	= Guarda el día. */
	
	var s1 = "numsem_" + d;
	var s2 = "diasem_" + d;

	document.formulario.dia.value = d;
	document.getElementById("tdHoy").firstChild.nodeValue = d;
	dia_col = document.getElementById( s2 ).style.backgroundColor;
	document.getElementById( s1 ).style.backgroundColor = col_sel;
	document.getElementById( s2 ).style.backgroundColor = col_sel;
}

function js_RestauraColor( d )
{
	var s1 = "numsem_" + d;
	var s2 = "diasem_" + d;

	document.getElementById( s1 ).style.backgroundColor = dia_col;
	document.getElementById( s2 ).style.backgroundColor = dia_col;
}

function js_VerListado( t )
{
	/* Muestra los listados:
	- t		Tipo de listado: 0 - mensual, 1 - anual 
	= Nueva ventana con los datos del listado. */
	
	var m = document.formulario.mes.value;
	var a = document.formulario.any.value;
	var tl = document.getElementById("tipolis").value;
	var km = document.getElementById("pre_kms").value;  
	var fi = "2000-01-01";
	var ff = "2100-12-31";
	
	if ( t == 1 )
	{
		// Listado anual
		fi = a + "-01-01"; // Fecha inicial
		ff = a + "-12-31"; // Fecha final
	}
	else
	{
		// Listado mensual
		m = "00" + m;
		m = m.substring( m.length - 2 );
		fi = a + "-" + m + "-01";    // Fecha inicial
		ff = a + "-" + m + "-" + diasMes;  // Fecha final
	}
		
	var url = "listado.php" + urlDat + urlNex + "fechaIni=" + fi + "&fechaFin=" + ff + "&tipolist=" + tl + "&preciokm=" + km;
	window.open(url,'Listado','');
}

/* INFORMACIÓN ****************************************************************************/

function js_Escribir( id, txt )
{
	/* Escribe un texto en un control:
	- id	Identificador del control
	- txt	Texto a escribir
	= Escribe el texto. */
	
	var o = document.getElementById( id );
	
	txt_ant = o.innerHTML;
	o.innerHTML = txt;
}

function js_EscribirAnterior( id )
{
	/* Escribe el texto guardado en txt_ant:
	- id	Identificador del control
	= Escribe el texto. */
	
	var o = document.getElementById( id );
	
	o.innerHTML = txt_ant;
}

/* EVENTOS ********************************************************************************/

function js_PulsarTecla( e )
{
	var codigo;
	
	if ( document.layers || e )
	{
		codigo = e.which; 
	}
	else
	{
		codigo = event.keyCode; 
	}
	
	cod_key = codigo;
}
if ( document.layers ) 
{
	document.captureEvents( Event.KEYPRESS );
}
document.onkeypress = js_PulsarTecla;

/* COMPROBACIONES Y ACCIONES **************************************************************/

function js_ComprobarUsuario()
{
	var retorno = false;
	if ( document.formulario.usuario.value == "" ) 
	{
		alert( "El nombre de usuario no puede estar vacío.");
		document.formulario.usuario.focus();
	}
	else if ( document.formulario.clave.value == "" )
	{
		alert( "La clave no puede estar vacía.");
		document.formulario.clave.focus();
	}
	else
	{
		document.formulario.accion.value = "COMPROBAR";
		retorno = true;
		document.formulario.submit();
	}
	return retorno;
}

function js_ComprobarNum( i, d )
{
	/* Comprueba los dígitos para que sea un número correcto: 
	- i		Identificador del campo a comprobar
	- d		Número de decimales
	= Cambia el campo con los dígitos corregidos. */
	
	if ( !d ) d = 0;
	
	if ( cod_key != 0 )
	{
		var o = document.getElementById( i );
		var t = o.value;
		var v = ""; 
		var c = "";
		var j = 0;
		var n = 0;
		var hp = false;	// Controla si hay punto (o coma)
	
		for(j = 0; j < t.length; j++)
		{
			c = t.substr( j, 1);	// Lee un caracter
			
			if ( c == "," || c == "." ) 
			{
				// Control de puntos y comas
				if ( hp == false )
				{
					hp = true;
					c = dec_pto;   // Cambia el primer punto o coma por el valor del caracter decimal
					if ( j == 0 ) c = "0" + c;
				}
				else
				{
					c = "";  // Los demás puntos y comas los elimina
				}
			}
			else if ( c == " " )
			{
				// Control de espacios en blanco
				c = "";
			}
			else if ( isNaN(c) )
			{
				// Control de caracteres no numéricos
				c = "";
			}
			else
			{
				// Control del número de decimales
				if ( hp )
				{
					if ( n == d )
						c = "";
					else
						n++;
				}
			}
			v += c;
		}
		o.value = v;
	}
	js_ComprobarTecla( i );
}

function js_ComprobarTecla( i )
{
	/* Comprueba la tecla que se ha pulsado, código guardado en "cod_key":
	- i		Identificador del campo desde el que se ha pulsado la tecla.
	= Acción según la tecla pulsada. */
	
	
	// Cuando se pulsa la tecla Intro
	if ( cod_key == 13 )
	{
		switch ( intro_tipo )
		{
			case 0:  js_AccionIntro( i ); break;
			default: js_AccionTab( i );
		}
	}
}

function js_AccionIntro( i )
{
	/* Acción de tipo Intro: baja una línea.
	- i		Identificador del campo desde el que se ha pulsado la tecla.
	= Cambia el foco al elemento de la línea de abajo. */
	
	var x = i.indexOf( "_" );
	var c = i.substr( 0, x );	// Parte de texto del identificador
	var n = i.substr( x + 1 );	// Parte de número del identificador
	var id = "";
	
	// Aumenta el número
	if ( n == diasMes )
		n = 1;
	else
		n++;
	
	// Nuevo identificador
	id = c + "_" + n;
	document.getElementById( id ).focus();
}

function js_AccionTab( i )
{
	/* Acción de tipo Tabulador: pasa al siguiente campo.
	- i		Identificador del campo desde el que se ha pulsado la tecla.
	= Cambia el foco al elemento siguiente. */
	
	var x = i.indexOf( "_" );
	var c = i.substr( 0, x );	// Parte de texto del identificador
	var n = i.substr( x + 1 );	// Parte de número del identificador
	var id = "";
	
	switch( c )
	{
		case "act": c = "kms"; break;
		case "kms": c = "par"; break;
		case "par": c = "aut"; break;
		case "aut": c = "com"; break;
		case "fed": c = "con"; break;
		case "com": 
			if ( intro_tipo == 1 ) 
			{
				c = "fed"; 
				break;
			}
			// Si es de tipo 2 pasa al default.
		default:
			c = "act";
			// Aumenta el número
			if ( n == diasMes ) n = 1; else n++;
	}
	
	// Nuevo identificador
	id = c + "_" + n;
	document.getElementById( id ).focus();
}

function js_CambiarImagen( id, im )
{
	document.getElementById(id).src = im;
}

/* CÁLCULOS MATEMÁTICOS *******************************************************************/

function js_ComasPuntos( c, v )
{
	/* Cambia las comas de un número por puntos o viceversa:
	- c		Cadena a modificar.
	- v		Si es true cambia las comas a puntos, si es false cambia los puntos a comas.
	= Nueva cadena modificada. */
	
	var i = 0;
	var k = "";
	var t = "";
	var l = 0;
	
	c = String( c );
	l = c.length;
	
	for(i = 0; i < l; i++)
	{
		k = c.substr( i, 1);	// Lee un caracter
		
		if ( v == true )
		{
			if ( k == "," ) k = ".";
		}
		else
		{
			if ( k == "." ) k = ",";
		}
		
		t += k;	
	}
	
	return t;
}

function js_Redondear( i, d )
{
	/* Redondea el número de decimales indicado por "d"
	- i		Identificador del campo a redondear
	- d		Número de decimales
	= Cadena con los decimales redondeados. */
	
	var c = document.getElementById( i ).value;
	var hayComa = false;
	var k = "";
	var j = 0;
	var l = 0;
	var n = 0;
	
	if ( !d ) d = 0;
	
	c = String( c );
	l = c.length;
		
	// Mira si la coma o punto están al final
	k = c.substr( l-1, 1 );
	
	if ( k == "." || k == "," ) 
	{
		c = c.substr( 0, l-1 ); // Quitamos el punto o coma final
		l = c.length;           // Recalcula la longitud
	}
	
	for( j = 0; j < l; j++ )
	{
		k = c.substr( j, 1 );	// Lee un caracter
		
		if ( k == "." || k == "," ) 
		{
			hayComa = true;
		}
		else if ( hayComa == true )
		{
			n++;
		}
	}
	
	if ( l > 0 )
	{
		n = d - n; // Decimales que faltan
		
		if ( n > 0 )
		{
			// Añade el punto o la coma si no hay
			if ( hayComa == false ) c += dec_pto;
			
			// Añade los ceros necesarios al final
			for ( j = 1; j <= n; j++ )
			{
				c += "0";
			}
		}
		else if ( n < 0 )
		{
			// Sobran decimales, miramos el primero a descartar
			j = l + n;	// Posición desde 0 del primer decimal a descartar
			k = c.substr( j, 1 );	// Decimal a descartar
			if ( k < 5 )
			{
				// Menor que 5. El último decimal visible se queda igual
				c = c.substr( 0, j );
			}
			else
			{
				// Mayor o igual que 5. Aumentar en 1 el último decimal visible
				c = js_ComasPuntos( c, true );   // Cambia las comas por puntos
				c = parseFloat( c );             // Convierte en número
				k = "0.0000000000000000";
				k = k.substr( 0, d + 1 );        // Para 2 sería: 0.0
				k = k.concat("1");               // Para 2 sería: 0.01
				k = parseFloat( k );             // Se convierte a número
				c = c + k;                       // Se suma a la cantidad original
				c = js_ComasPuntos( c, false );  // Cambia los puntos por comas
				c = c.substr( 0, j );            // Se cogen los dígitos necesarios
			}
		}
		document.getElementById( i ).value = c;
	}
}

function js_SumaCampo( c )
{
	/* Suma la columna correspondiente a un campo:
	- c		Parte de caracteres del nombre del campo.
	= Suma de la columna. */
	
	var n;
	var v;
	var i = 0;
	var s = 0;
	var nf;
	var nc;
	var sf = 0;
	var sc = 0;
	
	for( i = 1; i <= diasMes; i++ )
	{
		n = c + "_" + i; // Nombre del elemento
		nf = "fed_" + i; // Casilla federación
		nc = "con_" + i; // Casilla consejo
		v = document.getElementById( n ).value;
		v = js_ComasPuntos( v, true );
		if ( v )
		{
			v = parseFloat( v );
			if ( document.getElementById( nf ).checked == true ) sf += v;
			if ( document.getElementById( nc ).checked == true ) sc += v;
			s += v;
		}
	}
	
	i = eval("dec_" + c);  // Número de decimales	
	
	// Resultado federacion
	nf = c + "_sumf";       // Nombre de la casilla de suma
	document.getElementById( nf ).value = js_ComasPuntos( sf, false ); // Cambia los puntos a comas y escribe el resultado
	js_Redondear( nf, i );	// Redondea el resultado
	
	// Resultado consejo
	nc = c + "_sumc";        // Nombre de la casilla de suma
	document.getElementById( nc ).value = js_ComasPuntos( sc, false ); // Cambia los puntos a comas y escribe el resultado
	js_Redondear( nc, i );	// Redondea el resultado

	// Resultado total
	n = c + "_sum";        // Nombre de la casilla de suma
	i = eval("dec_" + c);  // Número de decimales
	document.getElementById( n ).value = js_ComasPuntos( s, false ); // Cambia los puntos a comas y escribe el resultado
	js_Redondear( n, i );	// Redondea el resultado

	if ( c == "kms" ) js_PrecioKms( c ); // Calcula el precio de los Kms.
}

function js_PrecioKms()
{
	/* Calcula el precio total de los kilómetros:
	- Sin parámetros
	= Precios de los kilómetros. */
	
	var kmt = document.getElementById("kms_sum").value;  // Kms totales
	var kmf = document.getElementById("kms_sumf").value; // Kms federación
	var kmc = document.getElementById("kms_sumc").value; // Kms consell
	var v   = document.getElementById("pre_kms").value;  // Precio por km seleccionado
	
	// Cambiar las comas por puntos
	kmt =  js_ComasPuntos( kmt, true );
	kmf =  js_ComasPuntos( kmf, true );
	kmc =  js_ComasPuntos( kmc, true );
	v   =  js_ComasPuntos( v, true );  
	
	// Convertir a número
	kmt = parseFloat( kmt ); 
	kmf = parseFloat( kmf ); 
	kmc = parseFloat( kmc ); 
	v   = parseFloat( v ); 
	
	// Multiplicar valores
	kmt = v * kmt;
	kmf = v * kmf;
	kmc = v * kmc;
	
	// Escribir los resultados cambiando los puntos por comas
	document.getElementById("pre_sum").value  = js_ComasPuntos( kmt, false ); 
	document.getElementById("pre_sumf").value = js_ComasPuntos( kmf, false );
	document.getElementById("pre_sumc").value = js_ComasPuntos( kmc, false );
	
	// Redondear los resultados
	js_Redondear("pre_sum" , dec_pre );	
	js_Redondear("pre_sumf", dec_pre );
	js_Redondear("pre_sumc", dec_pre );
}

function js_SumarTodos()
{
	/* Realiza las sumas de todas las columnas:
	- Sin parámetros 
	= Llamada a las funciones de sumar. */
	
	js_SumaCampo("kms");
	js_SumaCampo("par");
	js_SumaCampo("aut");
	js_SumaCampo("com");
}

