//*******************************************************************
//* Nombre:
//*    validar_form
//*
//* Descripcisn:
//*    Esta función valida los campos de un formulario pasado como
//*    argumento. Los criterios de validación se construyen a partir
//*    del nombre del campo, asi el nombre del campo debe tener el
//*    siguiente formato:
//*         xy__vmin__vmax__nombrebd__etiqueta__zz
//*    Donde:
//*         x -> Admite 's' (obligatorio) o 'n' (opcional)
//*         y -> Admite 'e' (entero), 'r' (real), 'a' (alfanumerico),
//*              'f' (fecha) o 'i' (identificador "sin espacios")
//*         vmin -> Valor mínimo admitido, '-' si cualquier cosa
//*         vmax -> Valor máximo admitido, '-' si cualquier cosa
//*         nombrebd -> Nombre del campo en la base de datos
//*         etiqueta -> Etiqueta del campo para mostrar en el texto
//*                     del error los espacios en blanco se sustituyen
//*			por '$'
//*         zz -> Orden a validar los campos cuando utilizamos la
//*               validación del JavaBean (00, 01, ..., 99)
//*
//* Parametros:
//*    Formulario que se quiere validar
//*
//* Valor de retorno:
//*    true  -> Si la varidación ha sido correcta
//*    false -> Si algún valor introducido por el usuario era
//*             incorrecto
//*******************************************************************/

function validar_form (f, controlObligatorios)
{
	// alert("version 1.06b");

	if (controlObligatorios == null)
	{
		controlObligatorios = true
	}

	var i, newname, nombre, valor, correcto;
	var re = /(\w+)__(.+)__(.+)__(.+)__(.+)__(.+)/;
	correcto = true;

	for (i=0; i<f.length; i++)
	{
		nombre = f.elements[i].name;
		valor = f.elements[i].value;

		if (f.elements[i].type != "text" && f.elements[i].type != "hidden" && f.elements[i].type != "password" && f.elements[i].type != "textarea")
		{
			continue;
		}

		newname = re.exec(nombre);
		if (newname == null) { continue; } // solo mira los campos codificados

		newname[5] = newname[5].replace(/\$/g, " "); //descripcion del error

		// Validamos campos obligarios, enteros y reales
		if (nombre.charAt(0) == "s" && valor == "" && controlObligatorios) 
		{
                	msgError += "\tCasilla " + newname[5] + " es obligatoria\n";
                	correcto = false;
		}

		if (nombre.charAt(1) == "f" && !ValidarFecha(valor, (nombre.charAt(0) == "s") && controlObligatorios)) 
		{
                	msgError += "\t" + newname[5] + " es incorrecta\n";
                	correcto = false;
		}

		if (nombre.charAt(1) == "i" && valor.indexOf(" ") != -1) 
		{
                	msgError += "\t" + newname[5] + " no puede contener espacios en blanco\n";
                	correcto = false;
		}

		if (nombre.charAt(1) == "e" && isNaN(valor)) 
		{
                	msgError += "\t" + newname[5] + " debe ser un número entero\n";
                	correcto = false;
		}
		else
		{
			if (nombre.charAt(1) == "e" && valor.indexOf(".") != -1)
			{
                		msgError += "\t" + newname[5] + " debe ser un número entero\n";
                		correcto = false;
			}
		}

		if (nombre.charAt(1) == "r" && isNaN(valor)) 
		{
                	msgError += "\t" + newname[5] + " debe ser numérico\n";
                	correcto = false;
		}

		// Validamos los valores mínimos
		var valorCmp, minCmp, maxCmp;

		if (isNaN(valor)) { valorCmp = valor; }
		else {
			if (nombre.charAt(1) == "e") {
				valorCmp = parseInt(valor, 10);
			}
			if (nombre.charAt(1) == "r") {
				valorCmp = parseFloat(valor);
			}
		}

		if (isNaN(newname[2])) { minCmp = newname[2]; }
		else {
			if (nombre.charAt(1) == "e") {
				minCmp = parseInt(newname[2], 10);
			}
			if (nombre.charAt(1) == "r") {
				minCmp = parseFloat(newname[2]);
			}
		}

		if (isNaN(newname[3])) { maxCmp = newname[3]; }
		else {
			if (nombre.charAt(1) == "e") {
				maxCmp = parseInt(newname[3], 10);
			}
			if (nombre.charAt(1) == "r") {
				maxCmp = parseFloat(newname[3]);
			}
		}

		if (newname[2] != "#" && newname[3] != "#")
		{
			if (valorCmp < minCmp || valorCmp > maxCmp)
			{
                		msgError += "\t" + newname[5] + " debe estar comprendido entre " + newname[2] + " y " + newname[3] + "\n";
                		correcto = false;
			}
		}
		else
		{
			if (newname[2] != "#")
			{
				if (valorCmp < minCmp)
				{
                			msgError += "\t" + newname[5] + " debe ser mayor que " + newname[2] + "\n";
                			correcto = false;
				}
			}

			// Validamos los valores máximos
			if (newname[3] != "#")
			{
				if (valorCmp > maxCmp)
				{
                			msgError += "\t" + newname[5] + " debe ser menor que " + newname[3] + "\n";
                			correcto = false;
				}
			}
		}

	}

	// alert ('msgError = ' + msgError);
        return correcto;
} 


	function ValidarFecha(fecha, obligatorio)
        {
		var dia, mes, anno;

        	if ((!obligatorio) && fecha == '')
                {
                	return (true);
                }

        	if (fecha != '' && fecha.length != 10)
                {
                	return (false);
                }

		var aux = fecha.split('/');
		dia  = aux[0];
		mes  = aux[1];
		anno = aux[2];

		if (dia.length != 2 || mes.length != 2 || anno.length != 4)
		{
			return (false);
		}

                mes --;
                var f = new Date(anno, mes, dia);
                var fActual = new Date();

                var auxF;
                var auxFActual;

                auxF = f.getFullYear() + f.getMonth() + f.getDate();
                auxFActual = fActual.getFullYear() + fActual.getMonth() + fActual.getDate();

                if (f.getFullYear() == anno && f.getMonth() == mes && f.getDate() == dia)
                {
                	return(true);
		}
                else
                {
                	return(false);
                }

                return(true);
	}


        function dameIndice (f, nombreCampo) {

                var re = /(\w+)__(.+)__(.+)__(.+)__(.+)__(.+)/;
                for (i=0; i<f.length; i++)
                {
                        nombre = f.elements[i].name;

                        newname = re.exec(nombre);
                        if (newname == null) { continue; } 
                        newname[4] = newname[4].replace(/\$/g, " ");

                        if (nombreCampo == newname[4])
                        {
                                return (i);
                        }
                }
        }
