//Archivo de validación de campos
//Autor              : Moisés Martínez Muñoz
//Fecha Creación     : 31 de Enero de 2008
//Versión            : 0.2


//**************************************************************************//
//***********INICIO FUNCIONES CONTROL DE CAMPOS*****************************//
//**************************************************************************//

//Comprueba si un objeto no posee ningún valor en su contenido.
//objeto : Almacena el objeto que hace referencia al elemento a gestionar.
function esVacio(objeto)
{
    if (objeto.value == '')
		return true
	else
		return false
}

//Comprueba si el valor de un objeto posee una determinada longitud.
//objeto   : Almacena el objeto que hace referencia al elemento a gestionar.
//longitud : Representa la longitud mínima del objeto.

function esminimo(objeto,longitud,frase)
{
    if (objeto.value.length < longitud)
    {
        alert(frase);
        return false;
    }
    else
        return true;
}

//Compruba si un determinado objeto posee un valor con la estructura del texto.
//objeto : Almacena el objeto que hace referencia al elemento a gestionar.
//frase  : Almacena la frase al utilizar en caso de que no se haya introducido el texto.

function esTexto(objeto)
{
    if (esVacio(objeto)) 
	{
		return false;
	}
	else
		return true;
}

//Compruba si el valor introducido es un dígito entero
//num : Almacena el valor del dígito introducido.
function esDigito(num) 
{
	var string="1234567890";
        	
	if (num.length > 1)
		return false;
        	
	if (string.indexOf(num)!= -1)
		return true;
	return false;
}

//Comprueba si un determinado elementos se corresponde con la estructura de un código postal
//Objeto  : Almacena el nombre del elemento a comprobar.

function esCodigo(objeto)
{
    var longitud = objeto.value.length;
	var cadena   = objeto.value;
	
	if (longitud < 5) 
		return false;
	else
	{
		for (i=0; i<longitud; i++)
		{
			if (!esDigito(cadena.charAt(i)))
				return false;
		}
	}

	return true;
}

//Comprueba si un determinado elemento se corresponde con la estructura de un número telefónico
//Objeto  : Almacena el nombre del elemento a comprobar.

function esTelefono(objeto)
{
	
	var longitud = objeto.value.length;
	var cadena   = objeto.value;
	
	if (longitud < 9) 
		return false;
	else
	{
		for (i=0; i<longitud; i++)
		{
			if (!esDigito(cadena.charAt(i)))
				return false;
		}
	}
	
	return true;
}


//Devuelve la letra a la que corresponde el valor obtenido de la suma de todos los dígitos del NIF.
//valor: Almacena la suma de todos los digitos de un NIF, CIF
function comprobarLetra(valor)
{
    cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
    posicion = valor % 23;
	return cadena.substring(posicion,posicion+1);
}

//Comprueba si un nif introducido es correcto.
//objeto: Almacena el objeto que hace referencia al elemento a gestionar.
function esNif(objeto)
{

	if (esVacio(objeto))
	{
	    return false;
	}
	else
	{
		var digitos = objeto.value.substring(0,8);
		var letra   = objeto.value.substring(8,9);
        		
		if (comprobarLetra(digitos) == letra.toUpperCase())
		    return true;			
		else
		{
			return false;
		}
	}
}

//Comprueba si el correo electrónico introducido cumple los requisitos de estructura de norma ISO.
//Objeto: Almacena el objeto que hace referencia al elemento a gestionar. 
function esCorreo(objeto)
{
	var cadena = objeto.value;
        	
	if(!esVacio(cadena))
	{
		//expresion regular para comprobar si el correo electronico es valido
       	var b=/^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/
     	//devuelve verdadero si validacion OK, y falso en caso contrario
	    if (b.test(cadena))
	    {
	        return true;
	    }
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}

//Comprueba si una fecha es correcta, es decir cumple el siguiente formato dd/mm/aaaa.
//Objeto: Almacena el objeto que hace referencia al elemento a gestionar. 
function esFecha(objeto)
{
	var correcto = true;
	var Fecha    = new String(objeto.value);
	var Ano      = new String(Fecha.substring(Fecha.lastIndexOf("/")+1,Fecha.length));
	var Mes      = new String(Fecha.substring(Fecha.indexOf("/")+1,Fecha.lastIndexOf("/")));
	var Dia      = new String(Fecha.substring(0,Fecha.indexOf("/")));

	if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<1900)
		correcto = false;
	if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12)
		correcto = false;
	if (isNaN(Dia) || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31)
		correcto = false;
	if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) 
	{
		if (Mes==2 && Dia > 28 || Dia>30)
			correcto = false
	}
		
	return correcto
}

