{"id":3733,"date":"2026-05-15T12:24:08","date_gmt":"2026-05-15T11:24:08","guid":{"rendered":"https:\/\/new2.flyovertheworld.com\/bokningen-lyckades\/"},"modified":"2026-06-10T08:08:47","modified_gmt":"2026-06-10T07:08:47","slug":"bokningen-lyckades","status":"publish","type":"page","link":"https:\/\/flyovertheworld.com\/sv\/bokningen-lyckades\/","title":{"rendered":"Bokningen lyckades"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3733\" class=\"elementor elementor-3733 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\tDin bokning \u00e4r bekr\u00e4ftad\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\tBokningsreferens: <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;\">Passagerares namn och vikt m\u00e5ste bekr\u00e4ftas 48 timmar f\u00f6re avg\u00e5ng. <br>Du kan antingen slutf\u00f6ra detta steg nu eller g\u00f6ra det senare.<\/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 Slutf\u00f6r nu\n            <\/button>\n            <br\/>            <button onclick=\"skipPassengerDetails()\" style=\"background: #ddd; color:#191919; margin-top:10px\">\n Jag g\u00f6r det senare\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\tHoppsan, n\u00e5got gick fel\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\tV\u00e4nligen kontakta oss p\u00e5 hello@flyovertheworld.com, <br \/>och ange denna bokningsreferens: <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;\">Felmeddelande<\/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>Passageraruppgifter<\/h3>\n        <div id=\"passenger-fields\"><\/div>\n        <button onclick=\"submitPostPaymentPassengers()\">\n  Spara passageraruppgifter\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>Din bokning \u00e4r bekr\u00e4ftad Bokningsreferens: &#8230; Passagerares namn och vikt m\u00e5ste bekr\u00e4ftas 48 timmar f\u00f6re avg\u00e5ng. Du kan antingen slutf\u00f6ra detta steg nu eller g\u00f6ra det senare. Slutf\u00f6r nu Jag g\u00f6r det senare Hoppsan, n\u00e5got gick fel V\u00e4nligen kontakta oss p\u00e5 hello@flyovertheworld.com, och ange denna bokningsreferens: &#8230; Felmeddelande Passageraruppgifter Spara passageraruppgifter<\/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-3733","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/pages\/3733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/comments?post=3733"}],"version-history":[{"count":1,"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/pages\/3733\/revisions"}],"predecessor-version":[{"id":3736,"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/pages\/3733\/revisions\/3736"}],"wp:attachment":[{"href":"https:\/\/flyovertheworld.com\/sv\/wp-json\/wp\/v2\/media?parent=3733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}