// 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, F -> Fechas, 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 "F":	// Si el valor no es una fecha valida

						if (!EsFecha(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 una fecha es correcta, maneja años bisiestos

// Entrada: Cadena a validar.

// Salida : Verdadero si la fecha es correcto. De otra manera falso. 

function EsFecha(Cadena){

	var Fecha= new String(Cadena)	// Crea un string

	var RealFecha= new Date()	// Para sacar la fecha de hoy

	// Cadena Año

	var Ano= new String(Fecha.substring(Fecha.lastIndexOf("/")+1,Fecha.length))

	// Cadena Mes

	var Mes= new String(Fecha.substring(Fecha.indexOf("/")+1,Fecha.lastIndexOf("/")))

	// Cadena Día

	var Dia= new String(Fecha.substring(0,Fecha.indexOf("/")))



	// Valido el año

	if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<1900){        	

		return false;

	}

	// Valido el Mes

	if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12){

		return false;

	}

	// Valido el Dia

	if (isNaN(Dia) || parseInt(Dia)<1 || parseInt(Dia)>31){

		return false;

	}

	if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {

		if (Dia>30) {			

			return false;

		}

		else {

			if (Mes==2 && Ano%4!=0 && Dia>28) {

				return false;

			}		

		}

	}



  	return true;

}







// 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=yes, resizable=no, width=640,height=600"

var Titulo="Titulo"

window.open(Url,Titulo,Propiedades);

}



function VentanaNoticia(Url)

{

window.open(Url,'Portal Municipal','width=700,height=600,menubar=no,scrollbars=no,toolbar=no,location=no,directories=no,resizable=no,top=0,left=0');

}



function VentanaChat(Url)

{

window.open(Url,'Chat de consulta - Municipalidad Distrital de Jose Leonardo Ortiz','width=700,height=600,menubar=no,scrollbars=no,toolbar=no,location=no,directories=no,resizable=no,top=0,left=0');

}

