"use strict"; (function () { var type = function (obj) { if (obj === undefined || obj === null) { return String(obj); } var classToType = {}; var ref = "Boolean Number String Function Array Date RegExp".split(" "); for (var i = 0, len = ref.length; i < len; i++) { var name_1 = ref[i]; classToType["[object " + name_1 + "]"] = name_1.toLowerCase(); } var myClass = Object.prototype.toString.call(obj); if (myClass in classToType) { return classToType[myClass]; } return "object"; }; var log = function (msg, ident) { if (ident === void 0) { ident = ""; } if (ident != "") { ident = ident + ": "; } if ((typeof console !== "undefined" && console !== null ? console.log : null) != null) { return console.log("" + ident + msg); } }; var dir = function (obj) { if ((typeof console !== "undefined" && console !== null ? console.dir : null) != null) { return console.dir(obj); } }; if (typeof window !== "undefined" && window !== null) { if (window.cjs == null) { window.cjs = {}; } if (window.cjs.type == null) { window.cjs.type = type; } if (window.cjs.log == null) { window.cjs.log = log; } if (window.cjs.dir == null) { window.cjs.dir = dir; } } else { if (exports.type == null) { exports.type = type; } if (exports.log == null) { exports.log = log; } if (exports.dir == null) { exports.dir = dir; } } })(); "use strict"; (function () { var BannerScroll = (function () { function BannerScroll(wrapElement, jQuery) { this.originTop = 0; this._position = null; this._isManaged = false; this._remanageCallback = function () { }; this._remanageCallbackEmpty = true; this._wrapElement = wrapElement; this._$ = jQuery; this._originWrapElement = jQuery(wrapElement).clone(); this.originTop = this.getOffsetTop(); } BannerScroll.prototype.getOriginWrapElement = function () { return this._originWrapElement; }; BannerScroll.prototype.getWrapElement = function () { return this._wrapElement; }; BannerScroll.prototype.getPosition = function () { return this._position; }; BannerScroll.prototype.resetPosition = function () { this._$(this.getWrapElement()).css("top", ""); this._$(this.getWrapElement()).removeClass("fixed-position"); this._$(this.getWrapElement()).removeClass("absolute-position"); this._$(this.getWrapElement()).addClass("static-position"); return (this._position = BannerScroll.POSITION_STATIC); }; BannerScroll.prototype.setToFixedPosition = function () { this.setRemanageCallback((function (context) { return function () { context.setToFixedPosition(); }; })(this)); if (!this.getIsManaged()) { return; } this.resetPosition(); this.setPosition(BannerScroll.POSITION_FIXED); return this._$(this.getWrapElement()).addClass("fixed-position"); }; BannerScroll.prototype.setToStaticPosition = function () { this.setRemanageCallback((function (context) { return function () { context.setToStaticPosition(); }; })(this)); if (!this.getIsManaged()) { return; } this.resetPosition(); this.setPosition(BannerScroll.POSITION_STATIC); return this._$(this.getWrapElement()).removeClass("fixed-position"); }; BannerScroll.prototype.setToAbsolutePosition = function (top) { top = this._calculateAbsoluteTopPosition(top); this._$(this.getWrapElement()).css("left", ""); this.resetPosition(); this._$(this.getWrapElement()).addClass("absolute-position"); this.setPosition(BannerScroll.POSITION_ABSOLUTE); return this._$(this.getWrapElement()).css("top", top + "px"); }; BannerScroll.prototype.setToAbsolutePositionAnimated = function (top, callback) { if (callback === void 0) { callback = function () { }; } top = top + 10; var $wrapElement = this._$(this.getWrapElement()); $wrapElement.css("left", ""); $wrapElement.removeClass("static-position"); $wrapElement.addClass("absolute-position"); this.setPosition(BannerScroll.POSITION_ABSOLUTE); top = this._calculateAbsoluteTopPosition(top); var cb = function () { return typeof callback === "function" ? callback() : undefined; }; $wrapElement.css("top", top + "px"); return cb(); }; BannerScroll.prototype._calculateAbsoluteTopPosition = function (top) { if (this.getWrapElement() .parent() .css("position") === "relative" || this.getWrapElement() .parent() .css("position") === "absolute") { top -= this.getWrapElement() .parent() .offset().top; } return top; }; BannerScroll.prototype.getOffsetTop = function () { return this._$(this.getWrapElement()).offset().top; }; BannerScroll.prototype.getHeight = function () { var height = this._$(this.getWrapElement()).outerHeight(true); var criteoTotalHeight = 0; this._$(this.getWrapElement()) .find('div[id^="crt-"].ban_envelope:visible') .each((function (self) { return function (i, e) { criteoTotalHeight += self._$(e).outerHeight(true); }; })(this)); return height - criteoTotalHeight; }; BannerScroll.prototype.setPosition = function (position) { this._position = position; return this; }; BannerScroll.prototype.getIsAbsolutePosition = function () { return this._position === BannerScroll.POSITION_ABSOLUTE; }; BannerScroll.prototype.getIsFixedPosition = function () { return this._position === BannerScroll.POSITION_FIXED; }; BannerScroll.prototype.getIsStaticPosition = function () { return this._position === BannerScroll.POSITION_STATIC; }; BannerScroll.prototype.getIsManaged = function () { return this._isManaged; }; BannerScroll.prototype.setIsManaged = function (isManaged) { this._isManaged = isManaged; return this; }; BannerScroll.prototype.remanage = function () { this.setIsManaged(true); return this.callRemanageCallback(); }; BannerScroll.prototype.setRemanageCallback = function (remanageCallback) { this._remanageCallback = remanageCallback; return (this._remanageCallbackEmpty = false); }; BannerScroll.prototype.getRemanageCallbackEmpty = function () { return this._remanageCallbackEmpty; }; BannerScroll.prototype.callRemanageCallback = function () { this._remanageCallbackEmpty = true; return this._remanageCallback(); }; BannerScroll.prototype.disableScrolling = function () { this.setIsManaged(false); return this.resetPosition(); }; BannerScroll.POSITION_FIXED = "fixed"; BannerScroll.POSITION_ABSOLUTE = "absolute"; BannerScroll.POSITION_STATIC = "static"; return BannerScroll; }()); if (typeof window !== "undefined" && window !== null ? window.cjs : undefined) { if (window.cjs.BannerScroll == null) { window.cjs.BannerScroll = BannerScroll; } } else { if (exports.BannerScroll == null) { exports.BannerScroll = BannerScroll; } } })(); "use strict"; (function () { var BannerScrollManager = (function () { function BannerScrollManager(jQuery, isMobileDeviceGetter, waypointGetter) { if (isMobileDeviceGetter === void 0) { isMobileDeviceGetter = function () { return false; }; } this.banners = []; this._$ = jQuery; this._isMobileDeviceGetter = isMobileDeviceGetter; this._waypointGetter = waypointGetter; } BannerScrollManager.prototype.addBanner = function (banner) { return this.banners.push(banner); }; BannerScrollManager.prototype.getBanners = function () { return this.banners; }; BannerScrollManager.prototype.isMobileDevice = function () { return this._isMobileDeviceGetter(); }; BannerScrollManager.prototype.manage = function () { var ref = this.banners; for (var i = 0, len = ref.length; i < len; i++) { var banner = ref[i]; this.manageBanner(banner); } }; BannerScrollManager.prototype.manageBanner = function (banner) { if (banner.bannerObject.getIsManaged()) { return; } banner.bannerObject.setIsManaged(true); if (banner.stopElementsOnUpHitTopOfView != null) { this.manageStopElementsOnUpHitTopOfView(banner); } if (banner.startElementsOnDownHitTopOfView != null) { this.manageStartElementsOnDownHitTopOfView(banner); } if (!this.isMobileDevice() && banner.stopElementsOnHitByBottom != null) { this.manageStopElementsOnHitByBottom(banner); } else { this.manageMobileAnimation(banner); } if (banner.fullBannerHeightVisibleOrDisable === true && (banner.minWindowHeight === undefined || banner.minWindowHeight < banner.bannerObject.getHeight())) { banner.minWindowHeight = banner.bannerObject.getHeight(); } if (banner.minWindowHeight != null) { this.manageMinWindowHeight(banner); } if (!this.isMobileDevice() && banner.leftPositionHandleElement != null) { this.manageLeftPosition(banner); } this.manageMinWindowHeightOnResize(banner); }; BannerScrollManager.prototype.manageLeftPosition = function (banner) { var m = function (b, context) { if (b.bannerObject.getPosition() !== window.cjs.BannerScroll.POSITION_ABSOLUTE) { context ._$(b.bannerObject.getWrapElement()) .css("left", context ._$(banner.leftPositionHandleElement) .offset().left - context._$(window).scrollLeft()); } }; m(banner, this); this._$(window).scroll((function (b, context) { return function () { return m(b, context); }; })(banner, this)); }; BannerScrollManager.prototype.unmanageBanner = function (banner) { banner.bannerObject.setIsManaged(false); }; BannerScrollManager.prototype.manageMinWindowHeight = function (banner) { this._$(window).resize((function (b, context) { return function () { return context.manageMinWindowHeightOnResize(b); }; })(banner, this)); }; BannerScrollManager.prototype.manageMinWindowHeightOnResize = function (banner) { if (this._$(window).height() < banner.minWindowHeight && banner.bannerObject.getIsManaged()) { var currentPosition = banner.bannerObject.getPosition(); if (currentPosition === null) { banner.bannerObject.setIsManaged(false); return; } var offsetTop = banner.bannerObject.getOffsetTop(); banner.bannerObject.setToStaticPosition(); banner.bannerObject.setRemanageCallback((function (banner, currentPosition, offsetTop) { return function () { switch (currentPosition) { case window.cjs.BannerScroll .POSITION_FIXED: return banner.bannerObject.setToFixedPosition(); case window.cjs.BannerScroll .POSITION_STATIC: return banner.bannerObject.setToStaticPosition(); case window.cjs.BannerScroll .POSITION_ABSOLUTE: return banner.bannerObject.setToAbsolutePosition(offsetTop); } }; })(banner, currentPosition, offsetTop)); banner.bannerObject.setIsManaged(false); } else if (this._$(window).height() > banner.minWindowHeight && !banner.bannerObject.getIsManaged()) { banner.bannerObject.remanage(); } this._$(window).scroll(); }; BannerScrollManager.prototype.manageStopElementsOnUpHitTopOfView = function (banner) { var ref = banner.stopElementsOnUpHitTopOfView; for (var i = 0, len = ref.length; i < len; i++) { var element = ref[i]; this._$(element).waypoint((function (self, banner) { return function (direction) { if (direction === "up") { self._$(banner.bannerObject.getWrapElement()).stop(); return banner.bannerObject.setToStaticPosition(); } }; })(this, banner)); } }; BannerScrollManager.prototype.manageStartElementsOnDownHitTopOfView = function (banner) { var ref = banner.startElementsOnDownHitTopOfView; for (var i = 0, len = ref.length; i < len; i++) { var element = ref[i]; this._$(element).waypoint((function (self, banner) { return function (direction) { if (direction === "down" && self.canMove(banner)) { if (!self.isMobileDevice()) { banner.bannerObject.setToFixedPosition(); return self.correctPosition(banner); } else if (banner.bannerObject.getIsManaged()) { var offsetTop = self._getOffsetTopForAbsolutePosition(banner); return banner.bannerObject.setToAbsolutePositionAnimated(offsetTop); } } }; })(this, banner)); } }; BannerScrollManager.prototype.manageStopElementsOnHitByBottom = function (banner) { var ref = banner.stopElementsOnHitByBottom; for (var i = 0, len = ref.length; i < len; i++) { var element = ref[i]; this._$(window).scroll((function (stopElementOnHitByBottom, self, banner) { return function () { if (banner.bannerObject.getIsFixedPosition()) { if (self ._$(stopElementOnHitByBottom) .offset().top <= banner.bannerObject.getOffsetTop() + banner.bannerObject.getHeight()) { banner.bannerObject.setToAbsolutePosition(self ._$(stopElementOnHitByBottom) .offset() .top - banner.bannerObject.getHeight()); return self.correctPosition(banner); } } else if (banner.bannerObject.getIsAbsolutePosition() && self ._$(stopElementOnHitByBottom) .offset().top > self._$(window).scrollTop() + banner.bannerObject.getHeight()) { return banner.bannerObject.setToFixedPosition(); } }; })(element, this, banner)); } }; BannerScrollManager.prototype.manageMobileAnimation = function (banner) { var timer; var offsetTop = banner.bannerObject.getOffsetTop(); this._$(window).scroll((function (self, banner) { return function () { clearTimeout(timer); return (timer = setTimeout(function () { if (!banner.bannerObject.getIsAbsolutePosition()) { return; } offsetTop = self._getOffsetTopForAbsolutePosition(banner); return banner.bannerObject.setToAbsolutePositionAnimated(offsetTop); }, 250)); }; })(this, banner)); }; BannerScrollManager.prototype.canMove = function (banner) { if (banner.stopElementsOnHitByBottom) { var ref = banner.stopElementsOnHitByBottom; for (var i = 0, len = ref.length; i < len; i++) { if (this._$(ref[i]).offset().top <= banner.bannerObject.getOffsetTop() + banner.bannerObject.getHeight()) { return false; } } } return true; }; BannerScrollManager.prototype.correctPosition = function (banner) { if (banner.stopElementsOnHitByBottom) { var ref = banner.stopElementsOnHitByBottom; for (var i = 0, len = ref.length; i < len; i++) { var element = ref[i]; if (this._$(element).offset().top < banner.bannerObject.getOffsetTop() + banner.bannerObject.getHeight()) { banner.bannerObject.setToAbsolutePosition(this._$(element).offset() .top - banner.bannerObject.getHeight()); } } } }; BannerScrollManager.prototype.correctPositionsOfAllBanners = function () { var ref = this.getBanners(); for (var i = 0, len = ref.length; i < len; i++) { this.correctPosition(ref[i]); } }; BannerScrollManager.prototype.disableScrollingOfAllBanners = function () { var ref = this.getBanners(); for (var i = 0, len = ref.length; i < len; i++) { var banner = ref[i]; if (typeof banner.bannerObject.disableScrolling === "function") { banner.bannerObject.disableScrolling(); } } }; BannerScrollManager.prototype._getBottomBoundaryOffsetTop = function (banner) { var minOffsetTop = this._$("body").height(); if (banner.stopElementsOnHitByBottom) { var ref = banner.stopElementsOnHitByBottom; for (var i = 0, len = ref.length; i < len; i++) { var elementOffsetTop = this._$(ref[i]).offset().top; if (elementOffsetTop < minOffsetTop) { minOffsetTop = elementOffsetTop; } } } return minOffsetTop; }; BannerScrollManager.prototype._getOffsetTopForAbsolutePosition = function (banner) { var offsetTop = this._$(window).scrollTop(); var bottomBoundary = this._getBottomBoundaryOffsetTop(banner); if (bottomBoundary < offsetTop + banner.bannerObject.getHeight()) { offsetTop = bottomBoundary - banner.bannerObject.getHeight(); } return offsetTop; }; BannerScrollManager.prototype.refreshWaypoints = function () { var Waypoint = this._waypointGetter(); if (Waypoint != null) { return typeof Waypoint.refreshAll === "function" ? Waypoint.refreshAll() : void 0; } else { return typeof this._$.waypoints === "function" ? this._$.waypoints("refresh") : undefined; } }; return BannerScrollManager; }()); if (typeof window !== "undefined" && window !== null ? window.cjs : undefined) { if (window.cjs.BannerScrollManager == null) { window.cjs.BannerScrollManager = BannerScrollManager; } } else { if (exports.BannerScrollManager == null) { exports.BannerScrollManager = BannerScrollManager; } } })();