/* ***************************************** */
/* Grupo Xenon, C.A. 
/* Desarrollado por: Jonathan Jaimes
/* Fecha de Creación: 05/05/2008
/* ***************************************** */

/*************************************************************************************************** 
 *	Contenido:	Tiene un conjunto de funciones que permiten hacer valdaciones sencillas a nivel de 
 *				cliente, en  los campos que se solicitan en una página html
 ***************************************************************************************************/			  
var defaultEmptyOK = false;
var whitespace = " \t\n\r";
var decimalPointDelimiter = ",";
var decimalNumbers = 2;

/*************************************************************************************************** 
 * Función:		abrir_ventana()
 * Objetivo:	Permite abrir una ventana no modal especificando el url y el nombre de la ventana
 * Parámetros:	- url : Dirección URl donde se encuentra la página que será cargada en la ventana.
 *           	- nombre : Nombre lógico de la ventana (no aparece en la barra de título)
 * Uso:			[javascript:] onClick="abrir_ventana('index.html','VentanaPrincipal');"
 ***************************************************************************************************/
function abrir_ventana(url, nombre) {
	window.open(url, nombre, "width=800, height=600, top=0, left=0, location=no, menubar=no, resizable=no, scrollbars=yes, status=no, titlebar=no, toolbar=no");
}

/*************************************************************************************************** 
 * Función:		abrir_ventana()
 * Objetivo:	Permite abrir una ventana no modal especificando el url y el nombre de la ventana
 * Parámetros:	- url : Dirección URl donde se encuentra la página que será cargada en la ventana.
 *           	- nombre : Nombre lógico de la ventana (no aparece en la barra de título)
 *				- ancho : Ancho en píxeles de la ventana
 * 				- alto : Alto en píxeles de la ventana
 *				- tope1 : Separación en píxeles del tope superior
 *				- tope2 : Separación en píxeles del tope izquierdo
 * Uso:			[javascript:] onClick="abrir_ventana('index.html','VentanaPrincipal',800,600,100,100);"
 ***************************************************************************************************/
function abrir_ventana(url, nombre, ancho, alto, tope1, tope2) {
	window.open(url, nombre, "width=" + ancho + ", height=" + alto + ", top=" + tope1 + ", left=" + tope2 + ", location=no, menubar=no, resizable=no, scrollbars=yes, status=no, titlebar=no, toolbar=no");
}

/*************************************************************************************************** 
 * Función:		salir_sistema()
 * Objetivo:	Permite cerrar la ventana actual del explorador.
 * Parámetros:	Entrada: No tiene
 *           	Salida: No tiene
 * Uso:			[javascript:] onClick="salir_sistema();"
 ***************************************************************************************************/
function salir_sistema() {
	if (confirm("¿Está seguro que desea salir de la aplicación?")) {
		parent.close();
	}
}

/*************************************************************************************************** 
 * Función:		validarNumero()
 * Objetivo:	Valida que los caracteres introducidos sean solo numéricos
 * Parámetros:	Entrada: No tiene
 *           	Salida: No tiene
 * Uso:			[javascript:] onKeyPress="validarNumero()"
 ***************************************************************************************************/
function validarNumero() {
	if ((event.keyCode < 48 || event.keyCode > 57) && event.keyCode != 44)
		event.returnValue = false;
}

/*************************************************************************************************** 
 * Función:		esVacio()
 * Objetivo:	Verifica si una variable no tiene ningún valor
 * Parámetros:	Entrada: campo, variable que se desea validar
 *           	Salida: True, si la variable está vacía. False en caso contrario 
 * Uso:			[javascript:] esVacio(Nombre del campo de la página.value);
 ***************************************************************************************************/
function esVacio(valor) {
	return ((valor == null) || (valor.length == 0))
}

/*************************************************************************************************** 
 * Función:		esEspacioBlanco()
 * Objetivo:	Verifica si todo el contenido de una variable es espacios en blanco
 * Parámetros:	Entrada: valor, variable que se desea validar
 *           	Salida: True, si la variable son puros espacios en blanco o esta vacía. False en caso contrario 
 * Uso:			[javascript:] esEspacioBlanco(Nombre del campo de la página.value);
 ***************************************************************************************************/
function esEspacioBlanco(valor) {   
	var i;

	if (esVacio(valor)) 
		return true;

	for (i = 0; i < valor.length; i++) {   
		var c = valor.charAt(i);
		
		if (whitespace.indexOf(c) == -1) 
			return false;
	}
	
	return true;
}

/*************************************************************************************************** 
 * Función:		esCorreo()
 * Objetivo:	Verifica si un campo de la página cumple con el formato de una dirección de correo electrónico
 * Parámetros:	Entrada: theElement, variable que se desea validar
 *           	Salida: True, si la variable cumple con el formato. False en caso contrario 
 * Uso:			[javascript:] esCorreo(Nombre del campo de la página.value);
 ***************************************************************************************************/
