var abfragecounter = 0; (function ($) { function calendar_view_step(el, direction) { var active_element = el.parent().find(".view.active"); if (direction == 'next') { var next_item = active_element.next(".view"); if (next_item.next(".view").length != 0) { next_item.toggleClass('active') active_element.toggleClass('active'); } } if (direction == 'prev') { var prev_item = active_element.prev(".view"); if (prev_item.prev(".view").length != 0) { prev_item.toggleClass('active') active_element.toggleClass('active'); } } } function set_the_daterange_humanreadable(el) { var popover_fieldname = $(el).closest(".tt-popover").attr('name'); var date_from = $(el).closest(".controls").find("input[name=departure]").attr('value'); var date_to = $(el).closest(".controls").find("input[name=arrival]").attr('value'); if (date_from == 0 && date_to == 0) { return; } $(el).closest(".controls").find("input[name=departure]").attr('value', date_from); var fromdate = $.datepicker.formatDate("dd.mm.yy", new Date(date_from * 1000)); $(".detail-booking-configurator .popover-field[name='" + popover_fieldname + "'] > span").html(fromdate); if (date_to > 0) { var todate = $.datepicker.formatDate("dd.mm.yy", new Date(date_to * 1000)); $(".detail-booking-configurator .popover-field[name='" + popover_fieldname + "'] > span").append(' - ' + todate); } } /** * sets the traveldate * @param el */ function set_traveldate(el) { $(el).closest(".controls").find(".calendar .day").removeClass("selected"); $(el).closest(".controls").find("input[name=departure]").attr('value', $(el).attr("data-date")); $(el).closest(".controls").find("input[name=arrival]").attr('value', $(el).attr("data-value-to")); // close the popover var popover_fieldname = $(el).closest(".controls").find("input[name=departure]").closest(".tt-popover").attr('name'); set_the_daterange_humanreadable(el); mark_the_days(el); toggle_box($(".detail-booking-configurator .popover-field[name='" + popover_fieldname + "']")); $(el).closest(".controls").find("input[name=departure]").trigger('change'); $(el).closest(".controls").find("input[name=arrival]").trigger('change'); } function mark_the_days(el) { var date_from = $(el).closest(".controls").find("input[name=departure]").attr('value'); var date_to = $(el).closest(".controls").find("input[name=arrival]").attr('value'); if (date_from != undefined && date_to != undefined && date_from.length > 0 && date_to.length > 0) { $(el).closest(".controls").find(".calendar .day").each(function () { if (parseInt($(this).attr("data-date")) >= date_from && parseInt($(this).attr("data-date")) <= date_to) { $(this).addClass('selected'); } }); } } function calendar_init() { $(".calendar").each(function () { var el = $(this).find(".day")[0]; mark_the_days(el); set_the_daterange_humanreadable(el); initPopoverFields(); }); } // add current url to each booking link function set_booking_url(){ var current_url = window.location.href; $('.booking-url').each(function(){ var url = $(this).attr('href'); var pos = url.indexOf('url='); if(pos > 0){ url = url.substr(0, pos - 1); } var n_url = url + '&url=' + encodeURIComponent(current_url); $(this).attr('href', n_url); }); } $(document).ready(function () { $('.booking-row .zusatzleistung-outer').hide(); $( ".weiterezusatzleistungen" ).click(function() { $( this ).find("i").toggleClass( "fa-minus" ); $( this ).toggleClass( "active" ); id = $(this).attr("data-id"); $( "#"+id ).toggle("slow"); }); function toggle_filter(el) { $(el).closest('.toggle-cat').find("li").removeClass('active'); $(el).closest("li").addClass('active'); var allcat = $.map($(el).closest('.panel-body').children(".toggle-cat"), function (n) { return $(n).data('togglecat'); }); var activemonth = 'all'; var activeroom = 'all'; activemonth = $(el).closest('.panel-body').find(".toggle-cat[data-togglecat='month'] li.active .toggle-src").data('togglesrc'); activeroom = $(el).closest('.panel-body').find(".toggle-cat[data-togglecat='room'] li.active .toggle-src").data('togglesrc'); $(el).closest('.panel-body').find(".tab-content .booking-row").each(function () { $(this).slideUp(); }); if (activemonth == "all" && activeroom == "all") { $(el).closest('.panel-body').find(".tab-content .booking-row").each(function () { $(this).delay(300).slideDown(); }); } else if (activemonth != "all" && activeroom == "all") { $(el).closest('.panel-body').find(".tab-content .booking-row[data-month='" + activemonth + "']").each(function () { $(this).delay(300).slideDown(); }); } else if (activemonth == "all" && activeroom != "all") { $(el).closest('.panel-body').find(".tab-content .booking-row[data-room='" + activeroom + "']").each(function () { $(this).delay(300).slideDown(); }); } else if (activemonth != "all" && activeroom != "all") { $(el).closest('.panel-body').find(".tab-content .booking-row[data-month='" + activemonth + "'][data-room='" + activeroom + "']").each(function () { $(this).delay(300).slideDown(); }); } } $(".detail-booking .toggle-src").on('click touch', function () { toggle_filter($(this)); return false; }); $(".detail-booking .panel-body .toggle-cat").each(function () { $optionsize = $(this).children("li").length; if ($optionsize > 2) { $cur_el = $(this).children("li:nth-child(2)"); toggle_filter($cur_el); } }); $(".month_selectbox .toggle-src").on('click touch', function () { $month_select = $(this).attr('data-value'); $(".month_selectbox .select-wrapper .form-control").text( $month_select ); $(".month_selectbox .tt-popover").fadeOut(); $(".month_selectbox .select-wrapper").removeClass("active"); return false; }); $(".room_selectbox .toggle-src").on('click touch', function () { $room_select = $(this).html(); $(".room_selectbox .select-wrapper .form-control").text( $room_select ); $(".room_selectbox .tt-popover").fadeOut(); $(".room_selectbox .select-wrapper").removeClass("active"); return false; }); $(".detail-booking .option-group-filter").on('click touch', function () { // control the popover $(this).closest('form').find('.select-wrapper .form-control').html($(this).html()); $(this).closest('form').find('.tt-popover').fadeOut(); $(this).closest('form').find('.select-wrapper').removeClass("active"); $(this).closest('.group-filter-list').find("li").removeClass('active'); $(this).closest("li").addClass('active'); option_filter(this); return false; }); /*$(".detail-booking .panel-body .group-filter-list li.active a").each(function () { option_filter(this); return false; });*/ function option_filter(el){ var month_filter = $(el).closest('.panel-body').find('.filter_selectbox div[name=month_selectbox] li.active a').data('value'); var boarding_filter = $(el).closest('.panel-body').find('.filter_selectbox div[name=boarding_selectbox] li.active a').data('value'); var person_filter = $(el).closest('.panel-body').find('.filter_selectbox div[name=person_selectbox] li.active a').data('value'); // fst hide date rows $(el).closest('.panel-body').find(".booking-row").each(function () { $(this).slideUp(); }); // hide options in date row $(el).closest('.panel-body').find(".booking-row .option").each(function () { if($('.person_selectbox').length > 0) { $(this).hide(); } }); // show filter options $(el).closest('.panel-body').find('.booking-row .row.data').filter(function(){ $(this).hide(); $('.schiffsdeck').hide(); $('.kabinenauswahl').find('i').removeClass('fa-minus'); if (boarding_filter !== undefined) { if(boarding_filter === 'all'){ if(parseInt($(this).find('.option').data('occupancy')) <= parseInt(person_filter)) { $(this).show(); } } else if(boarding_filter !== 'all'){ if(parseInt($(this).find('.option').data('occupancy')) <= parseInt(person_filter) && $(this).find('.option').data('boarding') === boarding_filter) { $(this).show(); } } else{ if (boarding_filter === undefined && person_filter === undefined) { $(this).show(); } } } else { if(person_filter !== undefined) { if (parseInt(person_filter) > 0) { if(parseInt($(this).find('.option').data('occupancy')) <= parseInt(person_filter)) { $(this).show(); } } } else { $(this).show(); } } });//.show(); // show date rows $(el).closest('.panel-body').find('.booking-row').filter(function(){ if(month_filter == 'all'){ return true; } return $(this).data('month') == month_filter; }).delay(300).slideDown(); } // bind the current url even on hash change to the booking urls $(window).on("hashchange", function() { set_booking_url(); }); // Calendar switch month $(document).on("click", ".detail-booking-configurator .tt-popover .calendar a.left", function () { calendar_view_step($(this), 'prev'); return false; }); // Calendar switch month $(document).on("click", ".detail-booking-configurator .tt-popover .calendar a.right", function () { calendar_view_step($(this), 'next'); return false; }); // Calendar click on one day, set the daterange //$(".detail-booking-configurator .tt-popover .calendar .day").click(function () { $(document).on("click touchend", ".detail-booking-configurator .tt-popover .calendar .day", function (event) { event.preventDefault(); if($(this).hasClass('selectable') === false){ return false; } set_traveldate($(this)); return false; }); // Calendar mark the daterange on hover $(document).on("mouseenter", ".detail-booking-configurator .tt-popover .calendar .day", function () { // mark the days var cur_date_ts = $(this).attr("data-date"); var date_to = $(this).attr("data-value-to"); if (date_to) { $(this).closest(".controls").find(".calendar .day").each(function () { if (parseInt($(this).attr("data-date")) >= cur_date_ts && parseInt($(this).attr("data-date")) <= date_to) { $(this).toggleClass('marked'); } }); } return false; }); $(document).on("mouseleave", ".detail-booking-configurator .tt-popover .calendar .day", function () { $(this).closest(".controls").find(".day").removeClass("marked"); return false; }); $(".detail-booking-configurator").on("change", "select[name=transport_type],input[name=arrival],select[name=id_housing_option],select[name=id_booking_package],select[name=id_housing_package]", function (event) { event.preventDefault(); // set an loading animation $(this).closest(".ajax-configurator").find('.price').html(' Aktualisiere Preis...'); // if the date changes, the housing option is not valid if($(this).attr('name') == 'arrival'){ $(this).closest(".ajax-configurator").find('select[name=id_housing_option]').val(0); } if($(this).attr('name') == 'id_booking_package'){ $(this).closest(".ajax-configurator").find('select[name=id_housing_option]').val(0); $(this).closest(".ajax-configurator").find('select[name=id_housing_package]').val(0); $(this).closest(".ajax-configurator").find('input[name=id_housing_package]').val(0); // the hidden field $(this).closest(".ajax-configurator").find('input[name=departure]').val(0); $(this).closest(".ajax-configurator").find('input[name=arrival]').val(0); $(this).closest(".ajax-configurator").find('select[name=id_housing_option]').val(0); } if($(this).attr('name') == 'id_housing_package'){ $(this).closest(".ajax-configurator").find('select[name=id_housing_option]').val(0); $(this).closest(".ajax-configurator").find('input[name=departure]').val(0); $(this).closest(".ajax-configurator").find('input[name=arrival]').val(0); $(this).closest(".ajax-configurator").find('select[name=id_housing_option]').val(0); } // if the id_transport_type changes, the depature, arrival and housing option is not valid if($(this).attr('name') == 'transport_type'){ $(this).closest(".ajax-configurator").find('input[name=departure]').val(0); $(this).closest(".ajax-configurator").find('input[name=arrival]').val(0); $(this).closest(".ajax-configurator").find('select[name=id_housing_option]').val(0); } var content_div = $(this).closest(".ajax-configurator"); var r = $.post(FLBuilderLayoutConfig.paths.wpAjaxUrl, { action: 'tt_booking_configurator', formdata: $(this).closest('form').serialize() }, function (data) { },'html').done(function (data) { var h = content_div.html(data); // set the current price to the panel heading var id_booking_package = content_div.attr('data-booking-package'); content_div.closest(".panel").find("div[href=#booking_package_"+id_booking_package+"] .duration").html(content_div.find(".panelinfo-duration").html()); content_div.closest(".panel").find("div[href=#booking_package_"+id_booking_package+"] .price").html(content_div.find(".panelinfo-price").html()); content_div.closest(".panel").find("div[href=#booking_package_"+id_booking_package+"] .name").html(content_div.find(".panelinfo-name").html()); calendar_init(); set_booking_url(); }); }); $(document).on('change', '.detail-booking .housing-option-group select', function(){ var button = $(this).closest('form').find('a.ibe'); // calc the price var price = 0; $(this).closest('.booking-row').find('select').each(function(){ price += parseFloat($(this).data('price')) * parseFloat($(this).val()); }); if(price > 0){ var price_hr = moneyFormat.to(price); } else{ var price_hr = ''; } $(this).closest('.booking-row').find('.price.main-price span').html(price_hr); $(this).removeClass('error'); $(this).closest('.housing-option-group').find('.msg').hide().html(''); reset_booking_button(button) // BEGIN TS: Kabinenauswahl Button nur anzeigen, wenn eine Anzahl gewählt wurde if (this.value !== '0') { $(this).closest('.row.data').find('.kabinenauswahl a.kabinendeck').addClass('active'); } else { $(this).closest('.row.data').find('.kabinenauswahl a.kabinendeck').removeClass('active'); } // END TS: Kabinenauswahl Button nur anzeigen, wenn eine Anzahl gewählt wurde }); function reset_booking_button(button){ var spinner = button.find('i'); var label = button.find('span'); //label.html('Verfügbarkeit prüfen'); spinner.hide(); button.removeClass('disabled'); //button.removeClass('booking-possible'); //button.removeClass('booking-request-possible'); button.removeClass('disabled'); button.attr('style', ''); $(".booking-btn-section").attr('style', ''); var url = button.data('booking-url'); button.closest('form').find('select').each(function(){ var amount = parseInt($(this).val()); if(amount > 0){ var v = $(this).data('value'); url += '&iho[' + v.id + ']=' + amount; button.attr('href', url); bmsg = 'Die Reise ist online buchbar.'; } }); button.closest('.booking-btn-section').find('.booking-info').show().html(''); } var kontingent; var konti; var kabinenauswahl; var deckauswahl; var selectedValues = []; let selection = {} $('.housing-option-group select').on('change', function () { var optionSelected = $("option:selected", this); var valueSelected = this.value; var data_id_option = $(this).closest('.housing-option-group').attr('data-id-option'); var data_room = $(this).closest('.row.option').attr('data-room'); var isCabinSelection = $('.kabinenauswahl:visible').length; var button = $(this).closest('.booking-row').find(".booking-url.booking-possible"); const kabs = selection[data_room] ? selection[data_room].kabs : [] let isSelectionComplete = true selection[data_room] = { count: parseInt(this.value), data_id: data_id_option, kabs: kabs } if (isCabinSelection) { for (const [key, value] of Object.entries(selection)) { isSelectionComplete = selection[key].count !== value.kabs.length ? false : !isSelectionComplete ? false : true } if (!isSelectionComplete) { setTimeout(function () { var bookingmsg = 'Bitte eine Kabine auswählen!'; button.closest('.booking-btn-section').find('.booking-info').html(bookingmsg); button.addClass('disabled'); button.attr('disabled', 'disabled'); button.attr('style', 'pointer-events: none !important'); return; }, 500); } } else { if (valueSelected === "0") { setTimeout(function () { var bookingmsg = 'Bitte eine Kabine auswählen!'; button.closest('.booking-btn-section').find('.booking-info').html(bookingmsg); button.addClass('disabled'); button.attr('disabled', 'disabled'); button.attr('style', 'pointer-events: none !important'); return; }, 500); } else { setTimeout(function () { button.closest('.booking-btn-section').find('.booking-info').html(''); button.removeClass('disabled'); button.removeAttr('disabled'); button.attr('style', ''); return; }, 500); } } //selectedValues.push({data_id_option, valueSelected}); }); $(document).on('click', '.booking-btn-section a.ibe' , function(event) { var button = $(this); if(button.hasClass('booking-possible') === true || button.hasClass('booking-request-possible') === true ){ return; } event.preventDefault(); var spinner = button.find('i'); var label = button.find('span'); var request = button.data('request'); var is_housing_group_request = false; if(button.hasClass('housing-group-request') === true){ is_housing_group_request = true; var c = 0; request.BookingRequestVO.Options = []; // Each Select-Field button.closest('form').find('select').each(function(){ if(button.hasClass('firstamount') === true){ var amount = 1 button.removeClass('firstamount'); } else { var amount = parseInt($(this).val()); } if(amount > 0){ c++; var v = $(this).data('value'); v.amount = parseInt($(this).val());; v.type = 'housing_option'; request.BookingRequestVO.Options.push(v); } }); if(c == 0){ var bookingmsg = 'Bitte mind. 1 Zimmer wählen.'; button.closest('.booking-btn-section').find('.booking-info').show().html(bookingmsg); return; } } spinner.show(); label.html('Prüfe Status'); var endamount = 0; var data_request = $(this).attr('data-request'); data_request = JSON.parse(data_request); var von = data_request.BookingRequestVO.date_from; var bis = data_request.BookingRequestVO.date_to; // 2020-05-02T00:00:00.000Z var r = $.post(FLBuilderLayoutConfig.paths.wpAjaxUrl, request, function (data) {}, 'json').done(function (data) { // Verfügbarkeits-Ampel var vakanz = data.log[2].Vakanz; var felder = button.parent().parent().parent().parent(); if (data.kabinen[1]) { function parseXml(xml, arrayTags) { let dom = null; if (window.DOMParser) dom = (new DOMParser()).parseFromString(xml, "text/xml"); else if (window.ActiveXObject) { dom = new ActiveXObject('Microsoft.XMLDOM'); dom.async = false; if (!dom.loadXML(xml)) throw dom.parseError.reason + " " + dom.parseError.srcText; } else throw new Error("cannot parse xml string!"); function parseNode(xmlNode, result) { if (xmlNode.nodeName == "#text") { let v = xmlNode.nodeValue; if (v.trim()) result['#text'] = v; return; } let jsonNode = {}, existing = result[xmlNode.nodeName]; if (existing) { if (!Array.isArray(existing)) result[xmlNode.nodeName] = [existing, jsonNode]; else result[xmlNode.nodeName].push(jsonNode); } else { if (arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1) result[xmlNode.nodeName] = [jsonNode]; else result[xmlNode.nodeName] = jsonNode; } if (xmlNode.attributes) for (let attribute of xmlNode.attributes) jsonNode[attribute.nodeName] = attribute.nodeValue; for (let node of xmlNode.childNodes) parseNode(node, jsonNode); } let result = {}; for (let node of dom.childNodes) parseNode(node, result); return result; } var kabinen = data.kabinen[1].Kabinen; var deck = ''; var alldecks = []; var b = []; $.each(kabinen, function (k, v) { if (v) { $('.kabinenauswahl').show(); } var kabinen_decks_ID = v.kabinen_decks_ID; var svg_base64 = v.SVG_BASE64; var svg = atob(svg_base64); var json = parseXml(svg); let imageObject = json.hmReports.page.object.find(item => item.type === 'picture') let deckObjects = json.hmReports.page.object.filter(item => item.type !== 'picture') var image = imageObject['#text']; var pathpart = ""; // 8bitColor = ((16bitColor + 1)*256) - 1 function bcolor(eins6) { if (parseInt(eins6) != 0) { return (((parseInt(eins6) + 1) / 256) - 1); } else { return '0'; } } /* */ var x1, x2, y1, y2, w, h; x1 = 0; // imageObject.x1; x2 = imageObject.x2; y1 = 0; // imageObject.y1; y2 = imageObject.y2; w = (x2 - x1); h = (y2 - y1); var code, kabnr, buchbar, status_f, vorgang, ref_nr_obj = ''; var k_x1, k_x2, k_y1, k_y2; var fill = ''; var first = 0; var rgba; $.each(deckObjects, function (key, value) { if(value.fillcolor && first <= 1) { var fillcolor = value.fillcolor; fillcolor = fillcolor.replace('rgb16(', ''); fillcolor = fillcolor.replace(')', ''); fillcolor = fillcolor.split(',', 4); var rh = bcolor(fillcolor[0]); rh = rh.toString(); rh = rh.replace('-', ''); rh = rh.split('.',2); rh = rh[0]; var gh = bcolor(fillcolor[1]); gh = gh.toString(); gh = gh.replace('-', ''); gh = gh.split('.', 2); gh = rh[0]; var bh = bcolor(fillcolor[2]); bh = bh.toString(); bh = bh.replace('-', ''); bh = bh.split('.', 2); bh = bh[0]; var oh = bcolor(fillcolor[3]); oh = oh.toString(); oh = oh.replace('-', ''); oh = oh.split('.', 2); oh = oh[0]; first = 1; rgba = 'rgba('+rh+','+gh+','+bh+','+oh+')'; } /* fillcolor: "rgb16(65535,0,0,0)" framecolor: "rgb16(0,0,0,1)" group: "5" id: "3" layer: "2" name: "gebucht" penwidth: "3" showfill: "false" type: "line" */ if(this['type'] == 'rect') { k_x1 = this['x1']; k_x2 = this['x2']; k_y1 = this['y1']; k_y2 = this['y2']; } if(value.custom_property) { deck = value.custom_property.find(item => item.name === 'Code')['#text']; // Decksbezeichnung code = value.custom_property.find(item => item.name === 'Code')['#text']; // Code kabnr = value.custom_property.find(item => item.name === 'Kabinen Nr.')['#text']; // Kabinen Nr buchbar = value.custom_property.find(item => item.name === 'Buchbar')['#text']; // Buchbar Ja|Nein vorgang = value.custom_property.find(item => item.name === 'Vorgang')['#text']; // Vorgang // status_f = value.custom_property.find(item => item.name === 'Status_Farbe')['#text']; // Status_Farbe // ref_nr_obj = value.custom_property.find(item => item.name === 'Ref_Nr_Objekt')['#text']; // Ref_Nr_Object pathpart += ` `; // BEGIN TS: Button zunächst inaktiv, da über Anzahl Selectbox gesteuert // $('.kabinenauswahl').find('[ data-room="'+deck+'"]').addClass('active'); // END TS: Button zunächst inaktiv, da über Anzahl Selectbox gesteuert alldecks.push({kabinen_decks_ID, deck}); } }); $.each(alldecks, function(index, event) { var events = $.grep(b, function (e) { return event.kabinen_decks_ID === e.kabinen_decks_ID && event.deck === e.deck; }); if (events.length === 0) { b.push({...event,pathpart: pathpart, h:h, w:w, image:image}); } }); }); $.each(b, function (i, v) { var svg_image = `
` + v.pathpart + `
`; // $('.schiffsdeck[data-room="'+v.deck+'"]').css({'justify-content': 'center', 'align-items': 'center', 'height': '1000px', 'left': '0'}) if ($('.schiffsdeck[data-room="'+v.deck+'"]').find('div').length === 0) { $('.schiffsdeck[data-room="'+v.deck+'"]').append(svg_image); } }); $(document).ready(function () { /* $(window).resize(function () { $('svg').attr('height', '300px') $('svg image').attr('height', '300px') }); */ $('.kabinenauswahl a.kabinendeck').off('click').on('click', function (e) { e.preventDefault(); if ($(this).hasClass('active')) { var room = $(this).attr('data-room'); var boarding = $(this).attr('data-boarding'); // BEGIN TS: Accordeon Verhalten $('.schiffsdeck[data-room!="'+room+'"]:visible').hide(); $('.kabinenauswahl a[data-room!="'+room+'"].kabinendeck.active').find('i').removeClass('fa-minus') // END TS: Accordeon Verhalten $(this).find('i').toggleClass('fa-minus'); if( $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"]').css('display') == 'flex') { $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"]').css({'display': 'none'}); } else { $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"]').css({'display': 'flex'}); } // BEGIN TS: Bugfix Ausgabe buchbare Kabinen; Berücksichtigung gesperrte Kabinen; Kabinen anderer Kategorien nicht klickbar // $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g[data-field="'+room+'"] path').show(); $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g path').show(); // $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g[data-field="'+room+'"] path[vorgang-status="undefined"]').addClass('not-allowed'); // $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g[data-field="'+room+'"] path[vorgang-status="undefined"]').css('fill', 'rgba(255,255,255,0.75)'); $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g[data-field="'+room+'"] path[vorgang-status="Ja"], path[kabinen-status="Nein"]').addClass('not-allowed'); $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g[data-field="'+room+'"] path[vorgang-status="Ja"], path[kabinen-status="Nein"]').css('fill', 'rgba(255,255,255,0.75)'); $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g[data-field!="'+room+'"] path').addClass('not-allowed'); $('.schiffsdeck[data-room="'+room+'"][data-boarding="'+boarding+'"] svg g[data-field!="'+room+'"] path').css('fill', 'rgba(255,255,255,0.75)'); // END TS: Bugfix Ausgabe buchbare Kabinen; Berücksichtigung gesperrte Kabinen; Kabinen anderer Kategorien nicht klickbar } }); // BEGIN TS: Event listener aus obigen eventlistener raus genommen $('svg g path').off('click').on('click', function () { let queryString = '' let isSelectionComplete = true kabinenauswahl = $(this).attr('value'); deckauswahl = $(this).closest('g').attr('data-field'); maxCount = selection[deckauswahl].count var button = $(this).closest('.booking-row').find(".booking-url.booking-possible"); // $(this).closest('svg').find('g path').css({ fill: 'rgba(255,2,0,0)' }); if ($(this).hasClass('auswahl')) { selection[deckauswahl].kabs.splice(selection[deckauswahl].kabs.indexOf($(this).attr('value')), 1) $(this).removeClass('auswahl'); } else if (!$(this).hasClass('not-allowed') && selection[deckauswahl].kabs.length < maxCount) { $(this).addClass('auswahl'); selection[deckauswahl].kabs.push($(this).attr('value')) } for (const [key, value] of Object.entries(selection)) { queryString += `&kab[${value.data_id}]=${value.kabs.join(',')}` isSelectionComplete = selection[key].count !== value.kabs.length ? false : !isSelectionComplete ? false : true } if (isSelectionComplete) { var booking_button = $(this).closest('form').find('.booking-url.booking-possible').attr('href'); booking_button = booking_button + queryString; $('.booking-url.booking-possible').attr('href', booking_button); button.closest('.booking-btn-section').find('.booking-info').html(''); button.removeClass('disabled'); button.removeAttr('disabled'); button.attr('style', ''); } else { var bookingmsg = 'Bitte eine Kabine auswählen!'; button.closest('.booking-btn-section').find('.booking-info').html(bookingmsg); button.addClass('disabled'); button.attr('disabled', 'disabled'); button.attr('style', 'pointer-events: none !important'); } }); // END TS: Event listener aus obigen eventlistener raus genommen // TS BEGIN: Event listener nicht extra für "active" registrieren /* $('.kabinenauswahl a .kabinendeck .active').off('click').on('click', function (e) { e.preventDefault(); var room = $(this).attr('data-room'); // BEGIN TS: Accordeon Verhalten $('.schiffsdeck[data-room!="'+room+'"]:visible').hide(); $('.kabinenauswahl a[data-room!="'+room+'"].kabinendeck.active').find('i').removeClass('fa-minus') // END TS: Accordeon Verhalten $(this).find('i').toggleClass('fa-minus'); if( $('.schiffsdeck[data-room="'+room+'"]').css('display') == 'flex') { $('.schiffsdeck[data-room="'+room+'"]').css({'display': 'none'}); } else { $('.schiffsdeck[data-room="'+room+'"]').css({'display': 'flex'}); } // BEGIN TS: Bugfix Ausgabe buchbare Kabinen; Berücksichtigung gesperrte Kabinen; Kabinen anderer Kategorien nicht klickbar // $('.schiffsdeck[data-room="'+room+'"] svg g[data-field="'+room+'"] path').show(); $('.schiffsdeck[data-room="'+room+'"] svg g path').show(); // $('.schiffsdeck[data-room="'+room+'"] svg g[data-field="'+room+'"] path[vorgang-status="undefined"]').addClass('not-allowed'); // $('.schiffsdeck[data-room="'+room+'"] svg g[data-field="'+room+'"] path[vorgang-status="undefined"]').css('fill', 'rgba(255,255,255,0.75)'); $('.schiffsdeck[data-room="'+room+'"] svg g[data-field="'+room+'"] path[vorgang-status="Ja"], path[kabinen-status="Nein"]').addClass('not-allowed'); $('.schiffsdeck[data-room="'+room+'"] svg g[data-field="'+room+'"] path[vorgang-status="Ja"], path[kabinen-status="Nein"]').css('fill', 'rgba(255,255,255,0.75)'); $('.schiffsdeck[data-room="'+room+'"] svg g[data-field!="'+room+'"] path').addClass('not-allowed'); $('.schiffsdeck[data-room="'+room+'"] svg g[data-field!="'+room+'"] path').css('fill', 'rgba(255,255,255,0.75)'); // END TS: Bugfix Ausgabe buchbare Kabinen; Berücksichtigung gesperrte Kabinen; Kabinen anderer Kategorien nicht klickbar $('svg g path').off('click').on('click', function () { kabinenauswahl = $(this).attr('value'); deckauswahl = $(this).closest('svg').find('g').attr('data-field'); // $(this).closest('svg').find('g path').css({ fill: 'rgba(255,2,0,0)' }); if ($(this).hasClass('auswahl')) { kabs.splice(kabs.indexOf($(this).attr('value')), 1) $(this).removeClass('auswahl'); } else if (!$(this).hasClass('not-allowed')) { $(this).addClass('auswahl'); kabs.push($(this).attr('value')) } if (kabinenauswahl != undefined) { var booking_button = $('.booking-url.booking-possible').attr('href'); booking_button = booking_button + '&kab=' + kabinenauswahl + '&code=' + deckauswahl; $('.booking-url.booking-possible').attr('href', booking_button); var button = $(this).closest('.booking-row').find(".booking-url.booking-possible"); button.closest('.booking-btn-section').find('.booking-info').html(''); button.removeClass('disabled'); button.removeAttr('disabled'); button.attr('style', ''); } }); }); */ // END TS: Event listener nicht extra für "active" registrieren }); } $.each(vakanz, function (k, v) { var gesamtanzahl_unterbringung = 0; $.each(v.Unterbringung, function (index, unterbringung) { gesamtanzahl_unterbringung += unterbringung.Kontigent_Unterkunft; }); var term_von = v.Termin_von; term_von = term_von.replace('T', ' '); term_von = term_von.replace('Z', ' '); term_von = term_von.replace('.000 ', ''); if (term_von == von) { var checkcount = v.Unterbringung.length; var check = 0; var unterbringung = v.Unterbringung; var ampelpos; var tooltext; var count_value = ""; kontingent = v.Kontigent_Befoerderung; if (kontingent > 0) { var back_selected = ''; var selValue = ''; $.each(selectedValues, function (k, v) { back_selected = v.data_id_option; if (back_selected == v.data_id_option) { selValue = v.valueSelected; } }); $.each(unterbringung, function (key, value) { $(felder).find('[data-room=' + value.Unterkunft + ']').find('.msg').parent().parent().find('.ampel').remove(); if (value.Kontigent_Unterkunft == '0') { ampelpos = '0px'; tooltext = 'Nicht mehr verfügbar'; } if (value.Kontigent_Unterkunft > '0' && value.Kontigent_Unterkunft < '10') { ampelpos = '-24px'; tooltext = 'Begrenzt verfügbar'; } if (value.Kontigent_Unterkunft >= '10') { ampelpos = '-48px'; tooltext = 'Verfügbar'; var optionfeld = $(felder).find('[data-room=' + value.Unterkunft + ']').find('.msg').parent().parent().find('select').html(); } $(felder).find('[data-room=' + value.Unterkunft + ']').find('.msg').parent().parent().find('.row-text').append('' + tooltext + ''); $(felder).find('[data-room=' + value.Unterkunft + ']').find('.msg').parent().parent().find('.row-text').find('select option').remove(); for (var j = 0; j <= value.Kontigent_Unterkunft; j++) { if (j < 10) { $(felder).find('[data-room=' + value.Unterkunft + ']').find('.msg').parent().parent().find('.row-text select').append(''); abfragecounter++; } } }); } else { konti = false; } } else { /* konti = false;*/ } }); if (konti == false) { $(felder).find('.msg').parent().parent().find('.row-text').find('select option').remove(); $(felder).find('.msg').parent().parent().find('.row-text select').append(''); button.closest('.booking-btn-section').parent().find('.booking-info').show().html('Keine Kontingente verfügbar'); button.closest('.booking-btn-section').find('.fa-spinner').hide(); button.closest('.booking-btn-section a').addClass('hideit'); button.closest('.booking-btn-section').find('span').html(''); button.closest('.booking-btn-section a').attr('href', '#'); button.addClass('disabled'); button.attr("disabled", "disabled"); button.attr('style', 'pointer-events: none !important'); $(".booking-btn-section").attr('style', 'cursor: not-allowed !important'); return; } // set the state if(is_housing_group_request === true){ if(data.state != 1){ for(var i = 0; i < data.Options.length; i++){ var Option = data.Options[i]; if(Option.state == 3){ var optionEl = button.closest('.booking-row').find('div[data-id-option='+Option.id_option +']'); optionEl.find('.msg').html(Option.quota + ' verfügbar'); optionEl.find('.msg').show(); optionEl.find('select').addClass('error'); } } var bookingmsg = 'Kombination nicht buchbar.
Bitte die Zimmerauswahl ändern.'; label.html('Ausgebucht'); button.attr('href', '#'); button.addClass('disabled'); } else { label.html('zur Buchung'); button.addClass('booking-possible'); var url = button.data('booking-url'); button.closest('form').find('select').each(function(){ var amount = parseInt($(this).val()); if(amount > 0){ var v = $(this).data('value'); url += '&iho[' + v.id + ']=' + amount; bmsg = 'Die Reise ist online buchbar.'; endamount = 1; } else { bmsg = 'Bitte mind. 1 Zimmer wählen.'; button.addClass('disabled'); button.attr("disabled", "disabled"); button.attr('style', 'pointer-events: none !important'); $(".booking-btn-section").attr('style', 'cursor: not-allowed !important'); } }); button.attr('href', url); //console.log('Meine Console -> ' + url); var bookingmsg = ''; bookingmsg = bmsg; } } else { // booking is possible if(data.state == 1){ label.html('zur Buchung'); button.addClass('booking-possible'); if(is_housing_group_request === true){ var url = button.data('booking-url'); button.closest('form').find('select').each(function(){ var amount = parseInt($(this).val()); if(amount > 0){ var v = $(this).data('value'); url += '&iho[' + v.id + ']=' + amount; } }); button.attr('href', url); } var bookingmsg = ''; bookingmsg = 'Die Reise ist online buchbar.'; if(data.price != null || data.price > 0){ if(data.price > button.data('current-price')) { bookingmsg = '
Neuer Preis: ' + data.price_hr; button.closest('.booking-row').find('.main-price span').html(data.price_hr); }else if(data.price < button.data('current-price')) { bookingmsg = '
Neuer Preis: ' + data.price_hr; button.closest('.booking-row').find('.main-price span').html(data.price_hr); } } }else if(data.state == 2 || data.state == null || data.error == true){ // request var bookingmsg = 'Zur Zeit nur auf Anfrage buchbar.'; button.attr('href', button.data('booking-request-url')); label.html('zur Anfrage'); button.addClass('booking-request-possible'); }else if(data.state == 3){ // not bookable var bookingmsg = 'Zur Zeit nicht buchbar.'; label.html('Buchungsstop'); button.attr('href', '#'); button.addClass('disabled'); }else{ var bookingmsg = 'Zur Zeit nur auf Anfrage buchbar.'; button.attr('href', button.data('booking-request-url')); label.html('zur Anfrage'); button.addClass('booking-request-possible'); } } if(endamount == 1){ bmsg = 'Die Reise ist online buchbar.'; bookingmsg = bmsg; } button.closest('.booking-btn-section').find('.booking-info').show().html(bookingmsg); spinner.hide(); }).error(function(data){ button.attr('href', button.data('booking-request-url')); label.html('zur Anfrage'); button.addClass('booking-request-possible'); button.find('.booking-info').show().html('Zur Zeit nur auf Anfrage buchbar.'); spinner.hide(); }); }); calendar_init(); set_booking_url(); if($(".filter_selectbox").length) { $(".filter_selectbox").each(function(){ option_filter(this); }); } $('a[href="#detail-booking"]').click(function () { $('.booking-btn-section a').trigger('click'); if($('[href^="#booking_package"]').hasClass('collapsed')) { $('[href^="#booking_package"]').trigger('click'); } }); if($('[href^="#booking_package"]').hasClass('collapsed')) { $('[href^="#booking_package"]').click(function () { $('.booking-btn-section a').trigger('click'); }); } }); })(jQuery);