// JavaScript Document

//url donde enviamos el formulario
var u = '/cgi-bin/form/';
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!IMPORTANTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//variable que determina si el formulario se envia por ajax o lo hace por el medio tradicional
//si se quiere enviar por el medio tradicional, añadir antes del HTML del formulario la variable ajax con el valor false
var ajax = false;

//funcion que enviara el formulario si la validacion es correcta
var enviaForm = function(f) {
	
	//alert(jQuery(f).serialize())
	
	//el formulario se enviara mediante ajax
	//el metodo serialize nos permite concatenar todos los campos del formulario en una variable de texto
	//que el metodo ajax envia por post
	//se pueden definir funciones para los diferentes estados del envío de datos
	if (ajax == true)
	{
		jQuery.ajax({
			  type: "POST",
			  url: u,
			  data: jQuery(f).serialize(),
			  beforeSend: function(objeto){
				//una vez enviado el formulario, mostraremos el gif de 'cargando' y eliminamos todo el contenido del formulario
				//excepto el titulo
				jQuery("#consulta_cont_form_consultar").children().not('#consulta_cont_tit_consultar').remove();
				jQuery("#consulta_cont_form_consultar").append('<fieldset class="cf_cont_consulta" id="fieldset_ajax"><legend>Enviando su solicitud</legend><div class="cf_consulta cf_consulta_top"><img src="/img/formulario_cargando.gif" alt="Cargando..." /><p style="color:#003176">Espere un momento, por favor</p></div></fieldset>');
			  },
			  success: function(msg){
				jQuery('#fieldset_ajax').fadeOut('slow',function()
				{
					jQuery(this).find('legend').text('Solicitud enviada');
					jQuery(this).find('.cf_consulta').html('<p style="color:#003176">La información ha sido procesada correctamente.</p><p style="color:#003176">Gracias por su atención.</p>');
					jQuery(this).fadeIn('slow');
				});
			  },
			  error: function(objeto, quepaso, otroobj){
				alert("ERROR!"+quepaso);
			  }
		
			});
	}//if 
	else
	{
		jQuery(f).attr('action',u);
		jQuery(f).submit();
	}
	
	
}


//funcion que evita el envio de spam
function antispam(f){
   while (f.parentNode && (f.tagName!="FORM")) {
		   f=f.parentNode;
	 }
	 if (!f.attr('action')) return false;
	 f.append('<input type="hidden" name="vs" value="ok" />');
     enviaForm(f);
}





//SCRIPT PARA VALIDAR EL FORMULARIO

//Validacion de campos de texto no vacios 
//busca caracteres que no sean espacio en blanco en una cadena
var vacio = function (q) {
        for ( i = 0; i < q.length; i++ ) {
                if ( q.charAt(i) != " " ) {
                        return true
                }
        }
        return false
}

//validar email
function validar_email(txt){
	
	//expresion regular
        var b=/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
        //devuelve verdadero si validacion OK, y falso en caso contrario
        return b.test(txt)
}


//validar nif
function validar_nif(dni) {
  var numNif = dni.substr(0,dni.length-1);
  var letNif = dni.substr(dni.length-1,1);
  numNif = numNif % 23;
  var letrasNif='TRWAGMYFPDXBNJZSQVHLCKET';
  letrasNif = letrasNif.substring(numNif,numNif+1);
  if (letrasNif != letNif ) 
  {
    return false;
  }
}

//validar codigo postal
function validar_cp(cp) {
	 
	 //expresion regular
     var expCp= /^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$/;
	 //devuelve verdadero si validacion OK, y falso en caso contrario
     return expCp.test(cp)
}


//valida que el campo no este vacio y no tenga solo espacios en blanco

var validaCampo = function(campo)
{
	//valor del campo que vamos a validar
	var valorCampo = campo.val();
	//id del input de dicho campo
	var idNombreCampoLegible = campo.attr('id');
	//valor del label que acompaña al input. Se mostrará en el alert si falla la validación
	var nombreCampoLegible = jQuery('label[for='+idNombreCampoLegible+']').text();
	//quitamos el asterisco y el punto del final
	nombreCampoLegible = nombreCampoLegible.replace('*','');
	//si no hay label,se tomará el valor del id
	if (nombreCampoLegible == '') {
		nombreCampoLegible = idNombreCampoLegible;
	}
	var nombreCampo = campo.attr('name');
	
	//variable que se utilizará para recoger el resultado del análisis de cadena de los campos que lo requieran
	var validacion = true;
	
	
        
		//comprobamos que el campo no está vacío
        if( vacio(valorCampo) == false ) 
		{
			    
                validacion = false;
				alert("Rellene el campo "+nombreCampoLegible+", por favor.");
				campo.focus();
				campo.css('border','1px solid red');
				
        } 
		//si se ha rellenado, comprobamos si es de un tipo que requiera análisis de cadena 
		//y de ser así, lo procesamos
		else 
		{
			switch(nombreCampo)
			{
				case 'email':
				validacion = validar_email(valorCampo);
				break;
				
				case 'cp':
				validacion = validar_cp(valorCampo);
				break;
				
				case 'nif':
				case 'dni':
				validacion = validar_nif(valorCampo);
				break;
			}
			
			if (validacion == false)
			{
			alert("Compruebe que el campo "+nombreCampoLegible+" es correcto, por favor.");
			campo.focus();
			campo.css('border','1px solid red');
			}
			
		}
		
		return validacion;

 
}

function valida(F) {
	
		//el selector find busca entre todos los hijos del elemento seleccionado (el formulario en este caso)
		//los campos que tengan la clase 'campo_obligatorio'
		//el selector children solo busca el primer nivel de descendientes
		var camposForm = jQuery(F).find('.campo_obligatorio');
		
		if (camposForm.length)
		{
		
	    jQuery(camposForm).each(function(i)
		{
			//le ponemos el borde gris a todos los input para eliminar aquel que se haya puesto en rojo
			//y que se va a rellenar en esta iteración
			jQuery(this).css('border','1px solid #ccc');
			campoValidado = validaCampo(jQuery(this));
			//si en algún momento un campo no valida, el bucle se detiene e invita al usuario
			//a rellenar el campo
			return campoValidado;
			
			
		});
		
		return campoValidado;
	
		}
		else
		{
			return true;
		};
		
};




jQuery(document).ready(function(){
	jQuery("#boton_enviar").click(function(e){
		e.preventDefault();
		
		var formulario = jQuery(this).parents('form');
		var validado =  valida(formulario);
		//si al finalizar el bucle por los campos obligatorios la variable camposValidados sigue siento true
		//llamamos a la funcíon antispam y enviamos el formulario
		if (validado == true)
		{
			jQuery(antispam(jQuery(formulario)));
		}
	});
});
