/*=================================================================================*\
 *  funjvs01.php - Librería de funciones javascript.
 *
 *  (c) 2007 Innovatrium, S.L. <innovatrium@innovatrium.es>
 *  Este archivo NO puede ser libremente distribuido. Reservados todos los derechos.
 *  Para más información visite el sitio: http://www.innovatrium.es/ 
 *
\*=================================================================================*/


/*---------------------------------------------------------------------------------*\
 *  Función    : fjMarcarTodos()
 *  Descripción: Marca o desmarca todos los checkbox de un formulario. Para su uso en tablas de datos.
 *  Parámetros : parchk: Checkbox de cabecera que define si se marca o desmarcan los checkbox. 
 *               parfrm: Formulario del cual marcar todos los checkbox.  
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMarcarTodos(parchk, parfrm) 
{

	for (var i=0; i<parfrm.elements.length; i++) 
	{
	
		var auxobj = parfrm.elements[i];

		if (auxobj.name == "arrcla[]")
		{
			auxobj.checked = parchk.checked;
		}

	}

}


/*---------------------------------------------------------------------------------*\
 *  Función    : fjMarcarUno()
 *  Descripción: Marca un check cuyo value coincida con el valor indicado.
 *  Parámetros : parval: Valor a comprobar. 
 *               parfrm: Formulario del cual marcar el checkbox.  
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMarcarUno(parval, parfrm) 
{

	for (var i=0; i<parfrm.elements.length; i++) 
	{
	
		var auxobj = parfrm.elements[i];

		if (auxobj.name == "arrcla[]")
		{
			if (auxobj.value == parval)
			{				
				auxobj.checked = true;
			}
		}

	}

}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjMarcarDesmarcar()
 *  Descripción: Marca un check cuyo value coincida con el valor indicado.
 *  Parámetros : parval: Valor a comprobar. 
 *               parfrm: Formulario del cual marcar el checkbox.  
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMarcarDesmarcar(parval, parfrm) 
{

	for (var i=0; i<parfrm.elements.length; i++) 
	{
	
		var auxobj = parfrm.elements[i];

		if (auxobj.name == "arrcla[]")
		{
			if (auxobj.value == parval)
			{				
				if(auxobj.checked == true)
				{
					auxobj.checked = false;
				}
				else
				{
					auxobj.checked = true;
				}				
			}
		}

	}

}


/*---------------------------------------------------------------------------------*\
 *  Función    : fjConfirmar()
 *  Descripción: Confirma si se puede postear desde una tabla de datos y valida en caso de eliminar.
 *  Parámetros : pareli: Define si se debe validar el eliminar o no. 
 *               parfrm: Formulario a someter.  
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjConfirmar(pareli, parfrm) 
{
	
		// Comprobamos si hay algún check marcado
		var auxchk = false;
		var auxtip = "";
		for (var i=0; i<parfrm.elements.length; i++) 
		{
			
			var obj=parfrm.elements[i];
			
			if (obj.type=="checkbox" && obj.value!="") 
			{
				if (obj.checked==true) auxchk=true;
			}
			
		}
	
		if (auxchk==true) 
		{
			if (pareli != "")
			{
			
				if (confirm("¿Está seguro de " + pareli + " los registros seleccionados?"))
				{
					return true;
				} 
				else
				{
					return false;
				}
				
			}
			else
			{
				return true;
			}
			
		}
		else
		{
			alert('No se ha seleccionado ningún registro');
			return false;
		}

}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjAccion()
 *  Descripción: Ejecuta los procesos necesarios para redirigir una acción desde un grid de datos.
 *  Parámetros : parmod: Módulo al que dirigir. 
 *               parsec: Sección a la que dirigir.  
 *               parpro: Proceso al que dirigir.   
 *               partip: Tipo de acción. 1=Llamada directa. 2=Someter formulario. 3=Navegación por get.
 *               parfrm: Formulario con el que trabajar. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjAccion(parmod, parsec, parpro, parpar, partip, parfrm, parcfm) 
{

	if (parmod != "" && parsec != "")
	{

		switch(partip) {
		
			case 1:			// Llamada directa (Ej.: Nuevo)
	
				parfrm.mod.value = parmod; 
				parfrm.sec.value = parsec; 
				parfrm.parcla.value = parpar; 			
	
				parfrm.method = 'get'; 
				parfrm.submit();
					
				// location.search = "?mod=" + parmod + "&sec=" + parsec + "&pro=" + parpro;
				
				break;   
		
			case 2:    		// Someter formulario (Ej.:Editar)
	
				parfrm.mod.value = parmod; 
				parfrm.sec.value = parsec; 
				parfrm.parcla.value = parpar;
				
				if (parpar != "")
				{
					var arrpar = decodeURIComponent(parpar).evalJSON();
	
					if (arrpar.htm == true)
					{
						parfrm.htm.value = 0; 
					}
				}

				parfrm.method = 'get'; 			
				
				if (fjConfirmar(parcfm, parfrm))
				{
					parfrm.submit();
				}
				
				parfrm.htm.value = 1;
				
				break;   
			
			case 3:    		// Navegar por get
	
				parfrm.mod.value = parmod; 
				parfrm.sec.value = parsec; 
				parfrm.parcla.value = parpar; 			
	
				parfrm.method = 'get'; 
	
				if (fjConfirmar(parcfm, parfrm))
				{
					parfrm.submit();
				}
					
				break;   
				
			case 4:    		// Abrir vantana nueva. Imprimir.

				strenl = "index.php?sel=true&mod=" + parmod + "&sec=" + parsec + "&parcla=" + parpar;
				
				var wndSele = window.open(strenl, null, "menubar=yes,dependent=yes,resizable=yes,status=no,scrollbars=yes,width=630,height=600");

				break;   				
				
			case 5:    		// Abrir vantana nueva. Imprimir sometiendo el formulario.

				parfrm.mod.value = parmod; 
				parfrm.sec.value = parsec; 
				parfrm.sel.value = "true"; 				
				parfrm.target = parfrm.name;
				parfrm.method = 'get'; 			
				
				if (fjConfirmar(parcfm, parfrm))
				{
					
					var wndSele = window.open("", parfrm.name, "menubar=yes,dependent=yes,resizable=yes,status=no,scrollbars=yes,width=630,height=600");					
					
					parfrm.submit();
				}
				
				parfrm.sel.value = ""; 								
				parfrm.target = "_top";				
				
				break;   
			
			default:   
						
				break;   
		
		} 
		
	}

}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjAddOpcion()
 *  Descripción: Añade un valor determinado a una lista de valores (select).
 *  Parámetros : parval: Valor a añadir (objeto). 
 *               parsel: Select donde añadir el valor.
 *               parcam: Campo donde se serializa la lista 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjAddOpcion(parval, parsel, parcam)
{

	if (parval.value != "")
	{

		if (parsel.selectedIndex < 0 && parsel.length > 0)
		{
			var selind = parsel.length - 1;
		}
		else
		{
			var selind = parsel.selectedIndex;
		}
	
		// hago hueco para el elemento a añadir
		var i;
		
		var optult = new Option();
		parsel.options[parsel.length] = optult;
	
	
		if (parsel.length > 1)
		{
			for (i = parsel.length -1; i > selind; i--)
			{
				parsel.options[i].text = parsel.options[i - 1].text;
				parsel.options[i].value = parsel.options[i - 1].value;
		
			}
		}
	
		parsel.options[selind + 1].text = parval.value;
		parsel.options[selind + 1].value = parval.value;
	
	
		// Serializamos la lista
		arrcam = new Array();			
		for (i = 0; i < parsel.length; i++)
		{
			arrcam[i] = parsel.options[i].text;
		}
	
		//var php = new PHP_Serializer(true);
		//parcam.value = php.serialize(arrcam);		
		
		parcam.value = arrcam.toJSONString();				
	
		parsel.selectedIndex = -1;
		parval.value = "";
		parval.focus();
	}
	
	
}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjDelOpcion()
 *  Descripción: Elimina un valor determinado a una lista de valores (select).
 *  Parámetros : parval: Valora a añadir (objeto). 
 *               parsel: Select donde añadir el valor.
 *               parcam: Campo donde se serializa la lista 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjDelOpcion(parval, parsel, parcam)
{

	if (parsel.selectedIndex >= 0 && parsel.length > 0)
	{

		parsel.options[parsel.selectedIndex] = null;
	
		// Serializamos la lista
		arrcam = new Array();			
		for (i = 0; i < parsel.length; i++)
		{
			arrcam[i] = parsel.options[i].text
		}
	
		var php = new PHP_Serializer(true);
		parcam.value = php.serialize(arrcam);		

	}

	parsel.selectedIndex = -1;
	parval.value = "";
	parval.focus();
	
	
}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjSiEnter()
 *  Descripción: Comprueba si se ha pulsado enter en un campo.
 *  Parámetros : pareve: Evento de pulsación de tecla. 
 *  Devuelve   : True si se pulsa enter y false en caso contrario.
\*---------------------------------------------------------------------------------*/
function fjSiEnter(pareve)
{
	var iAscii;

	if (pareve.keyCode)
		iAscii = pareve.keyCode;
	else if (pareve.which)
		iAscii = pareve.which;
	else
		return false;

	if (iAscii == 13) 
	{
		return true;
	}
	
	return false;
} 


