PageSourceSearch

https://www.laufen.com/o/laufen-restyle-theme/js/main.js?browserId…=js&languageId=en_GB&t=1789677766000

js laufen.com collected 2026-09-24 19:16:21 UTC 133,821 bytes, 4,512 lines download raw bytes

1
2
3
4
5/**
6 * Toolkit JavaScript
7 */
8
9
10'use strict';
11
12/* Grid breakpoints */
13const SM_BP = 576;
14const MD_BP = 768;
15const LG_BP = 1180;
16const XL_BP = 1912;
17
18/* Container max-widths */
19const SM_MW = 544;
20const MD_MW = 608;
21const LG_MW = 1120;
22const XL_MW = 1696;
23
24
25const is_iOS = ['iPad', 'iPhone', 'iPod', 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator'].includes(navigator.platform)
26|| (navigator.userAgent.includes("Mac") && "ontouchend" in document);
27
28const IOS_POSITION_ERROR_THRESHOLD = is_iOS ? 100 : 0;
29const IOS_SCROLL_THROTTLER_TIME = is_iOS ? 100 : 0;
30let throttlers = {};
31
32const throttleIfIOS = (key, callback) => {
33  if ( ! is_iOS) {
34    // if not ios, bypass throttle system entirely
35    callback()
36  }
37  else {
38    // initialize if not initialized
39    if (throttlers[key] == null) {
40      throttlers[key] = {shouldThrottle: false, timer: null, debug: false};
41    }
42    // dont run the function if we're still throttling
43    if (throttlers[key].shouldThrottle) {
44      return;
45    }
46    else {
47      // run the function once in a while unless...
48      throttlers[key].timer = window.setTimeout(() => {
49        throttlers[key].shouldThrottle = false;
50        callback();
51        if (throttlers[key].debug)
52        {console.debug(`${key} callback called, disabling throtting`)
53        }
54      }, IOS_SCROLL_THROTTLER_TIME);
55      throttlers[key].shouldThrottle = true;
56      if (throttlers[key].debug) {
57        console.debug(`${key} throttling enabled, awaiting timeout`);
58      }
59    }
60  }
61}
62// ...unless we throttle it
63const cancelThrottle = (key) => {
64  if (throttlers[key] == null) {return;}
65  window.clearTimeout(throttlers[key].timer);
66  if (throttlers[key].debug) {console.debug(`Clearing ${key} throttler`)};
67}
68
69
70//********************** Clamp */
71$(document).ready(function() {
72  try {
73    if (typeof $('.clamp') !== "undefined") {
74      $('.clamp').each(function(index, element) {
75        $clamp(element, { clamp: 4 });
76      });
77
78    }
79  } catch (error) {
80    console.log(error);
81
82  }
83  $(window).resize(function() {
84    try {
85      if (typeof $('.clamp') !== "undefined") {
86        $('.clamp').each(function(index, element) {
87          $clamp(element, { clamp: 'auto' });
88        });
89
90        $('.clamp').each(function(index, element) {
91          $clamp(element, { clamp: 4 });
92        });
93
94      }
95    } catch (error) {
96      console.log(error);
97
98    }
99  })
100})
101
102//********************** Secondary Menu
103
104var secondaryMenuJS = {
105  mainMenuCollapseStructure: function(secondaryMenu, test) {
106    var $secondaryMenu = $(secondaryMenu);
107    // console.log(secondaryMenu);
108
109    $secondaryMenu.each(function(i, e) {
110      var $menuList = $(e).find('.main-menu__list'),
111      $origen = $(e).find('.main-menu__wrapper'),
112      $direction = $(e).find('.nav-dropdown__wrapper');
113      if (!$($menuList).hasClass('js-menu-filters')) {
114        var $menuListDetached = $($menuList).detach();
115      } else {
116        var $menuListDetached = 'undefined';
117      }
118
119
120      if (test && $menuListDetached != 'undefined') {
121        $direction.append($menuListDetached);
122        secondaryMenuJS.mainMenuCollapse(secondaryMenu, test)
123      } else if ($menuListDetached != 'undefined') {
124        $origen.append($menuListDetached);
125        secondaryMenuJS.mainMenuCollapse(secondaryMenu, test)
126      }
127
128
129    })
130
131  },
132  mainMenuCollapse: function(secondaryMenu, test) {
133    $(secondaryMenu).each(function(i, e) {
134      var $collapseTrigger = $(e).find('.right-menu__link'),
135      $collapsable = $(e).find('.nav-dropdown');
136      if (test) {
137        $($collapsable).removeClass('expand');
138        $($collapseTrigger).removeClass('up');
139        $($collapseTrigger).click(function() {
140          $($collapseTrigger).toggleClass('up');
141          $($collapsable).toggleClass('expand');
142          if (!$($collapsable).hasClass('expand')) {
143            $($collapsable).find('.collapse').collapse('hide');
144          } else {
145            $($collapsable).find('.collapse').collapse('show');
146          }
147        })
148
149      } else {
150        $($collapsable).removeClass('expand');
151        $($collapseTrigger).removeClass('up');
152        $($collapsable).find('.collapse').collapse('hide');
153        if (!$($collapsable).hasClass('expand')) {
154          $($collapsable).addClass('expand');
155        }
156      }
157
158    });
159
160  },
161  collapseSD: function(collapseSD, test) {
162    $(collapseSD).each(function(i, e) {
163      var $anchor = $(e).closestDescendant('a'),
164      $menuCollapse = $(e).closestDescendant('.js-menu-collapse'),
165      menuCollapseID = $($menuCollapse).attr('id'),
166      menuCollapseParent = $(e).parent().attr('class').split(' ')[0],
167      $icon = $(e).closestDescendant('.arrow');
168
169      if (test) {
170        if ($icon.length > 0) {
171          $($icon).attr('data-toggle', 'collapse')
172            .addClass('collapsed')
173            .attr('data-target', "#" + menuCollapseID)
174            .attr('data-parent', "." + menuCollapseParent)
175            .attr('aria-expanded', false);
176        } else {
177
178          $($anchor).attr('data-toggle', 'collapse')
179            .addClass('collapsed')
180            .attr('data-target', "#" + menuCollapseID)
181            .attr('data-parent', "." + menuCollapseParent)
182            .attr('aria-expanded', false);
183        }
184        $($menuCollapse).addClass('collapse');
185        $($menuCollapse).removeClass('dropdown-menu');
186      } else {
187        $($icon).attr('data-toggle', '')
188          .removeClass('collapsed')
189          .attr('data-target', "")
190          .attr('data-parent', "")
191          .attr('aria-expanded', "");
192        $($menuCollapse).removeClass('collapse');
193        $($menuCollapse).addClass('dropdown-menu');
194      }
195    })
196  },
197  menuPosition: function(menu) {
198    var $menuPosition = $(menu).find('.submenu-position'),
199    $listLinks = $(menu).find('.main-menu__list').find('a'),
200    text = '';
201    $($listLinks).each(function(i, e) {
202      if ($(e).hasClass('active')) {
203        text = $(e).html();
204      }
205    })
206    if (!text == '') {
207      // console.log(text);
208
209      $($menuPosition).css('display', 'inline-block').html(text);
210    }
211  },
212  subMenuScrollFix: function (jsSubmenu, i) {
213    // console.log(jsSubmenu.length);
214
215    let subMenuWrapper = $(jsSubmenu);
216    let subMenuWrapperPosition = $(subMenuWrapper).offset();
217    let scroll = $(window).scrollTop();
218    let promoHeight = $(".promoSubmenu").length > 0 ? $(".promoSubmenu").height() : 0;
219    let adjustedThreshold = IOS_POSITION_ERROR_THRESHOLD + promoHeight;
220    if (
221    subMenuWrapperPosition != undefined &&
222    subMenuWrapperPosition.top < (scroll + adjustedThreshold)
223    ) {
224      cancelThrottle("secondaryMenuJS")
225      if (!$(subMenuWrapper).hasClass("menu-fixed")) {
226        $(subMenuWrapper).addClass("menu-fixed");
227      } else if (i == 1 && !$(subMenuWrapper).hasClass("second-submenu")) {
228        var offsetTop = $(".js-submenu").eq(0).children().first().height();
229        $(subMenuWrapper).addClass("second-submenu");
230        $(subMenuWrapper).children().first().css("top", offsetTop);
231      }
232    } else {
233      throttleIfIOS("secondaryMenuJS", () => {
234        $(subMenuWrapper).removeClass("menu-fixed");
235        $(subMenuWrapper).removeClass("second-submenu");
236        $(subMenuWrapper).children().first().css("top", "");
237      })
238    }
239  }
240
241}
242
243
244$(document).ready(function() {
245  var windowWidth = $(window).outerWidth();
246  var $secondaryMenu = $("section.menus-secundarios");
247  var $jsSubmenu = $(".js-submenu");
248  var $collapseSD = $($secondaryMenu).find('.js-collapse-sd');
249  var mobileLook = false;
250
251  secondaryMenuJS.menuPosition($secondaryMenu);
252  if (windowWidth < 1180) {
253    mobileLook = true;
254    secondaryMenuJS.mainMenuCollapseStructure($secondaryMenu, mobileLook);
255    secondaryMenuJS.collapseSD($collapseSD, mobileLook);
256  } else {
257    secondaryMenuJS.mainMenuCollapseStructure($secondaryMenu, mobileLook);
258    secondaryMenuJS.collapseSD($collapseSD, mobileLook);
259  }
260
261  try {
262    $(window).scroll(function() {
263      if (typeof $jsSubmenu !== 'undefined') {
264        $($jsSubmenu).each(function(i, e) {
265          secondaryMenuJS.subMenuScrollFix(e, i);
266        })
267      }
268    })
269  } catch (error) {
270    console.log(error);
271  }
272});
273
274
275
276var menuAnclas = {
277  setActiveAndScroll: function(menuAnclas, height) {
278    var $listLinks = $(menuAnclas).find('.main-menu-anclas__link');
279    var $html = $(menuAnclas).closest('html');
280    var $body = $(menuAnclas).closest('body');
281    var removeActive = function(list) {
282      $(list).each(function(i, e) {
283        $(e).removeClass('active');
284      })
285    }
286    var animateScroll = function(url, height) {
287		if ($(url).offset() !== undefined) {
288			$($html, $body).animate({ scrollTop: ($(url).offset().top) - 100 }, 800);
289		}
290	}
291    $listLinks.each(function(i, e) {
292      var url = $(e).attr('href');
293      $(e).click(function() {
294        var anclaHeight = $(e).closest('.js-header').height();
295        removeActive($listLinks);
296        $(e).addClass('active');
297        animateScroll(url, anclaHeight);
298
299        // return false;
300      })
301    })
302  },
303  anclaNiceScroll: function(menu) {
304    $(menu).find('.row-flex').niceScroll({
305      cursorcolor: "#d0d3d5"
306    }).resize();
307    $(menu).find('.row-flex').dragscrollable({ dragSelector: '.main-menu-anclas__wrapper', acceptPropagatedEvent: true });
308  }
309}
310
311$(document).ready(function() {
312  var $menuAncla = $('.menu-anclas');
313
314  try {
315    $($menuAncla).each(function(i, e) {
316      menuAnclas.anclaNiceScroll(e);
317    })
318  } catch (error) {
319    console.log(error);
320
321  }
322
323  try {
324    $($menuAncla).each(function(i, e) {
325      menuAnclas.setActiveAndScroll(e);
326    })
327  } catch (error) {
328    console.log("try to setActiveAndScroll " + error);
329  }
330
331  try {
332    $(window).scroll(function() {
333      secondaryMenuJS.subMenuScrollFix($menuAncla);
334
335    })
336  } catch (error) {
337    console.log(error);
338  }
339
340  if ($menuAncla.length > 0) {
341    $('.nicescroll-rails.nicescroll-rails-vr').remove();
342  }
343
344})
345
346
347
348var userMenuMobile = {
349  menuPosition: function(userMM) {
350    var $menuPosition = $(userMM).find('.submenu-position'),
351    $listLinks = $(userMM).find('.js-menu-collapse').find('ul li a'),
352    text = '';
353    $($listLinks).each(function(i, e) {
354      if ($(e).hasClass('active')) {
355        text = $(e).html();
356      }
357    })
358    if (!text == '') {
359      $($menuPosition).css('display', 'inline-block').html(text);
360    }
361  }
362}
363
364$(document).ready(function() {
365  var $userMenuMobile = $('.user-menu-mobile');
366  $userMenuMobile.each(function(i, e) {
367    try {
368      userMenuMobile.menuPosition(e);
369    } catch (error) {
370      console.log('Try get set menuPosition of active submenu ' + error);
371    }
372  })
373})
374
375
376
377//************************* Menu Pestañas*/
378
379
380var pestanaMenuJS = {
381  pestanaSelectInit: function(pestanaWrapper, pestanaMenu, test) {
382    $(pestanaWrapper).each(function(i, e) {
383      var $collapseTrigger = $(e).find('.right-menu__link'),
384      $collapsable = $(e).find('.nav-dropdown');
385      $(e).find('.tab-content').hide();
386      $(e).find('.tab-content:first').show();
387      $(e).find('.main-menu-pestanas__item:first').find('.main-menu-pestanas__link').addClass('active');
388      pestanaMenuJS.menuPosition(e);
389      $(e).find('.main-menu-pestanas__item').click(function(event) {
390        event.preventDefault();
391        $(e).find('.main-menu-pestanas__item').find('a').removeClass('active');
392        $(this).find('a').addClass('active');
393        $(e).find('.tab-content').hide();
394
395        var selectTab = $(this).find('a').attr("href");
396
397        $(selectTab).fadeIn();
398        pestanaMenuJS.menuPosition(e);
399        // close menu collapse
400        if (test) {
401
402          $($collapseTrigger).toggleClass('up');
403          $($collapsable).toggleClass('expand');
404          if (!$($collapsable).hasClass('expand')) {
405            $($collapsable).find('.collapse').collapse('hide');
406          }
407        }
408
409      });
410
411    })
412  },
413  pestanaSelect: function(pestanaWrapper, pestanaMenu, test) {
414    $(pestanaWrapper).each(function(i, e) {
415      var $collapseTrigger = $(e).find('.right-menu__link'),
416      $collapsable = $(e).find('.nav-dropdown');
417      $(e).find('.tab-content').hide();
418      $(e).find('.main-menu-pestanas__item').click(function(event) {
419        event.preventDefault();
420        $(e).find('.main-menu-pestanas__item').find('a').removeClass('active');
421        $(this).find('a').addClass('active');
422        $(e).find('.tab-content').hide();
423
424        var selectTab = $(this).find('a').attr("href");
425
426        $(selectTab).fadeIn();
427
428        // close menu collapse
429        if (test) {
430
431          $($collapseTrigger).toggleClass('up');
432          $($collapsable).toggleClass('expand');
433          if (!$($collapsable).hasClass('expand')) {
434            $($collapsable).find('.collapse').collapse('hide');
435          }
436        }
437
438      });
439
440    })
441  },
442  mainMenuCollapseStructure: function(pestanaMenu, test) {
443    var $pestanaMenu = $(pestanaMenu);
444    // console.log(pestanaMenu);
445
446    $pestanaMenu.each(function(i, e) {
447      var $menuList = $(e).find('.main-menu-pestanas__list'),
448      $origen = $(e).find('.main-menu-pestanas__wrapper'),
449      $direction = $(e).find('.nav-dropdown__wrapper'),
450      $menuListDetached = $($menuList).detach();
451
452
453      if (test) {
454        $direction.append($menuListDetached);
455        pestanaMenuJS.mainMenuCollapse(pestanaMenu, test)
456      } else {
457        $origen.append($menuListDetached);
458        pestanaMenuJS.mainMenuCollapse(pestanaMenu, test)
459      }
460
461
462    })
463
464  },
465  mainMenuCollapse: function(pestanaMenu, test) {
466    $(pestanaMenu).each(function(i, e) {
467      var $collapseTrigger = $(e).find('.right-menu__link'),
468      $collapsable = $(e).find('.nav-dropdown');
469      if (test) {
470        $($collapseTrigger).removeClass('up');
471        $($collapsable).removeClass('expand');
472        $($collapseTrigger).click(function() {
473          $($collapseTrigger).toggleClass('up');
474          $($collapsable).toggleClass('expand');
475          if (!$($collapsable).hasClass('expand')) {
476            $($collapsable).find('.collapse').collapse('hide');
477          } else {
478            $($collapsable).find('.collapse').collapse('show');
479          }
480        })
481
482      } else {
483        $($collapsable).removeClass('expand');
484        $($collapseTrigger).removeClass('up');
485        $($collapsable).find('.collapse').collapse('hide');
486        if (!$($collapsable).hasClass('expand')) {
487          $($collapsable).addClass('expand');
488        }
489      }
490
491    });
492
493  },
494  collapseSD: function(collapseSD, test) {
495    $(collapseSD).each(function(i, e) {
496      var $anchor = $(e).closestDescendant('a'),
497      $menuCollapse = $(e).closestDescendant('.js-menu-collapse'),
498      menuCollapseID = $($menuCollapse).attr('id'),
499      menuCollapseParent = $(e).parent().attr('class').split(' ')[0],
500      $icon = $(e).closestDescendant('.arrow');
501
502      if (test) {
503        if ($icon.length > 0) {
504          $($icon).attr('data-toggle', 'collapse')
505            .addClass('collapsed')
506            .attr('data-target', "#" + menuCollapseID)
507            .attr('data-parent', "." + menuCollapseParent)
508            .attr('aria-expanded', false);
509        } else {
510
511          $($anchor).attr('data-toggle', 'collapse')
512            .addClass('collapsed')
513            .attr('data-target', "#" + menuCollapseID)
514            .attr('data-parent', "." + menuCollapseParent)
515            .attr('aria-expanded', false);
516        }
517        $($menuCollapse).addClass('collapse');
518        $($menuCollapse).removeClass('dropdown-menu');
519      } else {
520        $($icon).attr('data-toggle', '')
521          .removeClass('collapsed')
522          .attr('data-target', "")
523          .attr('data-parent', "")
524          .attr('aria-expanded', "");
525        $($menuCollapse).removeClass('collapse');
526        $($menuCollapse).addClass('dropdown-menu');
527      }
528    })
529  },
530  menuPosition: function(menu) {
531    var $menuPosition = $(menu).find('.submenu-position'),
532    $listLinks = $(menu).find('.main-menu-pestanas__link'),
533    text = '';
534
535    $($listLinks).each(function(i, e) {
536      if ($(e).hasClass('active')) {
537        text = $(e).html();
538      }
539    })
540    if (!text == '') {
541      // console.log(text);
542
543      $($menuPosition).css('display', 'inline-block').html(text);
544    }
545  },
546  subMenuScrollFix: function(jsSubmenu, i) {
547    // console.log(jsSubmenu.length);
548
549    let subMenuWrapper = $(jsSubmenu);
550    let subMenuWrapperPosition = $(subMenuWrapper).offset();
551    let scroll = $(window).scrollTop();
552    let promoHeight = $(".promoSubmenu").length > 0 ? $(".promoSubmenu").height() : 0;
553    let adjustedThreshold = IOS_POSITION_ERROR_THRESHOLD + promoHeight;
554    if (
555    subMenuWrapperPosition != undefined &&
556    subMenuWrapperPosition.top < (scroll + adjustedThreshold)
557    ) {
558      cancelThrottle("pestanaMenu")
559      if (!$(subMenuWrapper).hasClass("menu-fixed")) {
560        $(subMenuWrapper).addClass("menu-fixed");
561      } else if (i == 1 && !$(subMenuWrapper).hasClass("second-submenu")) {
562        $(subMenuWrapper).addClass("second-submenu");
563      }
564    } else {
565      throttleIfIOS("pestanaMenu", () => {
566        $(subMenuWrapper).removeClass("menu-fixed");
567        $(subMenuWrapper).removeClass("second-submenu");
568      })
569    }
570  },
571
572}
573
574$(document).ready(function() {
575  $('[data-lazy-image]').each(function() {
576    var lazy = $(this).data('lazy-image'),
577    value = $(this).attr('src');
578    if ((!value) && (lazy)) { $(this).attr('src', lazy); }
579  });
580  $('[data-lazybck-image]').each(function() {
581    var lazy = $(this).data('lazybck-image'),
582    value = $(this).css('background-image');
583    if ((!value) && (lazy)) { $(this).css('background-image', 'url(' + lazy + ')'); }
584  })
585  $('[data-lazy-css]').each(function() {
586    var lazy = $(this).data('lazy-css');
587    if ((lazy) && (!$(this).hasClass(lazy))) { $(this).addClass(lazy); }
588  })
589});
590
591$(document).ready(function() {
592  var windowWidth = $(window).outerWidth();
593  var $pestanaWrapper = $(".menu-pestanas-wrapper");
594  var $pestanaMenu = $("section.menu-pestanas");
595  var $jsSubmenu = $(".js-submenu");
596  var $collapseSD = $($pestanaMenu).find('.js-collapse-sd');
597  var mobileLook = false;
598
599  if (windowWidth < 992) {
600    mobileLook = true;
601    pestanaMenuJS.pestanaSelectInit($pestanaWrapper, $pestanaMenu, mobileLook);
602    pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook);
603    pestanaMenuJS.collapseSD($collapseSD, mobileLook);
604  } else {
605    pestanaMenuJS.pestanaSelectInit($pestanaWrapper, $pestanaMenu, mobileLook);
606    pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook);
607    pestanaMenuJS.collapseSD($collapseSD, mobileLook);
608  }
609
610  try {
611    $(window).scroll(function() {
612      $($jsSubmenu).each(function(i, e) {
613        if (e.length > 0) {
614          pestanaMenuJS.subMenuScrollFix(e, i);
615        }
616      })
617    })
618  } catch (error) {
619    console.log(error);
620  }
621
622
623
624  var initWidth = $(window).outerWidth();
625  $(window).resize(function() {
626    if ($(this).width() != initWidth) {
627      var windowWidth = $(window).outerWidth();
628      var $pestanaWrapper = $(".menu-pestanas-wrapper");
629      var $pestanaMenu = $("section.menu-pestanas");
630      var $collapseSD = $($pestanaMenu).find('.js-collapse-sd');
631      var mobileLook = false;
632
633      if (windowWidth < 992) {
634        mobileLook = true;
635        pestanaMenuJS.pestanaSelect($pestanaWrapper, $pestanaMenu, mobileLook);
636        pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook);
637        pestanaMenuJS.collapseSD($collapseSD, mobileLook);
638      } else {
639        pestanaMenuJS.pestanaSelect($pestanaWrapper, $pestanaMenu, mobileLook);
640        pestanaMenuJS.mainMenuCollapseStructure($pestanaMenu, mobileLook);
641        pestanaMenuJS.collapseSD($collapseSD, mobileLook);
642      }
643
644    }
645  })
646
647});
648
649//********************** Cabecera destacada
650
651var cabDestacada = {
652  setHeight: function($destacada) {
653    var headerHeight = $($destacada).closest('body').find('header').height();
654
655    $($destacada).each(function() {
656      if (!$(this).hasClass('autoHeight')) {
657        $(this).find('.jumbotron').css('height', "calc(100vh - " + headerHeight + "px)");
658      }
659    })
660  },
661  clear: function($cabDestacada) {
662    if ($($cabDestacada).find('.slick-prev').length > 0) {
663      $($cabDestacada).find('.slick-prev').html('');
664    }
665
666    if ($($cabDestacada).find('.slick-next').length > 0) {
667      $($cabDestacada).find('.slick-next').html('');
668    }
669
670    if ($($cabDestacada).find('.slider-counter').length > 0) {
671      $($cabDestacada).find('.slider-counter').each(function(i, e) { $(e).remove() });
672    }
673  },
674  encapsulateDots: function($cabDestacada) {
675    $($cabDestacada).each(function(i, e) {
676      let $dots = $(e).find('.slick-dots');
677
678      let $prevArrow = $(e).find('.slick-prev').detach();
679      let $nextArrow = $(e).find('.slick-next').detach();
680
681      $dots.before("<div class='dots-wrapper'></div>");
682      let detached = $dots.detach();
683
684      $(detached).appendTo($(e).find('.dots-wrapper'));
685
686      $prevArrow.prependTo($(e).find('.dots-wrapper'));
687      $nextArrow.appendTo($(e).find('.dots-wrapper'));
688
689      if ($($dots).find('li').length < 2) {
690        $(e).find('.dots-wrapper').hide();
691      }
692    });
693  },
694  slideCounter: function($cabDestacada, actual, total) {
695    actual = actual + 1;
696    var $dots = $($cabDestacada).find('.slick-dots');
697
698    if (actual < 10) { $dots.before("<span class='actual slider-counter'>0" + actual + "</span>") } else { $dots.before("<span class='actual slider-counter'>" + actual + "</span>") }
699
700    if (total < 10) { $dots.after("<span class='total slider-counter'>0" + total + "</span>") } else { $dots.after("<span class='total slider-counter'>" + total + "</span>") }
701  },
702  noVideoMobile: function($cabDestacada) {
703    var video = $($cabDestacada).find('.video-wrapper-loop').find('video');
704    var iframe = $($cabDestacada).find('.video-wrapper-loop').find('iframe');
705    $(video).find('source').each(function(i, e) {
706      $(e).attr('src', '');
707    })
708    $(iframe).attr('src', '');
709  },
710  init: function($cabDestacada, actual, total, isMovil) {
711    cabDestacada.clear($cabDestacada);
712    cabDestacada.encapsulateDots($cabDestacada);
713    cabDestacada.slideCounter($cabDestacada, actual, total);
714    $(".slider-cabecera .slick-slide").css({ display: "block" });
715  },
716  render: function($cabDestacada, actual, total) {
717    cabDestacada.clear($cabDestacada);
718    cabDestacada.slideCounter($cabDestacada, actual, total);
719  }
720}
721
722// vertical number lines functions
723document.addEventListener("DOMContentLoaded", () => {
724  // check if number line child exist
725  const checkNumberLineChild = () => {
726
727    // highlighted slider celite
728    const highlightedSliderCelite = document.querySelectorAll(".cabecera-destacada-celite");
729
730    if (highlightedSliderCelite) {
731      highlightedSliderCelite.forEach((slider) => {
732        // check number line top top number
733        function checkTopNumber() {
734          if (
735          slider.firstElementChild.classList.contains("number-line") &&
736          slider.firstElementChild.classList.contains("top-top")
737          ) {
738            slider.classList.add("has-top-number");
739          } else {
740            slider.classList.remove("has-top-number");
741          }
742        }
743
744        //check number line bottom bottom number
745        function checkBottomNumber() {
746          if (
747          slider.lastElementChild.classList.contains("number-line") &&
748          slider.lastElementChild.classList.contains("bottom-bottom")
749          ) {
750            slider.classList.add("has-bottom-number");
751          } else {
752            slider.classList.remove("has-bottom-number");
753          }
754        }
755
756        // call functions
757        checkTopNumber();
758        checkBottomNumber();
759      });
760    }
761
762
763    // highlighted slider
764    const highlightedSlider = document.querySelectorAll(".cabecera-destacada");
765
766    if (highlightedSlider) {
767      highlightedSlider.forEach((slider) => {
768        // check number line top top number
769        function checkTopNumber() {
770          if (
771          slider.firstElementChild.classList.contains("number-line") &&
772          slider.firstElementChild.classList.contains("top-top")
773          ) {
774            slider.classList.add("has-top-number");
775          } else {
776            slider.classList.remove("has-top-number");
777          }
778        }
779
780        //check number line bottom bottom number
781        function checkBottomNumber() {
782          if (
783          slider.lastElementChild.classList.contains("number-line") &&
784          slider.lastElementChild.classList.contains("bottom-bottom")
785          ) {
786            slider.classList.add("has-bottom-number");
787          } else {
788            slider.classList.remove("has-bottom-number");
789          }
790        }
791
792        // call functions
793        checkTopNumber();
794        checkBottomNumber();
795      });
796    }
797
798    // product distributor
799    const productDistributor = document.querySelectorAll(".producto-distribuidor");
800
801    if (productDistributor) {
802      productDistributor.forEach((slider) => {
803        // check number line top top number
804        function checkTopNumber() {
805          if (
806          slider.firstElementChild.classList.contains("number-line") &&
807          slider.firstElementChild.classList.contains("top-top")
808          ) {
809            slider.classList.add("has-top-number");
810          } else {
811            slider.classList.remove("has-top-number");
812          }
813        }
814
815        // check number line bottom bottom number
816        function checkBottomNumber() {
817          if (
818          slider.lastElementChild.classList.contains("number-line") &&
819          slider.lastElementChild.classList.contains("bottom-bottom")
820          ) {
821            slider.classList.add("has-bottom-number");
822          } else {
823            slider.classList.remove("has-bottom-number");
824          }
825        }
826
827        // call functions
828        checkTopNumber();
829        checkBottomNumber();
830      });
831    }
832  };
833
834  // hide vertical number line if number doesn't exist
835  function hideNumberLines() {
836    const numbersLine = document.querySelectorAll(".number-line");
837    const numberLine = numbersLine.forEach((number) => {
838      if (number.textContent === "") {
839        number.style.setProperty("--display", "none");
840      }
841    });
842  }
843
844  // call functions
845  checkNumberLineChild();
846  hideNumberLines();
847});
848
849
850$(document).ready(function() {
851
852  var direction;
853  var useRtl = false;
854  (document.dir != undefined) ? direction = document.dir: direction = document.getElementsByTagName("html")[0].getAttribute("dir");
855
856  if (direction == 'rtl') { useRtl = true; }
857
858  try {
859    var hasThumbnailSlider = function(el) {
860      var itHas = $(el).closest('.cabecera-destacada').find('.js-slider-thumbnails').length > 0;
861
862      return itHas;
863    }
864  } catch (error) {
865    console.log(error);
866
867  }
868
869  try {
870    var $cabeceraDest = $('.cabecera-destacada').eq(0);
871    cabDestacada.setHeight($cabeceraDest);
872  } catch (error) {
873    console.log("setting cabecera destacada height, got this error " + error);
874  }
875
876
877  try {
878    $('.js-slider-cabecera').each(function(i, e) {
879      var total = 0;
880      var current = 0;
881
882      $(e).on('init', function(event, slick, currentSlide, nextSlide) {
883        total = slick.slideCount;
884        current = 0;
885      });
886
887      if (hasThumbnailSlider(e)) {
888        $(e).not('.slick-initialized').slick({ dots: true, speed: 300, rtl: useRtl, asNavFor: '.js-slider-thumbnails' });
889        $(e).closest('.cabecera-destacada').find('.js-slider-thumbnails').not('.slick-initialized').slick({
890          slidesToShow: 7,
891          swipeToSlide: true,
892          arrows: false,
893          dots: false,
894          rtl: useRtl,
895          centerMode: true,
896          asNavFor: '.js-slider-cabecera',
897          focusOnSelect: true,
898          responsive: [{
899            breakpoint: LG_BP,
900            settings: 'unslick'
901          }]
902        })
903      } else {
904        let autoTime = $(e).data("auto-time");
905        let autoPlay = false
906
907        if (autoTime && autoTime !== undefined && autoTime > 0) {
908          autoPlay = true;
909        } else {
910          autoTime = 0;
911        }
912
913        $(e).not('.slick-initialized').slick({
914            dots: true,
915            rtl: useRtl,
916            speed: 300,
917            autoplay: autoPlay,
918			autoplaySpeed: autoTime
919        });
920      }
921      var isMovil = 'undefined';
922      if ($(window).outerWidth() > 991 && $(window).outerWidth() < 1199) {
923        isMovil = 'isTablet'
924      } else if ($(window).outerWidth() < 991) {
925        isMovil = 'isMovil'
926      }
927      cabDestacada.init(e, current, total, isMovil);
928    })
929  } catch (error) {
930    console.log("init slider cabecera destacada " + error);
931
932  }
933
934  try {
935    $('.js-slider-cabecera').each(function(i, e) {
936      $(e).on('afterChange', function(event, slick, currentSlide, nextSlide) {
937        var total = slick.slideCount;
938
939        cabDestacada.render(e, currentSlide, total);
940        var scrollElement = $('.js-center-scroll');
941        commons.centerScroll(scrollElement);
942
943      });
944    })
945  } catch (error) {
946    console.log("on change slider cabecera destacada " + error);
947  }
948
949  // Video
950  try {
951    var $cabeceraDest = $('.cabecera-destacada');
952    if ($(window).outerWidth() < LG_BP) {
953      cabDestacada.noVideoMobile($cabeceraDest);
954    }
955  } catch (error) {
956    console.log("video bg mobile " + error);
957  }
958
959});
960
961$(document).ready(function () {
962  $('[data-lazy-image]').each(function () {
963    var lazy = $(this).data('lazy-image'), value = $(this).attr('src');
964    if ((!value) && (lazy)) { $(this).attr('src', lazy); }
965  });
966
967  $('[data-lazybck-image]').each(function () {
968    var lazy = $(this).data('lazybck-image'), value = $(this).css('background-image');
969    if ((!value) && (lazy)) { $(this).css('background-image', 'url(' + lazy + ')'); }
970  })
971
972  $('[data-lazy-css]').each(function () {
973    var lazy = $(this).data('lazy-css');
974    if ((lazy) && (!$(this).hasClass(lazy))) { $(this).addClass(lazy); }
975  })
976
977});
978
979$(window).resize(function() {
980  try {
981    var $cabeceraDest = $('.cabecera-destacada');
982    $($cabeceraDest).each(function() {
983      cabDestacada.setHeight(this);
984    })
985  } catch (error) {
986    console.log("setting cabecera destacada height, got this error " + error);
987  }
988});
989
990// cambio posicion slick-dots
991
992$(document).ready(function() {
993  $('.product-detail-manual  .slick-dots').appendTo('.product-detail-manual .move-slick-dots');
994});
995$(document).ready(function() {
996  $('.product-detail-full-width  .slick-dots').appendTo('.product-detail-full-width .move-slick-dots');
997});
998
999// cambio posicion anclas
1000$(document).ready(function() {
1001  function moveAnclas() {
1002    if ($(window).outerWidth() <= 768) {
1003      if ($('.menu-anclas.transparent-theme').length > 0) {
1004        $('.menu-anclas.transparent-theme').appendTo('.product-detail-manual  .move-anclas');
1005      }
1006      if ($('.menu-anclas.white-theme').length > 0) {
1007        $('.menu-anclas.white-theme').appendTo('.product-detail .move-anclas-normal-mobile');
1008      }
1009      if ($('.list-actions').length > 0) {
1010        $('.list-actions').appendTo('.move-list-action-mobile');
1011      }
1012    } else {
1013      if ($('.menu-anclas.transparent-theme').length > 0) {
1014        $('.menu-anclas.transparent-theme').appendTo('.menudesktop');
1015      }
1016
1017      if ($('.menu-anclas.white-theme').length > 0) {
1018        var $submenu = $();
1019        $('.js-submenu').each(function() {
1020          if ($(this).closest('.js-header').length < 1) {
1021            $submenu = $(this);
1022          }
1023        })
1024        $('.menu-anclas.white-theme').appendTo($submenu);
1025      }
1026
1027      if ($('.list-actions').length > 0) {
1028        $('.list-actions').appendTo('.menu-anclas .right-menu__wrapper');
1029      }
1030    }
1031  }
1032  moveAnclas();
1033  $(window).resize(moveAnclas);
1034});
1035
1036// cambio posicion breadcrumb para mobile
1037$(document).ready(function() {
1038  function moveBreadcrumbFull() {
1039    var contenedor = "<div class='container container-helper'></div>";
1040    if ($(window).outerWidth() < 992) {
1041      if ($('.move-breadcrumb-mobile').length > 0 && $('.breadcrumb.full-width').length > 0) {
1042        $(' .breadcrumb.full-width').appendTo('.move-breadcrumb-mobile');
1043      } else {
1044        if ($('.breadcrumb.full-width').length > 0 && $('.container-helper .breadcrumb.full-width').length < 1) {
1045          $('.container-helper').remove();
1046          $('header').after(contenedor);
1047          $('.breadcrumb.full-width').appendTo('.container-helper');
1048        }
1049      }
1050    } else {
1051      if ($('.breadcrumb.full-width').length > 0) {
1052        $(' .breadcrumb.full-width').appendTo('.breadcrumb-desktop');
1053        $('.container-helper').remove();
1054      }
1055    }
1056  }
1057  moveBreadcrumbFull();
1058  $(window).resize(moveBreadcrumbFull);
1059});
1060
1061
1062$(document).ready(function() {
1063  function moveBreadcrumb() {
1064    var contenedor = "<div class='container container-helper'></div>";
1065    if ($(window).outerWidth() < 992) {
1066      if ($('.move-breadcrumb-mobile').length > 0 && $(' .breadcrumb.normal').length > 0) {
1067        $('.breadcrumb.normal').appendTo('.move-breadcrumb-mobile');
1068      } else {
1069        if ($(' .breadcrumb.normal').length > 0 && $('.container-helper .breadcrumb.normal').length < 1) {
1070          // $('.container-helper').remove();
1071          $('header').after(contenedor);
1072          $(' .breadcrumb.normal').appendTo('.container-helper');
1073        }
1074      }
1075    } else {
1076      if ($(' .breadcrumb.normal').length > 0) {
1077        $('.breadcrumb.normal').prependTo('.product-card.options');
1078        $('.container-helper').remove();
1079      }
1080    }
1081  }
1082  moveBreadcrumb();
1083  $(window).resize(moveBreadcrumb);
1084});
1085
1086// cambio posicion anclas para mobile en full with
1087$(document).ready(function() {
1088  function moveDiv() {
1089    if ($(window).outerWidth() < 992) {
1090      $('.menu-anclas.white-theme').prependTo(' .move-anclas-full-width-mobile');
1091    }
1092  }
1093  moveDiv();
1094  $(window).resize(moveDiv);
1095});
1096
1097
1098// cambio posicion product navigation para mobile en full with
1099$(document).ready(function() {
1100  function moveDiv() {
1101    if ($(window).outerWidth() < 992) {
1102      if ($('.move-product-navigation-full-width-mobile').length > 0 && $('.product_navigation').length > 0) {
1103        $('.product_navigation').appendTo(' .move-product-navigation-full-width-mobile');
1104      }
1105    }
1106  }
1107  moveDiv();
1108  $(window).resize(moveDiv);
1109});
1110
1111
1112//********************** Hotspots
1113// Hotspots
1114
1115var hotspots = {
1116  clear: function($hotspots) {
1117    var $slide = $($hotspots).find('.hotspots-slide');
1118    var $pointLink = $($hotspots).find('.hotspots-points').find('.point');
1119    $slide.each(function(i, e) {
1120      $(e).removeClass('show');
1121    })
1122    $pointLink.each(function(i, e) {
1123      $(e).parent().removeClass('active');
1124    })
1125
1126  },
1127  showSlide: function($hotspots, dataShow) {
1128    var $slide = $($hotspots).find('.hotspots-slide');
1129    $slide.each(function(i, e) {
1130      var slideId = "#" + $(e).attr('id');
1131      if (slideId == dataShow) {
1132        $(e).addClass('show');
1133        hotspots.dataSlideSetter($hotspots, i);
1134      }
1135    })
1136  },
1137  initSlide: function($hotspots) {
1138    var $slide = $($hotspots).find('.hotspots-slide');
1139    // var $slide =  $($hotspots).find('.hotspots-slide');
1140    var $pointList = $($hotspots).find('.hotspots-points').find('a');
1141    var dataShow = $pointList.first().attr('data-show');
1142
1143    $pointList.each(function(i, e) {
1144      if (i == 0) {
1145        hotspots.showSlide($hotspots, dataShow);
1146        $(e).addClass('active');
1147      }
1148
1149    })
1150    $slide.each(function(i, e) {
1151      $(e).find('.js-close').click(function() {
1152        hotspots.clear($hotspots);
1153        hotspots.dataSlideSetter($hotspots, 0);
1154      })
1155    })
1156  },
1157  setup: function($hotspots) {
1158    var $image = $($hotspots).find('.hotspot-overflow').closestDescendant('img');
1159    var $list = $($hotspots).find('.hotspots-points');
1160
1161    var width = $image.width();
1162    $list.width(width);
1163  },
1164  activate: function($hotspots) {
1165    // var $slide =  $($hotspots).find('.hotspots-slide');
1166    var $pointLink = $($hotspots).find('.hotspots-points').find('.point');
1167    var dataShow = "";
1168
1169    $pointLink.each(function(i, e) {
1170      $(e).click(function(i, el) {
1171        var $el = $(this);
1172        dataShow = $($el).parent().attr('data-show');
1173        // console.log(dataShow);
1174
1175        if ($($el).parent().hasClass('active')) {
1176
1177          try {
1178            hotspots.clear($hotspots);
1179          } catch (error) {
1180            console.log("clear hotspots got this " + error);
1181          }
1182
1183        } else {
1184          try {
1185            hotspots.clear($hotspots);
1186          } catch (error) {
1187            console.log("clear hotspots got this " + error);
1188          }
1189
1190          try {
1191            $($el).parent().addClass('active');
1192            hotspots.showSlide($hotspots, dataShow);
1193          } catch (error) {
1194            console.log("show slide hotspots got this " + error);
1195          }
1196        }
1197
1198      })
1199    })
1200  },
1201  dataSlideSetter: function($hotspots, index) {
1202    // console.log($($hotspots).find('.hotspots-sliders-arrows'));
1203
1204    $($hotspots).find('.hotspots-sliders-arrows').attr('data-sli
1204de', index);
1205  },
1206  arrows: function($hotspots) {
1207    var $arrowLeft = $($hotspots).find('.arrow-left');
1208    var $arrowRight = $($hotspots).find('.arrow-right');
1209    var actualSlide = $($hotspots).find('.hotspots-sliders-arrows').data('slide');
1210    var $pointList = $($hotspots).find('.hotspots-points').find('a')
1211    var slidesLength = $($hotspots).find('.hotspots-points').find('a').length;
1212
1213    var displaySlide = function(i) {
1214      // var dataShow =  $pointList.get(i).attr('data-show');
1215      var $elem = $pointList.get(i);
1216      var dataShow = $($elem).data('show');
1217      // console.log('dataShow', dataShow);
1218
1219      hotspots.clear($hotspots);
1220      $($elem).addClass('active');
1221      hotspots.showSlide($hotspots, dataShow);
1222
1223    };
1224
1225
1226    $arrowLeft.click(function() {
1227      actualSlide--;
1228      if (actualSlide < 0) {
1229        actualSlide = slidesLength - 1;
1230      }
1231      displaySlide(actualSlide);
1232    })
1233    $arrowRight.click(function() {
1234      actualSlide++;
1235      if (actualSlide > slidesLength - 1) {
1236        actualSlide = 0;
1237      }
1238      displaySlide(actualSlide);
1239    })
1240
1241  },
1242  init: function($hotspots) {
1243
1244    hotspots.setup($hotspots);
1245    hotspots.initSlide($hotspots);
1246    hotspots.activate($hotspots);
1247    hotspots.arrows($hotspots);
1248  },
1249  render: function($hotspots) {
1250
1251    hotspots.clear($hotspots);
1252    hotspots.setup($hotspots);
1253  },
1254  renderResize: function($hotspots) {
1255
1256    hotspots.setup($hotspots);
1257  }
1258}
1259
1260$.fn.isInViewport = function() {
1261  var elementTop = $(this).offset().top;
1262  var elementBottom = elementTop + $(this).outerHeight();
1263
1264  var viewportTop = $(window).scrollTop();
1265  var viewportBottom = viewportTop + 100;
1266
1267  return elementBottom > viewportTop && elementTop < viewportBottom;
1268};
1269
1270$(window).on('resize scroll', function() {
1271  $('.hotspots').each(function() {
1272    if ($(this).isInViewport()) {
1273      $(this).removeClass('anime-shake');
1274      $(this).addClass('anime-shake');
1275    } else {
1276      $(this).removeClass('anime-shake');
1277    }
1278  });
1279});
1280
1281$(document).ready(function() {
1282
1283  var $hotspots = $('.hotspots');
1284
1285  $hotspots.each(function(i, e) {
1286    try {
1287      hotspots.init(e)
1288    } catch (error) {
1289      console.log('init hotspots got this error ' + error);
1290
1291    }
1292  })
1293})
1294
1295$(window).resize(function() {
1296
1297  var $hotspots = $('.hotspots');
1298
1299  $hotspots.each(function(i, e) {
1300    try {
1301      hotspots.renderResize(e)
1302    } catch (error) {
1303      console.log('init hotspots got this error ' + error);
1304
1305    }
1306  })
1307})
1308
1309
1310//  find puntos
1311// $('#pointer_div').click(function(e){
1312//   var imgWidth = $(this).find('img').width();
1313//   var imgHeight = $(this).find('img').height();
1314//   var pos_x = Math.round((e.offsetX/imgWidth) * 100);
1315//   var pos_y = Math.round((e.offsetY/imgHeight) * 100);
1316//   $('input[name=form_x]').val(pos_x);
1317//   $('input[name=form_y]').val(pos_y);
1318// })
1319
1320
1321
1322
1323
1324
1325//********************** Blog
1326
1327$(document).ready(function() {
1328  try {
1329
1330    var direction;
1331    var useRtl = false;
1332    (document.dir != undefined) ? direction = document.dir: direction = document.getElementsByTagName("html")[0].getAttribute("dir");
1333
1334    if (direction == 'rtl') { useRtl = true; }
1335
1336    if ($('.js-slider-blog').length > 0) {
1337      $('.js-slider-blog').each(function(i, slider) {
1338        var blogSlidercols = $(slider).data('col');
1339        $(slider).not('.slick-initialized').slick({
1340          dots: true,
1341          arrow: false,
1342          swipeToSlide: true,
1343          rtl: useRtl,
1344          infinite: false,
1345          speed: 300,
1346          slidesToShow: blogSlidercols,
1347          responsive: [{
1348            breakpoint: 991,
1349            settings: {
1350              dots: false,
1351              rtl: useRtl
1352            }
1353          },
1354            {
1355              breakpoint: 767,
1356              settings: {
1357                dots: false,
1358                slidesToShow: 1,
1359                rtl: useRtl
1360              }
1361            }
1362          ]
1363        });
1364      })
1365
1366    };
1367
1368  } catch (error) {
1369    console.log('Try set slider blog got ' + error);
1370  }
1371})
1372
1373//********************** Coleccion slider
1374
1375var colectionSlider = {
1376  clear: function($colectionSlider) {
1377
1378    if ($($colectionSlider).closest('.slider-blog').find('.counter-sit').length > 0) {
1379
1380      $($colectionSlider).closest('.slider-blog').find('.slider-counter').each(function(i, e) { $(e).remove() });
1381    }
1382  },
1383  slideCounter: function($colectionSlider, actual, total) {
1384    actual = actual + 1;
1385
1386    var $counter = $($colectionSlider).closest('.slider-blog').find('.counter-sit');
1387    if (total > 1) {
1388      if (actual < 10) { $counter.append("<span class='actual slider-counter'>0" + actual + "</span>") } else { $counter.append("<span class='actual slider-counter'>" + actual + "</span>") }
1389
1390      if (total < 10) { $counter.append("<span class='total slider-counter'>0" + total + "</span>") } else { $counter.append("<span class='total slider-counter'>" + total + "</span>") }
1391      //$counter.append("<span class='actual slider-counter'>0"+ actual +"</span>" + "<span class='total slider-counter'>0"+ total +"</span>")
1392    }
1393  },
1394  init: function($colectionSlider, actual, total) {
1395    colectionSlider.clear($colectionSlider);
1396    colectionSlider.slideCounter($colectionSlider, actual, total);
1397  },
1398  render: function($colectionSlider, actual, total) {
1399    colectionSlider.clear($colectionSlider);
1400    colectionSlider.slideCounter($colectionSlider, actual, total);
1401  }
1402
1403}
1404
1405// Collection Lightbox Slider
1406var collectionSlider = {
1407  clear: function($collectionSlider) {
1408    if (
1409    $($collectionSlider).closest(".slider-blog").find(".counter-sit")
1410      .length > 0
1411    ) {
1412      $($collectionSlider)
1413        .closest(".slider-blog")
1414        .find(".slider-counter")
1415        .each(function(i, e) {
1416        $(e).remove();
1417      });
1418    }
1419  },
1420  slideCounter: function($collectionSlider, actual, total) {
1421    actual = actual + 1;
1422
1423    var $counter = $($collectionSlider)
1424      .closest(".slider-blog")
1425      .find(".counter-sit");
1426    if (total > 1) {
1427      if (actual < 10) {
1428        $counter.append(
1429          "<span class='actual slider-counter'>0" + actual + "</span>"
1430        );
1431      } else {
1432        $counter.append(
1433          "<span class='actual slider-counter'>" + actual + "</span>"
1434        );
1435      }
1436
1437      if (total < 10) {
1438        $counter.append(
1439          "<span class='total slider-counter'>0" + total + "</span>"
1440        );
1441      } else {
1442        $counter.append(
1443          "<span class='total slider-counter'>" + total + "</span>"
1444        );
1445      }
1446      //$counter.append("<span class='actual slider-counter'>0"+ actual +"</span>" + "<span class='total slider-counter'>0"+ total +"</span>")
1447    }
1448  },
1449  init: function($collectionSlider, actual, total) {
1450    colectionSlider.clear($collectionSlider);
1451    colectionSlider.slideCounter($collectionSlider, actual, total);
1452  },
1453  render: function($collectionSlider, actual, total) {
1454    colectionSlider.clear($collectionSlider);
1455    colectionSlider.slideCounter($collectionSlider, actual, total);
1456  },
1457};
1458
1459
1460
1461$(document).ready(function() {
1462
1463  var direction;
1464  var useRtl = false;
1465  (document.dir != undefined) ? direction = document.dir: direction = document.getElementsByTagName("html")[0].getAttribute("dir");
1466
1467  if (direction == 'rtl') { useRtl = true; }
1468
1469  try {
1470    $('.js-slider-coleccion').each(function(i, e) {
1471      var total = 0;
1472      var current = 0;
1473      $(e).on('init', function(event, slick, currentSlide, nextSlide) {
1474        total = slick.slideCount;
1475        current = 0;
1476
1477      });
1478      $(e).not('.slick-initialized').slick({
1479        dots: true,
1480        arrow: false,
1481        infinite: false,
1482        rtl: useRtl,
1483        speed: 300,
1484        slidesToShow: 1,
1485        swipeToSlide: true,
1486        touchThreshold: 10,
1487        responsive: [{
1488          breakpoint: 991,
1489          settings: {
1490            dots: false,
1491            rtl: useRtl
1492          }
1493        },
1494          {
1495            breakpoint: 767,
1496            settings: {
1497              dots: false,
1498              slidesToShow: 1,
1499              rtl: useRtl
1500            }
1501          }
1502        ]
1503      });
1504
1505      colectionSlider.init(e, current, total);
1506    })
1507  } catch (error) {
1508    console.log("init slider colection " + error);
1509
1510  }
1511  try {
1512    $('.js-slider-coleccion').each(function(i, e) {
1513      $(e).on('afterChange', function(event, slick, currentSlide, nextSlide) {
1514        var total = slick.slideCount;
1515        colectionSlider.render(e, currentSlide, total);
1516      });
1517    })
1518  } catch (error) {
1519    console.log("on change slider colection " + error);
1520  }
1521
1522
1523})
1524
1525//********************** Coleccion slider version 2
1526
1527$(document).ready(function() {
1528
1529  try {
1530    $('.js-slider-coleccion2').each(function(i, e) {
1531      var total = 0;
1532      var current = 0;
1533      $(e).on('init', function(event, slick, currentSlide, nextSlide) {
1534        total = slick.slideCount;
1535        current = 0;
1536
1537      });
1538      $(e).not('.slick-initialized').slick({
1539        dots: true,
1540        arrow: false,
1541        infinite: false,
1542        speed: 300,
1543        touchThreshold: 10,
1544        slidesToShow: 1,
1545        responsive: [{
1546          breakpoint: 991,
1547          settings: {
1548            dots: false
1549          }
1550        },
1551          {
1552            breakpoint: 767,
1553            settings: {
1554              dots: false,
1555              slidesToShow: 1,
1556            }
1557          }
1558        ]
1559      });
1560
1561      colectionSlider.init(e, current, total);
1562    })
1563  } catch (error) {
1564    console.log("init slider colection " + error);
1565
1566  }
1567  try {
1568    $('.js-slider-coleccion2').each(function(i, e) {
1569      $(e).on('afterChange', function(event, slick, currentSlide, nextSlide) {
1570        var total = slick.slideCount;
1571        colectionSlider.render(e, currentSlide, total);
1572      });
1573    })
1574  } catch (error) {
1575    console.log("on change slider colection " + error);
1576  }
1577
1578  try {
1579    $(".js-slider-collection").each(function(i, e) {
1580      var total = 0;
1581      var current = 0;
1582      var sliderCols = $(e).data("col");
1583      $(e).on("init", function(event, slick, currentSlide, nextSlide) {
1584        total = slick.slideCount;
1585        current = 0;
1586
1587        const currentSlideTitle = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('title');
1588        const collectionSliderTitle = document.querySelector('.title-link');
1589
1590        collectionSliderTitle.textContent = currentSlideTitle;
1591
1592        const currentSlideText = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('text');
1593        const collectionSliderText = document.querySelector('.text-link');
1594        collectionSliderText.innerHTML = currentSlideText;
1595
1596      });
1597      $(e).slick({
1598        dots: true,
1599        arrow: false,
1600        infinite: true,
1601        speed: 300,
1602        touchThreshold: 10,
1603        slidesToScroll: 1,
1604        slidesToShow: sliderCols,
1605        responsive: [{
1606          breakpoint: 991,
1607          settings: {
1608            dots: false,
1609          },
1610        },
1611          {
1612            breakpoint: 767,
1613            settings: {
1614              dots: false,
1615              slidesToShow: 1,
1616            },
1617          },
1618        ],
1619      });
1620
1621      colectionSlider.init(e, current, total);
1622    });
1623  } catch (error) {
1624    console.log("on change slider colection " + error);
1625  }
1626
1627  try {
1628    $(".js-slider-collection").each(function(i, e) {
1629
1630      $(e).on("afterChange", function(event, slick, currentSlide, nextSlide) {
1631        var total = slick.slideCount;
1632        colectionSlider.render(e, currentSlide, total);
1633      });
1634
1635      $(e).on("afterChange", function(event, slick, currentSlide, nextSlide) {
1636
1637        const currentSlideTitle = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('title');
1638        const collectionSliderTitle = document.querySelector('.title-link');
1639        collectionSliderTitle.textContent = currentSlideTitle;
1640
1641        const currentSlideText = $('.js-slider-collection .slick-current.slick-active').find('.image-blog').data('text');
1642        const collectionSliderText = document.querySelector('.text-link');
1643        collectionSliderText.innerHTML = currentSlideText;
1644      });
1645
1646    });
1647
1648  } catch (error) {
1649    console.log("on change slider colection " + error);
1650  }
1651
1652  try {
1653    // collection slider lightbox
1654    $('#modal-image-lightbox').on('show.bs.modal', function(event) {
1655      var button = $(event.relatedTarget) // Button that triggered the modal
1656
1657      // Extract info from data-* attributes
1658      var image = button.data('image');
1659      var btnText = button.data('btntext');
1660      var btnLink = button.data('btnlink');
1661
1662      var modal = $(this);
1663      modal.find('.modal-image-lightbox').attr('src', image);
1664      modal.find('.lightbox-download').attr('href', image + ((image.indexOf('?') !== -1) ? '&' : '?') + 'download=true');
1665      if (btnText && btnLink) {
1666        modal.find('.btn-slide').show();
1667        modal.find('.btn-slide a').attr('href', btnLink);
1668        modal.find('.btn-slide a').html(btnText);
1669      } else {
1670        modal.find('.btn-slide').hide();
1671      }
1672    });
1673
1674  } catch (error) {
1675    console.log("on change slider colection " + error);
1676  }
1677
1678})
1679
1680
1681
1682
1683//********************** Producto Distribuidor
1684
1685var product = {
1686  selectColor: function(productEl, device) {
1687
1688    $(productEl).each(function(i, e) {
1689      var hasColor = $(e).find('.colors');
1690      if (hasColor.length > 0) {
1691        $(e).find('.colors').find('button').each(function(index, el) {
1692          if (index == 0) {
1693            $(el).addClass('selected');
1694            var elPvp = $(el).attr('data-pvp');
1695            if (elPvp) {
1696              $(el).closest('.wrapper-producto').find('.price').html(elPvp);
1697            }
1698            product.selectImg(e, this, device);
1699          }
1700          $(el).click(function() {
1701            $(this).addClass('selected').siblings().removeClass('selected');
1702            var elPvp = $(el).attr('data-pvp');
1703            if (elPvp) {
1704              $(this).closest('.wrapper-producto').find('.price').html(elPvp);
1705            }
1706            var novelty = $(el).attr('data-novelty');
1707            if (novelty === 'true') { $(this).closest('.wrapper-producto').find('.promo li.black').show(); } else { $(this).closest('.wrapper-producto').find('.promo li.black').hide(); }
1708            var discontinued = $(el).attr('data-discontinued');
1709            if (discontinued === 'true') { $(this).closest('.wrapper-producto').parent().find('.sold-out').show(); } else { $(this).closest('.wrapper-producto').parent().find('.sold-out').hide(); }
1710            product.selectImg(e, this, device);
1711          });
1712        })
1713      } else {
1714        return false;
1715      }
1716    })
1717  },
1718  selectImg: function(productEl, colorSelected, device, indexSelected) {
1719
1720    var imageName = $(colorSelected).data('image');
1721    var isLiferay = $(productEl).closest(".js-isLiferay");
1722
1723    if (imageName && imageName.length > 0) {
1724
1725      switch (device) {
1726        case 'mobile':
1727          imageName = $(colorSelected).data('sm-image');
1728          break;
1729        default:
1730          imageName = $(colorSelected).data('image');
1731      }
1732
1733      if (isLiferay.length > 0) {
1734        // empieza
1735        var imgeUrl = $(productEl).find('.wrapper-img').css('background-image');
1736        var imgeUrlSplited = imgeUrl.substring(0, imgeUrl.lastIndexOf("("));
1737        var imgeFinalUrl = imgeUrlSplited + '("' + imageName + '")';
1738        // acaba
1739      } else {
1740        // Maqueta
1741        // empieza
1742        var imgeUrl = $(productEl).find('.wrapper-img').css('background-image');
1743        var imgeUrlSplited = imgeUrl.substring(0, imgeUrl.lastIndexOf("/"));
1744        var imgeFinalUrl = imgeUrlSplited + "/" + imageName + '")';
1745        // acaba
1746      }
1747
1748
1749
1750      $(productEl).find('.wrapper-img').css('background-image', imgeFinalUrl);
1751
1752    } else {
1753      return false;
1754    }
1755
1756
1757  },
1758  applyMatchHeight: function(productEl) {
1759    var text = $(productEl).find('.title-producto');
1760    var finish = $(productEl).find('.colors');
1761    var dades = $(productEl).find('.dades');
1762    var prices = $(productEl).find('.prices');
1763    var collection = $(productEl).find('.coleccion');
1764
1765    $(text).matchHeight();
1766    $(finish).matchHeight();
1767    $(dades).matchHeight();
1768    $(prices).matchHeight();
1769    $(collection).matchHeight();
1770  },
1771  clear: function(productEl) {
1772    $(productEl).each(function(i, e) {
1773      var hasColor = $(e).find('.colors');
1774      if (hasColor.length > 0) {
1775        $(e).find('.colors').find('button').each(function(index, el) {
1776          $(this).removeClass('selected');
1777          if (index == 0) {
1778            $(this).addClass('selected');
1779            product.selectImg(e, this);
1780          }
1781        })
1782      }
1783    })
1784  }
1785}
1786
1787
1788$(document).ready(function() {
1789  var $product = $('.wrapper-producto');
1790  var windowWidth = $(window).outerWidth();
1791  var device = 'desktop';
1792  if (windowWidth < 768) {
1793    device = 'mobile';
1794  }
1795
1796  try {
1797    $product.each(function(i, e) {
1798      product.selectColor(e, device);
1799    })
1800
1801  } catch (error) {
1802    console.log(error);
1803
1804  }
1805
1806  try {
1807    if ($('.js-slider-producto').length > 0) {
1808      $('.js-slider-producto').each(function(i, slider) {
1809        var sliderProductCols = $(slider).data('col');
1810
1811        $(slider).on('init', function(event, slick) {
1812          product.applyMatchHeight($product);
1813          // product.selectColor($product, device);
1814        });
1815        $(slider).on('reInit', function(event, slick) {
1816          product.applyMatchHeight($product);
1817          // product.selectColor($product, device);
1818        });
1819
1820        $(slider).not('.slick-initialized').slick({
1821          dots: true,
1822          arrow: false,
1823          slidesToShow: sliderProductCols,
1824          infinite: false,
1825          speed: 300,
1826          touchThreshold: 10,
1827          centerMode: false,
1828          slidesToScroll: 2,
1829          responsive: [{
1830            breakpoint: 1199,
1831            settings: {
1832              dots: true,
1833              slidesToShow: 3
1834            }
1835          },
1836            {
1837              breakpoint: 991,
1838              settings: {
1839                dots: false,
1840                slidesToShow: 2,
1841                slidesToScroll: 1
1842              }
1843            },
1844            {
1845              breakpoint: 767,
1846              settings: {
1847                dots: false,
1848                slidesToShow: 1,
1849                slidesToScroll: 1
1850              }
1851            }
1852          ]
1853        }).on('setPosition', function(event, slick) {
1854          slick.$slides.css('height', slick.$slideTrack.height() + 'px');
1855        });
1856      })
1857    };
1858
1859  } catch (error) {
1860    console.log('Try set slider product got ' + error);
1861  }
1862
1863  //slider with controls section
1864  try {
1865    if ($('.js-slider-producto-controls').length > 0) {
1866      $('.js-slider-producto-controls').each(function(i, slider) {
1867        var sliderProductCols = $(slider).data('col');
1868
1869        $(slider).on('init', function(event, slick) {
1870          product.applyMatchHeight($product);
1871        });
1872
1873        var carousel = $(slider).not('.slick-initialized').slick({
1874          dots: true,
1875          arrow: true,
1876          slidesToShow: sliderProductCols,
1877          infinite: false,
1878          speed: 300,
1879          touchThreshold: 10,
1880          centerMode: false,
1881          appendDots: $(slider).parent().find(".slider-producto-controls .slide-m-dots"),
1882          prevArrow: $(slider).parent().find(".slider-producto-controls .slide-m-prev"),
1883          nextArrow: $(slider).parent().find(".slider-producto-controls .slide-m-next"),
1884          responsive: [{
1885            breakpoint: 1912,
1886            settings: {
1887              slidesToShow: 3
1888            }
1889          },
1890            {
1891              breakpoint: 1180,
1892              settings: {
1893                slidesToShow: 2
1894              }
1895            },
1896            {
1897              breakpoint: 767,
1898              settings: {
1899                slidesToShow: 1
1900              }
1901            }
1902          ]
1903        });
1904
1905        actionDotScroll(carousel, 5, (16 + 8));
1906      })
1907
1908
1909    };
1910
1911
1912
1913  } catch (error) {
1914    console.log('Try set slider product got ' + error);
1915  }
1916
1917  // slider product with vertical image left
1918  try {
1919    if ($(".js-slider-producto-vertical").length > 0) {
1920      $(".js-slider-producto-vertical").each(function(i, slider) {
1921        var sliderProductCols = $(slider).data("col");
1922
1923        $(slider).on("init", function(event, slick) {
1924          product.applyMatchHeight($product);
1925          // product.selectColor($product, device);
1926        });
1927        $(slider).on("reInit", function(event, slick) {
1928          product.applyMatchHeight($product);
1929          // product.selectColor($product, device);
1930        });
1931
1932        $(slider)
1933          .slick({
1934          dots: true,
1935          arrow: false,
1936          infinite: false,
1937          speed: 300,
1938          touchThreshold: 10,
1939          centerMode: false,
1940          slidesToShow: sliderProductCols,
1941          slidesToScroll: 2,
1942          responsive: [{
1943            breakpoint: 1200,
1944            settings: {
1945              dots: true,
1946              slidesToShow: 2,
1947            },
1948          },
1949            {
1950              breakpoint: 992,
1951              settings: {
1952                dots: true,
1953                slidesToShow: 2,
1954                slidesToScroll: 1,
1955              },
1956            },
1957            {
1958              breakpoint: 767,
1959              settings: {
1960                dots: true,
1961                slidesToShow: 2,
1962                slidesToScroll: 1,
1963              },
1964            },
1965          ],
1966        })
1967          .on("setPosition", function(event, slick) {
1968          slick.$slides.css(
1969            "height",
1970            slick.$slideTrack.height() + "px"
1971          );
1972        });
1973      });
1974    }
1975  } catch (error) {
1976    console.log("Try set slider product got " + error);
1977  }
1978
1979  //  $('.wrapper-producto').each(function(i, e){
1980  //   // $(e).find('.colors').find('input:radio').addClass('input_hidden');
1981  //   $(e).find('.colors').find('label').each(function(index, el){
1982
1983  //     $(el).on('click', function(){
1984  //       console.log(index);
1985
1986  //         $(this).addClass('selected').siblings().removeClass('selected');
1987  //     });
1988  //   })
1989  // })
1990
1991});
1992function HasSelfClassOrParent(element, classname) {
1993  if (element.classList && element.classList.contains(classname))
1994  return true;
1995
1996  return element.parentNode && HasSelfClassOrParent(element.parentNode, classname);
1997}
1998
1999//********************** Product Card
2000
2001var productCard = {
2002  activateCard: function($productCard) {
2003    $($productCard).find('.js-activate').click(function() {
2004      $(this).closest('.product-card').toggleClass('active');
2005    })
2006
2007    $($productCard).find('.product-card__wrapper').mouseover(function () {
2008      var carousel = $($productCard).find('.js-slider-image-product').not('.slick-initialized').slick({
2009        dots: true,
2010        arrows: true,
2011        infinite: false,
2012        appendDots: $($productCard).find(".slide-m-dots"),
2013        prevArrow: $($productCard).find(".slide-m-prev"),
2014        nextArrow: $($productCard).find(".slide-m-next"),
2015        lazyLoad: 'ondemand'
2016      });
2017      actionDotScroll(carousel, 5, (16 + 8));
2018
2019      $($productCard).find('.product-card__wrapper .images-slider .slick-list').matchHeight({
2020        target: $($productCard).find('.product-card__wrapper .wrapper-img')
2021      });
2022      $($productCard).find('.wrapper-text').css({
2023        'cursor': 'pointer',
2024      });
2025      $($productCard).find('.wrapper-text').click(function(event){
2026        let element = event.target;
2027        if(!HasSelfClassOrParent(event.target, "colors") && !HasSelfClassOrParent(event.target, "options-links")
2028        && !HasSelfClassOrParent(event.target, "coleccion-url") && !HasSelfClassOrParent(event.target, "modal-medidas")){
2029          top.window.location = $(this).find(".title-producto a").attr("href");
2030          return false;
2031        }
2032      });
2033    });
2034  },
2035  layerClose: function($productCard) {
2036    $($productCard).find('.js-close').click(function() {
2037      $(this).closest('.product-card').removeClass('fav-in');
2038      $(this).closest('.product-card').removeClass('cart-in');
2039      $(this).closest('.product-card').removeClass('compare-in');
2040      $(this).closest('.product-card').removeClass('threeR-in');
2041    })
2042    $($productCard).mouseleave(function() {
2043      $(this).removeClass('fav-in');
2044      $(this).removeClass('cart-in');
2045      $(this).removeClass('compare-in');
2046      $(this).removeClass('threeR-in');
2047    })
2048  },
2049  fav: function($fav) {
2050    $($fav).click(function() {
2051      $(this).closest('.product-card').addClass('fav-in');
2052    });
2053  },
2054  cart: function($cart) {
2055    $($cart).click(function() {
2056      $(this).closest('.product-card').addClass('cart-in');
2057    });
2058  },
2059  compare: function($compare) {
2060    $($compare).click(function() {
2061      $(this).closest('.product-card').addClass('compare-in');
2062    });
2063  },
2064  threeR: function($threeR) {
2065    $($threeR).click(function() {
2066      $(this).closest('.product-card').addClass('threeR-in');
2067    });
2068  }
2069}
2070
2071function loadEvents() {
2072  var $productCard = $('.product-card'),
2073  $fav = $('.js-fav'),
2074  $cart = $('.js-cart'),
2075  $compare = $('.js-compare'),
2076  $threeR = $('.js-threeR');
2077
2078
2079  try {
2080    $($productCard).each(function (i, e) {
2081      productCard.layerClose(e);
2082    })
2083  } catch (error) {
2084    console.log(error);
2085    console.log("Error asignando funcion layerClose");
2086  }
2087
2088  try {
2089    $($fav).each(function (i, e) {
2090      productCard.fav(e);
2091    })
2092  } catch (error) {
2093    console.log(error);
2094    console.log("Error asignando funcion fav");
2095  }
2096  try {
2097    $($cart).each(function (i, e) {
2098      productCard.cart(e);
2099    })
2100  } catch (error) {
2101    console.log(error);
2102    console.log("Error asignando funcion cart");
2103  }
2104  try {
2105    $($compare).each(function (i, e) {
2106      productCard.compare(e);
2107    })
2108  } catch (error) {
2109    console.log(error);
2110    console.log("Error asignando funcion compare");
2111  }
2112  try {
2113    $($threeR).each(function (i, e) {
2114      productCard.threeR(e);
2115    })
2116  } catch (error) {
2117    console.log(error);
2118    console.log("Error asignando funcion threeR");
2119  }
2120
2121  try {
2122    $($productCard).each(function (i, e) {
2123      productCard.activateCard(e);
2124    })
2125  } catch (error) {
2126    console.log(error);
2127    console.log("Error asignando funcion activateCard");
2128  }
2129
2130}
2131
2132$(document).ready(function() {
2133  loadEvents();
2134})
2135
2136
2137//********************** Product Filter
2138
2139var productFilter = {
2140  moveFiltersMobile: function($productFilter) {
2141    var $menuList = $($productFilter).find('.js-menu-filters');
2142    var $selectedList = $($productFilter).find('.selected-filter-list');
2143
2144    var $dest = $($productFilter).find('.js-filters-mobile');
2145    var $destSelected = $($productFilter).find('.js-selected-filters-mobile');
2146
2147    var $items = $($menuList).detach();
2148    var $selectedItems = $($selectedList).detach();
2149    $($dest).append($items);
2150    $($destSelected).append($selectedItems);
2151
2152
2153  },
2154  moveFiltersDesktop: function($productFilter) {
2155    var $menuList = $($productFilter).find('.js-menu-filters');
2156    var $selectedList = $($productFilter).find('.selected-filter-list');
2157
2158    var $dest = $($productFilter).find('.js-filters-desktop');
2159    var $destSelected = $($productFilter).find('.js-selected-filters-desktop');
2160
2161    var $items = $($menuList).detach();
2162    var $selectedItems = $($selectedList).detach();
2163
2164    $($dest).append($items);
2165    $($destSelected).append($selectedItems);
2166
2167  },
2168  changeColMobile: function($productFilter, $cardList) {
2169    var $colButton = $($productFilter).find('.js-change-cols-mobile');
2170    if($colButton.length == 0){
2171      var $colButton = $($cardList).find('.js-change-cols-mobile');
2172    }
2173
2174    if($colButton.length > 0){
2175      $($colButton).find('span').click(function() {
2176        const $this = $(this);
2177        const dataTarget = $this.data('target');
2178
2179        if (dataTarget) {
2180          const targetCols = $this.data('cols');
2181
2182          if (productListMobileCols) {
2183            productListMobileCols = targetCols;
2184          }
2185
2186          if (targetCols === 1) {
2187            $("#" + dataTarget).find(".sm-cols-item").removeClass("col-6").addClass("col-12");
2188            $this.parent().find(".selector-1-column").removeClass("disabled");
2189            $this.parent().find(".selector-2-column").addClass("disabled");
2190          } else if (targetCols === 2) {
2191            $("#" + dataTarget).find(".sm-cols-item").removeClass("col-12").addClass("col-6");
2192            $this.parent().find(".selector-1-column").addClass("disabled");
2193            $this.parent().find(".selector-2-column").removeClass("disabled");
2194          }
2195
2196          checkProductListFinishedsToShow($("#" + dataTarget));
2197
2198          productList.cardHeight('#' + dataTarget);
2199        } else {
2200          $this.toggleClass('active');
2201
2202          if($this.find('span').length > 1){
2203            $this.find('span').toggleClass('disabled');
2204          }
2205
2206          $this.closest('body').toggleClass('col-2-active');
2207
2208          var $card = $($cardList).find('.product-card');
2209          $($card).css('height', 'auto');
2210          $($cardList).find('.product-card .title-producto').matchHeight();
2211          $($cardList).find('.product-card .colors').matchHeight();
2212          $($cardList).find('.product-card .dades').matchHeight();
2213          $($cardList).find('.product-card .prices').matchHeight();
2214
2215          $($card).matchHeight();
2216        }
2217      })
2218    }
2219  },
2220  applySlider: function($jsSlider) {
2221    $($jsSlider).not('.slick-initialized').slick({
2222      slidesToShow: 9,
2223      swipeToSlide: true,
2224      infinite: false,
2225      speed: 300,
2226      dots: false,
2227      arrows: true,
2228      prevArrow: '<button type="button" class="slick-prev icon-chevron-left"></button>',
2229      nextArrow: '<button type="button" class="slick-next icon-chevron-right"></button>',
2230      responsive: [{
2231        breakpoint: 1912,
2232        settings: {
2233          slidesToShow: 6
2234        }
2235      }, {
2236        breakpoint: 1180,
2237        settings: {
2238          slidesToShow: 5
2239        }
2240      }, {
2241        breakpoint: 1025,
2242        settings: {
2243          slidesToShow: 4
2244        }
2245      }, {
2246        breakpoint: 868,
2247        settings: {
2248          slidesToShow: 3.75
2249        }
2250      }, {
2251        breakpoint: 576,
2252        settings: {
2253          slidesToShow: 3
2254        }
2255
2256      }, {
2257      }, {
2258        breakpoint: 460,
2259        settings: {
2260          slidesToShow: 2.5
2261        }
2262
2263      }, {
2264        breakpoint: 415,
2265        settings: {
2266          slidesToShow: 2
2267        }
2268      }, {
2269        breakpoint: 345,
2270        settings: {
2271          slidesToShow: 1.75
2272        }
2273      }]
2274    });
2275  }
2276}
2277
2278$(document).ready(function() {
2279
2280  var $productFilter = $('.product-filter'),
2281  cardList = $('.product-list'),
2282  $jsSlider = $('.category-filters').find('.js-slider'),
2283  windowWidth = $(window).outerWidth();
2284
2285
2286  try {
2287    $($jsSlider).each(function(i, e) {
2288      productFilter.applySlider(e);
2289    })
2290  } catch (error) {
2291    console.log(error);
2292  }
2293
2294  try {
2295    $($productFilter).each(function(i, e) {
2296      if (windowWidth < LG_BP) {
2297        productFilter.moveFiltersMobile(e);
2298      } else {
2299        productFilter.moveFiltersDesktop(e);
2300      }
2301    })
2302  } catch (error) {
2303    console.log(error);
2304  }
2305
2306  try {
2307    $($productFilter).each(function(i, e) {
2308      if (windowWidth < LG_BP) {
2309        productFilter.changeColMobile(e, cardList);
2310      }
2311    })
2312  } catch (error) {
2313    console.log(error);
2314  }
2315
2316})
2317$(window).resize(function() {
2318
2319  var $productFilter = $('.product-filter'),
2320  cardList = $('.product-list'),
2321  windowWidth = $(window).outerWidth();
2322
2323
2324  try {
2325    $($productFilter).each(function(i, e) {
2326      if (windowWidth < LG_BP) {
2327        productFilter.moveFiltersMobile(e);
2328      } else {
2329        productFilter.moveFiltersDesktop(e);
2330      }
2331    })
2332  } catch (error) {
2333    console.log(error);
2334
2335  }
2336
2337  try {
2338    $($productFilter).each(function(i, e) {
2339      if (windowWidth < LG_BP) {
2340        productFilter.changeColMobile(e, cardList);
2341      }
2342    })
2343  } catch (error) {
2344    console.log(error);
2345  }
2346
2347})
2348
2349
2350//********************** Product List
2351
2352var productList = {
2353  cardHeight: function($cardList) {
2354    var $card = $($cardList).find('.product-card');
2355    $($cardList).find('.product-card__wrapper .title-producto').matchHeight();
2356    $($cardList).find('.product-card__wrapper .colors').matchHeight();
2357    $($cardList).find('.product-card__wrapper .collection-options').matchHeight();
2358    $($cardList).find('.product-card__wrapper .dades').matchHeight();
2359    $($cardList).find('.product-card__wrapper .prices').matchHeight();
2360    $($cardList).find('.product-card__wrapper .images-slider .slick-list').matchHeight({
2361      target: $($cardList).find('.product-card__wrapper .wrapper-img')
2362    });
2363  },
2364  orderMoveMobile: function(jsOrderMobile) {
2365    var orderDetached = $('.order-selector__wrapper').detach();
2366    var $dest = $(jsOrderMobile);
2367    $(orderDetached).appendTo($dest);
2368  },
2369  orderMoveDesktop: function(jsOrderDesktop) {
2370    var orderDetached = $('.order-selector__wrapper').detach();
2371    var base = $(jsOrderDesktop);
2372    $(orderDetached).appendTo(base);
2373  }
2374}
2375
2376$(document).ready(function() {
2377  var cardList = $('.product-list'),
2378  jsOrderDesktop = $('.js-order-desktop'),
2379  jsOrderMobile = $('.js-order-mobile'),
2380
2381  windowWidth = $(window).outerWidth();
2382
2383  if (windowWidth < LG_BP) {
2384    try {
2385      productList.orderMoveMobile(jsOrderMobile);
2386    } catch (error) {
2387      console.log(error);
2388    }
2389  } else {
2390    try {
2391      productList.orderMoveDesktop(jsOrderDesktop);
2392    } catch (error) {
2393      console.log(error);
2394    }
2395  }
2396
2397
2398  try {
2399    if (windowWidth >= MD_BP) {
2400      $(cardList).each(function(ind, el) {
2401        productList.cardHeight(el);
2402      })
2403    }
2404  } catch (error) {
2405    console.log(error);
2406  }
2407})
2408$(window).resize(function() {
2409  var cardList = $('.product-list'),
2410  jsOrderDesktop = $('.js-order-desktop'),
2411  jsOrderMobile = $('.js-order-mobile'),
2412
2413  windowWidth = $(window).outerWidth();
2414
2415  if (windowWidth < LG_BP) {
2416    try {
2417      productList.orderMoveMobile(jsOrderMobile);
2418    } catch (error) {
2419      console.log(error);
2420    }
2421  } else {
2422    try {
2423      productList.orderMoveDesktop(jsOrderDesktop);
2424    } catch (error) {
2425      console.log(error);
2426    }
2427  }
2428
2429  try {
2430    if (windowWidth >= MD_BP) {
2431      $(cardList).each(function(ind, el) {
2432        productList.cardHeight(el);
2433      })
2434    }
2435  } catch (error) {
2436    console.log(error);
2437  }
2438})
2439
2440
2441//********************** Lightbox
2442
2443var lightbox = {
2444  modalBasic: function(lightbox, lightboxModal) {
2445    var $lightbox = $(lightbox);
2446
2447    var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]');
2448
2449
2450    // trigger menu collapse
2451    $trigger.click(function() {
2452      commons.closeRModals('.r-modal');
2453
2454      var theModal = $(this).data("target");
2455
2456      $(theModal).detach().appendTo('body');
2457      $(theModal).on('shown.bs.modal', function(e) {
2458        // console.log(theModal);
2459
2460      })
2461      $(theModal).on('hidden.bs.modal', function(e) {
2462        $(theModal).detach().appendTo(lightbox);
2463      })
2464      $(theModal).find('.js-close').click(function() {
2465        $(this).closest('.modal').modal("hide");
2466
2467      });
2468    });
2469
2470  },
2471  modalVideo: function(lightbox, lightboxModal) {
2472    var $lightbox = $(lightbox);
2473
2474    var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]');
2475
2476
2477    // trigger menu collapse
2478    $trigger.click(function() {
2479      commons.closeRModals('.r-modal');
2480
2481      var theModal = $(this).data("target"),
2482      videoSRC = $(this).attr("data-theVideo"),
2483      videoSRCauto = videoSRC + "?rel=0&autoplay=1";
2484
2485      if (!typeof videoSRC === "undefined") {
2486        $(theModal + ' iframe').attr('src', videoSRCauto).attr('allow', 'autoplay');
2487      }
2488      $(theModal).detach().appendTo('body');
2489
2490
2491
2492
2493      $(theModal).on('hidden.bs.modal', function(e) {
2494        // console.log('theModal1',theModal);
2495        $(theModal + ' iframe').attr('src', videoSRC);
2496        $(theModal).detach().appendTo(lightbox);
2497      })
2498      $(theModal).find('.js-close').click(function() {
2499
2500        $(this).closest('.modal').modal("hide");
2501
2502
2503      });
2504    });
2505
2506
2507  },
2508  modalNewVideo: function (lightbox, lightboxModal) {
2509
2510    $(".js-slider-cabecera .new-modal-video").click(function(){
2511      $('.slider-cabecera').slick('slickPause');
2512      commons.closeRModals('.r-modal');
2513      var theModal = $(this).data("target"),
2514      videoSRC = $(this).attr("data-theVideo"),
2515      videoSRCauto = videoSRC + "?rel=0&autoplay=1";
2516      $(theModal + ' iframe').attr('src', videoSRCauto).attr('allow', 'autoplay');
2517
2518
2519      $(theModal).on('hidden.bs.modal', function (e) {
2520        console.log("click a");
2521        $(theModal + ' iframe').removeAttr('src');
2522        $(theModal).find('.js-close').click();
2523        $('.slider-cabecera').slick('slickPlay');
2524        $('.slider-cabecera').blur();
2525      });
2526      $(theModal).find('.js-close').click(function () {
2527        $(this).closest('.modal').modal("hide");
2528      });
2529
2530    });
2531
2532
2533
2534  },
2535  modalSlider: function(lightbox, lightboxModal) {
2536    var $lightbox = $(lightbox);
2537
2538    var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]');
2539
2540    // trigger menu collapse
2541    $trigger.click(function() {
2542
2543
2544      commons.closeRModals('.r-modal');
2545      var theModal = $(this).data("target"),
2546      videoSRC = $(this).attr("data-theVideo"),
2547      videoSRCauto = videoSRC + "?rel=0&autoplay=1";
2548      $(theModal + ' iframe').attr('src', videoSRCauto).attr('allow', 'autoplay');
2549      $(lightboxModal).detach().appendTo('body');
2550
2551
2552      $(theModal).on('hidden.bs.modal', function(e) {
2553        $(theModal + ' iframe').attr('src', videoSRC);
2554        $(lightboxModal).detach().appendTo(lightbox);
2555      })
2556      $(lightboxModal).find('.js-close').click(function() {
2557        $(this).closest('.modal').modal("hide");
2558
2559      });
2560    });
2561
2562
2563  },
2564  modalSlick: function(lightbox, lightboxModal) {
2565    var $lightbox = $(lightbox);
2566
2567    var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]');
2568
2569
2570    // trigger menu collapse
2571    $trigger.click(function() {
2572      commons.closeRModals('.r-modal');
2573
2574      var theModal = $(this).data("target");
2575
2576      $(theModal).detach().appendTo('body');
2577      $(theModal).on('shown.bs.modal', function(e) {
2578        $(theModal).find('.slider')[0].slick.refresh();
2579        // console.log(theModal);
2580
2581      })
2582      $(theModal).on('hidden.bs.modal', function(e) {
2583        $(theModal).detach().appendTo(lightbox);
2584      })
2585      $(theModal).find('.js-close').click(function() {
2586        $(this).closest('.modal').modal("hide");
2587
2588      });
2589    });
2590
2591  },
2592  modalFilter: function(lightbox, lightboxModal) {
2593    var $lightbox = $(lightbox);
2594
2595    var $trigger = $($lightbox).closest('.has-modal').find('[data-toggle="modal"]');
2596
2597
2598    // trigger menu collapse
2599    $trigger.click(function() {
2600      commons.closeRModals('.r-modal');
2601
2602      var theModal = $(this).data("target");
2603
2604      $(theModal).detach().appendTo('body');
2605      $(theModal).on('shown.bs.modal', function(e) {
2606        // console.log(theModal);
2607
2608      })
2609      $(theModal).on('hidden.bs.modal', function(e) {
2610        $(theModal).detach().appendTo(lightbox);
2611      })
2612      $(theModal).find('.js-close').click(function() {
2613        var $modal = $(this).closest('.modal');
2614        $($modal).modal("hide");
2615
2616      });
2617    });
2618
2619  }
2620}
2621
2622$(document).ready(function() {
2623  var $lightboxBasic = $('.lightbox-basic-wrapper');
2624  var $lightboxSlider = $('.slick-slider').find('.lightbox-wrapper');
2625  var $lightbox = $('.lightbox-wrapper');
2626  var $lightboxSlicker = $('.lightbox-slick-wrapper');
2627  var $lightboxFilter = $('.lightbox-filter-wrapper');
2628  var $lightboxNewVideo = $('.lightbox-wrapper-video');
2629
2630  if ($lightboxBasic.length > 0) {
2631    try {
2632      $lightboxBasic.each(function(i, e) {
2633        var $lightboxModal = $(e).find('.modal');
2634        lightbox.modalBasic(e, $lightboxModal);
2635      })
2636    } catch (error) {
2637      console.log('Try to set home lightbox got ' + error);
2638    }
2639  }
2640  if ($lightboxSlider.length > 0) {
2641    try {
2642      $lightboxSlider.each(function(i, e) {
2643        var $lightboxModal = $(e).find('.modal');
2644        lightbox.modalSlider(e, $lightboxModal);
2645      })
2646    } catch (error) {
2647      console.log('Try to set home lightbox got ' + error);
2648    }
2649  }
2650
2651  try {
2652    $lightbox.each(function(i, e) {
2653      var $lightboxModal = $(e).find('.modal');
2654      lightbox.modalVideo(e, $lightboxModal);
2655    })
2656  } catch (error) {
2657    console.log('Try to set home lightbox got ' + error);
2658  }
2659
2660
2661  try {
2662    $lightboxNewVideo.each(function (i, e) {
2663      var $lightboxModal = $(e).find('.modal');
2664      lightbox.modalNewVideo(e, $lightboxModal);
2665    });
2666  } catch (error) {
2667    console.log('Try to set home lightbox new video got ' + error);
2668  }
2669
2670  try {
2671    $lightboxSlicker.each(function(i, e) {
2672      var $lightboxModal = $(e).find('.modal');
2673      lightbox.modalSlick(e, $lightboxModal);
2674    })
2675  } catch (error) {
2676    console.log('Try to set slick modal got ' + error);
2677  }
2678  try {
2679    $lightboxFilter.each(function(i, e) {
2680      var $lightboxModal = $(e).find('.modal');
2681      lightbox.modalFilter(e, $lightboxModal);
2682    })
2683  } catch (error) {
2684    console.log('Try to set slick modal got ' + error);
2685  }
2686
2687})
2688
2689
2690
2691
2692
2693//********************** Filters
2694
2695var filters = {
2696  sliderRangeInit: function($slider) {
2697    var data = filters.sliderRangeData($slider);
2698
2699    $($slider).find('.slider').slider({
2700      range: true,
2701      min: 0,
2702      max: data.array.length - 1,
2703      values: data.array,
2704      step: 1,
2705      animate: true,
2706      orientation: "horizontal",
2707      slide: function(event, ui) {
2708        $($slider).find('.min-input').val(ui.values[0]);
2709        $($slider).find('.max-input').val(ui.values[1]);
2710        $($slider).find('.min-range-d').html(data.array[ui.values[0]]);
2711        $($slider).find('.max-range-d').html(data.array[ui.values[1]]);
2712      }
2713
2714    });
2715
2716    $($slider).find('.min-range-d').html(data.values[0]);
2717    $($slider).find('.max-range-d').html(data.values[1]);
2718    $($slider).find('.min-range-text').html(data.min);
2719    $($slider).find('.max-range-text').html(data.max);
2720    $($slider).find('.slider').slider("option", "values", [data.array.indexOf(data.values[0]), data.array.indexOf(data.values[1])]);
2721
2722
2723  },
2724  sliderRangeData: function($slider) {
2725    var sliderData = {};
2726    sliderData.min = $($slider).find('.slider').data('min');
2727    sliderData.max = $($slider).find('.slider').data('max');
2728    sliderData.values = $($slider).find('.slider').data('values');
2729    sliderData.array = $($slider).find('.slider').data('array');
2730    $($slider).find('.slider').slider();
2731    return sliderData;
2732  },
2733  imageCheck: function($imageCheck) {
2734
2735    if ($($imageCheck).find('.custom-control-input').is(':checked')) {
2736      $($imageCheck).addClass('active');
2737    } else {
2738      $($imageCheck).removeClass('active');
2739    }
2740
2741    $($imageCheck).find('.custom-control-input').change(function() {
2742      if ($(this).is(':checked')) {
2743        $($imageCheck).addClass('active');
2744      } else {
2745        $($imageCheck).removeClass('active');
2746      }
2747    })
2748
2749  },
2750  numberCheck: function($numberCheck) {
2751
2752    if ($($numberCheck).find('.custom-control-input').is(':checked')) {
2753      $($numberCheck).addClass('active');
2754    } else {
2755      $($numberCheck).removeClass('active');
2756    }
2757
2758    $($numberCheck).find('.custom-control-input').change(function() {
2759      if ($(this).is(':checked')) {
2760        $($numberCheck).addClass('active');
2761      } else {
2762        $($numberCheck).removeClass('active');
2763      }
2764    })
2765
2766  },
2767  categoryCheck: function($categoryCheck) {
2768
2769    if ($($categoryCheck).find('.custom-control-input').is(':checked')) {
2770      $($categoryCheck).addClass('active');
2771    } else {
2772      $($categoryCheck).removeClass('active');
2773    }
2774
2775    $($categoryCheck).find('.custom-control-input').change(function() {
2776      if ($(this).is(':checked')) {
2777        $($categoryCheck).addClass('active');
2778      } else {
2779        $($categoryCheck).removeClass('active');
2780      }
2781    })
2782
2783  },
2784
2785}
2786
2787$(document).ready(function() {
2788  var $slider = $('.slider-range'),
2789  $categoryCheck = $('.category-check'),
2790  $numberCheck = $('.number-check');
2791
2792  try {
2793    if (typeof $slider !== "undefined") {
2794      $($slider).each(function() {
2795        filters.sliderRangeInit(this);
2796      });
2797    }
2798
2799  } catch (error) {
2800    console.log('Try to set SLider range got ' + error);
2801  }
2802
2803
2804
2805  try {
2806    if ($categoryCheck.length > 0) {
2807      $($categoryCheck).each(function() {
2808        filters.categoryCheck(this);
2809      });
2810    }
2811
2812  } catch (error) {
2813    console.log('Try to set category-check and got ' + error);
2814  }
2815
2816  try {
2817    if ($numberCheck.length > 0) {
2818      $($numberCheck).each(function() {
2819        filters.numberCheck(this);
2820      });
2821    }
2822
2823  } catch (error) {
2824    console.log('Try to set number-check and got ' + error);
2825  }
2826
2827
2828})
2829
2830// caracteristicas producto texto - abrir y cerrar caja en responsive
2831
2832$("#mostrar-texto").on("click", function() {
2833  $('#target-texto').show();
2834  $('#mostrar-texto').hide();
2835});
2836$("#ocultar-texto").on("click", function() {
2837  $('#target-texto').hide();
2838  $('#mostrar-texto').show();
2839});
2840
2841// caracteristicas icono producto - abrir y cerrar caja en responsive
2842
2843
2844$("#mostrar").on("click", function() {
2845  $('#target').show();
2846  $('#mostrar').hide();
2847});
2848$("#ocultar").on("click", function() {
2849  $('#target').hide();
2850  $('#mostrar').show();
2851});
2852
2853// load more del img distributor
2854
2855$(function() {
2856  $("#imgdist-show-more").on('click', function(e) {
2857    e.preventDefault();
2858    $(".image-wrapper:hidden").slice(0, 11).fadeIn();
2859    if ($(".image-wrapper:hidden").length == 0) {
2860      $("#imgdist-show-more").fadeOut('slow');
2861    }
2862  });
2863});
2864
2865// popover
2866$(document).ready(function() {
2867  $('[data-toggle="popover"]').popover();
2868});
2869$(document).ready(function() {
2870  $('body').on('click', function(e) {
2871    $('[data-toggle=popover]').each(function() {
2872      // hide any open popovers when the anywhere else in the body is clicked
2873      if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
2874        $(this).popover('hide');
2875      }
2876    });
2877  });
2878});
2879
2880$(document).ready(function() {
2881  $('.manualinputlabel').click(function(e) {
2882    e.preventDefault();
2883    $(this).popover();
2884  });
2885
2886  $(document).click(function(e) {
2887    if (e.target.id == "popovercloseid") {
2888      $('.manualinputlabel').popover('hide');
2889    }
2890
2891  });
2892});
2893
2894//********************** dropdown product navigation
2895
2896$(document).ready(function() {
2897  $('.dropdown-toggle').dropdown();
2898});
2899
2900
2901/*Produc Detail ceramics calculadora*/
2902$(document).ready(function() {
2903
2904    /* Cambiar comportamiento de bootstrap collapse card-title */
2905    $('.accordion').on('shown.bs.collapse', function (e) {
2906        var $panel = $(e.target);
2907        var $heading = $panel.prev('.card-header');
2908        
2909        if ($heading.length > 0) {
2910            
2911            setTimeout(function() {
2912                var offsetTop = 0;
2913                
2914                var $header = $('.js-header');
2915                if ($header.length && $header.is(':visible')) {
2916                    offsetTop += $header.outerHeight();
2917                }
2918                
2919                var $promo = $('.promoSubmenu');
2920                if ($promo.length && $promo.is(':visible')) {
2921                    offsetTop += $promo.outerHeight();
2922                }
2923                
2924                var $menuAnclas = $('.menu-anclas');
2925                if ($menuAnclas.length && $menuAnclas.is(':visible')) {
2926                    offsetTop += $menuAnclas.outerHeight();
2927                }
2928
2929                offsetTop += 20;
2930
2931                $('html, body').animate({
2932                    scrollTop: $heading.offset().top - offsetTop
2933                }, 400); 
2934
2935            }, 200); 
2936        }
2937    });
2938
2939  var $product = $('.wrapper-producto');
2940  var windowWidth = $(window).outerWidth();
2941  var device = 'desktop';
2942  if (windowWidth < 768) {
2943    device = 'mobile';
2944  }
2945  // var value = $(".js-calculadora input").val();
2946  function resultado(cajas) {
2947    var precioCajas = parseFloat($(".js-precio-value span").text().split(",")[0] + "." + $(".js-precio-value span").text().split(",")[1]);
2948    var precio = cajas * precioCajas;
2949    var valor = precio.toString().split(".");
2950    var precioEntero = valor[0];
2951    var precioDecimal = valor[1].substr(0, 2);
2952    $(".js-resultado .price").html(precioEntero + "<sub>," + precioDecimal + " " + document.currencySymbol + "</sub");
2953  }
2954
2955  function numCajas(superficie) {
2956    var superficieCajas = parseFloat($(".js-superficie-value span").text().split(",")[0] + "." + $(".js-superficie-value span").text().split(",")[1]);
2957    var cajas = Math.ceil(superficie / superficieCajas);
2958    $(".js-calculadora input").val(cajas);
2959    resultado(cajas);
2960  }
2961
2962  function superficie(cajas) {
2963    var superficieCajas = parseFloat($(".js-superficie-value span").text().split(",")[0] + "." + $(".js-superficie-value span").text().split(",")[1]);
2964    var metros = parseInt(cajas * superficieCajas);
2965    $(".js-superficie input").val(metros);
2966
2967  }
2968  //Introduzco valor en input numero cajas
2969  $(".js-calculadora input").keyup(function() {
2970    this.value = (this.value + '').replace(/[^0-9]/g, '');
2971    resultado(this.value);
2972    superficie(this.value);
2973  });
2974  //Resto cajas
2975  $(".js-calculadora .less a").click(function(e) {
2976    e.preventDefault();
2977    var value = $(".js-calculadora input").val();
2978    $(".js-calculadora input").val(parseInt(value) - 1);
2979    resultado(parseInt(value) - 1);
2980    superficie(parseInt(value) - 1);
2981  });
2982  //Sumo cajas
2983  $(".js-calculadora .more a").click(function(e) {
2984    e.preventDefault();
2985    var value = $(".js-calculadora input").val();
2986    $(".js-calculadora input").val(parseInt(value) + 1);
2987    resultado(parseInt(value) + 1);
2988    superficie(parseInt(value) + 1);
2989  });
2990  //Introduzco valor en input superficie
2991  $(".js-superficie input").keyup(function() {
2992    this.value = (this.value + '').replace(/[^0-9]/g, '');
2993    numCajas(this.value);
2994  });
2995  if ($('.capa-completa').length > 0) {
2996    $('.capa-scroll').niceScroll({
2997      cursorcolor: "#9a9a9a",
2998      cursorwidth: "3px",
2999      cursorborder: "none",
3000      background: "#d5d5d5",
3001      cursorborderradius: 0,
3002      autohidemode: false,
3003      cursorminheight: 60
3004    });
3005  }
3006  if ($('.accordion').length > 0) {
3007    $('.accordion li li a').click(function() {
3008      if (!$(this).hasClass("active")) {
3009        $('.accordion li li a.active').removeClass("active");
3010      }
3011      $('.no-collapse').removeClass("active");
3012      $(this).closest('.subcategory').siblings('a').addClass("collapsed");
3013      $(this).toggleClass("active");
3014    });
3015    $('.accordion > li > a').click(function() {
3016      $('.no-collapse').removeClass("active");
3017      $(this).closest('.subcategory').siblings('a').addClass("collapsed");
3018      $('.accordion li li a.active').removeClass("active");
3019    });
3020    $('.no-collapse li a').click(function() {
3021
3022      $(this).closest('.no-collapse').siblings('a').addClass("active");
3023    });
3024    $(".js-collapse-mobile-open").click(function() {
3025
3026      $(".js-collapse-mobile").toggleClass("active");
3027      $("body").toggleClass("noScroll");
3028    });
3029    $(".js-collapse-mobile-close").click(function() {
3030      $(".js-collapse-mobile").toggleClass("active");
3031      $("body").toggleClass("noScroll");
3032
3033    });
3034
3035  }
3036
3037  // FAQ Accordion
3038  $(document).ready(function() {
3039    var windowWidth = $(window).outerWidth();
3040    var faqItemTrigger = $('.faq-item__trigger');
3041    var faqItem = $('.faq-item');
3042    var faqList = $('.faq-list');
3043
3044    // Check if FAQ Accordion exist
3045    if (faqList.length > 0) {
3046      // check if window is less than 992px
3047      if (windowWidth < 992) {
3048        // on FAQ trigger click
3049        faqItemTrigger.on('click', function() {
3050
3051          if ($(this).parent().hasClass('is-visible')) {
3052            $(this).parent().removeClass('is-visible');
3053          } else {
3054            $('.faq-item').removeClass('is-visible');
3055            $(this).parent().addClass('is-visible');
3056          }
3057        });
3058      }
3059    }
3060
3061  });
3062
3063
3064  $(window).resize(function() {
3065    $('.capa-scroll').getNiceScroll().resize();
3066  });
3067  try {
3068    if ($('.js-slider-producto-5').length > 0) {
3069
3070      $('.js-slider-producto-5').on('init', function(event, slick) {
3071        product.applyMatchHeight($product);
3072        product.selectColor($product, device);
3073      });
3074      $('.js-slider-producto-5').on('reInit', function(event, slick) {
3075        product.applyMatchHeight($product);
3076        product.selectColor($product, device);
3077      });
3078
3079      $('.js-slider-producto-5').not('.slick-initialized').slick({
3080        dots: true,
3081        arrow: false,
3082        slidesToShow: 5,
3083        infinite: false,
3084        speed: 300,
3085        responsive: [{
3086          breakpoint: 1919,
3087          settings: {
3088            dots: true,
3089            slidesToShow: 5
3090          }
3091        },
3092          {
3093            breakpoint: 991,
3094            settings: {
3095              dots: false,
3096              slidesToShow: 2
3097            }
3098          },
3099          {
3100            breakpoint: 767,
3101            settings: {
3102              dots: false,
3103              slidesToShow: 2
3104            }
3105          }
3106        ]
3107      });
3108
3109    };
3110
3111
3112
3113  } catch (error) {
3114    console.log('Try set slider product got ' + error);
3115  }
3116});
3117
3118
3119///product filter fav message disappear
3120// $(document).ready(function() {
3121//   var timeoutOverProduct = setTimeout(function() {
3122//     $(".over-product").fadeOut(1500);
3123//   }, 3000)
3124//   $('.btnReset').each(function(){
3125//     $(this).click(function() {
3126//       $(".over-product").stop().fadeOut();
3127//       $(".over-product").fadeIn(300);
3128//       timeoutOverProduct = clearTimeout(timeoutOverProduct);
3129//         timeoutOverProduct = setTimeout(function() {
3130//           $(".over-product").fadeOut(1500);
3131//         }, 3000)
3132//     });
3133
3134//   })
3135// });
3136
3137/* Nice scroll para columna en puntos de venta */
3138$(document).ready(function() {
3139
3140  /* FUNCIÓN QUE PERMITE IDENTIFICAR QUE HA CAMBIADO EL ALTO DE UN ELEMENTO, lo utilizamos para reiniciar el NiceScroll cuando cambia el alto */
3141  function onElementHeightChange(elm, callback) {
3142    var lastHeight = elm.clientHeight,
3143    newHeight;
3144    (function run() {
3145      newHeight = elm.clientHeight;
3146      if (lastHeight != newHeight)
3147      callback();
3148      lastHeight = newHeight;
3149
3150      if (elm.onElementHeightChangeTimer)
3151      clearTimeout(elm.onElementHeightChangeTimer);
3152
3153      elm.onElementHeightChangeTimer = setTimeout(run, 200);
3154    })();
3155  }
3156
3157  if ($('.sales-filters').length > 0) {
3158    if ($(window).outerWidth() > 991) {
3159      $('.column-height').niceScroll({
3160        cursorcolor: "#9a9a9a",
3161        cursorwidth: "5px",
3162        cursorborder: "none",
3163        background: "#f7f7f7",
3164        railpadding: { top: 0, left: 6, bottom: 0, right: 3 },
3165        cursorborderradius: 0,
3166        autohidemode: false
3167      });
3168      $('.filters-acordeon').on('shown.bs.collapse hidden.bs.collapse', function(e) {
3169        $(this).parent().parent().getNiceScroll().resize();
3170      });
3171    }
3172
3173    $(window).resize(function() {
3174      if ($(window).outerWidth() > 991) {
3175        $('.column-height').niceScroll({
3176          cursorcolor: "#9a9a9a",
3177          cursorwidth: "5px",
3178          cursorborder: "none",
3179          background: "#f7f7f7",
3180          railpadding: { top: 0, left: 6, bottom: 0, right: 3 },
3181          cursorborderradius: 0,
3182          autohidemode: false
3183        });
3184        $('.filters-acordeon').on('shown.bs.collapse hidden.bs.collapse', function(e) {
3185          $(this).parent().parent().niceScroll().resize();
3186        });
3187      } else {
3188
3189        $('.column-height').niceScroll().remove();
3190      }
3191    })
3192
3193  }
3194
3195  onElementHeightChange(document.body, function() {
3196    if ($(window).outerWidth() > 991) {
3197      $('.filters-acordeon').parent().parent().niceScroll().resize();
3198    }
3199  });
3200
3201});
3202
3203// Sales filter / Puntos de venta Mobile
3204$(window).on('load',function(){
3205  var windowWidth = $(window).outerWidth();
3206
3207  if ($('.sales-filters').length > 0) {
3208    function searchMobile() {
3209      if ($('.sales-filters__map-search').find('button').length > 0) {
3210        $('.sales-filters__map-search').find('button').appendTo('.sales-filters__search');
3211      }
3212      if ($('.sales-filters__map-search').find('label').length > 0) {
3213        $('.sales-filters__map-search').find('label').appendTo('.sales-filters__search');
3214      }
3215    }
3216
3217    function searchDesktop() {
3218      if ($('.sales-filters__search').find('button').length > 0) {
3219        $('.sales-filters__search').find('label').appendTo('.sales-filters__map-search');
3220      }
3221      if ($('.sales-filters__search').find('button').length > 0) {
3222        $('.sales-filters__search').find('button').appendTo('.sales-filters__map-search');
3223      }
3224    }
3225
3226    function mapMobile() {
3227      if ($('.sales-filters__map').find('.loader').length > 0) {
3228        $('.sales-filters__map').find('.loader').appendTo('.sales-filters-list__map');
3229      }
3230      if ($('.sales-filters__map').find('#map').length > 0) {
3231        $('.sales-filters__map').find('#map').appendTo('.sales-filters-list__map');
3232      }
3233    }
3234
3235    function mapDesktop() {
3236      if ($('.sales-filters-list__map').find('.loader').length > 0) {
3237        $('.sales-filters-list__map').find('.loader').appendTo('.sales-filters__map');
3238      }
3239      if ($('.sales-filters-list__map').find('#map').length > 0) {
3240        $('.sales-filters-list__map').find('#map').appendTo('.sales-filters__map');
3241      }
3242    }
3243
3244
3245    if ($('.sales-filters__search').length == 0) {
3246      $('.sales-filters__text').after('<div class="sales-filters__search d-block d-lg-none"></div>');
3247    }
3248    if ($('.sales-filters-list__map').length == 0) {
3249      $('.sales-filters__nosearch').after('<div class="sales-filters-list__map d-block d-lg-none"></div>');
3250    }
3251    if (windowWidth < 992) {
3252      searchMobile();
3253      mapMobile();
3254    }
3255
3256    $(window).resize(function() {
3257      var windowWidth = $(window).outerWidth();
3258      if (windowWidth < 992) {
3259        searchMobile();
3260        mapMobile();
3261      } else {
3262        mapDesktop();
3263        searchDesktop();
3264      }
3265    })
3266  }
3267
3268
3269})
3270
3271
3272
3273//************************ User Area */
3274
3275var userNav = {
3276  setHeight: function($document, header, userAreaNav) {
3277    var height = ($($document).height() - $(header).height());
3278    $(userAreaNav).find('.user-area-nav__wrapper').height(height);
3279    var footer = $(userAreaNav).closest('body').find('footer')
3280    if (!$(footer).hasClass('isUserNav')) {
3281      $(footer).addClass('isUserNav')
3282    }
3283  }
3284}
3285
3286$(document).ready(function() {
3287
3288  var $document = $(document),
3289  header = $('header'),
3290  userAreaNav = $('.user-area-nav');
3291  try {
3292    $(userAreaNav).each(function(i, e) {
3293      var isEditable = $(e).closest('.portlet-content-editable').length
3294      if (isEditable == 0) {
3295        userNav.setHeight($document, header, e);
3296      }
3297    })
3298  } catch (error) {
3299    console.log(error);
3300
3301  }
3302
3303  $(window).resize(function() {
3304    try {
3305      $(userAreaNav).each(function(i, e) {
3306        var isEditable = $(e).closest('.portlet-content-editable').length
3307        if (isEditable == 0) {
3308          userNav.setHeight($document, header, e);
3309        }
3310      })
3311    } catch (error) {
3312      console.log(error);
3313
3314    }
3315  })
3316
3317})
3318
3319
3320// Comparador
3321var comparador = {
3322  scroll: function($comparador, scrollPosition) {
3323    var scrollAnchor = $($comparador).find('.scroll-slider').offset().top;
3324
3325    if (scrollAnchor < scrollPosition) {
3326      $($comparador).find('.scroll-slider').addClass('active');
3327    } else {
3328      $($comparador).find('.scroll-slider').removeClass('active');
3329
3330    }
3331
3332  },
3333  filterSlideInit: function(filter, slideComparador, slideResume) {
3334    var cat = $(filter).find('.nav-link.active').attr('data-category');
3335
3336    if (cat !== 'all') {
3337      $(slideComparador).slick('slickUnfilter');
3338      $(slideResume).slick('slickUnfilter');
3339
3340      $(slideComparador).find('.col').each(function() {
3341        $(this).removeClass('slide-shown');
3342      });
3343      $(slideResume).find('.col').each(function() {
3344        $(this).removeClass('slide-shown');
3345      });
3346
3347      // Attribute value must be quoted: category codes can start with a digit
3348      // or contain hyphens (e.g. "003-02"), which is not a valid unquoted
3349      // CSS identifier and silently matches nothing.
3350      $(slideComparador).find('.col[data-match="' + cat + '"]').addClass('slide-shown');
3351      $(slideResume).find('.col[data-match="' + cat + '"]').addClass('slide-shown');
3352
3353      $(slideComparador).slick('slickFilter', '.slide-shown');
3354      $(slideResume).slick('slickFilter', '.slide-shown');
3355    }
3356  },
3357  filterSlide: function(filter, slideComparador, slideResume) {
3358    //------- Click to filter slides according to user's choice
3359
3360    $(filter).find('.nav-link').click(function() {
3361
3362      var cat = $(this).attr('data-category');
3363
3364
3365      if (cat !== 'all') {
3366        $(slideComparador).slick('slickUnfilter');
3367        $(slideResume).slick('slickUnfilter');
3368
3369        $(slideComparador).find('.col').each(function() {
3370          $(this).removeClass('slide-shown');
3371        });
3372        $(slideResume).find('.col').each(function() {
3373          $(this).removeClass('slide-shown');
3374        });
3375
3376        // Attribute value must be quoted (see comment in filterSlideInit).
3377        $(slideComparador).find('.col[data-match="' + cat + '"]').addClass('slide-shown');
3378        $(slideResume).find('.col[data-match="' + cat + '"]').addClass('slide-shown');
3379
3380
3381        $(slideComparador).slick('slickFilter', '.slide-shown');
3382        $(slideResume).slick('slickFilter', '.slide-shown');
3383      } else {
3384        $(slideComparador).find('.col').each(function() {
3385          $(this).addClass('slide-shown');
3386        });
3387        $(slideComparador).slick('slickUnfilter');
3388
3389        $(slideResume).find('.col').each(function() {
3390          $(this).addClass('slide-shown');
3391        });
3392        $(slideResume).slick('slickUnfilter');
3393      }
3394    })
3395
3396
3397  }
3398}
3399
3400$(document).ready(function() {
3401  var $resume = $('.resume-product');
3402  var $product = $('.wrapper-producto');
3403
3404  var $tabsAgrupador = $('#tabs-agrupador');
3405
3406  var $sliderComparador = $('.js-slider-producto-comparador');
3407  var $sliderResume = $('.js-slider-resume-comparador');
3408  $(window).scroll(function() {
3409    var scrollP = $(window).scrollTop()
3410    try {
3411      $('.comparador').each(function(i, e) {
3412        comparador.scroll(e, scrollP);
3413      })
3414    } catch (error) {
3415      console.log(error);
3416    }
3417
3418  })
3419
3420  try {
3421    if ($('.js-slider-resume-comparador').length > 0) {
3422
3423      var sliderProductCols = $('.js-slider-resume-comparador').data('col');
3424      if ($(window).outerWidth() < 992 && $(window).outerWidth() > 767) {
3425        sliderProductCols = 2;
3426      } else if ($(window).outerWidth() < 768) {
3427        sliderProductCols = 1;
3428      }
3429      $('.js-slider-resume-comparador').on('init', function(event, slick) {
3430        product.applyMatchHeight($resume);
3431        // product.selectColor($product, device);
3432      });
3433      $('.js-slider-resume-comparador').on('reInit', function(event, slick) {
3434        product.applyMatchHeight($resume);
3435        // product.selectColor($product, device);
3436      });
3437      $('.js-slider-resume-comparador').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) {
3438        //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)
3439        $('.slider-resume').find('.hidden-items-counter').text('+' + (slick.slideCount - sliderProductCols));
3440        if ((slick.slideCount - sliderProductCols) <= 0) {
3441          $('.slider-resume').find('.hidden-items-counter').hide();
3442        } else {
3443          $('.slider-resume').find('.hidden-items-counter').show();
3444        }
3445      });
3446
3447
3448      $('.js-slider-resume-comparador').not('.slick-initialized').slick({
3449        dots: false,
3450        arrow: true,
3451        speed: 300,
3452        slidesToShow: sliderProductCols,
3453        asNavFor: '.js-slider-producto-comparador',
3454        infinite: false,
3455        prevArrow: $('.prev-resume'),
3456        nextArrow: $('.next-resume'),
3457        responsive: [{
3458          breakpoint: 1199,
3459          settings: {
3460            dots: false,
3461            slidesToShow: 3
3462          }
3463        },
3464          {
3465            breakpoint: 991,
3466            settings: {
3467              dots: false,
3468              slidesToShow: 2
3469            }
3470          },
3471          {
3472            breakpoint: 767,
3473            settings: {
3474              dots: false,
3475              slidesToShow: 1
3476            }
3477          }
3478        ]
3479      }).on('setPosition', function(event, slick) {
3480        slick.$slides.css('height', slick.$slideTrack.height() + 'px');
3481      });
3482
3483    };
3484
3485  } catch (error) {
3486    console.log('Try set slider resume got ' + error);
3487  }
3488
3489  try {
3490    if ($('.js-slider-producto-comparador').length > 0) {
3491      var sliderProductCols = $('.js-slider-producto-comparador').data('col');
3492      if ($(window).outerWidth() < 992 && $(window).outerWidth() > 767) {
3493        sliderProductCols = 2;
3494      } else if ($(window).outerWidth() < 768) {
3495        sliderProductCols = 1;
3496      }
3497
3498      $('.js-slider-producto-comparador').on('init', function(event, slick) {
3499        product.applyMatchHeight($product);
3500        // product.selectColor($product, device);
3501      });
3502      $('.js-slider-producto-comparador').on('reInit', function(event, slick) {
3503        product.applyMatchHeight($product);
3504        // product.selectColor($product, device);
3505      });
3506      $('.js-slider-producto-comparador').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) {
3507        //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)
3508        $('.slider-producto').find('.hidden-items-counter').text('+' + (slick.slideCount - sliderProductCols));
3509        if ((slick.slideCount - sliderProductCols) <= 0) {
3510          $('.slider-producto').find('.hidden-items-counter').hide();
3511        } else {
3512          $('.slider-producto').find('.hidden-items-counter').show();
3513        }
3514      });
3515
3516      $('.js-slider-producto-comparador').not('.slick-initialized').slick({
3517        dots: false,
3518        arrow: true,
3519        slidesToShow: sliderProductCols,
3520        speed: 300,
3521        asNavFor: '.js-slider-resume-comparador',
3522        infinite: false,
3523        prevArrow: $('.prev-product'),
3524        nextArrow: $('.next-product'),
3525        responsive: [{
3526          breakpoint: 1199,
3527          settings: {
3528            dots: false,
3529            slidesToShow: 3
3530          }
3531        },
3532          {
3533            breakpoint: 991,
3534            settings: {
3535              dots: false,
3536              slidesToShow: 2
3537            }
3538          },
3539          {
3540            breakpoint: 767,
3541            settings: {
3542              dots: false,
3543              slidesToShow: 1
3544            }
3545          }
3546        ]
3547      }).on('setPosition', function(event, slick) {
3548        slick.$slides.css('height', slick.$slideTrack.height() + 'px');
3549      });
3550
3551    };
3552
3553  } catch (error) {
3554    console.log('Try set slider product got ' + error);
3555  }
3556
3557  // Filter comparador init
3558  try {
3559    if ($($tabsAgrupador).length > 0) {
3560      comparador.filterSlideInit($tabsAgrupador, $sliderComparador, $sliderResume)
3561    }
3562  } catch (error) {
3563    console.log(error);
3564
3565  }
3566  // Filter comparador
3567  try {
3568    if ($($tabsAgrupador).length > 0) {
3569      comparador.filterSlide($tabsAgrupador, $sliderComparador, $sliderResume)
3570    }
3571  } catch (error) {
3572    console.log(error);
3573
3574  }
3575
3576
3577
3578})
3579
3580//************************ User Area */
3581
3582
3583// Product Favorite/Comparator added
3584
3585// fuera del click
3586var timeoutOverProduct = setTimeout(function() {
3587  $(".over-product").fadeOut(1500);
3588}, 4000);
3589
3590function displayNotification(imageUrl, notificationContent, notificationType, linkUrl, linkText) {
3591
3592  //If the notification is already present, we reset its contents
3593  if ($(".over-product").length) {
3594
3595    $('#notif-img').empty();
3596    if (imageUrl) {
3597      var imageEl = '<div class="img-wrapper"><img alt="" src="' + imageUrl + '"></div>';
3598      $('#notif-img').append(imageEl);
3599    }
3600
3601    $('#notif-content').empty();
3602    if (notificationContent) {
3603      $('#notif-content').append(notificationContent);
3604    }
3605
3606    $('#notif-type').empty();
3607    if (notificationType) {
3608      $('#notif-type').append(notificationType);
3609    }
3610
3611    $('#notif-url').empty();
3612    if (linkText) {
3613      if (linkUrl) {
3614        var url = '<a class="btn btn-tertiary" href="' + linkUrl + '">' + linkText + '</a>';
3615        $('#notif-url').append(url);
3616      } else {
3617        $('#notif-url').append(linkText);
3618      }
3619    }
3620
3621    //other wise, we build and show it
3622  } else {
3623
3624    var notification = '<section class="over-product" id="hidethis">' +
3625    '<div class="jumbotron"><div class="over-product__wrapper">' +
3626    '<div class="row"><div class="col-12 col-lg-6">' +
3627    '<div class="row"><div class="col-4"><div class="image" id="notif-img"></div></div>' +
3628    '<div class="col-8"><div class="wrapper-text" id="notif-content"></div></div></div></div>' +
3629    '<div class="col-12 col-lg-6">' +
3630    '<div class="row h-100 align-items-center">' +
3631    '<p class="btnReset addfav col-8 col-lg-6" id="notif-type"></p>' +
3632    '<p class="verfav col-4 col-lg-6" id="notif-url"></p>' +
3633    '</div></div></div></div></div></section>';
3634
3635    $('body').append(notification);
3636
3637    if (imageUrl) {
3638      var notificationImage = '<div class="img-wrapper"><img alt="" src="' + imageUrl + '"></div>';
3639      $('#notif-img').append(notificationImage);
3640    }
3641
3642    if (notificationContent) {
3643      $('#notif-content').append(notificationContent);
3644    }
3645
3646    if (notificationType) {
3647      $('#notif-type').append(notificationType);
3648    }
3649
3650    if (linkText) {
3651      if (linkUrl) {
3652        var notificationUrl = '<a class="btn btn-tertiary" href="' + linkUrl + '">' + linkText + '</a>';
3653        $('#notif-url').append(notificationUrl);
3654      } else {
3655        $('#notif-url').append(linkText);
3656      }
3657    }
3658  }
3659
3660  $(".over-product").stop().fadeOut();
3661  $(".over-product").fadeIn(300);
3662  timeoutOverProduct = clearTimeout(timeoutOverProduct);
3663  timeoutOverProduct = setTimeout(function() {
3664    $(".over-product").fadeOut(1500);
3665  }, 4000);
3666}
3667
3668//*********** HTML Base functions
3669
3670$(document).ready(function() {
3671  var $html = $('.html-base');
3672  var $htmlTable = $('.html-base').find('table');
3673  if (typeof $htmlTable !== "undefined") {
3674    $('.html-base').find('table').each(function() {
3675      var htmlClone = $(this).clone()
3676      $(this).wrap("<div class='table-responsive'></div>");
3677    })
3678  }
3679})
3680
3681//*********** Cookie functions
3682
3683
3684function setCookie(cname, cvalue, exdays) {
3685  var date = new Date();
3686  if (exdays > 0) {
3687    date.setTime(date.getTime() + (exdays * 24 * 60 * 60 * 1000));
3688  } else {
3689    date.setFullYear(date.getFullYear() + 1);
3690  }
3691  document.cookie = cname + "=" + cvalue + ";expires=" + date.toUTCString() + ";path=/";
3692}
3693
3694function getCookie(cname) {
3695  var name = cname + "=";
3696  var decodedCookie = decodeURIComponent(document.cookie);
3697  var ca = decodedCookie.split(';');
3698  for (var i = 0; i < ca.length; i++) {
3699    var c = ca[i];
3700    while (c.charAt(0) === ' ') {
3701      c = c.substring(1);
3702    }
3703    if (c.indexOf(name) === 0) {
3704      return c.substring(name.length, c.length);
3705    }
3706  }
3707  return "";
3708}
3709
3710$("document").ready(function() {
3711
3712  if (getCookie('cpolicy').length == 0) {
3713    $('.cookie-warn').toggleClass('active');
3714  }
3715
3716  $('.close-cookie').on('click', function(e) {
3717    e.preventDefault();
3718    $('.cookie-warn').hide();
3719    setCookie('cpolicy', 'true', 0);
3720  });
3721
3722  if (getCookie('apptop').length == 0) {
3723    if (/Android/i.test(navigator.userAgent)) {
3724      $('#phone-popup').toggleClass('active');
3725      $('#dl-app-url').attr('href', 'https://play.google.com/store/apps/details?id=net.roca.rocacatalog');
3726    } else if (/iPhone|iPad/i.test(navigator.userAgent)) {
3727      $('#phone-popup').toggleClass('active');
3728      $('#dl-app-url').attr('href', 'https://apps.apple.com/es/app/roca-product-catalogue/id579584692');
3729    }
3730  }
3731
3732  $('.popup-app').find('.js-close').click(function() {
3733    $(this).closest('.popup-app').removeClass('active');
3734    setCookie('apptop', 'true', 0);
3735  });
3736
3737  try {
3738    var promoHeight = $(".promoSubmenu").height();
3739    var userMenu = $(".user-menu-mobile").height();
3740    var subMenuBar = $(".menus-secundarios").height();
3741    var pestanas = $('.menu-pestanas').height();
3742
3743    $(window).scroll(function() {
3744      var scroll = $(window).scrollTop();
3745
3746      var limit = scroll + IOS_POSITION_ERROR_THRESHOLD;
3747
3748      if (promoHeight) {
3749        limit += promoHeight;
3750      } else {
3751        promoHeight = 0;
3752      }
3753      if (userMenu) {
3754        limit += userMenu;
3755      } else {
3756        userMenu = 0;
3757      }
3758      if (subMenuBar) {
3759        limit += subMenuBar;
3760      } else {
3761        subMenuBar = 0;
3762      }
3763      if (pestanas) {
3764        limit += pestanas;
3765      } else {
3766        pestanas = 0;
3767      }
3768
3769      if ($(".menu-anclas").length > 0) {
3770
3771        let $menuAnclas = $(".menu-anclas");
3772        let menuAnclasOffsetTop = $menuAnclas.offset().top;
3773        let menuAnclasDataOffsetTop = $menuAnclas.data("offsetTop")
3774
3775        if (menuAnclasDataOffsetTop === undefined){
3776          $menuAnclas.data("offsetTop", $menuAnclas.parent().offset().top);
3777        }
3778
3779        if (menuAnclasOffsetTop <= limit) {
3780          if (($menuAnclas.parent().hasClass("menu-fixed") || $menuAnclas.parent().hasClass("move-anclas-normal-mobile")) && limit >= menuAnclasDataOffsetTop) {
3781            cancelThrottle("menu-anclas");
3782            $menuAnclas.css("position", "fixed");
3783
3784            $menuAnclas.css("top",
3785              (userMenu && userMenu > 0) ? (promoHeight + userMenu) : promoHeight
3786            );
3787
3788            if ($menuAnclas.hasClass("product-menu-anclas")) {
3789              $menuAnclas.css("display", "block");
3790            }
3791          } else {
3792            $menuAnclas.css("position", "relative");
3793            $menuAnclas.css("top", 0);
3794
3795            if ($menuAnclas.hasClass("product-menu-anclas")) {
3796              $menuAnclas.css("display", "none");
3797            }
3798          }
3799        } else {
3800          throttleIfIOS("menu-anclas", () => {
3801            $menuAnclas.css("position", "relative");
3802            $menuAnclas.css("top", 0);
3803
3804            if ($menuAnclas.hasClass("product-menu-anclas")) {
3805              $menuAnclas.css("display", "none");
3806            }
3807          });
3808        }
3809
3810        var $menuWrapper = $("nav.main-menu-anclas__wrapper");
3811        updateScrollFade($menuWrapper);
3812      }
3813
3814      if ($(".menus-secundarios").length > 0) {
3815        if (
3816        $(".menus-secundarios").offset().top < limit &&
3817        $(".menus-secundarios").closest(".js-submenu").hasClass("menu-fixed")
3818        ) {
3819          cancelThrottle("menus-secundarios position");
3820          $(".menus-secundarios").css("position", "fixed");
3821          $(".menus-secundarios").css("top", promoHeight + userMenu);
3822        } else {
3823          throttleIfIOS("menus-secundarios position", () => {
3824            $(".menus-secundarios").css("position", "relative")
3825          });
3826        }
3827      }
3828
3829      // Sticky mobile filter menu
3830      if ($(".product-filter").length > 0 && $(window).outerWidth() < 993) {
3831        if ($(".product-filter").offset().top < limit &&
3832        $(".product-filter").closest(".row").hasClass("mobile-fixed"))
3833        {
3834          cancelThrottle("product-filter");
3835          $(".product-filter").css("position", "fixed")
3836          $(".product-filter").css("left", "0");
3837          $(".product-filter").css("z-index", "99");
3838          if ($("body").hasClass('has-control-menu')) {
3839            $(".product-filter").css("top", "56px");
3840          } else {
3841            $(".product-filter").css("top", "0");
3842          }
3843        } else {
3844          throttleIfIOS("product-filter", () => {
3845            $(".product-filter").css("position", "relative");
3846            $(".product-filter").css("top", "0");
3847            $(".product-filter").css("left", "0");
3848          });
3849        }
3850      }
3851
3852      if ($(".menu-pestanas").length > 0) {
3853        if ($(".menu-pestanas").offset().top < limit &&
3854        $(".menu-pestanas").closest(".js-submenu").hasClass("menu-fixed")
3855        ) {
3856          cancelThrottle("menu-pestanas");
3857          $(".menu-pestanas").css("position", "fixed");
3858          $(".menu-pestanas").css(
3859            "top", promoHeight + userMenu
3860          );
3861        } else {
3862          throttleIfIOS("menus-pestanas", () => {
3863            $(".menu-pestanas").css("position", "relative")
3864          });
3865        }
3866      }
3867
3868      //check for the user navigation bar
3869    });
3870
3871  } catch (error) {
3872    console.log(error);
3873  }
3874
3875});
3876
3877
3878
3879
3880/* FIN COOKIES */
3881
3882
3883
3884// ****************************** BEGIN SKU_DISTRIBUTOR
3885$(document).ready(function() {
3886  try {
3887    if ($(".js-slider-sku").length > 0) {
3888      $(".js-slider-sku").each(function(i, slider) {
3889        let sliderSkuCols = $(slider).data("col");
3890        if ($(window).outerWidth() > 767) {
3891          sliderSkuCols = 3;
3892        } else if ($(window).outerWidth() < 768) {
3893          sliderSkuCols = 1;
3894        }
3895
3896        $(slider)
3897          .slick({
3898          dots: true,
3899          arrow: false,
3900          slidesToShow: sliderSkuCols,
3901          infinite: false,
3902          speed: 300,
3903          touchThreshold: 10,
3904          centerMode: false,
3905          slidesToScroll: 2,
3906          responsive: [{
3907            breakpoint: 1199,
3908            settings: {
3909              dots: true,
3910              slidesToShow: 3,
3911            },
3912          },
3913            {
3914              breakpoint: 991,
3915              settings: {
3916                dots: true,
3917                slidesToShow: 2,
3918                slidesToScroll: 1,
3919              },
3920            },
3921            {
3922              breakpoint: 767,
3923              settings: "unslick",
3924            },
3925          ],
3926        })
3927          .on("setPosition", function(event, slick) {
3928          slick.$slides.css(
3929            "height",
3930            slick.$slideTrack.height() + "px"
3931          );
3932        });
3933      });
3934    }
3935  } catch (error) {
3936    console.log("Sku product: " + error);
3937  }
3938});
3939
3940//****************************** END SKU_DISTRIBUTOR
3941
3942
3943
3944// ****************************** DISTRIBUIDOR-BASICO IMÁGENES
3945$(document).ready(function () {
3946  $('#blog-detail .distribuidor-basico-img').each(function () {
3947    const $container = $(this);
3948    const bgImage = $container.css('background-image');
3949    const urlMatch = bgImage.match(/url\(["']?(.*?)["']?\)/);
3950
3951    if (!urlMatch) return;
3952
3953    const img = new Image();
3954    img.src = urlMatch[1];
3955
3956    img.onload = function () {
3957      const imgWidth = img.width;
3958      const imgHeight = img.height;
3959
3960      // Opcional: establecer el mismo aspect-ratio
3961      const aspectRatio = imgWidth / imgHeight;
3962      $container.css('aspect-ratio', aspectRatio);
3963      // Establecer el ancho de la imagen real (en píxeles)
3964
3965      if(100/aspectRatio < 100){
3966        $container.css('padding-bottom', 100/aspectRatio +'%');
3967      }else{
3968        $container.css('padding-bottom', 100 +'%');
3969      }
3970    };
3971  });
3972});
3973// ****************************** END DISTRIBUIDOR-BASICO IMÁGENES
3974
3975
3976//Comportamiento del Home Layout para desplegar el segundo contenedor
3977
3978if ($(".loader-wrapperUp").length) {
3979  let isWrapperDownVisible = false;
3980  $(window).scroll(function () {
3981      let viewportBottom = $(window).scrollTop() + $(window).height() ;
3982      let wrapperUpBottom = $(".loader-wrapperUp").offset().top + $(".loader-wrapperUp").outerHeight() ;
3983
3984      if ((viewportBottom > wrapperUpBottom) && (!isWrapperDownVisible)) {
3985          $(".portlet-layout-loader").addClass("active")
3986          setTimeout(() => {
3987              $(".loader-wrapperDown").removeClass("loader-hide");
3988              $(".portlet-layout-loader").removeClass("active")
3989              $(".loader-wrapperDown .slick-slider").slick("resize")
3990          }, 1000)
3991          isWrapperDownVisible = true;
3992      }
3993  });
3994}
3995// ****************************** BEGIN HOME_MODAL
3996/* $(document).ready(function () {
3997  if ($(".modal-form.open").length) {
3998    $('body').addClass("modal-form-body-no-scroll");
3999  }else {
4000    $('body').removeClass("modal-form-body-no-scroll");
4001  }
4002
4003  if ($('body').hasClass("has-control-menu").length && $(".modal-form.open").length) {
4004    $(".modal-form.open").removeClass("open");
4005  }
4006
4007  $(".close-button").on("click", function(){
4008    $('body').removeClass("modal-form-body-no-scroll");
4009    $(".modal-form.open").removeClass("open");
4010  })
4011}); */
4012// ****************************** END HOME_MODAL
4013
4014// ****************************** BEGIN DROPDOWN PRODUCT DETAILS
4015$(document).ready(function () {
4016  if ($(".dropdown-click2").length && $(".dropdown-area").length) {
4017    $(".dropdown-click2").on("click", function () {
4018      $(".dropdown-click2 .dropdown-arrow").toggleClass("close-drop");
4019      $(this).next(".dropdown-area").toggleClass("active");
4020    });
4021  }
4022  if ($(".dropdown-click1").length && $(".dropdown-area").length) {
4023	    $(".dropdown-click1").on("click", function () {
4024	      $(".dropdown-click1 .dropdown-arrow").toggleClass("close-drop");
4025	      $(this).next(".dropdown-area").toggleClass("active");
4026	    });
4027	  }
4028});
4029// ****************************** END DROPDOWN PRODUCT DETAILS
4030
4031
4032// ****************************** BEGIN CONTACT FORM SMART SELECT
4033$(document).ready(function () {
4034  if ($(".contact.contact-form-smart").length) {
4035    $(".select-selected").on("click", function () {
4036      $(this).toggleClass("select-arrow-active");
4037      $(this).next(".select-items").toggleClass("select-hide");
4038      $(".select-items div").each(function (index, element) {
4039        if ($(element).text() == $(".select-selected").text()) {
4040          $(element).addClass("same-as-selected")
4041        } else {
4042          $(element).removeClass("same-as-selected")
4043        }
4044      })
4045    })
4046    $(".select-items>div").on("click", function () {
4047      $(this).closest(".select-items").siblings(".select-selected").text($(this).text());
4048      $(this).closest(".select-items").addClass("select-hide");
4049      $(this).closest(".select-items").siblings(".select-selected").removeClass("select-arrow-active");
4050
4051    })
4052  }
4053});
4054// ****************************** END CONTACT FORM SMART SELECT
4055
4056// ******************************  BTN-LINK UNDERLINE
4057/**
4058 * Enhances all anchor elements with class 'btn-link' by wrapping their text content
4059 * in a <span> with class 'link-text', while preserving any <i> icon elements.
4060 * This improves styling flexibility and accessibility.
4061 */
4062$(document).ready(function () {
4063  $('a.btn-link').each(function () {
4064    const $link = $(this);
4065    const html = $link.html();
4066
4067    const linkSpan = $link.find("span");
4068
4069    if (linkSpan.length === 0) {
4070		// Encuentra el icono <i> y lo separa del texto
4071		const icon = $link.find('i');
4072		const iconHtml = icon.length ? icon.prop('outerHTML') : '';
4073
4074		// Extrae solo el texto (sin el icono)
4075		const textOnly = $link.clone().children().remove().end().text().trim();
4076
4077		// Reconstruye el HTML con el texto envuelto en un span
4078		$link.html('<span class="link-text">' + textOnly + '</span>' + iconHtml);
4079    }
4080  });
4081});
4082// ****************************** END BTN-LINK UNDERLINE
4083
4084
4085// ****************************** SLICKCONTROLS
4086/**
4087 * Script to restructure Slick carousel controls.
4088 * Groups arrows, dots, and counters in a row below the slider.
4089 * Displays current dot number and total, updating dynamically.
4090 * Only renders if visible dots exist in the carousel.
4091 */
4092
4093 // Se mantiene la navegación de roca frente al diseño de figma
4094
4095/*
4096function renderSlickControls($slider) {
4097  const $parent = $slider.parent();
4098
4099  // Remove existing controls wrapper if present
4100  $parent.find('.slick-controls-wrapper').remove();
4101
4102  // Get real slides (excluding cloned ones)
4103  const $realSlides = $slider.find('.slick-slide').not('.slick-cloned');
4104  const totalSlides = $realSlides.length;
4105  if (totalSlides <= 1) return;
4106
4107  // Check for dots and arrows
4108  const $dots = $slider.find('.slick-dots');
4109  const hasDots = $dots.length && $dots.find('li').length;
4110  const $prevArrow = $slider.find('.slick-prev');
4111  const $nextArrow = $slider.find('.slick-next');
4112  const hasArrows = $prevArrow.length && $nextArrow.length;
4113
4114  // Exit if no controls are present
4115  if (!hasDots && !hasArrows) return;
4116
4117  // Format total count
4118  const totalUnits = hasDots ? $dots.find('li').length : totalSlides;
4119  const formattedTotal = totalUnits < 10 ? '0' + totalUnits : totalUnits;
4120
4121  // Create control elements
4122  const $controlsWrapper = $('<div class="slick-controls-wrapper"></div>');
4123  const $currentCounter = $('<div class="slick-counter-current">01</div>');
4124  const $totalCounter = $('<div class="slick-counter-total">' + formattedTotal + '</div>');
4125  const $dotsContainer = hasDots ? $('<div class="slick-dots-container"></div>').append($dots) : null;
4126
4127  // Append controls
4128  if (hasArrows) $controlsWrapper.append($prevArrow);
4129  if (hasArrows || hasDots) $controlsWrapper.append($currentCounter);
4130  if ($dotsContainer) $controlsWrapper.append($dotsContainer);
4131  if (hasArrows || hasDots) $controlsWrapper.append($totalCounter);
4132  if (hasArrows) $controlsWrapper.append($nextArrow);
4133
4134  // Insert controls after slider
4135  $slider.after($controlsWrapper);
4136
4137  // Update current counter on slide change
4138  $slider.off('afterChange._controls').on('afterChange._controls', function (event, slick, currentSlide) {
4139    let currentFormatted;
4140
4141    if (slick.$dots && slick.$dots.find('li.slick-active').length) {
4142      const currentDotIndex = slick.$dots.find('li.slick-active').index();
4143      currentFormatted = (currentDotIndex + 1) < 10 ? '0' + (currentDotIndex + 1) : (currentDotIndex + 1);
4144    } else {
4145      currentFormatted = (currentSlide + 1) < 10 ? '0' + (currentSlide + 1) : (currentSlide + 1);
4146    }
4147
4148    $controlsWrapper.find('.slick-counter-current').text(currentFormatted);
4149  });
4150}
4151
4152function initSlickControls() {
4153  $('.slick-initialized').each(function () {
4154    const $slider = $(this);
4155    renderSlickControls($slider);
4156  });
4157}
4158
4159// Re-render controls on slick events
4160$(document).on('init reInit breakpoint', '.slick-initialized', function () {
4161  renderSlickControls($(this));
4162});
4163
4164// Initial setup
4165$(document).ready(initSlickControls);
4166*/
4167
4168// ****************************** END SLICKCONTROLS
4169
4170
4171
4172
4173
4174$(document).ready(function () {
4175  $('.cta-black, .cta-white').each(function () {
4176    const $link = $(this);
4177    const textOnly = $link.text().trim();
4178
4179    // Reconstruye el HTML con el texto envuelto en un span
4180    $link.html('<span class="link-text">' + textOnly + '</span>');
4181  });
4182});
4183// ****************************** END BTN-LINK UNDERLINE
4184
4185
4186
4187
4188// ****************************** SLICKCONTROLS
4189/**
4190 * Script to restructure Slick carousel controls.
4191 * Groups arrows, dots, and counters in a row below the slider.
4192 * Displays current dot number and total, updating dynamically.
4193 * Only renders if visible dots exist in the carousel.
4194 */
4195
4196 // Se mantiene la navegación de roca frente al diseño de figma
4197
4198/*
4199function renderSlickControls($slider) {
4200  const $parent = $slider.parent();
4201
4202  // Remove existing controls wrapper if present
4203  $parent.find('.slick-controls-wrapper').remove();
4204
4205  // Get real slides (excluding cloned ones)
4206  const $realSlides = $slider.find('.slick-slide').not('.slick-cloned');
4207  const totalSlides = $realSlides.length;
4208  if (totalSlides <= 1) return;
4209
4210  // Check for dots and arrows
4211  const $dots = $slider.find('.slick-dots');
4212  const hasDots = $dots.length && $dots.find('li').length;
4213  const $prevArrow = $slider.find('.slick-prev');
4214  const $nextArrow = $slider.find('.slick-next');
4215  const hasArrows = $prevArrow.length && $nextArrow.length;
4216
4217  // Exit if no controls are present
4218  if (!hasDots && !hasArrows) return;
4219
4220  // Format total count
4221  const totalUnits = hasDots ? $dots.find('li').length : totalSlides;
4222  const formattedTotal = totalUnits < 10 ? '0' + totalUnits : totalUnits;
4223
4224  // Create control elements
4225  const $controlsWrapper = $('<div class="slick-controls-wrapper"></div>');
4226  const $currentCounter = $('<div class="slick-counter-current">01</div>');
4227  const $totalCounter = $('<div class="slick-counter-total">' + formattedTotal + '</div>');
4228  const $dotsContainer = hasDots ? $('<div class="slick-dots-container"></div>').append($dots) : null;
4229
4230  // Append controls
4231  if (hasArrows) $controlsWrapper.append($prevArrow);
4232  if (hasArrows || hasDots) $controlsWrapper.append($currentCounter);
4233  if ($dotsContainer) $controlsWrapper.append($dotsContainer);
4234  if (hasArrows || hasDots) $controlsWrapper.append($totalCounter);
4235  if (hasArrows) $controlsWrapper.append($nextArrow);
4236
4237  // Insert controls after slider
4238  $slider.after($controlsWrapper);
4239
4240  // Update current counter on slide change
4241  $slider.off('afterChange._controls').on('afterChange._controls', function (event, slick, currentSlide) {
4242    let currentFormatted;
4243
4244    if (slick.$dots && slick.$dots.find('li.slick-active').length) {
4245      const currentDotIndex = slick.$dots.find('li.slick-active').index();
4246      currentFormatted = (currentDotIndex + 1) < 10 ? '0' + (currentDotIndex + 1) : (currentDotIndex + 1);
4247    } else {
4248      currentFormatted = (currentSlide + 1) < 10 ? '0' + (currentSlide + 1) : (currentSlide + 1);
4249    }
4250
4251    $controlsWrapper.find('.slick-counter-current').text(currentFormatted);
4252  });
4253}
4254
4255function initSlickControls() {
4256  $('.slick-initialized').each(function () {
4257    const $slider = $(this);
4258    renderSlickControls($slider);
4259  });
4260}
4261
4262// Re-render controls on slick events
4263$(document).on('init reInit breakpoint', '.slick-initialized', function () {
4264  renderSlickControls($(this));
4265});
4266
4267// Initial setup
4268$(document).ready(initSlickControls);
4269*/
4270
4271// ****************************** END SLICKCONTROLS
4272
4273
4274
4275
4276//Yari 10/06/2023 populate header's user area by service
4277//Yari 20/09/2023 functionality moved to header.ftl to try to solve language cookie error with Akamai
4278//$(document).ready(function() {
4279//  var li = document.getElementById('userMenuLi');
4280//  if (li) {
4281//    var parent = li.parentNode, groupId = li.dataset.group, marketCode = li.dataset.market, languageId = li.dataset.language,
4282//      debug = (li.dataset.debug === 'true');
4283//    if ((groupId)&&(marketCode)&&(languageId)) {
4284//      var url = '/o/marginals/get-header-data?groupId=' + groupId + '&marketCode=' + marketCode + '&languageId=' + languageId;
4285//      if (debug) {console.log('Calling getUserData service: ' + url);}
4286//      $.ajax({
4287//        type : 'POST',
4288//        url : url,
4289//        success : function(result) {
4290//          if (debug) {console.log(result);}
4291//          if (result.success) {
4292//            li.remove();
4293//            var html = result.userHTML;
4294//            if (html) {
4295//              parent.innerHTML += result.userHTML;
4296//              if (debug) {console.log('Header user HTML menu succesfully updated');}
4297//            }
4298//			var mdiv = document.getElementById('mobileUserAreaDiv');
4299//			if ((mdiv)&&(result.mobileUserHTML)) {
4300//				mdiv.innerHTML = result.mobileUserHTML;
4301//				mdiv.style.display = '';
4302//				if (debug) {console.log('Header mobile user HTML menu succesfully updated');}
4303//			}
4304//          } else {
4305//            li.innerHTML = 'ERROR!';
4306//            li.style.color = 'red';
4307//            if (debug) {
4308//              var error = (result.error) ? result.error : 'Unspecified error';
4309//              console.log('ERROR: ' + error);
4310//            }
4311//          }
4312//        },
4313//        error : function(jqXHR, textStatus, errorThrown) {
4314//          li.innerHTML = 'ERROR!';
4315//          li.style.color = 'red';
4316//          if (debug) {console.log('ERROR: ' + textStatus + ' (' + errorThrown + ')');}
4317//        }
4318//      });
4319//    }
4320//  }
4321//});
4322
4323//Yari 10/07/2023 header's images lazy loading
4324$(document).ready(function() {
4325  $('div.main-header__wrapper').find('img[data-lazy]').each(function() {
4326    var lazy = $(this).data('lazy');
4327    if (lazy) {
4328      this.src = lazy;
4329      //console.log('Image ' + this + ' src attribute changed to : ' + lazy);
4330    }
4331  });
4332  $('div.main-header__wrapper').find('span[data-lazybkg]').each(function() {
4333    var lazybkg = $(this).data('lazybkg');
4334    if (lazybkg) {
4335      this.style.backgroundImage = 'url("' + lazybkg + '")';
4336      //console.log('Span ' + this + ' backgroundImage style changed to : ' + lazybkg);
4337    }
4338  });
4339});
4340
4341function changeColsMobile(elIdentifier, isTwoCol) {
4342  var el = document.querySelector(elIdentifier);
4343
4344  if(isTwoCol) {
4345    el.classList.remove("one");
4346    el.classList.add("two");
4347  } else {
4348    el.classList.remove("two");
4349    el.classList.add("one");
4350  }
4351}
4352
4353
4354// SCROLL AND TABS
4355$(document).ready(function() {
4356  initAllTabs();
4357  centerAllActiveTabs();
4358});
4359
4360
4361$(window).resize(function() {
4362  initAllTabs();
4363  centerAllActiveTabs();
4364});
4365
4366function initAllTabs() {
4367  $('.roca-restyle .tabs').each(function() {
4368
4369    var tabsClass = '.nav.nav-tabs';
4370    var tabs = $(this).find(tabsClass).first();
4371
4372    if(tabs[0].scrollWidth > tabs[0].clientWidth) {
4373      tabs.css('padding-right', '32px');
4374    } else {
4375      tabs.css('padding-right', '0');
4376    }
4377
4378    initScroll('#' + $(this).attr('id') + ' ' + tabsClass);
4379  });
4380}
4381
4382function initScroll(section) {
4383  const arrowsEl = $(section).first().parent().find('.rs-scroll-arrows').first();
4384  const arrowLeftEl = $(arrowsEl).find('.rs-scroll-left').first();
4385  const arrowRightEl = $(arrowsEl).find('.rs-scroll-right').first();
4386
4387  const scrollWidth = $(section).first().get(0).scrollWidth;
4388  const visibleWidth = $(section).first().innerWidth();
4389
4390  if(scrollWidth > $(section).first()[0].clientWidth) {
4391    arrowsEl.show();
4392  } else {
4393    arrowsEl.hide();
4394  }
4395
4396  if ($(section).first().scrollLeft() === 0) {
4397    arrowLeftEl.hide();
4398  } else {
4399    arrowLeftEl.show();
4400  }
4401
4402  if (Math.round($(section).first().scrollLeft() + visibleWidth) >= scrollWidth) {
4403    arrowRightEl.hide();
4404  } else {
4405    arrowRightEl.show();
4406  }
4407}
4408
4409function actionArrowScroll(section, pxScroll) {
4410  $(section).first().animate({ scrollLeft: $(section).first().scrollLeft() + pxScroll }, 300, function() { initScroll(section); });
4411}
4412
4413function actionDotScroll(carousel, maxDotsVisible, dotWidth) {
4414  carousel.on('afterChange', function(event, slick, currentSlide) {
4415
4416    var firstVisibleDot = currentSlide - Math.floor(maxDotsVisible / 2);
4417    if(slick.slideCount > maxDotsVisible) { firstVisibleDot = Math.max(0, Math.min(firstVisibleDot, slick.slideCount - maxDotsVisible)); }
4418
4419    $(event.target).parent().find('.slick-dots').animate({
4420      scrollLeft: firstVisibleDot * dotWidth
4421    }, 300);
4422  });
4423}
4424
4425function updateScrollFade($this) {
4426  const scrollWidth = $this.get(0).scrollWidth;
4427  const visibleWidth = $this.innerWidth();
4428
4429  if (scrollWidth - visibleWidth > 1) {
4430    if ($this.scrollLeft() + visibleWidth >= scrollWidth) {
4431      $this.removeClass("anclas-wrapper-fade");
4432    } else if (!$this.hasClass("anclas-wrapper-fade")) {
4433      $this.addClass("anclas-wrapper-fade");
4434    }
4435  } else {
4436    $this.removeClass("anclas-wrapper-fade");
4437  }
4438}
4439
4440function centerAllActiveTabs() {
4441  var tabs = document.querySelectorAll('.roca-restyle .tabs .nav.nav-tabs');
4442
4443  tabs.forEach(tab => {
4444    var activeTab = tab.querySelector('.nav-item.active');
4445    if (activeTab) {
4446      var tabRect = tab.getBoundingClientRect();
4447      var activeRect = activeTab.getBoundingClientRect();
4448
4449      var offset = activeRect.left - tabRect.left - (tab.clientWidth / 2) + (activeTab.clientWidth / 2);
4450      tab.scrollLeft += offset;
4451    }
4452  });
4453}
4454
4455// DISCARD THEME
4456$(document).ready(function () {
4457  const urlParams = new URLSearchParams(window.location.search);
4458  const discardTheme = urlParams.get('discardTheme');
4459
4460  if (discardTheme !== null) {
4461    const appendDiscardTheme = (url) => {
4462      try {
4463        const parsedUrl = new URL(url, window.location.origin);
4464        parsedUrl.searchParams.set('discardTheme', discardTheme);
4465        return parsedUrl.toString();
4466      } catch (e) {
4467        return url;
4468      }
4469    };
4470
4471    // Modificar todos los enlaces existentes (excepto anclas)
4472    $('a[href]').each(function () {
4473      const href = $(this).attr('href');
4474      if (href && !href.startsWith('#') && !href.includes('discardTheme') && !href.startsWith('javascript:')) {
4475        $(this).attr('href', appendDiscardTheme(href));
4476      }
4477    });
4478
4479    // Interceptar clics en enlaces válidos (no anclas)
4480    $(document).on('click', 'a[href]', function (e) {
4481      const href = $(this).attr('href');
4482      if (href && !href.startsWith('#') && !href.includes('discardTheme') && !href.startsWith('javascript:')) {
4483        e.preventDefault();
4484        window.location.href = appendDiscardTheme(href);
4485      }
4486    });
4487
4488    // Interceptar cambios de estado del historial
4489    const originalPushState = history.pushState;
4490    history.pushState = function (state, title, url) {
4491      if (url) {
4492        url = appendDiscardTheme(url);
4493      }
4494      return originalPushState.call(history, state, title, url);
4495    };
4496
4497    const originalReplaceState = history.replaceState;
4498    history.replaceState = function (state, title, url) {
4499      if (url) {
4500        url = appendDiscardTheme(url);
4501      }
4502      return originalReplaceState.call(history, state, title, url);
4503    };
4504  }
4505});
4506
4507// Range slider filters functionality
4508function findClosestIndex(array, target) {
4509    return array.reduce((bestIdx, val, idx) =>
4510        Math.abs(val - target) < Math.abs(array[bestIdx] - target) ? idx : bestIdx
4511    , 0);
4512}

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.