document.addEventListener('DOMContentLoaded', function() {
// Mock data for contacts and messages
const contacts = [
{
id: 1,
name: 'Alex Johnson',
avatar: 'http://static.photos/people/200x200/1',
lastMessage: 'Hey, how are you doing?',
time: '10:30 AM',
messages: [
{ text: 'Hey there!', sent: false, time: '10:20 AM' },
{ text: 'Hey, how are you doing?', sent: false, time: '10:30 AM' },
{ type: 'image', content: 'http://static.photos/minimal/320x240/1', sent: false, time: '10:32 AM' }
]
},
{
id: 2,
name: 'Sarah Miller',
avatar: 'http://static.photos/people/200x200/2',
lastMessage: 'Can we meet tomorrow?',
time: 'Yesterday',
messages: [
{ text: 'Hi Sarah!', sent: true, time: 'Yesterday, 4:20 PM' },
{ type: 'image', content: 'http://static.photos/minimal/320x240/2', sent: true, time: 'Yesterday, 4:22 PM' },
{ text: 'Can we meet tomorrow?', sent: false, time: 'Yesterday, 4:25 PM' },
{ text: 'Sure, what time?', sent: true, time: 'Yesterday, 4:30 PM' }
]
},
{
id: 3,
name: 'Mark Williams',
avatar: 'http://static.photos/people/200x200/3',
lastMessage: 'I sent you the files',
time: 'Tuesday',
messages: [
{ text: 'Did you get the documents?', sent: false, time: 'Tuesday, 11:15 AM' },
{ text: 'Not yet, can you send them again?', sent: true, time: 'Tuesday, 11:30 AM' },
{ text: 'I sent you the files', sent: false, time: 'Tuesday, 11:45 AM' }
]
},
{
id: 4,
name: 'Emily Chen',
avatar: 'http://static.photos/people/200x200/4',
lastMessage: 'Thanks for your help!',
time: 'Monday',
messages: [
{ text: 'I need some advice', sent: false, time: 'Monday, 9:00 AM' },
{ text: 'Of course, what do you need?', sent: true, time: 'Monday, 9:30 AM' },
{ text: 'Thanks for your help!', sent: false, time: 'Monday, 10:15 AM' }
]
},
{
id: 5,
name: 'David Rodriguez',
avatar: 'http://static.photos/people/200x200/5',
lastMessage: 'See you at the meeting',
time: 'Last week',
messages: [
{ text: 'Are we still meeting tomorrow?', sent: true, time: 'Friday, 3:00 PM' },
{ text: 'Yes, at 2 PM', sent: false, time: 'Friday, 3:30 PM' },
{ text: 'See you at the meeting', sent: false, time: 'Friday, 4:00 PM' }
]
}
];
// DOM elements
const contactsList = document.getElementById('contacts-list');
const messagesContainer = document.getElementById('messages-container');
const messageInputContainer = document.getElementById('message-input-container');
const messageForm = document.getElementById('message-form');
const messageInput = document.getElementById('message-input');
const chatHeader = document.getElementById('chat-header');
const activeContactDetails = document.getElementById('active-contact-details');
const themeToggle = document.getElementById('theme-toggle');
// Current selected contact
let currentContact = null;
// Theme toggle functionality
themeToggle.addEventListener('click', function() {
const html = document.querySelector('html');
if (html.classList.contains('light')) {
html.classList.remove('light');
html.classList.add('dark');
feather.replace();
themeToggle.innerHTML = feather.icons['sun'].toSvg();
} else {
html.classList.remove('dark');
html.classList.add('light');
feather.replace();
themeToggle.innerHTML = feather.icons['moon'].toSvg();
}
});
// Render contacts list
function renderContacts() {
contactsList.innerHTML = '';
contacts.forEach(contact => {
const contactItem = document.createElement('div');
contactItem.className = 'contact-item p-4 flex items-center gap-3 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700';
contactItem.dataset.contactId = contact.id;
contactItem.innerHTML = `
${contact.lastMessage}
${message.text}
`; messagesContainer.appendChild(messageElement); }); // Scroll to bottom messagesContainer.scrollTop = messagesContainer.scrollHeight; } // Send new message messageForm.addEventListener('submit', function(e) { e.preventDefault(); const messageText = messageInput.value.trim(); if (!messageText || !currentContact) return; // Add message to current contact const newMessage = { text: messageText, sent: true, time: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) }; currentContact.messages.push(newMessage); currentContact.lastMessage = messageText; currentContact.time = 'Just now'; // Update UI renderMessages(currentContact.messages); renderContacts(); messageInput.value = ''; // Simulate reply after 1-3 seconds setTimeout(() => { const replies = [ "Sounds good!", "I'll get back to you soon.", "Thanks for letting me know.", "Interesting, tell me more.", "Can we talk about this later?" ]; const replyMessage = { text: replies[Math.floor(Math.random() * replies.length)], sent: false, time: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) }; currentContact.messages.push(replyMessage); currentContact.lastMessage = replyMessage.text; currentContact.time = 'Just now'; renderMessages(currentContact.messages); renderContacts(); }, 1000 + Math.random() * 2000); }); // Initialize renderContacts(); feather.replace(); });