var o_maxLongitudes =
    {    
    i_tema: 70,
    i_texto: 1500,
    i_nombre: 50,
    i_apellidos: 130,
	i_email: 70,
	i_telefono: 20,
	i_captcha: 7		
    };



var o_esRequerido =
	{
	b_tema: true,
	b_texto: true,
	b_fichero: false,
	b_nombre: true,
	b_apellidos: true,
	b_email: true,
	b_telefono: false,
	b_codigoCaptcha: true,
	b_legal: true
	};

var labels ={l_tema:'Tema', l_nombre:'Nombre', l_apellidos:'Apellidos', l_email:'Correo electrónico', l_texto:'Descripción o Texto', l_codigoCaptcha:'Codigo Anti-spam', l_legal:'Condiciones legales'};


var i_maxFileSizeBytes = 20971520;
var s_maxFileSizeMb = "20";



$(document).ready(
function(){
	$("#form1").submit( 
		function(){
			try{
				var validado = validargenerico();
				if (validado && typeof flybar!=="undefined") flybar();
				return validado;
			}catch (ex){		
				alert("ERROR de implementación: " + ex.name + " | " + ex.message); 		
				return false;
			}		
		}
	); 
	var s_selectorCss = "#textareaTexto";
	//Es necesario poner los 3 eventos, para curbir todos los casos: pulsación continuada de una
	//tecla, borrado de carácteres en bloque, etc.
	$(s_selectorCss).change(function(){	controlarLongitudDeTextArea(this);});
	$(s_selectorCss).keyup(function(){controlarLongitudDeTextArea(this);});
	$(s_selectorCss).keypress(function(){controlarLongitudDeTextArea(this);});			
});

function validargenerico(){
	var enviar = true;
	var error = false;
	var validado;
	var componente;
	var labelreq;
	var namereq;
	var obligatorio;
	var fichero_no_obligatorio = true;
	
	componentes = $('#form1').find('input');
    // Validación de que los campos de texto obligatorios estén informados     
	for(i=0;i<componentes.length && !error;i++) {
		componente = componentes[i];
		switch (componente.type){
			case "checkbox":
				validado = compruebaCheck(componente.id);
				namereq = "o_esRequerido.b_"+componente.name;
				obligatorio = eval(namereq);
				break;
			case "radio":
				namereq = "o_esRequerido.b_"+componente.name;
				obligatorio = eval(namereq);
				validado = compruebaRadios(componente.name);
				break;
			case "text":
				namereq = "o_esRequerido.b_"+componente.name;
				obligatorio = eval(namereq);
				validado = validaCampoTexto(componente);
				break;
			case "file":
				namereq = "o_esRequerido.b_fichero";
				obligatorio = eval(namereq);
				validado = validaCampoTexto(componente);
				if ($('#form1').find('input[name=votacion]').val() == 643 && !validado && obligatorio && fichero_no_obligatorio) {
					validado = true;
					fichero_no_obligatorio = false;
				}
		}
	
		if (!validado && obligatorio){
			error = true;
			if (componente.type != "file")
				labelreq = "labels.l_"+componente.name;
			else
				labelreq = "labels.l_fichero";
			mensaje = "ERROR: '"+eval(labelreq)+"' no tiene valor.";
		}
	}
	
	//Casos de validación específicos
	if (!error){
		//Valido que el mail sea correcto
		if (!verificaEmail($("#inputEmail").val()) && o_esRequerido.b_email){
			error = true;
			mensaje = "ERROR: 'Correo electrónico' no es correcto."
			//alert("ERROR: 'Correo electrónico' no es correcto.");
			//return false;
		}//if
		
		//Valido que coincidan los dos campos email si hay campo de confirmacion
		if ($("#inputEmailRep").length > 0 && $("#inputEmailRep").val() != $("#inputEmail").val())	{
			error = true;
			mensaje = "ERROR: 'Correo electrónico' no coincide con la confirmación."
			//alert("ERROR: 'Correo electrónico' no coincide con la confirmación.");
			//return false;
		}//if
		
		$('#form1').find('textarea').each(function (x, elem){
			//-texto
			s = $(elem).val();
			if (s == undefined){s = "";}//if 
			validado = $.trim(s).length > 0;
			namereq = "o_esRequerido.b_"+$(elem).attr("name");
			obligatorio = eval(namereq);
			if (!validado && obligatorio){
				error = true;
				labelreq = "labels.l_"+$(elem).attr("name");
				mensaje = "ERROR: '"+eval(labelreq)+"' no tiene valor."
				//alert("ERROR: '"+eval(labelreq)+"' no tiene valor.");
				//return false;
			}//if
		});
		
	}
	
	if (error) {
		alert(mensaje);
		return false;
	}
	
	return true;
}