/*---------------------------------------------------------------------------------*\
 *  Función    : fjFocoPrimero()
 *  Descripción: Ajusta el foco en el primero campo de formulario de la página.
 *  Parámetros : Ninguno. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjFocoPrimero()
{

	if (document.forms.length > 0)
	{
		for (var i=0; i < document.forms[0].elements.length; i++)
		{
			var oField = document.forms[0].elements[i];
			if (oField.type != "hidden")
			{
				oField.focus();
				return;
			}
		}
	}
	
} 


/*---------------------------------------------------------------------------------*\
 *  Función    : fjValidarCampo()
 *  Descripción: Valida el campo indicado según la cadena de caracteres dada.
 *  Parámetros : parcam: Input textbox que necesita ser validado. 
 *               parchr: Caracteres que se permiten en el campo. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjValidarCampo(parcam, parexp)
{

	$(parcam).title = "";
	$(parcam).style.borderColor='';

	if (parexp)
	{

		var auxchr = $(parcam).value;
	
		if (auxchr.length > 0)
		{
	
			if(!auxchr.match(parexp))
			{

				$(parcam).title = "Se han introducido caracteres erróneos";				
				$(parcam).style.borderColor='red';
				$(parcam).focus();
				return;
			}
		}
	}
	return;
	
} 

/*---------------------------------------------------------------------------------*\
 *  Función    : fjPermitirCaracteres()
 *  Descripción: Comprueba si se ha introducido un caracter válido o no
 *  Parámetros : parcam: Input textbox que necesita ser validado. 
 *               pareve: Evento que se produce en el campo. 
 *               parexp: Expresión regular que controla los caracteres que se pueden introducir.  
 *               parpas: True si no se permite el copypaste o false en caso contrario.  
 *  Devuelve   : El caracter válido.
\*---------------------------------------------------------------------------------*/
function fjPermitirCaracteres(parcam, pareve, parexp, parpas) 
{

	if (parexp)
	{

		pareve = EventUtil.formatEvent(pareve);
	
		var auxchr = String.fromCharCode(pareve.charCode);
		
		var auxkey = pareve.keyCode;
		
		// Permitir teclas que no son de caracteres
		if ((auxkey > 0 && auxkey < 32) || (auxkey >= 33 && auxkey <= 46) || (auxkey >= 112 && auxkey <= 123))
		{
			return true;
		}	
	
		var auxval = auxchr.match(parexp);
		
		if (parpas) {
			return auxval && !(pareve.ctrlKey && auxchr == "v");
		} else {
			return auxval || pareve.ctrlKey;
		}
		
	}
	
	return true;
	
}


