var $html = $('html'),
$body = $('body'),
$window = $(window),
$document = $(document),
isTouch = 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch ? true : false,
touchClass = isTouch ? 'touch' : 'notouch',
linkEvent = isTouch ? 'touchend' : 'click',
lastScrollTop = 0,
is_xs = function () { return $window.width() < 767; },
is_md = function () { return $window.width() < 1023; },
stickyOffset = function (only) {
only || (only = false);
var $mainHeader = $('[data-main-header]'),
mainHeaderHeight = parseInt($mainHeader.outerHeight()) || 0,
stickyHeaderHeight = parseInt($('.sticky-header').outerHeight()) || 0,
stickyExtraHeight = parseInt($('.sticky-extra').outerHeight()) || 0,
progressHeight = parseInt($('.progressbar-wrapper').outerHeight()) || 0;
if (only) {
if (is_xs() && $mainHeader.is('.main-header')) {
return mainHeaderHeight + progressHeight - 1;
}
return stickyHeaderHeight + progressHeight - 1;
}
return stickyHeaderHeight + stickyExtraHeight + 15;
},
defaults = function (event) {
if (event.preventDefault)
event.preventDefault();
else
event.returnValue = false;
},
throttle = function (fn, threshhold, scope) {
threshhold || (threshhold = 250);
var last,
deferTimer;
return function () {
var context = scope || this;
var now = +new Date,
args = arguments;
if (last && now < last + threshhold) {
// hold on to it
clearTimeout(deferTimer);
deferTimer = setTimeout(function () {
last = now;
fn.apply(context, args);
}, threshhold);
} else {
last = now;
fn.apply(context, args);
}
};
},
debounce = function (func, wait, immediate) {
var timeout;
return function () {
var context = this, args = arguments;
var later = function () {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
},
windowResize = function () {
windowScroll();
},
windowScroll = function () {
var scrollPos = $window.scrollTop(),
scrollOffset = function () {
if ($('*[data-trigger="sticky-header"]:visible').length) {
return $('*[data-trigger="sticky-header"]:visible').first().offset().top;
}
// va sommata anche la outerHeight di eventuale ADV prima della
// testata o della parte alta della skin
return $('[data-main-header]').outerHeight();
};
if (scrollPos > scrollOffset()) {
$body.addClass('is-scrolled');
} else {
$body.removeClass('is-scrolled');
}
lastScrollTop = scrollPos;
},
initSticky = function () {
if ($('.sticky-item').length && !is_xs()) {
$('.sticky-item').stick_in_parent({
parent: '.sticky-parent',
offset_top: stickyOffset(),
inner_scrolling: false
});
};
},
initStickyExtra = function () {
if ($('.sticky-extra').length) {
$('.sticky-extra').stick_in_parent({
parent: 'body',
offset_top: stickyOffset(only = true),
inner_scrolling: false
});
}
},
initStickyHeader = function () {
if (is_xs()) {
$('.main-header').stick_in_parent({
inner_scrolling: false
});
} else {
$('.main-header').trigger("sticky_kit:detach");
};
},
stickyRecalc = function () {
$(document.body).trigger("sticky_kit:recalc");
},
initToggleClass = function () {
$('[data-toggle-class]').on('click', function (e) {
e.preventDefault();
var $this = $(this),
toggleClass = $this.attr('data-toggle-class');
if ($this.closest('[data-toggle-class-target]').length) {
$this.closest('[data-toggle-class-target]').toggleClass(toggleClass);
} else {
$body.toggleClass(toggleClass);
}
});
},
initSlickCarousel = function () {
//setTimeout(function () {
$('.carousel')
.not('.slick-initialized')
.each(function () {
var $this = $(this),
$carouselWrapper = $this.closest('.carousel-wrapper'),
$nav = $carouselWrapper.find('.carousel-nav'),
$prev = $carouselWrapper.find('.carousel-btn--prev'),
$next = $carouselWrapper.find('.carousel-btn--next'),
slidesToShow = parseInt($this.attr('data-slide')) || 4,
slidesToShowMd = parseInt($this.attr('data-slide-md')) || slidesToShow,
dots = $this.is('[data-dots]'),
startFrom = parseInt($this.attr('data-start') - 1) || 0;
$this.slick({
arrows: true,
dots: dots,
infinite: false,
prevArrow: $prev,
nextArrow: $next,
initialSlide: startFrom,
slidesToShow: slidesToShow,
slidesToScroll: slidesToShow,
rows: 0, // fix for extra div wrapper
responsive: [
{
breakpoint: 1023,
settings: {
slidesToShow: slidesToShowMd,
slidesToScroll: slidesToShowMd
}
},
{
breakpoint: 767,
settings: "unslick"
}
]
});
});
//}, 300);
},
initSlickRadiocor = function () {
$('.sradiocor-list')
.not('.slick-initialized')
.slick({
dots: false,
arrows: true,
slidesToShow: 1,
prevArrow: $('.sradiocor-btn--prev'),
nextArrow: $('.sradiocor-btn--next'),
fade: true,
rows: 0, // fix for extra div wrapper
})
.on('init reInit afterChange', function (event, slick, currentSlide, nextSlide) {
//currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)
var i = (currentSlide ? currentSlide : 0) + 1;
$('.sradiocor-paging').text(i + '/' + slick.slideCount);
});
},
initSlickFullscreen = function () {
//setTimeout(function () {
$('.fullscreen-carousel')
.not('.slick-initialized')
.each(function () {
var $this = $(this),
$carouselWrapper = $this.closest('.carousel-wrapper'),
$nav = $carouselWrapper.find('.carousel-nav'),
$prev = $carouselWrapper.find('.carousel-btn--prev'),
$next = $carouselWrapper.find('.carousel-btn--next'),
startFrom = parseInt($this.attr('data-start') - 1) || 0;
if (!is_xs()) {
$this.slick({
arrows: true,
infinite: true,
prevArrow: $prev,
nextArrow: $next,
initialSlide: startFrom,
slidesToShow: 1,
slidesToScroll: 1,
fade: true,
rows: 0, // fix for extra div wrapper
responsive: [
{
breakpoint: 767,
settings: "unslick"
}
]
})
.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
if (nextSlide === (slick.$slides.length - 1)) {
$carouselWrapper.addClass('is-last');
} else {
$carouselWrapper.removeClass('is-last');
}
});
}
});
$('.fullscreen-restart').on('click', function () {
$('.fullscreen-carousel').slick('slickGoTo', 0);
});
//}, 300);
},
setProgressbar = function () {
$('.progressbar').each(function () {
var $_this = $(this),
$_articleWrapper = $('.main-article'),
articleOffset = $window.scrollTop() - $_articleWrapper.offset().top,
articleHeight = $_articleWrapper.outerHeight(),
articleScroll = parseInt((articleOffset / (articleHeight - $window.height())) * 100);
if (articleScroll < 0) {
articleScroll = 100;
}
$(this).css('width', articleScroll + '%');
});
},
initSidemenuNav = function () {
var sidemenuMaxLevel = 4,
timer = null;
$('.sidemenu-link, .sidemenu-action, .sidemenu-list-sep').on('mouseover touchend click', function (e) {
var $this = $(this),
$thisLevel = $this.closest('.sidemenu-lev'),
nextLevelDepth = (parseInt($thisLevel.attr('data-level')) || 0) + 1,
timeout = (e.type == 'mouseover') ? 400 : 0;
if ($this.is('[data-next-level]') || $this.is('[data-prev-level]')) {
e.preventDefault();
}
if (timer) { clearTimeout(timer); }
timer = setTimeout(function () {
// tolgo is-active ai link del livello corrente
$thisLevel.find('.is-active').removeClass('is-active');
// chiudo i cassetti successivi al livello corrente
for (var i = nextLevelDepth; i <= sidemenuMaxLevel; i++) {
$('[data-level=' + i + ']').removeClass('is-active').find('.is-active').removeClass('is-active');
}
if ($this.is('[data-next-level]') || $this.is('[data-prev-level]')) {
var $target = $($this.attr('href'));
if (!is_md() || (e.type !== 'mouseover')) {
if ($this.is('[data-prev-level]')) {
// chiudo il livello corrente e resetto i suoi link attivi
$thisLevel.removeClass('is-active');
$target.find('.is-active').removeClass('is-active');
}
// Imposto lo stato attivo sul link corrente
$this.addClass('is-active');
// Apro il cassetto target
$target.addClass('is-active');
}
}
}, timeout);
});
$('.sidemenu-backdrop').on('click', function (e) {
$('#modal-search').modal('hide');
$('.sidemenu .is-active').removeClass('is-active');
$body.removeClass('is-sidemenu-in');
e.preventDefault();
});
},
initSearchModal = function () {
$('#modal-search').on('show.bs.modal', function (e) {
$body.addClass('modal-search-open');
})
$('#modal-search').on('hide.bs.modal', function (e) {
$body.removeClass('modal-search-open');
})
}
initFullscreenModal = function () {
$('#modal-gallery-fullscreen').on('shown.bs.modal', function (e) {
initSlickFullscreen();
$window.resize();
})
}
initTextareaAutoSize = function () {
$(".js-auto-size").textareaAutoSize();
}