/* ***************************************** */
/* Grupo Xenon, C.A. 
/* Desarrollado por: Jonathan Jaimes
/* Fecha de Creación: 05/05/2008
/* ***************************************** */

/*************************************************************************************************** 
 *	Contenido:	Conjunto de funciones que permiten hacer validaciones sencillas a nivel de cliente
 *				en los campos que se solicitan a través de un formulario de datos
 ***************************************************************************************************/			  
var defaultEmptyOK = false;
var whitespace = " \t\n\r";
var decimalPointDelimiter = ",";
var decimalNumbers = 2;

/*************************************************************************************************** 
 * Función:		abrirVentana()
 * 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="abrirVentana('index.html','VentanaPrincipal');"
 ***************************************************************************************************/
function abrirVentana(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:		abrirVentana()
 * 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="abrirVentana('index.html','VentanaPrincipal',800,600,100,100);"
 ***************************************************************************************************/
function abrirVentana(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:		salirSistema()
 * Objetivo:	Permite cerrar la ventana actual del explorador.
 * Parámetros:	Entrada: No tiene
 *           	Salida: No tiene
 * Uso:			[javascript:] onClick="salirSistema();"
 ***************************************************************************************************/
function salirSistema() {
	if (confirm("¿Está seguro que desea salir de la aplicación?")) {
		parent.close();
	}
}

/*************************************************************************************************** 
 * Función:		validarNumero(evento)
 * Objetivo:	Valida que los caracteres introducidos sean solo numéricos
 * Parámetros:	Entrada: No tiene
 *           	Salida: No tiene
 * Uso:			[javascript:] onKeyPress="return validarNumero(event)"
 ***************************************************************************************************/
function validarNumero(evento) {
	if (navigator.appName == "Microsoft Internet Explorer") {
		tecla = evento.keyCode;
	} else {
		tecla = evento.which;
	}

	if ((tecla < 48 || tecla > 57) && tecla != 44 && tecla != 0 && tecla != 8) {
		return false;
	} else {
		return true;
	}
}

/*************************************************************************************************** 
 * Función:		esVacio()
 * Objetivo:	Verifica si una variable no tiene ningún valor
 * Parámetros:	Entrada: variable que se desea validar
 *           	Salida: True, si la variable está vacía. False en caso contrario 
 * Uso:			[javascript:] esVacio(campo.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(campo.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: variable que se desea validar
 *           	Salida: True, si la variable cumple con el formato. False en caso contrario 
 * Uso:			[javascript:] esCorreo(campo.value);
 ***************************************************************************************************/
function esCorreo(direccionCorreo) {
	var filtro = /^[A-Za-z][A-Za-z0-9_.-]*@[A-Za-z0-9_-]+\.[A-Za-z0-9_.-]+[A-za-z]$/;

	if (direccionCorreo.length == 0 ) {
		return false;
	}
		
	if (filtro.test(direccionCorreo)) {
		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 (campo.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: campo, 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(campo) {
	var i;
	var valor = document.getElementById(campo).value;
	var pos;
	var decimal;
	var entera;
	var seenDecimalPoint = false;

    if (esVacio(valor)) {
       if (esDecimal.arguments.length == 1) {
			return defaultEmptyOK;
	   } else {
			return (esDecimal.arguments[1] == true);
	   }
	}
	
    if (valor == decimalPointDelimiter) {
		return false;
	}

    for (i = 0; i < valor.length; i++) {
        var c = valor.charAt(i);
		
        if ((c == decimalPointDelimiter) && !seenDecimalPoint) {
			seenDecimalPoint = true;
			pos = i;
		} else {
			if (!esDigito(c)) {
				return false;
			}
		}
    }
	
	if (!seenDecimalPoint)	{
		entera = valor;
		decimal = "";
	} else {
		entera = valor.substring(0, pos);
		decimal = valor.substr(pos + 1, valor.length);
		
		if (decimal.length > decimalNumbers) {
			decimal = decimal.substr(0, decimalNumbers);
		}
	}
	
	for (i = decimal.length; i < decimalNumbers; i++) {
		decimal = decimal + "0";
	}
		
 	document.getElementById(campo).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ámetro.
 *              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: campo, 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(campo, SeparadorDec) {
	var i;
	var valor = document.getElementById(campo).value;
	var pos;
	var decimal;
	var entera;
	var seenDecimalPoint = false;

	if (esVacio(valor)) {
		if (esDecimal.arguments.length == 1) {
			return defaultEmptyOK;
		} else {
			return (esDecimal.arguments[1] == true);
		}
	}
	
	if (valor == SeparadorDec) {
		return false;
	}

	for (i = 0; i < valor.length; i++) {   
		var c = valor.charAt(i);
		
		if ((c == SeparadorDec) && !seenDecimalPoint) {
			seenDecimalPoint = true;
			pos = i;
		} else {
			
			if (!esDigito(c)) {
				return false;
			}
		}
	}
	
	if (!seenDecimalPoint) {
		entera = valor;
		decimal = "";
	} else {
		entera = valor.substring(0, pos);
		decimal = valor.substr(pos + 1, valor.length);
		
		if (decimal.length > decimalNumbers) {
			decimal = decimal.substr(0, decimalNumbers);
		}
	}
	
	for (i = decimal.length; i < decimalNumbers; i++) {
		decimal = decimal + "0";
	}
		
 	document.getElementById(campo).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(campo, SeparadorDec, NumeroDecimales) {
	var i;
	var valor = document.getElementById(campo).value
	var pos;
	var decimal;
	var entera;
	var seenDecimalPoint = false;

	if (esVacio(valor)) {
		if (esDecimal.arguments.length == 1) {
			return defaultEmptyOK;
		} else {
			return (esDecimal.arguments[1] == true);
		}
	}

	if (valor == SeparadorDec) {
		return false;
	}

    for (i = 0; i < valor.length; i++) {   
        var c = valor.charAt(i);
		
        if ((c == SeparadorDec) && !seenDecimalPoint) {
			seenDecimalPoint = true;
			pos = i;
		} else {
			
			if (!esDigito(c)) {
				return false;
			}
		}
    }
	
	if (!seenDecimalPoint) {
		entera = valor;
		decimal = "";
	
		for (i = decimal.length; i < 2; i++) {
			decimal = decimal + "0";
		}
		
	} else {
		entera = valor.substring(0, pos);
		decimal = valor.substr(pos + 1, valor.length);
		
		if (decimal.length > NumeroDecimales) {
			decimal = decimal.substr(0, NumeroDecimales);
		}
	}
	
 	document.getElementById(campo).value = entera + SeparadorDec + decimal;	
	
    return true;
}

/************************************************************************************************************************************ 
 * Función:		redondearDecimales
 * Objetivo:	Permite redondear las cifras a cuatro decimales.
 * Parámetros:  Valor a formatear
 ************************************************************************************************************************************/
function redondearDecimales(valor) {
	valor = Math.round(valor * 10000);
	valor = valor / 10000;
	return valor;
}

/************************************************************************************************************************************ 
 * Función:		formatearNumero
 * Objetivo:	Permite aplicar formato de moneda de acuerdo a la configuración local.
 * Parámetros:  Número a formatear
 ************************************************************************************************************************************/
function formatearNumero(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 ("Bs. " + numero + "," + centimos);
}

/************************************************************************************************************************************ 
 * Función:		contadorTexto
 * 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 contadorTexto(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;
}
