// Valida todos los campos de un formulario.
// Entrada: Implicito. Id del campo que contiene el dato, Descripcion del Campo, Tipo de campo.
// Tipos: T -> Texto, N -> Numero, C -> Combo, E -> Email, P -> Password, A -> Archivo.
// Salida : Verdadero si la validacion es correcta. De otra manera falso. 
//
function ValidarForm() {	
	
	args = ValidarForm.arguments;
	Pass1 = null,Pass2 = null;  
	
	for (i = 0; i < args.length; i += 3) {		
		
		Campo = document.getElementById(args[i]);	// Campo que contiene el dato.
		Descripcion = args[i+1];	// Descripcion del campo.
		Tipo = args[i+2];	// Tipo de campo.					

		// Se Elimina espacios en blanco a los costados.
        // Siempre y cuando no sea un tipo file,
        // ya que este solo admite lectura
		if (Tipo != "A")
 			Campo.value = Trim(Campo.value); 


		// Segun sea el tipo a validar		
		switch (Tipo) {
			case "T": 	// Si el valor del campo esta vacio.
						if (Campo.value == "") {
							alert("Por favor, ingrese correctamente: " + Descripcion);
						   	Campo.focus();
							return false;
						}
						break;
			case "N":	// Si el valor no es un numero
						if (!EsNumero(Campo.value)) {
							alert("Por favor, ingrese correctamente: " + Descripcion);
							Campo.focus();
							return false;
						}
						break;
			case "E":	// Si el valor no es un email valido
						if (!EsEmail(Campo.value)) {
							alert("Por favor, ingrese correctamente: " + Descripcion);
							Campo.focus();
							return false;
						}
						break;
			case "C":	// Si el no ha escogido una opcion ("-1");
						if (Campo.value == "-1") {
							alert("Por favor, escoga correctamente: " + Descripcion);
							Campo.focus();
							return false;
						}
						break;
			case "P": // Si el password es vacio
						if (Campo.value == "") {
							alert("Por favor, ingrese correctamente: " + Descripcion);
							Campo.focus();
							return false;
						}
						if (Pass1 == null) { // Si es el primer password 
							Pass1 = Campo;							
						}
						else { // Sino es el segundo 
							Pass2 = Campo; 
							if (Pass1.value != Pass2.value) { // Si los passwords son diferentes 
								alert("Los passwords no coinciden");
								Pass1.value = "";
								Pass2.value = "";
								return false; 
							}
						}
						break; 
			case "A": 	// Si el valor del campo archivo esta vacio.
						if (Campo.value == "") {
							alert("Por favor, ingrese correctamente: " + Descripcion);
							Campo.focus();
							return false;
						}
						break;
			}	
	}
	
}


// Verifica si un email es correcto.
// Entrada: Email a validar.
// Salida : Verdadero si el email es correcto. De otra manera falso. 
function EsEmail(Email) {
	EmailReg = /^[a-z][a-z-_0-9\.]+@[a-z-_=>0-9\.]+\.[a-z]{2,3}$/i // Expresion regular para validar emails.
	return EmailReg.test(Email); // retorna verdadero si es valida.
}

// Verifica si un numero es correcto.
// Entrada: Numero a validar.
// Salida : Verdadero si el numero es correcto. De otra manera falso. 
function EsNumero(Numero) {

	// Retorna inmediatamente si un valor in correcto fue pasado como argumento.
	if (Numero+"" == "undefined" || Numero+"" == "null" || Numero+"" == "")
		return false;

	Valido = true;
	NpDec = 0; // Numero de puntos decimales
	
	// Convierte a cadena para una mejor verificacion.
	Numero += "";
	
	// Recorre la cadena y verifica cada caracter. Si un caracter
	// no es un numero. retorna falso.
	// Inlcluye los casos especiales para numeros negativos (primer caracter == '-')
	// y un punto decimal (uno de los caracteres  == '.').
	
	for (pos = 0; pos < Numero.length; pos++) {
	
		// Cuenta los puntos decimales
		if (Numero.charAt(pos) == ".")
			NpDec++;
	
		if (!((Numero.charAt(pos) >= "0") && (Numero.charAt(pos) <= "9") ||	
			(Numero.charAt(pos) == "-") || (Numero.charAt(pos) == "."))) {
				Valido = false;
				break;		
		} 
		else if ((Numero.charAt(pos) == "-" && pos != 0) ||
					(Numero.charAt(pos) == "." && Numero.length == 1) ||
					(Numero.charAt(pos) == "." && NpDec > 1) ||
					(Numero.charAt(pos) == "." && (pos == 0 || pos == Numero.length-1))) {
						Valido = false;
						break;
		}
	} 

	return Valido;
} 


// Elimina espacios en blanco en ambos lados de una cadena.
// Entrada: Cadena a eliminar espacios.
// Salida : Cadena sin espacios. 
function Trim(Cadena) {

	Resultado = "";
	Resultado = TrimLeft(Cadena);
	Resultado = TrimRight(Resultado);

	return Resultado;
}



