'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_2025-01-01,250331_2025-04-21,250331_2025-05-01,250331_2025-05-08,250331_2025-05-29,250331_2025-06-09,250331_2025-07-14,250331_2025-08-15,250331_2025-11-01,250331_2025-11-11,250331_2025-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();
};