var loadingstyle='style="position:absolute;top:600px;left:auto;border:2px solid grey; padding:50px; background-color:lavender; opacity:0.90; width:300px;"';
var buttonstyle='background-color:oliveDrab;text-align:center;color:white;display:inline;padding:3px 4px;';
var nuevocomentario='<div style="cursor:pointer;'+buttonstyle+'background-color:#3333FF;" onclick="reset_formulario(1, false)">Nuevo comentario</div>';
var tryagain='<div style="'+buttonstyle+'"onclick="preloader(0,0);$(\'#Submit\').show();habilitarCampos(1);$(\'#error_fieldset\').hide(\'slow\');">Intentar de nuevo</span>';
var botonclosepreloader='<div <div style="'+buttonstyle+'cursor:pointer;" onclick="javascript:$(\'#ins_loading\').hide();">Cerrar ventana</div>';		


$(document).ready(function(){
	$("#Submit").click(function (){
	preloader(0,0);//vaciamos el preloader
	$("#error").html('');//borramos errores
	$("#error_fieldset_legend").html('');//borramos titulo de errores	 
	//$("#formulario").submit(); return false;	//pruebas
	$("#Submit").hide();	
		//empezamos a enviar
		$.ajax({
		  type: "POST",
		  url: 'validar.php?nocache=' +  Math.random(),
		  data:$("#formulario").serialize(),
		  dataType: "json",
		  beforeSend: function(){
		  		if(!validar_formulario()){$("#Submit").show();return false;}				
				preloader(1,0);//preloader básico
				reset_formulario(0,false);
		  },
		   success: function(msg){
			   preloader(0,0);
			   successFunct(msg);//retorno del ajax
		  }
			});
	return false;
	});
	//fin $("#Enviar").click(function ()
});
//fin document.ready

function successFunct(data){
			var out='';
			if(typeof(data.error)!='undefined'){
				preloader(3,data);
				if(data.e==0){//el validador javascript ha fallado, pero no el php, muestro los errores al pie del formulario
					$("#error_fieldset_legend").html('<div style="'+buttonstyle+'background-color:red;" >'+data.error+'</div>');
						$.each(data,function(k,v){
						 if(data[k]!=data.error && data[k]!=data.e){
							 out=out+'<li style="color:red;list-style:none;">'+v+'</li>';
							 } 
						 });
						out=out+'<li style="color:red;font-wheight:bold;list-style:none;">';
						out=out+'Ha fallado la validaci&oacute;n del formulario en el servidor. ';
						out=out+'Usualmente se debe a que se ha recargado la p&aacute;gina tras enviar un ';						
						out=out+'formulario, pero los campos siguen desabilitados.<br>';
						out=out+'<b>Evite enviar datos por duplicado!</b>.<br>';												
						out=out+'<div style="'+buttonstyle+'background-color:#3333FF;cursor:pointer;" onclick="javascript:habilitarCampos(1);$(\'#error_fieldset\').hide(\'slow\');">Habilitar campos</div>';
						out=out+'</li>';
						
						$("#error").html(out);
						$("#error_fieldset").show('slow');
						$("#Submit").show();
						//reseteo el formulario según el error y muestro en un div flotante
					}	
					if(data.e==1){////detectado mail injection, mala cosa
						 $("#error_fieldset_legend").html('<div style="'+buttonstyle+'" >'+data.error+'</div>');	
						 $("#error").html('Atenci&oacute;n! Se ha detectado una acci&oacute;n no permitida.');
						 $("#error_fieldset").show('slow');
					}
					if(data.e==2 || data.e==3){////si ha enviado el mail o ha guardado en mysql lo damos como correcto
						$("#error_fieldset_legend").html('<div style="'+buttonstyle+'">Formulario enviado correctamente</div>'+nuevocomentario+' <div style="cursor:pointer; display:inline;" onclick="$(\'#ins_loading\').show();">&nbsp;</div>');
						 //$("#error").html(nuevocomentario);
						$("#error_fieldset").show('slow');
						return true;
					}
					if(data.e==4 ){//error en todo!!!!!! no se han guardado los datos ni se ha enviado el email
						 $("#error_fieldset_legend").html('<div style="'+buttonstyle+'background-color:red;font-weight:bold;">Fall&oacute; el env&iacute;o del mensaje</div>');	
						 $("#error").html('<div style="'+buttonstyle+'" onclick="$(\'#ins_loading\').show();">Ver detalles</div>');
						 $("#error_fieldset").show('slow');
					}					
			}else{
				//Cargo el preloader con la salida y muestro al usuario un ok
			$("#error_fieldset_legend").html('<div style="'+buttonstyle+'">Formulario enviado correctamente</div> '+nuevocomentario+' <div style="cursor:pointer; display:inline;" onclick="$(\'#ins_loading\').show();">&nbsp;</div>');
			$("#error_fieldset").show('slow');				
			preloader(2,data)
				 }
		return false;
}

