/*=================================================================================*\
 *  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 = 'post'; 			
				
				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;   
			
			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;
	
}























