//*******************************************************************
//* 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 'd' (desplegable), 
//*              '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");

	msgError += validar_form_e1 + "\n\n";

	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;

                // Alex-GoldenSport:
                // para forzar a elegir una opcion de un select multiple
                if (f.elements[i].type == "select-multiple"){
                        if (f.elements[i].selectedIndex == -1) {
                                valor = "" ;
                        }
                        else {
                                valor = "viruta" ;
                                // Me da igual el valor.
                                // Solo queria que hubiera una opcion pinchada
                        }
                }
                // Fin Alex-GoldenSport
		else if (f.elements[i].type == "select-one"){
			valor = f.elements[i].options[f.elements[i].selectedIndex].value;
		}
		else{
			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" && f.elements[i].type != "select-one" && f.elements[i].type != "select-multiple")
		{
			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 += "\t" + validar_form_e21 + " " + newname[5] + " " +  validar_form_e22 + "\n";
                	correcto = false;
		}

		if (nombre.charAt(1) == "f" && !ValidarFecha(valor, (nombre.charAt(0) == "s") && controlObligatorios)) 
		{
                	msgError += "\t" + newname[5] + " " +  validar_form_e32 + "\n";
                	correcto = false;
		}

		if (nombre.charAt(1) == "i" && valor.indexOf(" ") != -1) 
		{
                	msgError += "\t" +  newname[5] + " " +  validar_form_e42 + "\n";
                	correcto = false;
		}

		if (nombre.charAt(1) == "d" && f.elements[i].options[f.elements[i].selectedIndex].text=="") 
		{
                	msgError += "\t" +  newname[5] + " " +  validar_form_e52 + "\n";
                	correcto = false;
		}

		if (nombre.charAt(1) == "e" && isNaN(valor)) 
		{
                	msgError += "\t" +  newname[5] + " " +  validar_form_e62 + "\n";
                	correcto = false;
		}
		else
		{
			if (nombre.charAt(1) == "e" && valor.indexOf(".") != -1)
			{
                	msgError += "\t" +  newname[5] + " " +  validar_form_e72 + "\n";
                	correcto = false;
			}
		}

		if (nombre.charAt(1) == "r" && isNaN(valor)) 
		{
                	msgError += "\t" +  newname[5] + " " +  validar_form_e82 + "\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 (nombre.charAt(1) == "a") {
                                valorCmp = " ";
                        }
		}

		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]);
			}
			// Maximo en alfanumericos valida tamanyo del campo
                        if (nombre.charAt(1) == "a") {
                                longitud = valorCmp.length;
                                maxCmp = parseInt(newname[3], 10);
                                if ( longitud >= maxCmp )
                                {
                                        msgError += "\t" + validar_form_e114 + " "+  newname[5] + " " + ( longitud - (maxCmp-1) ) + " " + validar_form_e115 + "\n";
                                        correcto = false;
                                }
                        }
		}

		if (newname[2] != "#" && newname[3] != "#")
		{
			if (valorCmp < minCmp || valorCmp > maxCmp)
			{
             msgError += "\t" +  newname[5] + " " +  validar_form_e92 + " " +  newname[2] + " " +   validar_form_e93 + " " +  newname[3] + "\n" ;
                		correcto = false;
			}
		}
		else
		{
			if (newname[2] != "#")
			{
				if (valorCmp < minCmp)
				{
              	msgError += "\t" +  newname[5] + " " +  validar_form_e102 + " " +  newname[2] + "\n" ;
                			correcto = false;
				}
			}

			// Validamos los valores máximos
			if (newname[3] != "#")
			{
				if (valorCmp > maxCmp)
				{
              	msgError += "\t" +  newname[5] + " " +  validar_form_e112 + " " +  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);
                        }
                }
        }



	function indicesFormulario (f)
	{
        	var i, nombre;
        	var re = /(\w+)__(.+)__(.+)__(.+)__(.+)__(.+)/;

		var strResultado = "";

        	for (i=0; i<f.length; i++)
        	{
			if (f.elements[i].type != "checkbox")
			{
                		nombre = f.elements[i].name;
				strResultado += nombre + " -> " + i + "\n";
			}
		}

		alert (strResultado);
	}





