PageSourceSearch

https://yogoinn.com/wp-content/plugins/gdlr-hostel/gdlr-hotel.js?ver=1.0.0

js yogoinn.com collected 2026-10-08 05:55:13 UTC 22,011 bytes, 609 lines download raw bytes

1(function($){
2	"use strict";
3
4	window.gdlr_debounce_function = function(func, threshold, execAsap){
5		
6		var timeout;
7
8		return function debounced(){
9			
10			var obj = this, args = arguments;
11			
12			function delayed(){
13				if( !execAsap ){
14					func.apply(obj, args);
15				}
16				timeout = null;
17			};
18
19			if( timeout ){
20				clearTimeout(timeout);
21			}else if( execAsap ){
22				func.apply(obj, args);
23			}
24			timeout = setTimeout(delayed, threshold);
25		};
26	}	
27	
28	$.fn.gdlr_datepicker_range = function(){
29		var block_date_val = $(this).attr('data-block');
30		var gdlr_dfm = ($(this).attr('data-dfm'))? $(this).attr('data-dfm'): "yy-mm-dd"; 
31		
32		var min_date = 0;
33		if( $(this).attr('data-current-date') ){
34			min_date = new Date($(this).attr('data-current-date') + 'T00:00:00+00:00');
35		}
36
37		$(this).datepicker({
38			minDate: min_date,
39			dateFormat : gdlr_dfm,
40			numberOfMonths: [1, 2],
41			beforeShowDay: function(date) {
42				if( block_date_val ){
43					var block_date = JSON.parse(block_date_val);
44					var current_date = $.datepicker.formatDate('yy-mm-dd', date);
45
46					if( block_date.indexOf(current_date) > -1 ){
47						return [false];
48					}
49				}
50
51				var date1 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-in").siblings('.gdlr-datepicker-alt').val());
52				var date2 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val());
53				return [true, date1 && ((date.getTime() == date1.getTime()) || (date2 && date >= date1 && date <= date2)) ? "dp-highlight" : ""];
54			},
55			onSelect: function(dateText, inst) {
56				var date1 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-in").siblings('.gdlr-datepicker-alt').val());
57				var date2 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val());
58				if (!date1 || date2) {
59					$("#gdlr-check-in").datepicker('setDate', dateText);
60					$("#gdlr-check-out").val('');
61					$("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val('');
62				} else {
63					$("#gdlr-check-out").datepicker('setDate', dateText).trigger('change');
64				}
65			},
66			closeText: objectL10n.closeText,
67			currentText: objectL10n.currentText,
68			monthNames: objectL10n.monthNames,
69			monthNamesShort: objectL10n.monthNamesShort,
70			dayNames: objectL10n.dayNames,
71			dayNamesShort: objectL10n.dayNamesShort,
72			dayNamesMin: objectL10n.dayNamesMin,
73			firstDay: objectL10n.firstDay
74		});	
75	}
76	
77	$.fn.gdlr_datepicker = function(){
78		$(this).each(function(){
79			var block_date_val = $(this).attr('data-block');
80
81			var min_date = 0;
82			if( $(this).attr('data-current-date') ){
83				min_date = new Date($(this).attr('data-current-date') + 'T00:00:00+00:00');
84			}
85
86			$(this).datepicker({
87				dateFormat : ($(this).attr('data-dfm'))? $(this).attr('data-dfm'): "yy-mm-dd",
88				minDate: min_date,
89				beforeShowDay: function(date){
90					if( block_date_val ){
91						var block_date = JSON.parse(block_date_val);
92						var current_date = $.datepicker.formatDate('yy-mm-dd', date);
93						return [block_date.indexOf(current_date) == -1];
94					}
95					
96					return [true];
97				},
98				altField: $(this).siblings('.gdlr-datepicker-alt'),
99				altFormat: "yy-mm-dd",
100				changeMonth: true,
101				changeYear: true,
102				onSelect: function(dateText, inst){
103					$(this).trigger('change');
104					$('#gdlr-datepicker-range').datepicker('refresh');
105				},
106				closeText: objectL10n.closeText,
107				currentText: objectL10n.currentText,
108				monthNames: objectL10n.monthNames,
109				monthNamesShort: objectL10n.monthNamesShort,
110				dayNames: objectL10n.dayNames,
111				dayNamesShort: objectL10n.dayNamesShort,
112				dayNamesMin: objectL10n.dayNamesMin,
113				firstDay: objectL10n.firstDay
114			});		
115			
116			var current_date = new Date($(this).val() + 'T00:00:00+00:00');
117			current_date = new Date(current_date.getTime() + (current_date.getTimezoneOffset() * 60000));
118			
119			$(this).datepicker('setDate', current_date);
120		});
121		
122		// verify the checkin out date
123		var tmp_chkin = $(this).filter("#gdlr-check-in").siblings('.gdlr-datepicker-alt').val();
124		var tmp_chkout = $(this).filter("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val();
125		
126		if( tmp_chkin == tmp_chkout ){
127			var tmp_chkout_date = new Date(tmp_chkin + 'T00:00:00Z');
128			tmp_chkout_date.setDate(tmp_chkout_date.getDate() + 1);
129			
130			$(this).filter("#gdlr-check-out").datepicker('setDate', tmp_chkout_date);
131		}
132		
133	}
134
135	$.fn.gdlr_single_booking = function(){
136			
137		var resv_bar = $(this);	
138		$(this).find('.gdlr-datepicker').gdlr_datepicker(); 
139		
140		// check in date and night num change
141		$(this).on('change', '#gdlr-night, #gdlr-check-in', function(){
142			var check_in = resv_bar.find('#gdlr-check-in');
143			var check_out = resv_bar.find('#gdlr-check-out');
144			
145			var min_night = check_out.attr('data-min-night');
146			min_night = (min_night)? parseInt(min_night): 1;
147			var night_num = resv_bar.find('#gdlr-night');
148
149			if( check_in.val() ){
150				var check_out_date = check_in.datepicker('getDate', '+1d'); 
151				check_out_date.setDate(check_out_date.getDate() + parseInt(night_num.val()));
152
153				var check_out_min = check_in.datepicker('getDate', '+1d'); 
154				check_out_min.setDate(check_out_min.getDate() + min_night);
155
156				check_out.datepicker('option', 'minDate', check_out_min);
157				check_out.datepicker('setDate', check_out_date);
158			}
159		});
160		
161		// check out date change
162		$(this).on('change', '#gdlr-check-out', function(){
163			var check_in = resv_bar.find('#gdlr-check-in').datepicker('getDate');
164			var check_out = $(this).datepicker('getDate');
165			var date_diff = Math.round((check_out - check_in) / 86400000); // 1000/60/60/24
166			
167			if( check_in && date_diff > 0 ){
168				var night_num = resv_bar.find('#gdlr-night');
169				if( night_num.children('option[value="' + date_diff + '"]').length == 0 ){
170					night_num.append('<option value="' + date_diff + '" >' + date_diff + '</option>')
171				}
172				$('#gdlr-night').val(date_diff);
173			}
174		});
175
176		// amount change
177		$(this).on('change', '#gdlr-room-number', function(){
178			var amount = parseInt($(this).val());
179			var resv_room = resv_bar.find('#gdlr-reservation-people-amount-wrapper');
180			var room_diff = amount - resv_room.children().length;
181			if( room_diff > 0 ){
182				for( var i=0; i<room_diff; i++ ){
183					var new_room = resv_room.children(':first-child').clone().hide();
184					new_room.find('.gdlr-reservation-people-title span').html(resv_room.children().length + 1);
185					new_room.appendTo(resv_room).slideDown(200);
186				}
187			}else if( room_diff < 0 ){
188				resv_room.children().slice(room_diff).slideUp(200, function(){
189					$(this).remove();
190				});
191			}
192		});	
193
194		$(this).submit(function(){
195			if( $(this).find('select[name=gdlr-hotel-branches]').val() == '' ){
196				$(this).find('#please-select-branches').slideDown();
197				return false;
198			}
199		});
200	}
201	
202	$.fn.gdlr_hotel_booking = function(){
203
204		var area = {
205			wrapper: $(this),
206			resv_bar: $(this).find('#gdlr-reservation-bar'),
207			room_form: $(this).find('#gdlr-reservation-bar-room-form'),
208			date_form: $(this).find('#gdlr-reservation-bar-date-form'),
209			summary_form: $(this).find('#gdlr-reservation-bar-summary-form'),
210			service_form: $(this).find('#gdlr-reservation-bar-service-form'),
211			
212			proc_bar: $(this).find('#gdlr-booking-process-bar'),
213			content_area: $(this).find('#gdlr-booking-content-inner'),
214			
215		};
216		
217		var resv_bar = {
218			init: function(){
219				
220				// check in date and night num change
221				area.resv_bar.on('change', '#gdlr-night, #gdlr-check-in', function(){
222					var check_in = area.resv_bar.find('#gdlr-check-in');
223					var check_out = area.resv_bar.find('#gdlr-check-out');
224
225					var min_night = check_out.attr('data-min-night');
226					min_night = (min_night)? parseInt(min_night): 1;
227					var night_num = area.resv_bar.find('#gdlr-night');
228					
229					if( check_in.val() ){
230						var check_out_date = check_in.datepicker('getDate', '+1d'); 
231						check_out_date.setDate(check_out_date.getDate() + parseInt(night_num.val()));
232						
233						var check_out_min = check_in.datepicker('getDate', '+1d'); 
234						check_out_min.setDate(check_out_min.getDate() + min_night);
235						
236						check_out.datepicker('option', 'minDate', check_out_min);
237						check_out.datepicker('setDate', check_out_date);
238
239						$('#gdlr-datepicker-range').datepicker('refresh');
240					}
241				});
242				
243				// check out date change
244				area.resv_bar.on('change', '#gdlr-check-out', function(){
245					var check_in = area.resv_bar.find('#gdlr-check-in').datepicker('getDate');
246					var check_out = $(this).datepicker('getDate');
247					var date_diff =  Math.round((check_out - check_in) / 86400000); // 1000/60/60/24
248					
249					if( check_in && date_diff > 0 ){
250						var night_num = area.resv_bar.find('#gdlr-night');
251						if( night_num.children('option[value="' + date_diff + '"]').length == 0 ){
252							night_num.append('<option value="' + date_diff + '" >' + date_diff + '</option>')
253						}
254						$('#gdlr-night').val(date_diff);
255					}
256				});
257				
258				// amount change
259				area.resv_bar.on('change', '#gdlr-room-number', function(){
260					var amount = parseInt($(this).val());
261					var resv_room = area.resv_bar.find('#gdlr-reservation-people-amount-wrapper');
262					var room_diff = amount - resv_room.children().length;
263					if( room_diff > 0 ){
264						for( var i=0; i<room_diff; i++ ){
265							var new_room = resv_room.children(':first-child').clone().hide();
266							new_room.find('.gdlr-reservation-people-title span').html(resv_room.children().length + 1);
267							new_room.appendTo(resv_room).slideDown(200);
268						}
269					}else if( room_diff < 0 ){
270						resv_room.children().slice(room_diff).slideUp(200, function(){
271							$(this).remove();
272						});
273					}
274					
275				});	
276
277				// check availability button
278				area.resv_bar.on('click', '#gdlr-reservation-bar-button', function(){
279					main.change_state({ state: 2 });
280					return false;
281				});
282				
283				// query again when input change
284				area.resv_bar.on('change', '#gdlr-check-in, #gdlr-night, #gdlr-check-out, #gdlr-room-number, #gdlr-hotel-branches, ' + 
285					'select[name="gdlr-adult-number[]"], select[name="gdlr-children-number[]"]', function(){
286					
287					if( parseInt(area.proc_bar.attr('data-state')) > 1 ){
288						area.room_form.slideUp(function(){
289							$(this).html('').removeClass('gdlr-active');
290							main.change_state({ state: 2 });
291						});
292						
293					}
294				});
295			}	
296		}
297		
298		var proc_bar = {
299			get_state: function(){
300				return area.proc_bar.attr('data-state');
301			},
302			
303			set_state: function( state ){
304				area.proc_bar.attr('data-state', state);
305				area.proc_bar.children('[data-process="' + state + '"]').addClass('gdlr-active').siblings().removeClass('gdlr-active');
306			}
307		}
308		
309		var main = {
310			init: function(){
311
312				// init date picker
313				area.wrapper.find('.gdlr-datepicker').gdlr_datepicker(); 
314				area.wrapper.find("#gdlr-datepicker-range").gdlr_datepicker_range();
315				
316				// reservation bar event
317				resv_bar.init();
318				
319				// room selection event
320				this.room_select();
321				
322				// contact form event
323				this.contact_submit();
324			},
325			
326			room_select: function(){
327				area.content_area.on('click', '.price-breakdown-close', function(){
328					$(this).closest('.price-breakdown-wrapper').fadeOut(200);
329					return false;
330				});
331				area.content_area.on('click', '.gdlr-price-break-down', function(){
332					$(this).children('.price-breakdown-wrapper').fadeIn(200);
333				});
334				
335				area.content_area.on('click', '.gdlr-room-selection',function(){
336					$('body').animate({scrollTop: area.proc_bar.offset().top}, 300); 
337					area.room_form.find('.gdlr-active input').val($(this).attr('data-roomid'));
338					main.change_state({ state: 2, room_id: $(this).attr('data-roomid') });
339					return false;
340				});
341				
342				area.content_area.on('click', '.gdlr-pagination a', function(){
343					main.change_state({ paged: $(this).attr('data-paged'), state: 2 });
344					return false;
345				});
346				
347				area.room_form.on('click', '.gdlr-reservation-change-room',function(){
348					$(this).closest('.gdlr-reservation-room').find('input').val('');
349					main.change_state({ state: 2 });
350					return false;
351				});
352				
353				// edit booking summary event
354				area.summary_form.on('click', '#gdlr-edit-booking-button', function(){
355					area.room_form.find('.gdlr-reservation-room:first-child input').val('');
356					main.change_state({ state: 2 });
357					return false;
358				});
359				
360				area.summary_form.on('change', 'input[name="pay_deposit"]', function(){
361					if($(this).val() == 'true'){
362						area.summary_form.find('.gdlr-price-deposit-inner-wrapper').slideDown();
363						area.summary_form.find('.gdlr-price-summary-grand-total').removeClass('gdlr-active');
364						area.summary_form.find('input[name="pay_deposit"][value="true"]').closest('span').addClass('gdlr-active');
365						area.summary_form.find('input[name="pay_deposit"][value="false"]').closest('span').removeClass('gdlr-active');
366					}else{
367						area.summary_form.find('.gdlr-price-deposit-inner-wrapper').slideUp();
368						area.summary_form.find('.gdlr-price-summary-grand-total').addClass('gdlr-active');
369						area.summary_form.find('input[name="pay_deposit"][value="true"]').closest('span').removeClass('gdlr-active');
370						area.summary_form.find('input[name="pay_deposit"][value="false"]').closest('span').addClass('gdlr-active');
371					}
372					return false;
373				});
374				
375			},
376			
377			contact_submit: function(){
378				
379				// for submitting service
380				area.content_area.on('change', '.gdlr-room-service-checkbox input', function(){
381					if( $(this).is(":checked") ){
382						$(this).parent('label').addClass('gdlr-active').siblings('input').prop('disabled', false);
383					}else{
384						$(this).parent('label').removeClass('gdlr-active').siblings('input').prop('disabled', true);
385					}
386				});
387				area.content_area.on('click', '.gdlr-room-selection-next',function(){
388					main.change_state({ state: 3, service: $(this).siblings('.gdlr-booking-service-wrapper').children('form') });
389					return false;
390				});
391
392				// for submitting contact form
393				area.content_area.on('click', '.gdlr-booking-contact-submit', function(){
394					var term_and_service = area.content_area.find('input[name="term-and-agreement"]');
395					if( term_and_service.length && !term_and_service.is(':checked') ){
396						area.content_area.find('.gdlr-error-message').html(term_and_service.attr('data-error')).slideDown();
397						return false;
398					}
399
400					if( !$(this).hasClass('gdlr-clicked') ){
401						$(this).addClass('gdlr-clicked');
402						area.content_area.find('.gdlr-error-message').slideUp();
403						main.change_state({ state: 3, contact: $(this).closest('form'), 'contact_type': 'contact' });
404					}
405					return false; 
406				});
407				
408				area.content_area.on('click', '.gdlr-booking-payment-submit', function(){
409					var term_and_service = area.content_area.find('input[name="term-and-agreement"]');
410					if( term_and_service.length && !term_and_service.is(':checked') ){
411						area.content_area.find('.gdlr-error-message').html(term_and_service.attr('data-error')).slideDown();
412						return false;
413					}
414
415					if( !$(this).hasClass('gdlr-clicked') ){
416						$(this).addClass('gdlr-clicked');
417						area.content_area.find('.gdlr-error-message').slideUp();
418						main.change_state({ state: 3, contact: $(this).closest('form'), 'contact_type': 'instant_payment' });
419					}
420					return false; 
421				});
422				
423				// payment method selection
424				area.content_area.on('click', '.gdlr-payment-method input[name="payment-method"]',function(){
425					$(this).parent('label').addClass('gdlr-active').siblings().removeClass('gdlr-active');
426				});
427				
428				// for ajax coupon
429				var coupon_loading = $('<span class="gdlr-coupon-loading" ></span>');
430				var coupon_message = $('<span class="gdlr-coupon-message" ></span>');
431				area.content_area.on('change input', '#gdlr-coupon-id', gdlr_debounce_function(function(){
432					if( $(this).val().length <= 0 ){ return; }
433
434					var coupon_elem = $(this);
435					coupon_elem.parent().prepend(coupon_loading);
436
437					// ajax call
438					$.ajax({
439						type: 'POST',
440						url: area.wrapper.attr('data-ajax'),
441						data: { 
442							'action': coupon_elem.attr('data-action'),
443							'data': area.resv_bar.serialize(),
444							'coupon_code': coupon_elem.val()
445						},
446						dataType: 'json',
447						error: function( a, b, c ){ console.log(a, b, c); },
448						success: function( data ){
449							coupon_loading.remove();
450
451							if( typeof(data.message) != 'undefined' ){
452								coupon_message.hide();
453								coupon_message.html(data.message).insertAfter(coupon_elem);
454								coupon_message.fadeIn();
455							}else{
456								coupon_message.fadeOut();
457							}
458							
459						}
460					});
461				}, 400));
462			},
463			
464			change_state: function( options ){
465				if( area.resv_bar.find('select[name=gdlr-hotel-branches]').val() == '' ){
466					area.resv_bar.find('#please-select-branches').slideDown();
467					return false;
468				}else{
469					area.resv_bar.find('#please-select-branches').slideUp();
470				}
471				
472				area.resv_bar.find('#gdlr-reservation-bar-button').slideUp(200, function(){ $(this).remove(); })
473				
474				area.content_area.animate({'opacity': 0.2});
475				area.content_area.parent().addClass('gdlr-loading');
476				
477				var data_submit = { 
478					'action': area.resv_bar.attr('data-action'),
479					'data': area.resv_bar.serialize(), 
480					'state': options.state 
481				};
482				if( options.room_id ) data_submit.room_id = options.room_id;
483				if( options.service ){
484					data_submit.service = options.service.serialize();
485					if( !data_submit.service ){
486						data_submit.service = 'service=none';
487					}
488				}
489				if( options.contact ) data_submit.contact = options.contact.serialize();
490				if( options.contact_type ) data_submit.contact_type = options.contact_type;
491				if( options.paged ) data_submit.paged = options.paged;
492
493				$.ajax({
494					type: 'POST',
495					url: area.wrapper.attr('data-ajax'),
496					data: data_submit,
497					dataType: 'json',
498					error: function( a, b, c ){ console.log(a, b, c); },
499					success: function( data ){
500						//console.log(data.data);
501						
502						if( data.state ){
503							proc_bar.set_state(data.state);
504							
505							if( data.content ){
506								var tmp_height = area.content_area.height();
507								area.content_area.html(data.content);
508								
509								var new_height = area.content_area.height();
510								
511								area.content_area.parent().removeClass('gdlr-loading');
512								area.content_area.height(tmp_height).animate({'opacity': 1, 'height': new_height}, function(){
513									$(this).css('height', 'auto');
514								});
515							}
516							if( data.summary_form ){
517								if( !area.summary_form.hasClass('gdlr-active') ){
518									area.summary_form.html(data.summary_form).slideDown().addClass('gdlr-active');
519								}else{
520									var tmp_height = area.summary_form.height();
521									area.summary_form.html(data.summary_form);
522									
523									var new_height = area.summary_form.height();
524									area.summary_form.height(tmp_height).animate({'height': new_height}, function(){
525										$(this).css('height', 'auto');
526									});
527									
528									if( data.state == 4 ){
529										$('body').animate({scrollTop: area.proc_bar.offset().top - (tmp_height - new_height)}, 300);
530									}
531								}
532							}
533							if( data.service ){
534								area.service_form.html(data.service);
535							}
536								
537							if( data.state == 2 ){
538								area.summary_form.slideUp(function(){ $(this).removeClass('gdlr-active'); });
539								area.date_form.slideDown();
540								
541								if( data.room_form ){
542									if( !area.room_form.hasClass('gdlr-active') ){
543										area.room_form.html(data.room_form).slideDown().addClass('gdlr-active');
544									}else{
545										var tmp_height = area.room_form.height();
546										area.room_form.html(data.room_form);
547										
548										var new_height = area.room_form.height();
549										area.room_form.height(tmp_height).animate({'height': new_height}, function(){
550											$(this).css('height', 'auto');
551										});
552									}
553								}
554							}else if( data.state == 3 ){
555								area.room_form.slideUp(function(){ $(this).removeClass('gdlr-active'); });
556								area.date_form.slideUp();
557
558								// error message on form submit
559								if( data.error_message ){
560									area.content_area.find('.gdlr-button').removeClass('gdlr-clicked');
561									area.content_area.find('.gdlr-error-message').html(data.error_message).slideDown();
562									
563									area.content_area.parent().removeClass('gdlr-loading');
564									area.content_area.animate({'opacity': 1});
565								}
566								
567								// for payment option
568								if( data.payment && data.payment == 'paypal' ){
569									var form_submit = area.content_area.find('form.gdlr-booking-contact-form');
570									form_submit.attr('method', 'post');
571									form_submit.attr('action', data.payment_url);
572									form_submit.append(data.addition_part);
573									form_submit.submit();
574									
575								}
576							}
577						} // data.state
578					}
579				});	
580			}
581		};
582		
583		main.init();
584		
585		return this;
586	}
587	
588	$(document).ready(function(){
589		
590		// init the booking page
591		$('#gdlr-single-booking-content').gdlr_hotel_booking();
592		
593		// init single room page
594		$('body.single #gdlr-reservation-bar, #gdlr-hotel-availability').gdlr_single_booking();
595		
596		// room category hover
597		$('.gdlr-room-category-item').on('mouseover', '.gdlr-room-category-thumbn
597ail', function(){
598			$(this).children('img').transition({ scale: 1.1, duration: 200, queue: false });
599			$(this).children('.gdlr-room-category-thumbnail-overlay').animate({opacity: 0.6}, {duration: 150, queue: false});
600			$(this).children('.gdlr-room-category-thumbnail-overlay-icon').animate({opacity: 1}, {duration: 150, queue: false});
601		});
602		$('.gdlr-room-category-item').on('mouseout', '.gdlr-room-category-thumbnail', function(){
603			$(this).children('img').transition({ scale: 1, duration: 200, queue: false });
604			$(this).children('.gdlr-room-category-thumbnail-overlay').animate({opacity: 0}, {duration: 150, queue: false});
605			$(this).children('.gdlr-room-category-thumbnail-overlay-icon').animate({opacity: 0}, {duration: 150, queue: false});
606		});
607	});
608
609})(jQuery);

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.