function esigual(objeto1,objeto2)
{
	var cadena1 = objeto1.value;
	var cadena2 = objeto2.value;
	
	if (cadena1 == cadena2)
		return true;
	else
		return false;
}


function controlarSelector(objeto)
{
    if (objeto.options[objeto.selectedIndex].value == '-1')
        return false;
	return true;
}

function generarLI(contenido)
{
	var elemento = document.createElement('LI');
	elemento.innerHTML = contenido;
			
	return elemento;
}

function comprobarRadioButton(objeto)
{
	tamano = objeto.length;
	comprobado = false;
	
	i = 0;
	
	while ((i < tamano) && (!comprobado))
	{
		if (objeto[i].checked)
			comprobado = true;
			
		i++;
	}
	
	return comprobado;
}


function comprobarCamposVisita(formulario)
{
	var capa	   = document.getElementById('errores');
	var contenedor = document.getElementById('error');
	var error            = false;
	
	
	contenedor.innerHTML = '';
	
	if (!esTexto(formulario.nombre))
	{
		contenedor.appendChild(generarLI('Falta introducir el nombre.'));
		error = true;
	}
	
	if (!esTexto(formulario.apellidos))
	{
		contenedor.appendChild(generarLI('Falta introducir los apellidos.'));
		error = true;
	}
	
	if (!esTexto(formulario.telefono))
	{
		contenedor.appendChild(generarLI('Falta introducir el telefono.'));
		error = true;
	}
	
	if (!esTexto(formulario.email))
	{
		contenedor.appendChild(generarLI('Falta introducir el email.'));
		error = true;
	}
	
	if (!esTexto(formulario.email2))
	{
		contenedor.appendChild(generarLI('Falta repetir el email.'));
		error = true;
	}
	
	if (!esigual(formulario.email,formulario.email2))
	{
		contenedor.appendChild(generarLI('Los emails introducidos son distintos.'));
		error = true;
	}
	
	if (!controlarSelector(formulario.bodega))
	{
		contenedor.appendChild(generarLI('Debe seleccionar un bodega en la que realizar la visita.'));
		error = true;	
	}
	
	if (!esTexto(formulario.nadultos))
	{
		contenedor.appendChild(generarLI('Falta introducir el número de adultos de la visita.'));
		error = true;
	}
	
	if (!comprobarRadioButton(formulario.horario))
	{
		contenedor.appendChild(generarLI('Debe indicar el horario en el que desea realizar la visita.'));
		error = true;
	}
	
	if (!comprobarRadioButton(formulario.comer))
	{
		contenedor.appendChild(generarLI('Debe indicar si desea comer en la bodega.'));
		error = true;
	}
	
	if (!comprobarRadioButton(formulario.tipo_visita))
	{
		contenedor.appendChild(generarLI('Debe indicar el tipo de visita que desea realizar.'));
		error = true;
	}
			
	if (error)
	{
		capa.style.display = 'block';
		return false;
	}
	else
		formulario.submit();
}


function modificarDias(formulario,mes)
{
	var objeto   = document.getElementById("dia");
	var dia      = objeto.options[objeto.selectedIndex].value;
	var anyo     = formulario.anyo.value;
	var visiesto = anyo % 4;
	var dias     = 31;

	switch (mes.value)
	{
		case "2" : 	if (visiesto == 0)
						dias = 29;
				 	else
				 		dias = 28;
				 	break;
		case "4" : 	dias = 30;
				 	break;
		case "6" : 	dias = 30;
				 	break;
		case "9" : 	dias = 30;
				 	break;
		case "11":	dias = 30;
				 	break;
	}
	
	objeto.innerHTML = "";
	
	for (i=1; i <= dias; i++)
	{
		var opcion = document.createElement("OPTION");
		
		opcion.text  = i;
		opcion.value = i;
		
		if (dia == i)
			opcion.selected = 1;
			
		objeto.options.add(opcion);
	}
}
