PageSourceSearch

https://www.hotelalambique.com/templates/cadenas/air/js/scripts.js?_=202504220925

js hotelalambique.com collected 2026-10-04 14:03:38 UTC 154,606 bytes, 4,517 lines download raw bytes

1//'use strict';
2
3//* INIT GLOBALS *//
4// disable animations on resize
5var resizeTimer;
6window.onresize = function (e) {
7  var body = document.getElementsByTagName("BODY")[0];
8  body.classList.add("resize-on");
9  clearTimeout(resizeTimer);
10  resizeTimer = setTimeout(function () {
11    body.classList.remove("resize-on");
12  }, 250);
13};
14
15function getFormUrl() {
16  var url = (function (pathname) {
17    if (pathname.endsWith('.html')) return pathname.replace('.html', '/form.html');
18    return pathname + '/form';
19  })(window.location.pathname);
20
21  return url;
22}
23
24(function(o,$){
25  if( !o || !$ ) return false;
26  var $o = $(o);
27  $o.ready(function(){
28    $o.removeClass('hideBody');
29  });
30})(document.querySelector('body'),window.jQuery);
31
32(function( o, $, h ){
33  if( !o || !$ || !h ) return false;
34
35  var lis = o.querySelectorAll('.fn-listaLink .fn-listaLinkElement'),
36  listMenu = o.querySelector('.sta-menus-air_links-wrapper');
37  for (var i = 0; i < lis.length; i++) {
38    (function( li, $li ){
39      
40      //enlaces _blank
41      var as = li.querySelectorAll('a');
42      for (var i = 0; i < as.length; i++) h.enlace_blank( $( as[i] ) );
43
44
45      if( $li.hasClass('sta-noChild') || !$('.fn-listaLinkHijos .sta-menus-air_links-element',$li).length )
46        $('.fn-listaLinkHijos',$li).remove();
47      
48      if ($li.hasClass("sta-child")) {
49        if (!$li.hasClass("sta-link")) {
50          $li.addClass("no_link");
51          $($li[0].querySelector("a")).removeAttr("href").attr("role", "button");
52        }
53      }
54
55    })( lis[i], $(lis[i]) );
56  };
57
58  //Scroll top
59  h.controlTop(o);
60  
61  // idiomas
62  (function ( o2 ) {
63    if( !o2 ) return false;
64    var input = o2.querySelector('input'),
65    body = document.querySelector('body'),
66    list = o2.querySelector('.sta-menus-air_languages-list').children,
67    listTotal = list.length;
68
69    if( listTotal > 1 ){
70      for (var i = list.length - 1; i >= 0; i--) {
71        (function( li ) {
72          var href1 = $( li.querySelector('a.sta-menus-air_element-btn') ).attr('href').substr(-10),
73          href2 = $( li.querySelector('a.sta-menus-air_element-btn') ).attr('href').substr(-6);
74          if( href1 == '/index.php' || href2 == '/.html' ){
75            li.remove();
76            listTotal--;
77          };
78        })( list[i] );
79      };
80
81      if( listTotal > 1 ){
82        o2.onclick = function () {
83          input.checked = !input.checked;
84
85          //control de z-index for dispo
86          input.checked
87          ? o.classList.add("sta-indexDispo")
88          : o.classList.remove("sta-indexDispo");
89          
90
91          if (window.innerWidth < 1280) {
92            if (!o.querySelector('.sta-menus-air_nav-links').classList.contains('fn-open')) {
93              if ( body.classList.contains('noscroll')) {
94                body.classList.remove('noscroll');
95              } else {
96                body.classList.add('noscroll');
97              }
98            } else {
99              o.querySelector('.sta-menus-air_nav-links').classList.remove('fn-open');
100              o.classList.remove('sta-openMenu');
101              o.querySelector('.sta-menus-air_nav-btns-element.js-toggle-menu').classList.remove('fn-close');
102            }
103          } else {
104            if (o.querySelector('.sta-menus-air_nav-links').classList.contains('fn-open')) {
105              body.classList.add('noscroll');
106            } else {
107              body.classList.remove('noscroll');
108            }
109          }
110        };
111
112        //add idioma in menu
113        if( window.innerWidth <= 500 ){
114          var $btn = $('<div></div>',{class:'sta-menus-air_links-element-wrapper'})
115          .append( $('<p></p>',{class:'sta-menus-air_links-element-text'}).text( $(o2).data('text-menu') ) ),
116          $li = $('<li></li>',{class:'sta-menus-air_links-element sta-idiomasMenu js-menu-placeholder fn-listaLinkElement'}).append( $btn );
117  
118          $(listMenu).append( $li );
119          $btn.click(function(){
120            o2.click();
121          });
122        }
123
124      } else {
125        o2.classList.add('sta-notIdiomas')
126      };
127    } else {
128      o2.classList.add('sta-notIdiomas');
129    };
130
131  })( o.querySelector('.sta-menus-air_nav-morebtns-element.sta-lang') );
132
133  //telefonos
134  (function( o2,seo ){
135    if( !o2 || !seo || !seo.hotel ) return false;
136
137    var bTel = false,
138    $lista = $( o2.querySelector('.sta-menus-air_morebtns-element-hover') );
139
140    if( seo.hotel.tel && seo.hotel.tel.trim() ){
141      $lista.append( $('<a></a>',{id: 'td-d1-telefonosuperior-03', href : 'tel:' + seo.hotel.tel.replace(/\s/g,'') }).text( seo.hotel.textTel ? seo.hotel.textTel : seo.hotel.tel ) );
142      bTel = true;
143    }
144    if( seo.hotel.tel2 && seo.hotel.tel2.trim() ){
145      $lista.append( $('<a></a>',{id: 'td-d1-telefonosuperior-04', href : 'tel:' + seo.hotel.tel2.replace(/\s/g,'') }).text( seo.hotel.text2Tel ? seo.hotel.text2Tel : seo.hotel.tel2 ) );
146      bTel = true;
147    }
148    if( seo.hotel.whatsapp && seo.hotel.whatsapp.trim() ){
149      $lista.append( $('<a></a>',{id: 'td-d1-telefonosuperior-05', target:'_blank', href:'https://api.whatsapp.com/se
149nd/?phone=' + seo.hotel.whatsapp.replace(/\s/g,'') + '&text&app_absent=0' }).text( '+' + seo.hotel.whatsapp ).addClass('sta-whatsapp') );
150      bTel = true;
151    }
152    if( !bTel ) o2.remove();
153
154  })( o.querySelector('.sta-menus-air_nav-morebtns-element.sta-tels'), window.dataSeo );
155
156  // function check menu reserva existe
157  var bookBtn = o.querySelectorAll('.sta-scroll-book'),
158    menu = o.querySelector('.sta-menus-air_nav-btns-element.js-toggle-menu'),
159    menuDiv = o.querySelector('.sta-main-links'),
160    body = document.querySelector('body');
161
162  if (bookBtn && menu && menuDiv) {
163
164    for (var i = 0; i < bookBtn.length; i++) {
165      (function(btn){
166
167        btn.addEventListener('click', function () {
168          var clase = 'fn-open',
169            clase2 = 'fn-close',
170            clase3 = 'noscroll';
171    
172          if (menuDiv.classList.contains(clase)) {
173            menuDiv.classList.remove(clase);
174          }
175          if (menu && menu.classList.contains(clase2)) {
176            menu.classList.remove(clase2);
177          }
178          if (body.classList.contains(clase3)) {
179            body.classList.remove(clase3);
180          }
181        });
182
183      })(bookBtn[i])
184      
185    }
186
187  }
188
189})(document.querySelector('.tgl-menus-air'), window.jQuery, window.hotusa && hotusa());
190
191//create html galleryV1
192(function( o, $, json, h ){
193  if( !o || !$ || !json || !h ) return false;
194
195  var createImg = function( obj ){
196    var alt = obj.text ? nameHotel + obj.text : nameHotel + obj.zone + ' '+ (obj.posi+1),
197    str = '<div class="sta-gallery-air_mosaic-element" data-zone="' + obj.zone + '">' +
198      '<div class="sta-gallery-air_mosaic-element-wrapper">' +
199        '<a href="'+obj.imgG+'" aria-label="'+alt+'" data-lightbox="all">' +
200          '<div class="sta-gallery-air_mosaic-multimedia">' +
201            '<figure class="sta-gallery-air_mosaic-photo" data-lazyimg="'+obj.imgP+'" role="img" aria-label=""></figure>' +
202          '</div>' +
203          '<div class="sta-gallery-air_mosaic-info">';
204          if( obj.text ) str+= '<p class="sta-gallery-air_mosaic-info-title">' + obj.text + '</p>';
205          str += '<i class="sta-gallery-air_mosaic-info-icon icon-zoom"></i>' +
206          '</div>' +
207        '</a>' +
208      '</div>' +
209    '</div>';
210    return str;
211  },
212  nameHotel = window.dataSeo && dataSeo.hotel && dataSeo.hotel.name && dataSeo.hotel.name.trim() ? dataSeo.hotel.name.trim() + ' - ' : '',
213  $content = $( o.querySelector('.sta-gallery-air_mosaic-list') );
214
215  //multigalery
216  for (var i = 0; i < json.length; i++) {
217    (function(zona, nameZone){
218      for (var i2 = 0; i2 < zona.photos.length; i2++) {
219        $content.append( createImg( { zone : nameZone, imgG : zona.photos[i2].url, imgP : zona.photos[i2].url, text : zona.photos[i2].name, posi:i2 } ) );
220      };
221    })( json[i], encodeURI(json[i].name) );
222  };
223
224  loadScript('/templates/cadenas/air/js/gallery.min.js',new Function);
225
226})( document.querySelector('.fn-galleryV1'), window.jQuery, window.json_multiGalerias, window.hotusa && hotusa() );
227
228//create html galleryV2
229(function( o, $, json, h ){
230  if( !o || !$ || !json || !h ) return false;
231
232  $('main').addClass('sta-init-space');
233
234  var createImg = function( obj ){
235    var alt = obj.text ? nameHotel + obj.text : nameHotel + obj.zone + ' '+ (obj.posi+1),
236    str = '<div class="sta-gallery-air_sideboard-element" tabindex="0">' +
237      '<div class="sta-gallery-air_sideboard-element-wrapper">' +
238        '<a href="'+obj.imgG+'" aria-label="'+alt+'" data-lightbox="' + obj.zone + '">' +
239          '<figure class="sta-gallery-air_sideboard-element-photo" data-lazyimg="'+obj.imgP+'" role="img" aria-label=""></figure>' +
240        '</a>' +
241      '</div>' +
242    '</div>';
243    return str;
244  },
245  nameHotel = window.dataSeo && dataSeo.hotel && dataSeo.hotel.name && dataSeo.hotel.name.trim() ? dataSeo.hotel.name.trim() + ' - ' : '',
246  $clone = $( o.querySelector('.sta-bckp') ).clone().removeClass('sta-bckp'),
247  $content = $( o.querySelector('.sta-gallery-air_highlights') );
248
249  $( o.querySelector('.sta-bckp') ).remove();
250
251  //evitar bug de slick
252  (function() {
253    var arr = [];
254    for (var i = 0; i < json.length; i++) {
255      if(json.length && json[i].photos.length){
256        while (json[i].photos.length < 7) {
257          json[i].photos = json[i].photos.concat( json[i].photos );
258        }
259      } else {
260        arr.push(json[i]);
261      }
262    }
263    for (var i2 = 0; i2 < arr.length;
263 i2++) json.splice( json.indexOf(arr[i2]) , 1);
264  })();
265
266  //multigalery
267  for (var i = 0; i < json.length; i++) {
268    (function( zona ){
269      var $html = $clone.clone();
270      if( zona.id ) $html.addClass('scroll-anchor_'+zona.id);
271      $('.sta-gallery-air_sideboard-header-title',$html).text( zona.name ),
272      $contentImg = $('.sta-gallery-air_sideboard-list-container',$html);
273
274      for (var i2 = 0; i2 < zona.photos.length; i2++) {
275        $contentImg.append( createImg( { zone : encodeURI( zona.name ), imgG : zona.photos[i2].url, imgP : zona.photos[i2].url, text : zona.photos[i2].name, posi:i2 } ) );
276      };
277
278      $content.append( $html );
279    })( json[i] );
280  };
281
282  loadScript('/templates/cadenas/air/js/gallery.js',new Function);
283
284})( document.querySelector('.fn-galleryV2'), window.jQuery, window.json_multiGalerias, window.hotusa && hotusa() );
285
286//create html galleryV3
287(function( o, $, json, h ){
288  if( !o || !$ || !json || !h ) return false;
289
290  $( document.querySelector('.tgl-internbar-air') ).addClass('sta-desktop-static');
291
292  var createImg = function( obj ){
293    var alt = obj.text ? nameHotel + obj.text : nameHotel + obj.zone + ' '+ (obj.posi+1),
294    str = '<div class="sta-gallery-air_sideboard-element" tabindex="0" data-zone="' + obj.zone + '">' +
295      '<div class="sta-gallery-air_sideboard-element-wrapper">' +
296        '<a href="'+obj.imgG+'" aria-label="'+alt+'" data-lightbox="all">' +
297          '<figure class="sta-gallery-air_sideboard-element-photo" data-lazyimg="'+obj.imgP+'" role="img" aria-label=""></figure>' +
298        '</a>' +
299      '</div>' +
300    '</div>';
301    return str;
302  },
303  nameHotel = window.dataSeo && dataSeo.hotel && dataSeo.hotel.name && dataSeo.hotel.name.trim() ? dataSeo.hotel.name.trim() + ' - ' : '',
304  $content = $( o.querySelector('.sta-gallery-air_sideboard-list-container') );
305
306  //multigalery
307  for (var i = 0; i < json.length; i++) {
308    (function(zona, nameZone){
309      for (var i2 = 0; i2 < zona.photos.length; i2++) {
310        $content.append( createImg( { zone : nameZone, imgG : zona.photos[i2].url, imgP : zona.photos[i2].url, text : zona.photos[i2].name,posi:i2 } ) );
311      };
312    })( json[i], encodeURI(json[i].name) );
313  };
314
315  loadScript('/templates/cadenas/air/js/gallery.min.js',new Function);
316
317})( document.querySelector('.fn-galleryV3'), window.jQuery, window.json_multiGalerias, window.hotusa && hotusa() );
318
319//create html internbar in gallery
320(function( o, $, json ){
321  if( !o || !$ || !json ) return false;
322
323  var $o = $(o),
324  createLi = function(obj){
325    //obj = {text : "Habitacion", zone : "room", video:"asda"}
326
327    if( obj.zone ) return '<div class="sta-internbar-air_links-element js-filter-gallery" data-zone_selector="' + obj.zone + '" role="button" tabindex="0"><h2 class="sta-internbar-air_element-text">' + obj.text + '</h2></div>';
328    if( obj.video ) return '<div class="sta-internbar-air_links-element js-video-gallery" data-video="https://www.youtube.com/embed/' + obj.video + '" role="button" tabindex="0"><h2 class="sta-internbar-air_element-text">' + copyVideo + '</h2></div>';
329    if( obj.videoW ) return '<div class="sta-internbar-air_links-element js-video-gallery" data-video="https://fast.wistia.net/embed/iframe/' + obj.videoW + '" role="button" tabindex="0"><h2 class="sta-internbar-air_element-text">' + copyVideo + '</h2></div>';
330  },
331  $contentLinks = $( o.querySelector('.sta-internbar-air_links') ),
332  copyVideo = $o.data('traduvideo');
333
334  for (var i = 0; i < json.length; i++) {
335    if( json_multiGalerias[i].video || json_multiGalerias[i].videoW ){
336      $contentLinks.append( createLi( { video : json_multiGalerias[i].video, videoW : json_multiGalerias[i].videoW } ) );
337    } else {
338      $contentLinks.append( createLi( { text : json[i].name, zone : encodeURI(json_multiGalerias[i].name) } ) );
339    }
340  };
341
342  $o.removeClass('staOculto');
343
344})( document.querySelector('.fn-internbarGallery'), window.jQuery, window.json_multiGalerias );
345
346//create html carrusel
347(function( json, $ ){
348  if( !json || !$ ) return false;
349  var createDivs = function( arr ){
350    var str = '';
351    for (var i = 0; i < arr.length; i++) {
352      str += "<div class='sta-carousel-air_multimedia-element'>" +
353        "<figure class='sta-carousel-air_multimedia-photo' role='img' aria-label='' data-lazyimg='" + arr[i].url + "'></figure>" +
354      "</div>";
355    };
356    return str;
357  }
358  for (var i = 0; i < json.length; i++) {
359    (function( elem ){
360      var $o = $( document.querySelectorAll('.'+elem.o) );
361      if( !$o.length || !elem.imgs.length ) return false;
362      $o.html( createDivs(elem.imgs) );
363    })( json[i] );
364  };
365})( window.json_carrusel, window.jQuery );
366
367//create html slate lineal
368(function( json, $ ){
369  if( !json || !$ ) return false;
370  var createDivs = function( arr, galleryID ){
371    var str = '',
372    alt = window.dataSeo && dataSeo.hotel && dataSeo.hotel.name && dataSeo.hotel.name.trim() ? (dataSeo.hotel.name.trim() + ' - ') : '';
373    alt += 'Gallery ';
374
375    for (var i = 0; i < arr.length; i++) {
376      str += "<div class='sta-slate-air_element'>"
377        + "<div class='sta-slate-air_element-box'>"
378          + "<a href='"+arr[i].url+"' aria-label='"+alt+(i+1)+ "' data-lightbox='gallery"+galleryID+"'>"
379            + "<div class='sta-slate-air_element-multimedia'>"
380              + "<figure class='sta-slate-air_multimedia-photo' role='img' aria-label='' data-lazyimg='"+arr[i].url+"'></figure>"
381            +" </div>"
382          + "<div class='sta-slate-air_element-info'>";
383
384      if( arr[i].name && arr[i].name.trim() ) str += "<p class='sta-slate-air_info-title'>"+arr[i].name+"</p>";
385      
386      str += "</div></a></div></div>";
387    };
388    return str;
389  }
390  for (var i = 0; i < json.length; i++) {
391    (function( elem ){
392      var $o = $( document.querySelectorAll('.'+elem.o) );
393      if( !$o.length || !elem.imgs.length ) return false;
394      $o.html( createDivs(elem.imgs, elem.o.split('_')[1]) );
395            if( $o.closest('.tgl-slate-air').hasClass('sta-big-img') ){
396        $o.closest('.tgl-slate-air')
397          .attr('data-slides_pc', '1')
398          .attr('data-slides_tablet', '1')
399          .attr('data-slides_mobile', '1');
400      }
401
402    })( json[i] );
403  };
404})( window.json_slateLineal, window.jQuery );
405
406//create html slate Cuadrado
407(function( json, $ ){
408  if( !json || !$ ) return false;
409  var createDivs = function( arr, isOnePerSlide ){
410    var str = '',
411    alt = window.dataSeo && dataSeo.hotel && dataSeo.hotel.name && dataSeo.hotel.name.trim() ? (dataSeo.hotel.name.trim() + ' - ') : '',
412    initColumn = true,
413    par = false,
414    resto = arr.length % 2,
415    isMobile = window.innerWidth < 769; // Detectar móvil
416    alt += 'Gallery ';
417
418    for (var i = 0; i < arr.length; i++) {
419
420      // Si tiene clase sta-one Y es móvil, cada imagen es un slide individual
421      if( isOnePerSlide && isMobile ){
422        str += "<div class='sta-slate-air_element sta-mobile-single'>";
423        str += "<div class='sta-slate-air_element-box'>";
424      } else {
425        // En desktop/tablet o sin sta-one, agrupar de 2 en 2
426        if( initColumn && par ){
427          par = false;
428          str += "<div class='sta-slate-air_element sta-impar'>"
429        } else if( initColumn ){
430          par = true;
431          str += "<div class='sta-slate-air_element sta-par'>";
432        };
433
434        //last
435        if( arr.length-1 == i && !!resto ) str += "<div class='sta-slate-air_element-box sta-lastImage_"+resto+"'>";
436        //default
437        else str += "<div class='sta-slate-air_element-box'>";
438      }
439
440      str += "<a href='"+arr[i].url+"' aria-label='"+alt+(i+1)+ "' data-lightbox='gallery2'>"
441        + "<div class='sta-slate-air_element-multimedia'>"
442          + "<figure class='sta-slate-air_multimedia-photo' role='img' aria-label='' data-lazyimg='"+arr[i].url+"'></figure>"
443        + "</div>"
444        + "<div class='sta-slate-air_element-info'>";
445
446      if( arr[i].name && arr[i].name.trim() ) str += "<p class='sta-slate-air_info-title'>"+arr[i].name+"</p>";
447
448      str += "</div></a></div>";
449
450      // Cerrar el elemento
451      if( isOnePerSlide && isMobile ){
452        str += "</div>";
453      } else {
454        if( !initColumn ) str += "</div>";
455        initColumn = !initColumn;
456      }
457    };
458
459    if( !(isOnePerSlide && isMobile) && initColumn ) str += "</div>";
460
461    return str;
462  }
463  for (var i = 0; i < json.length; i++) {
464    (function( elem ){
465      var $o = $( document.querySelectorAll('.'+elem.o) );
466      if( !$o.length || !elem.imgs.length ) return false;
467      // Detectar si el contenedor padre tiene la clase sta-one
468      var hasStaOne = $o.closest('.sta-one').length > 0;
469      $o.html( createDivs(elem.imgs, hasStaOne) );
470    })( json[i] );
471  };
472})( window.json_slateCuadrado, window.jQuery );
473
474
475
476//create html slate Mosaico
477(function( json,$ ){
478  if( !json || !$ ) return false;
479  var createDivs = function( arr , galleryID){
480    var str = '',
481    alt = window.dataSeo && dataSeo.hotel && dataSeo.hotel.name && dataSeo.hotel.name.trim() ? (dataSeo.hotel.name.trim() + ' - ') : '',
482    initColumn = true,
483    resto = arr.length % 3,
484    par = false,
485    endColumn = false;
486    alt += 'Gallery ';
487
488    for (var i = 0; i < arr.length; i++) {
489      initColumn = i % 3 == 0;
490      endColumn = (i+1) % 3 == 0;
491
492      if( initColumn && par ){
493        par = false;
494        str += "<div class='sta-slate-air_element sta-impar'>"
495      } else if( initColumn ){
496        par = true;
497        str += "<div class='sta-slate-air_element sta-par'>";
498      };
499
500      //last
501      if( arr.length-1 == i && !!resto ) str += "<div class='sta-slate-air_element-box sta-lastImage_"+resto+"'>";
502      //penultimate
503      else if( arr.length-2 == i && !!resto ) str += "<div class='sta-slate-air_element-box sta-penulImage_"+resto+"'>";
504      //default
505      else str += "<div class='sta-slate-air_element-box'>";
506
507      str += "<a href='" + arr[i].url + "' aria-label='" + alt + (i + 1) +
508      "' data-lightbox='gallery"+galleryID+"'>"
509      + "<div class='sta-slate-air_element-multimedia'>"
510      + "<figure class='sta-slate-air_multimedia-photo' role='img' aria-label='' data-lazyimg='" + arr[i].url + "'></figure>"
511      + "</div>"
512      + "<div class='sta-slate-air_element-info'>";
513
514      if( arr[i].name && arr[i].name.trim() ) str += "<p class='sta-slate-air_info-title'>"+arr[i].name+"</p>";
515
516      str += "</div></a></div>";
517
518      if( endColumn ) str += "</div>";
519
520    };
521
522    if( endColumn ) str += "</div>";
523
524    return str;
525  }
526  for (var i = 0; i < json.length; i++) {
527    (function( elem ){
528      var $o = $( document.querySelectorAll('.'+elem.o) );
529      if( !$o.length || !elem.imgs.length ) return false;
530      $o.html( createDivs(elem.imgs, elem.o.split('_')[1]) );
531    })( json[i] );
532  };
533})( window.json_slateMosaico, window.jQuery );
534
535
536
537var putCoverArrow =(function(cover, alertas, $){
538  if( !cover || !$ ) return new Function();
539  //altura alertas
540  return function(){
541    var h_total = (window.innerWidth < 1024) ? 70 : 0;
542    // if(!alertas.length) return h_total; 
543    for (var i = 0; i < alertas.length; i++){
544      if($(alertas[i]).css('display') !== 'none'){
545        h_total += $(alertas[i]).outerHeight();
546      }
547    }
548    //damos altura
549    $(cover).css('min-height','calc(100vh - ' + h_total + 'px)');
550  };
551  
552}
552)( document.querySelector('.tgl-cover-air'), document.querySelectorAll('.tgl-avisos-air'), window.jQuery );
553
554(function ( o,m,$ ) {
555  if( !o || !m || !$ ) return false;
556
557  $(m).addClass('sta-logoOff_top');
558  
559})( document.querySelector('.tgl-cover-air.sta-logo_center'), document.querySelector('.tgl-menus-air.sta-logo-center'), window.jQuery );
560
561//class with internabar
562(function( o, m, $){
563  if( !o || !m || !$ ) return false;
564
565  if( !o.querySelector('.sta-internbar-air_links .sta-internbar-air_links-element') ){
566    o.remove()
567    return false;
568  };
569
570  // $(m).addClass('sta-init-space sta-internbar-space-responsive');
571})( document.querySelector('.tgl-internbar-air'), document.querySelector('main'), window.jQuery );
572
573//first module
574(function( m, $){
575
576  var arr = [
577    'main.global-container > .tgl-breadcrumbs-air:nth-child(2)',
578    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-breadcrumbs-air',
579    'main.global-container > .tgl-intro-air:nth-child(2)',
580    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-intro-air',
581    'main.global-container > .tgl-cardpage-air:nth-child(2)',
582    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-cardpage-air',
583    'main.global-container > .tgl-carousel-air:nth-child(2)',
584    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-carousel-air',
585    'main.global-container > .tgl-enginepage-air:nth-child(2)',
586    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-enginepage-air',
587    'main.global-container > .tgl-internbar-air:nth-child(2)',
588    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-internbar-air',
589    'main.global-container > .linkComprarBonos:nth-child(2)',
590    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .linkComprarBonos',
591    'main.global-container > .tgl-bonoForm:nth-child(2)',
592    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-bonoForm',
593    'main.global-container > .tgl-bonoConfirm:nth-child(2)',
594    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-bonoConfirm',
595    'main.global-container > .tpl-voucher-confirmation:nth-child(2)',
596    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tpl-voucher-confirmation',
597    'main.global-container > .tgl-motor-air:nth-child(2)',
598    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-motor-air',
599    'main.global-container > .tgl-missingYou:nth-child(2)',
600    'main.global-container > .tgl-devicesheader-air:nth-child(2) + .tgl-missingYou',
601    'main.global-container > section[class^="modulo404"]',
602    'main.global-container > .press-post:nth-child(2)',
603    'main.global-container > .new-gallery:nth-child(2)',
604    'main.global-container > .event-rooms:nth-child(2)',
605
606    'main.global-container > .products-module:nth-child(2)',
607    'main.global-container > .room-module-bg:nth-child(2)',
608    'main.global-container > .rooms-listing-v2-bg:nth-child(2)',
609    'main.global-container > .rooms-listing-bg:nth-child(2)',
610    'main.global-container > .rooms-listing-v3-bg:nth-child(2)',
611    'main.global-container > .blog-post:nth-child(2)',
612    'main.global-container > .event-post:nth-child(2)',
613    'main.global-container > .ig-gallery:nth-child(2)',
614    'main.global-container > .blog-products:nth-child(2)',
615    'main.global-container > .event-products:nth-child(2)',
616    'main.global-container > .ec-multiple:nth-child(2)',
617    'main.global-container > .ec-slider:nth-child(2)',
618    'main.global-container > .products-hotels:nth-child(2)',
619    'main.global-container > .banner:nth-child(2)',
620    'main.global-container > .rsc:nth-child(2)',
621  ];
622
623  if( !document.querySelector( arr.join(',') ) || !m || !$ ) return false;
624
625  $(m).addClass('sta-init-space');
626
627})( document.querySelector('main.global-container'), window.jQuery );
628
629// regular tamaño de small footer
630(function(m, f){
631  if(!m || !f ) return false;
632
633  var minHeight = function(){
634    m.style.minHeight = 'calc(100vh - ' + f.clientHeight + 'px)';
635  };
636  
637  minHeight();
638  window.addEventListener('resize', minHeight);
639
640})( document.querySelector('main'), document.querySelector('footer') );
641
642// cardpage
643(function( a, $){
644  if( !a.length || !$ ) return false;
645
646  var ev = function(o){
647
648    var classNotImg = $(o).hasClass('sta-notImg'),
649    imgCont = o.querySelector('.sta-cardpage-air_multimedia'),
650    img = $( imgCont.querySelector('.sta-cardpage-air_multimedia-photo') ).data('lazyimg'),
651    cert = o.querySelector('.sta-cardpage-air_certificates'),
652    timeInput = o.querySelector('.sta-input input[type=time]'),
653    dateInput = o.querySelector('.sta-input input[type=date]');
654
655    if( classNotImg || !img ){
656      imgCont.remove();
657      $(o).addClass('sta-notImg');
658    };
659    
660    if( !cert ) return false;
661    
662    var cert_child = cert.querySelectorAll('.sta-cardpage-air_certificates-element');
663    for (var i = 0; i < cert_child.length; i++) {
664      (function( elem ){
665        var $a = $(elem.querySelector('a'));
666        if( !$a.attr('href').trim() ) $( elem ).html( $a.html() );
667      })( cert_child[i] );
668    };
669    if( timeInput ){
670      timeInput.addEventListener('focus', function(){
671        this.showPicker();
672      },false);
673    }
674    if( dateInput ){
675      dateInput.addEventListener('focus', function(){
676        this.showPicker();
677      },false);
678    }
679  };
680
681  for (var i = 0; i < a.length; i++) ev(a[i]);
682
683})( document.querySelectorAll('.tgl-cardpage-air'), window.jQuery );
684
685
686//formJson
687(function (form, h, array) {
688  if (!form || !h) return false;
689
690  if (!Array.isArray(array) || !array.length) {
691    console.trace('ERROR: Json is not defined', array);
692    return false;
693  }
694
695var valid = function () {
696  var send = true,
697    e_empty = false,
698    e_mail = false,
699    e_poli = false;
700
701  obj.error.o.textContent = '';
702  obj.error.o.classList.remove('invalid', 'ok');
703
704  //obligatorios
705  for (var i = 0; i < obj.oblig.length; i++) {
706    if (!obj.oblig[i].value.trim()) {
707      obj.oblig[i].parentElement.classList.add('invalid')
708      send = false;
709      e_empty = true;
710    } else {
711      obj.oblig[i].parentElement.classList.remove('invalid');
712    }
713  };
714
715  //emails
716  for (var i = 0; i < obj.emails.length; i++) {
717    if (!h.mail(obj.emails[i].value.trim())) {
718      obj.emails[i].parentElement.classList.add('invalid')
719      send = false;
720      e_mail = true;
721    } else {
722      obj.emails[i].parentElement.classList.remove('invalid')
723    }
724  }
725
726  //politic
727  if (!obj.politic.checked) {
728    obj.politic.parentElement.classList.add('invalid')
729    send = false;
730    e_poli = true;
731  } else {
732    obj.politic.parentElement.classList.remove('invalid')
733  };
734
735  if (e_empty) obj.error.o.appendChild(obj.error.empty);
736  if (e_mail) obj.error.o.appendChild(obj.error.mail);
737  if (e_poli) obj.error.o.appendChild(obj.error.poli);
738
739  if (!send) {
740    obj.error.o.classList.add('sta-error', 'sta-cardpage-air_warning-text');
741    obj.error.o.classList.remove('fn-hide');
742    processEnvio = false;
743  }
744
745  return send;
746
747},
748  enviar = function () {
749    var datos = {
750      d: {
751        hotel: window.dataSeo && dataSeo.hotel && dataSeo.hotel.name ? dataSeo.hotel.name : '',
752        url: location.origin + location.pathname,
753        text: '',
754        personal_inf: null
755      }
756    };
757
758    if (window.getComputedStyle(obj.personalInf.parentElement).display == 'none') {
759      datos.d.personal_inf = 'Not available';
760    } else {
761      datos.d.personal_inf = obj.personalInf.checked ? 'yes' : 'no';
762    }
763
764
765    for (var i = 0; i < obj.allElements.length; i++) {
766      datos.d.text += '<b>' + obj.allElements[i].text + ' : </b>' + obj.allElements[i].o.value;
767      if (i < obj.allElements.length - 1) datos.d.text += '<br>';
768    }
769    if (recaptcha) {
770      grecaptcha.ready(function () {
771        grecaptcha.execute(recaptcha, { action: 'sendForm' }).then(function (token) {
772          ajax(datos);
773        });
774      });
775    } else {
776      ajax(datos);
777    };
778  },
779  ajax = function (datos) {
780    var _tmp = {
781      url: getFormUrl(),
782      data: JSON.stringify(datos),
783      type: 'POST',
784      success: function (e) {
785        if (e === "OK") {
786          obj.error.o.appendChild(obj.error.ok);
787          obj.error.o.classList.add('sta-cardpage-air_done-text');
788          obj.error.o.classList.remove('fn-hide');
789          //reset
790          form.reset();
791        }
792        processEnvio = false;
793      },
794      error: function (e) {
795        console.trace('ERROR: Fail form', e);
796        processEnvio = false;
797      }
798    };
799    h.ajax(_tmp);
800  },
801  // event
802  eventInputTextarea = function (elem, email, divInput) {
803    elem.addEventListener("change", function () {
804      var val = this.value.trim();
805      email && !h.mail(val) || !val
806        ? divInput.classList.add('invalid')
807        : divInput.classList.remove('invalid');
808    });
809  },
810
811  recaptcha = form.dataset.recaptcha,
812  processEnvio = false,
813  obj = {
814    politic: form.policy,
815    personalInf: form.acept_mail,
816    allElements: [],
817    oblig: [],
818    emails: [],
819    error: {
820      o: form.querySelector('ul.sta-error'),
821      empty: document.createElement('li'),
822      mail: document.createElement('li'),
823      ok: document.createElement('li'),
824      poli: document.createElement('li')
825    }
826  };
827  (function () {
828    obj.error.empty.innerText = form.copyEmpty.value;
829    obj.error.mail.innerText = form.copyEmail.value;
830    obj.error.poli.innerText = form.copyPoliticas.value;
831    obj.error.ok.innerText = form.copyOk.value;
832  })();
833
834  (function (insert) {
835    for (var i = 0; i < array.length; i++) {
836      (function (_obj) {
837        var divPrins = document.createElement('div'),
838          divInput = document.createElement('div'),
839          elem;
840
841        divPrins.className = 'sta-cardpage-air_form-element';
842
843        if (_obj.type === 'textarea') {
844          elem = document.createElement('textarea');
845          elem.className = 'sta-textarea-field textColor textGC';
846          divInput.className = 'sta-textarea';
847
848        } else {
849          elem = document.createElement('input');
850          elem.className = 'sta-input-field textColor textGC';
851          elem.type = _obj.type ? _obj.type : 'text';
852
853          switch (_obj.type) {
854            case 'date':
855              elem.max = _obj.max ? _obj.max : '2123-12-31';
856              elem.min = _obj.min ? _obj.min : '1823-12-31';
857              elem.addEventListener('focus', function () {
858                this.showPicker();
859              });
860              break;
861            case 'time':
862              elem.addEventListener('focus', function () {
863                this.showPicker();
864              });
865              break;
866            case 'email':
867              obj.emails.push(elem);
868              break;
869          }
870          divInput.className = _obj.class ? 'sta-input ' + _obj.class : 'sta-input';
871        }
872
873        if (_obj.type == 'date' || _obj.type == 'time') {
874          var span = document.createElement('span');
875          span.className = 'sta-time';
876          span.setAttribute('data-text', _obj.text);
877          if (_obj.oblig) span.dataset.text = _obj.text + '*'
878          divInput.append(span);
879        }
880        if (_obj.text) {
881          elem.placeholder = _obj.oblig ? _obj.text + '*' : _obj.text;
882        }
883        divInput.append(elem);
884        divPrins.append(divInput);
885        insert.append(divPrins);
886
887        obj.allElements.push({ o: elem, text: _obj.text })
888        if (_obj.oblig) {
889          obj.oblig.push(elem);
890          elem.required = true;
891          eventInputTextarea(elem, _obj.type == 'email', divInput);
892        }
893
894      })(array[i]);
895    }
896
897  })(document.querySelector('.sta-cardpage-air_list'))
898
899
900  form.addEventListener('submit', function (event) {
901    event.preventDefault();
902
903    if (processEnvio) return false;
904
905    processEnvio = true;
906    if (valid()) enviar();
907  }, false);
908
909  if (recaptcha) h.cargaScrollAuto({ obj: form }, function () {
910    h.cargarFicheroJS('https://www.google.com/recaptcha/api.js?render=' + recaptcha);
911  });
912
913
914})(document.querySelector('.formJson'), window.hotusa && hotusa(), window.formJson);
915
916
917//class ventajas resto
918(function( a, $, h ){
919  if( !a.length || !$ || !h ) return false;
920
921  var ev = function (o) {
922    var n = o.querySelectorAll('.advice-list .advice-list-element').length,
923    a = o.querySelectorAll('.sta-advice-air_enlace');
924
925    switch (n) {
926      case 1:
927      case 2:
928      case 3:
929      case 4:
930        $(o).addClass('sta-exact_'+n);
931        break;
932        
933      default:
934
935        if( n % 4 == 0 ){
936          $(o).addClass('sta-exact_4');
937        } else if( n % 3 == 0 ){
938          $(o).addClass('sta-exact_3');
939        } else if( n % 4 > n % 3 ) {
940          $(o).addClass('sta-exact_4')
941        } else {
942          $(o).addClass('sta-exact_3');
943        }
944
945        break;
946    };
947
948    for (var i = 0; i < a.length; i++) {
949      h.enlace_blank( $( a[i] ) );
950    }
951  };
952
953  for(var i = 0; i < a.length; i++) ev( a[i] );
954
955})( document.querySelectorAll('.tgl-advice-air'), window.jQuery, window.hotusa && hotusa() );
956
957//enlaces pdfs in intro
958(function( o,$,h ){
959  if( !o || !$ || !h ) return false;
960
961  var a = o.querySelector('.sta-intro-air_btn');
962  if( a ) h.enlace_blank( $(a) );
963})( document.querySelector('.tgl-intro-air'), window.jQuery, window.hotusa && hotusa() );
964
965//enlaces pdfs in carousels
966(function( a,$,h ){
967  if( !a.length || !$ || !h ) return false;
968
969  var ev = function (o) {
970    var as = o.querySelectorAll('.sta-carousel-air_info-btn,.sta-btn-moreinfo');
971    for (var i = 0; i < as.length; i++) h.enlace_blank( $(as[i]) );
972  };
973
974  for (var i = 0; i < a.length; i++) ev(a[i]);
975
976  h.cargaScrollAuto({ obj : a[0],dual:true}, function(){
977    var link = document.createElement('link');
978    link.rel = "stylesheet";
979    link.href = "/css/style_icons_services_banderas.min.css";
980    $('head').append(link);
981  });
982
983}
983)( document.querySelectorAll('.tgl-carousel-air'), window.jQuery, window.hotusa && hotusa() );
984
985//enlaces pdf footer
986(function( o,$,h ){
987  if( !o || !$ || !h ) return false;
988
989  var as = o.querySelectorAll('.sta-staticfoot-air_element-wrapper');
990
991  for (var i = 0; i < as.length; i++) h.enlace_blank( $( as[i] ) );
992
993})( document.querySelector('.tgl-staticfoot-air'), window.jQuery, window.hotusa && hotusa() );
994
995//mapaweb
996(function( o,$,h ) {
997  if( !o || !$ || !h ) return false;
998  var elems = o.querySelector('.sta-cardpage-air_dropdowns').children;
999
1000  for (var i = elems.length-1; i >= 0; i--)
1001    if( elems[i].querySelector('a').href.slice(0,10) == "javascript" ) elems[i].remove();
1002
1003})( document.querySelector('.tgl-cardpage-air.sta-mapaweb'), window.jQuery, window.hotusa && hotusa() );
1004
1005//open cookies
1006(function(a,inp,conf,$){
1007  if( !a.length || !inp || !conf || !$ ) return false;
1008  var $scroll = $('html'),
1009  open = function(){
1010    inp.checked = false;
1011    $scroll.addClass('sta-noScroll')
1012  },
1013  ev = function( $b ){
1014    var boo = $b.hasClass('fn-confCookies');
1015    $b.click(function(e){
1016      e.preventDefault();
1017      conf.checked = boo;
1018      open();
1019    });
1020  };
1021
1022  for (let i = 0; i < a.length; i++) ev( $(a[i]) );
1023
1024})( document.querySelectorAll('.fn-openCookies'), document.getElementById('sta-cookies'), document.getElementById('sta-cookies_config'), window.jQuery );
1025
1026(function( a,$,h ) {
1027  if( !a.length || !$ || !h ) return false;
1028
1029  var dom = location.origin + location.pathname,
1030  controlA = function ($a,remove) {
1031    if( $a.attr('href') == dom ) remove.remove();
1032  },
1033  controlPrice = function( content, $o ){
1034    if( content && content.textContent.trim().length > 7 ){
1035      $o.addClass('sta-priceSmall');
1036      return true;
1037    } else {
1038      return false;
1039    };
1040  },
1041  ev = function (o) {
1042    var a = o.querySelector('header .sta-btn-moreinfo'),
1043    content = o.querySelector('.sta-products-air_content');
1044    
1045    if( !a || !content )return false;
1046
1047    var elems = content.children;
1048
1049    //link ver mas
1050    controlA( $(a), a );
1051    for (var i = 0; i < elems.length; i++){
1052      (function(product) {
1053        controlA( $(product.querySelector('.sta-products-air_btns-element')), product);
1054        h.enlace_blank( $( product.querySelector('.sta-products-air_btns-element') ) );
1055        h.enlace_blank( $( product.querySelector('.sta-products-air_element-wrapper a') ) );
1056      })(elems[i]);
1057    }
1058
1059    for (var i = 0; i < elems.length; i++){
1060      if( controlPrice( elems[i].querySelector('.sta-products-air_price-number'), $(o) ) ){ break }
1061    }
1062    
1063    //elements
1064    var data = $(o).data();
1065
1066    if( data.slides_tablet && data.slides_tablet > elems.length ) $(o).attr('data-slides_tablet',elems.length);
1067    if( data.slides_pc && data.slides_pc > elems.length ) $(o).attr('data-slides_pc',elems.length);
1068
1069  };
1070
1071  for (var i = 0; i < a.length; i++) ev(a[i]);
1072
1073})( document.querySelectorAll('.tgl-products-air'), window.jQuery, window.hotusa && hotusa());
1074
1075(function (o) {
1076  if (!o || window.innerWidth > 800) return false;
1077  window.document.dispatchEvent(new CustomEvent('showModalEngine'));
1078})(document.querySelector('.tgl-enginepage-air'));
1079
1080(function( o,$ ){
1081  if( !o || !$ ) return false;
1082
1083  var children = o.children,
1084  ev = function (o) {
1085    var modal = o.querySelector('.tgl-infopop-air'),
1086    nDistribuciones = modal.querySelector('.sta-infopop-air_services').childElementCount;
1087    if( !nDistribuciones ){
1088      modal.remove();
1089      o.querySelector('.sta-carousel-air_info-btn').remove();
1090    };
1091  };
1092
1093  for (var i = 0; i < children.length; i++) ev( children[i] );
1094
1095})( document.querySelector('.tgl-meetinglist-container'), window.jQuery );
1096
1097(function( a,$ ){
1098  if( !a.length || !$ ) return false;
1099
1100  var ev = function(o){
1101    var imgs = o.querySelectorAll('.sta-slate-air_element a');
1102    for (var i = 0; i < imgs.length; i++) {
1103      (function ( $img ) {
1104        $img
1105        .removeAttr('data-lightbox')
1106        .attr('href','')
1107        .click(function(e){
1108          e.preventDefault();
1109        });
1110      })( $( imgs[i] ) );
1111      
1112    }
1113  };
1114
1115  for (var i = 0; i < a.length; i++) ev(a[i]);
1116
1117})( document.querySelectorAll('.tgl-slate-air.sta-notModal'), window.jQuery );
1118
1119(function( o,$,h ){
1120  if( !o || !$ || !h ) return false;
1121
1122  var awards = o.querySelector('.sta-linksfoot-air_element-awards');
1123
1124  if( awards ){
1125    var elems = awards.children;
1126    for (var i = 0; i < elems.length; i++) {
1127      (function( $a ){
1128        $a.attr('href')
1129        ? h.enlace_blank( $a )
1130        : $a.replaceWith( $('<div></div>').html( $a.html() ) );
1131      })( $( elems[i] ) );
1132    }
1133  };
1134
1135  var lista = o.querySelector('.sta-linksfoot-air_list');
1136
1137  if( lista ){
1138    var elem = lista.children; 
1139    for (var j = 0; j < elem.length; j++) 
1140      h.enlace_blank( $( elem[j].querySelector('a') ) );
1141  }
1142
1143  if( lista.children.length == 3 ) $(o).addClass('sta-children3');
1144  
1145})( document.querySelector('.tgl-linksfoot-air'), window.jQuery, window.hotusa && hotusa() );
1146
1147(function(a, $, h) {
1148  if( !a.length || !$ || !h ) return false;
1149
1150  var $p = $(a[0]).parent();
1151  
1152  $p.attr('alertas', a.length);
1153
1154  var close = function( $o, time ){
1155    clearTimeout(time);
1156    $o.slideUp(1e3,function() {
1157      $p.attr('alertas', parseInt($p.attr('alertas')) - 1 )
1158      if(window.putCoverArrow) putCoverArrow();
1159    });
1160  };
1161
1162  for (var i = 0; i < a.length; i++) {
1163    (function(o) {
1164      var $o = $(o),
1165      timeout = null,
1166      seconds = $o.data('seconds'),
1167      appear = $o.hasClass('sta-notAppear'),
1168      appearId = $o.data('id');
1169
1170      if(appear && h.getSessionStorageJSON(appearId) ){
1171        $o.hide();
1172        return false;
1173      }
1174
1175      if( seconds && !isNaN(seconds) ) timeout = setTimeout(function(){ close( $o, timeout ) }, parseInt(seconds*1000));
1176
1177      if( !$o.hasClass('sta-notClose') ){
1178        $( o.querySelector('.sta-avisos-air_close') ).on('click', function(){
1179          if(appear) h.setSessionStorageJSON(appearId,true);
1180          
1181          $(this).off('click');
1182          close( $o, timeout );
1183        });
1184      }
1185
1186    })(a[i])
1187  };
1188
1189  if(window.putCoverArrow) putCoverArrow();
1190
1191})(document.querySelectorAll('.tgl-avisos-air'), window.jQuery, window.hotusa && hotusa());
1192
1193(function(o,$,h,json,seo) {
1194  if( !o || !$ || !h || !json || !seo || !seo.opinions || !seo.hotel || !seo.hotel.name ) return false;
1195
1196  var cuentaAtras = function(obj,time,decimal){
1197    decimal = !decimal ? false : true;
1198    var intervalo = 100,
1199    incr = obj.n/(time/intervalo);
1200    obj.inc = incr;
1201    var t = setInterval(function(){
1202      obj.html.innerHTML = decimal ? obj.inc.toFixed(1) : parseInt(obj.inc);
1203      if(obj.inc > obj.n){
1204        obj.html.innerText = obj.n;
1205        clearInterval(obj.t);
1206      } else {
1207        obj.inc += incr;
1208      };
1209    },intervalo);
1210    obj.t = t;
1211  },
1212  fns = [function(){
1213    $(o).addClass('sta-active');
1214  }],
1215  circle = $(o).hasClass('sta-circle');
1216
1217  if( json.fondo ){
1218    var img = new Image(),
1219    $bkc = $( o.querySelector('.sta-viewSmall-air_bck') );
1220
1221    img.src = json.fondo;
1222    img.onload = function(){
1223      $bkc.css('background-image',"url('"+img.src+"')")
1224    };
1225    img.onerror = function(e){
1226      console.trace('Error image: ',e);
1227    };
1228  };
1229  if( seo.opinions.nota ){
1230    (function(note){
1231      fns.push(function(){
1232        cuentaAtras({html:note,n:seo.opinions.nota},3e3,true);
1233      });
1234      if( circle ) $( o.querySelector('.sta-viewSmall-air_points .sta-viewSmall-air_circle .circle') ).attr('stroke-dasharray',seo.opinions.nota*10+', 100');
1235    })(o.querySelector('.sta-viewSmall-air_points .sta-num'));
1236  };
1237  if( seo.opinions.recommend ){
1238    (function(note){
1239      fns.push(function(){
1240        cuentaAtras({html:note,n:seo.opinions.recommend},3e3);
1241      });
1242      if( circle ) $( o.querySelector('.sta-viewSmall-air_recommend .sta-viewSmall-air_circle .circle') ).attr('stroke-dasharray',seo.opinions.recommend+', 100');
1243    })(o.querySelector('.sta-viewSmall-air_recommend .sta-num'));
1244  };
1245  if( json.logos && json.logos.length ){
1246    var $cont = $( o.querySelector('.sta-viewSmall-air_banner') ),
1247    text = o.querySelector('.sta-viewSmall-air_puntuacion .sta-viewSmall-air_text').textContent;
1248
1249    $(o).addClass('sta-banner');
1250
1251    for (var i = 0; i < json.logos.length; i++) {
1252      (function( obj, posi ){
1253        var img = new Image(),
1254        $img = $('<img />',{ alt : obj.name ? obj.name : text+' - '+seo.hotel.name+' - '+(posi+1) });
1255
1256        $cont.append( $img );
1257
1258        img.src = obj.url;
1259
1260        img.onload = function(){
1261          $img.attr('src',this.src);
1262        };
1263        img.onerror = function(e){
1264          $img.remove();
1265          console.trace('Error load image:',e);
1266        };
1267      })( json.logos[i], i );
1268    }
1269  }
1270
1271  h.cargaScrollAuto({obj:o,before:300,dual:true},function(){
1272    for (var i = 0; i < fns.length; i++) fns[i]();
1273  })
1274  
1275})(document.querySelector('.tgl-viewSmall-air'), window.jQuery, window.hotusa && hotusa(), window.json_viewSmall, window.dataSeo);
1276
1277(function(o, $) {
1278  if(!o || !$) return false;
1279
1280  var rooms = o.querySelectorAll('.tgl-carousel-air'),
1281  classP = $(o).hasClass('sta-room'),
1282  roomIndi = function(r) {
1283    r.querySelector('.tgl-infopop-air').remove();
1284    var $btn = $(r.querySelector('.sta-carousel-air_info-btn.sta-btn-moreinfo')),
1285    url = $btn.data('urlindividual');
1286    if(url){
1287      $btn.on('click',function() {
1288        window.location.href = url;
1289      })
1290    }
1291  }
1292
1293  for (var i = 0; i < rooms.length; i++) {
1294    (function(room) {
1295      if( classP || $(room).hasClass('sta-room') ) roomIndi(room);
1296    })(rooms[i]);
1297  }
1298
1299})(document.querySelector('.tgl-roomslist-container'),window.jQuery);
1300
1301
1302(function( o ) {
1303  if( !o ) return false;
1304
1305  if( document.querySelector('.sta-mainDispo') ){
1306    o.remove()
1307    return false;
1308  }
1309})( document.querySelector('.tgl-socialRedes-air') );
1310
1311
1312// keypress enter buttons
1313(function (a, $) {
1314  if (a.length) {
1315    for (var i = 0; i < a.length; i++) {
1316      var btn = a[i];
1317      btn.addEventListener("keyup", function (event) {
1318        if (event.keyCode === 13) {
1319          $(this).click();
1320        }
1321      });
1322    }
1323  };
1324})(document.querySelectorAll('[tabindex="0"]'), jQuery);
1325
1326// load js file
1327function loadScript(url, callback) {
1328  hotusa().cargarFicheroJS(url,callback);
1329  // var script = document.createElement('script');
1330  // script.onload = function () {
1331  //   callback();
1332  // };
1333  // script.src = url;
1334  // document.head.appendChild(script);
1335};
1336
1337// load css file
1338function loadStyle(url) {
1339  var link = document.createElement("link");
1340  link.href = url;
1341  link.type = "text/css";
1342  link.rel = "stylesheet";
1343  link.media = "screen,print";
1344  document.getElementsByTagName("head")[0].appendChild(link);
1345}
1346
1347function isElementIntoView(el, offset = 0) {
1348  return el.getBoundingClientRect().top - offset < window.innerHeight;
1349}
1350
1351$(document).ready(function () {
1352  // function ladyload images
1353  var load_imgs = (function(){
1354    var alt = window.dataSeo && dataSeo.hotel && dataSeo.hotel.name && dataSeo.hotel.name.trim() ? dataSeo.hotel.name.trim() + ' - ' : 'Gallery - ',
1355    n = 1,
1356    firstImg = false,
1357    fn = function(object){
1358      for (var i = 0; i < object.length; i++) {
1359        var element = object[i],
1360        image = element.dataset.lazyimg,
1361        visibility = element.offsetWidth > 0 || element.offsetHeight > 0;
1362
1363        if (image && isElementIntoView(element, 300) && visibility) {
1364          if (element.tagName == 'IMG') {
1365            element.setAttribute('src', image);
1366          } else {
1367            $(element)
1368            .css('background-image','url("' + image + '")')
1369            .append( $('<img />',{src:image, class:"imgOcultaAda",alt:alt + n}) );
1370            n++;
1371          }
1372          //remove in array
1373          element.removeAttribute('data-lazyimg');
1374        }
1375      }
1376    }
1377    return fn;
1378  })();
1379
1380  //header motor
1381  (function ( o,m,hide,$ ) {
1382    if( !o || !$ ) return false;
1383
1384    if( !m || hide ){
1385      $(o).addClass('sta-motorRedirect');
1386    } else {
1387      $(o).addClass('sta-motorScroll');
1388      var btns = o.querySelectorAll('.sta-menus-air_nav-action .sta-scroll-book,.sta-menus-air_nav-action-aside .sta-scroll-book'),
1389      $scroll = $(btns[0]).data('scroll_to') && document.querySelector($(btns[0]).data('scroll_to')) ? $(document.querySelector($(btns[0]).data('scroll_to'))) : false,
1390      spacer = $(btns[0]).data('scroll_spacer') ? $(btns[0]).data('scroll_spacer') : 0;
1391      
1392      $(btns).click(function () {
1393        if( !$('#default_sygy_element_engine>div>div').length ){
1394          //version mobile
1395          window.document.dispatchEvent(new CustomEvent('showModalEngine'));
1396        } else {
1397          if( $scroll ){
1398            $('body').removeClass('noscroll');
1399            $('.tgl-internbar-air.sta-show-responsive.fn-open').removeClass('fn-open');
1400            hotusa().scrollTo( $scroll, { 'height': spacer });
1401          };
1402        };
1403      })
1404    }
1405
1406    
1407
1408  })( document.querySelector('.tgl-menus-air'), document.querySelector('#default_sygy_element_engine'), document.querySelector('.tgl-cover-
1408air.sta-hide-engine'), window.jQuery );
1409
1410  // function check menu white
1411  (function (o, a, $) {
1412    if (o && a) {
1413      function check_white() {
1414        var space = 40,
1415          window_position = document.documentElement.scrollTop || document.body.scrollTop;
1416        if (window.innerWidth >= 1280) {
1417          if (window_position >= space) {
1418            o.classList.remove('sta-menu-white');
1419          } else {
1420            o.classList.add('sta-menu-white');
1421          }
1422        }
1423      };
1424
1425      check_white();
1426      //scroll event
1427      window.addEventListener('scroll', function () {
1428        check_white();
1429      });
1430    } else if (document.querySelector('.tgl-menus-air') && document.querySelector('.tgl-menus-air').classList.contains('sta-menu-white')) {
1431      document.querySelector('.tgl-menus-air').classList.remove('sta-menu-white');
1432    }
1433  })(document.querySelector('.tgl-menus-air.sta-menu-white'), document.querySelector('.tgl-cover-air'), jQuery);
1434
1435  // function check internbar white
1436  (function (o, a, $) {
1437    if (o && a) {
1438      function check_white() {
1439        var space = 40,
1440          window_position = document.documentElement.scrollTop || document.body.scrollTop;
1441        if (window.innerWidth >= 1280) {
1442          if (window_position >= space) {
1443            o.classList.remove('sta-internbar-white');
1444          } else {
1445            o.classList.add('sta-internbar-white');
1446          }
1447        }
1448      };
1449
1450      check_white();
1451      //scroll event
1452      window.addEventListener('scroll', function () {
1453        check_white();
1454      });
1455    } else if (o && !a) {
1456      if (document.querySelector('.tgl-internbar-air').classList.contains('sta-internbar-white')) {
1457        document.querySelector('.tgl-internbar-air').classList.remove('sta-internbar-white');
1458      }
1459    }
1460  })(document.querySelector('.tgl-internbar-air.sta-internbar-white'), document.querySelector('.tgl-cover-
1460air'), jQuery);
1461
1462  // function check menu logo between links
1463  (function (o, $) {
1464    if (o) {
1465      var counter = o.querySelectorAll('.sta-main-links > .sta-menus-air_links-wrapper > .sta-menus-air_links-element').length,
1466      img2 = o.querySelector('.sta-menus-air_nav-logo .sta-menus-air_logo-img.sta-simple').src,
1467      img = $('.tgl-cover-air').length ? o.querySelector('.sta-menus-air_nav-logo .sta-menus-air_logo-img.sta-white').src : img2,
1468      selector_count = Math.round(counter / 2),
1469      intersection = document.querySelector(".sta-main-links > .sta-menus-air_links-wrapper > .sta-menus-air_links-element:nth-child(" + selector_count + ")"),
1470      logo_checker = true,
1471      url = $(o.querySelector('.sta-menus-air_nav-logo .sta-menus-air_logo-img.sta-white')).parent().attr('href'),
1472      $li = $("<li class='sta-menus-air_links-element fn-logo'><a href='"+url+"' class='sta-menus-air_links-element-wrapper' tabindex='0'></a></li>"),
1473      $figure = $("<figure class='sta-menus-air_links-element-logo'></figure>");
1474      function check_between() {
1475        if (window.innerWidth >= 1280 && logo_checker === true) {
1476          $('a',$li).append( $figure.css('background-image','url("'+img+'")') );
1477          $li.insertAfter(intersection);
1478          logo_checker = false;
1479        }
1480      }
1481      check_between();
1482      //scroll event
1483      window.addEventListener('scroll', function () {
1484        check_between();
1485        !window.scrollY
1486          ? $figure.css('background-image','url("'+img+'")')
1487          : $figure.css('background-image','url("'+img2+'")');
1488      });
1489      //resize event
1490      window.addEventListener('resize', function () {
1491        check_between();
1492      });
1493    }
1494  })(document.querySelector('.tgl-menus-air.sta-logo-between_links.sta-show-links.sta-logo-off.sta-book-aside'), jQuery);
1495
1496  // function check menu links
1497  (function (o, $) {
1498    if (o) {
1499      var selector = o.querySelector('.sta-menus-air_nav-links.sta-main-links'),
1500        links_width = 0, logo_space = 0, btns_space = 0, call_space = 0, imgsCarga = false;
1501      if(!selector) return;  
1502      function check_width() {
1503        if (window.innerWidth >= 1280) {
1504
1505          if (document.querySelector('.sta-menus-air_nav-logo')) {
1506            logo_space = document.querySelector('.sta-menus-air_nav-logo').offsetWidth;
1507            document.querySelectorAll('.sta-menus-air_nav-logo img')[0].onload = check_width;
1508            document.querySelectorAll('.sta-menus-air_nav-logo img')[1].onload = check_width;
1509          } else { 
1510            logo_space = 0 
1511          }
1512          if (document.querySelector('.sta-menus-air_nav-morebtns')) { btns_space = document.querySelector('.sta-menus-air_nav-morebtns').offsetWidth } else { btns_space = 0 }
1513          if (document.querySelector('.sta-menus-air_nav-action')) { call_space = document.querySelector('.sta-menus-air_nav-action').offsetWidth } else { call_space = 0 }
1514
1515          if (o.classList.contains('sta-show-links') && !selector.classList.contains('fn-open')) {
1516            links_width = selector.offsetWidth;
1517          }
1518
1519          var elements_space = logo_space + btns_space + call_space,
1520            max_width = window.innerWidth - elements_space;
1521
1522          if (links_width > max_width) {
1523            o.classList.remove('sta-show-links');
1524          } else {
1525            o.classList.add('sta-show-links');
1526            document.querySelector('body').classList.remove('noscroll');
1527          }
1528        }
1529      }
1530      check_width();
1531      //scroll event
1532      window.addEventListener('scroll', function () {
1533        check_width();
1534      });
1535      //resize event
1536      window.addEventListener('resize', function () {
1537        check_width();
1538      });
1539    }
1540  })(document.querySelector('.tgl-menus-air.sta-show-links'), jQuery);
1541
1542  // function check menu btn book
1543  (function (o, a, $) {
1544    if (o && a) {
1545      function check_btn() {
1546        var space = $(a).offset().top + $(a).height() - 80;
1547        
1548        window.scrollY >= space
1549            ? o.classList.add('fn-show-book')
1550            : o.classList.remove('fn-show-book');
1551      };
1552
1553      check_btn();
1554      window.addEventListener('scroll', function () {
1555        check_btn();
1556      });
1557    }
1558  })(document.querySelector('.tgl-menus-air.sta-book-fixed'), document.querySelector('#default_sygy_element_engine'), jQuery);
1559
1560  // function check menu logo
1561  (function (o, a, $) {
1562    if (o && a) {
1563      function check_logo() {
1564        var space = a.offsetHeight - 80,
1565          window_position = document.documentElement.scrollTop || document.body.scrollTop;
1566        if (window.innerWidth >= 1280) {
1567          if (window_position >= space) {
1568            o.classList.add('fn-show-logo');
1569          } else {
1570            o.classList.remove('fn-show-logo');
1571          }
1572        }
1573      };
1574
1575      check_logo();
1576      //scroll event
1577      window.addEventListener('scroll', function () {
1578        check_logo();
1579      });
1580    }
1581  })(document.querySelector('.tgl-menus-air.sta-logo-off'), document.querySelector('.tgl-cover-
1581air'), jQuery);
1582
1583  // function toggle menus
1584  (function (a, $) {
1585    if (a.length) {
1586      var header = document.querySelector('.tgl-menus-air');
1587      for (var i = 0; i < a.length; i++) {
1588        var parent = a[i];
1589        parent.onclick = function () {
1590          // variables
1591          var menu_name = parent.dataset.toggle_menu,
1592            menu_selector = document.querySelector(menu_name);
1593
1594          if (menu_selector.classList.contains('fn-open')) {
1595            document.querySelector('body').classList.remove('noscroll');
1596            menu_selector.classList.remove('fn-open');
1597            parent.classList.remove('fn-close');
1598            header.classList.remove('sta-openMenu');
1599            $('.js-toggle-submenu').children('.sta-menus-air_nav-links').removeClass('fn-open');
1600            setTimeout(function () {
1601              window.dispatchEvent(new Event('scroll'));
1602            }, 20);
1603          } else {
1604            if( !($(header).hasClass('sta-menuDesplegable') && $(header).hasClass('sta-show-links')) ){
1605            document.querySelector('body').classList.add('noscroll');
1606            }else{
1607              if(window.innerWidth <= 1280 ) document.querySelector('body').classList.add('noscroll');
1608            }
1609            menu_selector.classList.add('fn-open');
1610            parent.classList.add('fn-close');
1611            header.classList.add('sta-openMenu');
1612            var inp = document.querySelector(".sta-menus-air_nav-morebtns-element.sta-lang input");
1613            if( inp ) inp.checked = false;
1614            if (window.innerWidth >= 1280 && document.querySelector('.tgl-menus-air.sta-menu-white')) {
1615              document.querySelector('.tgl-menus-air.sta-menu-white').classList.remove('sta-menu-white');
1616            }
1617            if (window.innerWidth >= 1280 && document.querySelector('.sta-menus-air_photo-img.sta-main-placeholder')) {
1618              var placeholder = document.querySelector('.sta-menus-air_photo-img.sta-main-placeholder').dataset.placeholder;
1619              document.querySelector('.sta-menus-air_photo-img.sta-main-placeholder').style.backgroundImage = "url('" + placeholder + "')";
1620              document.querySelector('.sta-menus-air_photo-img.sta-main-placeholder img').src = placeholder;
1621            }
1622          }
1623        };
1624      }
1625    }
1626  })(document.querySelectorAll('.js-toggle-menu'), jQuery);
1627
1628  // function toggle submenus
1629  (function (a, $) {
1630    if (a.length) {
1631      var header = document.querySelector('.tgl-menus-air');
1632      for (var i = 0; i < a.length; i++) {
1633        var parent = a[i].querySelector('.sta-menus-air_links-element-wrapper');
1634        parent.removeAttribute("href");
1635        parent.onclick = function () {
1636
1637          // variables
1638          var menu_selector = $(this).siblings('.sta-menus-air_nav-links');
1639          if (menu_selector.hasClass('fn-open')) {
1640            document.querySelector('body').classList.remove('noscroll');
1641            menu_selector.removeClass('fn-open');
1642            parent.classList.remove('fn-close');
1643            setTimeout(function () {
1644              window.dispatchEvent(new Event('scroll'));
1645            }, 20);
1646          } else {
1647            $('.sta-menus-air_nav-links.sta-submenu.fn-open').removeClass('fn-open');
1648            if( !($(header).hasClass('sta-menuDesplegable') && $(header).hasClass('sta-show-links')) ){
1649            document.querySelector('body').classList.add('noscroll');
1650            }
1651            menu_selector.addClass('fn-open');
1652            document.querySelector(".sta-menus-air_nav-morebtns-element.sta-lang input").checked = false;
1653            if (window.innerWidth >= 1280 && document.querySelector('.tgl-menus-air.sta-menu-white')) {
1654              document.querySelector('.tgl-menus-air.sta-menu-white').classList.remove('sta-menu-white');
1655            }
1656            if (window.innerWidth >= 1280 && document.querySelector('.sta-menus-air_photo-img')) {
1657              var placeholder = document.querySelector('.sta-menus-air_photo-img').dataset.placeholder;
1658              document.querySelector('.sta-menus-air_photo-img').style.backgroundImage = "url('" + placeholder + "')";
1659              document.querySelector('.sta-menus-air_photo-img img').src = placeholder;
1660            }
1661          }
1662        };
1663      }
1664      $('.js-close-submenu').click(function () {
1665        $('.sta-menus-air_nav-links.sta-submenu').removeClass('fn-open');
1666        if ($(this).hasClass('sta-menus-air_nav-links-close')) {
1667          $('.sta-menus-air_nav-links.sta-main-links').removeClass('fn-open');
1668          $('.sta-menus-air_nav-btns-element.js-toggle-menu').removeClass('fn-close');
1669          document.querySelector('body').classList.remove('noscroll');
1670          setTimeout(function () {
1671            window.dispatchEvent(new Event('scroll'));
1672          }, 20);
1673        }
1674        if (window.innerWidth >= 1280 && document.querySelector('.tgl-menus-air.sta-show-links')) {
1675          document.querySelector('body').classList.remove('noscroll');
1676          setTimeout(function () {
1677            window.dispatchEvent(new Event('scroll'));
1678          }, 20);
1679        }
1680      });
1681    }
1682  })(document.querySelectorAll('.sta-menus-air_links-element.no_link'), jQuery);
1683
1684  // function toggle subbars
1685  (function (o, $) {
1686    if (o) {
1687      if (window.innerWidth <= 1024) {
1688        document.querySelector('body').classList.add('bar-spacer');
1689      }
1690
1691      var btn = o.querySelector('.sta-internbar-air_links-btn'),
1692      closer = o.querySelector('.sta-internbar-air_links-close');
1693
1694      //$( o.querySelector('.sta-internbar-air_links') ).css('padding-left',$( o.querySelector('.sta-internbar-air_header .sta-internbar-air_header-title') ).innerWidth()+40);
1695
1696      btn.onclick = function () {
1697        document.querySelector('body').classList.add('noscroll');
1698        o.classList.add('fn-open');
1699      }
1700      closer.onclick = function () {
1701        document.querySelector('body').classList.remove('noscroll');
1702        o.classList.remove('fn-open');
1703      }
1704
1705      window.addEventListener('resize', function () {
1706        if (window.innerWidth <= 1024) {
1707          document.querySelector('body').classList.remove('noscroll');
1708          o.classList.remove('fn-open');
1709        }
1710      })
1711    }
1712  })(document.querySelector('.tgl-internbar-air.sta-show-responsive'), jQuery);
1713
1714  // function placeholders menus
1715  (function (a, $) {
1716    if (a.length) {
1717      var placeholder = $(a).parent().siblings('.sta-placeholder').children('.sta-placeholder-img'),
1718      placeholderAda = $(a).parent().siblings('.sta-placeholder').children('.sta-placeholder-img img');
1719      for (var i = 0; i < a.length; i++) {
1720        var parent = a[i];
1721
1722        parent.addEventListener("mouseenter", function () {
1723          var placeholder_img = this.dataset.placeholder_img;
1724          if (window.innerWidth >= 1280) {
1725            placeholder.attr("style", "background-image:url('" + placeholder_img + "')")
1726            placeholderAda.attr('src',placeholder_img);
1727          }
1728        });
1729        parent.addEventListener("mouseleave", function () {
1730          var placeholder_img = placeholder.attr('data-placeholder');
1731          if (window.innerWidth >= 1280) {
1732            placeholder.attr("style", "background-image:url('" + placeholder_img + "')")
1733            placeholderAda.attr('src',placeholder_img);
1734          }
1735        });
1736
1737      }
1738    };
1739  })(document.querySelectorAll('.js-menu-placeholder'), jQuery);
1740
1741  (function (a, $) {
1742    if (a.length) {
1743      load_imgs( a );
1744    };
1745  })(document.querySelectorAll('[data-lazyimg]'), jQuery);
1746  // function ladyload images onscroll
1747  window.addEventListener('scroll', function () {
1748    (function (a, $) {
1749      if (a.length) {
1750        var object = $(a);
1751        load_imgs(object);
1752      };
1753    })(document.querySelectorAll('[data-lazyimg]'), jQuery);
1754  });
1755  // function ladyload images onresize
1756  window.addEventListener('resize', function () {
1757    (function (a, $) {
1758      if (a.length) {
1759        var object = $(a);
1760        load_imgs(object);
1761      };
1762    })(document.querySelectorAll('[data-lazyimg]'), jQuery);
1763  });
1764
1765  // function unique icons 
1766  (function (o, $) {
1767    if (o) {
1768      // variables 
1769      var $o = $(o),
1770        load_check = false;
1771
1772      // load and check
1773      function load_font() {
1774        if (!load_check) {
1775          loadStyle("static/fonts/features/style.css");
1776          load_check = true;
1777        };
1778      }
1779
1780      if (isElementIntoView($o[0], 300)) {
1781        load_font();
1782      };
1783
1784      //scroll event
1785      window.addEventListener('scroll', function () {
1786        if (isElementIntoView($o[0], 300)) {
1787          load_font();
1788        };
1789      });
1790    }
1791  })(document.querySelector('._js-load-moreicons'), jQuery);
1792
1793  // function modular sliders
1794  (function (a, $) {
1795    if (a.length) {
1796
1797      //load sliders files
1798      var files_checker = true;
1799      function load_files() {
1800        if (files_checker) {
1801          loadScript("/templates/cadenas/air/js/libraries/slick.min.js", load_slider);
1802          loadStyle("/templates/cadenas/air/css/libraries/slick.min.css");
1803          files_checker = false;
1804        }
1805      }
1806      if (isElementIntoView(a[0], 300)) {
1807        load_files();
1808      }
1809      //scroll event
1810      window.addEventListener('scroll', function () {
1811        if (isElementIntoView(a[0], 300)) {
1812          load_files();
1813        }
1814      });
1815
1816      // load modules slider
1817      function load_slider() {
1818        for (var i = 0; i < a.length; i++) {
1819
1820          (function (parent) {
1821            // variables
1822            var slider_name = parent.dataset.slider_name,
1823            slider_showbtns = parent.dataset.slider_showbtns === 'true',
1824            slider_showdots = parent.dataset.slider_showdots === 'true',
1825            response_btn_dots = parent.dataset.response_btn_dots === "true",
1826            slider_autoplay_speed = parent.dataset.slider_autoplay_speed && parent.dataset.slider_autoplay_speed.trim() && !isNaN(parent.dataset.slider_autoplay_speed) ? parseInt(parent.dataset.slider_autoplay_speed) : 5000,
1827            slider_btns = parent.dataset.slider_btns,
1828            slider_fade = parent.dataset.slider_fade === 'true',
1829            slider_autoplay = parent.dataset.slider_autoplay === 'true',
1830            slider_infinite = parent.dataset.slider_infinite === 'false' ? false : true,
1831            slider_pc = parent.dataset.slides_pc,
1832            slider_tablet = parent.dataset.slides_tablet,
1833            slider_mobile = parent.dataset.slides_mobile,
1834            slider_rows = parent.dataset.slides_rows,
1835            slider_selector = parent.querySelector('.' + slider_name),
1836            arrayResponse = [
1837              {
1838                breakpoint: 1280,
1839                settings: {
1840                  slidesToShow: slider_pc,
1841                }
1842              },
1843              {
1844                breakpoint: 768,
1845                settings: {
1846                  slidesToShow: slider_tablet,
1847                }
1848              },
1849            ];
1850
1851            if( !slider_selector ) return false;
1852
1853            if( slider_selector.childElementCount < 2 ){
1854              slider_showdots = false;
1855              slider_showbtns = false;
1856              response_btn_dots = false;
1857            };
1858
1859            if( response_btn_dots ){
1860              slider_showdots = true;
1861              slider_showbtns = false;
1862              arrayResponse.push({
1863                breakpoint: 1280,
1864                settings: {
1865                  dots: false,
1866                  arrows : true
1867                }
1868              });
1869            };
1870
1871            hotusa().cargaScrollAuto({obj:parent,dual:true},function () {
1872              //init slider
1873              $(slider_selector).slick({
1874                dots: slider_showdots,
1875                arrows: slider_showbtns,
1876                prevArrow: "<div class='sta-btn-circle " + slider_btns + " slick-btn slick-prev' role='button' aria-label='left' tabindex='0'><i class='sta-btn-circle_icon icon-pointer-left'></i></div>",
1877                nextArrow: "<div class='sta-btn-circle " + slider_btns + " slick-btn slick-next' role='button' aria-label='right' tabindex='0'><i class='sta-btn-circle_icon icon-pointer-right'></i></div>",
1878                infinite: slider_infinite,
1879                useTransform: true,
1880                fade: slider_fade,
1881                cssEase: 'cubic-bezier(0.785, 0.135, 0.15, 0.86)',
1882                speed: 750,
1883                slidesToShow: slider_mobile,
1884                slidesToScroll: 1,
1885                rows: slider_rows,
1886                autoplay: slider_autoplay,
1887                autoplaySpeed: slider_autoplay_speed,
1888                swipeToSlide: true,
1889                mobileFirst: true,
1890                responsive: arrayResponse
1891              });
1892            });
1893            
1894          })( a[i] );
1895
1896        };
1897      };
1898    };
1899  })(document.querySelectorAll('.js-active-slider'), jQuery);
1900
1901  // function modular lightbox
1902  (function (a, $) {
1903    if (a.length) {
1904      //load sliders files
1905      var files_checker = true;
1906      function load_files() {
1907        if (files_checker) {
1908          loadScript("/templates/cadenas/air/js/libraries/lightbox.min.js", function () { return false });
1909          loadStyle("/templates/cadenas/air/css/libraries/lightbox.min.css");
1910          files_checker = false;
1911        }
1912      }
1913      if (isElementIntoView(a[0], 300)) {
1914        load_files();
1915      }
1916      //scroll event
1917      window.addEventListener('scroll', function () {
1918        if (isElementIntoView(a[0], 300)) {
1919          load_files();
1920        }
1921      });
1922
1923      for (var i = 0; i < a.length; i++) {
1924        a[i].onclick = function () {
1925          setTimeout(function () {
1926            var resizeEvent = window.document.createEvent('UIEvents');
1927            resizeEvent.initUIEvent('resize', true, false, window, 0);
1928            window.dispatchEvent(resizeEvent);
1929          }, 10);
1930        };
1931      }
1932    };
1933  })(document.querySelectorAll('a[data-lightbox]'), jQuery);
1934
1935  // function modular features dropdown
1936  (function (a, $) {
1937    if (a.length) {
1938
1939      var ocultBtn = function ( $ext, $inter ) {
1940        return $inter.height() <= $ext.height();
1941      };
1942
1943      for (var i = 0; i < a.length; i++) {
1944        (function(o){
1945          var n = o.querySelector('.sta-features-air_list').childElementCount,
1946          $o = $(o);
1947
1948          $o.addClass('less3_'+ n%3 );
1949          
1950          if( !$o.hasClass('sta-features-highlights') ) $o.addClass('less4_'+ n%4);
1951
1952          if($o.hasClass('sta-open')){
1953            return true;
1954          }
1955          
1956          if(  ocultBtn($( o.querySelector('.sta-features-air_listMax')), $(o.querySelector('.sta-features-air_list')) )  ){
1957            o.classList.add('sta-notBtn');
1958          } else {
1959            $( o.querySelector('.sta-features-air_btns-element') ).click(function () {
1960              setTimeout(function () {
1961                $("body,html").animate({
1962                  scrollTop: o.offset().top
1963                }, 0);
1964              }, 10);
1965            });
1966          };
1967
1968        })( a[i] );
1969      };
1970
1971    };
1972  })(document.querySelectorAll('.tgl-features-air'), jQuery);
1973  // function modular scroll events
1974  (function (a, $) {
1975    if (a.length) {
1976      for (var i = 0; i < a.length; i++) {
1977        var parent = a[i];
1978
1979        parent.addEventListener("click", function () {
1980          var current_element = this,
1981          point = current_element.dataset.scroll_to,
1982          spacer = current_element.dataset.scroll_spacer;
1983          $('body').removeClass('noscroll');
1984          $('.tgl-internbar-air.sta-show-responsive.fn-open').removeClass('fn-open');
1985          hotusa().scrollTo($(point), { 'height': spacer });
1986        });
1987      }
1988
1989    };
1990  })(document.querySelectorAll('.js-scrollto'), jQuery);
1991
1992  // function unique fixed gallery
1993  (function (a, $) {
1994    if ( !a.length ) return false;
1995
1996    var calc_gallery = function(o,_o){
1997      // var window_position = (document.documentElement.scrollTop || document.body.scrollTop) + window.innerHeight,
1998      // content_height = document.querySelector('.tgl-cardpage-air'),
1999      // gallery_positionTop = content_height.offsetTop,
2000      // gallery_position = content_height.offsetTop + content_height.offsetHeight,
2001      // gallery_contentTop = content_height.offsetTop;
2002
2003      var _s = _o.offset().top;
2004
2005      if( _s >= hotusa().getScrollTop() ){
2006        //top
2007        o.classList.add('fn-stopStart');
2008        o.classList.remove('fn-stop');
2009
2010      } else if( _s + _o.innerHeight() <= hotusa().getScrollTop() + hotusa().getWindowHeight() ) {
2011        //bottom
2012        o.classList.add('fn-stop');
2013        o.classList.remove('fn-stopStart');
2014      } else {
2015        //center
2016        o.classList.remove('fn-stop','fn-stopStart');
2017      };
2018    },
2019    ev = function(o){
2020      var $fatherModule = $(o).parent();
2021
2022      calc_gallery(o,$fatherModule);
2023
2024      $(window).scroll(function () {
2025        calc_gallery(o,$fatherModule);
2026      });
2027    };
2028
2029    for (var i = 0; i < a.length; i++) ev( a[i] );
2030
2031  })(document.querySelectorAll('.sta-cardpage-air_multimedia'), jQuery);
2032
2033  setTimeout(function () {
2034    $('.tgl-menus-air').css('opacity', '1');
2035    $('.tgl-internbar-air').css('opacity', '1');
2036  }, 1000);
2037  // Document ready END
2038});
2039
2040$(window).load(function () {
2041
2042  // function first motor click
2043  (function (o, $) {
2044    if (o) {
2045      var checker = true;
2046      o.addEventListener('click', function () {
2047        if (checker) {
2048          var spacer = (window.innerHeight - 80) / 2;
2049          hotusa().scrollTo(o, { 'height': spacer });
2050          checker = false;
2051        } else {
2052          return false;
2053        }
2054      });
2055    };
2056  })(document.querySelector('.sta-cover-air_engine'), jQuery);
2057
2058  // function modular info popup
2059  (function (a, $) {
2060    if (a.length) {
2061      for (var i = 0; i < a.length; i++) {
2062        (function(mod){
2063          mod.style.display = 'block'; 
2064          $( mod.previousElementSibling ).click(function () {
2065            $(mod.querySelector('.sta-infopop-air_services')).resize();
2066            setTimeout(function(){
2067              mod.classList.add('fn-open');
2068            },250);
2069          });
2070  
2071          var $next = $(mod.previousElementSibling);
2072
2073          if( $next.hasClass('sta-popoffer-air_gadget hotels') ){
2074            var avisos = document.querySelectorAll('.tgl-avisos-air');
2075            
2076            $next.click(function () {
2077              var $obj = $(mod);
2078              $obj.addClass('fn-open');
2079              $( mod.querySelectorAll('.sta-infopop-air_backmask, .sta-infopop-air_close') ).click(function () {
2080                $obj.removeClass('fn-open');
2081              });
2082            });
2083
2084            var $devices = $( document.querySelector('.tgl-devicesheader-air') ),
2085            avisosElem = document.querySelectorAll('.tgl-globalAlertas-air .tgl-avisos-air'),
2086            $headerP = $(document.querySelector('.tgl-menus-air')),
2087            $header = $($headerP[0].querySelector('.sta-menus-air_nav')),
2088            $interbar = $(document.querySelector('.tgl-internbar-air')),
2089            $imgLogo = $(document.querySelector('.tgl-cover-air .sta-cover-air_logo')),
2090            $imgLogoWhite = $(document.querySelector('.sta-menus-air_logo-img.sta-white')),
2091            $noLogo = $(document.querySelector('.tgl-cover-air.sta-devices-hide>div:not(.sta-cover-air_engine)'));
2092
2093            $(window).ready(function(){
2094              var height = (function(){
2095                var _height = 0;
2096                for( var i = 0; i < avisosElem.length; i++ ){
2097                  (function( av ){
2098                    if( $(av).css('display') !== 'none' ){
2099                      var heigIndi = $(av).outerHeight();
2100                      _height += heigIndi;
2101                      av.querySelector('.sta-avisos-air_closeBtn').addEventListener('change',function(){
2102                        if( !this.checked ) return false;
2103                        alturaAll -= heigIndi;
2104                        avisos -= heigIndi;
2105                      }, false);
2106                    };
2107                  })( avisosElem[i] );
2108                }
2109                return _height;
2110              })(),
2111              avisos = height,
2112              alturaAll = avisos,
2113              altura2 = 0;
2114              if( window.innerWidth < 1024 ){
2115                //title superior mobile
2116                if( $devices.length ) alturaAll += $devices.outerHeight();
2117
2118                $(window).scroll(function(){
2119                  $(window).scrollTop() < alturaAll
2120                  ? $next.addClass('sta-absolute').css('top',alturaAll +'px')
2121                  : $next.removeClass('sta-absolute').css('top',0);
2122                });
2123              } else {
2124                //header
2125                if( $header.length ) alturaAll += $header.outerHeight();
2126                //listado habitaciones
2127                if( $interbar.length ) alturaAll += $interbar.outerHeight();
2128                altura2 = alturaAll - avisos;
2129                $(window).scroll(function(){
2130                  $(window).scrollTop() < avisos
2131                  ? $next.css('top',alturaAll+'px')
2132                  : $next.css('top',altura2 +'px');
2133                  if( avisos != 0 ){
2134                    $(window).scrollTop() < avisos
2135                    ? $next.addClass('sta-absolute')
2136                    : $next.removeClass('sta-absolute');
2137                  }
2138                });
2139              }
2140            });
2141
2142          }
2143        })(a[i]);
2144      }
2145
2146      $( document.querySelectorAll('.js-close-infopopup') ).click(function () {
2147        $('.tgl-infopop-air').removeClass('fn-open');
2148      });
2149    };
2150  })(document.querySelectorAll('.tgl-infopop-air'), jQuery);
2151
2152  // function modular info dropdowns
2153  (function (a, $) {
2154    if (a.length) {
2155      for (var i = 0; i < a.length; i++) {
2156        var module = a[i];
2157
2158        var opener = module.querySelector('.sta-cardpage-air_dropdowns-header');
2159        opener.addEventListener("click", function () {
2160          var btn = this;
2161          var dropdown = btn.parentNode;
2162
2163          if (dropdown.classList.contains('fn-open')) {
2164            dropdown.classList.remove('fn-open');
2165          } else {
2166            $('.sta-cardpage-air_dropdowns-element').removeClass('fn-open');
2167            dropdown.classList.add('fn-open');
2168          }
2169        });
2170      }
2171    };
2172  })(document.querySelectorAll('.sta-cardpage-air_dropdowns-element'), jQuery);
2173
2174  // function unique cookies popup
2175  (function (o, $) {
2176    if (o) {
2177      o.style.display = 'block';
2178      setTimeout(function () {
2179        o.classList.add('fn-open');
2180      }, 50);
2181
2182      var closer = document.querySelector('.js-accept-cookies');
2183      closer.onclick = function () {
2184        o.classList.remove('fn-open');
2185      }
2186    };
2187  })(document.querySelector('._tgl-cookies-air'), jQuery);
2188
2189  if (!window.location.hash && !window.location.href.includes("scroll=")) {
2190    window.scrollTo(0, 1);
2191    window.scrollTo(0, 0);
2192  }
2193  $('.tgl-menus-air').css('opacity', '1');
2194  $('.tgl-internbar-air').css('opacity', '1');
2195  // Window load END
2196});
2197
2198
2199//carga de opiniones
2200(function( lista, footer, id, $, h ){
2201  if( !lista || !footer || !id || !$ || !h ) return false;
2202
2203  var combinarDatos = function( _json ){
2204    var _jsonTemp = _json,
2205    keys = _.keys(_json);
2206    
2207    //combinamos
2208    for (var i = 0; i < keys.length; i++) {
2209
2210      if( jsonGeneral[ keys[i] ].totalOpiniones > 0 && _jsonTemp[ keys[i] ].opiniones && _jsonTemp[ keys[i] ].opiniones.length ){
2211        jsonGeneral[ keys[i] ].opiniones = jsonGeneral[ keys[i] ].opiniones.concat( _jsonTemp[ keys[i] ].opiniones );
2212        jsonGeneral.all.opiniones = jsonGeneral.all.opiniones.concat( _jsonTemp[ keys[i] ].opiniones );
2213      };
2214      jsonGeneral[ keys[i] ].loadNextPage = _jsonTemp[ keys[i] ].loadNextPage;
2215      if( jsonGeneral[ keys[i] ].loadNextPage ) jsonGeneral.all.loadNextPage = true;
2216
2217    };
2218    
2219    $paginacionMod.removeClass('sta-loading');
2220
2221    cargarOpiniones();
2222  },
2223  cargamosMore = function(){
2224    if( cargados < jsonGeneral[idioma_select].opiniones.length ){
2225      //faltan por cargar
2226      cargarOpiniones();
2227    } else if( cargados >= jsonGeneral[idioma_select].opiniones.length && jsonGeneral[idioma_select].loadNextPage ){
2228      paginacionRuta++;
2229      $paginacionMod.addClass('sta-loading').addClass('sta-hide');
2230      paginacionActive = false;
2231      
2232      h.cargarJSON(ruta(),combinarDatos);
2233    };
2234  },
2235  dobleCero = function(num){
2236    var tam = num.toString().length;
2237    if( tam < 2 ) num = '0'+num;
2238    return num;
2239  },
2240  crearHtml = function( obj ){
2241    var $html = $backup.clone();
2242
2243    $( $html[0].querySelector(".tgl-reviews-air_list-element-header .tgl-reviews-air_element-header-name") ).text( obj.persona );
2244    if( obj.lugar ) $( $html[0].querySelector(".tgl-reviews-air_list-element-header .tgl-reviews-air_element-header-name") ).append( "<small>|</small>" + obj.lugar );
2245
2246    var fecha = new Date( obj.fecha );
2247    $( $html[0].querySelector(".tgl-reviews-air_list-element-header .tgl-reviews-air_element-header-date") ).text( dobleCero( fecha.getDate() ) + '/' + dobleCero( fecha.getMonth()+1 ) + '/' + fecha.getFullYear() );
2248
2249    var $tool = $($html[0].querySelector(".tgl-reviews-air_list-element-specs")),
2250    lis = _.keys( obj.nota_servi );
2251    for (var i = 0; i < lis.length; i++){
2252      (function(li){
2253        if( obj.nota_servi[li] !== null ){
2254          $( $html[0].querySelector(".tgl-reviews-air_list-element-specs") )
2255          .append( $("<div></div>",{class:'tgl-reviews-air_element-specs-point'})
2256            .append( $("<p></p>",{class:'tgl-reviews-air_specs-point-text'}).text( li ) )
2257            .append( $("<span></span>",{class:"tgl-reviews-air_specs-point-number"}).text( obj.nota_servi[li]+"/10" ) )
2258          );
2259        };
2260      })(lis[i]);
2261    };
2262    
2263    $( $html[0].querySelector(".tgl-reviews-air_element-foot-comment .tgl-reviews-air_foot-comment-title") ).text( obj.text );
2264    $( $html[0].querySelector(".tgl-reviews-air_element-foot-comment .tgl-reviews-air_foot-comment-text") ).text( obj.titulo );
2265
2266    $( $html[0].querySelector(".tgl-reviews-air_element-foot-grade .tgl-reviews-air_grade-box-number") ).text( Math.round(obj.nota*10)/10 );
2267    if( !obj.recomendado ) $($html[0].querySelector(".tgl-reviews-air_element-foot-grade .tgl-reviews-air_foot-grade-phrase")).remove();
2268
2269    return $html;
2270  },
2271  cargarOpiniones = function(){
2272    for (var i = 0; i < max && cargados < jsonGeneral[idioma_select].opiniones.length; i++, cargados++) {
2273      $lista.append( crearHtml( jsonGeneral[idioma_select].opiniones[cargados] ) );
2274    };
2275
2276    if( (cargados < jsonGeneral[idioma_select].opiniones.length || jsonGeneral[idioma_select].loadNextPage ) && !paginacionActive ){
2277      $paginacionMod.removeClass('sta-hide');
2278      paginacionActive = true;
2279    } else if( $paginacionMod.length && cargados >= jsonGeneral[idioma_select].opiniones.length && paginacionActive ){
2280      if( !jsonGeneral[idioma_select].loadNextPage ){
2281        $paginacionMod.addClass('sta-hide');
2282        paginacionActive = false;
2283      }
2284    };
2285  },
2286  controlIdioma = function(){
2287    //Si el idioma seleccionado no existe seleccionamos el por defecto EN
2288    if( !jsonGeneral[idioma_select] ){
2289      idioma_select = idiomaDefault;
2290      //comprobamos el de por defecto, y si no hay cogemos el primero que haya
2291      if( !jsonGeneral[idioma_select] ) idioma_select = _.keys(jsonGeneral)[0];
2292    };
2293  },
2294  $lista = $(lista),
2295  $paginacionMod = $(footer),
2296  $backup = $( lista.querySelector('.tgl-reviews-air_list-element') ).clone().removeClass('sta-oculto'),
2297  idioma_act = $('html').attr('lang').toUpperCase(),
2298  idioma_select = idioma_act,
2299  idiomaDefault = 'all',
2300  paginacionRuta = 1,
2301  paginacionActive = true,
2302  max = 10,
2303  cargados = 0,
2304  jsonGeneral = false,
2305  ruta = function(){
2306    return '/api/cms/opiniones/get/'+id+'/'+paginacionRuta+'/'+idioma_act
2307  },
2308  callback = function(_json){
2309    jsonGeneral = _json;
2310    
2311    var keys = _.keys(jsonGeneral);
2312
2313    jsonGeneral.all = { opiniones : [], loadNextPage : false, totalOpiniones : 0 };
2314
2315    if( !keys.length ){
2316      console.trace('Sin opiniones');
2317    } else {
2318
2319      //creamos all
2320      for (var i = 0; i < keys.length; i++) {
2321        if( jsonGeneral[ keys[i] ].totalOpiniones > 0 && jsonGeneral[ keys[i] ].opiniones && jsonGeneral[ keys[i] ].opiniones.length ){
2322          jsonGeneral.all.opiniones = jsonGeneral.all.opiniones.concat( jsonGeneral[ keys[i] ].opiniones );
2323          jsonGeneral.all.totalOpiniones += jsonGeneral[ keys[i] ].totalOpiniones;
2324          if( jsonGeneral[ keys[i] ].loadNextPage ) jsonGeneral.all.loadNextPage = true;
2325        };
2326      };
2327
2328      //seleccionamos el idioma seleccionado (si hay), el idioma por defecto o el primero que obtenga.
2329      controlIdioma();
2330
2331      $paginacionMod.removeClass('sta-loading');
2332      
2333      cargarOpiniones();
2334
2335      $( footer.querySelector('.tgl-reviews-air_foot-btn') ).click( cargamosMore );
2336    };
2337
2338  };
2339
2340  $lista.empty();
2341
2342  $('main').addClass('sta-init-space');
2343
2344  h.cargarJSON(ruta(),callback);
2345
2346})( document.querySelector('.tgl-reviews-air_list'), document.querySelector('.tgl-reviews-air_foot'), dataSeo && dataSeo.hotel && dataSeo.hotel.id, window.jQuery, window.hotusa && hotusa() );
2347
2348//validation and envio form newsletters
2349(function(o,seo,$,h){
2350  if( !o || !$ || !h || !seo || !seo.hotel || !seo.hotel.name ) return false;
2351  var form = o.querySelector('form'),
2352  $form = $( o.querySelector('form') ),
2353  obj = {
2354    fidelTour : $form.data('fideltour_code').trim(),
2355    url : $form.data('urldirect').trim(),
2356    recaptcha : $form.data('recaptcha').trim(),
2357    mail : {
2358      $p : $('.fn-email',$form),
2359      $inp : $('.fn-email input',$form)
2360    },
2361    poli : {
2362      $p : $('.fn-poli',$form),
2363      $check : $('.fn-poli input',$form)
2364    },
2365    error : {
2366      $o : $('.sta-error',$form),
2367      copy : {
2368        $empty : $('<li id="g_form_error_empty"></li>').text( form.copyEmpty.value ),
2369        $email : $('<li id="g_form_error_email"></li>').text( form.copyEmail.value ),
2370        $policy : $('<li id="g_form_error_politicas"></li>').text( form.copyPoliticas.value ),
2371        $ok : $('<li></li>').text( form.copyOk.value )
2372      }
2373    }
2374  },
2375  valid = function(){
2376    var enviar = true;
2377
2378    obj.error.$o.empty().removeClass('sta-newsletter-air_warning-text sta-newsletter-air_done-text');
2379
2380    if( h.mail( obj.mail.$inp.val().trim() ) ){
2381      obj.mail.$p.removeClass('invalid')
2382    } else {
2383      enviar = false;
2384      obj.mail.$p.addClass('invalid');
2385      obj.error.$o.append( obj.error.copy.$email );
2386    };
2387    
2388    if( obj.poli.$check.prop('checked') ){
2389      obj.poli.$p.removeClass('invalid')
2390    } else {
2391      enviar = false;
2392      obj.poli.$p.addClass('invalid');
2393      obj.error.$o.append( obj.error.copy.$policy );
2394    };
2395
2396    if( !enviar ) obj.error.$o.addClass('sta-newsletter-air_warning-text');
2397
2398    return enviar;
2399  },
2400  ajax = function( datos ){
2401    $.ajax({
2402      type: 'POST',
2403      url: obj.url ? obj.url : getFormUrl(),
2404      async: false,
2405      data: JSON.stringify( datos ),
2406      success: function (n) {
2407        processEnvio = false;
2408        switch (n) {
2409          case 'OK':
2410            form.reset();
2411            obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-newsletter-air_done-text');
2412            break;
2413          case 'ERR':
2414            console.trace("Not template",n);
2415            break;
2416          case 'KO - Error Formato Datos JSON':
2417          case 'KO':
2418          default:
2419            console.trace(n);
2420            break;
2421        };
2422      },
2423      error: function (n) {
2424        processEnvio = false;
2425        console.trace("ERROR:", n);
2426      }
2427    });
2428  },
2429  ajaxFidelTour = function( datos ){
2430    $.ajax({
2431      type: 'POST',
2432      url: 'https://backend.fideltour.com/api/contacts/subscription/?hc=' + obj.fidelTour + '&i=1&lang=' + $('html').attr('lang') + '&tags=NL',
2433      async: false,
2434      data: "email=" + encodeURIComponent(datos.d.email),
2435      success: function (n) {
2436        processEnvio = false;
2437
2438        if( n.indexOf('correctamente') >= 0 ){
2439          form.reset();
2440          obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-newsletter-air_done-text');
2441        } else {
2442          console.trace("Error: fideltour",n);
2443        }
2444      },
2445      error: function (n) {
2446        processEnvio = false;
2447        console.trace("ERROR:", n);
2448      }
2449    })
2450  },
2451  enviar = function(){
2452    var datos = {
2453      d : {
2454        nombreHotel : seo.hotel.name,
2455        email       : obj.mail.$inp.val().trim(),
2456        url         : location.origin + location.pathname
2457      }
2458    };
2459
2460    if( obj.recaptcha ){
2461      grecaptcha.ready(function() {
2462        grecaptcha.execute(obj.recaptcha,{action: 'sendForm'}).then(function(token) {
2463          obj.fidelTour
2464          ? ajaxFidelTour(datos)
2465          : ajax(datos);
2466        });
2467      });
2468    } else {
2469      obj.fidelTour
2470      ? ajaxFidelTour(datos)
2471      : ajax(datos);
2472    };
2473  };
2474
2475  $form.submit(function(e){
2476    e.preventDefault();
2477    if( valid() ) enviar();
2478  });
2479
2480  if( obj.recaptcha ) h.cargarFicheroJS('https://www.google.com/recaptcha/api.js?render='+obj.recaptcha);
2481
2482})( document.querySelector('.tgl-newsletter-air'), window.dataSeo, window.jQuery, window.hotusa && hotusa() );
2483
2484//formulario de contacto
2485(function( form, $, h ){
2486  if( !form || !$ || !h ) return false;
2487
2488  var valid = function(){
2489    var enviar = true,
2490    empty = false;
2491
2492    obj.error.$o.empty().removeClass('sta-cardpage-air_warning-text sta-cardpage-air_done-text');
2493
2494    for (var i = 0; i < obj.obligText.length; i++) {
2495      (function( elem ){
2496        if( elem.o.value.trim() ){
2497          elem.$p.removeClass('invalid');
2498        } else {
2499          elem.$p.addClass('invalid');
2500          enviar = false;
2501          empty = true;
2502        }
2503      })( obj.obligText[i] );
2504    };
2505
2506    if( empty ) obj.error.$o.append( obj.error.copy.$empty );
2507    
2508    if( !h.mail( obj.email.o.value.trim() ) ){
2509      enviar = false;
2510      obj.email.$p.addClass('invalid');
2511      obj.error.$o.append( obj.error.copy.$email );
2512    };
2513    
2514    if( obj.policy.o.checked ){
2515      obj.policy.$p.removeClass('invalid');
2516    } else {
2517      enviar = false;
2518      obj.policy.$p.addClass('invalid');
2519      obj.error.$o.append( obj.error.copy.$policy );
2520    };
2521
2522    if( !enviar ){
2523      obj.error.$o.addClass('sta-cardpage-air_warning-text');
2524      processEnvio = false;
2525    };
2526
2527    return enviar;
2528  },
2529  ajax = function( datos ){
2530    $.ajax({
2531      type: 'POST',
2532      url: getFormUrl(),
2533      async: false,
2534      data: JSON.stringify( datos ),
2535      success: function (n) {
2536        processEnvio = false;
2537        switch (n) {
2538          case 'OK':
2539            form.reset();
2540            obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-cardpage-air_done-text');
2541            break;
2542          case 'ERR':
2543            console.trace("Not template",n);
2544            break;
2545          case 'KO - Error Formato Datos JSON':
2546          case 'KO':
2547          default:
2548            console.trace(n);
2549            break;
2550        };
2551      },
2552      error: function (n) {
2553        processEnvio = false;
2554        console.trace("ERROR:", n);
2555      }
2556    });
2557  },
2558  enviar = function(){
2559    var datos = {
2560      d : {
2561        name    : obj.name.o.value.trim(),
2562        surname : obj.surname.o.value.trim(),
2563        email   : obj.email.o.value.trim(),
2564        telephone : obj.telephone.o.value.trim(),
2565        comments : obj.comments.o.value.trim(),
2566        policy  : obj.acept_mail.o.checked ? 'yes' : 'no'
2567      }
2568    };
2569
2570    if( obj.recaptcha ){
2571      grecaptcha.ready(function() {
2572        grecaptcha.execute(obj.recaptcha,{action: 'sendForm'}).then(function(token) {
2573          ajax(datos);
2574        });
2575      });
2576    } else {
2577      ajax(datos);
2578    };
2579  },
2580  obj = {
2581    url : $(form).data('url').trim(),
2582    idProd : $(form).data('id'),
2583    recaptcha : $(form).data('recaptcha').trim(),
2584    name : {
2585      o   : form.name,
2586      $p  : $(form.name).parent()
2587    },
2588    surname : {
2589      o   : form.surname,
2590      $p  : $(form.surname).parent()
2591    },
2592    email : {
2593      o   : form.email,
2594      $p  : $(form.email).parent()
2595    },
2596    telephone : {
2597      o   : form.telephone,
2598      $p  : $(form.telephone).parent()
2599    },
2600    comments : {
2601      o   : form.comments,
2602      $p  : $(form.comments).parent()
2603    },
2604    policy : {
2605      o   : form.policy,
2606      $p  : $(form.policy).parent()
2607    },
2608    acept_mail : {
2609      o   : form.acept_mail,
2610      $p  : $(form.acept_mail).parent()
2611    },
2612    obligText : [],
2613    error : {
2614      $o : $( form.querySelector('.sta-error') ),
2615      copy : {
2616        $empty : $('<li id="g_form_error_empty"></li>').text( form.copyEmpty.value ),
2617        $email : $('<li id="g_form_error_email"></li>').text( form.copyEmail.value ),
2618        $policy : $('<li id="g_form_error_politicas"></li>').text( form.copyPoliticas.value ),
2619        $ok : $('<li></li>').text( form.copyOk.value )
2620      }
2621    }
2622  },
2623  processEnvio = false;
2624
2625  obj.obligText.push( obj.name, obj.surname, obj.telephone, obj.email, obj.comments );
2626
2627  $( form ).submit(function(e){
2628    e.preventDefault();
2629    
2630    if( !processEnvio ){
2631      processEnvio = true;
2632      if( valid() ) enviar();
2633    }
2634    
2635  });
2636
2637  if( obj.recaptcha ) h.cargarFicheroJS('https://www.google.com/recaptcha/api.js?render='+obj.recaptcha);
2638
2639})( document.querySelector('.formContact'), window.jQuery, window.hotusa && hotusa() );
2640
2641//formulario de contacto Ampliado
2642(function( form, $, h ){
2643  if( !form || !$ || !h ) return false;
2644
2645  var valid = function(){
2646    var enviar = true,
2647    empty = false;
2648    
2649    obj.error.$o.empty().removeClass('sta-cardpage-air_warning-text sta-cardpage-air_done-text');
2650
2651    for (var i = 0; i < obj.obligText.length; i++) {
2652      (function( elem ){
2653        if( elem.o.value.trim() ){
2654          elem.$p.removeClass('invalid');
2655        } else {
2656          elem.$p.addClass('invalid');
2657          enviar = false;
2658          empty = true;
2659        }
2660      })( obj.obligText[i] );
2661    };
2662
2663    if( empty ) obj.error.$o.append( obj.error.copy.$empty );
2664    
2665    if( !h.mail( obj.email.o.value.trim() ) ){
2666      enviar = false;
2667      obj.email.$p.addClass('invalid');
2668      obj.error.$o.append( obj.error.copy.$email );
2669    };
2670    
2671    if( obj.policy.o.checked ){
2672      obj.policy.$p.removeClass('invalid');
2673    } else {
2674      enviar = false;
2675      obj.policy.$p.addClass('invalid');
2676      obj.error.$o.append( obj.error.copy.$policy );
2677    };
2678
2679    if( !enviar ){
2680      obj.error.$o.addClass('sta-cardpage-air_warning-text');
2681      processEnvio = false;
2682    };
2683
2684    return enviar;
2685  },
2686  ajax = function( datos ){
2687    $.ajax({
2688      type: 'POST',
2689      url: getFormUrl(),
2690      async: false,
2691      data: JSON.stringify( datos ),
2692      success: function (n) {
2693        processEnvio = false;
2694        switch (n) {
2695          case 'OK':
2696            typeof dataLayer !== 'undefined' 
2697              ? dataLayer.push({'event': 'reschase'}) 
2698              : null;
2699            form.reset();
2700            obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-cardpage-air_done-text');
2701            break;
2702          case 'ERR':
2703            console.trace("Not template",n);
2704            break;
2705          case 'KO - Error Formato Datos JSON':
2706          case 'KO':
2707          default:
2708            console.trace(n);
2709            break;
2710        };
2711      },
2712      error: function (n) {
2713        processEnvio = false;
2714        console.trace("ERROR:", n);
2715      }
2716    });
2717  },
2718  enviar = function(){
2719    var formatDate = obj.date.o.value.trim().split('-'),
2720    datos = {
2721      d : {
2722        name    : obj.name.o.value.trim(),
2723        surname : obj.surname.o.value.trim(),
2724        telephone : obj.telephone.o.value.trim(),
2725        email   : obj.email.o.value.trim(),
2726        hour : obj.hour.o.value.trim(),
2727        date : formatDate[2]+'/'+formatDate[1]+'/'+formatDate[0],
2728        numberpeople : obj.numberpeople.o.value.trim(),
2729        comments : obj.comments.o.value.trim(),
2730        policy  : obj.acept_mail.o.checked ? 'yes' : 'no'
2731      }
2732    };
2733
2734    if( obj.recaptcha ){
2735      grecaptcha.ready(function() {
2736        grecaptcha.execute(obj.recaptcha,{action: 'sendForm'}).then(function(token) {
2737          ajax(datos);
2738        });
2739      });
2740    } else {
2741      ajax(datos);
2742    };
2743  },
2744  obj = {
2745    url : $(form).data('url').trim(),
2746    idProd : $(form).data('id'),
2747    recaptcha : $(form).data('recaptcha').trim(),
2748    name : {
2749      o   : form.name,
2750      $p  : $(form.name).parent()
2751    },
2752    surname : {
2753      o   : form.surname,
2754      $p  : $(form.surname).parent()
2755    },
2756    telephone : {
2757      o   : form.telephone,
2758      $p  : $(form.telephone).parent()
2759    },
2760    email : {
2761      o   : form.email,
2762      $p  : $(form.email).parent()
2763    },
2764    hour : {
2765      o   : form.hour,
2766      $p  : $(form.hour).parent()
2767    },
2768    date : {
2769      o   : form.date,
2770      $p  : $(form.date).parent()
2771    },
2772    numberpeople : {
2773      o   : form.numberpeople,
2774      $p  : $(form.numberpeople).parent()
2775    },
2776    comments : {
2777      o   : form.comments,
2778      $p  : $(form.comments).parent()
2779    },
2780    policy : {
2781      o   : form.policy,
2782      $p  : $(form.policy).parent()
2783    },
2784    acept_mail : {
2785      o   : form.acept_mail,
2786      $p  : $(form.acept_mail).parent()
2787    },
2788    obligText : [],
2789    error : {
2790      $o : $( form.querySelector('.sta-error') ),
2791      copy : {
2792        $empty : $('<li id="g_form_error_empty"></li>').text( form.copyEmpty.value ),
2793        $email : $('<li id="g_form_error_email"></li>').text( form.copyEmail.value ),
2794        $policy : $('<li id="g_form_error_politicas"></li>').text( form.copyPoliticas.value ),
2795        $ok : $('<li></li>').text( form.copyOk.value )
2796      }
2797    }
2798  },
2799  processEnvio = false;
2800
2801  obj.obligText.push( obj.name, obj.surname, obj.telephone, obj.email, obj.hour, obj.date, obj.numberpeople );
2802
2803  $( form ).submit(function(e){
2804    e.preventDefault();
2805    
2806    if( !processEnvio ){
2807      processEnvio = true;
2808      if( valid() ) enviar();
2809    }
2810    
2811  });
2812
2813  if( obj.recaptcha ) h.cargarFicheroJS('https://www.google.com/recaptcha/api.js?render='+obj.recaptcha);
2814
2815})( document.querySelector('.formContactAmpliado'), window.jQuery, window.hotusa && hotusa() );
2816
2817//formulario de arrepentimiento
2818(function( form, $, h ){
2819  if( !form || !$ || !h ) return false;
2820
2821  var valid = function(){
2822    var enviar = true,
2823    empty = false;
2824    
2825    obj.error.$o.empty().removeClass('sta-cardpage-air_warning-text sta-cardpage-air_done-text');
2826
2827    for (var i = 0; i < obj.obligText.length; i++) {
2828      (function( elem ){
2829        if( elem.o.value.trim() ){
2830          elem.$p.removeClass('invalid');
2831        } else {
2832          elem.$p.addClass('invalid');
2833          enviar = false;
2834          empty = true;
2835        }
2836      })( obj.obligText[i] );
2837    };
2838
2839    if( empty ) obj.error.$o.append( obj.error.copy.$empty );
2840    
2841    if( obj.policy.o.checked ){
2842      obj.policy.$p.removeClass('invalid');
2843    } else {
2844      enviar = false;
2845      obj.policy.$p.addClass('invalid');
2846      obj.error.$o.append( obj.error.copy.$policy );
2847    };
2848
2849    if( !enviar ){
2850      obj.error.$o.addClass('sta-cardpage-air_warning-text');
2851      processEnvio = false;
2852    };
2853
2854    return enviar;
2855  },
2856  ajax = function( datos ){
2857    $.ajax({
2858      type: 'POST',
2859      url: getFormUrl(),
2860      async: false,
2861      data: JSON.stringify( datos ),
2862      success: function (n) {
2863        processEnvio = false;
2864        switch (n) {
2865          case 'OK':
2866            form.reset();
2867            obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-cardpage-air_done-text');
2868            break;
2869          case 'ERR':
2870            console.trace("Not template",n);
2871            break;
2872          case 'KO - Error Formato Datos JSON':
2873          case 'KO':
2874          default:
2875            console.trace(n);
2876            break;
2877        };
2878      },
2879      error: function (n) {
2880        processEnvio = false;
2881        console.trace("ERROR:", n);
2882      }
2883    });
2884  },
2885  enviar = function(){
2886    var datos = {
2887      d : {
2888        name    : obj.name.o.value.trim(),
2889        locator : obj.locator.o.value.trim(),
2890        policy  : obj.acept_mail.o.checked ? 'yes' : 'no'
2891      }
2892    };
2893
2894    if( obj.recaptcha ){
2895      grecaptcha.ready(function() {
2896        grecaptcha.execute(obj.recaptcha,{action: 'sendForm'}).then(function(token) {
2897          ajax(datos);
2898        });
2899      });
2900    } else {
2901      ajax(datos);
2902    };
2903  },
2904  obj = {
2905    url : $(form).data('url').trim(),
2906    idProd : $(form).data('id'),
2907    recaptcha : $(form).data('recaptcha').trim(),
2908    name : {
2909      o   : form.name,
2910      $p  : $(form.name).parent()
2911    },
2912    locator : {
2913      o   : form.locator,
2914      $p  : $(form.locator).parent()
2915    },
2916    policy : {
2917      o   : form.policy,
2918      $p  : $(form.policy).parent()
2919    },
2920    acept_mail : {
2921      o   : form.acept_mail,
2922      $p  : $(form.acept_mail).parent()
2923    },
2924    obligText : [],
2925    error : {
2926      $o : $( form.querySelector('.sta-error') ),
2927      copy : {
2928        $empty : $('<li id="g_form_error_empty"></li>').text( form.copyEmpty.value ),
2929        $email : $('<li id="g_form_error_email"></li>').text( form.copyEmail.value ),
2930        $policy : $('<li id="g_form_error_politicas"></li>').text( form.copyPoliticas.value ),
2931        $ok : $('<li></li>').text( form.copyOk.value )
2932      }
2933    }
2934  },
2935  processEnvio = false;
2936
2937  obj.obligText.push( obj.name, obj.locator );
2938
2939  $( form ).submit(function(e){
2940    e.preventDefault();
2941    
2942    if( !processEnvio ){
2943      processEnvio = true;
2944      if( valid() ) enviar();
2945    }
2946    
2947  });
2948
2949  if( obj.recaptcha ) h.cargarFicheroJS('https://www.google.com/recaptcha/api.js?render='+obj.recaptcha);
2950
2951})( document.querySelector('.formArrepentimiento'), window.jQuery, window.hotusa && hotusa() );
2952
2953//formulario de contacto + archivo
2954(function( form, $, h ){
2955  if( !form || !$ || !h ) return false;
2956
2957  var valid = function(){
2958    var enviar = true,
2959    empty = false,
2960    fileSize = false,
2961    fileExt = false,
2962    sendFile = true;
2963
2964    obj.error.$o.empty().removeClass('sta-cardpage-air_warning-text sta-cardpage-air_done-text');
2965
2966    for (var i = 0; i < obj.obligText.length; i++) {
2967      (function( elem ){
2968        if( elem.o.value.trim() ){
2969          elem.$p.removeClass('invalid');
2970        } else {
2971          elem.$p.addClass('invalid');
2972          enviar = false;
2973          empty = true;
2974        }
2975      })( obj.obligText[i] );
2976    };
2977
2978    if( empty ) obj.error.$o.append( obj.error.copy.$empty );
2979    
2980    if( !h.mail( obj.email.o.value.trim() ) ){
2981      enviar = false;
2982      obj.email.$p.addClass('invalid');
2983      obj.error.$o.append( obj.error.copy.$email );
2984    };
2985    
2986    if( obj.policy.o.checked ){
2987      obj.policy.$p.removeClass('invalid');
2988    } else {
2989      enviar = false;
2990      obj.policy.$p.addClass('invalid');
2991      obj.error.$o.append( obj.error.copy.$policy );
2992    };
2993
2994    
2995    //files
2996    (function( file ){
2997      var files = file.o.files,
2998      sizeTotal = 0;
2999
3000      sendFile = files.length;
3001
3002      for (var i = 0; i < files.length; i++) {
3003        (function( file ){
3004          var size = file.size;//bytes
3005          sizeTotal += size;
3006          
3007          if( obj.file.ext.indexOf( file.type ) < 0 ){
3008            fileExt = true;
3009            enviar = false;
3010          };
3011
3012          //10Mb max por archivo
3013          if( parseInt( size / (1024 * 1024) ) > 10 ){
3014            fileSize = true;
3015            enviar = false;
3016          };
3017        
3018        })( files[i] );
3019      };
3020
3021      //25Mb max total archivos
3022      if( parseInt( sizeTotal / (1024 * 1024) ) > 25 ){
3023        fileSize = true;
3024        envio = false;
3025      };
3026
3027      if( fileExt ) obj.error.$o.append( obj.error.copy.$fileExt );
3028      if( fileSize ) obj.error.$o.append( obj.error.copy.$fileSize );
3029
3030      fileExt || fileSize ? file.$p.addClass('invalid') : file.$p.removeClass('invalid');
3031
3032    })( obj.file );
3033
3034
3035    if( !enviar ){
3036      obj.error.$o.addClass('sta-cardpage-air_warning-text');
3037      processEnvio = false;
3038    };
3039    
3040    return enviar && sendFile ? sendFile : enviar;
3041
3042  },
3043  ajaxFile = function(){
3044    var fd = new FormData( form );
3045
3046    $.ajax({
3047      type: 'POST',
3048      url: getFormUrl(),
3049      async: false,
3050      data: fd,
3051      cache: false,
3052      contentType: false,
3053      processData: false,
3054      success: function (n) {
3055        processEnvio = false;
3056        switch (n) {
3057          case 'OK':
3058            form.reset();
3059            obj.file.$p.removeClass('sta-fill');
3060            obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-cardpage-air_done-text');
3061            break;
3062          case 'ERR':
3063            console.trace("Not template",n);
3064            break;
3065          case 'KO - Error Formato Datos JSON':
3066          case 'KO':
3067          default:
3068            console.trace(n);
3069            break;
3070        };
3071      },
3072      error: function (n) {
3073        processEnvio = false;
3074        console.trace("ERROR:", n);
3075      }
3076    });
3077  },
3078  ajaxNormal = function(){
3079    var datos = {
3080      d : {
3081        name    : obj.name.o.value.trim(),
3082        surname : obj.surname.o.value.trim(),
3083        email   : obj.email.o.value.trim(),
3084        comments: obj.comments.o.value.trim(),
3085        acept_mail: obj.acept_mail.o.checked ? 'ON' : ''
3086      }
3087    };
3088
3089    $.ajax({
3090      type: 'POST',
3091      url: getFormUrl(),
3092      async: false,
3093      data: JSON.stringify( datos ),
3094      success: function (n) {
3095        processEnvio = false;
3096        switch (n) {
3097          case 'OK':
3098            form.reset();
3099            obj.file.$p.removeClass('sta-fill');
3100            obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-cardpage-air_done-text');
3101            break;
3102          case 'ERR':
3103            console.trace("Not template",n);
3104            break;
3105          case 'KO - Error Formato Datos JSON':
3106          case 'KO':
3107          default:
3108            console.trace(n);
3109            break;
3110        };
3111      },
3112      error: function (n) {
3113        processEnvio = false;
3114        console.trace("ERROR:", n);
3115      }
3116    });
3117  };
3118  enviar = function(file){
3119    if( obj.recaptcha ){
3120      grecaptcha.ready(function() {
3121        grecaptcha.execute(obj.recaptcha,{action: 'sendForm'}).then(function(token) {
3122          file ? ajaxFile() : ajaxNormal();
3123        });
3124      });
3125    } else {
3126      file ? ajaxFile() : ajaxNormal()
3127    };
3128  },
3129  obj = {
3130    url : $(form).data('url').trim(),
3131    idProd : $(form).data('id'),
3132    recaptcha : $(form).data('recaptcha').trim(),
3133    name : {
3134      o   : form.name,
3135      $p  : $(form.name).parent()
3136    },
3137    surname : {
3138      o   : form.surname,
3139      $p  : $(form.surname).parent()
3140    },
3141    email : {
3142      o   : form.email,
3143      $p  : $(form.email).parent()
3144    },
3145    file  : {
3146      o   : form['file[]'],
3147      $p  : $( form['file[]'] ).parent(),
3148      text: form.querySelector('.sta-file .sta-file_name'),
3149      ext : [
3150        'application/pdf',
3151        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
3152        'application/msword'
3153      ]
3154    },
3155    comments : {
3156      o   : form.comments,
3157      $p  : $(form.comments).parent()
3158    },
3159    policy : {
3160      o   : form.policy,
3161      $p  : $(form.policy).parent()
3162    },
3163    acept_mail : {
3164      o   : form.acept_mail,
3165      $p  : $(form.acept_mail).parent()
3166    },
3167    obligText : [],
3168    error : {
3169      $o : $( form.querySelector('.sta-error') ),
3170      copy : {
3171        $empty : $('<li id="g_form_error_empty"></li>').text( form.copyEmpty.value ),
3172        $email : $('<li id="g_form_error_email"></li>').text( form.copyEmail.value ),
3173        $policy : $('<li id="g_form_error_politicas"></li>').text( form.copyPoliticas.value ),
3174        $ok : $('<li></li>').text( form.copyOk.value ),
3175        $fileExt : $('<li></li>').text( form.copyFileExt.value ),
3176        $fileSize : $('<li></li>').text( form.copyFileSize.value )
3177      }
3178    }
3179  },
3180  processEnvio = false;
3181
3182  obj.obligText.push( obj.name, obj.surname, obj.email, obj.comments );
3183
3184  $( form ).submit(function(e){
3185    e.preventDefault();
3186    
3187    if( !processEnvio ){
3188      processEnvio = true;
3189      var _v = valid();
3190      if( _v === true ) enviar(false);
3191      else if( _v && typeof _v == 'number' ) enviar(true);
3192    };
3193  });
3194
3195  //event change file
3196  (function( elem ){
3197    $( elem.o ).on('change',function(){
3198      elem.$p.removeClass('sta-fill invalid');
3199      
3200      var str = '',
3201      files = this.files;
3202
3203      for (var i = 0; i < files.length; i++) {
3204        str += files[i].name;
3205        if( i < files.length - 1 ) str += ', ';
3206      }
3207
3208      if( files.length ){
3209        elem.text.innerText = str;
3210        elem.$p.addClass('sta-fill');
3211      }
3212    })
3213  })( obj.file );
3214
3215  if( obj.recaptcha ) h.cargarFicheroJS('https://www.google.com/recaptcha/api.js?render='+obj.recaptcha);
3216
3217})( document.querySelector('.formArchivo'), window.jQuery, window.hotusa && hotusa() );
3218
3219//formulario de denuncia
3220(function( form, $, h ){
3221  if( !form || !$ || !h ) return false;
3222
3223  var valid = function(){
3224    var enviar = true,
3225    empty = false;
3226
3227    obj.error.$o.empty().removeClass('sta-cardpage-air_warning-text sta-cardpage-air_done-text');
3228
3229    for (var i = 0; i < obj.obligText.length; i++) {
3230      (function( elem ){
3231        if( elem.o.value.trim() ){
3232          elem.$p.removeClass('invalid');
3233        } else {
3234          elem.$p.addClass('invalid');
3235          enviar = false;
3236          empty = true;
3237        }
3238      })( obj.obligText[i] );
3239    };
3240
3241    if( empty ) obj.error.$o.append( obj.error.copy.$empty );
3242    
3243    if( obj.policy.o.checked ){
3244      obj.policy.$p.removeClass('invalid');
3245    } else {
3246      enviar = false;
3247      obj.policy.$p.addClass('invalid');
3248      obj.error.$o.append( obj.error.copy.$policy );
3249    };
3250
3251    if( !enviar ){
3252      obj.error.$o.addClass('sta-cardpage-air_warning-text');
3253      processEnvio = false;
3254    };
3255
3256    return enviar;
3257  },
3258  ajax = function( datos ){
3259    $.ajax({
3260      type: 'POST',
3261      url: getFormUrl(),
3262      async: false,
3263      data: JSON.stringify( datos ),
3264      cache: false,
3265      contentType: false,
3266      processData: false,
3267      success: function (n) {
3268        processEnvio = false;
3269        switch (n) {
3270          case 'OK':
3271            form.reset();
3272            obj.error.$o.append( obj.error.copy.$ok ).addClass('sta-cardpage-air_done-text');
3273            break;
3274          case 'ERR':
3275            console.trace("Not template",n);
3276            break;
3277          case 'KO - Error Formato Datos JSON':
3278          case 'KO':
3279          default:
3280            console.trace(n);
3281            break;
3282        };
3283      },
3284      error: function (n) {
3285        processEnvio = false;
3286        console.trace("ERROR:", n);
3287      }
3288    });
3289  },
3290  enviar = function(){
3291    var datos = {
3292      d : {
3293        comment1 : obj.comment1.o.value.trim(),
3294        comment2 : obj.comment2.o.value.trim(),
3295        comment3 : obj.comment3.o.value.trim(),
3296        policy  : obj.acept_mail.o.checked ? 'yes' : 'no'
3297      }
3298    };
3299
3300    if( obj.recaptcha ){
3301      grecaptcha.ready(function() {
3302        grecaptcha.execute(obj.recaptcha,{action: 'sendForm'}).then(function(token) {
3303          ajax(datos);
3304        });
3305      });
3306    } else {
3307      ajax(datos);
3308    };
3309  },
3310  obj = {
3311    url : $(form).data('url').trim(),
3312    idProd : $(form).data('id'),
3313    recaptcha : $(form).data('recaptcha').trim(),
3314    comment1 : {
3315      o   : form.comment1,
3316      $p  : $(form.comment1).parent()
3317    },
3318    comment2 : {
3319      o   : form.comment2,
3320      $p  : $(form.comment2).parent()
3321    },
3322    comment3 : {
3323      o   : form.comment3,
3324      $p  : $(form.emacomment3il).parent()
3325    },
3326    policy : {
3327      o   : form.policy,
3328      $p  : $(form.policy).parent()
3329    },
3330    acept_mail : {
3331      o   : form.acept_mail,
3332      $p  : $(form.acept_mail).parent()
3333    },
3334    obligText : [],
3335    error : {
3336      $o : $( form.querySelector('.sta-error') ),
3337      copy : {
3338        $empty : $('<li id="g_form_error_empty"></li>').text( form.copyEmpty.value ),
3339        $policy : $('<li id="g_form_error_politicas"></li>').text( form.copyPoliticas.value ),
3340        $ok : $('<li></li>').text( form.copyOk.value )
3341      }
3342    }
3343  },
3344  processEnvio = false;
3345
3346  obj.obligText.push( obj.comment1, obj.comment2, obj.comment3 );
3347
3348  $( form ).submit(function(e){
3349    e.preventDefault();
3350    
3351    if( !processEnvio ){
3352      processEnvio = true;
3353      if( valid() ) enviar();
3354    };
3355  });
3356
3357  if( obj.recaptcha ) h.cargarFicheroJS('https://www.google.com/recaptcha/api.js?render='+obj.recaptcha);
3358
3359})( document.querySelector('.formDenuncia'), window.jQuery, window.hotusa && hotusa() );
3360
3361// function internbar size
3362(function( o, $ ){
3363  if( o ){
3364    var checker = 0;
3365    //init slider
3366    function load_slider(){
3367      $('.sta-internbar-air_links',o).slick({
3368        dots: false,
3369        arrows: false,
3370        infinite: false,
3371        useTransform: true,
3372        fade: false,
3373        cssEase: 'cubic-bezier(0.785, 0.135, 0.15, 0.86)',
3374        speed: 750,
3375        //slidesToShow: 8,
3376        autoplay: false,
3377        variableWidth: true,
3378        swipeToSlide: true,
3379        responsive: [
3380          {
3381            breakpoint: 1279,
3382            settings: {
3383              //slidesToShow: 8,
3384              slidesToScroll: 1,
3385            }
3386          },
3387        ]
3388      });
3389    }
3390    if(window.innerWidth >= 1024){
3391      loadScript("/templates/cadenas/air/js/libraries/slick.min.js", load_slider);
3392      loadStyle("/templates/cadenas/air/css/libraries/slick.min.css");
3393      checker = 1;
3394    }else{
3395      var check_responsive = 1;
3396      $(window).resize(function(){
3397        if(window.innerWidth < 1024){
3398          if( $().slick ){
3399            //$('.sta-internbar-air_links').slick('unslick');
3400            checker = 0;
3401          }
3402        }else{
3403          if(checker === 0){
3404            if(check_responsive === 1){
3405              loadScript("/templates/cadenas/air/js/libraries/slick.min.js", load_slider);
3406              loadStyle("/templates/cadenas/air/css/libraries/slick.min.css");
3407              check_responsive = 0;
3408            }
3409            //load_slider();
3410            checker = 1;
3411          }
3412        }
3413      })
3414    }
3415    
3416  }
3417})( document.querySelector('.sta-dinamic-size'), window.jQuery );
3418
3419(function( o, $ ){
3420  if( !o || !$ ) return false;
3421
3422  var elems = o.querySelectorAll('.sta-breadcrumbs-air_element'),
3423  script = document.createElement('script'),
3424  datos = {
3425    "@context"        : "http://schema.org/",
3426    "@type"           : "BreadcrumbList",
3427    itemListElement   : []
3428  };
3429
3430  for (var i = 0; i < elems.length; i++) {
3431    (function( $a, posi, $last ){
3432      if( !$last ){
3433        var _tmp = {
3434          "@type" : "ListItem",
3435          position: posi,
3436          item    : {
3437            name : $a.text().trim(),
3438            "@id": $a.attr('href')
3439          }
3440        };
3441        datos.itemListElement.push( _tmp );
3442      } else {
3443        var _tmp = {
3444          "@type" : "ListItem",
3445          position: posi,
3446          item    : {
3447            name : $last.text().trim(),
3448            "@id": location.origin + location.pathname
3449          }
3450        };
3451        datos.itemListElement.push( _tmp );
3452      }
3453      //if( $last ) $last.html( _tmp.item.name );
3454    })( $( elems[i].querySelector('a') ), i+1, (i == elems.length-1 ? $( elems[i] ) : false ) );
3455  };
3456
3457  if( datos.itemListElement.length ){
3458    script.title = "BreadcrumbList";
3459    script.type = "application/ld+json";
3460    script.innerHTML = JSON.stringify(datos);
3461    $(document.head).append(script);
3462  }
3463
3464})( document.querySelector('.tgl-breadcrumbs-air'), window.jQuery );
3465
3466(function(a, $){
3467  if(!a.length || !$) return false;
3468  var ev = function(o){
3469    if( o.querySelectorAll('.sta-serviciosNew-air_max ul li').length > 8 ){
3470      var $list = $(o.querySelector('.sta-serviciosNew-air_max')),
3471      $bMore = $('<button />',{class:'sta-serviciosNew-air_ver'})
3472      .appendTo( o ).text( $(o).data('buttons_mas') ),
3473      textMas = $(o).data('buttons_mas'),
3474      textMenos = $(o).data('buttons_menos'),
3475      bMas = true;
3476      $list.addClass('sta-menos');
3477      $bMore.on('click', function(){
3478        $list.toggleClass('sta-menos')
3479        if( bMas ){
3480          $bMore.text(textMenos);
3481          bMas = false;
3482        }else{
3483          $bMore.text(textMas);
3484          bMas = true;
3485        }
3486      })
3487    }
3488  };
3489  for (var i = 0; i < a.length; i++) ev(a[i]);
3490})(document.querySelectorAll('.tpl-serviciosNew-air'), window.jQuery);
3491
3492/*Funcion galeria instagram*/
3493(function (src,$,h) {
3494  $(document).ready(function(){
3495      var a = $( document.querySelectorAll(src) );
3496      a.each(function(){
3497          var o = this,
3498          text = $(o).data('text'),
3499          token = $(o).data('token'),
3500          callback = function () {
3501              h.cargarFicheroJS('/js/libraries/spectagram/spectragram.min.js',function(){
3502                  jQuery.fn.spectragram.accessData={
3503                      accessToken:token
3504                  };
3505                  $('.sta-instagramGallery-air_container',o).spectragram({
3506                      max: 12,
3507                      wrapEachWith: '<div class="sta-instagramGallery-air_elemento"></div>',
3508                      complete : getInfoImage
3509                  });
3510              });
3511              
3512              function getInfoImage(){
3513                  var html = $('<div class="sta-instagramGallery-air_tableContainer"><div class="sta-instagramGallery-air_table"><div class="sta-instagramGallery-air_tableCellContainer"><span class="sta-instagramGallery-air_textContainer"></span><span class="sta-instagramGallery-air_textSpan">'+text+'</span></div></div></div>');
3514                  function crearHtml(info){
3515                      var ret = html.clone();
3516                      $('.sta-instagramGallery-air_textContainer',ret).prepend(info);
3517                      return ret
3518                  }
3519                  $('.sta-instagramGallery-air_elemento').each(function(i,e){
3520                      var a = $('a',this),
3521                      alt = a.attr('title');
3522                      a.append(crearHtml(alt)).attr('title','');
3523                  })
3524                  $(o).addClass('sta-complete');
3525              }
3526          }
3527          if( token ) h.cargaScrollAuto({obj:o},callback);
3528      });
3529  })
3530})( '.tgl-instagramGallery-air',jQuery,hotusa());
3531
3532// meta og:image
3533(function( o,seo ){
3534  if(!o || o.content || !seo || !seo.imgFirst ) return false;
3535  o.content= seo.imgFirst;
3536})( document.head.querySelector('.openGraphFirstImage'), window.dataSeo );
3537
3538// meta theme-color
3539(function( m,$ ){
3540  if( !m || !$ )return false;
3541
3542  var color = $(m).css('color'),
3543  lastMeta = document.head.querySelector('meta:last-of-type'),
3544  meta = document.createElement('meta');
3545  meta.name = 'theme-color';
3546  meta.content = color;
3547
3548  lastMeta.parentNode.insertBefore(meta,lastMeta);
3549})( document.querySelector('.tgl-menus-air .sta-menus-air_nav-logo'), window.jQuery );
3550
3551function crearGaleria(url) {
3552  var modalGaleria = document.createElement('div'),
3553  div = document.createElement('div');
3554  modalGaleria.classList.add('modalGaleria'),
3555  button = document.createElement('button');
3556  button.classList.add('close')
3557  div.classList.add('containerImg')
3558  modalGaleria.appendChild(div).style.backgroundImage = 'url(' + url + ')';
3559  modalGaleria.appendChild(button)
3560  document.body.appendChild(modalGaleria);
3561  document.body.style.overflow = 'hidden';
3562  button.onclick = function() {
3563      modalGaleria.classList.remove('active');
3564      modalGaleria.remove();
3565      document.body.style.overflow = 'auto';
3566  }
3567}
3568 
3569var gamasCromaticas = (function( link, h ){
3570  var actual = 0,
3571  url = '/templates/cadenas/air/css/colors/',
3572  colors = ['007d69','77a687','BAC5B9','DC6D47','495461','C0D185','1E521A','64280c','b7bbcc','b9ab98','3386FF','406693','28b36f','f07e26','cb0339','fab833','76dce1','a92a0a','F66C5E','3E511C','856f52','c7a84f','0b0e3d','B58C30','232EBE', 'A5AFB1', 'ffd200','05a4de','92133E','B2A89C','A0434B','c23e3e','78C0C5','391832','935485','dfad58', 'eba9a9','B27B22','BD9C67','8AB0B1','373737','F2930D','C2A472','DDA385','5CBB47','BEAD50', '913C26', 'AC8B25','B0BB16','205253','DDD5B0'].sort(),
3573  cookie = false,
3574  custom = h.getSessionStorageJSON('test_GC') && h.getSessionStorageJSON('test_GC').var ? h.getSessionStorageJSON('test_GC').var : false,
3575  getCookie = h.getSessionStorageJSON('test_GC'),
3576  fn = function (str) {
3577    if( typeof str != 'string' ){
3578      if( actual >= colors.length ) actual = 0;
3579      str = colors[actual];
3580      actual++;
3581    } else if( str === 'lista' ){
3582      console.log('%cListado de Gamas Cromáticas',"background:#000;padding:10px 20px;font:20px Georgia;color:#fff")
3583      for (var i = 0; i < colors.length; i++) {
3584        colors[i]
3585        ? console.log('%cCódigo color: '+colors[i],"background:#"+colors[i]+";padding:10px 20px;font:20px Georgia;color:#fff")
3586        : console.log('%cCódigo color: c2a472',"background:#c2a472;padding:10px 20px;font:20px Georgia;color:#fff");
3587      };
3588      
3589      console.log('%cRecuerda que puedes:\n  · Alternar entre las GC existentes: gamasCromaticas()\n  · Listar las GC: gamasCromaticas("lista")\n  · Activar modo testing (puedes camb
3589iar de página manteniendo la GC): gamasCromaticas("prueba")\n  · Crear tu propia GC (necesitas saber el color en hexadecimal): gamasCromaticas("custom")',"background:#000;padding:2px 10px;font:12px Georgia;color:#fff")
3590      return false;
3591    } else if( str === 'prueba' ){
3592      cookie = true;
3593      console.log('%cSe guardará la gama cromática seleccionada en una cookie para testear, se borrará al cerrar ventana.',"background:#000;padding:10px 20px;font:20px Georgia;color:#fff");
3594      return false;
3595    } else if( str === 'custom' ){
3596      cookie = true;
3597      if( !custom ) custom = window.prompt('Indique el código hexadecimal del color que quiera aplicar','#406693');
3598      console.log('%cCódigo color: '+custom,"background:"+custom+";padding:10px 20px;font:20px Georgia;color:#fff");
3599      console.log('%cSe guardará la gama cromática seleccionada en una cookie para testear, se borrará al cerrar ventana.',"background:#000;padding:10px 20px;font:20px Georgia;color:#fff");
3600      str = 'variable';
3601      document.body.style.setProperty("--bg", custom);
3602    };
3603
3604    //NOT GC
3605    if( !link ){
3606      link = document.createElement('link');
3607      link.rel = 'stylesheet';
3608      link.as = 'style';
3609      var lastLink = document.head.querySelector('link:last-of-type');
3610      lastLink.parentNode.insertBefore(link,lastLink);
3611    };
3612
3613    if( str ){
3614      link.href = url + str + '.css';
3615      str.length == 3 || str.length == 6
3616      ? console.log('%cGama cromática "'+str+'" asignada', "background:#"+str+";padding:10px 20px;font:20px Georgia")
3617      : console.log('%cGama cromática "'+str+'" asignada', "background:#000;padding:10px 20px;font:20px Georgia");
3618    } else {
3619      link.href = '';
3620      console.log('%cGama cromática inicial "c2a472" recuperada', "background:#c2a472;padding:10px 20px;font:20px Georgia");
3621    };
3622
3623    if( cookie && !custom ) h.setSessionStorageJSON('test_GC',{color:str});
3624    if( cookie && custom ) h.setSessionStorageJSON('test_GC',{color:'custom',var:custom});
3625  };
3626  colors.push('');
3627
3628  if( getCookie ) fn(getCookie.color);
3629
3630  return fn;
3631})( document.querySelector('.gamaCromatica'), window.hotusa && hotusa() );
3632
3633
3634//viewport in safary
3635(function( meta ){
3636  if( !meta || !/^((?!chrome|android).)*safari/i.test(navigator.userAgent) ) return false
3637
3638  var contentOld = meta.content;
3639  meta.content = meta.attributes.saf.value;
3640
3641})( document.head.querySelector('.metaViewport') );
3642
3643(function () {
3644  if (!window.frontLoader) {return false};
3645  const existLogin = window.frontLoader["cms-login"]?.config;
3646  if (existLogin){
3647    document.querySelector('.sta-corporate')?.classList.remove('hideLogin');
3648  }
3649})();
3650
3651// Arreglar z-index de tgl-internbar-air
3652(function () {
3653  document.addEventListener('DOMContentLoaded', function () {
3654    const el = document.querySelector('.tgl-internbar-air');
3655    const refEl = document.querySelector('.tgl-menus-air .sta-menus-air_nav');
3656    if (!el || !refEl) return;
3657
3658    function checkElementoCercaDelTop() {
3659      const top = el.getBoundingClientRect().top;
3660      const refHeight = refEl.offsetHeight;
3661
3662      if (top <= refHeight) {
3663        el.classList.add('internbar-air-top');
3664        el.classList.remove('internbar-air-bottom');
3665      } else {
3666        el.classList.add('internbar-air-bottom');
3667        el.classList.remove('internbar-air-top');
3668      }
3669    }
3670
3671    window.addEventListener('scroll', checkElementoCercaDelTop);
3672  });
3673})();
3674
3675// Para evitar clicks en el slider mientras se arrastra
3676(function() {
3677  let isDragging = false;
3678  let startX = 0;
3679  let startY = 0;
3680  const slickSlider = document.querySelector('.slick-list');
3681  if (slickSlider) {
3682    slickSlider.addEventListener('mousedown', (e) => {
3683      isDragging = false;
3684      startX = e.clientX;
3685      startY = e.clientY;
3686    });
3687    slickSlider.addEventListener('mousemove', (e) => {
3688      if (Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5) {
3689        isDragging = true;
3690      }
3691    });
3692    slickSlider.addEventListener('mouseup', () => {
3693      setTimeout(() => isDragging = false, 50);
3694    });
3695    document.querySelectorAll('.js-scrollto').forEach(element => {
3696      element.addEventListener('click', function(event) {
3697        if (isDragging) {
3698          event.preventDefault();
3699          event.stopImmediatePropagation();
3700          return false;
3701        }
3702      }, true);
3703    });
3704  }
3705})();
3706
3707// Listener para los campos del formulario 
3708document.addEventListener('DOMContentLoaded', () => {
3709  const fields = document.querySelectorAll('.sta-input-field:not([type="date"]):not([type="time"]), .sta-textarea-field');
3710
3711  fields.forEach(field => {
3712    const container = field.parentElement;
3713
3714    const toggleLabel = () => {
3715      if (field.value.trim() !== '' || document.activeElement === field) {
3716        container.classList.add('active');
3717      } else {
3718        container.classList.remove('active');
3719      }
3720    };
3721    field.addEventListener('focus', toggleLabel);
3722    field.addEventListener('blur', toggleLabel);
3723    field.addEventListener('input', toggleLabel);
3724
3725    toggleLabel();
3726  });
3727
3728  // Desplegables de los forms
3729  const fechaInput = document.getElementById("form_date");
3730  const horaInput = document.getElementById("form_time");
3731  if (fechaInput) {
3732    fechaInput.addEventListener("click", (e) => {fechaInput.showPicker();});
3733  }
3734  if (horaInput) {
3735    horaInput.addEventListener("click", (e) => {horaInput.showPicker();});
3736  }
3737});
3738
3739//Eliminar <a></a> sin href
3740document.addEventListener('DOMContentLoaded', () => {
3741  document.querySelectorAll('a[href]').forEach(element => {
3742     if (element.getAttribute('href').trim() === '') {
3743        element.remove();
3744      }
3745  });
3746});
3747
3748// Ajustar el ancho de los elementos del popup al texto más largo
3749(function() {
3750  const textSelector = '#tgl-modals .sta-popoffer-air_gadget .sta-popoffer-air_gadget-btn .sta-popoffer-air_gadget-text';
3751  const containerSelector = '#tgl-modals .sta-popoffer-air_gadget';
3752  const textElements = document.querySelectorAll(textSelector);
3753  const containerElements = document.querySelectorAll(containerSelector);
3754
3755  if (!textElements.length || !containerElements.length) return;
3756  const tempSpan = document.createElement('span');
3757  Object.assign(tempSpan.style, {position: 'absolute',visibility: 'hidden',whiteSpace: 'nowrap',});
3758  document.body.appendChild(tempSpan);
3759
3760  let maxWidth = 0;
3761  textElements.forEach(el => {
3762    if (el && el.textContent) {
3763      tempSpan.textContent = el.textContent.trim();
3764      const width = tempSpan.getBoundingClientRect().width;
3765      if (width > maxWidth) maxWidth = width;
3766    }
3767  });
3768
3769  document.body.removeChild(tempSpan);
3770  maxWidth = Math.min(maxWidth, 150);
3771  const textWidth = Math.ceil(maxWidth);
3772  const containerWidth = textWidth + 63;
3773  textElements.forEach(el => {if (el && el.style) el.style.width = textWidth + 'px';});
3774  containerElements.forEach(container => {if (container && container.style) container.style.width = containerWidth + 'px';});
3775})();
3776
3777////////////////////////////////////////////////
3778/////////////////
3779//----POPUPS----
3780/////////////////
3781////////////////////////////////////////////////
3782(function (popoffer, modalContainer) {
3783  if (!popoffer || !modalContainer) return false;
3784
3785  if (document.querySelector(".sta-mainDispo")) {
3786    modalContainer.remove();
3787    return false;
3788  }
3789})(
3790  document.querySelector(".tgl-popoffer-air"),
3791  document.getElementById("tgl-modals")
3792);
3793
3794//////
3795//  Función que inicializa popups y los muestra segun ciertos criterios
3796//////
3797
3798(function (popups, $, hotusaLib, reserva) {
3799  if (!popups.length || !$ || !hotusaLib) return false;
3800
3801  const popupConfig = window.popupConfig;
3802  const pathname = window.location.pathname;
3803  const popupTimer = window.popupTimer * 1000;
3804  var currentlyOpenPopup = null;
3805
3806  /**
3807   * Guarda el popup como mostrado en sessionStorage
3808   */
3809  const markPopupAsShown = (SESSION_KEY) => {
3810    const cookies = hotusaLib.getCookie("controlCookies");
3811    if (!cookies) return;
3812
3813    if (JSON.parse(cookies).functional) {
3814      hotusaLib.setSessionStorageJSON(SESSION_KEY, true);
3815    }
3816  };
3817  /**
3818   * Abre el popup
3819   */
3820  const openPopup = (popupElement, $closer, SESSION_KEY) => {
3821    popupElement.classList.add("fn-open");
3822    currentlyOpenPopup = popupElement;
3823    $closer.click(() => markPopupAsShown(SESSION_KEY));
3824  };
3825
3826  /**
3827   * Abre el popup
3828   */
3829  const pathnameFinder = (id) => {
3830    const key = String(id);
3831    if (!(key in popupConfig)) return true;
3832
3833    return popupConfig[key].includes(pathname);
3834  };
3835
3836  /**
3837   * EVENTOS
3838   */
3839  const initEvents = ($opener, $closer, popupElement) => {
3840    $opener.click(function (event) {
3841      event.stopPropagation();
3842
3843      // si había otro popup abierto y era un aside pequeño, lo cierra
3844      if (currentlyOpenPopup?.classList.contains("sta-small-aside")) {
3845        currentlyOpenPopup.classList.remove("fn-open");
3846      }
3847
3848      popupElement.classList.add("fn-open");
3849      currentlyOpenPopup = popupElement;
3850    });
3851
3852    $closer.click(function () {
3853      popupElement.classList.remove("fn-open");
3854      currentlyOpenPopup = null;
3855    });
3856  };
3857
3858  ///Inicializa un popup concreto
3859  const initPopup = function (popupElement) {
3860    const openClass = popupElement.dataset.open;
3861    const popupID = openClass.split("_")[1];
3862    const $opener = $(document.querySelectorAll("." + openClass));
3863    const $closer = $(popupElement.querySelectorAll(".js-close-popoffer"));
3864
3865    const SESSION_KEY = "modal_" + openClass;
3866    const autoOpenSesion = hotusaLib.getSessionStorageJSON(SESSION_KEY);
3867
3868    // Asegura que los enlaces dentro del popup se abran en pestaña nueva
3869    hotusa().enlace_blank(
3870      $(popupElement.querySelector(".sta-popoffer-air_btns a"))
3871    );
3872    popupElement.style.display = "block";
3873    initEvents($opener, $closer,popupElement);
3874
3875    if (autoOpenSesion || reserva) return;
3876    if (popupElement.classList.contains("sta-init-hide")) return;
3877    if (!popupConfig) return;
3878    if (!pathnameFinder(popupID)) return;
3879
3880    setTimeout(() => openPopup(popupElement, $closer, SESSION_KEY), popupTimer);
3881
3882    /////////////////////////////////////////
3883  };
3884
3885  //Evento click global
3886  $(document).click(function (event) {
3887    // si hay un popup abierto y el clic se hizo fuera
3888    if (
3889      currentlyOpenPopup &&
3890      currentlyOpenPopup.querySelector(".sta-popoffer-air_box") === event.target
3891    ) {
3892      currentlyOpenPopup.classList.remove("fn-open"); // cierra el popup
3893      currentlyOpenPopup = null;
3894    }
3895  });
3896
3897  // inicializa todos los popups encontrados en la página
3898  popups.forEach((popupElement) => {
3899    initPopup(popupElement);
3900  });
3901})(
3902  document.querySelectorAll(".tgl-popoffer-air"), // lista de popups
3903  window.jQuery,
3904  window.hotusa && hotusa(),
3905  document.querySelector(".tgl-enginepage-air.sta-big-wrapper.sta-first") // página de reserva
3906);
3907////////////////////////////////////////////
3908//////////////////////////////////////////
3909//----VIDEOS----
3910//////////////////////////////////////////
3911
3912//add class banner with video
3913(function (a, $) {
3914  if (!a.length || !$) return false;
3915
3916  for (var i = 0; i < a.length; i++) {
3917    (function (o) {
3918      var $elem = $(o.querySelector(".sta-banner-air_multimedia-video"));
3919      if (!$elem.length || !($elem.data("video") || $elem.data("video-wistia")))
3920        return false;
3921      $(o).addClass("sta-video-on");
3922    })(a[i]);
3923  }
3924})(document.querySelectorAll(".tgl-banner-air"), window.jQuery);
3925
3926//add class cover with video && seo first img
3927(function (o, $, seo) {
3928  if (!o || !$ || !seo) return false;
3929
3930  if (o.classList.contains("js-dualGallery")) {
3931    var jsDG = window.jsDualGallery,
3932      contGallery = o.querySelector(".sta-cover-air_multimedia"),
3933      addImgs = function (aDesk, aMovil) {
3934        if (aMovil && window.innerWidth < 1000) aDesk = aMovil;
3935
3936        contGallery.textContent = "";
3937        for (var i = 0; i < aDesk.length; i++) {
3938          (function (a) {
3939            var figure = document.createElement("figure"),
3940              imgFigure = document.createElement("img");
3941
3942            figure.style.backgroundImage = 'url("' + a.url + '")';
3943            imgFigure.src = 'url("' + a.url + '")';
3944
3945            figure.className = "sta-cover-air_photo";
3946            figure.setAttribute("role", "img");
3947            figure.setAttribute("aria-label", "");
3948
3949            imgFigure.className = "imgOcultaAda";
3950            imgFigure.alt =
3951              window.dataSeo &&
3952              window.dataSeo.hotel &&
3953              window.dataSeo.hotel.name
3954                ? window.dataSeo.hotel.name
3955                : "";
3956
3957            figure.append(imgFigure);
3958
3959            contGallery.append(figure);
3960          })(aDesk[i]);
3961        }
3962      };
3963    if (!jsDG) {
3964      console.trace("ERROR: Global Variable jsDualGallery Not Found");
3965    } else {
3966      jsDG.movil.length == jsDG.desk.length
3967        ? addImgs(jsDG.desk, jsDG.movil)
3968        : addImgs(jsDG.desk);
3969    }
3970  }
3971
3972  var $elem = $(o.querySelector(".sta-cover-air_video-element")),
3973    img = o.querySelector(".sta-cover-air_multimedia .sta-cover-air_photo img");
3974
3975  if (window.putCoverArrow) putCoverArrow();
3976
3977  if (!$elem.length || !($elem.data("video") || $elem.data("video-wistia")))
3978    return false;
3979
3980  $(o).addClass("sta-video-on");
3981})(
3982  document.querySelector(".tgl-cover-air"),
3983  window.jQuery,
3984  window.dataSeo
3985);
3986
3987// function modular video
3988(function (a, $, h) {
3989  if (!a.length || !$ || !h) return false;
3990
3991  var API_YOUTUBE = "https://www.youtube.com/iframe_api",
3992    API_WISTIA = "https://fast.wistia.net/assets/external/E-v1.js",
3993    vidRescale = function ($o) {
3994      var video = $(".embed_youtube", $o);
3995      (vidRatio = 16 / 9),
3996        (wrapperHeight = $o.height()),
3997        (wrapperWidth = $o.width()),
3998        (wrapperRatio = wrapperWidth / wrapperHeight);
3999
4000      if (wrapperRatio < vidRatio) {
4001        var newWidth = wrapperWidth * (vidRatio / wrapperRatio);
4002        video.css({
4003          "min-height": wrapperHeight + "px",
4004          "min-width": newWidth + "px",
4005          position: "absolute",
4006          left: "50%",
4007          "margin-left": "-" + newWidth / 2 + "px",
4008        });
4009      } else {
4010        var newHeight = wrapperHeight * (wrapperRatio / vidRatio);
4011        video.css({
4012          "min-height": newHeight + "px",
4013          "min-width": wrapperWidth + "px",
4014          position: "absolute",
4015          top: "50%",
4016          "margin-top": "-" + newHeight / 2 + "px",
4017        });
4018      }
4019    },
4020    cargaYoutube = function ($mod, id, $insert) {
4021      var onPlayerReady = function (ev) {
4022          ev.target.setPlaybackQuality("hd1080");
4023          ev.target.unMute();
4024          ev.target.mute();
4025          ev.target.playVideo();
4026        },
4027        onPlayerStateChange = function (ev) {
4028          if (ev.data === YT.PlayerState.PLAYING) {
4029            $insert.addClass("fn-loaded");
4030            if (obj.cover) {
4031              vidRescale($mod);
4032              if (first) {
4033                first = false;
4034                $(window).on("resize", function () {
4035                  vidRescale($mod);
4036                });
4037              }
4038            }
4039            $mod.addClass("sta-videoActive");
4040            if (obj.sound) {
4041              if (
4042                navigator.userAgent.toLowerCase().indexOf("chrome") > -1 ||
4043                navigator.userAgent.toLowerCase().indexOf("safari") > -1
4044              ) {
4045                console.trace(
4046                  "Error: Chromium y iPhone no permite autoplay con videos con sonido.\n",
4047                  "https://goo.gl/xX8pDD"
4048                );
4049              } else {
4050                ev.target.unMute();
4051                ev.target.playVideo();
4052              }
4053            } else {
4054              ev.target.mute();
4055            }
4056          }
4057        },
4058        obj = {
4059          player: null,
4060          $frame: false,
4061          cover: !$mod.hasClass("not-videoCover") ? true : false,
4062          sound: $mod.hasClass("sta-videoSound") ? true : false,
4063          json: {
4064            videoId: id,
4065            playerVars: {
4066              showinfo: 0,
4067              modestbranding: 1,
4068              iv_load_policy: 3,
4069              enablejsapi: 1,
4070              playlist: id,
4071              loop: 1,
4072              controls: 0,
4073              hd: 1,
4074              height: 1080,
4075              width: 1920,
4076            },
4077            events: {
4078              onReady: onPlayerReady,
4079              onStateChange: onPlayerStateChange,
4080            },
4081          },
4082        },
4083        first = true;
4084
4085      YT.ready(function () {
4086        obj.player = new YT.Player("idYoutube_" + id, obj.json, {
4087          videoId: id,
4088          host: "https://www.youtube.com",
4089        });
4090      });
4091    },
4092    cargaWistia = function ($mod, id, $insert) {
4093      $mod.addClass("loadVideoWistia");
4094      $("<div></div>", {
4095        class: "wistia_embed wistia_async_" + id,
4096        id: "idWistia_" + id,
4097      }).appendTo($insert);
4098      window._wq = window._wq || [];
4099
4100      _wq.push({
4101        id: "idWistia_" + id,
4102        options: {
4103          endVideoBehavior: "loop",
4104          autoPlay: true,
4105          videoFoam: false,
4106          playButton: false,
4107          playbar: false,
4108          smallPlayButton: false,
4109          fullscreenButton: false,
4110          volumeControl: false,
4111          volume: $mod.hasClass("sta-videoSound") ? 1 : 0,
4112        },
4113        onReady: function (video) {
4114          video.bind("play", function (e) {
4115            $insert.addClass("fn-loaded");
4116            $mod.addClass("sta-videoActive");
4117
4118            if (!$mod[0].classList.contains("cargado")) {
4119              var newButton = document.createElement("button");
4120              var container = $mod[0];
4121              newButton.className = "btn-sound muted";
4122              newButton.ariaLabel = "Silenciar audio";
4123
4124              container.appendChild(newButton);
4125
4126              const mediaQuery = window.matchMedia(
4127                "(min-width: 800px) and (max-width: 1024px)"
4128              );
4129
4130              if (mediaQuery.matches &&
4131                container.classList.contains("tgl-cover-air")) 
4132              {
4133                const el = document.getElementById("default_sygy_element_engine");
4134                const offest = 10;
4135                newButton.style.bottom = el.clientHeight + offest + "px";
4136              }
4137
4138              newButton
4139                .addEventListener("click", function () {
4140                  if (video.isMuted()) {
4141                    if (newButton.classList.contains("muted")) {
4142                      newButton.classList.remove("muted");
4143                      newButton.classList.add("unmuted");
4144                    }
4145                    video.unmute();
4146                  } else {
4147                    if (newButton.classList.contains("unmuted")) {
4148                      newButton.classList.remove("unmuted");
4149                      newButton.classList.add("muted");
4150                    }
4151                    video.mute();
4152                  }
4153                });
4154              container.classList.add("cargado");
4155            }
4156          });
4157          if ($mod.hasClass("sta-videoSound")) {
4158            video.unmute();
4159          } else {
4160            video.mute();
4161          }
4162          video.play();
4163        },
4164      });
4165
4166      h.cargarFicheroJS(API_WISTIA);
4167    };
4168
4169  for (var i = 0; i < a.length; i++) {
4170    (function (o) {
4171      var $insert = $(o.querySelector(".sta-insert-video")),
4172        id_youtube = $insert.data("video"),
4173        id_wistia = $insert.data("video-wistia");
4174
4175      if (
4176        !(id_youtube || id_wistia) ||
4177        !(window.innerWidth >= 1280 || $(o).hasClass("sta-videoMovil"))
4178      )
4179        return false;
4180
4181      h.cargaScrollAuto({ obj: o, dual: true }, function () {
4182        if (id_youtube) {
4183          $(o).hover(function () {
4184            $insert.append(
4185              $("<div></div>", {
4186                class: "embed_youtube",
4187                id: "idYoutube_" + id_youtube,
4188              })
4189            );
4190
4191            h.cargarFicheroJS(API_YOUTUBE, function () {
4192              cargaYoutube($(o), id_youtube, $insert);
4193            });
4194          });
4195        } else if (id_wistia) {
4196          cargaWistia($(o), id_wistia, $insert);
4197        }
4198      });
4199    })(a[i]);
4200  }
4201})(
4202  document.querySelectorAll(".sta-video-on"),
4203  window.jQuery,
4204  window.hotusa && hotusa()
4205);
4206
4207// Accesibilidad tablas (scopes y caption)
4208(function() {
4209  document.addEventListener("DOMContentLoaded", function() {
4210    document.querySelectorAll("table").forEach(tabla => {
4211      // Encabezados de columna
4212      const primeraFila = tabla.rows[0];
4213      if (primeraFila) {
4214        Array.from(primeraFila.cells).forEach(celda => {
4215          if (celda.tagName === "TH") {
4216            celda.setAttribute("scope", "col");
4217          }
4218        });
4219      }
4220
4221      // Encabezados de fila
4222      Array.from(tabla.rows).slice(1).forEach(fila => {
4223        const primeraCelda = fila.cells[0];
4224        if (primeraCelda && primeraCelda.tagName === "TH") {
4225          primeraCelda.setAttribute("scope", "row");
4226        }
4227      });
4228
4229      // Caption (caption-visibility)
4230      if (!tabla.querySelector("caption")) {
4231        const section = tabla.closest("section");
4232        if (section) {
4233          const titulo = section.querySelector(".sta-intro-air_header .sta-intro-air_title");
4234          if (titulo) {
4235            const caption = document.createElement("caption");
4236            caption.className = "caption-visibility";
4237            caption.textContent = titulo.textContent.trim();
4238            tabla.insertBefore(caption, tabla.firstChild);
4239          }
4240        }
4241      }
4242    });
4243  });
4244})();
4245
4246// Alts de las imagenes
4247(function() {
4248  function asignarAlt(img) {
4249    if (!img.src) return;
4250    const hashIndex = img.src.indexOf("#");
4251    if (hashIndex !== -1) {
4252      let hashContent = img.src.substring(hashIndex + 1);
4253      hashContent = decodeURIComponent(hashContent).replace(/[^a-zA-Z0-9áéíóúÁÉÍÓÚñÑ]+/g, " ").trim();
4254      if (hashContent) {
4255        img.alt = hashContent;
4256      }
4257    }
4258  }
4259  document.addEventListener("load", function(e) {
4260    if (e.target.tagName === "IMG") {
4261      asignarAlt(e.target);
4262    }
4263  }, true);
4264})();
4265
4266
4267
4268(function() {
4269  // Traducciones de "Ver más" y "Ver menos"
4270  const traducciones = {
4271    'es': { verMas: 'Ver más', verMenos: 'Ver menos' },
4272    'en': { verMas: 'Read more', verMenos: 'Read less' },
4273    'fr': { verMas: 'Voir plus', verMenos: 'Voir moins' },
4274    'it': { verMas: 'Vedi di più', verMenos: 'Vedi di meno' },
4275    'de': { verMas: 'Mehr lesen', verMenos: 'Weniger lesen' },
4276    'pt': { verMas: 'Ver mais', verMenos: 'Ver menos' },
4277    'ca': { verMas: 'Veure més', verMenos: 'Veure menys' },
4278    'gl': { verMas: 'Ver máis', verMenos: 'Ver menos' },
4279    'ar': { verMas: 'اقرأ المزيد', verMenos: 'اقرأ أقل' },
4280    'ru': { verMas: 'Читать далее', verMenos: 'Читать меньше' }
4281  };
4282
4283  function obtenerIdioma() {
4284    const lang = document.documentElement.getAttribute('lang') || 'es';
4285    return lang.toLowerCase().substring(0, 2);
4286  }
4287
4288  function obtenerTraduccion() {
4289    const idioma = obtenerIdioma();
4290    return traducciones[idioma] || traducciones['es'];
4291  }
4292
4293  function initVerMas() {
4294    const contenedores = document.querySelectorAll('[class*="sta-ver-mas-"]');
4295    
4296    contenedores.forEach(contenedor => {
4297      const clases = Array.from(contenedor.classList);
4298      const claseVerMas = clases.find(clase => clase.startsWith('sta-ver-mas-') && /\d/.test(clase));
4299      
4300      if (!claseVerMas) return;
4301      
4302      // Verificar si solo debe aplicarse en móvil
4303      const soloMovil = contenedor.classList.contains('sta-ver-mas-movil');
4304      if (soloMovil && window.innerWidth >= 1024) return;
4305      
4306      // Verificar si el botón debe estar centrado
4307      const centrado = contenedor.classList.contains('sta-ver-mas-center');
4308      
4309      const numPalabras = parseInt(claseVerMas.replace('sta-ver-mas-', ''));
4310      
4311      if (isNaN(numPalabras) || numPalabras <= 0) return;
4312      
4313      let textoElement = null;
4314      
4315      if (contenedor.classList.contains('tgl-intro-air')) {
4316        textoElement = contenedor.querySelector('.sta-intro-air_info-text');
4317      } else if (contenedor.classList.contains('tgl-cardpage-air')) {
4318        textoElement = contenedor.querySelector('.sta-cardpage-air_intro .sta-cardpage-air_intro-text');
4319      } else if (contenedor.classList.contains('tgl-carousel-air')) {
4320        const elementos = contenedor.querySelectorAll('.sta-carousel-air_info-element .sta-carousel-air_info-text');
4321        elementos.forEach(elem => procesarTexto(elem, numPalabras, centrado));
4322        return;
4323      }
4324      
4325      if (!textoElement) return;
4326      
4327      procesarTexto(textoElement, numPalabras, centrado);
4328    });
4329  }
4330  
4331  function procesarTexto(textoElement, numPalabras, centrado = false) {
4332    const traduc = obtenerTraduccion();
4333    const textoOriginal = textoElement.innerHTML.trim();
4334    
4335    const tempDiv = document.createElement('div');
4336    tempDiv.innerHTML = textoOriginal;
4337    const textoPlano = tempDiv.textContent || tempDiv.innerText || '';
4338    
4339    const palabras = textoPlano.trim().split(/\s+/);
4340    
4341    if (palabras.length <= numPalabras) return;
4342    
4343    // Función para truncar HTML preservando etiquetas
4344    function truncarHTMLConEstilos(contenedor, maxPalabras) {
4345      let contadorPalabras = 0;
4346      let encontrado = false;
4347      
4348      function recorrerNodos(nodo) {
4349        if (encontrado) return false;
4350        
4351        if (nodo.nodeType === Node.TEXT_NODE) {
4352          const texto = nodo.textContent;
4353          const palabrasTexto = texto.trim().split(/\s+/).filter(p => p.length > 0);
4354          
4355          if (contadorPalabras + palabrasTexto.length <= maxPalabras) {
4356            contadorPalabras += palabrasTexto.length;
4357            return true;
4358          } else {
4359            // Truncar este nodo de texto
4360            const palabrasRestantes = maxPalabras - contadorPalabras;
4361            const palabrasTomar = palabrasTexto.slice(0, palabrasRestantes);
4362            nodo.textContent = palabrasTomar.join(' ') + '...';
4363            contadorPalabras = maxPalabras;
4364            encontrado = true;
4365            return false;
4366          }
4367        } else if (nodo.nodeType === Node.ELEMENT_NODE) {
4368          const hijos = Array.from(nodo.childNodes);
4369          for (let i = 0; i < hijos.length; i++) {
4370            if (!recorrerNodos(hijos[i])) {
4371              // Eliminar hermanos siguientes
4372              for (let j = i + 1; j < hijos.length; j++) {
4373                hijos[j].remove();
4374              }
4375              return false;
4376            }
4377          }
4378        }
4379        
4380        return true;
4381      }
4382      
4383      recorrerNodos(contenedor);
4384      
4385      // Limpiar etiquetas vacías del final
4386      function limpiarVacios(elemento) {
4387        const hijos = Array.from(elemento.childNodes);
4388        for (let i = hijos.length - 1; i >= 0; i--) {
4389          const hijo = hijos[i];
4390          if (hijo.nodeType === Node.ELEMENT_NODE) {
4391            limpiarVacios(hijo);
4392            if (!hijo.textContent.trim() && !hijo.querySelector('img, br')) {
4393              hijo.remove();
4394            }
4395          }
4396        }
4397      }
4398      
4399      limpiarVacios(contenedor);
4400      
4401      return contenedor.innerHTML;
4402    }
4403    
4404    const tempContainer = document.createElement('div');
4405    tempContainer.innerHTML = textoOriginal;
4406    const textoTruncado = truncarHTMLConEstilos(tempContainer, numPalabras);
4407    
4408    textoElement.innerHTML = textoTruncado;
4409    
4410    const btnVerMas = document.createElement('button');
4411    btnVerMas.className = 'sta-ver-mas-btn';
4412    btnVerMas.textContent = traduc.verMas;
4413    
4414    // Estilos base del botón
4415    let estilosBoton = 'background: none; border: none; color:inherit; cursor: pointer; font-weight: 600; padding: 5px 0; text-decoration: underline; font-size: inherit; font-family: var(--bodyFont), Catamaran;';
4416    
4417    // Si está centrado, añadir estilos de centrado
4418    if (centrado) {
4419      estilosBoton += ' display: block; margin: 10px auto 0; text-align: center;';
4420    } else {
4421      estilosBoton += ' display: inline; margin-left: 5px;';
4422    }
4423    
4424    btnVerMas.style.cssText = estilosBoton;
4425    
4426    let expandido = false;
4427    
4428    // Función para insertar el botón en el último nodo que contiene texto
4429    const insertarBoton = () => {
4430      // Función recursiva para encontrar el último elemento que contiene texto
4431      const encontrarUltimoContenedor = (elemento) => {
4432        const hijos = Array.from(elemento.childNodes);
4433        
4434        for (let i = hijos.length - 1; i >= 0; i--) {
4435          const hijo = hijos[i];
4436          
4437          if (hijo.nodeType === Node.TEXT_NODE && hijo.textContent.trim()) {
4438            return elemento;
4439          } else if (hijo.nodeType === Node.ELEMENT_NODE) {
4440            const resultado = encontrarUltimoContenedor(hijo);
4441            if (resultado) return resultado;
4442          }
4443        }
4444        
4445        return null;
4446      };
4447      
4448      if (centrado) {
4449        // Si está centrado, añadir al final del contenedor principal
4450        textoElement.appendChild(btnVerMas);
4451      } else {
4452        // Si no está centrado, insertar dentro del último elemento con texto
4453        const ultimoContenedor = encontrarUltimoContenedor(textoElement);
4454        if (ultimoContenedor) {
4455          ultimoContenedor.appendChild(btnVerMas);
4456        } else {
4457          textoElement.appendChild(btnVerMas);
4458        }
4459      }
4460    };
4461    
4462    btnVerMas.addEventListener('click', function(e) {
4463      e.preventDefault();
4464      
4465      if (expandido) {
4466        textoElement.innerHTML = textoTruncado;
4467        btnVerMas.textContent = traduc.verMas;
4468        expandido = false;
4469      } else {
4470        textoElement.innerHTML = textoOriginal;
4471        btnVerMas.textContent = traduc.verMenos;
4472        expandido = true;
4473      }
4474      
4475      // Mantener los estilos al volver a insertar el botón
4476      btnVerMas.style.cssText = estilosBoton;
4477      insertarBoton();
4478    });
4479    
4480    insertarBoton();
4481  }
4482  
4483  if (document.readyState === 'loading') {
4484    document.addEventListener('DOMContentLoaded', initVerMas);
4485  } else {
4486    initVerMas();
4487  }
4488})();
4489
4490//Eliminar enlaces sin href o con href="javascript:void(0)" o href="#"
4491(function () {
4492  const links = document.querySelectorAll(
4493    'a[href="javascript:void(0)"], a[href="#"], a[href="javascript:void0"]'
4494  );
4495
4496  links.forEach(link => {
4497    const div = document.createElement('div');
4498
4499    div.innerHTML = link.innerHTML;
4500    if(link.classList.length > 0)
4501      div.className = link.className;
4502
4503    [...link.attributes].forEach(attr => {
4504      if (attr.name.startsWith('data-')) {
4505        div.setAttribute(attr.name, attr.value);
4506      }
4507    });
4508
4509    div.setAttribute('tabindex', '0');
4510
4511    link.replaceWith(div);
4512    const container = div.closest('.sta-products-air_element');
4513    if (container) {
4514      container.style.pointerEvents = 'none';
4515    }
4516  });
4517})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.