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.