document.addEventListener('DOMContentLoaded', function() {
const chatWidget = document.getElementById('masar-chat-widget');
const chatToggle = document.getElementById('masar-chat-toggle');
const chatClose = document.getElementById('masar-chat-close');
const chatForm = document.getElementById('masar-chat-form');
const chatInput = document.getElementById('masar-chat-input');
const chatMessages = document.getElementById('masar-chat-messages');
if (!chatWidget) return;
// Toggle Chat
function toggleChat() {
if (chatWidget.classList.contains('d-none')) {
chatWidget.classList.remove('d-none');
setTimeout(() => chatInput.focus(), 100);
} else {
chatWidget.classList.add('d-none');
}
}
chatToggle.addEventListener('click', toggleChat);
chatClose.addEventListener('click', toggleChat);
// Send Message
chatForm.addEventListener('submit', function(e) {
e.preventDefault();
const message = chatInput.value.trim();
if (!message) return;
// Add User Message
addMessage(message, 'user');
chatInput.value = '';
// Show Typing Indicator
const typingId = addTypingIndicator();
// Send to Backend
fetch('/ajax/chatbot/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': getCookie('csrftoken')
},
body: JSON.stringify({
message: message,
language: document.documentElement.lang || 'en'
})
})
.then(response => response.json())
.then(data => {
removeMessage(typingId);
if (data.success) {
addMessage(data.response, 'bot');
} else {
addMessage('Sorry, I encountered an error.', 'bot');
}
})
.catch(error => {
removeMessage(typingId);
addMessage('Sorry, connection error.', 'bot');
console.error('Error:', error);
});
});
function addMessage(text, sender) {
const div = document.createElement('div');
div.className = `d-flex mb-3 ${sender === 'user' ? 'justify-content-end' : 'justify-content-start'}`;
const bubble = document.createElement('div');
bubble.className = `p-3 rounded-3 shadow-sm ${sender === 'user' ? 'bg-primary text-white' : 'bg-light text-dark'}`;
bubble.style.maxWidth = '80%';
bubble.style.wordWrap = 'break-word';
// Convert newlines to
for basic formatting
bubble.innerHTML = text.replace(/\n/g, '
');
div.appendChild(bubble);
chatMessages.appendChild(div);
chatMessages.scrollTop = chatMessages.scrollHeight;
return div.id;
}
function addTypingIndicator() {
const id = 'typing-' + Date.now();
const div = document.createElement('div');
div.id = id;
div.className = 'd-flex mb-3 justify-content-start';
div.innerHTML = ""
+ "