/*=================================================================================*\
 *  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.pro.value = parpro; 
				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.pro.value = parpro; 
				//parfrm.parcla.value = parpar; 			
				
				parfrm.method = 'get'; 			
				
				if (fjConfirmar(parcfm, parfrm))
				{
					parfrm.submit();
				}
				
				break;   
			
			case 3:    		// Navegar por get
	
				parfrm.mod.value = parmod; 
				parfrm.sec.value = parsec; 
				parfrm.pro.value = parpro; 
				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.pro.value = parpro; 
				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;
			}
		}
	}
	
} 

/*---------------------------------------------------------------------------------*\
 *  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();     	// Returns hours
	var auxmin = auxfec.getMinutes();    	// Returns minutes
	var auxsec = auxfec.getSeconds();		// Returns seocnds
	var auxmil = auxfec.getMilliseconds;	// Returns Milliseconds 
	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 = unescape(parval);
	
	//$(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";
	}


	$(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();

} 


/*---------------------------------------------------------------------------------*\
 *  Funci�n    : fjPrecargarImagen()
 *  Descripci�n: Carga una imagen antes de que se visualice la página.
 *  Par�metros : URL de la imagen a cargar. 
 *  Devuelve   : objeto imágen.
\*---------------------------------------------------------------------------------*/
function fjPrecargarImagen(parurl)
{ 
	auxima = new Image();
	auxima.src = parurl;
	return auxima;
} 







