/***************************************************************
	Funciones Publicas de la libreria.
*****************************************************************/

	/*
		Definicion:
			Función que contiene la logica en el cual segun el tipo de campo
			es el tipo de validación que se hace
		Parametros:
			nombre
	*/
	function validar_campos(nombres,etiquetas,tipos)
	{
		var campo;
		var result = true;
		for (x=0;x<nombres.length && result ;x++)
		{
			campo = document.getElementById(nombres[x]);
			if (campo)
			{
				switch (tipos[x])
				{
					case 'texto':
						result = !es_campo_vacio(nombres[x],etiquetas[x]);
						break
					case 'mail':
						if (result = !es_campo_vacio(nombres[x],etiquetas[x]))
							result = esMail(nombres[x],etiquetas[x]);
						break;
					case 'numero':
						if(result = !es_campo_vacio(nombres[x],etiquetas[x]))
							result = esNumero(nombres[x],etiquetas[x]);
						break;
					case 'select':
						result = esta_select(nombres[x],etiquetas[x]);
						break;
					default : alert('Error: Hay un tipo de dato incorrecto');
						break;
				}
			}
		}
		return result;
	}


/***************************************************************
	Funciones Privadas de la libreria.
*****************************************************************/

/*
	Definicion:
		Funcion que sirve para ver si un mail esta bien puesto
	Retorno:
		TRUE: El mail es valido
		FALSE: El mail es invalido
	Comentario:
		Funcion extraida de internet
*/
function checkEmail(emailStr) {
	var filtro=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	return filtro.test(emailStr);
}

/*
	Definicion:
		Funcion que determina si el paramtro pasado es numero o no
	Retorno:
		TRUE: El paramtro es un numero
		FALSE: El parametro no es un nuemero
	Comentario:
		Funcion extraida de internet
*/
function isNum( numstr ) {

	if (numstr+"" == "undefined" || numstr+"" == "null" || numstr+"" == "")
		return false;

	var isValid = true;
	var decCount = 0; // number of decimal points in the string

	// convert to a string for performing string comparisons.
	numstr += "";

	// Loop through string and test each character. If any
	// character is not a number, return a false result.
	// Include special cases for negative numbers (first char == '-')
	// and a single decimal point (any one char in string == '.').
	for (i = 0; i < numstr.length; i++) {
		// track number of decimal points
		if (numstr.charAt(i) == ".")
			decCount++;

		if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9") ||
			(numstr.charAt(i) == "-") || (numstr.charAt(i) == ".")))
		{
			isValid = false;
			break;
		}
		else if ((numstr.charAt(i) == "-" && i != 0) ||
		(numstr.charAt(i) == "." && numstr.length == 1) ||
		(numstr.charAt(i) == "." && decCount > 1))
		{
			isValid = false;
			break;
		}
		//if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9")) ||
	} // END for

	return isValid;
	} // end IsNum

	// Validacion si un campo esta vacio
	function es_campo_vacio(nombre,etiqueta)
	{
		var campo;
		var result = false;
		campo = document.getElementById(nombre);
		if (campo)
		{
			if (campo.value == '')
			{
				alert("El campo \""+ etiqueta + "\" no puede estar vacío");
				campo.focus();
				result = true;
			}
		}
		else
		{
			result = true;
			alert('Error: Campo nulo en verificacion de vacío');
		}
		return result;
	}

	// Validacion si un campo tipo select esta seleccionado
	function esta_select(nombre,etiqueta)
	{
		var campo;
		var result = true;
		campo = document.getElementById(nombre);
		if (campo)
		{
			if (campo.selectedIndex == 0)
				{
					alert("Tiene que seleccionar una opción de \""+ etiqueta +"\"");
					campo.focus();
					result = false;
				}
		}
		else
		{
			result = false;
			alert('Error: Campo Select en nulo ');
		}
		return result;
	}

	/*
		Definicion:
			Funcion que valida si un campo es un numero o no
		Retorno:
			TRUE	: Los caracteres en el campo buscado son todos numeros
			FALSE	: El campo buscado no son todos los caracteres numeros
		Parametros:
			nombre	: Nombre del campo que se busca
			etiqueta: Etiqueta del campo que se busca, es para el posible mensaje de error
		Pre-Condiciones:
			El campo no tiene que ser nulo
	*/
	function esNumero(nombre,etiqueta)
	{
		var campo = document.getElementById(nombre);
		var numValido = true;
		if (campo)
		{
			if (campo.value){
				if (!(numValido = isNum(campo.value)))
				{
					alert("Solo se admiten caracteres numericos en el campo \""+ etiqueta +"\"");
					campo.focus();
				}

			}
			else{
				numValido = false;
				alert('Error: Numero nulo en verificación de numero');
			}
		}
		else{
			numvalido = false;
			alert('Error: Campo nulo en verificación si es numero');
		}
		return numValido;
	}

	/*
		Definicion:
			Funcion que valida si un campo de mail es valido o no
		Retorno:
			TRUE	: Los caracteres del mail estan todos bien
			FALSE	: Los caracteres del mail no estan bien
		Parametros:
			nombre	: Nombre del campo que se busca
			etiqueta: Etiqueta del campo que se busca, es para el posible mensaje de error
		Pre-Condiciones:
			El campo no tiene que ser nulo
	*/
	function esMail(nombre,etiqueta)
	{
		var campo = document.getElementById(nombre);
		var  mailValido = true;
		if (campo)
		{
			if (campo.value){
				if (!(mailValido = checkEmail(campo.value)))
				{
					alert("El mail ingresado en el campo \""+ etiqueta +"\" es invalido");
					campo.focus();
				}

			}
			else{
				mailValido = false;
				alert('Error: Numero nulo en verificación de mail');
			}
		}
		else{
			mailValido = false;
			alert('Error: Campo nulo en verificación si es mail');
		}
		return mailValido;
	}

