(function() {
const scripts = document.getElementsByTagName('script');
let userType = 'guest';
let token = '688845aa31765';
let back_php = 'https://chat.rezpect.xyz/chat/chat_handler.php?prj=hs&lang=ru&user=guest&token=';
const styles = `
#chat-button {
position: fixed;
bottom: 20px;
right: 20px;
width: 60px;
height: 60px;
background: #007bff;
border: none;
border-radius: 50%;
color: white;
font-size: 24px;
cursor: pointer;
z-index: 9999;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
}
#chat-window {
display: none;
position: fixed;
bottom: 90px;
right: 20px;
width: 350px;
height: 400px;
background: white;
border: 1px solid #ccc;
border-radius: 10px;
z-index: 9999;
box-shadow: 0 5px 15px rgba(0,0,0,0.3);
}
#chat-header {
background: #007bff;
color: white;
padding: 15px;
border-radius: 10px 10px 0 0;
font-weight: bold;
}
#chat-messages {
height: 280px;
padding: 10px;
overflow-y: auto;
border-bottom: 1px solid #eee;
}
#chat-input-area {
display: flex;
padding: 10px;
}
#chat-input {
flex: 1;
border: 1px solid #ccc;
padding: 8px;
border-radius: 5px;
outline: none;
}
#chat-send {
margin-left: 5px;
padding: 8px 15px;
background: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
.message {
color: black;
margin-bottom: 10px;
padding: 8px;
border-radius: 5px;
white-space: pre-wrap;
}
.user-message, .guest-message {
background: #e3f2fd;
text-align: right;
}
.manager-message {
background: #f5f5f5;
}
.typing-message {
background: #f0f8ff;
color: #666;
font-style: italic;
}
`;
if (!getCookie('chat_token')) {
document.cookie = "chat_token=" + token;
} else {
token = getCookie('chat_token');
}
const styleSheet = document.createElement('style');
styleSheet.textContent = styles;
document.head.appendChild(styleSheet);
const chatButton = document.createElement('button');
chatButton.id = 'chat-button';
chatButton.innerHTML = 'π¬';
const chatWindow = document.createElement('div');
chatWindow.id = 'chat-window';
chatWindow.innerHTML = `
`;
document.body.appendChild(chatButton);
document.body.appendChild(chatWindow);
const messagesDiv = document.getElementById('chat-messages');
const inputField = document.getElementById('chat-input');
const sendButton = document.getElementById('chat-send');
let lastMessageCount = 0;
let waitingForResponse = false;
let typingTimeout = null;
let typingElement = null;
let typingDots = 0;
let typingInterval = null;
function addMessage(text, type) {
const messageDiv = document.createElement('div');
messageDiv.className = `message ${type}-message`;
messageDiv.textContent = text;
messagesDiv.appendChild(messageDiv);
messagesDiv.scrollTop = messagesDiv.scrollHeight;
return messageDiv;
}
function showTyping() {
if (typingElement) return;
typingElement = addMessage('ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ', 'typing');
typingDots = 0;
typingInterval = setInterval(() => {
typingDots = (typingDots + 1) % 4;
typingElement.textContent = 'ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ' + '.'.repeat(typingDots);
}, 500);
}
function hideTyping() {
if (typingElement) {
typingElement.remove();
typingElement = null;
}
if (typingInterval) {
clearInterval(typingInterval);
typingInterval = null;
}
if (typingTimeout) {
clearTimeout(typingTimeout);
typingTimeout = null;
}
waitingForResponse = false;
}
function parseMessages(data) {
const messages = [];
const lines = data.split('\n');
let currentMessage = null;
for (let line of lines) {
if (line.startsWith('user:(guest) ')) {
if (currentMessage) messages.push(currentMessage);
currentMessage = { type: 'guest', text: line.substring(12) };
} else if (line.startsWith('user: ')) {
if (currentMessage) messages.push(currentMessage);
currentMessage = { type: 'user', text: line.substring(6) };
} else if (line.startsWith('manager: ')) {
if (currentMessage) messages.push(currentMessage);
currentMessage = { type: 'manager', text: line.substring(9) };
} else if (currentMessage && line.trim()) {
currentMessage.text += '\n' + line;
}
}
if (currentMessage) messages.push(currentMessage);
return messages;
}
function loadMessages() {
const headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
fetch(back_php + token + '&action=load', {
method: 'GET',
headers: headers,
})
.then(response => response.text())
.then(data => {
const messages = parseMessages(data);
if (messages.length !== lastMessageCount) {
const hadManagerResponse = messages.length > lastMessageCount &&
messages[messages.length - 1].type === 'manager';
if (hadManagerResponse && waitingForResponse) {
hideTyping();
}
messagesDiv.innerHTML = '';
messages.forEach(msg => {
addMessage(msg.text, msg.type);
});
lastMessageCount = messages.length;
}
})
.catch(error => {
console.error('ΠΡΠΈΠ±ΠΊΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:', error);
});
}
function sendMessage() {
const headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
const message = inputField.value.trim();
if (!message) return;
inputField.value = '';
waitingForResponse = true;
typingTimeout = setTimeout(() => {
if (waitingForResponse) {
showTyping();
}
}, 2000);
fetch(back_php + token, {
method: 'POST',
headers: headers,
body: 'message=' + encodeURIComponent(message) + '&user_type=' + encodeURIComponent(userType)
})
.then(response => response.text())
.then(data => {
loadMessages();
})
.catch(error => {
console.error('ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ:', error);
hideTyping();
});
}
function getCookie(name) {
const nameEQ = name + "=";
const ca = document.cookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length, c.length);
}
}
return null; // Return null if the cookie is not found
}
chatButton.addEventListener('click', function() {
if (chatWindow.style.display === 'none' || chatWindow.style.display === '') {
chatWindow.style.display = 'block';
loadMessages();
} else {
chatWindow.style.display = 'none';
}
});
sendButton.addEventListener('click', sendMessage);
inputField.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
sendMessage();
}
});
document.addEventListener('click', function(e) {
if (!chatWindow.contains(e.target) && e.target !== chatButton) {
chatWindow.style.display = 'none';
}
});
setInterval(function() {
if (chatWindow.style.display === 'block') {
loadMessages();
}
}, 5000);
})();