1jQuery(document).ready(function ($) { 2 let today = new Date(); 3 let tomorrow = new Date(); 4 tomorrow.setDate(tomorrow.getDate() + 1); 5 6 function datepickerExtraHtml() { 7 $('.gd-datepicker-select-dates').remove(); 8 $('.datepicker__inner').append('<div class="gd-datepicker-select-dates">Select dates</div>'); 9 } 10 11 //datepicker 12 datepicker_options = { 13 format: 'DD-MM-YYYY', 14 infoFormat: 'ddd D MMM', 15 autoClose: false, 16 onOpenDatepicker: function () { 17 $('#guests-options').removeClass('active'); 18 }, 19 onSelectRange: function () { 20 $('.gd-datepicker-select-dates').addClass('active'); 21 } 22 }; 23 24 let bookingForm = $('form[name="booking_form"]'), 25 datePicker = document.querySelector('.date-picker input'), 26 datePickerInput = $('.hotel-date-picker'), 27 datePickerDefaultValue = 'Check In · Check Out', 28 hotelDatePicker = new HotelDatepicker(datePicker, datepicker_options), 29 checkIn = $('input[name="arrival"]'), 30 hotelId = $('input[name="hotel"]'), 31 city = $('input[name="city"]'), 32 nights = $('input[name="nights"]'), 33 hotelSelector = $('select.hotel-selector'), 34 roomsSelector = $('select[name="rooms"]'); 35 36 roomsSelector.on('change', function () { 37 roomsSelected = $(this).find(':selected').data('rooms'); 38 39 if (roomsSelected > 1) { 40 $('#guests-options').addClass('has-many'); 41 } else { 42 $('#guests-options').removeClass('has-many'); 43 } 44 45 $('.room').hide().removeClass('selected'); 46 47 if (roomsSelected == 1) { 48 $('#room-1').show().addClass('selected'); 49 } else if (roomsSelected == 2) { 50 $('#room-1').show().addClass('selected'); 51 $('#room-2').show().addClass('selected'); 52 } else if (roomsSelected == 3) { 53 $('#room-1').show().addClass('selected'); 54 $('#room-2').show().addClass('selected'); 55 $('#room-3').show().addClass('selected'); 56 } else if (roomsSelected == 4) { 57 $('#room-1').show().addClass('selected'); 58 $('#room-2').show().addClass('selected'); 59 $('#room-3').show().addClass('selected'); 60 $('#room-4').show().addClass('selected'); 61 } else if (roomsSelected == 5) { 62 $('#room-1').show().addClass('selected'); 63 $('#room-2').show().addClass('selected'); 64 $('#room-3').show().addClass('selected'); 65 $('#room-4').show().addClass('selected'); 66 $('#room-5').show().addClass('selected'); 67 } 68 }); 69 70 hotelSelector.on('change', function () { 71 hotelDatePicker.destroy(); 72 73 let tmpHotelId = $(this).find(':selected').data('hotel-id'); 74 75 /* the mont */ 76 if (tmpHotelId == 70002) { 77 mont_datepicker_options = { 78 format: 'DD-MM-YYYY', 79 infoFormat: 'ddd D MMM', 80 startDate: '02-08-2019', 81 autoClose: false, 82 onOpenDatepicker: function () { 83 $('#guests-options').removeClass('active'); 84 }, 85 onSelectRange: function () { 86 $('.gd-datepicker-select-dates').addClass('active'); 87 } 88 }; 89 90 hotelDatePicker = new HotelDatepicker(datePicker, mont_datepicker_options); 91 } else { 92 hotelDatePicker = new HotelDatepicker(datePicker, datepicker_options); 93 } 94 95 datepickerExtraHtml(); 96 }); 97 98 datepickerExtraHtml(); 99 100 bookingForm.on('submit', function (e) { 101 e.preventDefault(); 102 103 findRoom(); 104 }); 105 106 function findRoom() { 107 // Synxis branch â The Eliott (blog 7). Form is marked with data-engine="synxis" 108 // and uses different param names (arrive/depart/adult/child instead of 109 // arrival/nights/adults[]/children[]). See lib_booking.php for the form markup. 110 if (bookingForm.data('engine') === 'synxis') { 111 let nightsSelected = hotelDatePicker.getNights(); 112 if (nightsSelected === 0) { 113 nightsSelected = 1; 114 } 115 116 let arriveDate; 117 if (datePickerInput.val() !== datePickerDefaultValue) { 118 let raw = datePickerInput.val().slice(0, 10); 119 arriveDate = fecha.parse(raw, 'DD-MM-YYYY'); 120 } else { 121 arriveDate = new Date(); 122 } 123 124 let departDate = new Date(arriveDate); 125 departDate.setDate(arriveDate.getDate() + nightsSelected); 126 127 // Validate â¤365 days before mutating the form 128 const diffTime = Math.abs(arriveDate - new Date()); 129 const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); 130 if (diffDays > 364) { 131 alert('Please choose a different check-in date within 365 days of todayâs date to book.'); 132 return; 133 } 134 135 $('input[name="arrive"]').val(fecha.format(arriveDate, 'YYYY-MM-DD')); 136 $('input[name="depart"]').val(fecha.format(departDate, 'YYYY-MM-DD')); 137 138 let totalAdults = 0, totalChildren = 0; 139 $('.rooms-wrapper .room.selected').each(function () { 140 totalAdults += +$(this).find('select[name^="adults"]').val(); 141 totalChildren += +$(this).find('select[name^="children"]').val(); 142 }); 143 $('input[name="adult"]').val(totalAdults || 2); 144 $('input[name="child"]').val(totalChildren || 0); 145 146 // Promo code â Synxis "promo" param. Empty values disabled so the 147 // URL stays clean. 148 let codeInput = $('input[name="code"], input[name="promo"]'); 149 if (codeInput.length) { 150 if (codeInput.val()) { 151 codeInput.attr('name', 'promo'); 152 } else { 153 codeInput.prop('disabled', true); 154 } 155 } 156 157 // Strip helper selects (adults[1]/children[1]) from the GET URL 158 $('.booking-form select[name^="adults"], .booking-form select[name^="children"]').prop('disabled', true); 159 160 bookingForm[0].submit(); 161 return; 162 } 163 164 //get selected stuff 165 citySelected = hotelSelector.find(':selected').data('city-id'); 166 hotelIdSelected = hotelSelector.find(':selected').data('hotel-id'); 167 bookingUrlSelected = hotelSelector.find(':selected').data('booking-url'); 168 nightsSelected = hotelDatePicker.getNights(); 169 checkOutDate = new Date(); 170 171 if (nightsSelected === 0) { 172 //fallback if no dates selected 173 nightsSelected = 1; 174 } 175 176 //set selected stuff if hotel select is present 177 if (hotelSelector.length) { 178 bookingForm.attr('action', bookingUrlSelected); 179 hotelId.val(hotelIdSelected); 180 city.val(citySelected); 181 } 182 nights.val(nightsSelected); 183 184 //set the dates 185 if (datePickerInput.val() === datePickerDefaultValue) { 186 187 } else { 188 //get dates and slice only check in date 189 checkInDate = datePickerInput.val().slice(0, 10); 190 //format check in date 191 checkInDate = fecha.parse(checkInDate, 'DD-MM-YYYY'); 192 checkInDate = fecha.format(checkInDate, 'YYYY-MM-DD'); 193 //set check in date 194 checkIn.val(checkInDate); 195 } 196 197 if (typeof variable == 'undefined') { 198 checkInDate = fecha.format(new Date(), 'YYYY-MM-DD'); 199 } 200 201 //calculate total no of adults and children 202 var adults = 0, 203 children = 0; 204 205 $('.rooms-wrapper .room').each(function () { 206 if ($(this).hasClass('selected')) { 207 //sum adults and children 208 adults += +$(this).find(('select[name^="adults"]')).val(); 209 children += +$(this).find(('select[name^="children"]')).val(); 210 } 211 }); 212 213 Cookies.remove('gdBookingPreference'); 214 215 //save user booking preference 216 /* 217 Cookies.set('gdBookingPreference', { 218 prefHotelId: hotelIdSelected, 219 prefNights: nightsSelected, 220 prefCheckIn: $('form[name="booking_form"] input[name="arrival"]').val(), 221 prefRooms: $('form[name="booking_form"] select[name="rooms"]').val(), 222 prefRoom1Adults: $('form[name="booking_form"] select[name="adults[1]"]').val(), 223 prefRoom1Children: $('form[name="booking_form"] select[name="children[1]"]').val(), 224 prefRoom2Adults: $('form[name="booking_form"] select[name="adults[2]"]').val(), 225 prefRoom2Children: $('form[name="booking_form"] select[name="children[2]"]').val(), 226 prefRoom3Adults: $('form[name="booking_form"] select[name="adults[3]"]').val(), 227 prefRoom3Children: $('form[name="booking_form"] select[name="children[3]"]').val(), 228 prefRoom4Adults: $('form[name="booking_form"] select[name="adults[4]"]').val(), 229 prefRoom4Children: $('form[name="booking_form"] select[name="children[4]"]').val(), 230 prefRoom5Adults: $('form[name="booking_form"] select[name="adults[5]"]').val(), 231 prefRoom5Children: $('form[name="booking_form"] select[name="children[5]"]').val(), 232 prefTotalAdults: adults, 233 prefTotalChildren: children, 234 prefCode: $('form[name="booking_form"] input[name="code"]').val() 235 }); 236 */ 237 238 239 //prevent booking > 365 days 240 const date1 = new Date(); 241 const date2 = new Date(checkIn.val()); 242 const diffTime = Math.abs(date2 - date1); 243 const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); 244 245 if (diffDays > 364) { 246 alert('Please choose a different check-in date within 365 days of todayâs date to book.'); 247 } else { 248 bookingForm[0].submit(); 249 } 250 } 251
252 $(document).on('click', '.gd-datepicker-select-dates', function () { 253 $('.datepicker__close-button').click(); 254 }); 255 256 datePickerInput.val(datePickerDefaultValue); 257 258 //guests options 259 $('.guests').on('click', function () { 260 $('#guests-options').toggleClass('active'); 261 $('.section-herobooking .gd-arrow').hide(); 262 }); 263 264 $('#guests-options .confirm .button').on('click', function () { 265 $('#guests-options').removeClass('active'); 266 267 var rooms = $('select[name="rooms"]').val(); 268 269 //update labels 270 $('.rooms-no-label').html(rooms); 271 272 if (rooms > 1) { 273 $('.rooms-label-text').html('rooms'); 274 } else { 275 $('.rooms-label-text').html('room'); 276 } 277 278 var adults = 0, 279 children = 0; 280 281 $('.rooms-wrapper .room').each(function () { 282 if ($(this).hasClass('selected')) { 283 //sum adults and children 284 adults += +$(this).find(('select[name^="adults"]')).val(); 285 children += +$(this).find(('select[name^="children"]')).val(); 286 } 287 }); 288 289 $('.adults-no-label').html(adults); 290 $('.children-no-label').html(children); 291 292 if (adults > 1) { 293 $('.adults-label-text').html('adults'); 294 } else { 295 $('.adults-label-text').html('adult'); 296 } 297 298 if (children > 1) { 299 $('.children-label-text').html('children'); 300 } else { 301 $('.children-label-text').html('child'); 302 } 303 }); 304 305 $('input[name="code"]').on('click', function () { 306 $('#guests-options').removeClass('active'); 307 }); 308 309 if (isMobile && screen.width < 990) { 310 $("#hero-booking").prependTo('#booking-form-wrapper-mobile'); 311 } 312 313 //GA utm tags ?utm_campaign=test&utm_source=test&utm_medium=test 314 var getUrlParameter = function getUrlParameter(sParam) { 315 var sPageURL = decodeURIComponent(window.location.search.substring(1)), 316 sURLVariables = sPageURL.split('&'), 317 sParameterName, 318 i; 319 320 for (i = 0; i < sURLVariables.length; i++) { 321 sParameterName = sURLVariables[i].split('='); 322 323 if (sParameterName[0] === sParam) { 324 return sParameterName[1] === undefined ? true : sParameterName[1]; 325 } 326 } 327 }; 328 329 let gd_utm_campaign = getUrlParameter('utm_campaign'), 330 gd_utm_source = getUrlParameter('utm_source'), 331 gd_utm_medium = getUrlParameter('utm_medium'); 332 333 if (gd_utm_campaign) { 334 $('input[name=utm_campaign]').val(gd_utm_campaign).prop("disabled", false); 335 } else if (Cookies.get('utm_campaign')) { 336 $('input[name=utm_campaign]').val(Cookies.get("utm_campaign")).prop("disabled", false); 337 } 338 339 if (gd_utm_source) { 340 $('input[name=utm_source]').val(gd_utm_source).prop("disabled", false); 341 } else if (Cookies.get('utm_source')) { 342 $('input[name=utm_source]').val(Cookies.get("utm_source")).prop("disabled", false); 343 } 344 345 if (gd_utm_medium) { 346 $('input[name=utm_medium]').val(gd_utm_medium).prop("disabled", false); 347 } else if (Cookies.get('utm_medium')) { 348 $('input[name=utm_medium]').val(Cookies.get("utm_medium")).prop("disabled", false); 349 } 350 351 function loadBookingPreferences() { 352 if (Cookies.get('gdBookingPreference')) { 353 bookingPref = Cookies.getJSON('gdBookingPreference'); 354 355 //set hotel 356 if (bookingPref.prefHotelId) { 357 $('select.hotel-selector option[data-hotel-id="' + bookingPref.prefHotelId + '"]').prop('selected', true); 358 } 359 360 //set dates 361 let checkInDate = new Date(bookingPref.prefCheckIn), 362 checkOutDate = new Date(checkInDate); 363 364 checkOutDate.setDate(checkInDate.getDate() + bookingPref.prefNights); 365 366 //update date picker calendar 367 hotelDatePicker.setRange(fecha.format(checkInDate, 'DD-MM-YYYY'), fecha.format(checkOutDate, 'DD-MM-YYYY')); 368 369 $('form.booking-form input[name="arrival"]').val(fecha.format(checkInDate, 'YYYY-MM-DD')); 370 $('form.booking-form input[name="nights"]').val(bookingPref.prefNights); 371 372 //set total number of adults 373 if (bookingPref.prefTotalAdults) { 374 $('.adults-no-label').html(bookingPref.prefTotalAdults); 375 376 if (bookingPref.prefTotalAdults > 1) { 377 $('.adults-label-text').html('adults'); 378 } else { 379 $('.adults-label-text').html('adult'); 380 } 381 } 382 383 //set number of rooms 384 if (bookingPref.prefRooms) { 385 $('.rooms-no-label').html(bookingPref.prefRooms); 386 387 if (bookingPref.prefRooms > 1) { 388 $('.rooms-label-text').html('rooms'); 389 } else { 390 $('.rooms-label-text').html('room'); 391 } 392 } 393 394 //set total number of children 395 if (bookingPref.prefTotalChildren) { 396 $('.children-no-label').html(bookingPref.prefTotalChildren); 397 398 if (bookingPref.prefTotalChildren > 1) { 399 $('.children-label-text').html('children'); 400 } else { 401 $('.children-label-text').html('child'); 402 } 403 } 404 405 if (bookingPref.prefRooms > 1) { 406 $('#guests-options').addClass('has-many'); 407 } 408 409 //show rooms 410 if (bookingPref.prefRooms == 2) { 411 $('#room-2').show().addClass('selected'); 412 } else if (bookingPref.prefRooms == 3) { 413 $('#room-2').show().addClass('selected'); 414 $('#room-3').show().addClass('selected'); 415 } else if (bookingPref.prefRooms == 4) { 416 $('#room-2').show().addClass('selected'); 417 $('#room-3').show().addClass('selected'); 418 $('#room-4').show().addClass('selected'); 419 } else if (bookingPref.prefRooms == 5) { 420 $('#room-2').show().addClass('selected'); 421 $('#room-3').show().addClass('selected'); 422 $('#room-4').show().addClass('selected'); 423 $('#room-5').show().addClass('selected'); 424 } 425 426 //set number of rooms 427 if (bookingPref.prefRooms) { 428 $('select[name="rooms"] option[data-rooms="' + bookingPref.prefRooms + '"]').prop('selected', true); 429 } 430 431 //set room 1 adults 432 if (bookingPref.prefRoom1Adults) { 433 $('form.booking-form select[name="adults[1]"] option[data-adults="' + bookingPref.prefRoom1Adults + '"]').prop('selected', true); 434 } 435 //set room 1 children 436 if (bookingPref.prefRoom1Children) { 437 $('form.booking-form select[name="children[1]"] option[data-children="' + bookingPref.prefRoom1Children + '"]').prop('selected', true); 438 } 439 440 //set room 2 adults 441 if (bookingPref.prefRoom2Adults) { 442 $('form.booking-form select[name="adults[2]"] option[data-adults="' + bookingPref.prefRoom2Adults + '"]').prop('selected', true); 443 } 444 //set room 2 children 445 if (bookingPref.prefRoom2Children) { 446 $('form.booking-form select[name="children[2]"] option[data-children="' + bookingPref.prefRoom2Children + '"]').prop('selected', true); 447 } 448 449 //set room 3 adults 450 if (bookingPref.prefRoom3Adults) { 451 $('form.booking-form select[name="adults[3]"] option[data-adults="' + bookingPref.prefRoom3Adults + '"]').prop('selected', true); 452 } 453 //set room 3 children 454 if (bookingPref.prefRoom3Children) { 455 $('form.booking-form select[name="children[3]"] option[data-children="' + bookingPref.prefRoom3Children + '"]').prop('selected', true); 456 } 457 458 //set room 4 adults 459 if (bookingPref.prefRoom4Adults) { 460 $('form.booking-form select[name="adults[4]"] option[data-adults="' + bookingPref.prefRoom4Adults + '"]').prop('selected', true); 461 } 462 //set room 4 children 463 if (bookingPref.prefRoom4Children) { 464 $('form.booking-form select[name="children[4]"] option[data-children="' + bookingPref.prefRoom4Children + '"]').prop('selected', true); 465 } 466 467 //set room 5 adults 468 if (bookingPref.prefRoom4Adults) { 469 $('form.booking-form select[name="adults[5]"] option[data-adults="' + bookingPref.prefRoom5Adults + '"]').prop('selected', true); 470 } 471 //set room 5 children 472 if (bookingPref.prefRoom4Children) { 473 $('form.booking-form select[name="children[5]"] option[data-children="' + bookingPref.prefRoom5Children + '"]').prop('selected', true); 474 } 475 476 //set code 477 if (bookingPref.prefCode) { 478 $('form.booking-form input[name="code"]').val(bookingPref.prefCode); 479 } 480 } 481 } 482 483 //loadBookingPreferences(); 484 485 $('#code-trigger').on('click', function () { 486 $('input[name="code"]').toggleClass('is-visible'); 487 }); 488});
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.