/*Aquí sólo el estado del formulario*/
function reset_formulario(e,err){
//e=0	oculta botones para el preload; e=1	nuevo mensaje; e=2	nuevo formulario; 
	if(e==0){//Ha pasado la validación javascript, oculta botones y el control pasa a successFunct(msg)
		$("#Submit").hide();
		$("#error_fieldset").hide();
		 habilitarCampos(0);
		 return false;
	}
	
	if(e==1){//oculta el preloader y vacía los campos intro id_categoria y el aviso para nuevo mensaje
		$("#Submit").show('slow');	
		preloader(0,0);
		$('#intro').val('');
		$("#categoria option[value='']").attr('selected', 'selected');
		$("#error_fieldset").hide();
		 habilitarCampos(1);
		 return true;
	}
	if(e==2){//successFunct(msg) ha dado un error, err me dice cual ha sido el fallo
		//err->	false=error javascript, 0=fallo validacion php 1=mail injection 2=error sql 3=Fallo en el mailer
		if(err==0){//el validador javascript ha fallado, muestro los errores y salgo
					$("#Submit").show('slow');	//oculta el preloader y restaura elformulario
					//preloader(0,0);
					habilitarCampos(1);
					return false;
			}
		if(err==1){//detectado mail injection, mala cosa
					$("#Submit").hide();
					habilitarCampos(0);
					return false;
			}
		if(err==2){//error sql, pero el mail se ha enviado.
					habilitarCampos(1);	
					return false;
			}
		if(err==3){//error en la funci&oacute;n mail, pero los datos se han guardado
					$("#Submit").hide();
					habilitarCampos(0);		
					return false;
			}
		if(err==4){//error en todo!!!!!! no se han guardado los datos ni se ha enviado el email
					$("#Submit").hide();
					habilitarCampos(0);	
					return false;
			}			
	}
	

}


function habilitarCampos(e){
var el = new Array('#nombre', '#telefono','#email','#id_categoria','#intro','#code','#agree');
	for(i=0;i<el.length;i++){
		if(e==0) 	
			$(el[i]).attr('disabled','disabled');
		else 
			$(el[i]).removeAttr("disabled");
	}
	return true;
}

