/*------------------------------------------------------------------------------------------
JavaScript para validar el formulario de "Formulario.php".
------------------------------------------------------------------------------------------*/



//Esta función será llamada automáticamente cada vez que el usuario seleccione un
//valor del combo de destinos.
function recalcularObligatoriedades
    (
    )
{    
//La idea del objeto-clase ha salido de: "http://davehauenstein.com/blog/archives/27".
var x = new Object();
x.destino = true;
var destino = document.getElementById("destino").value;
var idDefensora = "" + idDestinoDefensora()
switch (destino)
    {
    case idDefensora: //defensora        
        x.nombre = true;
        x.apellidos = true;
        x.email = true;
        x.localidad = false;
        x.pais = false;
        x.programa = true;
        x.pregunta = true;
        x.documento = true;
        x.sexo = false;
        x.edad = true;
        x.direccion = false;
        x.cp = false;
        x.provincia = false;
        x.emision = true;
        x.autorizo = true;
        x.telefono = false;
        break;
    case "-1": //ninguna opción
        x.nombre = false;
        x.apellidos = false;
        x.email = false;
        x.localidad = false;
        x.pais = false;
        x.programa = false;
        x.pregunta = false;
        x.documento = false;
        x.sexo = false;
        x.edad = true;
        x.direccion = false;
        x.cp = false;
        x.provincia = false;
        x.emision = false;
        x.autorizo = false;
        x.telefono = false;
        break;    
    default:  //resto de destinos
        x.nombre = true;
        x.apellidos = true;
        x.email = true;
        x.localidad = false;
        x.pais = false;
        x.programa = false;
        x.pregunta = true;
        x.documento = false;
        x.sexo = false;
        x.edad = true;
        x.direccion = false;
        x.cp = false;
        x.provincia = false;
        x.emision = false;
        x.autorizo = true;                                                            
        x.telefono = false;
        break;
    }
for (clave in x)
    {
    var esObligatorio = x[clave];    
    var elem = document.getElementById(clave + "_ob");    
    elem.style.display = esObligatorio ? "inline" : "none";
    //Usar mejor el class "invisible", que Paco ha creado específicamente para ocultar dinámicamente
    //el "<span>" de indicación de obligatorio.
    //elem.style.className = esObligatorio ? "" : "invisible";
    }
}  



function esValido
    (
    )
{	
var destino = document.getElementById("destino").value;
var idDefensora = "" + idDestinoDefensora()
switch (destino)
	{
	case idDefensora: //defensora
        if (!esValidoNombre(true)) {return false;}    
		if (!esValidoApellidos(true)) {return false;}
        if (!esValidoEmail(true)) {return false;}            
        if (!esValidoLocalidad(false)) {return false;}
        if (!esValidoPais(false)) {return false;}
        if (!esValidoPrograma(true)) {return false;}
        if (!esValidoPregunta(true)) {return false;}
        if (!esValidoDocumento(true)) {return false;}
        if (!esValidoSexo(false)) {return false;}
        if (!esValidoEdad(false)) {return false;}
        if (!esValidoDireccion(false)) {return false;}
        if (!esValidoCp(false)) {return false;}
        if (!esValidoProvincia(false)) {return false;}
        if (!esValidoFechaEmision(true)) {return false;}
        if (!esValidoAutorizo(true)) {return false;}
        if (!esValidoTelefono(false)) {return false;}
        alert("Sus datos van a ser enviados a la Defensora del espectador, el oyente y el usuario de medios interactivos de RTVE.");
		return true;
		break;
	case "-1": //ninguna opción
        alert("El dato 'DESTINO' es obligatorio. Corríjalo, por favor.");
		return false;
		break;
	default:  //resto de destinos                        
        if (!esValidoNombre(true)) {return false;}    
        if (!esValidoApellidos(true)) {return false;}
        if (!esValidoEmail(true)) {return false;}            
        if (!esValidoLocalidad(false)) {return false;}
        if (!esValidoPais(false)) {return false;}
        if (!esValidoPrograma(false)) {return false;}
        if (!esValidoPregunta(true)) {return false;}
        if (!esValidoDocumento(false)) {return false;}
        if (!esValidoSexo(false)) {return false;}
        if (!esValidoEdad(false)) {return false;}
        if (!esValidoDireccion(false)) {return false;}
        if (!esValidoCp(false)) {return false;}
        if (!esValidoProvincia(false)) {return false;}
        if (!esValidoFechaEmision(false)) {return false;}
        if (!esValidoAutorizo(true)) {return false;}
        if (!esValidoTelefono(false)) {return false;}        
        alert("Sus datos van a ser enviados.");
        return true;
		break;
	}
}



