1jQuery(document).ready(function ($) { 2 let booking_attache = $("#booking_attache"); 3 4 let booking_start = $("input[name='booking_start']"); 5 let booking_finish = $("input[name='booking_finish']"); 6 7 let booking_guests_rooms = $(".booking_guests_rooms"); 8 let booking_guests_guests_adults = $(".booking_guests_guests_adults"); 9 let booking_guests_guests_childs = $(".booking_guests_guests_childs"); 10 11 let booking_select = $(".booking_select"); 12 let booking_guests_chevron = $(".booking_guests_chevron"); 13 let booking_guests_popup = $(".booking_guests_popup"); 14 15 let booking_room = $(".booking_room"); 16 let booking_add_room = $("#booking_add_room"); 17 let booking_remove_room = $(".booking_remove_room"); 18 19 let booking_adults = $(".booking_adults"); 20 let booking_remove_adult = $(".booking_remove_adult"); 21 let booking_add_adult = $(".booking_add_adult"); 22 23 let booking_guests_popup_static = $(".booking_guests_popup_static"); 24 let booking_guests_popup_child = $(".booking_guests_popup_child"); 25 let booking_childs = $(".booking_childs"); 26 let booking_remove_child = $(".booking_remove_child"); 27 let booking_add_child = $(".booking_add_child"); 28 29 let booking_child_age = $("input[name='booking_child_age']"); 30 31 let booking_search = $("#booking_search"); 32 33 let booking_roomer = $(".booking_roomer"); 34 35 function resetResults() { 36 booking_roomer.html(""); 37 } 38 39 // СÑÑÑÑики 40 window.rooms = 1; 41 let all_adults = 1; 42 let all_childs = 0; 43 44 45 // ÐÐ»Ð¾Ð½Ñ 46 let childs_template = booking_guests_popup_child.clone(); 47 booking_guests_popup_child.remove(); 48 49 let booking_room_template = booking_room.clone(); 50 booking_room.addClass("booking_room_1"); 51 booking_room.attr("data-room-i", rooms); 52 booking_room.find("input[name='booking_adults']").attr("name", "room_" + rooms + "_booking_adults"); 53 booking_room.find("input[name='booking_childs']").attr("name", "room_" + rooms + "_booking_childs"); 54 55 56 //ÐÑоÑÑавлÑем ÑекÑÑÑÑ Ð´Ð°ÑÑ Ð² Ð¿Ð¾Ð»Ñ 57 Date.prototype.toDateInputValue = (function () { 58 var local = new Date(this); 59 local.setMinutes(this.getMinutes() - this.getTimezoneOffset()); 60 return local.toJSON().slice(0, 10); 61 }); 62 // booking_start.val(new Date().toDateInputValue()); 63 // booking_finish.val(new Date(new Date().setDate(new Date().getDate()+1)).toDateInputValue()); 64 65 66 //Range Date Locale 67 window.locale_date = { 68 "format": "DD.MM.YYYY", 69 "separator": " - ", 70 "applyLabel": "ÐÑбÑаÑÑ", 71 "cancelLabel": "ÐакÑÑÑÑ", 72 "fromLabel": "Ðаезд", 73 "toLabel": "ÐÑезд", 74 "customRangeLabel": "Custom", 75 "weekLabel": "Ð", 76 "daysOfWeek": [ 77 "<span style='color:red'>ÐÑ</span>", 78 "Ðн", 79 "ÐÑ", 80 "СÑ", 81 "ЧÑ", 82 "ÐÑ", 83 "<span style='color:red'>Сб</span>" 84 ], 85 "monthNames": [ 86 "ЯнваÑÑ", 87 "ФевÑалÑ", 88 "ÐаÑÑ", 89 "ÐпÑелÑ", 90 "Ðай", 91 "ÐÑнÑ", 92 "ÐÑлÑ", 93 "ÐвгÑÑÑ", 94 "СенÑÑбÑÑ", 95 "ÐкÑÑбÑÑ", 96 "ÐоÑбÑÑ", 97 "ÐекабÑÑ" 98 ], 99 "firstDay": 1 100 }; 101 102 let currentDate = moment().format("DD.MM.YYYY"); 103 let nextDate = moment().add(1, 'days').format("DD.MM.YYYY"); 104 105 booking_start.val(currentDate); 106 booking_finish.val(nextDate); 107 108 $("#booking_start, #booking_finish").daterangepicker({ 109 locale: locale_date, 110 startDate: currentDate, 111 endDate: nextDate, 112 minDate: currentDate, 113 alwaysShowCalendars: true, 114 autoApply: true, 115 autoUpdateInput: false, 116 117 }, function (start, end, label) { 118 // console.log("New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')"); 119 // Lets update the fields manually this event fires on selection of range 120 var selectedStartDate = start.format("DD.MM.YYYY"); // selected start 121 var selectedEndDate = end.format("DD.MM.YYYY"); // selected end 122 123 $checkinInput = $('#booking_start'); 124 $checkoutInput = $('#booking_finish'); 125 126 127 // Updating Fields with selected dates 128 $checkinInput.val(selectedStartDate); 129 $checkoutInput.val(selectedEndDate); 130 131 // Setting the Selection of dates on calender on CHECKOUT FIELD (To get this it must be binded by Ids not Calss) 132 var checkOutPicker = $checkoutInput.data('daterangepicker'); 133 checkOutPicker.setStartDate(selectedStartDate); 134 checkOutPicker.setEndDate(selectedEndDate); 135 136 // Setting the Selection of dates on calender on CHECKIN FIELD (To get this it must be binded by Ids not Calss) 137 var checkInPicker = $checkinInput.data('daterangepicker'); 138 checkInPicker.setStartDate(selectedStartDate); 139 checkInPicker.setEndDate(selectedEndDate); 140 141 });
142 143 $("#booking_start, #booking_finish").on('apply.daterangepicker', function(ev, picker) { 144 console.log(picker.startDate.format('DD.MM.YYYY'), picker.endDate.format('DD.MM.YYYY')); 145 if (picker.startDate.format('DD.MM.YYYY') === picker.endDate.format('DD.MM.YYYY')) { 146 let new_date = moment(picker.startDate).add(1, 'days').format("DD.MM.YYYY"); 147 picker.setEndDate(new_date); 148 $("#booking_finish").val(new_date); 149 } 150 }); 151 152 // РаÑкÑÑÑие вÑпадаÑÑего ÑпиÑка 153 booking_select.on("click", function () { 154 if (!booking_guests_popup.hasClass("active")) { 155 booking_guests_chevron.addClass("active"); 156 booking_guests_popup.addClass("active"); 157 } else { 158 booking_guests_chevron.removeClass("active"); 159 booking_guests_popup.removeClass("active"); 160 } 161 }); 162 163 $("#booking_close_popup").on("click", function () { 164 booking_select.click(); 165 booking_search.click(); 166 }); 167 168 //Ðобавление комнаÑÑ 169 booking_add_room.on("click", function () { 170 if (rooms < 5) { 171 let new_room = booking_room_template.clone(); 172 new_room.addClass("booking_room_" + (++rooms)); 173 new_room.attr("data-room-i", rooms); 174 $(this).before(new_room); 175 new_room.find("legend").html("ÐÐ¾Ð¼ÐµÑ " + rooms); 176 new_room.find("input[name='booking_adults']").attr("name", "room_" + rooms + "_booking_adults"); 177 new_room.find("input[name='booking_childs']").attr("name", "room_" + rooms + "_booking_childs"); 178 } else { 179 booking_add_room.html("Ðе более 5 номеÑов"); 180 booking_add_room.addClass("button_alert"); 181 setTimeout(function () { 182 booking_add_room.removeClass("button_alert"); 183 booking_add_room.html("ÐобавиÑÑ Ð½Ð¾Ð¼ÐµÑ"); 184 }, 3000); 185 } 186 resetResults(); 187 }); 188 189 // Удаление комнаÑÑ 190 $(document).on("click", ".booking_remove_room", function () { 191 $(this).parents(".booking_room").remove(); 192 rooms--; 193 resetResults(); 194 }); 195 196 // Ðобавление гоÑÑÑ 197 $(document).on('click', ".booking_add_adult", function () { 198 let input = $(this).parents(".booking_guests_adults").find("input"); 199 let room_i = $(this).parents(".booking_room").attr("data-room-i"); 200 if ((window.booking_query.rooms[room_i].booking_adults + window.booking_query.rooms[room_i].booking_childs) >= 5) { 201 showLegendAlert($(this)); 202 } else if (window.booking_query.rooms[room_i].booking_adults >= 3) { 203 showLegendAlert($(this), "Ðе более 3 взÑоÑлÑÑ Ð³Ð¾ÑÑей"); 204 } else { 205 input.val(Number(input.val()) + 1); 206 } 207 resetResults(); 208 }) 209 210 // Удаление гоÑÑÑ 211 $(document).on('click', ".booking_remove_adult", function () { 212 let input = $(this).parents(".booking_guests_adults").find("input"); 213 if (Number(input.val()) > 1) { 214 input.val(Number(input.val()) - 1); 215 } 216 resetResults(); 217 }) 218 219 // Ðобавление Ñебенка
220 $(document).on('click', ".booking_add_child", function () { 221 let input = $(this).parents(".booking_guests_childs").find(".booking_childs"); 222 let room_i = $(this).parents(".booking_room").attr("data-room-i"); 223 if ((window.booking_query.rooms[room_i].booking_adults + window.booking_query.rooms[room_i].booking_childs) < 5) { 224 input.val(Number(input.val()) + 1); 225 let new_child = childs_template.clone(); 226 new_child.find("input[type='radio']").attr("name", "room_" + room_i + "_booking_child_age_" + input.val()); 227 $(this).parents(".booking_room").find(".booking_guests_popup_child_wrapper").append(new_child); 228 } else { 229 showLegendAlert($(this)); 230 } 231 resetResults(); 232 233 }) 234 235 // Удаление Ñебенка 236 $(document).on('click', ".booking_remove_child", function () { 237 let input = $(this).parents(".booking_guests_childs").find(".booking_childs"); 238 if (Number(input.val()) > 0) { 239 input.val(Number(input.val()) - 1); 240 } 241 $(this).parents(".booking_guests_popup_static").find(".booking_guests_popup_child:last-child").remove(); 242 resetResults(); 243 }) 244 245 // Удаление конкÑеÑного Ñебенка
246 $(document).on('click', ".booking_remove_child_button", function () { 247 let input = $(this).parents(".booking_guests_popup_static").find(".booking_childs"); 248 if (Number(input.val()) > 0) { 249 input.val(Number(input.val()) - 1); 250 } 251 $(this).parents(".booking_guests_popup_child").remove(); 252 resetResults(); 253 }) 254 255 //TODO: добавиÑÑ Ð¾Ð³ÑаниÑение на добавление ÑÑеÑÑего взÑоÑлого Ñебенка 256 //TODO: в номеÑе Ñ 3 взÑоÑлÑми Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко 1 подÑоÑÑок (добавиÑÑ Ð¾Ð³ÑаниÑение на добавление вÑоÑого взÑоÑлого Ñебенка) 257 //TODO: не более 3 подÑоÑÑков в номеÑе Ñ 1 взÑоÑлÑм 258 259 // ÐлеÑÑ Ð¾ макÑималÑном колиÑеÑÑве Ñеловек 260 function showLegendAlert(item, message = "Ðе более 5 Ñеловек") { 261 let legend = item.parents(".booking_room").find("legend"); 262 263 legend.html(message); 264 legend.addClass("alert"); 265 266 window.legendAlert = undefined; 267 window.legendAlert = function () { 268 legend.html("ÐÐ¾Ð¼ÐµÑ " + item.parents(".booking_room").attr("data-room-i")); 269 legend.removeClass("alert"); 270 } 271 setTimeout(window.legendAlert, 2000); 272 } 273 274 // Ð¡Ð±Ð¾Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ ÑоÑÐ¼Ñ 275 function getQuery() { 276 all_adults = 0; 277 all_childs = 0; 278 279 let booking_array = booking_attache.serializeArray(); 280 281 window.booking_query = { 282 start: booking_start.val(), 283 finish: booking_finish.val(), 284 rooms: [] 285 } 286 287 for (let i = 1; i <= rooms; i++) { 288 let adults = Number(booking_attache.find(`input[name='room_${i}_booking_adults']`).val()); 289 let childs = Number(booking_attache.find(`input[name='room_${i}_booking_childs']`).val()); 290 291 all_adults += adults; 292 all_childs += childs; 293 294 let room = { 295 booking_adults: adults, 296 booking_childs: childs, 297 childs: [] 298 } 299 300 if (childs > 0) { 301 $(`fieldset.booking_room[data-room-i=${i}] select[name=booking_child_age]`).each(function (i, elem) { 302 if ($(elem).val() < 0) { 303 room.childs.push(0); 304 } else { 305 room.childs.push(Number($(elem).val())); 306 } 307 }); 308 } 309 310 window.booking_query.rooms[i] = room; 311 } 312 313 booking_guests_rooms.find("span").html(rooms); 314 booking_guests_guests_adults.find("span").html(all_adults); 315 booking_guests_guests_childs.find("span").html(all_childs); 316 317 if (all_childs > 0) { 318 booking_guests_guests_childs.addClass("active"); 319 } else { 320 booking_guests_guests_childs.removeClass("active"); 321 } 322 323 var urlParams = new URLSearchParams(window.location.search); 324 var roomId = urlParams.get('room'); 325 if (roomId) { 326 window.booking_query.desiredRoom = roomId; 327 } 328 329 330 return window.booking_query; 331 } 332 333 // ÐÑи обновлении ÑоÑм ÑобиÑаем ÑезÑлÑÑаÑÑ, Ð´Ð»Ñ ÑаÑÑÑÑа колиÑеÑÑва гоÑÑей и оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² вÑпадаÑке 334 booking_attache.on("click", function () { 335 setTimeout(getQuery, 100); 336 }); 337 338 339 // ÐоиÑк номеÑов 340 booking_search.on("click", function () { 341 // ÐÑовеÑиÑÑ Ð²Ð¾Ð·ÑаÑÑ Ð´ÐµÑей 342 let child_age_selects = true; 343 $("select[name=booking_child_age]").each(function() { 344 if ($(this).val() === null || $(this).val() === -1 || $(this).val() === "-1") { 345 child_age_selects = false; 346 $(this).addClass("alert"); 347 } 348 }); 349 if (!child_age_selects) { 350 if (!booking_guests_popup.hasClass("active")) booking_select.click(); 351 352 window.ageAlert = undefined; 353 window.ageAlert = function () { 354 $(".booking_child_age").removeClass("alert"); 355 } 356 setTimeout(window.ageAlert, 5000); 357 358 return 0; 359 } 360 361 // ÐакÑÑÑÑ Ð²ÑплÑваÑÐºÑ Ð¿Ñи клике на ÐоиÑк 362 if (booking_guests_popup.hasClass("active")) { 363 booking_guests_chevron.removeClass("active"); 364 booking_guests_popup.removeClass("active"); 365 } 366 367 //Ðалее, еÑли Ð¼Ñ Ð½Ð° главной, Ñо ÑÐ¾Ñ ÑанÑем даннÑе и пеÑеадÑеÑовÑваемÑÑ Ð½Ð° ÑÑÑаниÑÑ ÐÑониÑÐ¾Ð²Ð°Ð½Ð¸Ñ 368 if (window.location.pathname !== "/bronirovanie/") { 369 localStorage.setItem('bookingData', JSON.stringify(getQuery())); 370 window.location.pathname = '/bronirovanie/'; 371 } else { 372 booking_roomer.html(""); 373 booking_roomer.addClass("wait"); 374 $(this).attr("disabled", true); 375 376 ajaxs('\\Attache\\SearchQuery::ajaxs_makeQuery', {json: getQuery()}) 377 .done(function (response) { 378 //console.log(response); 379 booking_roomer.removeClass("wait"); 380 $("#booking_search").attr("disabled", false); 381 }) 382 } 383 384 });
385 386 // ÐоÑÑÑановление даннÑÑ Ñ Ð»Ð¾ÐºÐ°Ð»Ñного Ñ ÑанилиÑа, еÑли пÑиÑли Ñ Ð´ÑÑгой ÑÑÑаниÑÑ 387 let bookingData = JSON.parse(localStorage.getItem('bookingData')); 388 389 if (bookingData) { 390 window.booking_query = bookingData; 391 392 booking_start.val(bookingData.start); 393 booking_finish.val(bookingData.finish); 394 395 // СоздаÑм комнаÑÑ 396 $.each(bookingData.rooms, function(i, elem) { 397 if (i === 0) return 0; 398 if (i !== 1) booking_add_room.click(); 399 400 // Ðобавим взÑоÑлÑÑ 401 $(`input[name=room_${i}_booking_adults]`).val(elem.booking_adults); 402 403 // Ðобавим деÑей 404 if (elem.childs !== undefined) { 405 window.booking_query.rooms[i].booking_childs = 0; 406 $.each(elem.childs, function(j, child) { 407 $(`.booking_room[data-room-i=${i}] .booking_add_child`).click(); 408 $(`.booking_room[data-room-i=${i}] .booking_guests_popup_child:last-child select`).val(child); 409 }) 410 } 411 412 }); 413 414 getQuery(); 415 416 localStorage.removeItem('bookingData'); 417 418 setTimeout($("#booking_search").click(), 200); 419 } 420 421 // ФÑнкÑÐ¸Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¾ днÑÑ Ñ Ð±Ñка 422 window.days = 0; 423 window.setDays = function (days) { 424 window.days = days; 425 } 426 427 // ÐÑÐ±Ð¾Ñ Ñ ÐавÑÑаком и Ðез 428 booking_roomer.on("change", "select[name=booking_room_breakfast]", function () { 429 let current_i = $(this).parents(".booking_select_rooms").attr("data-room-i"); 430 let room_summary = $(`.booking_room_select_summary_${current_i}`); 431 let current = $(this).parents(".booking_room_select"); 432 let breakfast_price = current.attr("data-breakfast-price"); 433 let current_price_sum = current.find(".booking_room_prices .price.price_sum .value"); 434 435 //поÑÑиÑаÑÑ ÑÐµÐ½Ñ Ð·Ð°Ð²ÑÑака 436 let childs_5_10 = window.booking_query.rooms[current_i].childs.filter(number => (number >= 5 && number <= 10)).length; 437 let childs_11_99 = window.booking_query.rooms[current_i].childs.filter(number => (number >= 11 && number <= 99)).length; 438 let breakfast_sum = window.booking_query.rooms[current_i].booking_adults * breakfast_price + childs_5_10 * 600 + childs_11_99 * breakfast_price; 439 440 if ($(this).val() == 1) { 441 if (current.attr("data-breakfast") == 0 || current.attr("data-breakfast") === undefined) { 442 //ÐобавиÑÑ ÑекÑÑ Ð¿Ð¾Ð´ ÑÐµÐ½Ñ Ð² ÑÑÑки 443 current.find(".booking_room_prices").append(`<div class="price breakfast_price"> 444 <span>+ <span class="value" data-value="${breakfast_sum}">${breakfast_sum}</span><span>â½/ÑÑÑки</span></span> 445 </div>`) 446 447 //ÐеÑеÑÑиÑаÑÑ Ð¾Ð±ÑÑÑ ÑÐµÐ½Ñ 448 let final_sum = Number(current_price_sum.attr("data-value")) + breakfast_sum * current.attr("data-days") 449 current_price_sum.attr("data-value", final_sum); 450 current.attr("data-breakfast", 1); 451 updateSummary(); 452 } 453 } else if($(this).val() == 100) { 454 current.find(".rest_closed_alert").css("height", "auto"); 455 } else { 456 current.find(".rest_closed_alert").css("height", "0px"); 457 if (current.attr("data-breakfast") == 1) { 458 let final_sum = Number(current_price_sum.attr("data-value")) - breakfast_sum * current.attr("data-days") 459 current_price_sum.attr("data-value", final_sum); 460 current.attr("data-breakfast", 0); 461 current.find(".breakfast_price").remove(); 462 463 updateSummary(); 464 } 465 } 466 onRenderFuncs(); 467 }); 468 469 // СÑавим check пÑи вÑбоÑе комнаÑÑ 470 booking_roomer.on("click", ".booking_room_button label", function () { 471 if ($(".booking_room_button").attr("disabled") === "disabled") return 0; 472 let input = $(this).find("input"); 473 input.prop('checked', !input.is(":checked")); 474 475 let current = $(this).parents(".booking_room_select"); 476 let current_id = current.attr("data-room-id"); 477 let current_i = $(this).parents(".booking_select_rooms").attr("data-room-i"); 478 let room_summary = $(`.booking_room_select_summary_${current_i}`); 479 let current_config = current.attr("data-room-config"); 480 481 // ÐÑе ÑлеменÑÑ .booking_room_select 482 let all_items = $(this).parents(".booking_select_rooms").find(".booking_room_select"); 483 484 // ÐолÑÑаем ÑледÑÑÑий ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð·Ð° current 485 let next_items = all_items.slice(all_items.index(current) + 1); 486 let next_room_id = null; 487 488 next_items = next_items.filter(function() { 489 let item_room_id = $(this).data("room-id"); 490 if (!next_room_id && item_room_id !== $(current).data("room-id")) { 491 next_room_id = item_room_id; 492 } 493 return item_room_id === next_room_id; 494 }); 495 496 // ÐолÑÑаем вÑе ÑлеменÑÑ, кÑоме current и next_items 497 let other_items = all_items 498 .not(current) 499 .not(next_items); 500 501 console.log("СледÑÑÑий ÑлеменÑ:", next_items); 502 console.log("ÐÑÑалÑнÑе ÑлеменÑÑ:", other_items ); 503 504 if (input.is(":checked")) { 505 current.addClass("selected"); 506 all_items.not(current).removeClass("selected"); 507 all_items.not(current).find("input[name='booking_room_type']").prop('checked', false); 508 if (!current.hasClass("upsale") && current.data("room-id") !== next_items.data("room-id")) { 509 next_items.addClass("upsale"); 510 next_items.slideDown("fast"); 511 } else { 512 next_items.slideUp("fast"); 513 } 514 515 updateSummary(); 516 onRenderFuncs(); 517 518 other_items.slideUp("fast"); 519 } else { 520 current.removeClass("selected"); 521 all_items.find("input[name='booking_room_type']").prop('checked', false); 522 all_items.removeClass("upsale"); 523 updateSummary(); 524 onRenderFuncs(); 525 all_items.slideDown("fast"); 526 } 527 528 });
529 530 //ÐбновлÑÐµÑ ÑÑÐ¼Ð¼Ñ Ð¸ показÑÐ²Ð°ÐµÑ Ð¸Ñог, еÑли вÑбÑÐ°Ð½Ñ Ð²Ñе номеÑа 531 window.updateSummary = () => { 532 console.log("UPDATE"); 533 //ÐÐ±Ñ Ð¾Ð´Ð¸Ð¼ вÑе номеÑа 534 $(".booking_select_rooms").each(function () { 535 let room_selected = false; 536 let rooms_count = $(".booking_select_rooms").length; 537 let current_i = $(this).attr("data-room-i"); 538 //ÐÐ±Ñ Ð¾Ð´Ð¸Ð¼ вÑе ваÑианÑÑ 539 $(this).find(".booking_room_select").each(function () { 540 let room_summary = $(`.booking_room_select_summary_${current_i}`); 541 if ($(this).hasClass("selected")) { 542 room_selected = true; 543 544 //СÑиÑаем ÑÐµÐ½Ñ 545 let room_price_day = Number($(this).find(".price:not(.price_sum, .breakfast_price) span.value").attr("data-value")); 546 let room_price_sum = Number($(this).find(".price.price_sum span.value").attr("data-value")); 547 548 //УÑÑанавливаем ÑÐµÐ½Ñ Ð¿Ð¾Ð´ номеÑами 549 room_summary.find(".booking_room_summary_row.room .value").attr("data-value", room_price_day); 550 room_summary.find(".booking_room_summary_row.booking_room_summary_row_sum .value").attr("data-value", room_price_sum); 551 552 //ÐÑблиÑÑем конÑигÑÑаÑÐ¸Ñ 553 if (room_summary.find(".room_info").find(".booking_room_configuration_type").length < 1) { 554 room_summary.find(".room_info").prepend($(this).find(".booking_room_configuration_type").clone()); 555 } 556 557 let breakfast_div = room_summary.find(".room_info_breakfast"); 558 if ($(this).attr("data-breakfast") === "1") { 559 room_summary.find(".booking_room_summary_row.breakfast .value").attr("data-value", $(this).attr("data-breakfast-price")); 560 room_summary.find(".booking_room_summary_row.breakfast").css("display", "flex"); 561 breakfast_div.show(); 562 } else { 563 room_summary.find(".booking_room_summary_row.breakfast").css("display", "none"); 564 breakfast_div.hide(); 565 } 566 567 if (rooms_count === 1) { 568 $(".booking_room_select_summary_1").find(".room_price").hide(); 569 } else { 570 $(".booking_room_select_summary_1").find(".room_price").show(); 571 } 572 } 573 if (room_selected) { 574 room_summary.css("display", "grid"); 575 } else { 576 room_summary.css("display", "none"); 577 } 578 }); 579 }); 580 581 if ($(".booking_room_select.selected").length === $(".booking_select_rooms").length) { 582 583 $(".booking_order .booking_order_summary .booking_room_summary_row").remove(); 584 585 let sum_row = 0; 586 587 //ÐÑводим ÑÐµÐ½Ñ Ð² обÑий иÑог и плÑÑÑем к иÑÐ¾Ð³Ñ 588 $(".booking_room_select.selected").each(function() { 589 let current_i = $(this).parents(".booking_select_rooms").attr("data-room-i"); 590 let order_sum = Number($(this).find(".price span.value").attr("data-value")); 591 592 $(".booking_order .booking_order_summary").append(` 593 <div class="booking_room_summary_row price"> 594 <span>ÐÐ¾Ð¼ÐµÑ ${current_i}</span><span class="value" data-value="${order_sum}">${order_sum}</span> 595 </div>`); 596 597 sum_row += order_sum; 598 599 }); 600 601 $(".booking_order .booking_order_summary").append(` 602 <div class="booking_room_summary_row booking_room_summary_row_sum price"> 603 <span>ÐÑого</span><span class="value" data-value="${sum_row}">${sum_row}</span> 604 </div>`); 605 606 607 $(".booking_order_title").show(); 608 $(".booking_order").css("display", "grid"); 609 $("input[name=booking_order_phone]").cleave({ phone: true, phoneRegionCode: 'RU', autoUnmask: true}); 610 611 // ÐÑовеÑка на заполненноÑÑÑ Ð¿Ð¾Ð»ÐµÐ¹ 612 // оÑклÑÑаем ÐºÐ½Ð¾Ð¿ÐºÑ Ð¿Ñи иниÑиализаÑии ÑÑÑаниÑÑ 613 $(".booking_order_submit").prop("disabled", true); 614 615 // ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð¿ÑовеÑки валидноÑÑи email 616 function validateEmail(email) { 617 let re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 618 return re.test(String(email).toLowerCase()); 619 } 620 621 // пÑовеÑÑем Ð¿Ð¾Ð»Ñ Ð½Ð° заполненноÑÑÑ Ð¿Ñи вводе даннÑÑ 622 $(".booking_order input[required], .booking_order textarea[required]").on("input, change", function() { 623 let emptyFields = $(".booking_order input[required], .booking_order textarea[required]").filter(function() { 624 // пÑовеÑÑем пÑÑÑое ли поле и валиден ли email 625 console.log($(this).val()); 626 return $.trim($(this).val()) === "" || 627 ($(this).attr("type") === "checkbox" && !$(this).is(":checked")) || 628 ($(this).attr("type") === "email" && !validateEmail($(this).val())); 629 }); 630 631 // еÑли вÑе обÑзаÑелÑнÑе Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð¸ email валиден, Ñо ÑазÑеÑаем кнопкÑ, инаÑе оÑклÑÑаем 632 if(emptyFields.length === 0) { 633 $(".booking_order_submit").prop("disabled", false); 634 } else { 635 $(".booking_order_submit").prop("disabled", true); 636 } 637 }); 638 } else { 639 $(".booking_order_title").hide(); 640 $(".booking_order").hide(); 641 } 642 } 643 644 window.onRenderFuncs = () => { 645 // ФоÑÐ¼Ð°Ñ Ñен 646 $(".booking_roomer .price > span.value").each(function () { 647 $(this).html(Number($(this).attr("data-value")).toLocaleStr
647ing('ru')); 648 }); 649 650 $("input[name=booking_order_pay],[name=booking_order_online]").on("change", function () { 651 if ($(this).attr("name") === "booking_order_pay") { 652 $("input[name=booking_order_online]").click(); 653 } else { 654 $("input[name=booking_order_pay]").click(); 655 } 656 }); 657 } 658 659 660 661 let booking_order_form = $(".booking_order_form"); 662 //ÐеÑеменнÑе Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð° 663 window.order_query = []; 664 window.order_query.rooms = []; 665 window.order_query.form = []; 666 667 // Ð¡Ð±Ð¾Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ Ð±ÑониÑÐ¾Ð²Ð°Ð½Ð¸Ñ 668 function getOrderQuery() { 669 670 order_query.form = { 671 "name": $("input[name=name]").val(), 672 "phone": $("input[name=phone]").val(), 673 "email": $("input[name=email]").val(), 674 "comment": $("textarea[name=comment]").val(), 675 "online": $("input[name=booking_order_online]").val(), 676 "price": $(".booking_order_summary").find(".booking_room_summary_row_sum span.value").attr("data-value"), 677 } 678 679 $.each(booking_query.rooms, function(i, elem) { 680 if (i === 0) return; 681 let room_selected = $(`.booking_select_rooms[data-room-i=${i}]`).find(`.booking_room_select.selected`); 682 let local_room = { 683 "date_start": booking_query.start, 684 "date_finish": booking_query.finish, 685 "room_type": room_selected.attr("data-room-id"), 686 "adult_guests": booking_query.rooms[i].booking_adults, 687 "child_guests": booking_query.rooms[i].booking_childs, 688 "childs": booking_query.rooms[i].childs, 689 "breakfast": room_selected.attr("data-breakfast"), 690 "configuration": room_selected.attr("data-room-config-bed"), 691 "price_day": room_selected.find(".price:not(.price_sum, .breakfast_price) span.value").attr("data-value"), 692 "price_sum": room_selected.find(".price.price_sum span.value").attr("data-value"), 693 }; 694 695 order_query.rooms.push(local_room); 696 }); 697 698 return order_query; 699 } 700 701 // ÐÑпÑавка бÑониÑÐ¾Ð²Ð°Ð½Ð¸Ñ 702 booking_roomer.on("click", ".booking_order_submit", function () { 703 getOrderQuery(); 704 705 $(this).attr("disabled", true); 706 $(".booking_room_button").attr("disabled", true); 707 $("input[name=booking_room_type]").attr("disabled", true); 708 709 booking_roomer.append(`<div class='booking_success wait'></div>`); 710 711 ajaxs('\\Attache\\OrderReservation::ajaxs_addOrderReservation', {"form": order_query.form, "rooms": order_query.rooms}) 712 .done(function (response) { 713 booking_roomer.find(".booking_success").removeClass("wait"); 714 booking_roomer.find(".booking_success").html("<div>ÐÐ¾Ð¼ÐµÑ ÑÑпеÑно забÑониÑован!</div><div>ÐодÑвеÑждение бÑониÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑпÑавлено на ÑказаннÑй Ðами ÑлекÑÑоннÑй адÑеÑ.</div>"); 715 let target = $(".booking_success").offset().top; 716 717 ym(7615612,'reachGoal','bronirovanie'); 718 719 $('html, body').animate({ 720 scrollTop: target 721 }, 1000); 722 //$("#booking_search").attr("disabled", false); 723 }) 724 725 }); 726 727 728 // ÐаÑка Ð´Ð»Ñ ÑелеÑона 729 730 731}); 732 733// Cleave 734(function($, window, undefined){ 'use strict' 735 736 $.fn.cleave = function(opts) { 737 738 var defaults = {autoUnmask: false}, 739 options = $.extend(defaults, opts || {}); 740 741 return this.each(function(){ 742 743 var $this = $(this), cleave = new Cleave($this.first(), options); 744 745 $this.data('cleave-auto-unmask', options['autoUnmask']);; 746 $this.data('cleave',cleave) 747 }); 748 } 749 750 var origGetHook, origSetHook; 751 752 if ($.valHooks.input) { 753 754 origGetHook = $.valHooks.input.get; 755 origSetHook = $.valHooks.input.set; 756 757 } else { 758 759 $.valHooks.input = {}; 760 } 761 762 $.valHooks.input.get = function (el) { 763 764 var $el = $(el), cleave = $el.data('cleave'); 765 766 if( cleave ) { 767 768 return $el.data('cleave-auto-unmask') ? cleave.getRawValue() : el.value; 769 770 } else if( origGetHook ) { 771 772 return origGetHook(el); 773 774 } else { 775 776 return undefined; 777 } 778 } 779 780 $.valHooks.input.set = function (el,val) { 781 782 var $el = $(el), cleave = $el.data('cleave'); 783 784 if( cleave ) { 785 786 cleave.setRawValue(val); 787 return $el; 788 789 } else if( origSetHook ) { 790 791 return origSetHook(el); 792 793 } else { 794 return undefined; 795 } 796 } 797})(jQuery, window);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.