//*******************************************************************
//* 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 + "\t\t\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 = 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]);
			}
			// Maximo en alfanumericos valida tamanyo del campo
			if (nombre.charAt(1) == "a" && newname[2] == "#") {
				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 ( nombre.charAt(1) == "e" || nombre.charAt(1) == "r" ) {
				if (valorCmp < minCmp || valorCmp > maxCmp)
				{
					msgError += "\t" +  newname[5] + " " +  validar_form_e92 + " " +  newname[2] + " " +   validar_form_e93 + " " +  newname[3] + "\n" ;
					correcto = false;
				}
			}
			// Maximo y minimo en alfanumericos valida tamanyo del campo
			if (nombre.charAt(1) == "a") {
				longitud = valorCmp.length;
				minCmp = parseInt(newname[2], 10);
				maxCmp = parseInt(newname[3], 10);
				if ( maxCmp == minCmp )
				{
					if ( longitud != minCmp )
					{
						msgError += "\t" +  newname[5] + " " + validar_form_e94 + " " + minCmp + " " + validar_form_e115 + "\n";
						correcto = false;
					}
				}
				else if ( longitud < minCmp || longitud > maxCmp )
				{
					msgError += "\t" +  newname[5] + " " + validar_form_e92 + " " + minCmp + " " + validar_form_e93 + " " + maxCmp + " " + validar_form_e115 + "\n";
					correcto = false;
				}
			}
		}
		else
		{
			if (nombre.charAt(1) == "a") {
				valorCmp = valorCmp.length;
			}
			
			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+)__(.+)__(.+)__(.+)__(.+)__(.+)/;
	var iResult = -1;
	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])
		{
			iResult = i;
		}
	}
	return iResult;
}

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);
	return;
}