function preloader(val,data){
	$("#ins_loading").hide();
		var out='';

		if(val==0){$("#ins_loading").html(''); return false;}
		if(val==1){
				var out='<img border="0" style="float:left; border:0" width="14" align="baseline" src="./img/loading.gif"  hspace="0" vspace="0" onclick="reset_formulario(1,false)" />Enviando datos';
				$("#ins_loading").html('<div '+loadingstyle+'>'+out+'</div>');
				$("#ins_loading").show();
				
				return false;
		}
		if(val==2){//el formulario se ha enviado correctamente y aviso al destinatario
				out=out+'<b>FORMULARIO ENVIADO CORRECTAMENTE</b><br \>';
				$.each(data,function(k,v){
				if(k!='code' && k!='codemd5' && k!='agree' && k!='intro' && k!='id')out=out+k+': '+v+'<br \>';
				if(k=='intro'){
					out=out+'Comentario:'
					out=out+'<div id="categorias" style=" list-style:none;height:110px; width:300px;overflow-y:scroll;border:#ccc 1px solid;">'
					out=out+'<div style="font-size:0.8em">'+v+'</div>';
					out=out+'</div>';
					}
				if(k=='id')out=out+'N&uacute;mero de referencia: '+v+'<br \>';
				});
			
				out=out+botonclosepreloader;
				$("#ins_loading").html('<div '+loadingstyle+'><p>'+out+'</p></div>');		
		}
		if(val==3){//hay algún error y mostramos la salida en el div
				out=out+'<b>ERROR AL PROCESAR EL FORMULARIO</b><br \>';
				out=out+'<b>Error: '+data.error+'</b><br \>';
				$.each(data,function(k,v){
					if(data[k]!=data.error && data[k]!=data.e) out=out+v+'<br \>';
				});
			if( data.e==0 || data.e==2 ||  data.e==4)out=out+'<br \>'+tryagain;	
				//out=out+'</ br></ br>'+botonclosepreloader;
			$("#ins_loading").html('<div '+loadingstyle+'><p>'+out+'</p></div>');	
		}
		//window.scrollTo(0,300);
}

function validar_formulario(){
var error=new Array();	
var i=0;
var formulario=document.forms['formulario'];
if(formulario.nombre.value==''){
error[i]='El campo nombre es obligatorio'; i++;
formulario.nombre.style.borderColor='red';
}else{
formulario.nombre.style.borderColor='';
}

if(formulario.email.value==''){
error[i]='El campo email es obligatorio'; i++;
formulario.email.style.borderColor='red';
}else{
		if(!validarEmail(formulario.email.value)){
		error[i]='El email parece no ser v&aacute;lido'; i++;
		formulario.email.style.borderColor='red';
		}else{
		formulario.email.style.borderColor='';
		}
}
/*
if(formulario.telefono.value==''){
error[i]='El campo tel&eacute;fono es obligatorio'; i++;
formulario.telefono.style.borderColor='red';
}else{
formulario.telefono.style.borderColor='';
}
*/
if(formulario.id_categoria.value==''){
error[i]='Por favor, seleccione asunto'; i++;
formulario.id_categoria.style.borderColor='red';
}else{
formulario.id_categoria.style.borderColor='';
}

if(formulario.intro.value==''){
error[i]='Por favor, complete la descripci&oacute;n del comentario'; i++;
formulario.intro.style.borderColor='red';
}else{
formulario.intro.style.borderColor='';
}

if(formulario.agree.checked==false){
error[i]='Por favor, acepte la pol&iacute;tica de privacidad'; i++;
formulario.agree.style.borderColor='red';
}else{
formulario.agree.style.borderColor='';
}

if(formulario.code.value===''){
error[i]='Por favor, introduzca el texto de seguridad de la imagen'; i++;
formulario.code.style.borderColor='red';
}else{
formulario.code.style.borderColor='';
}

if(formulario.code.value!=''){
hash = hex_md5(formulario.code.value.toLowerCase());
	if(hash!=formulario.codemd5.value){
		error[i]='El texto de seguridad de la imagen no coincide'; i++;
		formulario.code.style.borderColor='red';
	}else{
	formulario.code.style.borderColor='';
	}
}

 if(error.length!=0){
	 $("#error_fieldset_legend").html('<div style="background-color:red;text-align:center;color:white;display:inline;padding:3px 5px;">Errores en la validaci&oacute;n del formulario</div>');	
		var out='';
			for(i=0; i<error.length;i++){
			out=out+'<li style="color:red;">'+error[i]+'</li>';
			}
		$("#error").html(out);		
		$("#error_fieldset").show('slow');	
		habilitarCampos(1);
		return false;
	}else{
	$("#error_fieldset").hide();		
	return true;
	}
return false;
}

function validarEmail(valor) {
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)){
   
   return (true)
  } else {
   return (false);
  }
 }