/* 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 hor_sel = "#FFFFCC"; // Color de la hora seleccionada
var txt_ant = "";        // Guarda texto 
var dia_ant = 0;         // Día seleccionado anteriormente
var hor_ant = "";        // Identificador de hora anterior
var intro_tipo = 0;      // Como actuará la tecla Intro
var cambios = false;     // Detecta si ha habido cambios en la hoja
var notasVi = false;     // Capa de notas no visible
var ayudaVi = false;     // Capa de ayuda no visible

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

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

function js_GuardarCambios()
{
	/* Refresca la página para guardar si se detectan cambios:
	- Sin parámetros
	= Guarda los cambios. */
	
	if ( cambios == true ) js_Refrescar('GUARDARDATOS');
	
}

function js_CambiarDia( d )
{
	/* Cambia a otro día:
	- d   Día nuevo al que ir
	= Manda el formulario. */
	
	document.formulario.dianew.value = d;
	document.formulario.accion.value = "CAMBIARDIA";
	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 hoy = new Date();
	var hora = hoy.getHours();
	var minu = hoy.getMinutes();
	var foco = document.formulario.foco.value;
	var n;
	
	js_NotasVisibles();
	
	if ( foco )
	{
		// Mantiene el foco en la hora
		n = foco;
	}
	else
	{
		// Averigua el identificador de hora
		if ( hora < horaIni ) hora = horaIni;
		if ( hora > horaFin ) 
		{
			hora = horaMax;
		}
		else
		{
			hora = hora - horaIni;
			hora = hora * 2;
			if ( minu >= 30 ) hora++;
		}
		n = "hora_" + hora;
	}
	
	document.getElementById(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;

	// Pone el número del día elegido en la cabecera
	document.formulario.dia.value = d;
	document.getElementById("tdHoy").firstChild.nodeValue = d;
	
	// Guarda el color del día elegido
	dia_col = document.getElementById( s2 ).style.backgroundColor;
	
	// Pone el color de seleccionado
	document.getElementById( s1 ).style.backgroundColor = col_sel;
	document.getElementById( s2 ).style.backgroundColor = col_sel;
}

function js_RestauraColor( d )
{
	if ( dia_ant > 0 )
	{
		var s1 = "numsem_" + dia_ant;
		var s2 = "diasem_" + dia_ant;

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

function js_MarcarHora( id )
{
	/* Colorea la celda de la hora:
	- id	Identificador de la casilla de hora
	= Colorea la hora */
	
	var idt = "t" + id;	 // El id de la celda de hora
	var idx = "x" + id;  // El id de la celda del texto
	var idc = "c" + id;  // El id de la celda de chequeo
	var idat, idax, idac;
	
	// Guarda el elemento que tiene el foco
	document.formulario.foco.value = id;
	
	if ( hor_ant ) 
	{
		idat = "t" + hor_ant;
		idax = "x" + hor_ant;
		idac = "c" + hor_ant;
		document.getElementById( hor_ant ).style.backgroundColor = "#FFFFFF";
		document.getElementById( idat ).style.backgroundColor = "#FFFFFF";
		document.getElementById( idax ).style.backgroundColor = "#FFFFFF";
		document.getElementById( idac ).style.backgroundColor = "#FFFFFF";
	}
	
	document.getElementById( id ).style.backgroundColor = hor_sel;
	document.getElementById( idt ).style.backgroundColor = hor_sel;
	document.getElementById( idx ).style.backgroundColor = hor_sel;
	document.getElementById( idc ).style.backgroundColor = hor_sel;
	
	hor_ant = id;	// Guarda el identificador de hora
}

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 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;
	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_ComprobarHoras( s )
{
	/* Comprueba que la hora inicial no es mayor que la final:
	- s		Select que llama a la función: 0 - Inicial, 1 - Final
	= Cambia selección si hay error. */
	
	var oI = document.getElementById("hi");
	var oF = document.getElementById("hf");
	var i  = parseInt(oI.value);
	var f  = parseInt(oF.value);
	
	if ( i > f ) 
		if ( s == 0 )
			document.getElementById("hi").value = oF.value;
		else
			document.getElementById("hf").value = oI.value;
}

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 == horaMax )
		n = 0;
	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;
	cambios = true;
}

function js_PonerCambio( i )
{
	/* Marca la casilla de hora como cambiada:
	- i		Índice del array que ha cambiado
	= Marca la posición i del array como 1. */
	
	aCambio[i] = 1;
}

function js_CambiarClase( id )
{
	/* Alterna la clase del control id:
	- id	Identificador del control
	= Cambia la clase del control. */
	
	var o = document.getElementById( id );
	var c = o.getAttribute( "class" );
	
	if ( c == "dietxt" )
		c = "dietxt1";
	else
		c = "dietxt";
		
	o.setAttribute( "class", c );
	return true;
}

/* CAPAS **********************************************************************************/

function js_MostrarCapa(c)
{
	/* Muestra una capa:
	- c		Identificador de la capa
	= Hace que la capa sea visible. */
	
	var miCapa = document.getElementById(c);

	if ( !miCapa )
	{
		miCapa = eval("document." + c);
		miCapa.visibility = "show";
	}
	else
	{
		miCapa.style.visibility = "visible";
	}

	if ( c == "notas" ) 
	{
		document.getElementById('txtnotas').focus();
		//document.getElementById("notas").style.filter = "alpha(opacity=80)";
		//document.getElementById("notas").filters["DXImageTransform.Microsoft.Alpha"].Opacity=80;
		
	}
}

function js_OcultarCapa(c)
{
	/* Oculta una capa:
	- c		Identificador de la capa
	= Hace que la capa no se vea. */
	
	var miCapa = document.getElementById(c);
	
	if ( c == "ayuda" ) ayudaVi = false;
	if ( c == "notas" ) notasVi = false;

	if ( !miCapa )
	{
		miCapa = eval("document." + c);
		miCapa.visibility = "hide";
	}
	else
	{
		miCapa.style.visibility = "hidden";
	}
}

function js_NotasVisibles()
{
	if ( document.formulario.vernotas.value == 1 )
		js_MostrarCapa("notas");
}

function js_VerNotas( i )
{
	document.formulario.vernotas.value = i;
}