// Elimina espacios en blanco en el lado izquierdo de una cadena.
// Entrada: Cadena a eliminar espacios.
// Salida : Cadena sin espacios a la izquierda. 
function TrimLeft(Cadena) {

	Resultado = "";
	pos = tam = 0;
	
	// Retorna inmediatamente si un valor in correcto fue pasado como argumento
	if (Cadena+"" == "undefined" || Cadena == null)
		return null;

	// Se asegura que el argumento es una cadena.
	Cadena += "";
	
	if (Cadena.length == 0)
		Resultado = "";
	else {
		tam = Cadena.length;
		
		// Recorre la cadena desde el inicio mientras no llegue al final y 
		// los caracteres sean espacios en blanco
		while ((pos <= tam) && (Cadena.charAt(pos) == " "))
			pos++;
			
		// Cuando el bucle haya terminado i sera la posicion en que no se encontro 
		//espacio en blanco y se captura una subcadena desde pos hasta tam.
		Resultado = Cadena.substring(pos, tam);
	}

	return Resultado;
}


// Elimina espacios en blanco en el lado derecho de una cadena.
// Entrada: Cadena a eliminar espacios.
// Salida : Cadena sin espacios a la derecha. 
function TrimRight(Cadena) {

	Resultado = "";
	pos = 0;
	
	// Retorna inmediatamente si un valor in correcto fue pasado como argumento.
	if (Cadena+"" == "undefined" || Cadena == null)
		return null;
	
	// Se asegura que el argumento es una cadena.
	Cadena += "";	
	
	if (Cadena.length == 0)
		Resultado = "";
	else {
		// Recorre la cadena desde el final mientras no llegue al inicio y 
		// los caracteres sean espacios en blanco
		pos = Cadena.length - 1;
		while ((pos >= 0) && (Cadena.charAt(pos) == " "))
			pos--;
		
		// Cuando el bucle haya terminado i sera la posicion en que no se encontro 
		//espacio en blanco y se captura una subcadena desde 0 hasta pos+1.
		Resultado = Cadena.substring(0, pos + 1);
	}
	
	return Resultado;
}

function SeleccionarFila(Color, CheckFila, IdForm, IdCheckTodos)
{
	IdFila = CheckFila.value;
	Fila = document.getElementById(IdFila);
	
	if (CheckFila.checked) 
		Fila.style.backgroundColor = Color;
	else
		Fila.style.backgroundColor = '';
		
	CheckTodos = document.getElementById(IdCheckTodos);		
	Form = document.getElementById(IdForm);
		
	NCheckFila = 0;
	NCheckSel = 0;
		
	for (i = 0; i < Form.length; i++)
	{	
		if (Form.elements[i].type == "checkbox" && Form.elements[i] != CheckTodos)
		{
			NCheckFila ++; 
			
			if (Form.elements[i].checked)
				NCheckSel ++; 
		}
	}
		
	if (NCheckFila == NCheckSel) 
		CheckTodos.checked = true; 
			
	if (NCheckSel < NCheckFila) 
		CheckTodos.checked = false; 
}

function SeleccionarTodos(Color, IdForm, CheckTodos, IdTabla)
{
		Form = document.getElementById(IdForm);
		
		for (i = 0; i < Form.length; i++)
		{	
			if (Form.elements[i].type == "checkbox")
			{
				IdFila = Form.elements[i].value;

				if (CheckTodos.checked)
					Form.elements[i].checked = true;
				else
					Form.elements[i].checked = false;
			}
		}
		
		Tabla = document.getElementById(IdTabla);

		for (i=0; i < Tabla.rows.length; i++)
		{		
			if (Tabla.rows[i].id != "Cabecera")
			{	 
				if(CheckTodos.checked)
					Tabla.rows[i].style.backgroundColor = Color;
				else
					Tabla.rows[i].style.backgroundColor = '';				
			}
		}
		
}

function ComprobarSeleccion(IdForm)
{
	Form = document.getElementById(IdForm);
	NCheckSel = 0;
		
	for (i = 0; i < Form.length; i++)
	{	
			if (Form.elements[i].checked)
				NCheckSel ++; 		
	}
	
	if (NCheckSel == 0)
	{	
		alert ("Debe seleccionar un item al menos!");
		return false;
	}
	else
	{
		Rpta =  confirm("¿Esta seguro de que desea eliminar estos items?");
		return Rpta; 
	}
}

function Visibilidad(IdCampo, Estado)
{
	Campo = document.getElementById(IdCampo);	
	Campo.style.visibility = Estado;
}
 
function VistaPrevia(IdForm, IdOption, IdFile) 
{
	Form = document.getElementById(IdForm);
	File = document.getElementById(IdFile);
	//alert (Form.elements[IdOption].length);
	for (i=0; i< Form.elements[IdOption].length; i++)
	{
		if (Form.elements[IdOption][i].checked)
		{
			if (Form.elements[IdOption][i].value == IdFile)
				AbrirVentana(File.value);  
			else			
				AbrirVentana(Form.elements[IdOption][i].value);
		}
	}
}

function AsignaValor(IdCampo, Valor)
{
	Campo = document.getElementById(IdCampo);	
	Campo.value = Valor;
}

function AbrirVentana(Url) { 
var Propiedades="top=0, left=0, toolbar=no,location=no, status=no,menubar=no,scrollbars=no, resizable=no, width=400,height=400"
var Titulo="Titulo"
window.open(Url,Titulo,Propiedades);
}