{"id":3685,"date":"2026-05-15T12:24:08","date_gmt":"2026-05-15T11:24:08","guid":{"rendered":"https:\/\/new2.flyovertheworld.com\/reserva-confirmada\/"},"modified":"2026-06-10T08:07:07","modified_gmt":"2026-06-10T07:07:07","slug":"reserva-confirmada","status":"publish","type":"page","link":"https:\/\/flyovertheworld.com\/es\/reserva-confirmada\/","title":{"rendered":"Reserva confirmada"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3685\" class=\"elementor elementor-3685 elementor-2842\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-72a4c13d e-flex e-con-boxed e-con e-parent\" data-id=\"72a4c13d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fd18303 elementor-widget elementor-widget-html\" data-id=\"fd18303\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>#success-content, #error-content {\n  display:none;\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fe75efd e-flex e-con-boxed e-con e-parent\" data-id=\"fe75efd\" data-element_type=\"container\" data-e-type=\"container\" id=\"success-content\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-97c3c29 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"97c3c29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-check-circle\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tTu reserva est\u00e1 confirmada\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tReferencia de reserva: <strong id=\"booking-ref\">...<\/strong>\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4720d81 elementor-widget elementor-widget-html\" data-id=\"4720d81\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t    <div id=\"passenger-result\" style=\"margin-top:15px; font-weight:500;\"><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-625a669 e-con-full e-flex e-con e-child\" data-id=\"625a669\" data-element_type=\"container\" data-e-type=\"container\" id=\"options-passengers\">\n\t\t\t\t<div class=\"elementor-element elementor-element-41b7848 elementor-widget elementor-widget-text-editor\" data-id=\"41b7848\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: center;\">Los nombres y pesos de los pasajeros deben confirmarse 48 horas antes de la salida. <br>Puedes completar este paso ahora o hacerlo m\u00e1s tarde.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64a0ea7 elementor-widget elementor-widget-html\" data-id=\"64a0ea7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n             <button onclick=\"showPassengerForm()\">\n Completar ahora\n            <\/button>\n            <br\/>            <button onclick=\"skipPassengerDetails()\" style=\"background: #ddd; color:#191919; margin-top:10px\">\n Lo har\u00e9 m\u00e1s tarde\n            <\/button> \n\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-be7c687 e-flex e-con-boxed e-con e-parent\" data-id=\"be7c687\" data-element_type=\"container\" data-e-type=\"container\" id=\"error-content\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-241600d elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"241600d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-exclamation-circle\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tVaya, algo ha salido mal\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tPor favor, cont\u00e1ctanos en hello@flyovertheworld.com, <br \/>e indica esta referencia de reserva: <strong id=\"booking-ref-error\">...<\/strong>\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ff57b80 elementor-widget elementor-widget-html\" data-id=\"ff57b80\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"error-message\" style=\"color:red; margin-top:20px; font-size:16px;\">Mensaje de error<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c7bbab9 e-flex e-con-boxed e-con e-parent\" data-id=\"c7bbab9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d8b0e38 elementor-widget elementor-widget-html\" data-id=\"d8b0e38\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t    <!-- Passenger Form -->\n    <div id=\"passenger-form\" style=\"display:none; margin-top:30px; text-align:left; max-width:600px; margin-left:auto; margin-right:auto;\">\n        <h3>Datos de los pasajeros<\/h3>\n        <div id=\"passenger-fields\"><\/div>\n        <button onclick=\"submitPostPaymentPassengers()\">\n  Guardar datos de los pasajeros\n        <\/button>\n    <\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-856982e e-flex e-con-boxed e-con e-parent\" data-id=\"856982e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-51a5fe9 elementor-widget elementor-widget-html\" data-id=\"51a5fe9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>const urlParams = new URLSearchParams(window.location.search);\nconst reference = urlParams.get('reference');\nconst accessKey = urlParams.get('key');\n\nif (reference && accessKey) {\n    fetch('\/wp-json\/bookings\/v1\/verify-booking', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json' },\n        body: JSON.stringify({ \n            reference: reference, \n            access_key: accessKey \n        })\n    })\n    .then(res => res.json())\n    .then(data => {\n        console.log('Verification response:', data);   \/\/ for debugging\n\n        if (data.status === 'confirmed') {\n            document.getElementById('booking-ref').textContent = data.booking_reference || reference;\n            document.getElementById('success-content').style.display = 'block';\n            passengerCount = parseInt(data.passenger_count);\n        } else {\n            document.getElementById('booking-ref-error').textContent =  reference;\n            document.getElementById('error-message').innerHTML = 'Invalid or expired link.';\n            document.getElementById('error-content').style.display = 'block';\n        }\n    })\n} else {\n    document.getElementById('booking-ref-error').textContent =  reference;\n    document.getElementById('error-message').innerHTML = 'Missing booking reference.';\n    document.getElementById('error-content').style.display = 'block';\n}\n\n\/\/ Passenger form functions\nfunction showPassengerForm() {\n    document.getElementById('options-passengers').style.display = 'none';\n    document.getElementById('passenger-form').style.display = 'block';\n    renderDynamicPassengerForm();\n}\n\nfunction renderDynamicPassengerForm() {\n    const count = passengerCount;\n    let html = '';\n    for (let i = 1; i <= count; i++) {\n        html += `\n            <div style=\"margin-bottom:15px;\"><strong>Passenger ${i}<\/strong><br\/><input type=\"text\" id=\"p${i}-first\" placeholder=\"First name\"><input type=\"text\" id=\"p${i}-last\" placeholder=\"Last name\"><input type=\"number\" id=\"p${i}-weight\" placeholder=\"Weight in kg\" style=\"margin-top: 5px; width: 150px;\"><\/div>`;\n    }\n    document.getElementById('passenger-fields').innerHTML = html;\n}\n\nfunction validatePassengerForm() {\n    let isValid = true;\n    const resultDiv = document.getElementById('passenger-result');\n    \n    \/\/ Clear previous errors\n    document.querySelectorAll('.fotw-passenger-error').forEach(el => el.remove());\n    \n    const count = passengerCount;\n    for (let i = 1; i <= count; i++) {\n        const first = document.getElementById(`p${i}-first`);\n        const last = document.getElementById(`p${i}-last`);\n        const weight = document.getElementById(`p${i}-weight`);\n        \n        if (!first.value.trim()) {\n            isValid = false;\n            showPassengerError(first, 'First name is required');\n        }\n        if (!last.value.trim()) {\n            isValid = false;\n            showPassengerError(last, 'Last name is required');\n        }\n        if (!weight.value || parseFloat(weight.value) <= 0) {\n            isValid = false;\n            showPassengerError(weight, 'Valid weight is required');\n        }\n    }\n    \n    if (!isValid) {\n        resultDiv.innerHTML = '<p style=\"color:#e11d48;\">Please fill in all required passenger details.<\/p>';\n    } else {\n        resultDiv.innerHTML = '';\n    }\n    \n    return isValid;\n}\n\nfunction showPassengerError(field, message) {\n    field.style.borderColor = '#e11d48';\n    field.style.borderWidth = '2px';\n    \n    const error = document.createElement('div');\n    error.className = 'fotw-passenger-error';\n    error.style.color = '#e11d48';\n    error.style.fontSize = '0.85rem';\n    error.style.marginTop = '4px';\n    error.textContent = message;\n    field.parentNode.appendChild(error);\n}\n\nasync function submitPostPaymentPassengers() {\n    if (!validatePassengerForm()) {\n        return;\n    }\n    \n    const passengers = [];\n    const count = passengerCount;\n    for (let i = 1; i <= count; i++) {\n        passengers.push({\n            first_name: document.getElementById(`p${i}-first`).value.trim(),\n            last_name: document.getElementById(`p${i}-last`).value.trim(),\n            weight_kg: parseFloat(document.getElementById(`p${i}-weight`).value) || null\n        });\n    }\n    \n    const resultDiv = document.getElementById('passenger-result');\n    resultDiv.innerHTML = '<p style=\"color:#191919;\">Saving passenger details...<\/p>';\n    \n    try {\n        const res = await fetch('\/wp-json\/bookings\/v1\/update-passengers', {\n            method: 'POST',\n            headers: { 'Content-Type': 'application\/json' },\n            body: JSON.stringify({\n                reference: reference,\n                access_key: accessKey,\n                passengers: passengers\n            })\n        });\n        const data = await res.json();\n        if (data.status === 'success') {\n            resultDiv.innerHTML = `<p\"><span style=\"color:#7FCD1F;\">\u2705 <\/span>Passenger details confirmed and saved.<\/p><p>You will receive a confirmation by e-mail shortly.<\/p>`;\n            document.getElementById('passenger-form').style.display = 'none';\n        } else {\n            resultDiv.innerHTML = `<p style=\"color:red;\">Oops, something went wrong: ${data.error || 'Unknown error'}<\/p>`;\n        }\n    } catch (e) {\n        resultDiv.innerHTML = '<p style=\"color:red;\">Oops, something went wrong. Please try again.<\/p>';\n    }\n}\n\nasync function xxsubmitPostPaymentPassengers() {\n    const passengers = [];\n    const count = passengerCount;\n    for (let i = 1; i <= count; i++) {\n        passengers.push({\n            first_name: document.getElementById(`p${i}-first`).value.trim(),\n            last_name: document.getElementById(`p${i}-last`).value.trim(),\n            weight_kg: parseFloat(document.getElementById(`p${i}-weight`).value) || null\n        });\n    }\n\n    const resultDiv = document.getElementById('passenger-result');\n    resultDiv.innerHTML = '<p style=\"color:#191919;\">Saving passenger details...<\/p>';\n\n    try {\n        const res = await fetch('\/wp-json\/bookings\/v1\/update-passengers', {\n            method: 'POST',\n            headers: { 'Content-Type': 'application\/json' },\n            body: JSON.stringify({ \n                reference: reference, \n                access_key: accessKey,\n                passengers: passengers \n            })\n        });\n        const data = await res.json();\n\n        if (data.status === 'success') {\n            resultDiv.innerHTML = `<p\"><span style=\"color:#7FCD1F;\">\u2705 <\/span>Passenger details confirmed and saved.<\/p><p>You will receive a confirmation by e-mail shortly.<\/p>`;\n            document.getElementById('passenger-form').style.display = 'none';\n        } else {\n            resultDiv.innerHTML = `<p style=\"color:red;\">Oops, something went wrong: ${data.error || 'Unknown error'}<\/p>`;\n        }\n    } catch (e) {\n        resultDiv.innerHTML = '<p style=\"color:red;\">Oops, something went wrong. Please try again.<\/p>';\n    }\n}\n\nfunction skipPassengerDetails() {\n    document.getElementById('options-passengers').style.display = 'none';\n    document.getElementById('passenger-form').style.display = 'none';\n    document.getElementById('passenger-result').innerHTML = '<p style=\"color:#191919;\">Thank you! You can confirm passenger details later via the link in the confirmation e-mail.<\/p>';\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Tu reserva est\u00e1 confirmada Referencia de reserva: &#8230; Los nombres y pesos de los pasajeros deben confirmarse 48 horas antes de la salida. Puedes completar este paso ahora o hacerlo m\u00e1s tarde. Completar ahora Lo har\u00e9 m\u00e1s tarde Vaya, algo ha salido mal Por favor, cont\u00e1ctanos en hello@flyovertheworld.com, e indica esta referencia de reserva: &#8230; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-3685","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/pages\/3685","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/comments?post=3685"}],"version-history":[{"count":1,"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/pages\/3685\/revisions"}],"predecessor-version":[{"id":3686,"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/pages\/3685\/revisions\/3686"}],"wp:attachment":[{"href":"https:\/\/flyovertheworld.com\/es\/wp-json\/wp\/v2\/media?parent=3685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}