/*---------------------------------------------------------------------------------*\
 *  Función    : fjMostarMenu()
 *  Descripción: Muestra el submenú indicado o lo oculta si estaba visible
 *  Parámetros : parmnu: Muestra la tabla del menú indicado. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMostarMenu(parmnu)
{

	if (document.images) 
	{
		var imgnor = new Image();
		imgnor.src = "0ima/estcue03.png";
		var imgabj = new Image();
		imgabj.src = "0ima/estcue02.png";
	}

	if ($("mnuchk[" + parmnu + "]").value == "false")
	{
		
		$("mnupun[" + parmnu + "]").style.display = "";
		$("mnuchk[" + parmnu + "]").value = "true";
		if (document.images) 
		{
			document.images["mnuimg[" + parmnu + "]"].src = imgabj.src;
		}

	}
	else
	{
		
		$("mnupun[" + parmnu + "]").style.display = "none";
		$("mnuchk[" + parmnu + "]").value = "false";
		if (document.images) 
		{
			document.images["mnuimg[" + parmnu + "]"].src = imgnor.src;
		}

	}
		

}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjMostarMenuSiempre()
 *  Descripción: Muestra el submenú indicado en todos los casos
 *  Parámetros : parmnu: Muestra la tabla del menú indicado. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMostarMenuSiempre(parmnu)
{

	if (document.images) 
	{
		var imgnor = new Image();
		imgnor.src = "0ima/estcue03.png";
		var imgabj = new Image();
		imgabj.src = "0ima/estcue02.png";
	}

	$("mnupun[" + parmnu + "]").style.display = "";
	$("mnuchk[" + parmnu + "]").value = "true";
	if (document.images) 
	{
		document.images["mnuimg[" + parmnu + "]"].src = imgabj.src;
	}

}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjAbrirConsulta()
 *  Descripción: Abre la ventana de consulta para seleccionar un registro
 *  Parámetros : parmnu: Muestra la tabla del menú indicado. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjAbrirSeleccion(seleccion) 
{

	// Crear el nombre de la nueva ventana
	var auxfec = new Date();
	var auxhor = auxfec.getHours();     	// Devuelve la hora
	var auxmin = auxfec.getMinutes();    	// Devuelve los minutos
	var auxsec = auxfec.getSeconds();		// Devuelve los segundos
	var auxmil = auxfec.getMilliseconds();	// Deuelve los milisegundos
	var nueven = auxhor + auxmin + auxsec + auxmil;

	var wndSele = window.open("index.php?sel=true&" + seleccion, nueven, "dependent=yes,menubar=yes,resizable=yes,status=no,scrollbars=yes,width=630,height=600");

}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjDevolverCampoForm()
 *  Descripción: Devuelve un determinado valor a un determinado campo del formulario que lo llama
 *  Parámetros : parcam: Nombre del campo en el formulario. 
 *             : parval: Valor a colocar en el campo.  
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjDevolverCampoForm(parcam, parval)
{
	var auxtex;
	do { 
	
		auxtex = parval;
		parval = parval.replace("<br />", "\r\n");

	} while (auxtex != parval);

	window.opener.document.getElementsByName(parcam)[0].value = decodeURIComponent(parval);

	// Si el campo es un auxiliar de una lista de consulta meter el valor en el select
	if (parcam.substring(0,2) == "inp")
	{
		fjAddOpcion(window.opener.document.getElementsByName(parcam)[0], window.opener.document.getElementsByName("lst"+parcam)[0], window.opener.document.getElementsByName(parcam.substring(3))[0]);
	}
	
	//$(parcam).value = unescape(parval);

}

/*---------------------------------------------------------------------------------*\
 *  Función    : fjMontarFecha()
 *  Descripción: Monta en un campo oculto la concatenación de tres campos formando una fecha.
 *  Parámetros : parcam: Input que hay que montar. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMontarFecha(parcam)
{

	$(parcam).value = fjRellenar($(parcam + 'aaaa').value, 4) + fjRellenar($(parcam + 'mm').value, 2) + fjRellenar($(parcam + 'dd').value, 2);

} 

/*---------------------------------------------------------------------------------*\
 *  Función    : fjMontarFecha2()
 *  Descripción: Monta en un campo oculto la concatenación de tres campos formando una fecha.
 *  Parámetros : parcam: Input que hay que montar. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMontarFecha2(parcam)
{

	var auxarr = $(parcam+'f').value.split("/");

	if (typeof(auxarr[0]) == "undefined")
	{
		auxarr[0] = "00";
	}


	if (typeof(auxarr[1]) == "undefined")
	{
		auxarr[1] = "00";
	}


	if (typeof(auxarr[2]) == "undefined")
	{
		auxarr[2] = "0000";
	}

	var auxfec = auxarr[2]+auxarr[1]+auxarr[0];   

	if (auxfec == "00000000" || auxfec == "000000" || auxfec == "0000" || auxfec == "00")
	{
		$(parcam).value = "";
	}
	else
	{
		$(parcam).value = auxarr[2]+auxarr[1]+auxarr[0];   
	}

} 


/*---------------------------------------------------------------------------------*\
 *  Función    : fjRellenar()
 *  Descripción: Rellena con ceros a la izquiera teniendo como base un tamaño definido.
 *  Parámetros : parvar: valor de base. 
 *               partam: tamaño máximo del campo a rellenar.  
 *  Devuelve   : cadena rellena de ceros.
\*---------------------------------------------------------------------------------*/
function fjRellenar(parvar, partam)
{ 
	auxcad = '';
	
	for(i=0;i<(partam-parvar.length);i++)
	{
		auxcad+='0';
	}
	parvar = auxcad + parvar;
	return parvar;
} 


/*---------------------------------------------------------------------------------*\
 *  Función    : fjMostrarAyuda()
 *  Descripción: Muestra un cuadro siguiendo al cursor y mostrando un texto de ayuda.
 *  Parámetros : partxt: Texto a mostrar. 
 *               parevt: Evento del ratón en el objeto que contiene la ayuda.  
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjMostrarAyuda(partxt, parevt)
{ 

	var auxtip = $('auxtip') ;

	auxtip.innerHTML = partxt ;
	auxtip.style.top = parevt.clientY + 15 + 'px';
	auxtip.style.left = parevt.clientX + 15  + 'px';
	auxtip.style.visibility = 'visible' ;

	$('auxtip').show();

} 

/*---------------------------------------------------------------------------------*\
 *  Función    : fjOcultarAyuda()
 *  Descripción: Oculta el cuadro de ayuda previamente visualizado.
 *  Parámetros : Ninguno. 
 *  Devuelve   : Nada.
\*---------------------------------------------------------------------------------*/
function fjOcultarAyuda()
{ 

	$('auxtip').hide();

} 