function esCorreo(email) {
	var filter=/^[A-Za-z][A-Za-z0-9_.-]*@[A-Za-z0-9_-]+\.[A-Za-z0-9_.-]+[A-za-z]$/;

	if (email.length == 0 ) 
		return false;
		
	if (filter.test(email)) 
		return true;
	else  
		return false;
}   

/*************************************************************************************************** 
 * Función:		esDigito()
 * Objetivo:	Verifica si un caracter es numérico
 * Parámetros:	Entrada: c, caracter a validar
 *           	Salida: True, si es un número. False en caso contrario 
 * Uso:			Uso interno
 ***************************************************************************************************/
function esDigito(c) {   
	return ((c >= "0") && (c <= "9"))
}

/*************************************************************************************************** 
 * Función:		esEntero ()
 * Objetivo:	Verifica si el contenido de un campo es un número entero
 * Parámetros:	Entrada: valor, variable que se desea validar
 *           	Salida: True, si es un número entero. False en caso contrario 
 * Uso:			[javascript:] esEntero (Nombre del campo de la página.value);
 ***************************************************************************************************/
function esEntero(valor) {   
	var i;

    if (esVacio(valor)) {
		if (esEntero.arguments.length == 1) {
			return defaultEmptyOK;
		} else {
			return (esEntero.arguments[1] == true);
		}
	}
	
    for (i = 0; i < valor.length; i++) {   
        var c = valor.charAt(i);
		
        if (!esDigito(c)) {
			return false;
		}
    }
	
    return true;
}

/****************************************************************************************************************
 * Función:		esDecimal()
 * Objetivo:	Verifica si el contenido de un campo es un número decimal.  
 *              El elemento que separa la parte entera de la decimal es la coma (",") si se desea cambiar este,
 *				se cambia la variable decimalPointDelimiter que está definida al principio del JavaScript.
 *              La función devuelve el número con tantos decimales como indique la variable decimalNumbers, 
 * 				que está definida al principio del JavaScript.
 * Parámetros:	Entrada: theElement, nombre del campo que contiene el valor que se desea validar.
 *           	Salida: True, si la variable es un número decimal. False en caso contrario.
 * Uso:			[javascript:] esDecimal(valor);
 *****************************************************************************************************************/
function esDecimal(theElement) {
	var i;
	var s = document.getElementById(theElement).value;
	var pos;
	var decimal;
	var entera;
	var seenDecimalPoint = false;

    if (esVacio(s)) {
		
       if (esDecimal.arguments.length == 1) {
	   		return defaultEmptyOK;
	   } else {
	   		return (esDecimal.arguments[1] == true);
	   }

	}
	
    if (s == decimalPointDelimiter) {
		return false;
	}

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
		
        if ((c == decimalPointDelimiter) && !seenDecimalPoint) {
			seenDecimalPoint = true;
			pos = i;
		} else {
			
			if (!esDigito(c)) {
				return false;
			}
		}
    }
	
	if (!seenDecimalPoint)	{
		entera = s;
		decimal = "";
	} else {
		entera = s.substring(0, pos);
		decimal = s.substr(pos + 1, s.length);
		
		if (decimal.length > decimalNumbers) {
			decimal = decimal.substr(0, decimalNumbers);
		}
	}
	
	for (i = decimal.length; i < decimalNumbers; i++) {
		decimal = decimal + "0";
	}
		
 	document.getElementById(theElement).value = entera + decimalPointDelimiter + decimal;	
	
    return true;
}

/*************************************************************************************************************************
 * Función:		esDecimal()
 * Objetivo:	Verifica si el contenido de un campo es un número decimal. 
 *              El elemento que separa la parte entera de la decimal es pasado como parámetros.
 *              La función devuelve el número con tantos decimales como indique la variable decimalNumbers, 
 *				que está definida al principio del JavaScript.
 * Parámetros:	Entrada: theElement, nombre del campo que contiene el valor que se desea validar.
 *			        	 SeparadorDec, caracter de separación decimal.
 *           	Salida: True, si la variable es un número decimal. False en caso contrario.
 * Uso:			[javascript:] esDecimal(Nombre del campo, Separador de Decimales);
 *************************************************************************************************************************/
function esDecimal(theElement, SeparadorDec) {
	var i;
	var s = document.getElementById(theElement).value;
	var pos;
	var decimal;
	var entera;
	var seenDecimalPoint = false;

	if (esVacio(s)) {

		if (esDecimal.arguments.length == 1) {
			return defaultEmptyOK;
		} else {
			return (esDecimal.arguments[1] == true);
		}
	}
	
	if (s == SeparadorDec) {
		return false;
	}

	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		
		if ((c == SeparadorDec) && !seenDecimalPoint) {
			seenDecimalPoint = true;
			pos = i;
		} else {
			
			if (!esDigito(c)) {
				return false;
			}
		}
	}
	
	if (!seenDecimalPoint) {
		entera = s;
		decimal = "";
	} else {
		entera = s.substring(0, pos);
		decimal = s.substr(pos + 1, s.length);
		
		if (decimal.length > decimalNumbers) {
			decimal = decimal.substr(0, decimalNumbers);
		}

	}
	
	for (i = decimal.length; i < decimalNumbers; i++) {
		decimal = decimal + "0";
	}
		
 	document.getElementById(theElement).value = entera + SeparadorDec + decimal;	
	
    return true;
}

