// https://stackoverflow.com/questions/41665935/html5-form-validation-before-recaptchas/41694352#41694352 function defaultCaptchaOnFormSubmit(form) { grecaptcha.reset(); grecaptcha.execute(); grecaptcha.celoxisForm = form; return false; } function defaultCaptchaCallback(response) { grecaptcha.celoxisForm.submit(); } function watchedVideo(file) { var videos = Cookies.getJSON("videos"); if (!videos) { videos = new Array(); } console.log("videos:" + videos); file = file.replace(".mp4", ""); var cmps = file.split("/"); file = cmps[cmps.length - 1]; if (videos.includes(file)) { return; } videos.push(file); Cookies.set("videos", JSON.stringify(videos), {expires: 365, domain: 'celoxis.com', path: '/'}); } /** * jQuery.browser.mobile (http://detectmobilebrowser.com/) * * jQuery.browser.mobile will be true if the browser is a mobile device * **/ (function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera); function cycleImages(id, ncols, cls) { console.log("cycleImagesAux"); $bodyBp = $('body').attr('data-bp'); if ($bodyBp.includes('lg') || $bodyBp.includes('xl')) { } else if ($bodyBp.includes('md')) { ncols = 3; } else if ($bodyBp.includes('sm')) { ncols = 2; } else { ncols = 1; } var $root = $('#' + id); var cfg = $root[0].cycleImagesCfg; var first = false; var $allImages = $('#' + id + ' div'); var iw = parseInt(100/ncols); if (!cfg) { var first = true; $root.css('position', 'relative'); $root.addClass('row'); var count = $allImages.length; cfg = { maxIndex: count - 1, subsetLength: ncols, serial: ncols == 1}; $('#' + id)[0].cycleImagesCfg = cfg; var h = $root.data('height') || 100; h = h + 'px'; var obj = { position: 'absolute', 'width':iw+'%', 'xheight': h, 'line-height':h}; $allImages.css({position: 'absolute', 'width':iw+'%', 'xheight': h, 'line-height':h}); $allImages.slice(ncols).css({display: 'none'}); $allImages.addClass(cls); $root.css("height", h); } var indices = getImageIndices(cfg); for (var i = 0; i < indices.length; i++) { $allImages.eq(indices[i]).css({top: 0, left: (i*iw) + '%', 'z-index':2, xdisplay: 'none'}).addClass('to-show'); } var $imagesToShow = $('#' + id + ' div.to-show'); $imagesToShow.removeClass('to-show'); var $imagesToHide = $('#' + id + ' div.active'); var func = function() { $imagesToHide.css('z-index',1).hide().removeClass('active'); $imagesToShow.css('z-index',3).addClass('active');} var time = 1500; if (!first) { $imagesToHide.fadeOut(time, func); $imagesToShow.fadeIn(time); } else { func(); $root.show(); } //setTimeout(function() { cycleImages(id, ncols, cls); }, first ? 1000 : 3000); } function getImageIndices(cfg) { var src = Array.apply(null, {length: cfg.maxIndex + 1}).map(Number.call, Number); if (!cfg.currentSet) { cfg.currentSet = Array.apply(null, {length: cfg.subsetLength}).map(Number.call, Number); } else { if (!cfg.serial) { src = src.filter( ( el ) => !cfg.currentSet.includes( el ) ); cfg.currentSet = src.sort(() => .5 - Math.random()).slice(0,cfg.subsetLength); } else { cfg.currentSet = [(cfg.currentSet[0] + 1)%(cfg.maxIndex + 1)]; } } return cfg.currentSet; } function findBootstrapEnvironments() { let envs = ['xs', 'sm', 'md', 'lg', 'xl']; let el = document.createElement('div'); document.body.appendChild(el); let curEnv = envs.shift(); var out = ['xs']; for (let env of envs.reverse()) { el.classList.add(`d-${env}-none`); if (window.getComputedStyle(el).display === 'none') { curEnv = env; out.push(env); //break; } } document.body.removeChild(el); return out.join(' '); } function addBreakpointToBody() { $('body').attr('data-bp', findBootstrapEnvironments()); } function toggleReadMoreLess() { var less = document.getElementById("less"); var moreText = document.getElementById("more"); var btnText = document.getElementById("readMoreLessBtn"); var lessDisplay = less.style.display; if (!btnText.firstTimeDone) { lessDisplay = (lessDisplay == "none" ? "inline" : "none"); btnText.firstTimeDone = true; } if (lessDisplay == "none") { less.style.display = "inline"; btnText.innerHTML = btnText.getAttribute("data-read-more-text") || "(Show)"; moreText.style.display = "none"; } else { less.style.display = "none"; btnText.innerHTML = btnText.getAttribute("data-read-less-text") || "(Hide)"; moreText.style.display = ""; } } function isScrolledIntoView(elem) { var docViewTop = $(window).scrollTop(); var docViewBottom = docViewTop + $(window).height(); var elemTop = $(elem).offset().top; var elemBottom = elemTop + $(elem).height(); return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); } function setHiddenVars() { // only set those values that are determined by javascript var tz = jstz.determine(); $('.h-localtime').val(new Date().toString()); $('.h-time-zone').val(tz.name()); $('.h-tz-offset').val(new Date().getTimezoneOffset()); $('.h-mobile').val(jQuery.browser.mobile ? "true" : "false"); $('.h-videos').val(Cookies.get("videos")); $('.h-milestones').val(Cookies.get("milestones")); } $(function() { /* because we use weglot, we need to have translatable text in elements rathr than attrs */ $("body [title-from-id]").each(function() { $(this).attr('data-original-title', $('#' + $(this).attr('title-from-id')).html()); }); $("body [data-content-from-id]").each(function() { $(this).attr('data-content', $('#' + $(this).attr('data-content-from-id')).html()); }); var ev = new Event("celoxis-available", {bubbles: true}); window.document.dispatchEvent(ev); $('.x-hidden, .x-no-transition').removeClass('x-hidden x-no-transition'); setHiddenVars(); var allImages = $('.blog-article img'); var largeImages = allImages.filter(function(){ return ($(this).width() > 480) || ($(this).height() > 4800) }) largeImages.addClass('centered-image my-5'); $('.doc h4[id], .doc h5[id]').append(function() { return '';}); var $rmb = $('#readMoreLessBtn'); if ($rmb.length > 0) { $rmb.on('click', toggleReadMoreLess).addClass("mx-3 fs-11 fw-400"); toggleReadMoreLess(); } if (!document.celoxisReady) { document.celoxisReady = true; $(window).resize(function() { addBreakpointToBody(); }); addBreakpointToBody(); var ev = new Event("celoxis-ready", {bubbles: true}); window.document.dispatchEvent(ev); } }); /* https://stackoverflow.com/questions/11803215/how-to-include-multiple-js-files-using-jquery-getscript-method */ $.getMultiScripts = function(arr, path) { var _arr = $.map(arr, function(scr) { return $.getScript( (path||"") + scr ); }); _arr.push($.Deferred(function( deferred ){ $( deferred.resolve ); })); return $.when.apply($, _arr); } function validateFileSize(file) { var file_size = ($(file)[0].files[0].size / 1024.0 / 1024.0); var maxSize = $(file).data('max-size'); var $errorElem = $(file).next('.error:first'); //console.log(file_size); if (file_size > maxSize) { $errorElem.html("File size is greater than " + maxSize + " MB"); $(file).val(''); return false; } $errorElem.html(''); return true; } Celoxis.onReady(function() { var $scrollable = $( window ); var $videos = $($( "video" ).get().reverse()); loader = function (first) { var playedAVideo = false; var urls = new Array(); $videos.each( function () { var me = this; //console.log("Found video:" + me.currentSrc); var $this = $(me); if (first) { $this.on('ended',function(){ if (me.watchedVideo) { watchedVideo(me.currentSrc); } me.watchedVideo = true; me.play(); }); } var $ctr = $this.closest('div'); if (!playedAVideo && isScrolledIntoView($ctr[0])) { //$ctr.isInView()) { me.shouldPlay = true; playedAVideo = true; $ctr.removeAttr('data-overlay'); setTimeout(function() { if (me.shouldPlay) { me.play(); } }, 250); } else { $ctr.attr('data-overlay',1); me.shouldPlay = false; me.currentTime = 0; me.pause(); } } ); }; $scrollable.scroll( _.throttle( loader, 250 ) ); loader(true); console.log("removing unhide..."); $('.unhide-on-load').removeClass('unhide-on-load'); }); async function jsonRequest(url, method, args) { const result = await $.ajax({ url: url, type: method || 'POST', data: args }); return result; } async function checkWorkEmail(email, errorDivId) { var alertHtml = '