PageSourceSearch

https://www.ocallaghancollection.com/wp-content/themes/ocallaghancollection2018/js/booking.js?ver=202605141

js ocallaghancollection.com collected 2026-10-02 19:20:05 UTC 16,073 bytes, 488 lines download raw bytes

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.