{"id":449,"date":"2025-01-13T22:54:57","date_gmt":"2025-01-13T22:54:57","guid":{"rendered":"https:\/\/escaladepetitenation.ca\/?page_id=449"},"modified":"2025-01-14T00:15:13","modified_gmt":"2025-01-14T00:15:13","slug":"ice-gear-rentals","status":"publish","type":"page","link":"https:\/\/escaladepetitenation.ca\/en\/ice-gear-rentals\/","title":{"rendered":"Ice Gear Rentals"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div style=\"height:150px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"gb-headline gb-headline-3c2454f0 gb-headline-text\">Please Use The Form Below To Rent Ice Gear!<\/h2>\n\n\n\n<h4 class=\"gb-headline gb-headline-317d9760 gb-headline-text\">$20\/day ice boots, $20\/day ice axes, $20\/day crampons<\/h4>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Note: Gear is available for pickup between 8pm and 11pm the day before your rental. Please bring gear back by 8pm on your rental day.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">For long term rentals (more than 3 days) please email us for the best price!<\/p>\n\n\n\n    <div id=\"shoe-rental-wrapper\">\n        <h1>Rent Ice Climbing Gear<\/h1>\n        <form id=\"shoe-rental-form\">\n            <label for=\"shoe\">Select Boot:<\/label>\n            <select id=\"shoe\" name=\"shoe\" required>\n                <option value=\"\">-- Select Your Boot --<\/option>\n                                    <option value=\"1\">Viva soft Lady, Mauve (Number F5) (Size: EU 37)<\/option>\n                                    <option value=\"2\">Kayland, Gris\/Rouge (Number M11) (Size: EU 38)<\/option>\n                                    <option value=\"4\">Scarpa Mont Blanc, Vert olive (Number F16) (Size: EU 38)<\/option>\n                                    <option value=\"5\">Scarpa, Noir\/Or (Number M7) (Size: EU 39)<\/option>\n                                    <option value=\"6\">Sportiva Nepal Evo, Vert (Number F11) (Size: EU 39)<\/option>\n                                    <option value=\"7\">Scarpa Mont Blanc, Bleu (Size: EU 39)<\/option>\n                                    <option value=\"8\">Koflach, Gris\/Vert (Number M6) (Size: EU 40)<\/option>\n                                    <option value=\"9\">Viva Soft Lady, Mauve (Number F4) (Size: EU 40)<\/option>\n                                    <option value=\"10\">Scarpa Tombo, Jaune (Number F12) (Size: EU 40)<\/option>\n                                    <option value=\"11\">Koflach, Gris\/Orange\/Bleu (Number M8) (Size: EU 41)<\/option>\n                                    <option value=\"12\">Kayland, Gris\/Rouge (Number M10) (Size: EU 41)<\/option>\n                                    <option value=\"13\">Lowa, Noir\/Jaune (Number F3) (Size: EU 41)<\/option>\n                                    <option value=\"14\">Sportiva, Noir (Number HA257) (Size: EU 41.5)<\/option>\n                                    <option value=\"15\">Asolo AFS 101, Gris\/Orange (Number M4) (Size: EU 42)<\/option>\n                                    <option value=\"16\">Scarpa Matterhorn, Jaune (Number F17) (Size: EU 42)<\/option>\n                                    <option value=\"17\">Koflach Soft Lite, Blanc\/vert (Number F13) (Size: EU 42)<\/option>\n                                    <option value=\"18\">Salomon, Noir (Number F10) (Size: EU 42)<\/option>\n                                    <option value=\"19\">Koflach Degree, Rouge (Number F14) (Size: EU 42)<\/option>\n                                    <option value=\"20\">Gronel, Bleu\/Jaune (Size: EU 42.5)<\/option>\n                                    <option value=\"22\">Lowa (Number M9) (Size: EU 43)<\/option>\n                                    <option value=\"23\">Zamberlan, Jaune (Number F1) (Size: EU 43)<\/option>\n                                    <option value=\"24\">Koflach, Rouge vin (Number F6) (Size: EU 43)<\/option>\n                                    <option value=\"25\">Salomon (Number F9) (Size: EU 43)<\/option>\n                                    <option value=\"26\">Merrell, Noir (Number M2) (Size: EU 44)<\/option>\n                                    <option value=\"27\">Scarpa, Noire (Number F18) (Size: EU 44)<\/option>\n                                    <option value=\"28\">Koflach, Jaune (Number M1) (Size: EU 45)<\/option>\n                                    <option value=\"29\">Koflach, Orange (Number F15) (Size: EU 45)<\/option>\n                                    <option value=\"30\">Sportiva jaune\/vert\/rouge (Number S3) (Size: EU 43)<\/option>\n                                    <option value=\"31\">Sportiva Jaune, vert rouge (Size: 43)<\/option>\n                                    <option value=\"32\">Sportiva EVO jaune (S4) (Size: 42)<\/option>\n                                    <option value=\"33\">Viva Soft Koflach (Size: 42)<\/option>\n                                    <option value=\"34\">Sportiva EVO jaune (S6) (Size: 42)<\/option>\n                                    <option value=\"35\">M4 (Size: 42)<\/option>\n                                    <option value=\"36\">Kayland Gris\/beige (Number S7) (Size: S7)<\/option>\n                                    <option value=\"37\">Vasque Skywalk ( Number S8) (Size: 40)<\/option>\n                                    <option value=\"38\">m1 (Size: EU 43)<\/option>\n                            <\/select>\n\n            <label for=\"reservation-date\">Reservation Date:<\/label>\n            <input type=\"date\" id=\"reservation-date\" name=\"reservation_date\" required>\n\n            <label for=\"name\">Your Name:<\/label>\n            <input type=\"text\" id=\"name\" name=\"name\" placeholder=\"Enter your name\" required>\n\n            <label for=\"phone\">Your Phone:<\/label>\n            <input type=\"tel\" id=\"phone\" name=\"phone\" placeholder=\"Enter your phone number\" required>\n\n            <div class=\"checkbox-wrapper\">\n                <input type=\"checkbox\" id=\"ice-axe\" name=\"ice_axe\">\n                <label for=\"ice-axe\">Rent Ice Axes<\/label>\n            <\/div>\n\n            <div class=\"checkbox-wrapper\">\n                <input type=\"checkbox\" id=\"crampon\" name=\"crampon\">\n                <label for=\"crampon\">Rent Crampons<\/label>\n            <\/div>\n\n            <button type=\"submit\">Reserve Now<\/button>\n        <\/form>\n\n        <div id=\"response-message\" style=\"display:none;\"><\/div>\n\n        <script>\n            const translations = {\"invalid_phone\":\"Please enter a valid phone number.\",\"reservation_success\":\"Reservation successful!\",\"unknown_error\":\"An unknown error occurred.\",\"request_error\":\"There was an error processing your request. Please try again.\"};\n\n            function refreshReservationsTable() {\n                \/\/ Fetch updated reservations from the server\n                fetch('\/wp-admin\/admin-ajax.php?action=fetch_reservations')\n                    .then(response => response.json())\n                    .then(data => {\n                        console.log(data); \/\/ Debugging: Inspect the response\n\n                        const tableBody = document.getElementById('reservation-table-body');\n\n                        \/\/ Clear existing rows\n                        tableBody.innerHTML = '';\n\n                        if (data.success && data.data.reservations.length > 0) {\n                            \/\/ Render each reservation as a table row\n                            data.data.reservations.forEach(row => {\n                                const tr = document.createElement('tr');\n                                tr.innerHTML = `\n                        <td>${row.shoe_name}<\/td>\n                        <td>${row.shoe_size}<\/td>\n                        <td>${row.reservation_date}<\/td>\n                    `;\n                                tableBody.appendChild(tr);\n                            });\n                        } else {\n                            \/\/ Display a message if no reservations exist\n                            const tr = document.createElement('tr');\n                            tr.innerHTML = `\n                    <td colspan=\"3\" style=\"text-align: center;\">No boots have been rented yet.<\/td>\n                `;\n                            tableBody.appendChild(tr);\n                        }\n                    })\n                    .catch(error => {\n                        console.error('Error fetching reservations:', error);\n                    });\n            }\n\n            document.getElementById('shoe-rental-form').addEventListener('submit', function (e) {\n                e.preventDefault();\n\n                const phoneInput = document.getElementById('phone').value.trim();\n\n                \/\/ Validate phone number\n                const phoneRegex = \/^\\+?[0-9\\s\\-()]{7,}$\/;\n                if (!phoneRegex.test(phoneInput)) {\n                    const messageDiv = document.getElementById('response-message');\n                    messageDiv.style.display = 'block';\n                    messageDiv.className = 'error-message';\n                    messageDiv.innerHTML = translations.invalid_phone;\n                    return; \/\/ Stop form submission\n                }\n\n                \/\/ Submit form if phone number is valid\n                const formData = new FormData(this);\n                formData.append('action', 'shoe_rental_submit');\n\n                fetch('https:\/\/escaladepetitenation.ca\/wp-admin\/admin-ajax.php', {\n                    method: 'POST',\n                    body: formData,\n                })\n                    .then(response => response.json())\n                    .then(data => {\n                        const messageDiv = document.getElementById('response-message');\n                        messageDiv.style.display = 'block';\n\n                        if (data.success) {\n                            messageDiv.className = 'success-message';\n                            messageDiv.innerHTML = data.data.message || translations.reservation_success;\n                            this.reset();\n\n                            \/\/ Refresh the reservations table\n                            refreshReservationsTable();\n                        } else {\n                            messageDiv.className = 'error-message';\n                            messageDiv.innerHTML = data.data?.message || translations.unknown_error;\n                        }\n                    })\n                    .catch(error => {\n                        const messageDiv = document.getElementById('response-message');\n                        messageDiv.style.display = 'block';\n                        messageDiv.className = 'error-message';\n                        messageDiv.innerHTML = translations.request_error;\n                        console.error('Error:', error);\n                    });\n            });\n        <\/script>\n    <\/div>\n    \n\n\n    <div id=\"rented-shoes-wrapper\">\n        <h2>Current Reservations<\/h2>\n        <table>\n            <thead>\n            <tr>\n                <th>Boot Name<\/th>\n                <th>Size<\/th>\n                <th>Rented Date<\/th>\n            <\/tr>\n            <\/thead>\n            <tbody id=\"reservation-table-body\">\n                                                <tr>\n                        <td>Sportiva Nepal Evo, Vert (Number F11)<\/td>\n                        <td>EU 39<\/td>\n                        <td>February 22, 2026<\/td>\n                    <\/tr>\n                                    <tr>\n                        <td>Scarpa Matterhorn, Jaune (Number F17)<\/td>\n                        <td>EU 42<\/td>\n                        <td>February 22, 2026<\/td>\n                    <\/tr>\n                                    <tr>\n                        <td>Koflach, Gris\/Orange\/Bleu (Number M8)<\/td>\n                        <td>EU 41<\/td>\n                        <td>February 26, 2026<\/td>\n                    <\/tr>\n                                    <tr>\n                        <td>Zamberlan, Jaune (Number F1)<\/td>\n                        <td>EU 43<\/td>\n                        <td>February 28, 2026<\/td>\n                    <\/tr>\n                                    <tr>\n                        <td>Koflach, Gris\/Vert (Number M6)<\/td>\n                        <td>EU 40<\/td>\n                        <td>March 29, 2026<\/td>\n                    <\/tr>\n                                    <tr>\n                        <td>Salomon, Noir (Number F10)<\/td>\n                        <td>EU 42<\/td>\n                        <td>April 17, 2026<\/td>\n                    <\/tr>\n                                        <\/tbody>\n        <\/table>\n    <\/div>\n    \n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Please Use The Form Below To Rent Ice Gear! $20\/day ice boots, $20\/day ice axes, $20\/day crampons Note: Gear is available for pickup between 8pm and 11pm the day before your rental. Please bring gear back by 8pm on your rental day. For long term rentals (more than 3 days) please email us for the &#8230; <a title=\"Ice Gear Rentals\" class=\"read-more\" href=\"https:\/\/escaladepetitenation.ca\/en\/ice-gear-rentals\/\" aria-label=\"Read more about Ice Gear Rentals\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-449","page","type-page","status-publish"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/pages\/449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/comments?post=449"}],"version-history":[{"count":7,"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/pages\/449\/revisions"}],"predecessor-version":[{"id":464,"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/pages\/449\/revisions\/464"}],"wp:attachment":[{"href":"https:\/\/escaladepetitenation.ca\/en\/wp-json\/wp\/v2\/media?parent=449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}