Errorea gertatu da txantiloia prozesatzerakoan.
The following has evaluated to null or missing:
==> PlaceholderEmail  [in template "1369164#1369202#2266941" at line 47, column 64]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${PlaceholderEmail.getData()}  [in template "1369164#1369202#2266941" at line 47, column 62]
----
1<div class="hidden-xs hidden-sm resultadotesttourist" style="background: url('${ImagenFondo.getData()}');"> 
2    <div class="capa_negra_degradado_25"> 
3        <div class="capa_${ColorFondo.getData()}_80"> 
4            <div class="capa_degradado_${ColorFondo.getData()}_65"> 
5            <div class="capa_negra_mitad_20"> 
6            <div class="container"> 
7                <div class="izquierda col-md-8"> 
8                    <div class="arriba"> 
9                    <#if validator.equals("rojo",ColorFondo.getData())> 
10                    <a href="/touristorfriend_win"> 
11                    <#else> 
12                    <a href="/touristorfriend_discover"> 
13                    </#if> 
14                        <img src="${TouristOrFriend.getData()}"/> 
15                    </a> 
16                    </div> 
17                    <div class="abajo"> 
18                    <div class="col-md-3"> 
19                    <div class="columna_alta" id="columna_alta"> 
20                        <div class="parte1"> 
21                            <p><span id="porcentaje1" class="porcentaje"></span>${TextoColumnaTourist.getData()}</p> 
22                        </div> 
23                        <div class="parte2"> 
24                            <img src="${IconoTourist.getData()}"/> 
25                        </div> 
26                        <div class="parte3"></div> 
27                    </div>  
28                    </div> 
29                    <div class="col-md-3"> 
30                    <div class="columna_baja" id="columna_baja"> 
31                        <div class="parte1"> 
32                            <p><span id="porcentaje2" class="porcentaje"></span>${TextoColumnaFriend.getData()}</p> 
33                        </div> 
34                        <div class="parte2"> 
35                        </div> 
36                        <div class="parte3"></div> 
37                    </div>  
38                    </div> 
39                    <div class="col-md-5" id="textoDerecha"> 
40                        <p class="textoDerecha">${Texto100.getData()}</p> 
41                    </div> 
42                </div> 
43                </div> 
44                <div class="columnDer derecha centrar col-xs-12 col-sm-12 col-md-4"> 
45                    <div class="contBlanco color-gris1"> 
46                        <form method="POST" action="?" class="formularioInspiracion col-md-12" id="frmParticipar"> 
47                            <input type="email" placeholder="${PlaceholderEmail.getData()}" name="email" id="email" class="inputEmailInspiracion col-xs-12 col-sm-12 col-md-12" onchange="comprobarCampos();"> 
48                            <input placeholder="${PlaceholderNombre.getData()}" maxlength="100" name="nombre" id="nombre" class="inputEmailInspiracion col-xs-12 col-sm-12 col-md-12"> 
49                            <input placeholder="${PlaceholderApellido.getData()}" maxlength="100" name="apellidos" id="apellidos" class="inputEmailInspiracion col-xs-12 col-sm-12 col-md-12"> 
50                            <div> 
51            			        <input id="checkPrivacidad" value="ok" class="form-check-input col-xs-1 col-sm-1 col-md-1" type="checkbox" onchange="comprobarCampos();"> 
52            			        <label  onchange="comprobarCampos();" class="privacidad col-xs-11 col-sm-11 col-md-11">${CheckPoliticaPrivacidad.getData()}</label> 
53                            </div> 
54                            <div> 
55                                <input id="checkNoticias" value="ok" class="form-check-input col-xs-1 col-sm-1 col-md-1" type="checkbox"> 
56                                <label  class="suscripcion col-xs-11 col-sm-11 col-md-11">${CheckRecibirNoticias.getData()}</label> 
57                            </div> 
58                        <#if !validator.equals("",textoBases.getData())> 
59                            <#assign title = 'iytuc.campania.a.title.pdf'> 
60                            <a class="color-azul" id="enlaceBases" target="_blank" title="${languageUtil.format(locale, title, textoBases.enlaceBases.getData()?keep_after_last("/"))}" href="${textoBases.enlaceBases.getData()}"> 
61                                ${textoBases.getData()} 
62                            </a> 
63                        </#if> 
64                            <div id="captcha" class="g-recaptcha"></div> 
65                            <input value="${textoBoton.getData()}" id="submit" class="bntInspiracion col-xs-12 col-sm-12 col-md-12 bg-${ColorFondo.getData()}" type="submit" disabled > 
66                        </form> 
67                         
68                        <p class="col-md-12 lopd">${TextoDesplegable.getData()}</p> 
69                        <p class="lopdflecha"><span class="iytucicon icon-skip-Video"></span></p> 
70                         
71                    </div> 
72                </div> 
73                </div> 
74            </div> 
75            </div> 
76        </div> 
77    </div> 
78</div> 
79<div class="hidden-md hidden-lg resultadotesttouristmovil" style="background: url('${ImagenFondoMovil.getData()}');"> 
80    <div class="capa_negra_degradado_25"> 
81        <div class="capa_${ColorFondo.getData()}_80"> 
82            <div class="capa_degradado_${ColorFondo.getData()}_65"> 
83            <div class="capa_negra_mitad_20"> 
84            <div class="capa_blanca_60"> 
85            <div class="container"> 
86                <div class="touristorfriend"> 
87                    <#if validator.equals("rojo",ColorFondo.getData())> 
88                    <a href="/touristorfriend_win"> 
89                    <#else> 
90                    <a href="/touristorfriend_discover"> 
91                    </#if> 
92                        <img src="${TOFMovil.getData()}"/> 
93                    </a> 
94                </div> 
95                <div class="col-xs-12"> 
96                    <div class="col-xs-6"> 
97                    <div class="columna_alta_movil" id="columna_alta_movil"> 
98                        <div class="parte1"> 
99                            <p><span id="porcentaje1_movil" class="porcentaje">1%</span>${TextoColumnaTourist.getData()}</p> 
100                        </div> 
101                        <div class="parte2"> 
102                            <img src="${IconoTourist.getData()}"/> 
103                        </div> 
104                    </div>  
105                    </div> 
106                    <div class="col-xs-6"> 
107                    <div class="columna_baja_movil" id="columna_baja_movil"> 
108                        <div class="parte1"> 
109                            <p><span id="porcentaje2_movil" class="porcentaje">1%</span>${TextoColumnaFriend.getData()}</p> 
110                        </div> 
111                        <div class="parte2"> 
112                        </div> 
113                    </div>  
114                    </div> 
115                </div> 
116                <div class="texto_centrado col-xs-12"> 
117                    <p>${Texto100.getData()}</p> 
118                </div> 
119                <div class="columnDer centrar col-xs-12"> 
120                    <div class="contBlanco color-gris1"> 
121                        <form method="POST" action="?" class="formularioInspiracion col-xs-12" id="frmParticipar"> 
122                            <input type="email" placeholder="${PlaceholderEmail.getData()}" name="email" id="email" class="inputEmailInspiracion col-xs-12 col-sm-12 col-md-12" onchange="comprobarCampos();"> 
123                            <input placeholder="${PlaceholderNombre.getData()}" maxlength="100" name="nombre" id="nombre" class="inputEmailInspiracion col-xs-12 col-sm-12 col-md-12"> 
124                            <input placeholder="${PlaceholderApellido.getData()}" maxlength="100" name="apellidos" id="apellidos" class="inputEmailInspiracion col-xs-12 col-sm-12 col-md-12"> 
125                            <div> 
126            			        <input id="checkPrivacidad2" value="ok" class="form-check-input col-xs-1 col-sm-1 col-md-1" type="checkbox" onchange="comprobarCampos2();"> 
127            			        <label  class="privacidad col-xs-11 col-sm-11" >${CheckPoliticaPrivacidad.getData()}</label> 
128                            </div> 
129                            <div> 
130                                <input id="checkNoticias2"  onchange="comprobarCampos2();" value="ok" class="form-check-input col-xs-1 col-sm-1" type="checkbox"> 
131                                <label  class="suscripcion col-xs-11 col-sm-11">${CheckRecibirNoticias.getData()}</label> 
132                            </div> 
133                        <#if !validator.equals("",textoBases.getData())> 
134                            <#assign title = 'iytuc.campania.a.title.pdf'> 
135                            <a class="color-azul" id="enlaceBases" target="_blank" title="${languageUtil.format(locale, title, textoBases.enlaceBases.getData()?keep_after_last("/"))}" href="${textoBases.enlaceBases.getData()}"> 
136                                ${textoBases.getData()} 
137                            </a> 
138                        </#if> 
139                            <div id="captchamovil" class="g-recaptcha"></div> 
140                            <input value="${textoBoton.getData()}" id="submit2" class="bntInspiracion col-xs-12 col-sm-12 bg-${ColorFondo.getData()}" type="submit" disabled > 
141                        </form> 
142                         
143                        <p class="col-xs-12 lopdmovil">${TextoDesplegable.getData()}</p> 
144                        <p class="lopdflecha"><span class="iytucicon icon-skip-Video"></span></p> 
145                         
146                    </div> 
147                </div> 
148            </div> 
149            </div> 
150            </div> 
151            </div> 
152        </div> 
153    </div> 
154</div> 
155<script src='https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=${locale?substring(0, 2)}' async defer> 
156 
157</script> 
158 
159<script type="text/javascript"> 
160     
161    $('.lopd').click(function(e){ 
162        if($('.lopd').height() == 35){ 
163            $('.lopd').css("height", "100%"); 
164            $('.icon-skip-Video').css("transform", "rotate(180deg)"); 
165        }else{ 
166            $('.lopd').css("height", "35px"); 
167            $('.icon-skip-Video').css("transform", "rotate(0deg)"); 
168
169    }); 
170     
171    $('.icon-skip-Video').click(function(e){ 
172        if($('.lopd').height() == 35){ 
173            $('.lopd').css("height", "100%"); 
174            $('.lopdmovil').css("height", "100%"); 
175            $('.icon-skip-Video').css("transform", "rotate(180deg)"); 
176        }else{ 
177            $('.lopd').css("height", "35px"); 
178            $('.lopdmovil').css("height", "35px"); 
179            $('.icon-skip-Video').css("transform", "rotate(0deg)"); 
180
181    }); 
182     
183    $('.lopdmovil').click(function(e){ 
184        if($('.lopdmovil').height() == 35){ 
185            $('.lopdmovil').css("height", "100%"); 
186            $('.icon-skip-Video').css("transform", "rotate(180deg)"); 
187        }else{ 
188            $('.lopdmovil').css("height", "35px"); 
189            $('.icon-skip-Video').css("transform", "rotate(0deg)"); 
190
191    }); 
192 
193 
194    var onloadCallback = function() { 
195        
196        if($(window).width() > 400){ 
197            grecaptcha.render('captcha',{ 
198                'sitekey' : '6Lccj3QUAAAAACThnASoBySHyzOv4S7qP2KQHC8D', 
199                'size': 'normal', 
200                'expired-callback':comprobarCampos, 
201                'callback':comprobarCampos 
202            }); 
203        }else{ 
204            grecaptcha.render('captcha',{ 
205                'sitekey' : '6Lccj3QUAAAAACThnASoBySHyzOv4S7qP2KQHC8D', 
206                'size': 'compact', 
207                'expired-callback':comprobarCampos, 
208                'callback':comprobarCampos 
209            }); 
210
211        if($(window).width() > 400){ 
212            grecaptcha.render('captchamovil',{ 
213                'sitekey' : '6Lccj3QUAAAAACThnASoBySHyzOv4S7qP2KQHC8D', 
214                'size': 'normal', 
215                'expired-callback':comprobarCampos, 
216                'callback':comprobarCampos 
217            }); 
218        }else{ 
219            grecaptcha.render('captchamovil',{ 
220                'sitekey' : '6Lccj3QUAAAAACThnASoBySHyzOv4S7qP2KQHC8D', 
221                'size': 'compact', 
222                'expired-callback':comprobarCampos, 
223                'callback':comprobarCampos 
224            }); 
225
226    }; 
227    function comprobarCampos(){ 
228        var regex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; 
229         
230        if($("#checkPrivacidad").prop("checked") && $("#checkNoticias").prop("checked") && regex.test($("#email").val())&& grecaptcha.getResponse().length!= 0){ 
231            $("#submit").prop("disabled", false);     
232        }else{ 
233            $("#submit").prop("disabled", true); 
234
235
236     
237    function comprobarCampos2(){ 
238        var regex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; 
239         
240        if($("#checkPrivacidad2").prop("checked") && $("#checkNoticias2").prop("checked") && regex.test($("#email2").val())){ 
241            $("#submit2").prop("disabled", false);     
242            console.log("aaa"); 
243        }else{ 
244            $("#submit2").prop("disabled", true); 
245
246
247     
248    comprobarCampos(); 
249    comprobarCampos2(); 
250 
251    $('#submit').click(function(event) { 
252        event.preventDefault(); 
253         
254        var url = new URL(window.location.href); 
255        var tipoDispositivo = sessionStorage.getItem('tipoDispositivo'); 
256        var idioma = sessionStorage.getItem('idioma'); 
257        var email = $("#email").val(); 
258        var nombre = $("#nombre").val(); 
259        var apellidos = $("#apellidos").val(); 
260        var pais = sessionStorage.getItem('pais'); 
261        var codigoPais=sessionStorage.getItem('codigoPais'); 
262        var ciudad=sessionStorage.getItem('ciudad'); 
263        var origen=sessionStorage.getItem('origen'); 
264        var campania=sessionStorage.getItem('campania'); 
265        var medium=sessionStorage.getItem('medium'); 
266 
267 
268	    console.log( 
269	        "tipoDispositivo: "+tipoDispositivo+ 
270	        " || idioma: "+idioma+ 
271	        " || email: "+email+ 
272	        " || pais: "+pais+ 
273	        " || codigoPais: "+codigoPais+ 
274	        " || ciudad: "+ciudad+ 
275	        " || origen: "+origen+ 
276	        " || medium: "+medium+ 
277	        " || nombre: "+nombre+ 
278	        " || apellidos: "+apellidos+ 
279	        " || campania: "+campania); 
280	     
281 
282        Liferay.Service( 
283            '/campania.emailregistro/registrar-email-turismo', 
284
285                mail: email, 
286                idioma: idioma, 
287                pais: pais, 
288                codigoPais: codigoPais, 
289                ciudad: ciudad, 
290                origen: origen, 
291                campania: campania, 
292                tipoDispositivo: tipoDispositivo, 
293                fname: nombre, 
294                lname: apellidos, 
295                medium: medium 
296            }, 
297 
298            function(response) { 
299                var url_thankyou; 
300                if("${ColorFondo.getData()}"=="rojo"){ 
301                    url_thankyou="/${locale?substring(0, 2)}/touristorfriend_win_"; 
302
303                else{ 
304                    url_thankyou="/${locale?substring(0, 2)}/touristorfriend_discover_"; 
305
306                console.log(response); 
307                if(response=="success"){ 
308                    window.location.href = url_thankyou+"thankyou1"; 
309
310                else if(response=="email"){ 
311                    window.location.href = url_thankyou+"thankyou3#email"; 
312
313                else{ 
314                    window.location.href = url_thankyou+"thankyou3#error"; 
315
316
317        ); 
318    
319         
320    }); 
321    function decimalAdjust(type, value, exp) { 
322		// Si el exp es indefinido o cero... 
323		if (typeof exp === 'undefined' || +exp === 0) { 
324			return Math[type](value); 
325
326		value = +value; 
327		exp = +exp; 
328		// Si el valor no es un número o el exp no es un entero... 
329		if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) { 
330			return NaN; 
331
332		// Cambio 
333		value = value.toString().split('e'); 
334		value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp))); 
335		// Volver a cambiar 
336		value = value.toString().split('e'); 
337		return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp)); 
338
339 
340	// Redondeo decimal 
341	if (!Math.round10) { 
342		Math.round10 = function(value, exp) { 
343			return decimalAdjust('round', value, exp); 
344		}; 
345
346 
347    function getPorcentajeCorrectas() { 
348        var correctas = sessionStorage.getItem('correctas'); 
349        if (sessionStorage.getItem('correctas') == null){ 
350            correctas=0 
351
352        else{ 
353            correctas = parseInt(sessionStorage.getItem('correctas')); 
354
355        var total = parseInt(sessionStorage.getItem('total')); 
356        if(correctas>total){ 
357            correctas=total; 
358
359        var porcentaje_correctas=Math.round10(correctas/total*100, 1); 
360        var porcentaje_incorrectas=Math.round10(100-porcentaje_correctas, 1); 
361        console.log(porcentaje_correctas+"%"); 
362        console.log(porcentaje_incorrectas+"%"); 
363 
364        $("#porcentaje1").text(porcentaje_incorrectas+"%"); 
365        $("#porcentaje2").text(porcentaje_correctas+"%"); 
366        $("#columna_baja").height(porcentaje_correctas*2.5+120).css("margin-top", (porcentaje_incorrectas-porcentaje_correctas)*2.5); 
367        $("#columna_baja .parte2").height(porcentaje_correctas*2.5); 
368        $("#columna_alta").height(porcentaje_incorrectas*2.5+120); 
369        $("#columna_alta .parte2").height(porcentaje_incorrectas*2.5); 
370        $("#textoDerecha").height(porcentaje_incorrectas*2.5+120); 
371 
372        $("#porcentaje1_movil").text(porcentaje_incorrectas+"%"); 
373        $("#porcentaje2_movil").text(porcentaje_correctas+"%"); 
374        if(porcentaje_incorrectas==100){ 
375           $("#porcentaje1_movil").css("margin", "0px 5px"); 
376           $(".textoDerecha").text("${Texto100.getData()}"); 
377           $(".textoCentrado p").text("${Texto100.getData()}"); 
378
379        else if(porcentaje_incorrectas==70){ 
380           $(".textoDerecha").text("${Texto70.getData()}"); 
381           $(".textoCentrado p").text("${Texto70.getData()}"); 
382
383        $("#columna_baja_movil").height(porcentaje_correctas+50).css("margin-top", (porcentaje_incorrectas-porcentaje_correctas)); 
384        $("#columna_baja_movil .parte2").height(porcentaje_correctas); 
385        $("#columna_alta_movil").height(porcentaje_incorrectas+50); 
386        $("#columna_alta_movil .parte2").height(porcentaje_incorrectas); 
387         
388
389    getPorcentajeCorrectas(); 
390 
391</script>