scripts.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /* scripts.js */
  2. document.addEventListener('DOMContentLoaded', () => {
  3. const flyout = document.getElementById('contact-flyout');
  4. const closeBtn = document.getElementById('closeFlyout');
  5. const form = document.getElementById('contactForm');
  6. const contactNav = document.getElementById('ContactMenu');
  7. const submitBtn = form.querySelector('.submit-btn');
  8. const btnText = submitBtn.querySelector('.btn-text');
  9. const btnSpinner = submitBtn.querySelector('.btn-spinner');
  10. const modal = document.getElementById('formModal');
  11. const modalMsg = document.getElementById('formModalMessage');
  12. closeBtn.addEventListener('click', () => {
  13. flyout.style.display = 'none';
  14. });
  15. form.addEventListener('submit', e => {
  16. e.preventDefault();
  17. btnText.style.display = 'none';
  18. btnSpinner.style.display = 'inline-block';
  19. flyout.classList.add('wiggle');
  20. setTimeout(() => flyout.classList.remove('wiggle'), 600);
  21. const formData = new FormData(form);
  22. fetch(form.action, {
  23. method: 'POST',
  24. body: formData
  25. })
  26. .then(response => response.text())
  27. .then(result => {
  28. if (result.trim() === "OK") {
  29. form.reset();
  30. showModal("✅ Thanks! We’ll be in touch shortly.");
  31. } else {
  32. showModal("❌ Error: " + result);
  33. }
  34. })
  35. .catch(() => {
  36. showModal("❌ Failed to send message. Please try again.");
  37. })
  38. .finally(() => {
  39. btnText.style.display = 'inline';
  40. btnSpinner.style.display = 'none';
  41. });
  42. });
  43. function showModal(message) {
  44. modalMsg.textContent = message;
  45. modal.classList.remove('hidden');
  46. setTimeout(() => {
  47. modal.classList.add('hidden');
  48. }, 4000);
  49. }
  50. document.querySelectorAll('a[href^="#"]').forEach(anchor => {
  51. anchor.addEventListener('click', function (e) {
  52. e.preventDefault();
  53. const target = document.querySelector(this.getAttribute('href'));
  54. if (target) {
  55. target.scrollIntoView({ behavior: 'smooth' });
  56. }
  57. });
  58. });
  59. contactNav.addEventListener('click', (e) => {
  60. e.preventDefault();
  61. if (flyout.style.display === 'none' || flyout.style.display === '') {
  62. flyout.style.display = 'block';
  63. } else {
  64. flyout.classList.remove('wiggle');
  65. void flyout.offsetWidth;
  66. flyout.classList.add('wiggle');
  67. }
  68. });
  69. });