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.name}

${contact.name}

${contact.lastMessage}

${contact.time} `; contactItem.addEventListener('click', () => selectContact(contact.id)); contactsList.appendChild(contactItem); }); } // Select a contact to chat with function selectContact(contactId) { currentContact = contacts.find(c => c.id === contactId); if (!currentContact) return; // Update active contact details activeContactDetails.innerHTML = `
${currentContact.name}

${currentContact.name}

`; // Show message input messageInputContainer.classList.remove('hidden'); // Render messages renderMessages(currentContact.messages); } // Render messages for selected contact function renderMessages(messages) { messagesContainer.innerHTML = ''; messages.forEach(message => { const messageElement = document.createElement('div'); messageElement.className = `message-bubble mb-4 p-3 ${ message.sent ? 'sent self-end' : 'received self-start' }`; if (message.type === 'image') { messageElement.innerHTML = ` Shared image ${message.time} `; } else { messageElement.innerHTML = `

${message.text}

${message.time} `; 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(); });