/*===============================================*\
|| ############################################# ||
|| # JAKWEB.CH / Version 2.1.4 # ||
|| # ----------------------------------------- # ||
|| # Copyright 2023 JAKWEB All Rights Reserved # ||
|| ############################################# ||
\*===============================================*/
// Standard vars
var debugme = false;
var myDropzone = false;
var answerconv = "false";
var rllinput = rlsbint = livechat3_popup_window = null;
var utyping = "false";
var title = document.title;
var message = '';
var attSource = '';
var working = livetype = false;
var scrollchat = loadchat = muted = show_notifiy = true;
var jrc_lang = "en";
var ulastmsgid = 0;
var ulastmsg = "";
var opname = ""
var chat_container = document.getElementById("lc_messages");
var uploadbtn = document.getElementById("cUploadDrop");
// We listen for the enter key on the textarea
var msgfield = document.getElementById("lc_chat_msg");
lcjak_loadInput();
lcjak_sseJAK(5000);
// The status on the page
document.addEventListener('visibilitychange', handleVisibilityChange, false);
// We listen for the textarea input
msgfield.addEventListener("keyup", function(event) {
event.preventDefault();
if (event.keyCode === 13) {
document.getElementById("lc_send_msg").click();
}
if (event.which != 13 && utyping == "false") {
lcjak_userTyping();
}
if (msgfield.value.length == 0) {
if (!msgfield.value.trim()) lcjak_userNotTyping();
}
// We call the live text preview
if(event.keyCode != 13) lcjak_livepreview(msgfield.value.trim());
});
// We send the value from the text area
document.getElementById("lc_send_msg").addEventListener("click", function(event){
event.preventDefault();
// Finally we send the message
lcjak_sendMSG(msgfield.value.trim());
});
// Emoticons
document.getElementById("emoticons").addEventListener("click", function() {
// get the button bubble
likeBox = document.getElementById("emoticons_btn");
if (likeBox.style.display === '') {
addCSS(likeBox);
} else {
removeCSS(likeBox);
}
});
function sendEmo(shortcode) {
// get the button bubble
likeBox = document.getElementById("emoticons_btn");
// Add the text to the textarea
var txta = document.getElementById("lc_chat_msg");
txta.value += shortcode+' ';
txta.focus();
// remove the emoticons box
removeCSS(likeBox);
}
function addCSS(lb) {
lb.style.display = 'block';
// add class
if (lb.classList) {
lb.classList.add("animate__fadeInUp");
} else {
lb.className = lb.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
}
function removeCSS(lb) {
// remove class
if (lb.classList) {
lb.classList.remove("animate__fadeInUp");
} else {
lb.className = lb.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
lb.style.display = '';
}
// Let's check if the browser or tab is not active
function handleVisibilityChange() {
if (document.visibilityState == "hidden") {
// Store the latest message ID
sessionStorage.umsgid = ulastmsgid;
// Close the message connection
if (rlsbint) {
clearInterval(rlsbint);
rlsbint = null;
}
} else {
// Bring back the latest message ID
ulastmsgid = sessionStorage.umsgid;
// Bring back the chat messages this time faster
scrollchat = true;
// lcjak_loadInput();
lcjak_sseJAK(5000);
}
}
function lcjak_sseJAK(timer) {
lcjak_setChecker();
if (!rlsbint) rlsbint = setInterval(function(){lcjak_setChecker()}, timer);
}
function lcjak_sendMSG(msg) {
if (working) return false;
working = true;
// Close the message connection
if (rlsbint) {
clearInterval(rlsbint);
rlsbint = null;
}
var loadbtn = document.getElementById("lc_msg_load");
loadbtn.classList.remove("fa-paper-plane");
loadbtn.classList.add("fa-spinner","fa-pulse");
msgfield.classList.remove("error");
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=sendmsg&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 3000;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
loadbtn.classList.remove("fa-spinner","fa-pulse");
loadbtn.classList.add("fa-paper-plane");
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
loadchat = true;
scrollchat = true;
show_notifiy = true;
if (data.html) {
chat_container.insertAdjacentHTML('beforeend', data.html);
msgfield.setAttribute('placeholder', data.placeholder);
ulastmsgid = data.lastid;
ulastmsg = data.lastmsg;
lcjak_scrollBottom();
}
msgfield.value = "";
answerconv = "false";
utyping = "false";
lcjak_sseJAK(5000);
loadbtn.classList.remove("fa-spinner","fa-pulse");
loadbtn.classList.add("fa-paper-plane");
}
} else {
if (debugme) console.log(data.error);
loadbtn.classList.remove("fa-spinner","fa-pulse");
loadbtn.classList.add("fa-paper-plane");
msgfield.value = "";
msgfield.classList.add("error");
msgfield.setAttribute('placeholder', data.error);
}
working = false;
// we load the chatgpt if any
if (data.chatgpt == 1) lcjak_chatgpt(msg);
return true;
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("msg", msg);
formData.append("lastmsg", ulastmsg);
formData.append("lang", jrc_lang);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
}
// Chatbot AI
function lcjak_chatgpt(msg) {
if (working) return false;
working = true;
// Close the message connection
if (rlsbint) {
clearInterval(rlsbint);
rlsbint = null;
}
// AI is thinking
document.getElementById("ai-thinking").style.display = "inline-block";
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=chatgpt&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 0;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
document.getElementById("ai-thinking").style.display = "none";
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
loadchat = true;
scrollchat = true;
show_notifiy = true;
if (data.html) {
document.getElementById("ai-thinking").style.display = "none";
chat_container.insertAdjacentHTML('beforeend', data.html);
lcjak_scrollBottom();
}
msgfield.value = "";
answerconv = "false";
utyping = "false";
lcjak_sseJAK(5000);
}
} else {
if (debugme) console.log(data.error);
msgfield.value = "";
msgfield.classList.add("error");
msgfield.setAttribute('placeholder', data.error);
}
working = false;
return true;
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("msg", msg);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
}
function lcjak_translationAI(msgid) {
if (working) return false;
working = true;
// Close the message connection
if (rlsbint) {
clearInterval(rlsbint);
rlsbint = null;
}
var loadbtn = document.getElementById("lc_msg_load");
loadbtn.classList.remove("fa-paper-plane");
loadbtn.classList.add("fa-spinner","fa-pulse");
msgfield.classList.remove("error");
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=aitranslate&msgid='+msgid+'&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 0;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
loadbtn.classList.remove("fa-spinner","fa-pulse");
loadbtn.classList.add("fa-paper-plane");
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
loadchat = true;
scrollchat = true;
show_notifiy = true;
answerconv = "false";
utyping = "false";
lcjak_sseJAK(5000);
loadbtn.classList.remove("fa-spinner","fa-pulse");
loadbtn.classList.add("fa-paper-plane");
// We will add the translation below
var aitl = document.getElementById("aitranslate"+msgid);
aitl.textContent = data.translation;
aitl.style.display = "block";
}
} else {
if (debugme) console.log(data.error);
loadbtn.classList.remove("fa-spinner","fa-pulse");
loadbtn.classList.add("fa-paper-plane");
}
working = false;
return true;
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("lang", jrc_lang);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
}
function lcjak_loadInput() {
loadchat = true;
lcjak_getInput();
}
function lcjak_getInput() {
if (loadchat) {
// Let's get the current status of the local storage
lcjak_chatstatus = localStorage.getItem('lcjak_chatstatus');
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=getmsg&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 3000;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
if (debugme) console.log(event);
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
if (data.redirecturl) {
if (parent.postMessage) {
parent.postMessage('redirecturl::'+data.redirecturl, cross_url);
}
}
// Same user, same minute just add it after
chat_container.insertAdjacentHTML('beforeend', data.html);
ulastmsgid = data.lastid;
if (scrollchat) {
lcjak_scrollBottom();
}
// Stop loading new answer until we need to do it again
loadchat = false;
return true;
}
} else {
if (debugme) console.log(data.error);
}
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("lang", jrc_lang);
formData.append("lastid", ulastmsgid);
formData.append("chatstatus", lcjak_chatstatus);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
}
}
function lcjak_userTyping() {
utyping = "true";
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=typing&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 3000;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
if (debugme) console.log(event);
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
return true;
}
} else {
if (debugme) console.log(data.error);
}
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("typestatus", 1);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
}
function lcjak_userNotTyping() {
utyping = "false";
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=typing&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 3000;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
if (debugme) console.log(event);
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
return true;
}
} else {
if (debugme) console.log(data.error);
}
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("typestatus", 0);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
}
function lcjak_livepreview(message) {
if (livetype) return false;
livetype = true;
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=livetyping&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 3000;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
if (debugme) console.log(event);
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
livetype = false;
return true;
}
} else {
if (debugme) console.log(data.error);
}
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("msg", message);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
}
function lcjak_setChecker() {
// Let's get the current status of the local storage
lcjak_chatstatus = localStorage.getItem('lcjak_chatstatus');
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
var xhrc = new XMLHttpRequest();
// Call the file to verify and start the process
xhrc.open('POST', base_url+'include/chatdata.php?id='+lcjakwidgetid+'&run=chatupdate&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 5000;
// Some sort of an error, let's redo the send button
xhrc.addEventListener( "error", function( event ) {
if (debugme) console.log(event);
});
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
lcjak_handlemsg(data);
return true;
}
} else {
if (debugme) console.log(data.error);
// Something went terrible wrong, reset data
if (data.action == "notfound") {
if (localStorage.getItem('lcjak_customer')) localStorage.removeItem('lcjak_customer');
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('removedata::0', cross_url);
}
window.location = data.url;
}
}
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("lang", jrc_lang);
formData.append("chatstatus", lcjak_chatstatus);
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
if (opname) formData.append("opname", opname);
// Finally send the data
xhrc.send(formData);
}
function lcjak_handlemsg(data) {
if (data.redirect_c) {
// Close the message requests
if (rlsbint) {
clearInterval(rlsbint);
rlsbint = null;
}
if (data.action == "contactform") {
// Set the local storage to the contactform
localStorage.setItem('lcjak_chatstatus', "contactform");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::contactform', cross_url);
}
// Remove the local storage
if (localStorage.getItem('lcjak_customer')) localStorage.removeItem('lcjak_customer');
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('removedata::0', cross_url);
}
// Redirect to close the chat
window.location = data.contacturl;
} else {
// We reload the location
location.reload();
}
// Redirect for custom contact url
} else if (data.redirect_cu) {
if (data.redirect_cu) {
if (parent.postMessage) {
parent.postMessage('redirecturl::'+data.redirect_cu, cross_url);
return true;
}
}
} else {
// We have an operator, let's show it.
if (data.operator) {
if (opname != data.operator) {
document.getElementById('jaklcb_oname').innerHTML = data.operator;
document.getElementById('jaklcb_oabout').innerHTML = data.aboutme;
document.getElementById('jaklcb_oimage').innerHTML = '';
}
// set the current operator name
opname = data.operator;
}
if (data.knockknock) {
if (data.pushnotify == 1 && Notification.permission==='granted') {
lcjak_dNotifyNew(title, data.knockknock);
} else {
alert(data.knockknock);
}
if (muted) lcjak_playSound(ls_sound+'.webm', ls_sound+'.mp3');
}
// We have a new message
if (data.newmsg == 1) {
scrollchat = true;
lcjak_loadInput();
if (answerconv == "false") {
if (data.pushnotify == 1) lcjak_dNotifyNew(title, data.newmsgtxt);
if (muted) lcjak_playSound(ls_sound+'.webm', ls_sound+'.mp3');
}
}
// Client can upload files
if (data.files == 1) {
// Add a class so it is obvious
uploadbtn.classList.add("active", "animate__rotateIn");
// Activate the upload field
if (!myDropzone) {
Dropzone.autoDiscover = false;
myDropzone = new Dropzone("i#cUploadDrop", { url: base_url+"uploader/uploader.php", acceptedFiles: document.getElementById("allowedFiles").value, dictDefaultMessage: ""});
myDropzone.on("sending", function(file, xhr, formData) {
// Will send the filesize along with the file as POST data.
formData.append("customer", localStorage.getItem('lcjak_customer'));
formData.append("base_url", base_url);
formData.append("lang", lcjak_lang);
});
myDropzone.on("complete", function(file) {
myDropzone.removeAllFiles();
loadchat = true;
scrollchat = true;
lcjak_getInput();
});
}
} else if (data.files == 0) {
// Destroy dropzone
if (myDropzone) {
myDropzone.destroy();
myDropzone = false;
}
// Remove class so it is obvious
uploadbtn.classList.remove("active", "animate__rotateIn");
}
// We have someone typing
if (data.typing != 0) {
document.getElementById("lc_typing").style.display = "block";
} else {
document.getElementById("lc_typing").style.display = "none";
}
// We have a message to delete
if (data.delmsg != 0) {
var delm = document.getElementById("postid_"+data.delmsg);
if (delm.style.display === "none") {
delm.style.display = "block";
} else {
delm.style.display = "none";
}
}
// We have a message to edit
if (data.msgedit != 0) {
document.getElementById("msg"+data.msgedit).innerHTML = data.editmsg;
document.getElementById("edited_"+data.msgedit).innerHTML = data.showedit
}
// We have a name change, we need to make a reload
if (data.datac == 1) {
// Make sure we have the correct client
if (data.customer) localStorage.setItem('lcjak_customer', data.customer);
location.reload();
}
if (data.softended == 1) {
clearInterval(rlsbint);
rlsbint = null;
}
}
}
// Toggle Sound Alert
function lcjak_soundOff() {
if(muted) {
$('#soundoff').html('');
muted = 0;
} else {
$('#soundoff').html('');
muted = 1;
}
return true;
}
function lcjak_scrollBottom() {
chat_container.scrollTop = chat_container.scrollHeight;
// set scrollchat to false
scrollchat = false;
}
function lcjak_playSound(soundfile, soundfile2) {
var sound = new Howl({
src: [base_url+soundfile2, base_url+soundfile]
});
sound.play();
answerconv = "true";
}
function lcjak_dNotifyNew(title, msg) {
// Let's check if the browser supports notifications
if (!("Notification" in window)) {
console.log("This browser does not support notifications.");
}
// Let's check whether notification permissions have alredy been granted
else if (Notification.permission === "granted") {
// If it's okay let's create a notification
var notification = new Notification(title, {icon: base_url + "img/logo.png"}, {body: msg});
}
// Otherwise, we need to ask the user for permission
else if (location.protocol === 'https:' && (Notification.permission !== 'denied' || Notification.permission === "default")) {
Notification.requestPermission(function (permission) {
// If the user accepts, let's create a notification
if (permission === "granted") {
var notification = new Notification(title, {icon: base_url + "img/logo.png"}, {body: msg});
}
});
}
show_notifiy = false;
return true;
// At last, if the user has denied notifications, and you
// want to be respectful there is no need to bother them any more.
}
function getHiddenProp(){
var prefixes = ['webkit','moz','ms','o'];
// if 'hidden' is natively supported just return it
if ('hidden' in document) return 'hidden';
// otherwise loop over all the known prefixes until we find one
for (var i = 0; i < prefixes.length; i++){
if ((prefixes[i] + 'Hidden') in document)
return prefixes[i] + 'Hidden';
}
// otherwise it's not supported
return null;
}
function isHidden() {
var prop = getHiddenProp();
if (!prop) return false;
return document[prop];
}
function lcjak_profile(anim) {
const element = document.querySelector('.lcb_profile');
element.classList.add('animate__animated', 'animate__fadeOut');
element.addEventListener('animationend', () => {
// Replace the current url with the new one /prevent ajax request
let old_url = window.location.href;
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=open";
if (localStorage.getItem('lcjak_chatstatus') == "big") {
searchurl = "lc&sp=big";
}
var repurl = "lc&sp=profile";
if (base_rewrite == 1) {
searchurl = "lc/open";
if (localStorage.getItem('lcjak_chatstatus') == "big") {
searchurl = "lc/big";
}
repurl = "lc/profile";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "profile");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::profile', cross_url);
}
// Redirect to close the chat
window.location = new_url;
});
}
function lcjak_profilebig(anim) {
const element = document.querySelector('.lcb_profile');
element.classList.add('animate__animated', 'animate__fadeOut');
element.addEventListener('animationend', () => {
// Replace the current url with the new one /prevent ajax request
let old_url = window.location.href;
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=big";
var repurl = "lc&sp=bigprofile";
if (base_rewrite == 1) {
searchurl = "lc/big";
repurl = "lc/bigprofile";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "bigprofile");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::bigprofile', cross_url);
}
// Redirect to close the chat
window.location = new_url;
});
}
function lcjak_endchat(anim) {
if (working) return false;
working = true;
// Replace the current url with the new one /prevent ajax request
let old_url = window.location.href;
const element = document.querySelector('.lcb_end');
element.classList.add('animate__animated', 'animate__hinge');
element.addEventListener('animationend', () => {
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
// We set the chat to open
var xhrc = new XMLHttpRequest();
xhrc.open('POST', base_url+'include/chatcontrol.php?id='+lcjakwidgetid+'&run=stopchat&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 3000;
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
if (data.feedbackform == "yes") {
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=open";
var repurl = "lc&sp=feedback";
if (base_rewrite == 1) {
searchurl = "lc/open";
repurl = "lc/feedback";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "feedback");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::feedback', cross_url);
}
// Redirect to close the chat
window.location = new_url;
} else {
// Finally remove the customer storage
if (localStorage.getItem('lcjak_customer')) localStorage.removeItem('lcjak_customer');
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('removedata::0', cross_url);
}
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=open";
var repurl = "lc&sp=closed";
if (base_rewrite == 1) {
searchurl = "lc/open";
repurl = "lc/closed";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "closed");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::closed', cross_url);
}
// Redirect to close the chat
window.location = new_url;
}
}
} else {
if (debugme) console.log(data.error);
}
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
});
}
function lcjak_endchatbig(anim) {
if (working) return false;
working = true;
// Replace the current url with the new one /prevent ajax request
let old_url = window.location.href;
const element = document.querySelector('.lcb_end');
element.classList.add('animate__animated', 'animate__hinge');
element.addEventListener('animationend', () => {
// Get the session
var lcjak_session = "0";
if (localStorage.getItem('lcjak_session')) lcjak_session = localStorage.getItem('lcjak_session');
// Get the customer
var lcjak_customer = "0";
if (localStorage.getItem('lcjak_customer')) lcjak_customer = localStorage.getItem('lcjak_customer');
// We set the chat to open
var xhrc = new XMLHttpRequest();
xhrc.open('POST', base_url+'include/chatcontrol.php?id='+lcjakwidgetid+'&run=stopchat&lang='+lcjak_lang, true);
// time in milliseconds
xhrc.timeout = 3000;
// Request
xhrc.onload = function() {
if (xhrc.status >= 200 && xhrc.status < 400) {
// Success!
var data = JSON.parse(xhrc.responseText);
// We have data
if (data.status) {
if (debugme) {
console.log(data);
} else {
if (data.feedbackform == "yes") {
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=big";
var repurl = "lc&sp=bigfeedback";
if (base_rewrite == 1) {
searchurl = "lc/big";
repurl = "lc/bigfeedback";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "bigfeedback");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::bigfeedback', cross_url);
}
// Redirect to close the chat
window.location = new_url;
} else {
// Finally remove the customer storage
if (localStorage.getItem('lcjak_customer')) localStorage.removeItem('lcjak_customer');
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('removedata::0', cross_url);
}
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=big";
var repurl = "lc&sp=closed";
if (base_rewrite == 1) {
searchurl = "lc/big";
repurl = "lc/closed";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "closed");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::closed', cross_url);
}
// Redirect to close the chat
window.location = new_url;
}
}
} else {
if (debugme) console.log(data.error);
}
} else {
// We reached our target server, but it returned an error
}
};
xhrc.onerror = function() {
// There was a connection error of some sort
};
xhrc.ontimeout = function (e) {
// XMLHttpRequest timed out. Do something here.
};
// Attach Data
var formData = new FormData();
formData.append("rlbid", lcjak_session);
formData.append("customer", lcjak_customer);
// Finally send the data
xhrc.send(formData);
});
}
function lcjak_closechat(anim) {
const element = document.querySelector('.lcb_close');
element.classList.add('animate__animated', 'animate__rotateOut');
element.addEventListener('animationend', () => {
// Replace the current url with the new one /prevent ajax request
let old_url = window.location.href;
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=open";
if (localStorage.getItem('lcjak_chatstatus') == "big") {
searchurl = "lc&sp=big";
}
var repurl = "lc&sp=closed";
if (base_rewrite == 1) {
searchurl = "lc/open";
if (localStorage.getItem('lcjak_chatstatus') == "big") {
searchurl = "lc/big";
}
repurl = "lc/closed";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "closed");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::closed', cross_url);
}
// Redirect to close the chat
window.location = new_url;
});
}
function lcjak_bigchat(anim) {
const element = document.querySelector('.jaklcb_maximise');
element.classList.add('animate__animated', 'animate__slideOutUp');
element.addEventListener('animationend', () => {
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "big");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::big', cross_url);
}
// Replace the current url with the new one /prevent ajax request
let old_url = window.location.href;
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=open";
var repurl = "lc&sp=big";
if (base_rewrite == 1) {
searchurl = "lc/open";
repurl = "lc/big";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Redirect to big chat
window.location = new_url;
});
}
function lcjak_smallchat(anim) {
const element = document.querySelector('.jaklcb_minimize');
element.classList.add('animate__animated', 'animate__slideOutDown');
element.addEventListener('animationend', () => {
// Set the local storage to closed
localStorage.setItem('lcjak_chatstatus', "open");
// We also need to send the customer data to the other domain if
if (cross_url && parent.postMessage) {
parent.postMessage('chatstatus::open', cross_url);
}
// Replace the current url with the new one /prevent ajax request
let old_url = window.location.href;
// Let us check if we have rewrite enabled
var searchurl = "lc&sp=big";
var repurl = "lc&sp=open";
if (base_rewrite == 1) {
searchurl = "lc/big";
repurl = "lc/open";
}
let new_url = old_url.replace(searchurl, repurl);
if (debugme) console.log(new_url);
// Redirect to big chat
window.location = new_url;
});
}