'use strict'; function ChatusLauncher(data) { this.params = { firtOpen: true, open: false, container: { startBtn: null, frameContainer: null, frame: null }, callback: { onInit: function() {}, onOpen: function() {}, onClose: function() {}, onConnected: function() {}, onRecoError: function() {}, onEnd: function() {} }, alreadyInitied: false, totalTime: 0, strategyRefresher: 0.5, strategiesPop: [], strategiesBtn: [], cdc: {}, wrc: {}, userCookie: null, convCookie: null, initData: null, frameReady: false }; return this.init(data); } ChatusLauncher.prototype.init = function(data) { var self = this; self.params.initData = data; self.params.container.startBtn = document.createElement('div'); var b = self.params.container.startBtn; self.initStrategies(); self.params.container.openStateBtn = document.createElement('div'); self.params.container.openStateBtn.classList.add('ch_ko_openState'); self.params.container.openStateBtn.innerHTML = ''; self.params.container.closeStateBtn = document.createElement('div'); self.params.container.closeStateBtn.classList.add('ch_ko_closeState'); self.params.container.closeStateBtn.innerHTML = ''; b.className = 'ch_ko_startBtn'; b.style.display = 'none'; b.onclick = function(e) { self.open(); }; document.body.appendChild(b); b.appendChild(self.params.container.openStateBtn); b.appendChild(self.params.container.closeStateBtn); self.params.container.frameContainer = document.createElement('div'); var c = self.params.container.frameContainer; c.style.display = 'none'; c.className = 'ch_ko_frameBox'; document.body.appendChild(c); self.params.container.frameContainer.addEventListener("animationend", function(event) { if (event.animationName == 'ch_ko_fadeOut') { self.params.container.frameContainer.style.display = 'none'; } else if (event.animationName == 'ch_ko_fadeIn') {} }, false); if (data.callback) { self.params.callback.onInit = (typeof data.callback.onInit === 'function') ? data.callback.onInit : function() {}; self.params.callback.onOpen = (typeof data.callback.onOpen === 'function') ? data.callback.onOpen : function() {}; self.params.callback.onClose = (typeof data.callback.onClose === 'function') ? data.callback.onClose : function() {}; self.params.callback.onRecoError = (typeof data.callback.onRecoError === 'function') ? data.callback.onRecoError : function() {}; self.params.callback.onEnd = (typeof data.callback.onEnd === 'function') ? data.callback.onEnd : function() {}; self.params.callback.onConnected = (typeof data.callback.onConnected === 'function') ? data.callback.onConnected : function() {}; } self.params.callback.onInit(); window.addEventListener('message', function(event) { self.onFrameMessage(event); }, false); // window.onfocus = window.onblur = window.onpageshow = window.onpagehide = function (e) { // self.onPageVisibilyChange(e); // } self.params.userCookie = self.getCookie('ch_ko_i_uc'); self.params.convCookie = self.getCookie('ch_ko_i_c'); if (self.params.convCookie && self.params.userCookie) { try { self.open(); } catch (err) { self.params.convCookie = null; } } else { if (self.params.convCookie) self.setCookie('ch_ko_i_c', ''); } self.strategiesTimer(); return this; }; ChatusLauncher.prototype.checkStrategy = function(strategy) { var self = this; var isOk = true; var kind = strategy[0]; var operator = strategy[1]; var value = strategy[2]; var wrc = strategy[3]; var cdc = strategy[4]; if (kind == 1) { // 1 : URL if (!window.location.href.match(value)) isOk = false; } else if (kind == 2) { // 2 : Time on page if (operator == 1) { if (self.params.totalTime <= parseInt(value, 10)) isOk = false; } else if (operator == 2) { if (self.params.totalTime < parseInt(value, 10)) isOk = false; } } else if (kind == 3) { // 3 : Scroll var wantedHeight; if (value.match('%')) { value = value.replace('%', ''); value = parseInt(value); wantedHeight = (document.body.scrollHeight - document.documentElement.clientHeight) * value / 100; } else { value = value.replace('px', ''); value = parseInt(value); wantedHeight = value; } if (operator == 1) { if (window.pageYOffset <= wantedHeight) isOk = false; } else if (operator == 2) { if (window.pageYOffset < wantedHeight) isOk = false; } else if (operator == 3) { if (window.pageYOffset >= wantedHeight) isOk = false; } else if (operator == 4) { if (window.pageYOffset > wantedHeight) isOk = false; } } else if (kind == 4) { // 4 : Calendar WRC isOk = operator == 6 ? self.checkWrc(wrc) : !self.checkWrc(wrc); } else if (kind == 5) { // 5 : Calendar CDC isOk = operator == 8 ? self.checkCdc(cdc) : !self.checkCdc(cdc); } else { return true; } return isOk; }; ChatusLauncher.prototype.checkStrategies = function() { var self = this; var isOk = false; // no strategies : show btn if (self.params.strategiesPop.length === 0 && self.params.strategiesBtn.length === 0) return 1; var strategies = {}; // Check strategies d'ouverture de la popup if (self.params.strategiesPop.length > 0) { //strategiesPop contain all conditions of all chat opening strategies self.params.strategiesPop.forEach(function (s) { if (strategies['s-' + s[6]] === null || strategies['s-' + s[6]] === undefined) strategies['s-' + s[6]] = true; // s[6] is chatStrategyId strategies['s-' + s[6]] = strategies['s-' + s[6]] && self.checkStrategy(s); // check if all conditions for a strategy are OK }); Object.keys(strategies).forEach(function (key) { if (strategies[key]) isOk = true; }); if (isOk) return 2; } var strategies = {}; isOk = false; if (self.params.strategiesBtn.length === 0) isOk = true; self.params.strategiesBtn.forEach(function (s) { // strategiesBtn contain all conditions of all chat btn display strategies if (strategies['s-' + s[6]] === null || strategies['s-' + s[6]] === undefined) strategies['s-' + s[6]] = true; // s[6] is chatStrategyId strategies['s-' + s[6]] = strategies['s-' + s[6]] && self.checkStrategy(s); // check if all conditions for a strategy are OK }); Object.keys(strategies).forEach(function (key) { if (strategies[key]) isOk = true; }); // check strategies de bouton return isOk ? 1 : 0; }; ChatusLauncher.prototype.strategiesTimer = function() { var self = this; var c = self.params.container.frameContainer; if (c.style.display !== 'none' && c.style.display !== '') { return self.initStrategiesTimer(); } var b = self.params.container.startBtn; var strategiesLvl = self.checkStrategies(); if (strategiesLvl === 1) { //self.showOpenBtn(); b.style.display = 'block'; } else if (strategiesLvl === 2) { if (self.params.alreadyInitied) { b.style.display = 'block'; } else { b.style.display = 'block'; //c.style.display = 'block'; self.open(); } self.params.alreadyInitied = true; } else { b.style.display = 'none'; c.style.display = 'none'; } self.initStrategiesTimer(); }; ChatusLauncher.prototype.initStrategiesTimer = function() { var self = this; setTimeout(function () { self.params.totalTime += self.params.strategyRefresher; self.strategiesTimer(); }, self.params.strategyRefresher * 1000); }; ChatusLauncher.prototype.checkCdc = function(cdcId) { var self = this; var cdc = self.params.cdc['c-' + cdcId]; var today = new Date(); var year = today.getFullYear(); var month = today.getMonth() + 1; if (month < 10) month = '0' + month; var day = today.getDate(); if (day < 10) day = '0' + day; var todayFormat = year + '-' + month + '-' + day; if (!cdc || cdc.indexOf(todayFormat) !== -1) { return false; } return true; }; ChatusLauncher.prototype.checkWrc = function(wrcId) { var self = this; var today = new Date(); var dayOfWeek = today.getDay(); dayOfWeek = (dayOfWeek === 0 ? 7 : dayOfWeek); var hour = today.getTime(); var itsClosed = true; var wrc = self.params.wrc['c-' + wrcId]; wrc[dayOfWeek].forEach(function(e) { if (!itsClosed) return; var startDate = new Date(); startDate.setHours(e.startDate.split(':')[0], e.startDate.split(':')[1], 0); var endDate = new Date(); endDate.setHours(e.endDate.split(':')[0], e.endDate.split(':')[1], 59); if (today.getTime() >= startDate.getTime() && today.getTime() <= endDate.getTime()) { itsClosed = false; } }); if (itsClosed) { return false; } return true; }; ChatusLauncher.prototype.initStrategiesCalendars = function() { var self = this; var cdc = "250331_2024-01-01,250331_2024-04-01,250331_2024-05-01,250331_2024-05-08,250331_2024-05-09,250331_2024-05-20,250331_2024-07-14,250331_2024-08-15,250331_2024-11-01,250331_2024-11-11,250331_2024-12-25"; var wrc = ""; if (cdc === '') { cdc = []; } else { cdc = cdc.split(','); } cdc.forEach(function (r) { var cdcId = r.split('_')[0]; if (!self.params.cdc['c-' + cdcId]) self.params.cdc['c-' + cdcId] = []; self.params.cdc['c-' + cdcId].push(r.split('_')[1]) }); if (wrc === '') { wrc = []; } else { wrc = wrc.split('|'); } wrc.forEach(function (r) { var wrcId = r.split('_')[0]; var day = r.split('_')[1]; var hours = r.split('_')[2]; if (!self.params.wrc['c-' + wrcId]) self.params.wrc['c-' + wrcId] = [ [],[],[],[],[],[],[],[] ]; self.params.wrc['c-' + wrcId][day].push({ startDate: hours.split('-')[0], endDate: hours.split('-')[1], }); }); return this; }; ChatusLauncher.prototype.initStrategies = function() { var self = this; var strategiesPop = ""; var strategiesBtn = "4|6|null|251127|null|0|41,5|8|null|null|250331|0|41"; if (strategiesPop === '') { strategiesPop = []; } else { strategiesPop = strategiesPop.split(','); } if (strategiesBtn === '') { strategiesBtn = []; } else { strategiesBtn = strategiesBtn.split(','); } for (var i = strategiesPop.length - 1; i >= 0; i--) { strategiesPop[i] = strategiesPop[i].split('|'); } for (var i = strategiesBtn.length - 1; i >= 0; i--) { strategiesBtn[i] = strategiesBtn[i].split('|'); } self.params.strategiesPop = strategiesPop; self.params.strategiesBtn = strategiesBtn; self.initStrategiesCalendars(); return this; }; ChatusLauncher.prototype.getCookie = function(key) { var re = new RegExp('(?:(?:^|.*;\\s*)' + key + '\s*\=\\s*([^;]*).*$)|^.*$', ""); return document.cookie.replace(re, "$1") || null; }; ChatusLauncher.prototype.setCookie = function(cname, cvalue, exdays) { if (!exdays) exdays = 30; var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; }; ChatusLauncher.prototype.open = function() { var self = this; if (self.params.firtOpen === true) { self.params.open = true; self.params.firtOpen = false; self.params.alreadyInitied = true; self.showCloseBtn(); self.params.convCookie = self.getCookie('ch_ko_i_c'); if (self.params.convCookie) { try { self.params.convCookie = JSON.parse(self.params.convCookie); } catch (err) { self.params.convCookie = null; } } self.params.userCookie = self.getCookie('ch_ko_i_uc'); if (self.params.userCookie) { try { self.params.userCookie = JSON.parse(self.params.userCookie); } catch (err) { self.params.userCookie = null; } } if (!self.params.container.frame) { self.params.container.frame = document.createElement('iframe'); self.params.container.frame.src = 'https://legimedia.ino.cx/r/c/cf/' + self.params.initData.jz + '/' + self.params.initData.oi + '/1'; if (self.params.userCookie && self.params.userCookie.uc) self.params.container.frame.src = 'https://legimedia.ino.cx/r/c/cf/' + self.params.initData.jz + '/' + self.params.initData.oi + '/1/' + self.params.userCookie.uc; self.params.container.frame.src += '?url=' + btoa(window.location.href); self.params.container.frame.className = 'ch_ko_frame'; self.params.container.frame.name = 'ch_ko_frame'; } self.params.container.frameContainer.appendChild(self.params.container.frame); self.params.container.frameContainer.style.display = ''; self.params.callback.onOpen(); } else { if (self.params.open === true) { self.params.open = false; self.params.container.frameContainer.classList.remove('ch_ko_fadeIn'); self.params.container.frameContainer.classList.add('ch_ko_fadeOut'); self.showOpenBtn(); } else { self.params.open = true; self.params.container.frameContainer.style.display = ''; self.params.container.frameContainer.classList.remove('ch_ko_fadeOut'); self.params.container.frameContainer.classList.add('ch_ko_fadeIn'); self.showCloseBtn(); } } }; // ChatusLauncher.prototype.onPageVisibilyChange = function(e){ // var visibility = 'none'; // if ({focus:1, pageshow:1}[e.type]) visibility = 'shown'; // this.sendToFrame('visibility', visibility); // }; ChatusLauncher.prototype.showCloseBtn = function() { var self = this; self.params.container.openStateBtn.classList.remove('ch_ko_fadeIn'); self.params.container.openStateBtn.classList.add('ch_ko_fadeOut'); self.params.container.closeStateBtn.classList.remove('ch_ko_fadeOut'); self.params.container.closeStateBtn.classList.add('ch_ko_fadeIn'); }; ChatusLauncher.prototype.showOpenBtn = function() { var self = this; self.params.container.openStateBtn.classList.remove('ch_ko_fadeOut'); self.params.container.openStateBtn.classList.add('ch_ko_fadeIn'); self.params.container.closeStateBtn.classList.remove('ch_ko_fadeIn'); self.params.container.closeStateBtn.classList.add('ch_ko_fadeOut'); }; ChatusLauncher.prototype.close = function() { this.params.callback.onClose(); }; ChatusLauncher.prototype.onFrameReady = function(data) { var self = this; self.cuc(data); var conv = self.getCookie('ch_ko_i_c'); self.params.frameReady = true; if (conv) { try { conv = JSON.parse(conv); self.sendToFrame('reloadOne', conv); } catch (err) { self.sendToFrame('initChat'); } } else { self.sendToFrame('initChat'); } }; ChatusLauncher.prototype.cuc = function(d) { var self = this; self.setCookie('ch_ko_i_uc', JSON.stringify(d)); }; ChatusLauncher.prototype.sendToFrame = function(message, data) { var self = this; if (!self.params.container.frame) return; var params = { message: message, data: data || {} }; window.frames['ch_ko_frame'].postMessage(params, '*'); }; ChatusLauncher.prototype.onFrameMessage = function(event) { var self = this; if (!event.data.message) return; switch (event.data.message) { case 'onReady': self.onFrameReady(event.data.data || null); break; case 'onCloseRequest': self.close(); break; case 'onSetUserCookie': self.onConnected(event.data.data || null); break; case 'onConnected': self.onConnected(event.data.data || null); break; case 'onEnd': self.onEnd(event.data.data || null); break; case 'onRecoError': self.onRecoError(event.data.data || null); break; case 'setCurrentSession': self.onSetCurrentSession(event.data.data || null); break; case 'cuc': self.cuc(event.data.data || null); break; default: break; } }; ChatusLauncher.prototype.onSetCurrentSession = function(data) { this.setCookie('ch_ko_i_c', JSON.stringify(data)); }; ChatusLauncher.prototype.onSetUserCookie = function(data) { this.setCookie('ch_ko_i_c', JSON.stringify(data)); }; ChatusLauncher.prototype.onConnected = function(data) { this.params.callback.onConnected(); }; ChatusLauncher.prototype.onEnd = function(data) { this.setCookie('ch_ko_i_c', ''); this.params.callback.onEnd(); }; ChatusLauncher.prototype.onRecoError = function(data) { this.setCookie('ch_ko_i_c', ''); this.params.callback.onRecoError(); };