Source: demavu.footer [edit]
          <!-- content-wrapper ends -->
          <!-- partial:partials/_footer.html -->
          <footer class="footer">
            <div class="d-sm-flex justify-content-center justify-content-sm-between">
              <span class="text-muted d-block text-center text-sm-right d-sm-inline-block">Copyright (c) 2024, 52 Productions, Inc.</span>
            </div>
          </footer>
          <!-- partial -->
        </div>
        <!-- main-panel ends -->
      </div>
      <!-- page-body-wrapper ends -->
    </div>
    <!-- container-scroller -->
    <!-- plugins:js -->
    <script src="/assets/vendors/js/vendor.bundle.base.js"></script>
    <!-- endinject -->
    <!-- Plugin js for this page -->
    <script src="/assets/vendors/chart.js/Chart.min.js"></script>
    <script src="/assets/vendors/progressbar.js/progressbar.min.js"></script>
    <script src="/assets/vendors/jvectormap/jquery-jvectormap.min.js"></script>
    <script src="/assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
    <script src="/assets/vendors/owl-carousel-2/owl.carousel.min.js"></script>
    <!-- End plugin js for this page -->
    <!-- inject:js -->
    <script src="/assets/js/off-canvas.js"></script>
    <script src="/assets/js/hoverable-collapse.js"></script>
    <script src="/assets/js/misc.js"></script>
    <script src="/assets/js/settings.js"></script>
    <script src="/assets/js/todolist.js"></script>
    <!-- endinject -->
    <!-- Custom js for this page -->
    <script src="/assets/js/dashboard.js"></script>

    <script>


        // Wrap the code inside the window.onload function
        window.onload = function() {

           // For each field of class editable, when it changes, enable the saveButton
          const editableFields = document.querySelectorAll('.editable');
          editableFields.forEach(field => {
             // Get the source input and target field elements
             const sourceInput = document.getElementById(field.id);
             const saveBtn = document.getElementById("saveChangesButton");

             // Listen for changes in the source input
             sourceInput.addEventListener('input', function() {
               saveBtn.disabled = false;
             });
           });

          // For each field of class "imgtext", changing it will update the src of an image with the same id, but txtIDNAME --> imgIDNAME
          const imageTexts = document.querySelectorAll('.imgtext');
          imageTexts.forEach(field => {
             // Get the source input and target field elements
             const sourceInput = document.getElementById(field.id);
             const targetField = document.getElementById(field.id.replace("txt","img"));

             // Listen for changes in the source input
             sourceInput.addEventListener('input', function() {
               // Update the attribute of the target field based on the input's value
               const newValue = sourceInput.value;
               targetField.setAttribute('src', newValue);
             });
           });
        };

        function addHtmlBefore(id, html) {
            // Get the button element by its ID
            var addBeforeElement = document.getElementById(id);
            
            // Insert the new HTML content before the button
            addBeforeElement.insertAdjacentHTML('beforebegin', html);
            const saveBtn = document.getElementById("saveChangesButton");
            saveBtn.disabled = false;
        }

        // Function to call the web service
        // Data returned as a json object
        async function callWebService(url) {
           try {
             // Make the network request
             const response = await fetch(url);

             // Check if the request was successful
             if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
             }

             // Get the response
             const data = await response.text();

             // Return the data
             return  data;
           } catch (error) {
              console.error('Error fetching data: ', error);
           }
        }

        function addObject(category) {
           var name = prompt("New " + category.slice(0, -1) + "'s name:", "");

           // Check if the user clicked "OK" and entered something
           if (name !== null) {
              var server = "staging";
              const url = '/site/addRecord(' + server + "," + category + ',' + btoa(removeNonAsciiCharacters(name)) + ')';

              callWebService(url)
                .then(data => {
                  // Handle the data from the web service
                  console.log('Received data:', data);
                  location.reload();
                })
                .catch(error => {
                  // Handle errors
                  console.error('Error calling web service:', error);
                });
           }
        }

        function removeNonAsciiCharacters(inputString) {
          // Replace non-ASCII characters with an empty string
          const asciiString = inputString.replace(/[^\x00-\x7F]/g, '');

          return asciiString;
        }

       function pushToProduction() {
          if (confirm("Are you sure?  This may take a minute or two...")) {
             const url = '/site/copyDB:staging,production';

              callWebService(url)
                .then(data => {
                  // Handle the data from the web service
                  console.log('Received data:', data);
                  alert("Staging has been pushed to production.");
                })
                .catch(error => {
                  // Handle errors
                  console.error('Error calling web service:', error);
                });
          }
       }

       function saveEditableFields() {
          const editableFields = document.querySelectorAll('.editable');

          // Iterate over each field
          editableFields.forEach(field => {
            // Get the ID of the field
            const fieldId = field.id;

            const metaData = field.title;

            // Get the content of the field
            const fieldValue = field.value;
            const server = "staging";

            const url = '/site/updateRecord(' + server + "," + btoa(removeNonAsciiCharacters(metaData)) + "," + btoa(removeNonAsciiCharacters(fieldValue)) + ')';

            callWebService(url)
              .then(data => {
                // Handle the data from the web service
                console.log('title: ', metaData);
                console.log('Value: ', fieldValue);
                console.log('Received data:', data);
                const saveBtn = document.getElementById("saveChangesButton");
                saveBtn.disabled = true;
                location.reload();
              })
              .catch(error => {
                // Handle errors
                console.error('Error calling web service:', error);
              });
        
          });
       }
    </script>

    <!-- End custom js for this page -->
  </body>
</html>