{"id":1573,"date":"2023-12-05T21:04:08","date_gmt":"2023-12-05T20:04:08","guid":{"rendered":"https:\/\/pfb.ungemachdata.de\/membership\/member-area\/"},"modified":"2023-12-05T23:55:22","modified_gmt":"2023-12-05T22:55:22","slug":"member-area","status":"publish","type":"page","link":"https:\/\/pfb.ungemachdata.de\/en\/membership\/member-area\/","title":{"rendered":"Member area"},"content":{"rendered":"\n<script> function DoCheckUncheckDisplay(d,dchecked,dunchecked) { if( d.checked == true ) { document.getElementById(dchecked).style.display = \"block\"; document.getElementById(dunchecked).style.display = \"none\"; } else { document.getElementById(dchecked).style.display = \"none\"; document.getElementById(dunchecked).style.display = \"block\"; } } <\/script>\n\n\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Logged in as:<\/td><td> <\/td><\/tr><tr valign=\"top\"><td>Membership:<\/td><td><strong>Basic<\/strong><br><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><a role=\"button\" rel=\"noopener\" href=\"https:\/\/pfb.ungemachdata.de\/en\/membership\/login\/?swpm-logout=true\" target=\"_self\"> Log out <\/a><\/p>\n\n\n\n<h2>Downloads<\/h2>\n<div class=\"sdm_download_item \"><div class=\"sdm_download_item_top\"><div class=\"sdm_download_thumbnail\"><img decoding=\"async\" class=\"sdm_download_thumbnail_image\" src=\"https:\/\/pfb.ungemachdata.de\/wp-content\/uploads\/sites\/4\/2017\/05\/LogoPFB512transparent.png\" alt = \"ParaFlightBook Pro\" \/><\/div><div class=\"sdm_download_title\">ParaFlightBook Pro<\/div><\/div><div style=\"clear:both;\"><\/div><div class=\"sdm_download_description\"><p>ParaFlightBook Pro &#8211; Installer f\u00fcr Windows 7-11. Die Installation \u00fcber vorhandene ParaFlightBook-Pro-Installationen ist m\u00f6glich.<\/p>\n<\/div><div class=\"sdm_download_size\"><span class=\"sdm_download_size_label\">Size: <\/span><span class=\"sdm_download_size_value\">67 MB<\/span><\/div><div class=\"sdm_download_version\"><span class=\"sdm_download_version_label\">Version: <\/span><span class=\"sdm_download_version_value\">2.0.031<\/span><\/div><div class=\"sdm_download_date\"><span class=\"sdm_download_date_label\">Published: <\/span><span class=\"sdm_download_date_value\">27. May 2024<\/span><\/div><div class=\"sdm_download_link\"><span class=\"sdm_download_button\"><a href=\"https:\/\/pfb.ungemachdata.de\/en\/?sdm_process_download=1&download_id=1367\" class=\"sdm_download darkblue\" title=\"ParaFlightBook Pro\" target=\"_self\">Download Now!<\/a><\/span><span class=\"sdm_download_item_count\"><span class=\"sdm_item_count_number\">975<\/span><span class=\"sdm_item_count_string\"> Downloads<\/span><\/span><\/div><\/div><div class=\"sdm_clear_float\"><\/div>\n<h4>First steps<\/h4>\n<p>Download and run the Windows installer (the computer may need to be restarted). The installation takes place in C:\\ParaFlightBook.<\/p>\n<ul>\n<li><strong>If you already keep a ParaflightBook flight log:<\/strong> Select the XML file under File\/Import (also possible for automatic backups). You can find them in the DATA directory under your old installation on the PC or USB stick.<br \/><strong>Attention:<\/strong> ParaFlightBook-Pro-Logs <strong><span style=\"color: #ff0000;\">cannot be read or synchronized with versions 1.x<\/span><\/strong>because they contain new elements such as the device database!<\/li>\n<li><strong>Otherwise,<\/strong> just start with the empty flight log or open the demo flight log.<\/li>\n<\/ul>\n<p><strong>Attention: <span style=\"color: #ff0000;\">Changes cannot be saved if <span style=\"text-decoration: underline;\">no<\/span> valid runtime package was found. <\/span><\/strong> <strong>You can purchase these further down on this page.<\/strong> As soon as you have logged into the program with your login details for this website, your term packages will be picked up.<\/p>\n<hr \/>\n<div class=\"sdm_download_item \"><div class=\"sdm_download_item_top\"><div class=\"sdm_download_thumbnail\"><\/div><div class=\"sdm_download_title\">ParaFlightBook Handbuch<\/div><\/div><div style=\"clear:both;\"><\/div><div class=\"sdm_download_description\"><\/div><div class=\"sdm_download_size\"><span class=\"sdm_download_size_label\">Size: <\/span><span class=\"sdm_download_size_value\">20 MB<\/span><\/div><div class=\"sdm_download_version\"><span class=\"sdm_download_version_label\">Version: <\/span><span class=\"sdm_download_version_value\">1.8<\/span><\/div><div class=\"sdm_download_date\"><span class=\"sdm_download_date_label\">Published: <\/span><span class=\"sdm_download_date_value\">4. May 2017<\/span><\/div><div class=\"sdm_download_link\"><span class=\"sdm_download_button\"><a href=\"https:\/\/pfb.ungemachdata.de\/en\/?sdm_process_download=1&download_id=227\" class=\"sdm_download darkblue\" title=\"ParaFlightBook Handbuch\" target=\"_self\">Download Now!<\/a><\/span><span class=\"sdm_download_item_count\"><span class=\"sdm_item_count_number\">10421<\/span><span class=\"sdm_item_count_string\"> Downloads<\/span><\/span><\/div><\/div><div class=\"sdm_clear_float\"><\/div>\n<h4>Why you don&#8217;t actually need this manual:<\/h4>\n<p>This is the manual for version 1, which is still largely valid. You can also view it directly here.<\/p>\n<p>The new version is documented in individual articles in the support\/FAQ area (see main menu above).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Purchase the &#8216;Premium&#8217; runtime package for ParaFlightBook Pro<\/h2>\n\n\n\n<p>It is possible to purchase multiple packages; the terms will then be added together. When you purchase a runtime package, the software is immediately activated on all computers used for the booked period. <strong>For this reason, the purchase of term packages is only possible if you waive the 14-day right of withdrawal.<\/strong><\/p>\n\n\n\n<p><strong><mark>You need to check this Checkbox to purchase runtime packages!<\/mark><\/strong><\/p>\n\n\n\n<div>\nWaiver of the 14-day right of withdrawal for digital services and software:\n<input type=\"checkbox\" onclick=\"DoCheckUncheckDisplay(this,'checkbox-checked','checkbox-unchecked')\" style=\"margin:0;\">\n<\/div>\n\n\n<div id=\"checkbox-checked\" style=\"display:none; color:green;\"><br>\nI expressly request and at the same time agree that you start with the commissioned service before the cancellation period expires. I know that my right of withdrawal expires if the contract is completely fulfilled.&#13;\n<p\/>\n<figure class=\"wp-block-table\">\n<table><tbody>\n<tr><td align=\"center\"><h2 class=\"wp-block-heading\">Premium package for <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">12 months<\/mark><\/strong> at the price of <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">30 \u20ac<\/mark><\/strong><\/h2><\/td><\/tr>\n<tr><td align=\"center\"><div class=\"swpm-payment-button\">    <div id=\"swpm-button-wrapper-1227\" class=\"swpm-button-wrapper swpm-paypal-buy-now-button-wrapper\">\n\n    <!-- PayPal button container where the button will be rendered -->\n    <div id=\"swpm_paypal_button_0\" style=\"width: 300px;\"><\/div>\n    <!-- Some additiona hidden input fields -->\n    <input type=\"hidden\" id=\"swpm_paypal_button_0-custom-field\" name=\"custom\" value=\"subsc_ref=2&amp;user_ip=216.73.216.141\">\n\n    <script type=\"text\/javascript\">\n        document.addEventListener( \"swpm_paypal_sdk_loaded\", function() { \n            \/\/Anything that goes here will only be executed after the PayPal SDK is loaded.\n            console.log('PayPal JS SDK is loaded.');\n\n            var js_currency_code = 'EUR';\n            var js_payment_amount = 30;\n            var js_quantity = 1;\n            var js_digital_goods_enabled = 1;\n\n            const paypalButtonsComponent = paypal.Buttons({\n                \/\/ optional styling for buttons\n                \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/customize\/buttons-style-guide\/\n                style: {\n                    color: 'blue',\n                    shape: 'rect',\n                    height: 35,\n                    label: 'checkout',\n                    layout: 'vertical',\n                },\n\n                \/\/ Setup the transaction.\n                createOrder: async function() {\n                    \/\/ Create the order in PayPal using the PayPal API.\n                    \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/integrate\/\n                    \/\/ The server-side Create Order API is used to generate the Order. Then the Order-ID is returned.                    \n                    console.log('Setting up the AJAX request for create-order call.');\n                    let pp_bn_data = {};\n                    pp_bn_data.button_id = '1227';\n                    pp_bn_data.on_page_button_id = 'swpm_paypal_button_0';\n                    pp_bn_data.item_name = 'Premium';\n                    let post_data = 'action=swpm_pp_create_order&data=' + JSON.stringify(pp_bn_data) + '&_wpnonce=2845858a30';\n                    try {\n                        \/\/ Using fetch for AJAX request. This is supported in all modern browsers.\n                        const response = await fetch(\"https:\/\/pfb.ungemachdata.de\/wp-admin\/admin-ajax.php\", {\n                            method: \"post\",\n                            headers: {\n                                'Content-Type': 'application\/x-www-form-urlencoded'\n                            },\n                            body: post_data\n                        });\n\n                        const response_data = await response.json();\n\n                        if (response_data.order_id) {\n                            console.log('Create-order API call to PayPal completed successfully.');\n                            \/\/If we need to see the order details, uncomment the following line.\n                            \/\/const order_data = response_data.order_data;\n                            \/\/console.log('Order data: ' + JSON.stringify(order_data));\n                            return response_data.order_id;\n                        } else {\n                            const error_message = JSON.stringify(response_data);\n                            console.error('Error occurred during the create-order API call to PayPal. ' + error_message);\n                            throw new Error(error_message);\n                        }\n                    } catch (error) {\n                        console.error(error);\n                        alert('Could not initiate PayPal Checkout...\\n\\n' + JSON.stringify(error));\n                    }\n                },\n    \n                \/\/ handle the onApprove event\n                onApprove: async function(data, actions) {\n                    console.log('Successfully created a transaction.');\n\n                    \/\/Show the spinner while we process this transaction.\n                    const pp_button_container = document.getElementById('swpm_paypal_button_0');\n                    const pp_button_container_wrapper = document.getElementById('swpm-button-wrapper-1227');\n                    const pp_button_spinner_container = pp_button_container_wrapper.querySelector('.swpm-pp-button-spinner-container');\n                    pp_button_container.style.display = 'none'; \/\/Hide the buttons\n                    pp_button_spinner_container.style.display = 'inline-block'; \/\/Show the spinner.\n\n                    \/\/ Capture the order in PayPal using the PayPal API.\n                    \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/integrate\/\n                    \/\/ The server-side capture-order API is used. Then the Capture-ID is returned.\n                    console.log('Setting up the AJAX request for capture-order call.');\n                    let pp_bn_data = {};\n                    pp_bn_data.order_id = data.orderID;\n                    pp_bn_data.button_id = '1227';\n                    pp_bn_data.on_page_button_id = 'swpm_paypal_button_0';\n                    pp_bn_data.item_name = 'Premium';\n\n                    \/\/Add custom_field data. It is important to encode the custom_field data so it doesn't mess up the data with & character.\n                    const custom_data = document.getElementById('swpm_paypal_button_0-custom-field').value;\n                    pp_bn_data.custom_field = encodeURIComponent(custom_data);\n                    \n                    const post_data = new URLSearchParams({\n                        action: 'swpm_pp_capture_order',\n                        data: JSON.stringify(pp_bn_data),\n                        _wpnonce: '2845858a30',\n                    }).toString();\n                    \n                    try {\n                        const response = await fetch(\"https:\/\/pfb.ungemachdata.de\/wp-admin\/admin-ajax.php\", {\n                            method: \"post\",\n                            headers: {\n                                'Content-Type': 'application\/x-www-form-urlencoded'\n                            },\n                            body: post_data\n                        });\n\n                        const response_data = await response.json();\n                        const txn_data = response_data.txn_data;\n                        const error_detail = txn_data?.details?.[0];\n                        const error_msg = response_data.error_msg;\/\/Our custom error message.\n                        \/\/ Three cases to handle:\n                        \/\/ (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart()\n                        \/\/ (2) Other non-recoverable errors -> Show a failure message\n                        \/\/ (3) Successful transaction -> Show confirmation or thank you message\n\n                        if (response_data.capture_id) {\n                            \/\/ Successful transaction -> Show confirmation or thank you message\n                            console.log('Capture-order API call to PayPal completed successfully.');\n\n                            \/\/Redirect to the Thank you page or Registration page URL if it is set.\n                            const return_url = response_data.redirect_url || '';\n                            if( return_url ){\n                                \/\/redirect to the URL.\n                                console.log('Redirecting to the Thank you page URL: ' + return_url);\n                                window.location.href = return_url;\n                                return;\n                            } else {\n                                \/\/No return URL is set. Just show a success message.\n                                \/\/Important Note: any alert message will block the normal PayPal popup window flow. So we want to show the message on the page instead of using alert.\n                                txn_success_msg = 'Transaction completed successfully!';\n                                const swpm_btn_wrapper_div = document.getElementById('swpm-button-wrapper-1227');\n                                if (swpm_btn_wrapper_div) {\n                                    \/\/ Remove any previous message if it exists\n                                    const old_msg_div = swpm_btn_wrapper_div.querySelector('.swpm-ppcp-txn-success-message');\n                                    if (old_msg_div) old_msg_div.remove();\n\n                                    \/\/ Create new message div\n                                    const new_msg_div = document.createElement('div');\n                                    new_msg_div.className = 'swpm-ppcp-txn-success-message';\n                                    new_msg_div.textContent = txn_success_msg;\n\n                                    \/\/Insert the message div before the button.\n                                    const firstChild = swpm_btn_wrapper_div.firstChild;\n                                    swpm_btn_wrapper_div.insertBefore(new_msg_div, firstChild);\n                                }\n                            }\n\n                        } else if (error_detail?.issue === \"INSTRUMENT_DECLINED\") {\n                            \/\/ Recoverable INSTRUMENT_DECLINED -> call actions.restart()\n                            console.log('Recoverable INSTRUMENT_DECLINED error. Calling actions.restart()');\n                            return actions.restart();\n                        } else if ( error_msg && error_msg.trim() !== '' ) {\n                            \/\/Our custom error message from the server.\n                            console.error('Error occurred during PayPal checkout process.');\n                            console.error( error_msg );\n                            alert( error_msg );\n                        } else {\n                            \/\/ Other non-recoverable errors -> Show a failure message\n                            console.error('Non-recoverable error occurred during PayPal checkout process.');\n                            console.error( error_detail );\n                            \/\/alert('Error occurred with the transaction. Enable debug logging to get more details.\\n\\n' + JSON.stringify(error_detail));\n                        }\n\n                        \/\/Return the button and the spinner back to their orignal display state.\n                        pp_button_container.style.display = 'block'; \/\/ Show the buttons\n                        pp_button_spinner_container.style.display = 'none'; \/\/ Hide the spinner\n\n                    } catch (error) {\n                        console.error(error);\n                        alert('PayPal returned an error! Transaction could not be processed. Enable the debug logging feature to get more details...\\n\\n' + JSON.stringify(error));\n                    }\n                },\n    \n                \/\/ handle unrecoverable errors\n                onError: function(err) {\n                    console.error('An error prevented the user from checking out with PayPal. ' + JSON.stringify(err));\n                    alert( 'Error occurred during PayPal checkout process.\\n\\n' + JSON.stringify(err) );\n                },\n\n                \/\/ handle onCancel event\n                onCancel: function(data) {\n                    console.log('Checkout operation cancelled by the customer.');\n                    \/\/Return to the parent page which the button does by default.\n                }\n            });\n    \n            paypalButtonsComponent\n                .render('#swpm_paypal_button_0')\n                .catch((err) => {\n                    console.error('PayPal Buttons failed to render');\n                });\n\n        });\n    <\/script>\n    <style>\n        @keyframes swpm-pp-button-spinner {\n            to {transform: rotate(360deg);}\n        }\n        .swpm-pp-button-spinner {\n            margin: 0 auto;\n            text-indent: -9999px;\n            vertical-align: middle;\n            box-sizing: border-box;\n            position: relative;\n            width: 60px;\n            height: 60px;\n            border-radius: 50%;\n            border: 5px solid #ccc;\n            border-top-color: #0070ba;\n            animation: swpm-pp-button-spinner .6s linear infinite;\n        }\n        .swpm-pp-button-spinner-container {\n            width: 100%;\n            text-align: center;\n            margin-top:10px;\n            display: none;\n        }\n    <\/style>\n    <div class=\"swpm-pp-button-spinner-container\">\n        <div class=\"swpm-pp-button-spinner\"><\/div>\n    <\/div>\n    <\/div><!-- end of .swpm-button-wrapper -->\n    <\/div><\/td><\/tr>\n<\/tbody><\/table>\n<\/figure>\n<figure class=\"wp-block-table\">\n<table><tbody>\n<tr><td align=\"center\"><h2 class=\"wp-block-heading\">Premium package for <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">1 month<\/mark><\/strong> at the price of <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">5 \u20ac<\/mark><\/strong><\/h2><\/td><\/tr>\n<tr><td align=\"center\"><div class=\"swpm-payment-button\">    <div id=\"swpm-button-wrapper-1229\" class=\"swpm-button-wrapper swpm-paypal-buy-now-button-wrapper\">\n\n    <!-- PayPal button container where the button will be rendered -->\n    <div id=\"swpm_paypal_button_1\" style=\"width: 300px;\"><\/div>\n    <!-- Some additiona hidden input fields -->\n    <input type=\"hidden\" id=\"swpm_paypal_button_1-custom-field\" name=\"custom\" value=\"subsc_ref=4&amp;user_ip=216.73.216.141\">\n\n    <script type=\"text\/javascript\">\n        document.addEventListener( \"swpm_paypal_sdk_loaded\", function() { \n            \/\/Anything that goes here will only be executed after the PayPal SDK is loaded.\n            console.log('PayPal JS SDK is loaded.');\n\n            var js_currency_code = 'EUR';\n            var js_payment_amount = 5;\n            var js_quantity = 1;\n            var js_digital_goods_enabled = 1;\n\n            const paypalButtonsComponent = paypal.Buttons({\n                \/\/ optional styling for buttons\n                \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/customize\/buttons-style-guide\/\n                style: {\n                    color: 'blue',\n                    shape: 'rect',\n                    height: 35,\n                    label: 'paypal',\n                    layout: 'vertical',\n                },\n\n                \/\/ Setup the transaction.\n                createOrder: async function() {\n                    \/\/ Create the order in PayPal using the PayPal API.\n                    \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/integrate\/\n                    \/\/ The server-side Create Order API is used to generate the Order. Then the Order-ID is returned.                    \n                    console.log('Setting up the AJAX request for create-order call.');\n                    let pp_bn_data = {};\n                    pp_bn_data.button_id = '1229';\n                    pp_bn_data.on_page_button_id = 'swpm_paypal_button_1';\n                    pp_bn_data.item_name = 'PremiumMonth';\n                    let post_data = 'action=swpm_pp_create_order&data=' + JSON.stringify(pp_bn_data) + '&_wpnonce=c0a0fcbb5c';\n                    try {\n                        \/\/ Using fetch for AJAX request. This is supported in all modern browsers.\n                        const response = await fetch(\"https:\/\/pfb.ungemachdata.de\/wp-admin\/admin-ajax.php\", {\n                            method: \"post\",\n                            headers: {\n                                'Content-Type': 'application\/x-www-form-urlencoded'\n                            },\n                            body: post_data\n                        });\n\n                        const response_data = await response.json();\n\n                        if (response_data.order_id) {\n                            console.log('Create-order API call to PayPal completed successfully.');\n                            \/\/If we need to see the order details, uncomment the following line.\n                            \/\/const order_data = response_data.order_data;\n                            \/\/console.log('Order data: ' + JSON.stringify(order_data));\n                            return response_data.order_id;\n                        } else {\n                            const error_message = JSON.stringify(response_data);\n                            console.error('Error occurred during the create-order API call to PayPal. ' + error_message);\n                            throw new Error(error_message);\n                        }\n                    } catch (error) {\n                        console.error(error);\n                        alert('Could not initiate PayPal Checkout...\\n\\n' + JSON.stringify(error));\n                    }\n                },\n    \n                \/\/ handle the onApprove event\n                onApprove: async function(data, actions) {\n                    console.log('Successfully created a transaction.');\n\n                    \/\/Show the spinner while we process this transaction.\n                    const pp_button_container = document.getElementById('swpm_paypal_button_1');\n                    const pp_button_container_wrapper = document.getElementById('swpm-button-wrapper-1229');\n                    const pp_button_spinner_container = pp_button_container_wrapper.querySelector('.swpm-pp-button-spinner-container');\n                    pp_button_container.style.display = 'none'; \/\/Hide the buttons\n                    pp_button_spinner_container.style.display = 'inline-block'; \/\/Show the spinner.\n\n                    \/\/ Capture the order in PayPal using the PayPal API.\n                    \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/integrate\/\n                    \/\/ The server-side capture-order API is used. Then the Capture-ID is returned.\n                    console.log('Setting up the AJAX request for capture-order call.');\n                    let pp_bn_data = {};\n                    pp_bn_data.order_id = data.orderID;\n                    pp_bn_data.button_id = '1229';\n                    pp_bn_data.on_page_button_id = 'swpm_paypal_button_1';\n                    pp_bn_data.item_name = 'PremiumMonth';\n\n                    \/\/Add custom_field data. It is important to encode the custom_field data so it doesn't mess up the data with & character.\n                    const custom_data = document.getElementById('swpm_paypal_button_1-custom-field').value;\n                    pp_bn_data.custom_field = encodeURIComponent(custom_data);\n                    \n                    const post_data = new URLSearchParams({\n                        action: 'swpm_pp_capture_order',\n                        data: JSON.stringify(pp_bn_data),\n                        _wpnonce: 'c0a0fcbb5c',\n                    }).toString();\n                    \n                    try {\n                        const response = await fetch(\"https:\/\/pfb.ungemachdata.de\/wp-admin\/admin-ajax.php\", {\n                            method: \"post\",\n                            headers: {\n                                'Content-Type': 'application\/x-www-form-urlencoded'\n                            },\n                            body: post_data\n                        });\n\n                        const response_data = await response.json();\n                        const txn_data = response_data.txn_data;\n                        const error_detail = txn_data?.details?.[0];\n                        const error_msg = response_data.error_msg;\/\/Our custom error message.\n                        \/\/ Three cases to handle:\n                        \/\/ (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart()\n                        \/\/ (2) Other non-recoverable errors -> Show a failure message\n                        \/\/ (3) Successful transaction -> Show confirmation or thank you message\n\n                        if (response_data.capture_id) {\n                            \/\/ Successful transaction -> Show confirmation or thank you message\n                            console.log('Capture-order API call to PayPal completed successfully.');\n\n                            \/\/Redirect to the Thank you page or Registration page URL if it is set.\n                            const return_url = response_data.redirect_url || '';\n                            if( return_url ){\n                                \/\/redirect to the URL.\n                                console.log('Redirecting to the Thank you page URL: ' + return_url);\n                                window.location.href = return_url;\n                                return;\n                            } else {\n                                \/\/No return URL is set. Just show a success message.\n                                \/\/Important Note: any alert message will block the normal PayPal popup window flow. So we want to show the message on the page instead of using alert.\n                                txn_success_msg = 'Transaction completed successfully!';\n                                const swpm_btn_wrapper_div = document.getElementById('swpm-button-wrapper-1229');\n                                if (swpm_btn_wrapper_div) {\n                                    \/\/ Remove any previous message if it exists\n                                    const old_msg_div = swpm_btn_wrapper_div.querySelector('.swpm-ppcp-txn-success-message');\n                                    if (old_msg_div) old_msg_div.remove();\n\n                                    \/\/ Create new message div\n                                    const new_msg_div = document.createElement('div');\n                                    new_msg_div.className = 'swpm-ppcp-txn-success-message';\n                                    new_msg_div.textContent = txn_success_msg;\n\n                                    \/\/Insert the message div before the button.\n                                    const firstChild = swpm_btn_wrapper_div.firstChild;\n                                    swpm_btn_wrapper_div.insertBefore(new_msg_div, firstChild);\n                                }\n                            }\n\n                        } else if (error_detail?.issue === \"INSTRUMENT_DECLINED\") {\n                            \/\/ Recoverable INSTRUMENT_DECLINED -> call actions.restart()\n                            console.log('Recoverable INSTRUMENT_DECLINED error. Calling actions.restart()');\n                            return actions.restart();\n                        } else if ( error_msg && error_msg.trim() !== '' ) {\n                            \/\/Our custom error message from the server.\n                            console.error('Error occurred during PayPal checkout process.');\n                            console.error( error_msg );\n                            alert( error_msg );\n                        } else {\n                            \/\/ Other non-recoverable errors -> Show a failure message\n                            console.error('Non-recoverable error occurred during PayPal checkout process.');\n                            console.error( error_detail );\n                            \/\/alert('Error occurred with the transaction. Enable debug logging to get more details.\\n\\n' + JSON.stringify(error_detail));\n                        }\n\n                        \/\/Return the button and the spinner back to their orignal display state.\n                        pp_button_container.style.display = 'block'; \/\/ Show the buttons\n                        pp_button_spinner_container.style.display = 'none'; \/\/ Hide the spinner\n\n                    } catch (error) {\n                        console.error(error);\n                        alert('PayPal returned an error! Transaction could not be processed. Enable the debug logging feature to get more details...\\n\\n' + JSON.stringify(error));\n                    }\n                },\n    \n                \/\/ handle unrecoverable errors\n                onError: function(err) {\n                    console.error('An error prevented the user from checking out with PayPal. ' + JSON.stringify(err));\n                    alert( 'Error occurred during PayPal checkout process.\\n\\n' + JSON.stringify(err) );\n                },\n\n                \/\/ handle onCancel event\n                onCancel: function(data) {\n                    console.log('Checkout operation cancelled by the customer.');\n                    \/\/Return to the parent page which the button does by default.\n                }\n            });\n    \n            paypalButtonsComponent\n                .render('#swpm_paypal_button_1')\n                .catch((err) => {\n                    console.error('PayPal Buttons failed to render');\n                });\n\n        });\n    <\/script>\n    <style>\n        @keyframes swpm-pp-button-spinner {\n            to {transform: rotate(360deg);}\n        }\n        .swpm-pp-button-spinner {\n            margin: 0 auto;\n            text-indent: -9999px;\n            vertical-align: middle;\n            box-sizing: border-box;\n            position: relative;\n            width: 60px;\n            height: 60px;\n            border-radius: 50%;\n            border: 5px solid #ccc;\n            border-top-color: #0070ba;\n            animation: swpm-pp-button-spinner .6s linear infinite;\n        }\n        .swpm-pp-button-spinner-container {\n            width: 100%;\n            text-align: center;\n            margin-top:10px;\n            display: none;\n        }\n    <\/style>\n    <div class=\"swpm-pp-button-spinner-container\">\n        <div class=\"swpm-pp-button-spinner\"><\/div>\n    <\/div>\n    <\/div><!-- end of .swpm-button-wrapper -->\n    <\/div><\/td><\/tr>\n<\/tbody><\/table>\n<\/figure>\n<\/div>\n\n<div id=\"checkbox-unchecked\" style=\"display:none; color:red;\">\nIt is not possible to purchase term packages with the right of withdrawal (see above)!\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Logged in as: Membership: Log out Downloads First steps Download and run the Windows installer (the computer may need to be restarted). The installation takes place in C:\\ParaFlightBook. If you already keep a ParaflightBook flight log: Select the XML file under File\/Import (also possible for automatic backups). You can find them in the DATA directory&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1553,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/pages\/1573"}],"collection":[{"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/comments?post=1573"}],"version-history":[{"count":5,"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/pages\/1573\/revisions"}],"predecessor-version":[{"id":1588,"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/pages\/1573\/revisions\/1588"}],"up":[{"embeddable":true,"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/pages\/1553"}],"wp:attachment":[{"href":"https:\/\/pfb.ungemachdata.de\/en\/wp-json\/wp\/v2\/media?parent=1573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}