function verificarDato
    (
    nombre,
    hay,
    esValido,
    esObligatorio
    )
{
if (esObligatorio)
    {
    var m = 
        "El dato '" + nombre + 
        "' es oligatorio y debe ser válido. Corríjalo, por favor.";
    if (hay)
        {
        if (esValido)
            {
            return true;
            }
        else
            {
            alert(m);
            return false;
            }
        }
    else //noHay
        {
        alert(m);
        return false;        
        }
    }
else //esOpcional
    {
    if (hay)
        {
        if (esValido)
            {
            return true;
            }
        else
            {
            var m = 
                "El dato '" + nombre + 
                "' es opcional pero, si se especifica, debe ser válido. Corríjalo, por favor.";                
            alert(m);
            return false;                    
            }
        }
    else  //noHay
        {
        return true;
        }    
    }    
}    


/*
Nota importante expresiones regulares:
Las expresiones regulares no reconocen carácteres acentuados ni la eñe.
Así que "[A-Za-z]" no sirve para reconocer la letra "ñ" o la letra "é".
La únca solución es especificar di
*/



function esValidoApellidos
    (
    esObligatorio
    )
{    
var apellidos = document.getElementById("apellidos").value;
apellidos = trim(apellidos);
var hay = apellidos.length > 0;
//Alguna letra.
var esValido = apellidos.match(/[A-Za-z]/);
return verificarDato("APELLIDOS", hay, esValido, esObligatorio);
}



function esValidoNombre
    (
    esObligatorio
    )
{    
var nombre = document.getElementById("nombre").value;
nombre = trim(nombre);
var hay = nombre.length > 0;
//Alguna letra.
var esValido = nombre.match(/[A-Za-z]/);
return verificarDato("NOMBRE", hay, esValido, esObligatorio);
}


function esValidoEmail
    (
    esObligatorio
    )
{    
var email = document.getElementById("email").value;
email = trim(email); 
var hay = email.length > 0;
var esValido = esEmail(email);
return verificarDato("CORREO ELECTRÓNICO", hay, esValido, esObligatorio);
}



function esValidoLocalidad
    (
    esObligatorio
    )
{    
var localidad = document.getElementById("localidad").value;
localidad = trim(localidad);
var hay = localidad.length > 0;
//Alguna letra.
var esValido = localidad.match(/[A-Za-z]/);
return verificarDato("LOCALIDAD", hay, esValido, esObligatorio);
}


function esValidoPais
    (
    esObligatorio
    )
{    
var pais = document.getElementById("pais").value;
pais = trim(pais);
var hay = pais.length > 0;
//Alguna letra.
var esValido = pais.match(/[A-Za-z]/);
return verificarDato("PAÍS", hay, esValido, esObligatorio);
}



function esValidoPrograma
    (
    esObligatorio
    )
{    
var programa = document.getElementById("programa").value;
programa = trim(programa);
var hay = programa.length > 0;
//Alguna letra.
var esValido = programa.match(/[A-Za-z]/);
return verificarDato("PROGRAMA", hay, esValido, esObligatorio);
}