/*
function validargenerico(){
	var enviar = true;
	var error = false;
	var validado;
	var componente;

	componentes = $('#form1').find('input');
         
	for(i=0;i<componentes.length && !error;i++) {
		componente = componentes[i];
		switch (componente.type){
			case "checkbox":
				validado = compruebaCheck(componente.id);
				namereq = "o_esRequerido.b_"+componente.name;
				labelreq = "labels.l_"+componente.name;
				valor = eval(namereq);
				if (!validado && valor){
					error = true;
					mensaje = "ERROR: '"+eval(labelreq)+"' no tiene valor.";
				}
				break;
			case "radio":
				validado = compruebaRadios(componente.name);
				namereq = "o_esRequerido.b_"+componente.name;
				valor = eval(namereq);
				if (!validado && valor){
					error = true;
					mensaje = "ERROR: 'Sexo' no tiene valor.";
				}
				break;
			case "text":
				validado = validaCampoTexto(componente);
				namereq = "o_esRequerido.b_"+componente.name;
				labelreq = "labels.l_"+componente.name;
				valor = eval(namereq);
				if (!validado && valor){
					error = true;
					mensaje = "ERROR: '"+eval(labelreq)+"' no tiene valor.";
				}
				//Valido que el mail sea correcto
				if (componente.id == "inputEmail" && validado && valor && !verificaEmail(componente.value)){
					error = true;
					mensaje = "ERROR: 'Correo electrónico' no es correcto.";
				}//if
			 	break;
		}
	}
	
	//Casos de validación específicos
	if (!error){
		//Valido que coincidan los dos campos email si hay campo de confirmacion
		if ($("#inputEmailRep").length > 0 && $("#inputEmailRep").val() != $("#inputEmail").val())	{
				alert("ERROR: La dirección de correo no coincide.");
				return false;
		}//if
		
		//-----texto
		s = $("#textareaTexto").attr("value");
		if (s == undefined){s= "";} 
		if (jQuery.trim(s).length <= 0 && o_esRequerido.b_texto){
			alert("ERROR: '"+labels.l_texto+"' no tiene valor.");
			return false;
		}//if
		if (s.length > o_maxLongitudes.i_texto){
			alert("ERROR: '"+labels.l_texto+"' es demasiado largo.");
			return false;	
		}//if
	} else {
		alert(mensaje);
		return false;
	}
	
	return true;
}
*/

//Validar los datos cuando se intente enviar el formulario.
function validar
	(
	)
{
var s = null;

//-----tema
s = $("#inputTema").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_tema)
	{
	alert("ERROR: 'Tema' no tiene valor.");
	return false;
	}//if	
if (s.length > o_maxLongitudes.i_tema)
	{
	alert("ERROR: 'Tema' es demasiado largo.");
	return false;	
	}//if	

//-----texto
s = $("#textareaTexto").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_texto)
	{
	alert("ERROR: 'Texto' no tiene valor.");
	return false;
	}//if
if (s.length > o_maxLongitudes.i_texto)
	{
	alert("ERROR: 'Texto' es demasiado largo.");
	return false;	
	}//if	

