var tripObjects = jQuery.parseJSON('{"318":{"key":318,"sort":1,"main_start":"24.01.2026","main_start_raw":"2026-01-24","main_date":"24.01.2026","main_headline":"Einzeltag Kurstage Ski+Board ","main_kuerzel":"KT3_26","main_payDate":"10.01.2026","main_payDate_raw":"2026-01-10","main_bookable_statusText":"Die Anmeldefrist ist abgelaufen","main_bookable":0,"main_ageMin":6,"main_ageMax":99,"main_priceMin":40,"main_ageRange":"6-99 Jahre","option_level":3,"option_kurs":1},"314":{"key":314,"sort":2,"main_start":"02.02.2026","main_start_raw":"2026-02-02","main_date":"02.02.2026","main_headline":"Kulinarischer Skitag","main_kuerzel":"KLI","main_payDate":"19.01.2026","main_payDate_raw":"2026-01-19","main_bookable_statusText":"","main_bookable":1,"main_ageMin":18,"main_ageMax":90,"main_priceMin":70,"main_ageRange":"18-90 Jahre","option_level":3,"option_kurs":0},"320":{"key":320,"sort":3,"main_start":"11.02.2026","main_start_raw":"2026-02-11","main_date":"11.02.2026","main_headline":"Lady-Ski","main_kuerzel":"LDY_26","main_payDate":"28.01.2026","main_payDate_raw":"2026-01-28","main_bookable_statusText":"","main_bookable":1,"main_ageMin":16,"main_ageMax":90,"main_priceMin":50,"main_ageRange":"16-90 Jahre","option_level":3,"option_kurs":0},"324":{"key":324,"sort":4,"main_start":"14.02.2026","main_start_raw":"2026-02-14","main_date":"14.-21.02.2026","main_headline":"Familienskiwoche am Hochkönig","main_kuerzel":"FSW_26","main_payDate":"31.01.2026","main_payDate_raw":"2026-01-31","main_bookable_statusText":"","main_bookable":1,"main_ageMin":1,"main_ageMax":999,"main_priceMin":0,"main_ageRange":"1-999 Jahre","option_level":3,"option_kurs":0},"322":{"key":322,"sort":5,"main_start":"22.02.2026","main_start_raw":"2026-02-22","main_date":"22.02.-01.03.2026","main_headline":"Genuss-Woche Südtirol","main_kuerzel":"GWO_26","main_payDate":"08.02.2026","main_payDate_raw":"2026-02-08","main_bookable_statusText":"Die Anmeldefrist ist abgelaufen","main_bookable":0,"main_ageMin":18,"main_ageMax":90,"main_priceMin":710,"main_ageRange":"18-90 Jahre","option_level":3,"option_kurs":0}}'); var tripObjectsSelect = jQuery.parseJSON('[{"key":318,"sort":1,"main_start":"24.01.2026","main_start_raw":"2026-01-24","main_date":"24.01.2026","main_headline":"Einzeltag Kurstage Ski+Board ","main_kuerzel":"KT3_26","main_payDate":"10.01.2026","main_payDate_raw":"2026-01-10","main_bookable_statusText":"Die Anmeldefrist ist abgelaufen","main_bookable":0,"main_ageMin":6,"main_ageMax":99,"main_priceMin":40,"main_ageRange":"6-99 Jahre","option_level":3,"option_kurs":1},{"key":314,"sort":2,"main_start":"02.02.2026","main_start_raw":"2026-02-02","main_date":"02.02.2026","main_headline":"Kulinarischer Skitag","main_kuerzel":"KLI","main_payDate":"19.01.2026","main_payDate_raw":"2026-01-19","main_bookable_statusText":"","main_bookable":1,"main_ageMin":18,"main_ageMax":90,"main_priceMin":70,"main_ageRange":"18-90 Jahre","option_level":3,"option_kurs":0},{"key":320,"sort":3,"main_start":"11.02.2026","main_start_raw":"2026-02-11","main_date":"11.02.2026","main_headline":"Lady-Ski","main_kuerzel":"LDY_26","main_payDate":"28.01.2026","main_payDate_raw":"2026-01-28","main_bookable_statusText":"","main_bookable":1,"main_ageMin":16,"main_ageMax":90,"main_priceMin":50,"main_ageRange":"16-90 Jahre","option_level":3,"option_kurs":0},{"key":324,"sort":4,"main_start":"14.02.2026","main_start_raw":"2026-02-14","main_date":"14.-21.02.2026","main_headline":"Familienskiwoche am Hochkönig","main_kuerzel":"FSW_26","main_payDate":"31.01.2026","main_payDate_raw":"2026-01-31","main_bookable_statusText":"","main_bookable":1,"main_ageMin":1,"main_ageMax":999,"main_priceMin":0,"main_ageRange":"1-999 Jahre","option_level":3,"option_kurs":0},{"key":322,"sort":5,"main_start":"22.02.2026","main_start_raw":"2026-02-22","main_date":"22.02.-01.03.2026","main_headline":"Genuss-Woche Südtirol","main_kuerzel":"GWO_26","main_payDate":"08.02.2026","main_payDate_raw":"2026-02-08","main_bookable_statusText":"Die Anmeldefrist ist abgelaufen","main_bookable":0,"main_ageMin":18,"main_ageMax":90,"main_priceMin":710,"main_ageRange":"18-90 Jahre","option_level":3,"option_kurs":0}]'); var priceObjects = jQuery.parseJSON('{"318":{"927":{"option_bookings":15,"option_preis_bezeichnung":"Nichtmitglieder nur Bus","option_preis":55,"option_level":3,"option_age_min":12,"option_age_max":99,"option_age_range":"12 - 99 Jahre","option_ausgebucht":0,"option_kurs":0},"929":{"option_bookings":6,"option_preis_bezeichnung":"Nichtmitglieder Bus + Kurs Kinder","option_preis":75,"option_level":3,"option_age_min":6,"option_age_max":17,"option_age_range":"6 - 17 Jahre","option_ausgebucht":0,"option_kurs":1},"930":{"option_bookings":4,"option_preis_bezeichnung":"Mitglieder Bus + Kurs Kinder","option_preis":55,"option_level":2,"option_age_min":6,"option_age_max":17,"option_age_range":"6 - 17 Jahre","option_ausgebucht":0,"option_kurs":1},"928":{"option_bookings":6,"option_preis_bezeichnung":"Mitglieder nur Bus","option_preis":40,"option_level":2,"option_age_min":12,"option_age_max":99,"option_age_range":"12 - 99 Jahre","option_ausgebucht":0,"option_kurs":0},"925":{"option_preis_bezeichnung":"Mitglieder Bus + Kurs Erwachsene","option_preis":65,"option_level":2,"option_age_min":18,"option_age_max":99,"option_age_range":"18 - 99 Jahre","option_ausgebucht":0,"option_kurs":1},"926":{"option_preis_bezeichnung":"Nichtmitglieder Bus + Kurs Erwachsene","option_preis":90,"option_level":3,"option_age_min":18,"option_age_max":99,"option_age_range":"18 - 99 Jahre","option_ausgebucht":0,"option_kurs":1}},"314":{"905":{"option_bookings":12,"option_preis_bezeichnung":"Mitglieder Erwachsene","option_preis":70,"option_level":2,"option_age_min":18,"option_age_max":90,"option_age_range":"18 - 90 Jahre","option_ausgebucht":0,"option_kurs":0},"906":{"option_bookings":25,"option_preis_bezeichnung":"Nichtmitglieder Erwachsene","option_preis":90,"option_level":3,"option_age_min":18,"option_age_max":90,"option_age_range":"18 - 90 Jahre","option_ausgebucht":0,"option_kurs":0}},"320":{"938":{"option_bookings":31,"option_preis_bezeichnung":"Lady Nichtmitglied","option_preis":67,"option_level":3,"option_age_min":16,"option_age_max":90,"option_age_range":"16 - 90 Jahre","option_ausgebucht":0,"option_kurs":0},"937":{"option_bookings":6,"option_preis_bezeichnung":"Lady Mitglied","option_preis":50,"option_level":2,"option_age_min":16,"option_age_max":90,"option_age_range":"16 - 90 Jahre","option_ausgebucht":0,"option_kurs":0},"952":{"option_bookings":1}},"324":{"947":{"option_bookings":8,"option_preis_bezeichnung":"Mitglieder Erwachsene","option_preis":490,"option_level":2,"option_age_min":15,"option_age_max":999,"option_age_range":"15 - 999 Jahre","option_ausgebucht":0,"option_kurs":0},"948":{"option_bookings":6,"option_preis_bezeichnung":"Mitglieder Kind","option_preis":380,"option_level":2,"option_age_min":3,"option_age_max":14,"option_age_range":"3 - 14 Jahre","option_ausgebucht":0,"option_kurs":0},"951":{"option_bookings":1,"option_preis_bezeichnung":"Mitglied Kleinkind","option_preis":0,"option_level":2,"option_age_min":1,"option_age_max":2,"option_age_range":"1 - 2 Jahre","option_ausgebucht":1,"option_kurs":0},"952":{"option_bookings":2,"option_preis_bezeichnung":"Nichtmitglied Kleinkind","option_preis":0,"option_level":3,"option_age_min":1,"option_age_max":2,"option_age_range":"1 - 2 Jahre","option_ausgebucht":1,"option_kurs":0},"950":{"option_preis_bezeichnung":"Nichtmitglieder Kind","option_preis":480,"option_level":3,"option_age_min":3,"option_age_max":14,"option_age_range":"3 - 14 Jahre","option_ausgebucht":0,"option_kurs":0},"949":{"option_preis_bezeichnung":"Nichtmitglieder Erwachsene","option_preis":590,"option_level":3,"option_age_min":15,"option_age_max":999,"option_age_range":"15 - 999 Jahre","option_ausgebucht":0,"option_kurs":0}},"322":{"941":{"option_bookings":5,"option_preis_bezeichnung":"Mitglieder Erwachsene","option_preis":710,"option_level":2,"option_age_min":18,"option_age_max":90,"option_age_range":"18 - 90 Jahre","option_ausgebucht":0,"option_kurs":0},"942":{"option_bookings":9,"option_preis_bezeichnung":"Nichtmitglieder Erwachsene","option_preis":740,"option_level":3,"option_age_min":18,"option_age_max":90,"option_age_range":"18 - 90 Jahre","option_ausgebucht":0,"option_kurs":0}}}'); var journeyObjects = jQuery.parseJSON('{"318":{"323":{"option_name":"Bus mit \/ ohne Kurs","option_spaces":15,"option_priceReduction":0,"option_reservation":0,"option_waitingList":0,"option_standard":0}},"314":{"318":{"option_name":"Bus","option_spaces":45,"option_priceReduction":0,"option_reservation":0,"option_waitingList":0,"option_standard":0}},"320":{"325":{"option_name":"Bus","option_spaces":54,"option_priceReduction":0,"option_reservation":0,"option_waitingList":0,"option_standard":0}},"324":{"329":{"option_name":"Eigenanreise","option_spaces":36,"option_priceReduction":0,"option_reservation":0,"option_waitingList":0,"option_standard":0}},"322":{"327":{"option_name":"Eigenanreise","option_spaces":30,"option_priceReduction":0,"option_reservation":0,"option_waitingList":0,"option_standard":0}}}'); var lessonObjects = jQuery.parseJSON('{"318":{"A2-703":{"option_id_kurs":703,"option_kursTitel":"Ski 2"},"A3-716":{"option_id_kurs":716,"option_kursTitel":"Ski 3"},"S2-707":{"option_id_kurs":707,"option_kursTitel":"Snowboard 2"},"S3-706":{"option_id_kurs":706,"option_kursTitel":"Snowboard 3"}}}'); // Purpose: Display valid options // How it's done: Gather information from functions above // Status: IN USE function displayFormOptions() { var tripSelect = jQuery('#tripSelect').val(); var priceSelect = jQuery('#priceSelect').val(); var journeySelect = jQuery('#journeySelect').val(); var lessonSelect = jQuery('#lessonSelect').val(); // Hide all select elements, when no trip is selected // Reset selects (just to make sure) if(typeof tripSelect === 'undefined' || tripSelect === null || tripSelect === "") { jQuery('#priceSelectSection').addClass("d-none"); jQuery('#journeySelectSection').addClass("d-none"); jQuery('#lessonSelectSection').addClass("d-none"); jQuery('#tripBookingProgressbar').html("").addClass('d-none'); jQuery('#priceSelect').prop('selectedIndex', 0); jQuery('#journeySelect').prop('selectedIndex', 0); jQuery('#lessonSelect').prop('selectedIndex', 0); displayTripSelect(); return false; } else { jQuery('#tripSelect').removeClass("is-invalid").addClass("is-valid"); jQuery('#priceSelectHint').html('').addClass("d-none"); jQuery('#priceSelectSection').removeClass("d-none"); jQuery('#journeySelectSection').removeClass("d-none"); displayTripSelect(tripSelect); displayPriceSelect(tripSelect, priceSelect, lessonSelect); displayJourneySelect(tripSelect, journeySelect); //displayTripProgressBar(tripSelect); } } // Purpose: Fill select with trip data // How it's done: Rebuild a new JSON array which only contains the valid elements regarding age // Dependancies: calculateAge // Status: IN USE at displayFormOptions function displayTripSelect(tripSelect) { if(jQuery('#birthdate').val()) { jQuery('#birthdayDayHint').removeClass('d-none'); jQuery('#tripSelectSection').addClass('d-none'); } var tripCount = 0; var selectElement = jQuery("#tripSelect"); var tripLength = Object.keys(tripObjectsSelect).length; jQuery("#tripSelect").empty(); var selectElement = jQuery("#tripSelect"); selectElement.append(jQuery(''); tripCount++; } }); // In the rare case, that no trips can be shown we hide the select section // Let's make sure to show a hint if the registrant is too young if(tripCount==0) { if(jQuery('#birthdate').val().length==10) { jQuery('#birthdayDayHint').addClass('d-none'); jQuery('#noTrips').remove(); jQuery('#tripSelectSection').removeClass('d-none').after(''); } jQuery('#priceSelectSection').addClass('d-none'); jQuery('#journeySelectSection').addClass('d-none'); jQuery('#lessonSelectSection').addClass('d-none'); } else { jQuery('#tripSelect').addClass('is-invalid'); jQuery('#birthdayDayHint').addClass('d-none'); jQuery('#noTrips').remove(); jQuery('#tripSelectSection').removeClass('d-none'); jQuery('#noTrips').remove(); } if(typeof tripSelect === 'undefined' || tripSelect === null || tripSelect === "") { } else { jQuery('#tripSelect'+tripSelect).prop("selected", true); } } // Purpose: Determine the priceOptions in regard of membership and age // How it's done: Rebuild a new JSON array which only contains the valid elements // Dependancies: calculateAge() function // Status: IN USE at displayPriceSelect function determinePriceOptions(tripSelect) { if(typeof tripSelect === 'undefined' || tripSelect === null || tripSelect === "") return false; var specificDate = tripObjects[tripSelect]["main_start"]; var age = calculateAge(specificDate); //var mitglied = jQuery("input[name='mitglied']:checked").val(); var mitglied = jQuery('#mitglied').val(); var validPriceObjects = {}; jQuery.each(priceObjects[tripSelect], function(key, value) { var age_min = priceObjects[tripSelect][key]['option_age_min']; var age_max = priceObjects[tripSelect][key]['option_age_max']; var option_kurs = priceObjects[tripSelect][key]['option_kurs']; var option_level = priceObjects[tripSelect][key]['option_level']; // Stage 1: Age if(age>=age_min && age<=age_max) { // Stage 2: Level if(mitglied==1 && option_level==2) { validPriceObjects[key] = priceObjects[tripSelect][key]; } else if(mitglied==0 && option_level!=2) { validPriceObjects[key] = priceObjects[tripSelect][key]; } } }); var validPriceObjectsJSON = JSON.stringify(validPriceObjects, null, 2); return validPriceObjectsJSON; } // Purpose: Display price options // How it's done: Gather information and build select options // Dependancy: determinePriceOptions // Status: IN USE at displayFormOptions function displayPriceSelect(tripSelect, priceSelect, lessonSelect) { var priceOptions = jQuery.parseJSON(determinePriceOptions(tripSelect)); var priceLength = Object.keys(priceOptions).length; // Name & prepare element var selectElement = jQuery("#priceSelect"); jQuery("#priceSelect").empty(); // If element has more than one option, then add a select option with no value if(priceLength>1) { selectElement.append(jQuery('