function esValidoPregunta
    (
    esObligatorio
    )
{    
var o = document.getElementById("pregunta");
var consulta = o.value;
consulta = trim(consulta);
var longitud = consulta.length;
var maxLong = 1024;
if (longitud > maxLong)
    {
    alert("El dato 'CONSULTA' es oligatorio y debe tener una longitud de hasta " + maxLong + " carácteres. Corríjalo, por favor.");
    return false;
    }
var hay = longitud > 0;
//Alguna letra.
var esValido = consulta.match(/[A-Za-z]/);
return verificarDato("CONSULTA", hay, esValido, esObligatorio);
}



function esValidoDocumento
    (
    esObligatorio
    )
{    
var documento = document.getElementById("documento").value;
documento = trim(documento);
var hay = documento.length > 0;
var esValido = false;
if (esNif(documento))
	{
    esValido = true;
    }
else
    {    
    if (esNie(documento))
        {
        esValido = true;
        }		
	}
return verificarDato("DNI/NIE", hay, esValido, esObligatorio);     
}    



function esValidoSexo
    (
    esObligatorio
    )
{
var sexoM = document.getElementById("sexoM").checked;
var sexoF = document.getElementById("sexoF").checked;
var hay = sexoM || sexoF;
var esValido = true;  /*siempre es verdadero porque son dos radiobuttons*/
return verificarDato("SEXO", hay, esValido, esObligatorio);     
}  



function esValidoEdad
    (
    esObligatorio
    )  
{
var edad = document.getElementById("edad").value;
edad = trim(edad);
var hay = edad.length > 0;
//Exactamente 1 o 2 dígitos.
var esValido = edad.match(/^[1-9][0-9]?$/);
return verificarDato("EDAD", hay, esValido, esObligatorio);     
}



function esValidoDireccion
    (
    esObligatorio
    )
{    
var direccion = document.getElementById("direccion").value;
direccion = trim(direccion);
var hay = direccion.length > 0;
//Alguna letra.
var esValido = direccion.match(/[A-Za-z]/);
return verificarDato("DIRECCIÓN", hay, esValido, esObligatorio);     
}
	

    
function esValidoCp
    (
    esObligatorio
    )
{
var cp = document.getElementById("cp").value; 
cp = trim(cp);   
var hay = cp.length > 0;
//Todo números.
var esValido = cp.match(/^[0-9]+$/);
return verificarDato("CÓDIGO POSTAL", hay, esValido, esObligatorio);     
}            



function esValidoProvincia
    (
    esObligatorio
    )
{    
var provincia = document.getElementById("provincia").value;
provincia = trim(provincia);
var hay = provincia.length > 0;
//Alguna letra.
var esValido = provincia.match(/[A-Za-z]/);
return verificarDato("PROVINCIA", hay, esValido, esObligatorio);     
}
	
		

function esValidoFechaEmision
    (
    esObligatorio
    )
{    
var fechaEmision = document.getElementById("emision").value;
fechaEmision = trim(fechaEmision);
var hay = fechaEmision.length > 0;
var esValido = esFecha__Dd_Mm_Aaaa(fechaEmision, "/");
return verificarDato("FECHA EMISIÓN", hay, esValido, esObligatorio);     
}



function esValidoAutorizo
    (
    esObligatorio
    )
{    
var autorizoSi = document.getElementById("autorizoSi").checked;
var autorizoNo = document.getElementById("autorizoNo").checked;
var hay = autorizoSi || autorizoNo;
var esValido = true;  /*siempre es verdadero porque son dos radiobuttons*/
return verificarDato("AUTORIZO", hay, esValido, esObligatorio);     
}



function esValidoTelefono
    (
    esObligatorio
    )
{
var telefono = document.getElementById("telefono").value;
telefono = trim(telefono);
var hay = telefono.length > 0;
//Todo números. Ejemplos: 1, 0, 22, 333333, 3333324, etc.
var esValido = telefono.match(/^[0-9]+$/);  
return verificarDato("TELÉFONO", hay, esValido, esObligatorio);
}    