//-----fichero
s = $("#inputFichero").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_fichero)
	{
	alert("ERROR: 'Fichero' no tiene valor.");
	return false;
	}//if

//-----nombre
s = $("#inputNombre").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_nombre)
	{
	alert("ERROR: 'Nombre' no tiene valor.");
	return false;
	}//if
if (s.length > o_maxLongitudes.i_nombre)
	{
	alert("ERROR: 'Nombre' es demasiado largo.");
	return false;	
	}//if	

//-----apellidos
s = $("#inputApellidos").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_apellidos)
	{
	alert("ERROR: 'Apellidos' no tiene valor.");
	return false;
	}//if
if (s.length > o_maxLongitudes.i_apellidos)
	{
	alert("ERROR: 'Apellidos' es demasiado largo.");
	return false;	
	}//if	

//-----email
s = $("#inputEmail").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_email)
	{
	alert("ERROR: 'Correo electrónico' no tiene valor.");
	return false;
	}//if
if (!verificaEmail(s) && o_esRequerido.b_email)
{
	alert("ERROR: 'Correo electrónico' no es correcto.");
	return false;
}//if
if (s.length > o_maxLongitudes.i_email)
	{
	alert("ERROR: 'Correo electrónico' es demasiado largo.");
	return false;	
	}//if	

//-----teléfono
s = $("#inputTelefono").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_telefono)
	{
	alert("ERROR: 'Teléfono' no tiene valor.");
	return false;
	}//if
if (s.length > o_maxLongitudes.i_telefono)
	{
	alert("ERROR: 'Teléfono' es demasiado largo.");
	return false;	
	}//if	

//-----captcha
s = $("#inputCodigoCaptcha").attr("value");
if (s == undefined)
	{
	s = "";
	}//if 
if (jQuery.trim(s).length <= 0 && o_esRequerido.b_captcha)
	{
	alert("ERROR: 'Código de protección anti-spam' no tiene valor.");
	return false;
	}//if
if (s.length > o_maxLongitudes.i_captcha)
	{
	alert("ERROR: 'Código de protección anti-spam' es demasiado largo.");
	return false;	
	}//if	

//-----legal
if ($("#inputLegal:checked").val() == null && o_esRequerido.b_legal)
	{
	alert("ERROR: No se han aceptado las 'Condiciones legales'.");
	return false;
	}//if

//-----

return true;	
	
}	

/* Validaciones genéricas */

//Función que verifica que sea una dirección de correo válida
function verificaEmail(_efEmail){
	var expresion = /^\w+([-_\.]?\w+)*@\w+([-_\.]?\w+)*(\.\w{2,3})+$/;
	var res = expresion.test(_efEmail);
	return res;
}


function validaCampoTexto(campo) {
	if (campo) {
		var campoValue = campo.value;
		if (jQuery.trim(campoValue).length > 0) {
			return true;
		}
	}
	return false;
}

/*
function validaCampoTexto(valor) {
	valor = valor == undefined? "" : valor;
	return $.trim(valor).length > 0;
}
*/

function compruebaCheck(casilla) {
	if ($("#"+casilla+":checked").val() == null) {
		return false;
	}
	return true;	
}

function compruebaRadios(radio) {
	for(var i=0;i<document.getElementsByTagName('input').length;i++) {
		if ((document.getElementsByTagName('input')[i].type == "radio") && (document.getElementsByTagName('input')[i].name == radio))
			if (document.getElementsByTagName('input')[i].checked)
				return true;
	}
	return false;
}

function controlarLongitudDeTextArea
	(
	textarea
	)
{
var s_texto = $(textarea).attr("value");
if (s_texto == undefined)
	{
	s_texto = "";
	}//if
var i_longitud = s_texto.length;
if (i_longitud > o_maxLongitudes.i_texto)
	{
	var i_start = 0;
	var i_stop = o_maxLongitudes.i_texto;
	s_texto = s_texto.substring(i_start, i_stop);	
	$(textarea).attr("value", s_texto);
	}//if
}	
