{"id":641,"date":"2018-08-16T13:30:59","date_gmt":"2018-08-16T12:30:59","guid":{"rendered":"https:\/\/southbournese.wpengine.com\/?page_id=641"},"modified":"2026-03-03T10:26:37","modified_gmt":"2026-03-03T10:26:37","slug":"so-buchen-sie-ihren-englischkurs","status":"publish","type":"page","link":"https:\/\/southbourneschool.co.uk\/de_de\/english-courses\/how-to-book-your-english-course\/","title":{"rendered":"Wie Sie Ihren Englischkurs buchen"},"content":{"rendered":"<section data-vc-full-width=\"true\" data-vc-full-width-init=\"false\" class=\"vc_section vc_custom_1723044309358 vc_section-has-fill\"><\/section><div class=\"vc_row-full-width vc_clearfix\"><\/div><div class=\"vc_row wpb_row vc_row-fluid vc_custom_1723458609701 vc_column-gap-10\"><div class=\"wpb_column vc_column_container vc_col-sm-7\"><div class=\"vc_column-inner vc_custom_1723458630386\"><div class=\"wpb_wrapper\"><h1 style=\"font-size: 40px;text-align: left\" class=\"vc_custom_heading vc_custom_1749568407761\" >How To Book Your English Course<\/h1>\n\t<div class=\"wpb_text_column wpb_content_element \" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t    <style>\r\n        \/* Reset and base styles *\/\r\n        .sse-course-calculator * {\r\n            box-sizing: border-box;\r\n            margin: 0;\r\n            padding: 0;\r\n            font-family: inherit;\r\n        }\r\n        \r\n        .sse-course-calculator {\r\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\r\n            max-width: 800px;\r\n            margin: 0 auto;\r\n            padding: 20px;\r\n            background: #ffffff;\r\n            border-radius: 12px;\r\n            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\r\n        }\r\n        \r\n        \/* Header styles *\/\r\n        .sse-calculator-header h2 {\r\n            color: #1a56db;\r\n            font-size: 24px;\r\n            margin-bottom: 8px;\r\n            font-weight: 600;\r\n        }\r\n        \r\n        .sse-calculator-header p {\r\n            color: #6b7280;\r\n            font-size: 15px;\r\n            line-height: 1.5;\r\n            margin-bottom: 24px;\r\n        }\r\n        \r\n        \/* Form control styles *\/\r\n        .sse-form-group {\r\n            margin-bottom: 20px;\r\n            transition: opacity 0.3s ease, transform 0.3s ease;\r\n        }\r\n        \r\n        .sse-form-group.hidden {\r\n            display: none;\r\n        }\r\n        \r\n        .sse-form-group.fade-in {\r\n            animation: fadeIn 0.5s ease;\r\n        }\r\n        \r\n        @keyframes fadeIn {\r\n            from {\r\n                opacity: 0;\r\n                transform: translateY(10px);\r\n            }\r\n            to {\r\n                opacity: 1;\r\n                transform: translateY(0);\r\n            }\r\n        }\r\n        \r\n        .sse-form-group label {\r\n            display: block;\r\n            font-weight: 500;\r\n            color: #374151;\r\n            margin-bottom: 6px;\r\n            font-size: 14px;\r\n        }\r\n        \r\n        .sse-form-control {\r\n            width: 100%;\r\n            padding: 10px 12px;\r\n            border: 1px solid #d1d5db;\r\n            border-radius: 6px;\r\n            font-size: 15px;\r\n            color: #111827;\r\n            background-color: #ffffff;\r\n            transition: border-color 0.15s ease;\r\n        }\r\n        \r\n        .sse-form-control:focus {\r\n            outline: none;\r\n            border-color: #1a56db;\r\n            box-shadow: 0 0 0 3px rgba(26, 86, 219, 0.1);\r\n        }\r\n        \r\n        .sse-form-control:hover {\r\n            border-color: #9ca3af;\r\n        }\r\n        \r\n        \/* Button styles *\/\r\n        .sse-btn {\r\n            display: block;\r\n            width: 100%;\r\n            padding: 12px;\r\n            border: none;\r\n            border-radius: 6px;\r\n            font-size: 16px;\r\n            font-weight: 500;\r\n            cursor: pointer;\r\n            transition: background-color 0.15s ease;\r\n            text-align: center;\r\n            text-decoration: none;\r\n            margin-top: 12px;\r\n        }\r\n        \r\n        .sse-btn-primary {\r\n            background-color: #1a56db;\r\n            color: white;\r\n        }\r\n        \r\n        .sse-btn-primary:hover {\r\n            background-color: #1e40af;\r\n        }\r\n        \r\n        .sse-btn-secondary {\r\n            background-color: #6b7280;\r\n            color: white;\r\n        }\r\n        \r\n        .sse-btn-secondary:hover {\r\n            background-color: #4b5563;\r\n        }\r\n        \r\n        .sse-btn-success {\r\n            background-color: #059669;\r\n            color: white;\r\n        }\r\n        \r\n        .sse-btn-success:hover {\r\n            background-color: #047857;\r\n        }\r\n        \r\n        .sse-btn-info {\r\n            background-color: #0ea5e9;\r\n            color: white;\r\n        }\r\n        \r\n        .sse-btn-info:hover {\r\n            background-color: #0284c7;\r\n        }\r\n        \r\n        \/* Button container for side-by-side buttons *\/\r\n        .sse-button-group {\r\n            display: grid;\r\n            grid-template-columns: 1fr;\r\n            gap: 12px;\r\n            margin-top: 20px;\r\n        }\r\n        \r\n        @media (min-width: 640px) {\r\n            .sse-button-group {\r\n                grid-template-columns: 1fr 1fr;\r\n            }\r\n        }\r\n        \r\n        \/* Total price display *\/\r\n        .sse-total-price {\r\n            font-size: 28px;\r\n            font-weight: 700;\r\n            color: #1a56db;\r\n            margin: 24px 0;\r\n            padding: 16px;\r\n            background-color: #f3f4f6;\r\n            border-radius: 8px;\r\n            text-align: center;\r\n            display: none;\r\n        }\r\n        \r\n        .sse-total-price.visible {\r\n            display: block;\r\n            animation: fadeIn 0.5s ease;\r\n        }\r\n        \r\n        \/* Breakdown section *\/\r\n        .sse-breakdown {\r\n            margin: 24px 0;\r\n            padding: 20px;\r\n            background-color: #f9fafb;\r\n            border-radius: 8px;\r\n            border: 1px solid #e5e7eb;\r\n            display: none;\r\n        }\r\n        \r\n        .sse-breakdown.visible {\r\n            display: block;\r\n            animation: fadeIn 0.5s ease;\r\n        }\r\n        \r\n        .sse-breakdown-title {\r\n            font-weight: 600;\r\n            color: #374151;\r\n            margin-bottom: 12px;\r\n            font-size: 16px;\r\n        }\r\n        \r\n        .sse-breakdown-grid {\r\n            display: flex;\r\n            flex-wrap: wrap;\r\n            gap: 10px;\r\n        }\r\n        \r\n        .sse-breakdown-item {\r\n            padding: 8px 12px;\r\n            background-color: #ffffff;\r\n            border: 1px solid #e5e7eb;\r\n            border-radius: 6px;\r\n            font-size: 13px;\r\n            line-height: 1.4;\r\n        }\r\n        \r\n        .sse-breakdown-item strong {\r\n            color: #374151;\r\n            font-weight: 600;\r\n        }\r\n        \r\n        \/* Extras and promo containers *\/\r\n        .sse-container-card {\r\n            margin: 20px 0;\r\n            padding: 20px;\r\n            border-radius: 8px;\r\n            border: 1px solid #e5e7eb;\r\n            display: none;\r\n        }\r\n        \r\n        .sse-container-card.visible {\r\n            display: block;\r\n            animation: fadeIn 0.5s ease;\r\n        }\r\n        \r\n        .sse-extras-container {\r\n            background-color: #f0f9ff;\r\n            border-color: #bae6fd;\r\n        }\r\n        \r\n        .sse-promo-container {\r\n            background-color: #fffbeb;\r\n            border-color: #fde68a;\r\n        }\r\n        \r\n        .sse-container-title {\r\n            font-size: 18px;\r\n            font-weight: 600;\r\n            color: #1a56db;\r\n            margin-bottom: 16px;\r\n        }\r\n        \r\n        .sse-promo-title {\r\n            color: #d97706;\r\n        }\r\n        \r\n        \/* Checkbox styles *\/\r\n        .sse-checkbox-group {\r\n            margin-top: 12px;\r\n        }\r\n        \r\n        .sse-checkbox-item {\r\n            display: flex;\r\n            align-items: flex-start;\r\n            margin-bottom: 10px;\r\n            padding: 8px 0;\r\n        }\r\n        \r\n        .sse-checkbox-item input[type=\"checkbox\"] {\r\n            margin: 2px 10px 0 0;\r\n            width: 16px;\r\n            height: 16px;\r\n            flex-shrink: 0;\r\n        }\r\n        \r\n        .sse-checkbox-item label {\r\n            font-weight: normal;\r\n            color: #374151;\r\n            font-size: 14px;\r\n            line-height: 1.5;\r\n            cursor: pointer;\r\n        }\r\n        \r\n        \/* Error and success messages *\/\r\n        .sse-error-message {\r\n            color: #dc2626;\r\n            font-size: 13px;\r\n            margin-top: 4px;\r\n            display: none;\r\n            padding-left: 26px;\r\n        }\r\n        \r\n        .sse-success-message {\r\n            color: #059669;\r\n            font-size: 13px;\r\n            margin-top: 4px;\r\n            display: none;\r\n        }\r\n        \r\n        .sse-warning-message {\r\n            color: #d97706;\r\n            font-size: 13px;\r\n            margin-top: 8px;\r\n            padding: 8px 12px;\r\n            background-color: #fffbeb;\r\n            border: 1px solid #fde68a;\r\n            border-radius: 6px;\r\n            display: none;\r\n        }\r\n        \r\n        .sse-warning-message.visible {\r\n            display: block;\r\n            animation: fadeIn 0.5s ease;\r\n        }\r\n        \r\n        \/* Text formatting *\/\r\n        .sse-strikethrough {\r\n            text-decoration: line-through;\r\n            color: #9ca3af;\r\n            margin-right: 4px;\r\n        }\r\n        \r\n        .sse-discounted {\r\n            color: #059669;\r\n            font-weight: 600;\r\n        }\r\n        \r\n        \/* Progress indicator *\/\r\n        .sse-progress-indicator {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: space-between;\r\n            margin-bottom: 30px;\r\n            padding: 10px;\r\n            background-color: #f9fafb;\r\n            border-radius: 8px;\r\n        }\r\n        \r\n        .sse-progress-step {\r\n            display: flex;\r\n            flex-direction: column;\r\n            align-items: center;\r\n            flex: 1;\r\n            position: relative;\r\n        }\r\n        \r\n        .sse-progress-step:not(:last-child)::after {\r\n            content: '';\r\n            position: absolute;\r\n            top: 12px;\r\n            right: -50%;\r\n            width: 100%;\r\n            height: 2px;\r\n            background-color: #e5e7eb;\r\n            z-index: 1;\r\n        }\r\n        \r\n        .sse-progress-step.active:not(:last-child)::after {\r\n            background-color: #1a56db;\r\n        }\r\n        \r\n        .sse-progress-circle {\r\n            width: 24px;\r\n            height: 24px;\r\n            border-radius: 50%;\r\n            background-color: #e5e7eb;\r\n            color: #6b7280;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            font-size: 12px;\r\n            font-weight: 600;\r\n            z-index: 2;\r\n            margin-bottom: 6px;\r\n        }\r\n        \r\n        .sse-progress-step.active .sse-progress-circle {\r\n            background-color: #1a56db;\r\n            color: white;\r\n        }\r\n        \r\n        .sse-progress-step.completed .sse-progress-circle {\r\n            background-color: #059669;\r\n            color: white;\r\n        }\r\n        \r\n        .sse-progress-label {\r\n            font-size: 11px;\r\n            color: #6b7280;\r\n            text-align: center;\r\n            max-width: 80px;\r\n        }\r\n        \r\n        .sse-progress-step.active .sse-progress-label {\r\n            color: #1a56db;\r\n            font-weight: 500;\r\n        }\r\n        \r\n        .sse-progress-step.completed .sse-progress-label {\r\n            color: #059669;\r\n        }\r\n        \r\n        \/* Floating reset button *\/\r\n        .sse-floating-reset {\r\n            position: fixed;\r\n            bottom: 20px;\r\n            right: 20px;\r\n            width: 50px;\r\n            height: 50px;\r\n            border-radius: 50%;\r\n            background-color: #dc2626;\r\n            color: white;\r\n            border: none;\r\n            cursor: pointer;\r\n            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\r\n            font-size: 24px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            z-index: 1000;\r\n            transition: all 0.3s ease;\r\n            opacity: 0;\r\n            visibility: hidden;\r\n        }\r\n        \r\n        .sse-floating-reset.visible {\r\n            opacity: 1;\r\n            visibility: visible;\r\n        }\r\n        \r\n        .sse-floating-reset:hover {\r\n            background-color: #b91c1c;\r\n            transform: scale(1.1);\r\n        }\r\n        \r\n        \/* Responsive design *\/\r\n        @media (max-width: 640px) {\r\n            .sse-course-calculator {\r\n                padding: 16px;\r\n            }\r\n            \r\n            .sse-calculator-header h2 {\r\n                font-size: 20px;\r\n            }\r\n            \r\n            .sse-total-price {\r\n                font-size: 24px;\r\n                padding: 12px;\r\n            }\r\n            \r\n            .sse-breakdown-item {\r\n                font-size: 12px;\r\n                padding: 6px 10px;\r\n            }\r\n            \r\n            .sse-form-control {\r\n                font-size: 14px;\r\n                padding: 8px 10px;\r\n            }\r\n            \r\n            .sse-btn {\r\n                padding: 10px;\r\n                font-size: 15px;\r\n            }\r\n            \r\n            .sse-progress-label {\r\n                font-size: 10px;\r\n                max-width: 60px;\r\n            }\r\n            \r\n            .sse-progress-step:not(:last-child)::after {\r\n                right: -40%;\r\n            }\r\n            \r\n            .sse-floating-reset {\r\n                bottom: 70px;\r\n                right: 15px;\r\n                width: 45px;\r\n                height: 45px;\r\n                font-size: 20px;\r\n            }\r\n        }\r\n        \r\n        @media (max-width: 480px) {\r\n            .sse-progress-label {\r\n                display: none;\r\n            }\r\n            \r\n            .sse-progress-step:not(:last-child)::after {\r\n                right: -50%;\r\n            }\r\n        }\r\n    <\/style>\r\n\r\n    <div class=\"sse-course-calculator\">\r\n        <div class=\"sse-calculator-header\">\r\n            <h2>English Course Calculator 2026<\/h2>\r\n            <p>Plan your English course with our easy-to-use calculator. Select your course, duration, accommodation, and transfers to get an instant price estimate.<\/p>\r\n        <\/div>\r\n\r\n        <!-- Progress Indicator -->\r\n        <div class=\"sse-progress-indicator\">\r\n            <div class=\"sse-progress-step active\" id=\"sse-step-1\">\r\n                <div class=\"sse-progress-circle\">1<\/div>\r\n                <div class=\"sse-progress-label\">Course Type<\/div>\r\n            <\/div>\r\n            <div class=\"sse-progress-step\" id=\"sse-step-2\">\r\n                <div class=\"sse-progress-circle\">2<\/div>\r\n                <div class=\"sse-progress-label\">Course<\/div>\r\n            <\/div>\r\n            <div class=\"sse-progress-step\" id=\"sse-step-3\">\r\n                <div class=\"sse-progress-circle\">3<\/div>\r\n                <div class=\"sse-progress-label\">Duration<\/div>\r\n            <\/div>\r\n            <div class=\"sse-progress-step\" id=\"sse-step-4\">\r\n                <div class=\"sse-progress-circle\">4<\/div>\r\n                <div class=\"sse-progress-label\">Start Date<\/div>\r\n            <\/div>\r\n            <div class=\"sse-progress-step\" id=\"sse-step-5\">\r\n                <div class=\"sse-progress-circle\">5<\/div>\r\n                <div class=\"sse-progress-label\">Options<\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- Warning message for junior course adjustment -->\r\n        <div class=\"sse-warning-message hidden\" id=\"sse-juniorWarning\">\r\n            Junior summer courses cannot run past August 23rd, 2026. Your course duration has been adjusted to <span id=\"sse-adjustedWeeks\">0<\/span> weeks.\r\n        <\/div>\r\n\r\n        <!-- Step 1: Course Category -->\r\n        <div class=\"sse-form-group fade-in\" id=\"sse-courseCategoryGroup\">\r\n            <label for=\"sse-courseCategory\">Select Course Category:<\/label>\r\n            <select id=\"sse-courseCategory\" class=\"sse-form-control\">\r\n                <option value=\"\">Select an English course category<\/option>\r\n                <option value=\"general\">General and Intensive English courses<\/option>\r\n                <option value=\"extra\">Extra Intensive English courses<\/option>\r\n                <option value=\"cambridge\">Cambridge English Exam courses<\/option>\r\n                <option value=\"junior\">Junior English courses<\/option>\r\n            <\/select>\r\n        <\/div>\r\n\r\n        <!-- Step 2: Course Selection -->\r\n        <div class=\"sse-form-group hidden\" id=\"sse-courseGroup\">\r\n            <label for=\"sse-course\">Select Course:<\/label>\r\n            <select id=\"sse-course\" class=\"sse-form-control\">\r\n                <option value=\"0\">Select a course<\/option>\r\n            <\/select>\r\n        <\/div>\r\n\r\n        <!-- Step 3: Duration -->\r\n        <div class=\"sse-form-group hidden\" id=\"sse-weeksGroup\">\r\n            <label for=\"sse-weeks\">Course Duration:<\/label>\r\n            <select id=\"sse-weeks\" class=\"sse-form-control\">\r\n                <option value=\"\" disabled selected>Select duration<\/option>\r\n            <\/select>\r\n        <\/div>\r\n\r\n        <!-- Step 4: Start Date -->\r\n        <div class=\"sse-form-group hidden\" id=\"sse-dateGroup\">\r\n            <label for=\"sse-startDate\">Start Date:<\/label>\r\n            <input type=\"text\" id=\"sse-startDate\" class=\"sse-form-control\" placeholder=\"Select start date\" readonly>\r\n        <\/div>\r\n\r\n        <!-- Step 5: Accommodation & Extras (appear together) -->\r\n        <div class=\"sse-form-group hidden\" id=\"sse-accommodationGroup\">\r\n            <label for=\"sse-accommodation\">Accommodation:<\/label>\r\n            <select id=\"sse-accommodation\" class=\"sse-form-control\">\r\n                <option value=\"0\">No accommodation required<\/option>\r\n            <\/select>\r\n        <\/div>\r\n\r\n        <!-- Extras Section (appears alongside accommodation) -->\r\n        <div class=\"sse-container-card sse-extras-container hidden\" id=\"sse-extrasGroup\">\r\n            <h3 class=\"sse-container-title\">Extras and Supplements<\/h3>\r\n            <div class=\"sse-checkbox-group\">\r\n                <div class=\"sse-checkbox-item\">\r\n                    <input type=\"checkbox\" id=\"sse-privateBathroom\" name=\"extras\" value=\"privateBathroom\">\r\n                    <label for=\"sse-privateBathroom\">Private Bathroom (\u00a380 per week)<\/label>\r\n                    <div class=\"sse-error-message\" id=\"sse-privateBathroomError\">Please select accommodation for students age 15+ to add this option<\/div>\r\n                <\/div>\r\n                <div class=\"sse-checkbox-item\">\r\n                    <input type=\"checkbox\" id=\"sse-specialDiet\" name=\"extras\" value=\"specialDiet\">\r\n                    <label for=\"sse-specialDiet\">Special Diet (\u00a335\/week for Part Board, \u00a345\/week for Full Board)<\/label>\r\n                    <div class=\"sse-error-message\" id=\"sse-specialDietError\">Please select accommodation to add this option<\/div>\r\n                <\/div>\r\n                <div class=\"sse-checkbox-item\">\r\n                    <input type=\"checkbox\" id=\"sse-studentInsurance\" name=\"extras\" value=\"studentInsurance\">\r\n                    <label for=\"sse-studentInsurance\">Student Insurance (\u00a35 one-time + \u00a37 per week)<\/label>\r\n                <\/div>\r\n                <div class=\"sse-checkbox-item\">\r\n                    <input type=\"checkbox\" id=\"sse-summerActivities\" name=\"extras\" value=\"summerActivities\">\r\n                    <label for=\"sse-summerActivities\">Summer Activity Package (<span id=\"sse-summerActivitiesPrice\">\u00a3130<\/span> per summer week)<\/label>\r\n                    <div class=\"sse-error-message\" id=\"sse-summerActivitiesError\">Available only for General\/Intensive English courses with summer weeks<\/div>\r\n                <\/div>\r\n                <div class=\"sse-checkbox-item\" id=\"sse-cambridgeExamContainer\" style=\"display: none;\">\r\n                    <input type=\"checkbox\" id=\"sse-cambridgeExam\" name=\"extras\" value=\"cambridgeExam\">\r\n                    <label for=\"sse-cambridgeExam\">Cambridge Exam Fee (Priced on Application)<\/label>\r\n                <\/div>\r\n                <div class=\"sse-checkbox-item\" id=\"sse-under12Container\" style=\"display: none;\">\r\n                    <input type=\"checkbox\" id=\"sse-under12\" name=\"extras\" value=\"under12\">\r\n                    <label for=\"sse-under12\">Under 12 Years Old Supplement (\u00a340 per week)<\/label>\r\n                    <div class=\"sse-error-message\" id=\"sse-under12Error\">Available only for Junior English courses<\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- Step 6: Transfers -->\r\n        <div class=\"sse-form-group hidden\" id=\"sse-arrivalTransferGroup\">\r\n            <label for=\"sse-arrivalTransfer\">Arrival Transfer:<\/label>\r\n            <select id=\"sse-arrivalTransfer\" class=\"sse-form-control\">\r\n                <option value=\"0\">No Arrival Transfer required<\/option>\r\n            <\/select>\r\n        <\/div>\r\n\r\n        <div class=\"sse-form-group hidden\" id=\"sse-departureTransferGroup\">\r\n            <label for=\"sse-departureTransfer\">Departure Transfer:<\/label>\r\n            <select id=\"sse-departureTransfer\" class=\"sse-form-control\">\r\n                <option value=\"0\">No Departure Transfer required<\/option>\r\n            <\/select>\r\n        <\/div>\r\n\r\n        <!-- Promo Code Section (appears after extras) -->\r\n        <div class=\"sse-container-card sse-promo-container hidden\" id=\"sse-promoGroup\">\r\n            <h3 class=\"sse-container-title sse-promo-title\">Promo Code<\/h3>\r\n            <input type=\"text\" id=\"sse-promoCode\" class=\"sse-form-control\" placeholder=\"Enter promo code\">\r\n            <div class=\"sse-error-message\" id=\"sse-promoCodeError\" style=\"display: none;\">Invalid promo code<\/div>\r\n            <div class=\"sse-success-message\" id=\"sse-promoCodeSuccess\" style=\"display: none;\">Promo code applied!<\/div>\r\n        <\/div>\r\n\r\n        <!-- Results Section (appears at the end) -->\r\n        <div class=\"sse-total-price hidden\" id=\"sse-totalPriceGroup\">\r\n            Total Price: \u00a3<span id=\"sse-TotalPrice\">0<\/span>\r\n        <\/div>\r\n        \r\n        <div class=\"sse-breakdown hidden\" id=\"sse-breakdownGroup\"><\/div>\r\n\r\n        <!-- Action Buttons (appear at the end) -->\r\n        <div class=\"sse-button-group hidden\" id=\"sse-actionsGroup\">\r\n            <button class=\"sse-btn sse-btn-primary\" id=\"sse-bookNow\">Book Now<\/button>\r\n            <button class=\"sse-btn sse-btn-success\" id=\"sse-downloadQuote\">Download Quote (PDF)<\/button>\r\n            <button class=\"sse-btn sse-btn-info\" id=\"sse-viewPriceList\">View Full Price List<\/button>\r\n            <button class=\"sse-btn sse-btn-secondary\" id=\"sse-resetForm\">Reset Form<\/button>\r\n        <\/div>\r\n        \r\n        <!-- Floating Reset Button -->\r\n        <button class=\"sse-floating-reset hidden\" id=\"sse-floatingReset\" title=\"Reset Form\">\u21ba<\/button>\r\n    <\/div>\r\n\r\n    <!-- External Libraries -->\r\n    <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/flatpickr\/dist\/flatpickr.min.css\">\r\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/flatpickr\"><\/script>\r\n    <!-- jsPDF Library for PDF generation -->\r\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\r\n\r\n    <script>\r\n        (function() {\r\n            'use strict';\r\n            \r\n            \/\/ Course data for 2026\r\n            const courseData = {\r\n                general: \"310,280,245,235\", \/\/ 1-11, 12-23, 24-35, 36+ weeks\r\n                intensive: \"355,325,290,280\",\r\n                extra: {\r\n                    \"1-to-1\": 80,\r\n                    \"5-to-1\": 380,\r\n                    \"10-to-1\": 720,\r\n                    \"20-to-1\": 1360\r\n                },\r\n                cambridge: \"405,405\",\r\n                junior: \"400,570\",\r\n                summerActivitiesPrice: 130,\r\n                summerSupplement: {\r\n                    general: 50,\r\n                    intensive: 50\r\n                },\r\n                under12Supplement: 40, \/\/ \u00a340 per week for under 12\r\n                privateFosterSupplement: 75 \/\/ \u00a375 per week for private foster family supplement\r\n            };\r\n\r\n            \/\/ Cambridge course dates for 2026 - UPDATED\r\n            const cambridgeDates = {\r\n                \"Cambridge English B2 First (21hrs per week - 4 weeks)\": [\r\n                    \"16\/02\/2026\",\r\n                    \"03\/08\/2026\",\r\n                    \"16\/11\/2026\"\r\n                ],\r\n                \"Cambridge English C1 Advanced (21hrs per week - 4 weeks)\": [\r\n                    \"23\/02\/2026\",\r\n                    \"03\/08\/2026\",\r\n                    \"16\/11\/2026\"\r\n                ]\r\n            };\r\n\r\n            \/\/ Summer dates for 2026 (28th June to 23rd August)\r\n            const summerDates = {\r\n                start: new Date(2026, 5, 28), \/\/ June 28, 2026\r\n                end: new Date(2026, 7, 17)    \/\/ August 23, 2026\r\n            };\r\n\r\n            \/\/ Junior summer course dates (28th June to 17th August 2026)\r\n            const juniorSummerDates = {\r\n                start: new Date(2026, 5, 28), \/\/ June 28, 2026\r\n                end: new Date(2026, 7, 17)    \/\/ August 17, 2026\r\n            };\r\n\r\n            \/\/ Transfer prices for 2026\r\n            const transferPrices = [\r\n                { value: \"220\", text: \"London Heathrow (Private Taxi)\", summerOnly: false },\r\n                { value: \"150\", text: \"London Heathrow (Summer Collective)\", summerOnly: true },\r\n                { value: \"245\", text: \"London Gatwick (Private Taxi)\", summerOnly: false },\r\n                { value: \"265\", text: \"London Luton (Private Taxi)\", summerOnly: false },\r\n                { value: \"120\", text: \"Southampton (Private Taxi)\", summerOnly: false },\r\n                { value: \"60\", text: \"Bournemouth (Private Taxi)\", summerOnly: false },\r\n                { value: \"295\", text: \"London City (Private Taxi)\", summerOnly: false },\r\n                { value: \"295\", text: \"Stansted (Private Taxi)\", summerOnly: false }\r\n            ];\r\n\r\n            \/\/ Accommodation prices for 2026 - REMOVED private foster family option\r\n            const accommodationPrices = [\r\n                { value: \"180\", text: \"Adult Part Board Homestay (Age 16+)\" },\r\n                { value: \"210\", text: \"Adult Full Board Homestay Accommodation (Age 15+)\" },\r\n                { value: \"POA\", text: \"Summer Season Self Catered Residential (Age 18+)\" },\r\n                { value: \"255\", text: \"Full Board Homestay Accommodation (Age 10-15)\" }\r\n            ];\r\n\r\n            \/\/ Valid promo codes for 2026 (10% off adult General\/Intensive English)\r\n            const validPromoCodes = [\r\n                \"BRAZIL10\", \"JAPAN10\", \"LATAM10\", \"KOREA10\", \r\n                \"TAIWAN10\", \"THAILAND10\", \"TURKEY10\"\r\n            ];\r\n\r\n            \/\/ Get DOM elements\r\n            const elements = {\r\n                \/\/ Progress steps\r\n                step1: document.getElementById('sse-step-1'),\r\n                step2: document.getElementById('sse-step-2'),\r\n                step3: document.getElementById('sse-step-3'),\r\n                step4: document.getElementById('sse-step-4'),\r\n                step5: document.getElementById('sse-step-5'),\r\n                \r\n                \/\/ Warning message\r\n                juniorWarning: document.getElementById('sse-juniorWarning'),\r\n                adjustedWeeks: document.getElementById('sse-adjustedWeeks'),\r\n                \r\n                \/\/ Form groups\r\n                courseCategoryGroup: document.getElementById('sse-courseCategoryGroup'),\r\n                courseGroup: document.getElementById('sse-courseGroup'),\r\n                weeksGroup: document.getElementById('sse-weeksGroup'),\r\n                dateGroup: document.getElementById('sse-dateGroup'),\r\n                accommodationGroup: document.getElementById('sse-accommodationGroup'),\r\n                arrivalTransferGroup: document.getElementById('sse-arrivalTransferGroup'),\r\n                departureTransferGroup: document.getElementById('sse-departureTransferGroup'),\r\n                extrasGroup: document.getElementById('sse-extrasGroup'),\r\n                promoGroup: document.getElementById('sse-promoGroup'),\r\n                totalPriceGroup: document.getElementById('sse-totalPriceGroup'),\r\n                breakdownGroup: document.getElementById('sse-breakdownGroup'),\r\n                actionsGroup: document.getElementById('sse-actionsGroup'),\r\n                \r\n                \/\/ Form inputs\r\n                courseCategory: document.getElementById('sse-courseCategory'),\r\n                course: document.getElementById('sse-course'),\r\n                weeks: document.getElementById('sse-weeks'),\r\n                startDate: document.getElementById('sse-startDate'),\r\n                accommodation: document.getElementById('sse-accommodation'),\r\n                arrivalTransfer: document.getElementById('sse-arrivalTransfer'),\r\n                departureTransfer: document.getElementById('sse-departureTransfer'),\r\n                privateBathroom: document.getElementById('sse-privateBathroom'),\r\n                specialDiet: document.getElementById('sse-specialDiet'),\r\n                studentInsurance: document.getElementById('sse-studentInsurance'),\r\n                summerActivities: document.getElementById('sse-summerActivities'),\r\n                summerActivitiesPrice: document.getElementById('sse-summerActivitiesPrice'),\r\n                cambridgeExam: document.getElementById('sse-cambridgeExam'),\r\n                cambridgeExamContainer: document.getElementById('sse-cambridgeExamContainer'),\r\n                under12: document.getElementById('sse-under12'),\r\n                under12Container: document.getElementById('sse-under12Container'),\r\n                under12Error: document.getElementById('sse-under12Error'),\r\n                privateBathroomError: document.getElementById('sse-privateBathroomError'),\r\n                specialDietError: document.getElementById('sse-specialDietError'),\r\n                summerActivitiesError: document.getElementById('sse-summerActivitiesError'),\r\n                promoCode: document.getElementById('sse-promoCode'),\r\n                promoCodeError: document.getElementById('sse-promoCodeError'),\r\n                promoCodeSuccess: document.getElementById('sse-promoCodeSuccess'),\r\n                totalPrice: document.getElementById('sse-TotalPrice'),\r\n                breakdown: document.getElementById('sse-breakdownGroup'),\r\n                bookNow: document.getElementById('sse-bookNow'),\r\n                downloadQuote: document.getElementById('sse-downloadQuote'),\r\n                viewPriceList: document.getElementById('sse-viewPriceList'),\r\n                resetForm: document.getElementById('sse-resetForm'),\r\n                \r\n                \/\/ Floating reset button\r\n                floatingReset: document.getElementById('sse-floatingReset')\r\n            };\r\n\r\n            let datePicker = null;\r\n            let currentCalculationData = null;\r\n            let lastJuniorAdjustmentWeeks = 0;\r\n\r\n            \/\/ Initialize the calculator\r\n            function init() {\r\n                \/\/ Set up event listeners\r\n                elements.courseCategory.addEventListener('change', onCategoryChange);\r\n                elements.course.addEventListener('change', onCourseChange);\r\n                elements.weeks.addEventListener('change', onWeeksChange);\r\n                elements.startDate.addEventListener('change', onDateChange);\r\n                elements.accommodation.addEventListener('change', onAccommodationChange);\r\n                elements.arrivalTransfer.addEventListener('change', calculateTotal);\r\n                elements.departureTransfer.addEventListener('change', calculateTotal);\r\n                elements.privateBathroom.addEventListener('change', calculateTotal);\r\n                elements.specialDiet.addEventListener('change', calculateTotal);\r\n                elements.studentInsurance.addEventListener('change', calculateTotal);\r\n                elements.summerActivities.addEventListener('change', calculateTotal);\r\n                elements.cambridgeExam.addEventListener('change', calculateTotal);\r\n                elements.under12.addEventListener('change', calculateTotal);\r\n                elements.promoCode.addEventListener('input', calculateTotal);\r\n                elements.bookNow.addEventListener('click', sendBookingEmail);\r\n                elements.downloadQuote.addEventListener('click', downloadQuotePDF);\r\n                elements.viewPriceList.addEventListener('click', viewPriceList);\r\n                elements.resetForm.addEventListener('click', resetForm);\r\n                elements.floatingReset.addEventListener('click', resetForm);\r\n\r\n                \/\/ Initialize summer activities price\r\n                elements.summerActivitiesPrice.textContent = `\u00a3${courseData.summerActivitiesPrice}`;\r\n            }\r\n\r\n            function showElement(element) {\r\n                element.classList.remove('hidden');\r\n                \/\/ Add fade-in animation for form groups\r\n                if (element.classList.contains('sse-form-group')) {\r\n                    element.classList.add('fade-in');\r\n                    setTimeout(() => {\r\n                        element.classList.remove('fade-in');\r\n                    }, 500);\r\n                } else {\r\n                    \/\/ For container cards, use visible class\r\n                    element.classList.add('visible');\r\n                }\r\n            }\r\n\r\n            function hideElement(element) {\r\n                element.classList.add('hidden');\r\n                element.classList.remove('visible', 'fade-in');\r\n            }\r\n\r\n            function updateProgress() {\r\n                \/\/ Reset all steps\r\n                [elements.step1, elements.step2, elements.step3, elements.step4, elements.step5].forEach(step => {\r\n                    step.classList.remove('active', 'completed');\r\n                });\r\n\r\n                \/\/ Determine current step\r\n                if (elements.courseCategory.value) {\r\n                    elements.step1.classList.add('completed');\r\n                    elements.step2.classList.add('active');\r\n                } else {\r\n                    elements.step1.classList.add('active');\r\n                    return;\r\n                }\r\n\r\n                if (elements.course.value && elements.course.value !== '0') {\r\n                    elements.step2.classList.add('completed');\r\n                    elements.step3.classList.add('active');\r\n                } else {\r\n                    return;\r\n                }\r\n\r\n                if (elements.weeks.value) {\r\n                    elements.step3.classList.add('completed');\r\n                    elements.step4.classList.add('active');\r\n                } else {\r\n                    return;\r\n                }\r\n\r\n                if (elements.startDate.value) {\r\n                    elements.step4.classList.add('completed');\r\n                    elements.step5.classList.add('active');\r\n                }\r\n            }\r\n\r\n            function updateFloatingResetButton() {\r\n                \/\/ Show floating reset if any form field has a value\r\n                const hasSelection = elements.courseCategory.value || \r\n                                    (elements.course.value && elements.course.value !== '0') ||\r\n                                    elements.weeks.value ||\r\n                                    elements.startDate.value ||\r\n                                    (elements.accommodation.value && elements.accommodation.value !== '0');\r\n                \r\n                if (hasSelection) {\r\n                    elements.floatingReset.classList.add('visible');\r\n                } else {\r\n                    elements.floatingReset.classList.remove('visible');\r\n                }\r\n            }\r\n\r\n            function onCategoryChange() {\r\n                const category = elements.courseCategory.value;\r\n                \r\n                if (category) {\r\n                    filterCourses();\r\n                    showElement(elements.courseGroup);\r\n                    updateProgress();\r\n                    updateFloatingResetButton();\r\n                    \r\n                    \/\/ Hide subsequent steps\r\n                    hideElement(elements.weeksGroup);\r\n                    hideElement(elements.dateGroup);\r\n                    hideElement(elements.accommodationGroup);\r\n                    hideElement(elements.extrasGroup);\r\n                    hideElement(elements.arrivalTransferGroup);\r\n                    hideElement(elements.departureTransferGroup);\r\n                    hideElement(elements.promoGroup);\r\n                    hideElement(elements.totalPriceGroup);\r\n                    hideElement(elements.breakdownGroup);\r\n                    hideElement(elements.actionsGroup);\r\n                    hideElement(elements.juniorWarning);\r\n                    \r\n                    \/\/ Reset subsequent fields\r\n                    elements.course.value = '0';\r\n                    elements.weeks.innerHTML = '<option value=\"\" disabled selected>Select duration<\/option>';\r\n                    elements.startDate.value = '';\r\n                    elements.accommodation.innerHTML = '<option value=\"0\">No accommodation required<\/option>';\r\n                    elements.arrivalTransfer.innerHTML = '<option value=\"0\">No Arrival Transfer required<\/option>';\r\n                    elements.departureTransfer.innerHTML = '<option value=\"0\">No Departure Transfer required<\/option>';\r\n                } else {\r\n                    hideElement(elements.courseGroup);\r\n                    updateProgress();\r\n                    updateFloatingResetButton();\r\n                }\r\n            }\r\n\r\n            function filterCourses() {\r\n                const category = elements.courseCategory.value;\r\n                elements.course.innerHTML = '<option value=\"0\">Select a course<\/option>';\r\n\r\n                if (category === 'general') {\r\n                    addCourseOption('310,280,245,235', 'General English (15hrs per week)');\r\n                    addCourseOption('355,325,290,280', 'Intensive English (21hrs per week)');\r\n                } else if (category === 'extra') {\r\n                    addCourseOption('1-to-1', '1-to-1 English Lessons (Price per hour)');\r\n                    addCourseOption('5-to-1', '5-hour 1-to-1 English Lessons Package');\r\n                    addCourseOption('10-to-1', '10-hour 1-to-1 English Lessons Package');\r\n                    addCourseOption('20-to-1', '20-hour 1-to-1 English Lessons Package');\r\n                } else if (category === 'cambridge') {\r\n                    addCourseOption('405', 'Cambridge English B2 First (21hrs per week - 4 weeks)');\r\n                    addCourseOption('405', 'Cambridge English C1 Advanced (21hrs per week - 4 weeks)');\r\n                } else if (category === 'junior') {\r\n                    addCourseOption('400', 'Junior Summer General English (15hrs per week)');\r\n                    addCourseOption('570', 'Junior Summer General English + activities + full day excursion (15hrs per week)');\r\n                }\r\n            }\r\n\r\n            function addCourseOption(value, text) {\r\n                const option = document.createElement('option');\r\n                option.value = value;\r\n                option.textContent = text;\r\n                elements.course.appendChild(option);\r\n            }\r\n\r\n            function onCourseChange() {\r\n                const courseSelected = elements.course.value && elements.course.value !== '0';\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                const isCambridge = selectedCourse.includes('Cambridge English');\r\n                \r\n                if (courseSelected) {\r\n                    \/\/ Populate weeks dropdown first\r\n                    updateWeeksDropdown();\r\n                    \r\n                    \/\/ Then show the weeks group\r\n                    showElement(elements.weeksGroup);\r\n                    \r\n                    \/\/ If it's a Cambridge course, auto-select 4 weeks and proceed\r\n                    if (isCambridge) {\r\n                        elements.weeks.value = 4;\r\n                        \/\/ Call onWeeksChange to show date picker and initialize everything\r\n                        onWeeksChange();\r\n                    }\r\n                    \r\n                    updateProgress();\r\n                    updateFloatingResetButton();\r\n                    \r\n                    \/\/ Hide subsequent steps (will be shown by onWeeksChange if Cambridge)\r\n                    hideElement(elements.dateGroup);\r\n                    hideElement(elements.accommodationGroup);\r\n                    hideElement(elements.extrasGroup);\r\n                    hideElement(elements.arrivalTransferGroup);\r\n                    hideElement(elements.departureTransferGroup);\r\n                    hideElement(elements.promoGroup);\r\n                    hideElement(elements.totalPriceGroup);\r\n                    hideElement(elements.breakdownGroup);\r\n                    hideElement(elements.actionsGroup);\r\n                    hideElement(elements.juniorWarning);\r\n                    \r\n                    \/\/ Reset subsequent fields\r\n                    if (!isCambridge) {\r\n                        elements.weeks.value = '';\r\n                    }\r\n                    elements.startDate.value = '';\r\n                    filterAccommodations();\r\n                    filterTransfers();\r\n                } else {\r\n                    hideElement(elements.weeksGroup);\r\n                    updateProgress();\r\n                    updateFloatingResetButton();\r\n                }\r\n                \r\n                calculateTotal();\r\n            }\r\n\r\n            function updateWeeksDropdown() {\r\n                const category = elements.courseCategory.value;\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                const isSummerCourse = selectedCourse.includes('Summer');\r\n\r\n                elements.weeks.innerHTML = '<option value=\"\" disabled selected>Select duration<\/option>';\r\n\r\n                if (category === 'cambridge' || selectedCourse.includes('Cambridge English')) {\r\n                    \/\/ Cambridge courses are always 4 weeks - UPDATED\r\n                    addWeekOption(4, '4 weeks');\r\n                    elements.weeks.disabled = false; \/\/ Changed to false so it can be selected\r\n                } else {\r\n                    const maxWeeks = (category === 'junior' || isSummerCourse) ? 8 : 52;\r\n                    for (let i = 1; i <= maxWeeks; i++) {\r\n                        addWeekOption(i, `${i} week${i > 1 ? 's' : ''}`);\r\n                    }\r\n                    elements.weeks.disabled = false;\r\n                }\r\n            }\r\n\r\n            function addWeekOption(value, text) {\r\n                const option = document.createElement('option');\r\n                option.value = value;\r\n                option.textContent = text;\r\n                elements.weeks.appendChild(option);\r\n            }\r\n\r\n            function onWeeksChange() {\r\n                const weeksSelected = elements.weeks.value;\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                const isJuniorCourse = selectedCourse.includes('Junior');\r\n                const isCambridge = selectedCourse.includes('Cambridge English');\r\n                \r\n                if (weeksSelected) {\r\n                    \/\/ Initialize date picker and show date group\r\n                    initializeDatePicker();\r\n                    showElement(elements.dateGroup);\r\n                    \r\n                    \/\/ For junior courses, also show accommodation immediately after selecting weeks\r\n                    if (isJuniorCourse) {\r\n                        showAccommodationAndExtrasForJunior();\r\n                    }\r\n                    \r\n                    updateProgress();\r\n                    updateFloatingResetButton();\r\n                    \r\n                    \/\/ Hide subsequent steps that aren't shown yet\r\n                    if (!isJuniorCourse && !isCambridge) {\r\n                        hideElement(elements.accommodationGroup);\r\n                        hideElement(elements.extrasGroup);\r\n                    }\r\n                    hideElement(elements.arrivalTransferGroup);\r\n                    hideElement(elements.departureTransferGroup);\r\n                    hideElement(elements.promoGroup);\r\n                    hideElement(elements.totalPriceGroup);\r\n                    hideElement(elements.breakdownGroup);\r\n                    hideElement(elements.actionsGroup);\r\n                    \r\n                    filterAccommodations();\r\n                    filterTransfers();\r\n                    \r\n                    \/\/ For Cambridge courses, auto-select the first date\r\n                    if (isCambridge && cambridgeDates[selectedCourse] && cambridgeDates[selectedCourse].length > 0) {\r\n                        setTimeout(() => {\r\n                            const firstDate = cambridgeDates[selectedCourse][0];\r\n                            elements.startDate.value = firstDate;\r\n                            \/\/ Now trigger date change to show accommodation\r\n                            onDateChange();\r\n                        }, 100);\r\n                    }\r\n                } else {\r\n                    hideElement(elements.dateGroup);\r\n                    if (!isJuniorCourse && !isCambridge) {\r\n                        hideElement(elements.accommodationGroup);\r\n                        hideElement(elements.extrasGroup);\r\n                    }\r\n                    updateProgress();\r\n                    updateFloatingResetButton();\r\n                }\r\n                \r\n                calculateTotal();\r\n            }\r\n\r\n            function showAccommodationAndExtrasForJunior() {\r\n                \/\/ Show both accommodation and extras sections for junior courses\r\n                showElement(elements.accommodationGroup);\r\n                showElement(elements.extrasGroup);\r\n                \r\n                \/\/ Also show transfers since junior courses typically need transfers\r\n                showElement(elements.arrivalTransferGroup);\r\n                showElement(elements.departureTransferGroup);\r\n                \r\n                \/\/ Update extras availability for junior courses\r\n                updateExtrasAvailability();\r\n                updateSummerActivitiesAvailability();\r\n                updateUnder12Availability();\r\n            }\r\n\r\n            function initializeDatePicker() {\r\n                const category = elements.courseCategory.value;\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                \r\n                if (!category) {\r\n                    return;\r\n                }\r\n\r\n                if (datePicker) {\r\n                    datePicker.destroy();\r\n                }\r\n\r\n                \/\/ Set min date to today\r\n                const minDate = new Date();\r\n                minDate.setHours(0, 0, 0, 0);\r\n\r\n                if (cambridgeDates[selectedCourse]) {\r\n                    \/\/ Cambridge courses have specific dates\r\n                    datePicker = flatpickr(elements.startDate, {\r\n                        minDate: minDate,\r\n                        enable: cambridgeDates[selectedCourse],\r\n                        dateFormat: 'd\/m\/Y',\r\n                        disableMobile: true,\r\n                        onChange: onDateChange\r\n                    });\r\n                } else if (selectedCourse.includes('Junior Summer')) {\r\n                    \/\/ Junior summer courses: Sundays from 28th June to 17th August 2026\r\n                    const juniorStart = juniorSummerDates.start;\r\n                    const juniorEnd = juniorSummerDates.end;\r\n                    const effectiveMinDate = juniorStart > minDate ? juniorStart : minDate;\r\n\r\n                    datePicker = flatpickr(elements.startDate, {\r\n                        minDate: effectiveMinDate,\r\n                        maxDate: juniorEnd,\r\n                        enable: [function(date) {\r\n                            return date.getDay() === 0 && \r\n                                   date >= effectiveMinDate && \r\n                                   date <= juniorEnd;\r\n                        }],\r\n                        dateFormat: 'd\/m\/Y',\r\n                        disableMobile: true,\r\n                        defaultDate: juniorStart,\r\n                        onChange: onDateChange\r\n                    });\r\n                } else {\r\n                    \/\/ Other courses: Sundays and Mondays\r\n                    datePicker = flatpickr(elements.startDate, {\r\n                        minDate: minDate,\r\n                        enable: [function(date) {\r\n                            return (date.getDay() === 0 || date.getDay() === 1) && date >= minDate;\r\n                        }],\r\n                        dateFormat: 'd\/m\/Y',\r\n                        disableMobile: true,\r\n                        onChange: onDateChange\r\n                    });\r\n                }\r\n            }\r\n\r\n            function onDateChange() {\r\n                if (elements.startDate.value) {\r\n                    \/\/ Show accommodation and extras for non-junior courses and Cambridge courses\r\n                    const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                    const isJuniorCourse = selectedCourse.includes('Junior');\r\n                    const isCambridge = selectedCourse.includes('Cambridge English');\r\n                    \r\n                    if (!isJuniorCourse || isCambridge) {\r\n                        showElement(elements.accommodationGroup);\r\n                        showElement(elements.extrasGroup);\r\n                    }\r\n                    \r\n                    updateProgress();\r\n                    updateFloatingResetButton();\r\n                    \r\n                    \/\/ Show transfers after date is selected\r\n                    showElement(elements.arrivalTransferGroup);\r\n                    showElement(elements.departureTransferGroup);\r\n                    \r\n                    \/\/ Show promo code section\r\n                    showElement(elements.promoGroup);\r\n                    \r\n                    filterAccommodations();\r\n                    filterTransfers();\r\n                    updateExtrasAvailability();\r\n                    updateSummerActivitiesAvailability();\r\n                    updateUnder12Availability();\r\n                    \r\n                    \/\/ Check for junior course end date constraint\r\n                    checkJuniorCourseEndDate();\r\n                }\r\n                \r\n                calculateTotal();\r\n            }\r\n\r\n            function onAccommodationChange() {\r\n                updateExtrasAvailability();\r\n                updateSummerActivitiesAvailability();\r\n                updateUnder12Availability();\r\n                calculateTotal();\r\n                updateFloatingResetButton();\r\n            }\r\n\r\n            function checkJuniorCourseEndDate() {\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                const isJuniorSummer = selectedCourse.includes('Junior Summer');\r\n                \r\n                if (!isJuniorSummer || !elements.startDate.value || !elements.weeks.value) {\r\n                    hideElement(elements.juniorWarning);\r\n                    return;\r\n                }\r\n\r\n                const weeks = parseInt(elements.weeks.value);\r\n                const dateParts = elements.startDate.value.split('\/');\r\n                const startDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);\r\n                const endDate = new Date(startDate);\r\n                endDate.setDate(endDate.getDate() + (weeks * 7));\r\n                \r\n                \/\/ Junior courses cannot end after August 23rd, 2026\r\n                const maxEndDate = new Date(2026, 7, 23); \/\/ August 23, 2026\r\n                \r\n                if (endDate > maxEndDate) {\r\n                    \/\/ Calculate maximum weeks possible\r\n                    const maxWeeks = Math.floor((maxEndDate - startDate) \/ (7 * 24 * 60 * 60 * 1000));\r\n                    \r\n                    if (maxWeeks >= 1) {\r\n                        \/\/ Update weeks dropdown to max weeks\r\n                        elements.weeks.value = maxWeeks;\r\n                        lastJuniorAdjustmentWeeks = maxWeeks;\r\n                        elements.adjustedWeeks.textContent = maxWeeks;\r\n                        showElement(elements.juniorWarning);\r\n                        \r\n                        \/\/ Recalculate total with adjusted weeks\r\n                        calculateTotal();\r\n                    } else {\r\n                        \/\/ If even 1 week would go past the date, clear the selection\r\n                        elements.weeks.value = '';\r\n                        hideElement(elements.juniorWarning);\r\n                    }\r\n                } else {\r\n                    hideElement(elements.juniorWarning);\r\n                }\r\n            }\r\n\r\n            function filterAccommodations() {\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                const selectedWeeks = parseInt(elements.weeks.value) || 1;\r\n                const startDateStr = elements.startDate.value;\r\n\r\n                let isSummer = false;\r\n                if (startDateStr) {\r\n                    const dateParts = startDateStr.split('\/');\r\n                    const startDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);\r\n                    isSummer = isSummerDate(startDate);\r\n                }\r\n\r\n                let filteredAccommodations = [];\r\n\r\n                if (['General English (15hrs per week)', 'Intensive English (21hrs per week)'].includes(selectedCourse)) {\r\n                    filteredAccommodations = accommodationPrices.filter(accom => \r\n                        accom.text.includes('Adult') || accom.text.includes('Homestay'));\r\n                } else if (['Cambridge English B2 First (21hrs per week - 4 weeks)', \r\n                           'Cambridge English C1 Advanced (21hrs per week - 4 weeks)'].includes(selectedCourse)) {\r\n                    filteredAccommodations = accommodationPrices.filter(accom =>\r\n                        accom.text.includes('Age 16+') || accom.text.includes('Self Catered Residential'));\r\n                } else if (selectedCourse.includes('Junior')) {\r\n                    \/\/ Junior courses - show only Full Board Homestay Accommodation (Age 10-15)\r\n                    filteredAccommodations = accommodationPrices.filter(accom => \r\n                        accom.text.includes('Full Board Homestay Accommodation (Age 10-15)'));\r\n                } else {\r\n                    filteredAccommodations = accommodationPrices;\r\n                }\r\n\r\n                elements.accommodation.innerHTML = '<option value=\"0\">No accommodation required<\/option>';\r\n                filteredAccommodations.forEach(accom => {\r\n                    const option = document.createElement('option');\r\n                    const value = (isSummer && accom.summerValue) ? accom.summerValue : accom.value;\r\n                    option.value = value === 'POA' ? '0' : value;\r\n                    option.textContent = accom.text;\r\n                    elements.accommodation.appendChild(option);\r\n                });\r\n\r\n                updateExtrasAvailability();\r\n                updateSummerActivitiesAvailability();\r\n                updateUnder12Availability();\r\n            }\r\n\r\n            function isSummerDate(date) {\r\n                return date >= summerDates.start && date <= summerDates.end;\r\n            }\r\n\r\n            function filterTransfers() {\r\n                const startDateStr = elements.startDate.value;\r\n                const weeks = parseInt(elements.weeks.value) || 0;\r\n                \r\n                let isStartDateInSummer = false;\r\n                let isEndDateInSummer = false;\r\n                \r\n                if (startDateStr && weeks > 0) {\r\n                    const dateParts = startDateStr.split('\/');\r\n                    const startDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);\r\n                    const endDate = new Date(startDate);\r\n                    endDate.setDate(endDate.getDate() + (weeks * 7));\r\n                    \r\n                    isStartDateInSummer = isSummerDate(startDate);\r\n                    isEndDateInSummer = isSummerDate(endDate);\r\n                }\r\n\r\n                \/\/ Filter arrival transfers\r\n                elements.arrivalTransfer.innerHTML = '<option value=\"0\">No Arrival Transfer required<\/option>';\r\n                transferPrices.forEach(transfer => {\r\n                    if (!transfer.summerOnly || isStartDateInSummer) {\r\n                        addTransferOption(elements.arrivalTransfer, transfer.value, transfer.text);\r\n                    }\r\n                });\r\n\r\n                \/\/ Filter departure transfers\r\n                elements.departureTransfer.innerHTML = '<option value=\"0\">No Departure Transfer required<\/option>';\r\n                transferPrices.forEach(transfer => {\r\n                    if (!transfer.summerOnly || isEndDateInSummer) {\r\n                        addTransferOption(elements.departureTransfer, transfer.value, transfer.text);\r\n                    }\r\n                });\r\n            }\r\n\r\n            function addTransferOption(select, value, text) {\r\n                const option = document.createElement('option');\r\n                option.value = value;\r\n                option.textContent = text;\r\n                select.appendChild(option);\r\n            }\r\n\r\n            function updateExtrasAvailability() {\r\n                const accommodationSelected = elements.accommodation.value !== '0';\r\n                const accommodationText = elements.accommodation.options[elements.accommodation.selectedIndex]?.text || '';\r\n                const isAge15Plus = accommodationText.includes('Age 15') || accommodationText.includes('Age 16+') || accommodationText.includes('Age 18+');\r\n\r\n                \/\/ Private bathroom\r\n                if (!accommodationSelected || !isAge15Plus) {\r\n                    elements.privateBathroom.checked = false;\r\n                    elements.privateBathroom.disabled = true;\r\n                    elements.privateBathroomError.style.display = accommodationSelected ? 'block' : 'none';\r\n                } else {\r\n                    elements.privateBathroom.disabled = false;\r\n                    elements.privateBathroomError.style.display = 'none';\r\n                }\r\n\r\n                \/\/ Special diet\r\n                if (!accommodationSelected) {\r\n                    elements.specialDiet.checked = false;\r\n                    elements.specialDiet.disabled = true;\r\n                    elements.specialDietError.style.display = 'block';\r\n                } else {\r\n                    elements.specialDiet.disabled = false;\r\n                    elements.specialDietError.style.display = 'none';\r\n                }\r\n\r\n                \/\/ Cambridge exam\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                elements.cambridgeExamContainer.style.display = selectedCourse.includes('Cambridge English') ? 'flex' : 'none';\r\n\r\n                calculateTotal();\r\n            }\r\n\r\n            function updateSummerActivitiesAvailability() {\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                const isGeneralOrIntensive = ['General English (15hrs per week)', 'Intensive English (21hrs per week)'].includes(selectedCourse);\r\n                const weeks = parseInt(elements.weeks.value) || 0;\r\n                const startDateStr = elements.startDate.value;\r\n\r\n                let hasSummerWeeks = false;\r\n                \r\n                if (startDateStr && weeks > 0 && isGeneralOrIntensive) {\r\n                    const dateParts = startDateStr.split('\/');\r\n                    const startDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);\r\n                    \r\n                    \/\/ Check if any week falls within summer period\r\n                    for (let i = 0; i < weeks; i++) {\r\n                        const weekStart = new Date(startDate);\r\n                        weekStart.setDate(weekStart.getDate() + (i * 7));\r\n                        const weekEnd = new Date(weekStart);\r\n                        weekEnd.setDate(weekEnd.getDate() + 6);\r\n                        \r\n                        if (weekStart <= summerDates.end && weekEnd >= summerDates.start) {\r\n                            hasSummerWeeks = true;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (!isGeneralOrIntensive || !hasSummerWeeks) {\r\n                    elements.summerActivities.checked = false;\r\n                    elements.summerActivities.disabled = true;\r\n                    elements.summerActivitiesError.style.display = 'block';\r\n                } else {\r\n                    elements.summerActivities.disabled = false;\r\n                    elements.summerActivitiesError.style.display = 'none';\r\n                }\r\n\r\n                calculateTotal();\r\n            }\r\n\r\n            function updateUnder12Availability() {\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex]?.text || '';\r\n                const isJuniorCourse = selectedCourse.includes('Junior');\r\n                \r\n                if (isJuniorCourse) {\r\n                    elements.under12Container.style.display = 'flex';\r\n                    elements.under12.disabled = false;\r\n                    elements.under12Error.style.display = 'none';\r\n                } else {\r\n                    elements.under12.checked = false;\r\n                    elements.under12.disabled = true;\r\n                    elements.under12Container.style.display = 'none';\r\n                    elements.under12Error.style.display = 'none';\r\n                }\r\n\r\n                calculateTotal();\r\n            }\r\n\r\n            function calculateTotal() {\r\n                const weeks = parseInt(elements.weeks.value) || 0;\r\n                const selectedCourse = elements.course.options[elements.course.selectedIndex];\r\n                const courseText = selectedCourse?.text || '';\r\n                const courseValue = selectedCourse?.value || '0';\r\n                \r\n                \/\/ Calculate course price\r\n                let coursePrice = 0;\r\n                \r\n                if (courseText.includes('General English') || courseText.includes('Intensive English')) {\r\n                    const prices = courseValue.split(',');\r\n                    let tier = 0;\r\n                    if (weeks >= 1 && weeks <= 11) tier = 0;\r\n                    else if (weeks >= 12 && weeks <= 23) tier = 1;\r\n                    else if (weeks >= 24 && weeks <= 35) tier = 2;\r\n                    else tier = 3;\r\n                    \r\n                    const pricePerWeek = parseInt(prices[Math.min(tier, prices.length - 1)]);\r\n                    coursePrice = pricePerWeek * weeks;\r\n                } else if (courseValue === '1-to-1') {\r\n                    coursePrice = 80 * weeks;\r\n                } else if (courseValue === '5-to-1') {\r\n                    coursePrice = 380;\r\n                } else if (courseValue === '10-to-1') {\r\n                    coursePrice = 720;\r\n                } else if (courseValue === '20-to-1') {\r\n                    coursePrice = 1360;\r\n                } else {\r\n                    \/\/ Cambridge and Junior courses\r\n                    const prices = courseValue.split(',');\r\n                    const pricePerWeek = parseInt(prices[0]);\r\n                    coursePrice = pricePerWeek * weeks;\r\n                }\r\n                \r\n                \/\/ Book supplement\r\n                const bookSupplement = weeks === 1 ? 50 : 0;\r\n                \r\n                \/\/ Private foster family supplement for junior courses\r\n                let privateFosterSupplementCost = 0;\r\n                const accommodationText = elements.accommodation.options[elements.accommodation.selectedIndex]?.text || '';\r\n                const isJuniorCourse = courseText.includes('Junior');\r\n                const isFullBoardJunior = accommodationText.includes('Full Board Homestay Accommodation (Age 10-15)');\r\n                \r\n                \/\/ Apply \u00a375 per week supplement for junior courses with full board accommodation for 4+ weeks\r\n                if (isJuniorCourse && isFullBoardJunior && weeks >= 4) {\r\n                    privateFosterSupplementCost = courseData.privateFosterSupplement * weeks;\r\n                }\r\n                \r\n                \/\/ Promo code\r\n                const promoCode = elements.promoCode.value.trim().toUpperCase();\r\n                let discount = 0;\r\n                let discountedCoursePrice = coursePrice;\r\n                \r\n                \/\/ Summer supplement and activities\r\n                const startDateStr = elements.startDate.value;\r\n                let summerWeeks = 0;\r\n                let courseSummerSupplement = 0;\r\n                let summerActivitiesCost = 0;\r\n                let promoEligibleWeeks = 0;\r\n\r\n                if (startDateStr && weeks > 0) {\r\n                    const dateParts = startDateStr.split('\/');\r\n                    const startDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);\r\n                    \r\n                    \/\/ Calculate summer weeks\r\n                    for (let i = 0; i < weeks; i++) {\r\n                        const weekStart = new Date(startDate);\r\n                        weekStart.setDate(weekStart.getDate() + (i * 7));\r\n                        const weekEnd = new Date(weekStart);\r\n                        weekEnd.setDate(weekEnd.getDate() + 6);\r\n                        \r\n                        if (weekStart <= summerDates.end && weekEnd >= summerDates.start) {\r\n                            summerWeeks++;\r\n                        }\r\n                        \r\n                        \/\/ Check promo eligibility\r\n                        if (courseText === 'General English (15hrs per week)' || \r\n                            courseText === 'Intensive English (21hrs per week)') {\r\n                            promoEligibleWeeks++;\r\n                        }\r\n                    }\r\n                    \r\n                    \/\/ Course summer supplement (waived for 10+ weeks)\r\n                    if ((courseText === 'Intensive English (21hrs per week)' || \r\n                         courseText === 'General English (15hrs per week)') && weeks < 10) {\r\n                        const supplementType = courseText.includes('Intensive') ? 'intensive' : 'general';\r\n                        courseSummerSupplement = summerWeeks * courseData.summerSupplement[supplementType];\r\n                    }\r\n                    \r\n                    \/\/ Apply promo code\r\n                    if (validPromoCodes.includes(promoCode) && promoEligibleWeeks > 0) {\r\n                        const pricePerWeek = coursePrice \/ weeks;\r\n                        discount = Math.round(pricePerWeek * promoEligibleWeeks * 0.1);\r\n                        discountedCoursePrice = coursePrice - discount;\r\n                        elements.promoCodeError.style.display = 'none';\r\n                        elements.promoCodeSuccess.style.display = 'block';\r\n                    } else if (promoCode !== '') {\r\n                        elements.promoCodeError.style.display = 'block';\r\n                        elements.promoCodeSuccess.style.display = 'none';\r\n                    } else {\r\n                        elements.promoCodeError.style.display = 'none';\r\n                        elements.promoCodeSuccess.style.display = 'none';\r\n                    }\r\n                    \r\n                    \/\/ Summer activities\r\n                    if (elements.summerActivities.checked && !elements.summerActivities.disabled) {\r\n                        summerActivitiesCost = summerWeeks * courseData.summerActivitiesPrice;\r\n                    }\r\n                }\r\n                \r\n                \/\/ Under 12 supplement\r\n                let under12SupplementCost = 0;\r\n                if (elements.under12.checked && !elements.under12.disabled) {\r\n                    under12SupplementCost = courseData.under12Supplement * weeks;\r\n                }\r\n                \r\n                \/\/ Accommodation costs\r\n                const accommodation = parseInt(elements.accommodation.value) * weeks;\r\n                const arrivalTransfer = parseInt(elements.arrivalTransfer.value);\r\n                const departureTransfer = parseInt(elements.departureTransfer.value);\r\n                const registrationFee = 120;\r\n                \r\n                \/\/ Extras\r\n                let privateBathroomCost = 0;\r\n                if (elements.privateBathroom.checked && !elements.privateBathroom.disabled) {\r\n                    privateBathroomCost = 80 * weeks;\r\n                }\r\n                \r\n                let specialDietCost = 0;\r\n                if (elements.specialDiet.checked && !elements.specialDiet.disabled) {\r\n                    const accommodationText = elements.accommodation.options[elements.accommodation.selectedIndex]?.text || '';\r\n                    const isPartBoard = accommodationText.includes('Part Board');\r\n                    specialDietCost = (isPartBoard ? 35 : 45) * weeks;\r\n                }\r\n                \r\n                let studentInsuranceCost = 0;\r\n                if (elements.studentInsurance.checked) {\r\n                    studentInsuranceCost = 5 + (7 * weeks);\r\n                }\r\n                \r\n                \/\/ Accommodation summer supplement\r\n                let accommodationSummerSupplement = 0;\r\n                if (summerWeeks > 0 && accommodationText !== 'No accommodation required') {\r\n                    if (accommodationText.includes('Adult Part Board')) {\r\n                        accommodationSummerSupplement = 35 * summerWeeks;\r\n                    } else if (accommodationText.includes('Adult Full Board')) {\r\n                        accommodationSummerSupplement = 45 * summerWeeks;\r\n                    }\r\n                }\r\n                \r\n                \/\/ Calculate total\r\n                const totalPrice = discountedCoursePrice + bookSupplement + courseSummerSupplement + \r\n                                 accommodation + arrivalTransfer + departureTransfer + \r\n                                 registrationFee + privateBathroomCost + specialDietCost + \r\n                                 studentInsuranceCost + accommodationSummerSupplement + \r\n                                 summerActivitiesCost + under12SupplementCost + privateFosterSupplementCost;\r\n                \r\n                elements.totalPrice.textContent = totalPrice;\r\n                \r\n                \/\/ Store calculation data for PDF\r\n                currentCalculationData = {\r\n                    coursePrice,\r\n                    discountedCoursePrice,\r\n                    discount,\r\n                    bookSupplement,\r\n                    courseSummerSupplement,\r\n                    accommodation,\r\n                    accommodationSummerSupplement,\r\n                    arrivalTransfer,\r\n                    departureTransfer,\r\n                    registrationFee,\r\n                    privateBathroomCost,\r\n                    specialDietCost,\r\n                    studentInsuranceCost,\r\n                    summerActivitiesCost,\r\n                    under12SupplementCost,\r\n                    privateFosterSupplementCost, \/\/ Added this\r\n                    totalPrice,\r\n                    courseText,\r\n                    weeks,\r\n                    startDate: elements.startDate.value,\r\n                    accommodationText,\r\n                    arrivalTransferText: elements.arrivalTransfer.options[elements.arrivalTransfer.selectedIndex]?.text || '',\r\n                    departureTransferText: elements.departureTransfer.options[elements.departureTransfer.selectedIndex]?.text || '',\r\n                    promoCode,\r\n                    hasPromoCode: validPromoCodes.includes(promoCode) && promoEligibleWeeks > 0,\r\n                    summerWeeks,\r\n                    promoEligibleWeeks,\r\n                    hasUnder12: elements.under12.checked && !elements.under12.disabled,\r\n                    hasPrivateFosterSupplement: privateFosterSupplementCost > 0 \/\/ Added this\r\n                };\r\n                \r\n                \/\/ Update breakdown and show results if we have all required info\r\n                if (elements.courseCategory.value && \r\n                    elements.course.value && elements.course.value !== '0' &&\r\n                    elements.weeks.value && \r\n                    elements.startDate.value) {\r\n                    \r\n                    updateBreakdown(currentCalculationData);\r\n                    showElement(elements.totalPriceGroup);\r\n                    showElement(elements.breakdownGroup);\r\n                    showElement(elements.actionsGroup);\r\n                } else {\r\n                    hideElement(elements.totalPriceGroup);\r\n                    hideElement(elements.breakdownGroup);\r\n                    hideElement(elements.actionsGroup);\r\n                }\r\n            }\r\n\r\n            function updateBreakdown(data) {\r\n                let html = `\r\n                    <div class=\"sse-breakdown-title\">Course Details<\/div>\r\n                    <div class=\"sse-breakdown-grid\">\r\n                        <div class=\"sse-breakdown-item\"><strong>Course:<\/strong> ${data.courseText || 'Not selected'}<\/div>\r\n                        <div class=\"sse-breakdown-item\"><strong>Duration:<\/strong> ${data.weeks || '0'} week${data.weeks !== 1 ? 's' : ''}<\/div>\r\n                        <div class=\"sse-breakdown-item\"><strong>Start Date:<\/strong> ${data.startDate || 'Not selected'}<\/div>\r\n                        <div class=\"sse-breakdown-item\"><strong>Accommodation:<\/strong> ${data.accommodationText || 'Not selected'}<\/div>\r\n                        <div class=\"sse-breakdown-item\"><strong>Arrival Transfer:<\/strong> ${data.arrivalTransferText}<\/div>\r\n                        <div class=\"sse-breakdown-item\"><strong>Departure Transfer:<\/strong> ${data.departureTransferText}<\/div>\r\n                    <\/div>\r\n                    <div class=\"sse-breakdown-title\" style=\"margin-top: 16px;\">Cost Breakdown<\/div>\r\n                    <div class=\"sse-breakdown-grid\">\r\n                        <div class=\"sse-breakdown-item\"><strong>Registration Fee:<\/strong> \u00a3${data.registrationFee}<\/div>`;\r\n                \r\n                if (data.discount > 0) {\r\n                    html += `\r\n                        <div class=\"sse-breakdown-item\">\r\n                            <strong>Course:<\/strong> \r\n                            <span class=\"sse-strikethrough\">\u00a3${data.coursePrice}<\/span>\r\n                            <span class=\"sse-discounted\">\u00a3${data.discountedCoursePrice}<\/span>\r\n                        <\/div>\r\n                        <div class=\"sse-breakdown-item\"><strong>Promo Discount (${data.promoCode}):<\/strong> -\u00a3${data.discount}<\/div>`;\r\n                } else {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Course:<\/strong> \u00a3${data.coursePrice}<\/div>`;\r\n                }\r\n                \r\n                if (data.bookSupplement > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Book Supplement:<\/strong> \u00a3${data.bookSupplement}<\/div>`;\r\n                }\r\n                \r\n                if (data.courseSummerSupplement > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Course Summer Supplement:<\/strong> \u00a3${data.courseSummerSupplement}<\/div>`;\r\n                }\r\n                \r\n                if (data.under12SupplementCost > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Under 12 Years Old Supplement:<\/strong> \u00a3${data.under12SupplementCost}<\/div>`;\r\n                }\r\n                \r\n                if (data.accommodation > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Accommodation:<\/strong> \u00a3${data.accommodation}<\/div>`;\r\n                }\r\n                \r\n                if (data.accommodationSummerSupplement > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Accommodation Summer Supplement:<\/strong> \u00a3${data.accommodationSummerSupplement}<\/div>`;\r\n                }\r\n                \r\n                \/\/ Private Foster Family Supplement\r\n                if (data.privateFosterSupplementCost > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Private Foster Family Supplement:<\/strong> \u00a3${data.privateFosterSupplementCost}<\/div>`;\r\n                }\r\n                \r\n                if (data.arrivalTransfer > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Arrival Transfer:<\/strong> \u00a3${data.arrivalTransfer}<\/div>`;\r\n                }\r\n                \r\n                if (data.departureTransfer > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Departure Transfer:<\/strong> \u00a3${data.departureTransfer}<\/div>`;\r\n                }\r\n                \r\n                if (data.privateBathroomCost > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Private Bathroom:<\/strong> \u00a3${data.privateBathroomCost}<\/div>`;\r\n                }\r\n                \r\n                if (data.specialDietCost > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Special Diet:<\/strong> \u00a3${data.specialDietCost}<\/div>`;\r\n                }\r\n                \r\n                if (data.studentInsuranceCost > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Student Insurance:<\/strong> \u00a3${data.studentInsuranceCost}<\/div>`;\r\n                }\r\n                \r\n                if (data.summerActivitiesCost > 0) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Summer Activities:<\/strong> \u00a3${data.summerActivitiesCost}<\/div>`;\r\n                }\r\n                \r\n                if (elements.cambridgeExam.checked && data.courseText.includes('Cambridge English')) {\r\n                    html += `<div class=\"sse-breakdown-item\"><strong>Cambridge Exam Fee:<\/strong> Priced on Application<\/div>`;\r\n                }\r\n                \r\n                html += `\r\n                        <div class=\"sse-breakdown-item\"><strong>Total Price:<\/strong> \u00a3${data.totalPrice}<\/div>\r\n                    <\/div>`;\r\n                \r\n                elements.breakdown.innerHTML = html;\r\n            }\r\n\r\n            function sendBookingEmail() {\r\n                const course = elements.course.options[elements.course.selectedIndex]?.text || 'Not selected';\r\n                const weeks = elements.weeks.value || 'Not selected';\r\n                const startDate = elements.startDate.value || 'Not selected';\r\n                const accommodation = elements.accommodation.options[elements.accommodation.selectedIndex]?.text || 'Not selected';\r\n                const arrivalTransfer = elements.arrivalTransfer.options[elements.arrivalTransfer.selectedIndex]?.text || 'Not selected';\r\n                const departureTransfer = elements.departureTransfer.options[elements.departureTransfer.selectedIndex]?.text || 'Not selected';\r\n                const totalPrice = elements.totalPrice.textContent;\r\n                const promoCode = elements.promoCode.value.trim();\r\n\r\n                const formUrl = 'https:\/\/forms.office.com\/e\/70XEEbmTWM';\r\n                const queryParams = new URLSearchParams({\r\n                    year: '2026',\r\n                    course: course,\r\n                    weeks: weeks,\r\n                    startDate: startDate,\r\n                    accommodation: accommodation,\r\n                    arrivalTransfer: arrivalTransfer,\r\n                    departureTransfer: departureTransfer,\r\n                    totalPrice: totalPrice,\r\n                    promoCode: promoCode\r\n                });\r\n\r\n                window.open(`${formUrl}?${queryParams.toString()}`, '_blank');\r\n            }\r\n\r\nfunction downloadQuotePDF() {\r\n    if (!currentCalculationData || !elements.courseCategory.value) {\r\n        alert('Please complete the calculator form first to generate a quote.');\r\n        return;\r\n    }\r\n\r\n    try {\r\n        \/\/ Check if jsPDF is available\r\n        if (typeof window.jspdf === 'undefined') {\r\n            alert('PDF generation library is not loaded. Please try again.');\r\n            return;\r\n        }\r\n\r\n        const { jsPDF } = window.jspdf;\r\n        const doc = new jsPDF();\r\n        \r\n        \/\/ Generate consistent quote reference\r\n        const quoteRef = `SSE-${Date.now().toString().slice(-6)}`;\r\n        \r\n        \/\/ Add logo at the top - FIXED ASPECT RATIO\r\n        \/\/ First, let's create an image object to get the dimensions\r\n        const logoUrl = 'https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2026\/01\/SSE-60-Year-Anniversary-Logo.png';\r\n        \r\n        \/\/ Try to add the logo with proper aspect ratio\r\n        \/\/ We'll use a try-catch and fallback to text if image fails\r\n        let logoLoaded = false;\r\n        \r\n        \/\/ Create an image object to get dimensions\r\n        const img = new Image();\r\n        img.crossOrigin = 'Anonymous';\r\n        img.onload = function() {\r\n            try {\r\n                \/\/ Calculate dimensions to maintain aspect ratio\r\n                const maxWidth = 80;\r\n                const maxHeight = 30;\r\n                \r\n                \/\/ Get natural dimensions\r\n                const naturalWidth = this.width;\r\n                const naturalHeight = this.height;\r\n                \r\n                \/\/ Calculate aspect ratio\r\n                const aspectRatio = naturalWidth \/ naturalHeight;\r\n                \r\n                \/\/ Calculate dimensions to fit within maxWidth x maxHeight while maintaining aspect ratio\r\n                let width = maxWidth;\r\n                let height = width \/ aspectRatio;\r\n                \r\n                \/\/ If height is too tall, scale down based on height\r\n                if (height > maxHeight) {\r\n                    height = maxHeight;\r\n                    width = height * aspectRatio;\r\n                }\r\n                \r\n                \/\/ Center the logo horizontally (105 is the center of A4 page at 210mm)\r\n                const xPos = 105 - (width \/ 2);\r\n                \r\n                \/\/ Add the image with proper aspect ratio\r\n                doc.addImage(this, 'PNG', xPos, 10, width, height);\r\n                logoLoaded = true;\r\n            } catch (error) {\r\n                console.log('Error adding logo with proper aspect ratio:', error);\r\n                \/\/ Fallback to text header\r\n                addTextHeader(doc);\r\n            }\r\n        };\r\n        \r\n        img.onerror = function() {\r\n            console.log('Could not load logo image, using text header instead');\r\n            addTextHeader(doc);\r\n        };\r\n        \r\n        \/\/ Set a timeout in case the image takes too long to load\r\n        setTimeout(() => {\r\n            if (!logoLoaded) {\r\n                console.log('Logo loading timeout, using text header');\r\n                addTextHeader(doc);\r\n                continuePDFCreation();\r\n            }\r\n        }, 2000);\r\n        \r\n        \/\/ Function to add text header as fallback\r\n        function addTextHeader(pdfDoc) {\r\n            pdfDoc.setFontSize(24);\r\n            pdfDoc.setTextColor(26, 86, 219);\r\n            pdfDoc.setFont('helvetica', 'bold');\r\n            pdfDoc.text('Southbourne School of English', 105, 20, null, null, 'center');\r\n            \r\n            pdfDoc.setFontSize(12);\r\n            pdfDoc.setTextColor(0, 0, 0);\r\n            pdfDoc.setFont('helvetica', 'normal');\r\n            pdfDoc.text('60 Year Anniversary', 105, 28, null, null, 'center');\r\n        }\r\n        \r\n        \/\/ Function to continue PDF creation after logo attempt\r\n        function continuePDFCreation() {\r\n            \/\/ School details below logo - adjust position based on logo or text header\r\n            const startY = logoLoaded ? 45 : 35;\r\n            \r\n            doc.setFontSize(16);\r\n            doc.setTextColor(0, 0, 0);\r\n            doc.setFont('helvetica', 'normal');\r\n            doc.text('Course Quotation', 105, startY, null, null, 'center');\r\n            \r\n            doc.setFontSize(10);\r\n            doc.text('30 Beaufort Road, Southbourne, Bournemouth, BH6 5AL', 105, startY + 8, null, null, 'center');\r\n            doc.text('Tel: +44 (0)1202 422300 | Email: registrar@southbourneschool.co.uk', 105, startY + 13, null, null, 'center');\r\n            doc.text('Website: www.southbourneschool.co.uk', 105, startY + 18, null, null, 'center');\r\n            \r\n            \/\/ Date and reference - aligned properly\r\n            const today = new Date();\r\n            const dateStr = today.toLocaleDateString('en-GB', {\r\n                day: '2-digit',\r\n                month: '2-digit',\r\n                year: 'numeric'\r\n            });\r\n            \r\n            doc.setFontSize(10);\r\n            doc.text(`Quote Date: ${dateStr}`, 20, startY + 30);\r\n            doc.text(`Quote Reference: ${quoteRef}`, 20, startY + 37); \/\/ Positioned directly below quote date\r\n            \r\n            \/\/ Horizontal line\r\n            doc.setDrawColor(200, 200, 200);\r\n            doc.line(20, startY + 43, 190, startY + 43);\r\n            \r\n            \/\/ Course details section\r\n            doc.setFontSize(12);\r\n            doc.setFont('helvetica', 'bold');\r\n            doc.text('Course Details', 20, startY + 53);\r\n            \r\n            doc.setFontSize(10);\r\n            doc.setFont('helvetica', 'normal');\r\n            let yPos = startY + 60;\r\n            \r\n            doc.text(`Course: ${currentCalculationData.courseText || 'Not selected'}`, 20, yPos);\r\n            yPos += 6;\r\n            \r\n            doc.text(`Duration: ${currentCalculationData.weeks || '0'} week${currentCalculationData.weeks !== 1 ? 's' : ''}`, 20, yPos);\r\n            yPos += 6;\r\n            \r\n            if (currentCalculationData.startDate) {\r\n                doc.text(`Start Date: ${currentCalculationData.startDate}`, 20, yPos);\r\n                yPos += 6;\r\n            }\r\n            \r\n            doc.text(`Accommodation: ${currentCalculationData.accommodationText || 'Not selected'}`, 20, yPos);\r\n            yPos += 6;\r\n            \r\n            if (currentCalculationData.arrivalTransfer > 0) {\r\n                doc.text(`Arrival Transfer: ${currentCalculationData.arrivalTransferText}`, 20, yPos);\r\n                yPos += 6;\r\n            }\r\n            \r\n            if (currentCalculationData.departureTransfer > 0) {\r\n                doc.text(`Departure Transfer: ${currentCalculationData.departureTransferText}`, 20, yPos);\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Cost breakdown section\r\n            doc.setFontSize(12);\r\n            doc.setFont('helvetica', 'bold');\r\n            doc.text('Cost Breakdown', 20, yPos + 5);\r\n            \r\n            doc.setFontSize(10);\r\n            doc.setFont('helvetica', 'normal');\r\n            yPos += 15;\r\n            \r\n            \/\/ Define column positions for proper alignment\r\n            const descriptionX = 20;\r\n            const amountX = 170; \/\/ Fixed position for all amounts\r\n            \r\n            \/\/ Registration Fee\r\n            doc.text('Registration Fee:', descriptionX, yPos);\r\n            doc.text(`\u00a3${currentCalculationData.registrationFee.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n            yPos += 6;\r\n            \r\n            \/\/ Course (with discount if applicable)\r\n            if (currentCalculationData.discount > 0) {\r\n                doc.text('Course (Original):', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.coursePrice.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n                \r\n                doc.text(`Promo Discount (${currentCalculationData.promoCode}):`, descriptionX, yPos);\r\n                doc.text(`-\u00a3${currentCalculationData.discount.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n                \r\n                doc.text('Course (Discounted):', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.discountedCoursePrice.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            } else {\r\n                doc.text('Course:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.coursePrice.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Book Supplement\r\n            if (currentCalculationData.bookSupplement > 0) {\r\n                doc.text('Book Supplement:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.bookSupplement.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Course Summer Supplement\r\n            if (currentCalculationData.courseSummerSupplement > 0) {\r\n                doc.text('Course Summer Supplement:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.courseSummerSupplement.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Under 12 Supplement\r\n            if (currentCalculationData.under12SupplementCost > 0) {\r\n                doc.text('Under 12 Years Old Supplement:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.under12SupplementCost.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Accommodation\r\n            if (currentCalculationData.accommodation > 0) {\r\n                doc.text('Accommodation:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.accommodation.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Accommodation Summer Supplement\r\n            if (currentCalculationData.accommodationSummerSupplement > 0) {\r\n                doc.text('Accommodation Summer Supplement:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.accommodationSummerSupplement.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Private Foster Family Supplement\r\n            if (currentCalculationData.privateFosterSupplementCost > 0) {\r\n                doc.text('Private Foster Family Supplement:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.privateFosterSupplementCost.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Arrival Transfer\r\n            if (currentCalculationData.arrivalTransfer > 0) {\r\n                doc.text('Arrival Transfer:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.arrivalTransfer.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Departure Transfer\r\n            if (currentCalculationData.departureTransfer > 0) {\r\n                doc.text('Departure Transfer:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.departureTransfer.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Private Bathroom\r\n            if (currentCalculationData.privateBathroomCost > 0) {\r\n                doc.text('Private Bathroom:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.privateBathroomCost.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Special Diet\r\n            if (currentCalculationData.specialDietCost > 0) {\r\n                doc.text('Special Diet:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.specialDietCost.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Student Insurance\r\n            if (currentCalculationData.studentInsuranceCost > 0) {\r\n                doc.text('Student Insurance:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.studentInsuranceCost.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Summer Activities\r\n            if (currentCalculationData.summerActivitiesCost > 0) {\r\n                doc.text('Summer Activities:', descriptionX, yPos);\r\n                doc.text(`\u00a3${currentCalculationData.summerActivitiesCost.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Cambridge Exam Fee\r\n            if (elements.cambridgeExam.checked && currentCalculationData.courseText.includes('Cambridge English')) {\r\n                doc.text('Cambridge Exam Fee:', descriptionX, yPos);\r\n                doc.text('Priced on Application', amountX, yPos, null, null, 'right');\r\n                yPos += 6;\r\n            }\r\n            \r\n            \/\/ Horizontal line before total\r\n            doc.setDrawColor(200, 200, 200);\r\n            doc.line(20, yPos, 190, yPos);\r\n            yPos += 8;\r\n            \r\n            \/\/ Total row with special styling\r\n            doc.setFont('helvetica', 'bold');\r\n            doc.setFontSize(12);\r\n            doc.setTextColor(26, 86, 219);\r\n            doc.text('TOTAL', descriptionX, yPos);\r\n            doc.text(`\u00a3${currentCalculationData.totalPrice.toFixed(2)}`, amountX, yPos, null, null, 'right');\r\n            \r\n            \/\/ Add accreditations strip to footer with proper aspect ratio\r\n            const accreditationsUrl = 'https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2026\/01\/2025-Accreditations-strip-scaled.png';\r\n            const accImg = new Image();\r\n            accImg.crossOrigin = 'Anonymous';\r\n            accImg.onload = function() {\r\n                try {\r\n                    \/\/ Calculate dimensions to maintain aspect ratio\r\n                    const maxAccWidth = 160;\r\n                    const maxAccHeight = 20;\r\n                    \r\n                    \/\/ Get natural dimensions\r\n                    const naturalAccWidth = this.width;\r\n                    const naturalAccHeight = this.height;\r\n                    \r\n                    \/\/ Calculate aspect ratio\r\n                    const accAspectRatio = naturalAccWidth \/ naturalAccHeight;\r\n                    \r\n                    \/\/ Calculate dimensions to fit within maxAccWidth x maxAccHeight while maintaining aspect ratio\r\n                    let accWidth = maxAccWidth;\r\n                    let accHeight = accWidth \/ accAspectRatio;\r\n                    \r\n                    \/\/ If height is too tall, scale down based on height\r\n                    if (accHeight > maxAccHeight) {\r\n                        accHeight = maxAccHeight;\r\n                        accWidth = accHeight * accAspectRatio;\r\n                    }\r\n                    \r\n                    \/\/ Center the accreditations image horizontally\r\n                    const accXPos = 105 - (accWidth \/ 2);\r\n                    \r\n                    \/\/ Add the image with proper aspect ratio\r\n                    doc.addImage(this, 'PNG', accXPos, 250, accWidth, accHeight);\r\n                    yPos = 275;\r\n                    addFooterNotes();\r\n                } catch (error) {\r\n                    console.log('Could not load accreditations image, using text instead');\r\n                    yPos = 260;\r\n                    addFooterNotes();\r\n                }\r\n            };\r\n            \r\n            accImg.onerror = function() {\r\n                console.log('Could not load accreditations image, using text instead');\r\n                yPos = 260;\r\n                addFooterNotes();\r\n            };\r\n            \r\n            \/\/ Set a timeout for accreditations image\r\n            setTimeout(() => {\r\n                if (yPos < 265) {\r\n                    yPos = 260;\r\n                    addFooterNotes();\r\n                }\r\n            }, 1000);\r\n            \r\n            accImg.src = accreditationsUrl;\r\n            \r\n            \/\/ Function to add footer notes\r\n            function addFooterNotes() {\r\n                \/\/ Footer notes\r\n                doc.setFontSize(8);\r\n                doc.setTextColor(100, 100, 100);\r\n                doc.setFont('helvetica', 'normal');\r\n                doc.text('This quotation is valid for 30 days from the date of issue.', 20, yPos);\r\n                yPos += 5;\r\n                doc.text('Prices are subject to change and availability.', 20, yPos);\r\n                yPos += 5;\r\n                doc.text('For the full price list, please visit: https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2026\/02\/2026-Adult-and-Junior-Price-List.pdf', 20, yPos);\r\n                yPos += 5;\r\n                doc.text('To book this course, please use the Book Now button in the calculator or contact us directly.', 20, yPos);\r\n                \r\n                \/\/ Save the PDF with consistent quote reference\r\n                const filename = `${quoteRef}_${currentCalculationData.courseText.replace(\/[^a-zA-Z0-9]\/g, '_').substring(0, 30)}.pdf`;\r\n                doc.save(filename);\r\n            }\r\n            \r\n            \/\/ If accreditations image doesn't load, call addFooterNotes directly\r\n            if (!accImg.src) {\r\n                yPos = 260;\r\n                addFooterNotes();\r\n            }\r\n        }\r\n        \r\n        \/\/ Start the logo loading process\r\n        img.src = logoUrl;\r\n        \r\n    } catch (error) {\r\n        console.error('Error generating PDF:', error);\r\n        alert('There was an error generating the PDF. Please try again or contact us for assistance.');\r\n    }\r\n}\r\n\r\n            function viewPriceList() {\r\n                window.open('https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2026\/01\/2026-Adult-and-Junior-Price-List-1.pdf', '_blank');\r\n            }\r\n\r\n            function resetForm() {\r\n                \/\/ Reset all form elements\r\n                elements.courseCategory.value = '';\r\n                elements.course.innerHTML = '<option value=\"0\">Select a course<\/option>';\r\n                elements.weeks.innerHTML = '<option value=\"\" disabled selected>Select duration<\/option>';\r\n                elements.startDate.value = '';\r\n                elements.accommodation.innerHTML = '<option value=\"0\">No accommodation required<\/option>';\r\n                elements.arrivalTransfer.innerHTML = '<option value=\"0\">No Arrival Transfer required<\/option>';\r\n                elements.departureTransfer.innerHTML = '<option value=\"0\">No Departure Transfer required<\/option>';\r\n                elements.privateBathroom.checked = false;\r\n                elements.specialDiet.checked = false;\r\n                elements.studentInsurance.checked = false;\r\n                elements.summerActivities.checked = false;\r\n                elements.cambridgeExam.checked = false;\r\n                elements.under12.checked = false;\r\n                elements.cambridgeExamContainer.style.display = 'none';\r\n                elements.under12Container.style.display = 'none';\r\n                elements.privateBathroomError.style.display = 'none';\r\n                elements.specialDietError.style.display = 'none';\r\n                elements.summerActivitiesError.style.display = 'none';\r\n                elements.under12Error.style.display = 'none';\r\n                elements.promoCode.value = '';\r\n                elements.promoCodeError.style.display = 'none';\r\n                elements.promoCodeSuccess.style.display = 'none';\r\n                elements.totalPrice.textContent = '0';\r\n                elements.breakdown.innerHTML = '';\r\n                currentCalculationData = null;\r\n                lastJuniorAdjustmentWeeks = 0;\r\n                \r\n                if (datePicker) {\r\n                    datePicker.destroy();\r\n                    datePicker = null;\r\n                }\r\n                \r\n                \/\/ Hide all sections except the first one\r\n                hideElement(elements.courseGroup);\r\n                hideElement(elements.weeksGroup);\r\n                hideElement(elements.dateGroup);\r\n                hideElement(elements.accommodationGroup);\r\n                hideElement(elements.extrasGroup);\r\n                hideElement(elements.arrivalTransferGroup);\r\n                hideElement(elements.departureTransferGroup);\r\n                hideElement(elements.promoGroup);\r\n                hideElement(elements.totalPriceGroup);\r\n                hideElement(elements.breakdownGroup);\r\n                hideElement(elements.actionsGroup);\r\n                hideElement(elements.juniorWarning);\r\n                \r\n                \/\/ Hide floating reset button\r\n                elements.floatingReset.classList.remove('visible');\r\n                \r\n                \/\/ Reset progress indicator\r\n                [elements.step1, elements.step2, elements.step3, elements.step4, elements.step5].forEach(step => {\r\n                    step.classList.remove('active', 'completed');\r\n                });\r\n                elements.step1.classList.add('active');\r\n            }\r\n\r\n            \/\/ Initialize when DOM is loaded\r\n            if (document.readyState === 'loading') {\r\n                document.addEventListener('DOMContentLoaded', init);\r\n            } else {\r\n                init();\r\n            }\r\n        })();\r\n    <\/script>\n\n\t\t<\/div>\n\t<\/div>\n<h3 style=\"text-align: left\" class=\"vc_custom_heading vc_custom_1758628166110\" >Downloads \/ Links<\/h3><div class=\"vc_row wpb_row vc_inner vc_row-fluid\"><div class=\"wpb_column vc_column_container vc_col-sm-6\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\"><a href=\"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2026\/02\/2026-Adult-and-Junior-Price-List.pdf\" class=\"wh-button  scp_theme_button-1aa63e8cad7b84f4d9e61a5c4fadf2e5\" title=\"2026 Adult and Junior Price List\" target=\"_blank\">2026 Adult and Junior Price List<\/a><a href=\"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2025\/11\/2026-Brochure-low-res-v2.pdf\" class=\"wh-button  scp_theme_button-f120c5f399e500b0cffdcca1bb4cbf72\" title=\"2026 Brochure\" target=\"_blank\">2026 Brochure<\/a><\/div><\/div><\/div><div class=\"wpb_column vc_column_container vc_col-sm-6\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\"><a href=\"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2025\/09\/Adult-Enrolment-Form-2026.pdf\" class=\"wh-button  scp_theme_button-f755431a30cfb082f17093ad2b6019c6\" title=\"2026 Enrolment Form (PDF)\" target=\"_blank\">2026 Enrolment Form (PDF)<\/a><a href=\"https:\/\/forms.office.com\/e\/70XEEbmTWM\" class=\"wh-button  scp_theme_button-1a35b6d367bb97b446221bbed0488ce8\" title=\"Online enrolment form\" target=\"_blank\">Online Enrolment Form<\/a><\/div><\/div><\/div><\/div>\n\t<div class=\"wpb_text_column wpb_content_element  vc_custom_1772533588418\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<h2><span style=\"color: #ff6600;\"><strong>Step 1: Choose<\/strong><\/span><\/h2>\n<p><strong>Choose the English course<\/strong> that you want to study on. You can see our individual adult and junior English courses in the price lists above. Our adult English courses are for students aged 15+ and our junior English courses are for students aged 9-16.<\/p>\n<p>If you want more information about our school, including English courses, facilities, activities, timetables, local area, and more, you can view our latest brochure here: <strong><a href=\"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2025\/11\/2026-Brochure-low-res-v2.pdf\" target=\"_blank\" rel=\"noopener\">Brochure 2026<\/a><\/strong><\/p>\n<h2><span style=\"color: #ff6600;\"><strong>Step 2: Quote<\/strong><\/span><\/h2>\n<p>Use our <a href=\"https:\/\/southbourneschool.co.uk\/request-a-quote\/\"><strong>Request a quote<\/strong><\/a> page to receive a full course breakdown via email or WhatsApp, or message our <a href=\"https:\/\/wa.me\/441202422300\"><strong>Business WhatsApp<\/strong><\/a> directly.<\/p>\n<h2><span style=\"color: #ff6600;\"><strong>Step 3: Enrol<\/strong><\/span><\/h2>\n<p>Submit the <a href=\"https:\/\/forms.office.com\/e\/70XEEbmTWM\"><strong>online enrolment form<\/strong><\/a> to provide us with your course and student details. Our Registrar will then be in touch with the next steps.<\/p>\n<h2><span style=\"color: #ff6600;\"><strong>Step 4: Read<\/strong><\/span><\/h2>\n<p><strong>Please read our<\/strong> <strong><a href=\"https:\/\/southbourneschool.co.uk\/terms-conditions\/\">Terms and Conditions<\/a><\/strong> carefully and confirm you have understood them before you book and pay for your course.<\/p>\n<h2><span style=\"color: #ff6600;\"><strong>Step 5: Pay<\/strong><\/span><\/h2>\n<p><strong>Pay the \u00a3120 registration fee. <\/strong>Your place at the school will only be confirmed once we have received this payment.<\/p>\n<p>All course fees must be paid <strong>at least 4 weeks before the start of the course<\/strong>. If you are requesting a course that is less than 4 weeks away, we can make an exception, however we cannot guarantee availability in class or accommodation.<\/p>\n<p><a href=\"http:\/\/southbourneschool.flywire.com\/\"><strong>Click here to make payment by Flywire <em>(Recommended)<\/em><\/strong><\/a><\/p>\n<p>Guaranteed lowest exchange rate (International Bank Transfer, PayPal and Debit\/Credit Card Payments)<\/p>\n<p><strong>Payment by other methods<\/strong><\/p>\n<p><strong>Bank transfer (Payment must cover UK bank charges)<\/strong><\/p>\n<div>Account name:\u00a0SOUTHBOURNE SCHOOL OF ENGLISH<\/div>\n<div>Bank name: HSBC<\/div>\n<div>Branch: BOURNEMOUTH<\/div>\n<div>Address: 62 Commercial Road, Bournemouth, BH6 5LR<\/div>\n<div>Account Number: 60769665<\/div>\n<div>Sort Code: 40-46-19<\/div>\n<div>IBAN number: GB39HBUK40461960769665<\/div>\n<div>BIC number\/Swift code: HBUKGB4121D<\/div>\n\n\t\t<\/div>\n\t<\/div>\n<div class=\"vc_message_box vc_message_box-standard vc_message_box-rounded vc_color-info\" ><div class=\"vc_message_box-icon\"><i class=\"fas fa-info-circle\"><\/i><\/div><p><span style=\"color: #000000;\"><strong>Please note:<\/strong> UK Border Agency may refuse to allow students under 18 into the UK unless they are accompanied by an adult or have proof of their onward travel arrangements<\/span><\/p>\n<p><span style=\"color: #000000;\"><strong>Data Protection Notice (GDPR):<\/strong> We ask for your personal data to book your course and homestay accommodation before you come. When you book with us we might need to share some of your information e.g. for a taxi transfer, examinations, etc. The UK Law says we have to give your data to the Home Office if they ask for it<\/span><\/p>\n<\/div><\/div><\/div><\/div><div class=\"wpb_column vc_column_container vc_col-sm-4 vc_col-sm-offset-1 vc_col-has-fill\"><div class=\"vc_column-inner vc_custom_1723458514578\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_raw_code wpb_content_element wpb_raw_html\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<span class=\"anim\"><\/span>\n\t\t<\/div>\n\t<\/div>\n\t\t<div class=\"wh-content-box  scp_content_box-d41d8cd98f00b204e9800998ecf8427e\">\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t<div  class=\"wpb_single_image wpb_content_element vc_align_left\">\n\t\t\n\t\t<figure class=\"wpb_wrapper vc_figure\">\n\t\t\t<a href=\"https:\/\/southbourneschool.flywire.com\/\" target=\"_blank\" class=\"vc_single_image-wrapper   vc_box_border_grey\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2024\/07\/flywire-pay-home-social.jpg\" class=\"vc_single_image-img attachment-full\" alt=\"\" srcset=\"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2024\/07\/flywire-pay-home-social.jpg 1200w, https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2024\/07\/flywire-pay-home-social-300x158.jpg 300w, https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2024\/07\/flywire-pay-home-social-1024x538.jpg 1024w, https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2024\/07\/flywire-pay-home-social-18x9.jpg 18w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a>\n\t\t<\/figure>\n\t<\/div>\n\n\t<div class=\"wpb_text_column wpb_content_element \" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<h3><strong><a href=\"http:\/\/southbourneschool.flywire.com\">Pay with Flywire<\/a> <span style=\"color: #008000;\">&#8211; the cheapest and easiest way to pay for your English course<\/span><\/strong><\/h3>\n<p>We have partnered with Flywire to streamline the international payment process. Flywire allows you to pay securely from any country and any bank, typically in your home currency.<\/p>\n<p>By making your payment with Flywire you can:<\/p>\n<ul>\n<li><strong>Track your payments from start to finish<\/strong><\/li>\n<li><strong>Save on bank fees and exchange rates<\/strong><\/li>\n<li><strong>Contact their multilingual customer support team with any questions, day or night<\/strong><\/li>\n<\/ul>\n<p>To get started, <a href=\"http:\/\/southbourneschool.flywire.com\"><strong>click here<\/strong><\/a> to begin the payment process.<\/p>\n<p>If you have questions about making an international payment, visit <strong><a href=\"https:\/\/www.flywire.com\/help\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.flywire.com\/help<\/a><\/strong><\/p>\n\n\t\t<\/div>\n\t<\/div>\n\t\t<\/div>\n\t\t<\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"How To Book Your English Course English Course Calculator 2026 Plan your English course with our easy-to-use calculator. Select your course, duration, accommodation, and transfers to get an instant price estimate. 1 Course Type 2 Course 3 Duration 4 Start Date 5 Options Junior summer&nbsp;<a href=\"https:\/\/southbourneschool.co.uk\/de_de\/english-courses\/how-to-book-your-english-course\/\">...<\/a>","protected":false},"author":12312401,"featured_media":0,"parent":791,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-641","page","type-page","status-publish","hentry","odd"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How To Book Your English Course - Southbourne School of English<\/title>\n<meta name=\"description\" content=\"Every student\u2019s level of English is different, so we take great care to match your English course with your language ability and needs.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/southbourneschool.co.uk\/de_de\/englischkurse\/so-buchen-sie-ihren-englischkurs\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Book Your English Course - Southbourne School of English\" \/>\n<meta property=\"og:description\" content=\"Every student\u2019s level of English is different, so we take great care to match your English course with your language ability and needs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/southbourneschool.co.uk\/de_de\/englischkurse\/so-buchen-sie-ihren-englischkurs\/\" \/>\n<meta property=\"og:site_name\" content=\"Southbourne School of English\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SouthbourneSchool\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-03T10:26:37+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@SouthbourneSofE\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"3\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/english-courses\\\/how-to-book-your-english-course\\\/\",\"url\":\"https:\\\/\\\/southbourneschool.co.uk\\\/english-courses\\\/how-to-book-your-english-course\\\/\",\"name\":\"How To Book Your English Course - Southbourne School of English\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/#website\"},\"datePublished\":\"2018-08-16T12:30:59+00:00\",\"dateModified\":\"2026-03-03T10:26:37+00:00\",\"description\":\"Every student\u2019s level of English is different, so we take great care to match your English course with your language ability and needs.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/english-courses\\\/how-to-book-your-english-course\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/southbourneschool.co.uk\\\/english-courses\\\/how-to-book-your-english-course\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/english-courses\\\/how-to-book-your-english-course\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/southbourneschool.co.uk\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"English Courses\",\"item\":\"https:\\\/\\\/southbourneschool.co.uk\\\/english-courses\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How To Book Your English Course\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/#website\",\"url\":\"https:\\\/\\\/southbourneschool.co.uk\\\/\",\"name\":\"Southbourne School of English\",\"description\":\"We make learning English fun. A language school in Bournemouth, ideally located by the sea in a suburb of Bournemouth called Southbourne, one of the UK\u2019s most popular locations for international students.\",\"publisher\":{\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/southbourneschool.co.uk\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/#organization\",\"name\":\"Southbourne School of English\",\"alternateName\":\"SSE\",\"url\":\"https:\\\/\\\/southbourneschool.co.uk\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/southbourneschool.co.uk\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/SSE-60-Year-Anniversary-Logo.png\",\"contentUrl\":\"https:\\\/\\\/southbourneschool.co.uk\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/SSE-60-Year-Anniversary-Logo.png\",\"width\":1964,\"height\":1965,\"caption\":\"Southbourne School of English\"},\"image\":{\"@id\":\"https:\\\/\\\/southbourneschool.co.uk\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/SouthbourneSchool\\\/\",\"https:\\\/\\\/x.com\\\/SouthbourneSofE\",\"https:\\\/\\\/www.instagram.com\\\/southbourneschoolofenglish\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@southbourne\",\"https:\\\/\\\/www.youtube.com\\\/@southbourneschoolofenglish4522\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"So buchen Sie Ihren Englischkurs - Southbourne School of English","description":"Da die Englischkenntnisse jedes Sch\u00fclers unterschiedlich sind, legen wir gro\u00dfen Wert darauf, Ihren Englischkurs an Ihre Sprachkenntnisse und Bed\u00fcrfnisse anzupassen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/southbourneschool.co.uk\/de_de\/englischkurse\/so-buchen-sie-ihren-englischkurs\/","og_locale":"de_DE","og_type":"article","og_title":"How To Book Your English Course - Southbourne School of English","og_description":"Every student\u2019s level of English is different, so we take great care to match your English course with your language ability and needs.","og_url":"https:\/\/southbourneschool.co.uk\/de_de\/englischkurse\/so-buchen-sie-ihren-englischkurs\/","og_site_name":"Southbourne School of English","article_publisher":"https:\/\/www.facebook.com\/SouthbourneSchool\/","article_modified_time":"2026-03-03T10:26:37+00:00","twitter_card":"summary_large_image","twitter_site":"@SouthbourneSofE","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"3\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/southbourneschool.co.uk\/english-courses\/how-to-book-your-english-course\/","url":"https:\/\/southbourneschool.co.uk\/english-courses\/how-to-book-your-english-course\/","name":"So buchen Sie Ihren Englischkurs - Southbourne School of English","isPartOf":{"@id":"https:\/\/southbourneschool.co.uk\/#website"},"datePublished":"2018-08-16T12:30:59+00:00","dateModified":"2026-03-03T10:26:37+00:00","description":"Da die Englischkenntnisse jedes Sch\u00fclers unterschiedlich sind, legen wir gro\u00dfen Wert darauf, Ihren Englischkurs an Ihre Sprachkenntnisse und Bed\u00fcrfnisse anzupassen.","breadcrumb":{"@id":"https:\/\/southbourneschool.co.uk\/english-courses\/how-to-book-your-english-course\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/southbourneschool.co.uk\/english-courses\/how-to-book-your-english-course\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/southbourneschool.co.uk\/english-courses\/how-to-book-your-english-course\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/southbourneschool.co.uk\/"},{"@type":"ListItem","position":2,"name":"English Courses","item":"https:\/\/southbourneschool.co.uk\/english-courses\/"},{"@type":"ListItem","position":3,"name":"How To Book Your English Course"}]},{"@type":"WebSite","@id":"https:\/\/southbourneschool.co.uk\/#website","url":"https:\/\/southbourneschool.co.uk\/","name":"Southbourne Schule f\u00fcr Englisch","description":"Bei uns macht Englisch lernen Spa\u00df. Eine Sprachschule in Bournemouth, ideal gelegen am Meer in einem Vorort von Bournemouth namens Southbourne, einem der beliebtesten Orte Gro\u00dfbritanniens f\u00fcr internationale Studenten.","publisher":{"@id":"https:\/\/southbourneschool.co.uk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/southbourneschool.co.uk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/southbourneschool.co.uk\/#organization","name":"Southbourne Schule f\u00fcr Englisch","alternateName":"SSE","url":"https:\/\/southbourneschool.co.uk\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/southbourneschool.co.uk\/#\/schema\/logo\/image\/","url":"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2026\/01\/SSE-60-Year-Anniversary-Logo.png","contentUrl":"https:\/\/southbourneschool.co.uk\/wp-content\/uploads\/2026\/01\/SSE-60-Year-Anniversary-Logo.png","width":1964,"height":1965,"caption":"Southbourne School of English"},"image":{"@id":"https:\/\/southbourneschool.co.uk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SouthbourneSchool\/","https:\/\/x.com\/SouthbourneSofE","https:\/\/www.instagram.com\/southbourneschoolofenglish\/","https:\/\/www.tiktok.com\/@southbourne","https:\/\/www.youtube.com\/@southbourneschoolofenglish4522"]}]}},"featured_image_src":null,"featured_image_src_square":null,"_links":{"self":[{"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/pages\/641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/users\/12312401"}],"replies":[{"embeddable":true,"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/comments?post=641"}],"version-history":[{"count":0,"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/pages\/641\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/pages\/791"}],"wp:attachment":[{"href":"https:\/\/southbourneschool.co.uk\/de_de\/wp-json\/wp\/v2\/media?parent=641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}