/**********************************************************************************************************************************
 * Función:		esDecimal()
 * Objetivo:	Verifica si el contenido de un campo es un número decimal. 
 *              El elemento que separa la parte entera de la decimal es el indicado por el parámetro SeparadorDec.
 *              La función devuelve el número con tantos decimales como indique la variable NumeroDecimales pasada como parámetro.
 * Parámetros:	Entrada: theElement, nombre del campo que contiene el valor que se desea validar.
 *			             SeparadorDec, caracter de separación decimal.
 *                       NumeroDecimales, número de decimales.
 *           	Salida: True, si la variable es un número real. False en caso contrario 
 * Uso:			[javascript:] esDecimal(Nombre del campo, Separador de Decimales, Número de Decimales);
 ***************************************************************************************************/
function esDecimal(theElement, SeparadorDec, NumeroDecimales) {
	var i;
	var s = document.getElementById(theElement).value
	var pos;
	var decimal;
	var entera;
	var seenDecimalPoint = false;

	if (esVacio(s)) {
		
		if (esDecimal.arguments.length == 1) {
			return defaultEmptyOK;
		} else {
			return (esDecimal.arguments[1] == true);
		}
	}

	if (s == SeparadorDec) {
		return false;
	}

    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
		
        if ((c == SeparadorDec) && !seenDecimalPoint) {
			seenDecimalPoint = true;
			pos = i;
		} else {
			
			if (!esDigito(c)) {
				return false;
			}
		}
    }
	
	if (!seenDecimalPoint) {
		entera = s;
		decimal = "";
	
		for (i = decimal.length; i < 2; i++) {
			decimal = decimal + "0";
		}
		
	} else {
		entera = s.substring(0, pos);
		decimal = s.substr(pos + 1, s.length);
		
		if (decimal.length > NumeroDecimales) {
			decimal = decimal.substr(0, NumeroDecimales);
		}
	}
	
 	document.getElementById(theElement).value = entera + SeparadorDec + decimal;	
	
    return true;
}

/************************************************************************************************************************************ 
 * Función:		redondear_decimales
 * Objetivo:	Permite redondear las cifras a cuatro decimales.
 * Parámetros:  Valor a formatear
 ************************************************************************************************************************************/
function redondear_decimales(valor) {
	valor = Math.round(valor * 10000);
	valor = valor / 10000;
	return valor;
}

/************************************************************************************************************************************ 
 * Función:		formatear_numero
 * Objetivo:	Permite aplicar formato de moneda de acuerdo a la configuración local.
 * Parámetros:  numero a formatear
 ************************************************************************************************************************************/
function formatear_numero(numero) {
	numero = numero.toString().replace(/\ |\,/g,'');
	
	if (isNaN(numero)) {
		numero = "0";
	}
		
	centimos = Math.floor((numero * 100 + 0.5) % 100);
	numero 	 = Math.floor((numero * 100 + 0.5) / 100).toString();
	
	if (centimos < 10) {
		centimos = "0" + centimos;
	}
		
	for (var i = 0; i < Math.floor((numero.length - (1 + i)) / 3); i++) {
		numero = numero.substring(0, numero.length - (4 * i + 3)) + '.' + numero.substring(numero.length - (4 * i + 3));
	}
		
	return (' ' + numero + ',' + centimos);
}

/************************************************************************************************************************************ 
 * Función:		contador_texto
 * Objetivo:	Permite contar los caracteres introducidos en un campo de texto y limitar su tamaño.
 * Parámetros:  nombre del campo, nombre del contador y limite de caracteres permitido.
 ************************************************************************************************************************************/
function contador_texto(nombre_campo, nombre_contador, limite_caracteres) {
	
	if (document.getElementById(nombre_campo).value.length > limite_caracteres) {
		document.getElementById(nombre_campo).value = document.getElementById(nombre_campo).value.substring(0, limite_caracteres);
	} else {
		document.getElementById(nombre_contador).innerHTML = "Quedan " + (limite_caracteres - document.getElementById(nombre_campo).value.length) + " caracteres.";
	}
	
}

/************************************************************************************************************************************ 
 * Función:		compararFechas
 * Objetivo:	Permite comparar dos fechas dadas como parametros.
 * Parámetros:  fecha inicial y fecha final
 ************************************************************************************************************************************/
function compararFechas (fecha1, fecha2) {
	var segundos1 = fecha1.getTime();
	var segundos2 = fecha2.getTime();
	
	var diferencia = segundos1 - segundos2;
	diferencia /= 86400000;
	
	return diferencia;
}
