1var month3Ltr = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 2 3function assignIframeClassW(iframeID) { 4 var iframeW = jQuery('iframe#'+iframeID).width(); 5 //console.log('iframeW',iframeW); 6 var selClass = ''; 7 if(iframeW < 500) { 8 selClassNum = 'sm'; 9 } else if (iframeW >= 500) { 10 selClassNum = 'md'; 11 } 12 jQuery('iframe#'+iframeID).attr('data-size',selClassNum); 13} 14 15function setCookie(cname, cvalue, exdays) { 16 var d = new Date(); 17 d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 18 var expires = "expires="+d.toUTCString(); 19 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 20} 21 22function getCookie(cname) { 23 var name = cname + "="; 24 var ca = document.cookie.split(';'); 25 for(var i = 0; i < ca.length; i++) { 26 var c = ca[i]; 27 while (c.charAt(0) == ' ') { 28 c = c.substring(1); 29 } 30 if (c.indexOf(name) == 0) { 31 return c.substring(name.length, c.length); 32 } 33 } 34 return ""; 35} 36 37function checkCookie() { 38 var user = getCookie("username"); 39 if (user != "") { 40 alert("Welcome again " + user); 41 } else { 42 user = prompt("Please enter your name:", ""); 43 if (user != "" && user != null) { 44 setCookie("username", user, 365); 45 } 46 } 47} 48 49function isJson(str) { 50 try { 51 JSON.parse(str); 52 } catch (e) { 53 return false; 54 } 55 return true; 56} 57 58function getTodayDate() { 59 var today = new Date(); 60 var dd = String(today.getDate()).padStart(2, '0'); 61 var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0! 62 var yyyy = today.getFullYear(); 63 64 return mm + '/' + dd + '/' + yyyy; 65} 66 67function getTodayDateOrUrlParam(urlParam) { 68 var selUrlParam = decodeURIComponent(getUrlParam(urlParam,'')); 69 var today = new Date(); 70 var dd = String(today.getDate()).padStart(2, '0'); 71 var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0! 72 var yyyy = today.getFullYear(); 73 74 return selUrlParam.length ? selUrlParam : mm + '/' + dd + '/' + yyyy; 75} 76 77var formatter = new Intl.NumberFormat('en-US', { 78 style: 'currency', 79 currency: 'USD', 80}); 81 82function getUrlVars() { 83 var vars = {}; 84 var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { 85 vars[key] = value; 86 }); 87 return vars; 88} 89 90function getUrlParam(parameter, defaultvalue){ 91 var urlparameter = defaultvalue; 92 if(window.location.href.indexOf(parameter) > -1){ 93 urlparameter = getUrlVars()[parameter]; 94 } 95 return urlparameter; 96} 97 98function addOnClickAnchor(id) { 99 jQuery( '#' + id + ' a.anchor-to-deck' ).on('click', function(e) { 100 e.preventDefault(); 101 if (this.hash !== "") { 102 //console.log('jQuery(this.hash)',jQuery(this.hash)); 103 jQuery('html, body').animate({ 104 scrollTop: jQuery(this.hash).offset().top - document.getElementById('masthead').offsetHeight - 50 105 }, 800, function(e){ 106 }); 107 } 108 }); 109} 110 111function fuzzysearch(needle, haystack) { 112 var hlen = haystack.length; 113 var nlen = needle.length; 114 //console.log('fuzzysearch', {needle, haystack}); 115 if (nlen > hlen) { 116 return false; 117 } 118 if (nlen === hlen) { 119 return needle === haystack; 120 } 121 outer: for (var i = 0, j = 0; i < nlen; i++) { 122 var nch = needle.charCodeAt(i); 123 while (j < hlen) { 124 if (haystack.charCodeAt(j++) === nch) { 125 continue outer; 126 } 127 } 128 return false; 129 } 130 return true; 131} 132 133function fuseMatchCustom(params, data) { 134 //console.log('fuseMatchCustom', {params, data}); 135 if (jQuery.trim(params.term) === '') { 136 return data; 137 } 138 139 // Do not display the item if there is no 'text' property 140 if (typeof data.text === 'undefined') { 141 return null; 142 } 143 144 // `params.term` should be the term that is used for searching 145 // `data.text` is the text that is displayed for the data object 146 if (data.text.indexOf(params.term) > -1) { 147 console.log('data', {data,params}); 148 var modifiedData = jQuery.extend({}, data, true); 149 modifiedData.text += ' (matched)'; 150 151 // You can return modified objects from here 152 // This includes matching the `children` how you want in nested data sets 153 return modifiedData; 154 } 155 156 // Return `null` if the term should not be displayed 157 return null; 158} 159 160function generateAirportList(thisList) { 161 var listHtml = ''; 162 listHtml += '<ul>'; 163 for(var i = 0; i < thisList.length; i++) { 164 listHtml += '<li data-id="'+thisList[i].item.id+'" data-text="'+thisList[i].item.text+'">' + thisList[i].item.text + '</li>'; 165 } 166 listHtml += '</ul>'; 167 return listHtml; 168} 169
170function showFromResult(e) { 171 //console.log('showFromResult', e.value); 172 if(e.value.length >= 3) { 173 var thisFromResult = fuseAirport.search(e.value); 174 var resultHtml = ''; 175 if(thisFromResult.length) { 176 resultHtml = generateAirportList(thisFromResult); 177 } 178 jQuery('.fusejs-from-result').html(resultHtml); 179 jQuery('.fusejs-from-result ul li').on('click', function(e) { 180 var selId = jQuery(this).attr('data-id'); 181 var selText = jQuery(this).attr('data-text'); 182 jQuery('.destination-left label').html(selId); 183 jQuery('.select-from-span').html(selText); 184 jQuery('#fusejs-from').val(selId); 185 //console.log('selected', {selId, selText}); 186 }); 187 //console.log('thisFromResult', thisFromResult); 188 } else { 189 console.log('less-than-3'); 190 jQuery('.fusejs-from-result').html(''); 191 } 192} 193 194function showToResult(e) { 195 //console.log('showToResult', e.value); 196 if(e.value.length >= 3) { 197 var thisToResult = fuseAirport.search(e.value); 198 var resultHtml = ''; 199 if(thisToResult.length) { 200 resultHtml = generateAirportList(thisToResult); 201 } 202 jQuery('.fusejs-to-result').html(resultHtml); 203 jQuery('.fusejs-to-result ul li').on('click', function(e) { 204 var selId = jQuery(this).attr('data-id'); 205 var selText = jQuery(this).attr('data-text'); 206 jQuery('.destination-right label').html(selId); 207 jQuery('.select-to-span').html(selText); 208 jQuery('#fusejs-to').val(selId); 209 //console.log('selected', {selId, selText}); 210 }); 211 //console.log('thisToResult', thisToResult); 212 } else { 213 jQuery('.fusejs-to-result').html(''); 214 } 215} 216 217var airportData = []; 218var fuseAirport; 219 220 221(function ($) { 222 'use strict'; 223 224 $(document).ready(function () { 225 226 const fuseOptions = { 227 keys: ['id', 'text'], 228 threshold: 0.3, 229 includeMatches: true, 230 includeScore: true, 231 useExtendedSearch: true 232 }; 233 234 235 AOS.init(); 236 // data-aos="fade-up" data-aos-delay="50" data-aos-duration="1000" 237 AOS.init({ 238 // Global settings: 239 disable: false, // accepts following values: 'phone', 'tablet', 'mobile', boolean, expression or function 240 startEvent: "DOMContentLoaded", // name of the event dispatched on the document, that AOS should initialize on 241 initClassName: "aos-init", // class applied after initialization 242 animatedClassName: "aos-animate", // class applied on animation 243 useClassNames: false, // if true, will add content of `data-aos` as classes on scroll 244 disableMutationObserver: false, // disables automatic mutations' detections (advanced) 245 debounceDelay: 50, // the delay on debounce used while resizing window (advanced) 246 throttleDelay: 99, // the delay on throttle used while scrolling the page (advanced) 247 // Settings that can be overridden on per-element basis, by `data-aos-*` attributes: 248 offset: 120, // offset (in px) from the original trigger point 249 delay: 0, // values from 0 to 3000, with step 50ms 250 duration: 400, // values from 0 to 3000, with step 50ms 251 easing: "ease", // default easing for AOS animations 252 once: true, // whether animation should happen only once - while scrolling down 253 mirror: false, // whether elements should animate out while scrolling past them 254 anchorPlacement: "top-bottom", // defines which position of the element regarding to window should trigger the animation 255 }); 256 257 //console.log('app-js', $(".southern__slider")); 258 if($(".southern__slider").length) { 259 $(".southern__slider").owlCarousel({ 260 items: 1, 261 loop: true, 262 margin: 25, 263 nav: true, 264 dots: false, 265 smartSpeed: 1000, 266 responsive: { 267 0: { 268 items: 1, 269 }, 270 500: { 271 items: 2, 272 }, 273 1000: { 274 items: 3, 275 }, 276 1200: { 277 items: 4, 278 } 279 }, 280 }); 281 } 282 283 $(".affordable__slider").owlCarousel({ 284 items: 1, 285 loop: true, 286 margin: 26, 287 nav: true, 288 dots: false, 289 smartSpeed: 1000, 290 responsive: { 291 0: { 292 items: 1, 293 }, 294 500: { 295 items: 2, 296 } 297 }, 298 }); 299 300 $(".menu-close , .offcanvas-overlay").click(function () { 301 $('body').removeClass("onepress-menu-mobile-opening"); 302 $('#nav-toggle').removeClass("nav-is-visible"); 303 }); 304 305 $(document).on('click', '[data-toggle="lightbox"]', function (event) { 306 event.preventDefault(); 307 $(this).ekkoLightbox({ 308 alwaysShowClose: true 309 }); 310 }); 311 312 $(window).click(function(e) { 313 /*if($('.popup-fusejs-from').hasClass('open')) { 314 if(e.target.id !== 'fusejs-from' && e.target.id !== 'fusejs-from-result') { 315 $('.popup-fusejs-from').removeClass('open') 316 } 317 //console.log('from-open'); 318 }*/ 319 if($('.popup-fusejs-to').hasClass('open')) { 320 if(e.target.id !== 'fusejs-to' && e.target.id !== 'fusejs-to-result') { 321 $('.popup-fusejs-to').removeClass('open') 322 } 323 //console.log('to-open'); 324 } 325 //console.log('click-here', e.target.id); 326 327 }); 328 329 $('nav.main-navigation').on('click', function(e) { 330 }); 331 332 $('ul.onepress-menu li.mobile-close > a').on('click', function(e) { 333 e.preventDefault(); 334 closeMobileNav(); 335 event.stopPropagation(); 336 }); 337 338 //$('select').niceSelect(); 339 340 $('.current-promo-code').click(function (e) { 341 e.preventDefault(); 342 $(this).parent().toggleClass('active'); 343 }); 344 345 $('.passenger-current').click(function (e) { 346 e.preventDefault(); 347 $(this).parent().toggleClass('active'); 348 }); 349 350 /*$('.login-btn-wrap a.btns.login').click(function (e) { 351 e.preventDefault(); 352 $(this).parent().toggleClass('active'); 353 });*/ 354 355 $('.grids-btn-wrap a.btns.grids').click(function (e) { 356 e.preventDefault(); 357 $(this).parent().toggleClass('active'); 358 }); 359 360 $('label[for="lax"]').on('click', function() { 361 // $('.destination-select .nice-select').addClass('open'); 362 $(this).parent().parent().find('.nice-select').toggleClass('open'); 363 return false;
364 }); 365 366 $('label[for="to"]').on('click', function() { 367 // $('.destination-select .nice-select').addClass('open'); 368 $(this).parent().parent().find('.nice-select').toggleClass('open'); 369 return false; 370 }); 371 372 var adultNumber = 1; 373 var childNumber = 0; 374 var infantNumber = 0; 375 var totalNumber = adultNumber + childNumber + infantNumber; 376 function updateTotalNumber(mode, num) { 377 if(mode === 'adult') { 378 adultNumber = num; 379 $('input#hiddenADNum').val(num); 380 } 381 if(mode === 'child') { 382 childNumber = num; 383 $('input#hiddenCHDNum').val(num); 384 } 385 if(mode === 'infant') { 386 infantNumber = num; 387 $('input#hiddenINFNum').val(num); 388 } 389 totalNumber = adultNumber + childNumber + infantNumber; 390 $('.passenger-current .num').html(totalNumber); 391 } 392 393 $('input#adultNumber').niceNumber({ 394 onIncrement: function($currentInput, amount, settings) { 395 updateTotalNumber('adult', amount); 396 }, 397 onDecrement: function($currentInput, amount, settings) { 398 updateTotalNumber('adult', amount); 399 }, 400 }); 401 $('input#childNumber').niceNumber({ 402 onIncrement: function($currentInput, amount, settings) { 403 updateTotalNumber('child', amount); 404 }, 405 onDecrement: function($currentInput, amount, settings) { 406 updateTotalNumber('child', amount); 407 }, 408 }); 409 $('input#infantNumber').niceNumber({ 410 onIncrement: function($currentInput, amount, settings) { 411 updateTotalNumber('infant', amount); 412 }, 413 onDecrement: function($currentInput, amount, settings) { 414 updateTotalNumber('infant', amount); 415 }, 416 }); 417 418 $('a.link-with-hashtag').on('click', function(e) { 419 e.preventDefault(); 420 var link = $(this).attr('href'); 421 location.href = link; 422 event.stopPropagation(); 423 }); 424 425 $('input[type="number"]').niceNumber({ 426 // auto resize the number input 427 autoSize: true, 428 // the number of extra character 429 autoSizeBuffer: 1, 430 // custom button text 431 buttonDecrement: '-', 432 buttonIncrement: "+", 433 // 'around', 'left', or 'right' 434 buttonPosition: 'around' 435 }); 436 437 438$('form#findBookingForm').on('submit', function(e) { 439 var refNum = $('#tmpReferenceNumber').val(); 440 var tixNum = $('#ticketNumber').val(); 441 var lName = $('#travelerSurname').val(); 442 if(lName.length) { 443 if(tixNum.length) { 444 $('input[name=searchType]').val('TicketNumber'); 445 $('input[name=referenceNumber]').val(tixNum); 446 } else { 447 $('input[name=searchType]').val('PNR'); 448 $('input[name=referenceNumber]').val(refNum); 449 } 450 return true; 451 } else { 452 $('#travelerSurname').focus(); 453 $('#travelerSurname').addClass('required'); 454 } 455 return false; 456 }); 457 458 if($('#departReturn').length) { 459 var startDate = new Date(); 460 var endDate = new Date(); 461 endDate = new Date(endDate.setDate(endDate.getDate() + 7)); 462 //var startDateStr1 = ( '0' + (startDate.getMonth() + 1) ).slice(-2) + '/' + ( '0' + startDate.getDate() ).slice(-2) + '/' + startDate.getFullYear(); 463 var startDateStr1 = month3Ltr[startDate.getMonth()] + ' ' + startDate.getDate(); 464 var minDateStr1 = startDateStr1; 465 //var endDateStr1 = ( '0' + (endDate.getMonth() + 1) ).slice(-2) + '/' + ( '0' + endDate.getDate() ).slice(-2) + '/' + endDate.getFullYear(); 466 var endDateStr1 = month3Ltr[endDate.getMonth()] + ' ' + endDate.getDate(); 467 var startDateStr2 = startDate.getFullYear() + '-' + ( '0' + (startDate.getMonth() + 1) ).slice(-2) + '-' + ( '0' + startDate.getDate() ).slice(-2); 468 var endDateStr2 = endDate.getFullYear() + '-' + ( '0' + (endDate.getMonth() + 1) ).slice(-2) + '-' + ( '0' + endDate.getDate() ).slice(-2); 469 //startDateStr1 = 'Feb 28'; 470 //endDateStr1 = 'Mar 8'; 471 //console.log('dates', {startDateStr1,endDateStr1, startDateStr2, endDateStr2}); 472 $('#departReturn').daterangepicker({ 473 "singleDatePicker": false, 474 "minDate": minDateStr1, 475 "startDate": startDateStr1, 476 "endDate": endDateStr1, 477 "autoApply": true, 478 "locale": { 479 "format": 'MMM D' 480 } 481 }, function(start, end, label) { 482 //console.log('auto-apply'); 483 startDateStr1 = start.format('MMM D'); 484 endDateStr1 = end.format('MMM D'); 485 startDateStr2 = start.format('YYYY-MM-DD'); 486 endDateStr2 = end.format('YYYY-MM-DD'); 487 //console.log('on-select', {startDateStr1,endDateStr1, startDateStr2, endDateStr2}); 488 var tripType = $('select#tripType').val(); 489 if(tripType === 'ow') { 490 $(this).val(startDateStr1); 491 } else { 492 $(this).val(startDateStr1 + ' - ' + endDateStr1); 493 } 494 }); 495 }; 496
497 $('select#tripType').on('change', function(e) { 498 //console.log('change', $(this).val()); 499 var thisMode = $(this).val(); 500 var isSingle = true; 501 if(thisMode === 'rt') { 502 isSingle = false; 503 } else if (thisMode === 'ow') { 504 isSingle = true; 505 } else if (thisMode === 'mc') { 506 isSingle = false; 507 } 508 $('#departReturn').daterangepicker({ 509 "singleDatePicker": isSingle, 510 "minDate": minDateStr1, 511 "startDate": startDateStr1, 512 "endDate": endDateStr1, 513 "autoApply": true, 514 "locale": { 515 "format": 'MMM D' 516 } 517 }, function(start, end, label) { 518 console.log('auto-apply2'); 519 startDateStr1 = start.format('MMM D'); 520 endDateStr1 = end.format('MMM D'); 521 startDateStr2 = start.format('YYYY-MM-DD'); 522 endDateStr2 = end.format('YYYY-MM-DD'); 523 //console.log('picker', picker.startDate.format('MMM D')); 524 var tripType = $('select#tripType').val(); 525 if(tripType === 'ow') { 526 $(this).val(startDateStr1); 527 } else { 528 $(this).val(startDateStr1 + ' - ' + endDateStr1); 529 } 530 }); 531 }); 532 533 $('select#tripType').select2({ minimumResultsForSearch: Infinity }); 534 535 536 $('button#searchFlight').on('click', function(e) { 537 var tripType = $('select#tripType').val(); 538 //var fromDest = $('select#OriginAirportCode').val(); 539 //var toDest = $('select#DestinationAirportCode').val(); 540 var fromDest = $('.destination-left label').html(); 541 var toDest = $('.destination-right label').html(); 542 var promoCode = $('input#promoCode').val(); 543 //var flex = document.getElementById("flexible-date").checked || document.getElementById("flexible-date-desktop").checked || false; 544 var flex = true; 545 //console.log('departReturn', {fromDest,toDest,tripType,promoCode,flex,startDateStr2,endDateStr2,adultNumber,childNumber,infantNumber}); 546 if(tripType === 'ow') { 547 $('#oac_ow').val(fromDest); 548 $('#dac_ow').val(toDest); 549 $('#od_ow').val(startDateStr2); 550 $('#ttAD_ow').val(adultNumber); 551 $('#ttCHD_ow').val(childNumber); 552 $('#ttINF_ow').val(infantNumber); 553 $('#flex_ow').val(flex); 554 $('#dc_ow').val(promoCode); 555 $('form#searchResultFormOW').submit(); 556 } else if(tripType === 'rt') { 557 $('#oac_rt').val(fromDest); 558 $('#dac_rt').val(toDest); 559 $('#od_rt').val(startDateStr2); 560 $('#id_rt').val(endDateStr2); 561 $('#ttAD_rt').val(adultNumber); 562 $('#ttCHD_rt').val(childNumber); 563 $('#ttINF_rt').val(infantNumber); 564 $('#flex_rt').val(flex); 565 $('#dc_rt').val(promoCode); 566 $('form#searchResultFormRT').submit(); 567 } else { 568 $('#oac0_mc').val(fromDest); 569 $('#dac0_mc').val(toDest); 570 $('#od0_mc').val(startDateStr2); 571 $('#oac1_mc').val(toDest); 572 $('#dac1_mc').val(toDest); 573 $('#od1_mc').val(endDateStr2); 574 $('#ttAD_mc').val(adultNumber); 575 $('#ttCHD_mc').val(childNumber); 576 $('#ttINF_mc').val(infantNumber); 577 $('#flex_mc').val(flex); 578 $('#dc_mc').val(promoCode); 579 $('form#searchResultFormMC').submit(); 580 } 581 return false; 582 }); 583 584 $('.booking-date-tile').on('click', function(e) { 585 e.preventDefault(); 586 var fromDest = $(this).attr('data-from-code'); 587 var toDest = $(this).attr('data-to-code'); 588 var fromLabel = $(this).attr('data-from-label'); 589 var toLabel = $(this).attr('data-to-label'); 590 var flex = true; 591 var fromDate = new Date(); 592 var toDate = new Date(); 593 toDate.setDate(toDate.getDate() + 7); 594 var startDateStr2 = fromDate.getFullYear() + '-' + ('0' + (fromDate.getMonth() + 1)).slice(-2) + '-' + ('0' + fromDate.getDate()).slice(-2); 595 var endDateStr2 = toDate.getFullYear() + '-' + ('0' + (toDate.getMonth() + 1)).slice(-2) + '-' + ('0' + toDate.getDate()).slice(-2); 596 var isStaging = getUrlParam('staging', '') === '1'; 597 isStaging = typeof window.getTestVariant === 'function' && window.getTestVariant() === 'marketplace' ? true : isStaging; 598 /*defaultRTStagingJson.SCHEDULED.dateTimeFilters.departureDate = startDateStr2; 599 defaultRTStagingJson.SCHEDULED.dateTimeFilters.returnDate = endDateStr2; 600 defaultRTStagingJson.SCHEDULED.originLocation.code = fromDest; 601 defaultRTStagingJson.SCHEDULED.originLocation.displayName = fromLabel; 602 defaultRTStagingJson.SCHEDULED.destinationLocation.code = toDest; 603 defaultRTStagingJson.SCHEDULED.destinationLocation.displayName = toLabel; 604 defaultRTStagingJson.SCHEDULED.seatsFilters.adults = 1; 605 defaultRTStagingJson.SCHEDULED.seatsFilters.children = 0; 606 defaultRTStagingJson.SCHEDULED.seatsFilters.lapInfants = 0; 607 defaultRTStagingJson.SCHEDULED.promoCode = ''; 608 var jTRString = encodeURIComponent(JSON.stringify(defaultRTStagingJson));*/ 609 $('#oac_rt_tile').val(fromDest); 610 $('#dac_rt_tile').val(toDest); 611 $('#od_rt_tile').val(startDateStr2); 612 $('#id_rt_tile').val(endDateStr2); 613 $('#ttAD_rt_tile').val(1); 614 $('#ttCHD_rt_tile').val(0); 615 $('#ttINF_rt_tile').val(0); 616 $('#flex_rt_tile').val(flex); 617 $('#dc_rt_tile').val(''); 618 if(!isStaging) { 619 //console.log('jTRString', defaultRTStagingJson); 620 $('form#bookingTileFormRTList').submit(); 621 } else { 622 //console.log('jTRString', {jTRString,defaultRTStagingJson}); 623 window.open('https://fly.staging.surfair.com/southern/explore/scheduled?s='+jTRString); 624 } 625 }); 626 627 $('#flexible-date-desktop').on('change', function(e) { 628 document.getElementById("flexible-date").checked = document.getElementById("flexible-date-desktop").checked; 629 }); 630 $('#flexible-date').on('change', function(e) { 631 document.getElementById("flexible-date-desktop").checked = document.getElementById("flexible-date").checked; 632 }); 633 634 $('input#promoCode').on('change', function(e) { 635 console.log('new-val', $(this).val()); 636 $('input#promoCodeMobile').val($(this).val()); 637 }); 638 $('input#promoCodeMobile').on('change', function(e) { 639 console.log('new-val', $(this).val()); 640 $('input#promoCode').val($(this).val()); 641 }); 642 643 $('form#mc-embedded-subscribe-form').on('submit', function(e) { 644 var email = $('input#MERGE0').val(); 645 if(email.length) { 646 return true; 647 } 648 $('input#newEmail').focus(); 649 return false;
650 }); 651 652 653 function matchStart(params, data) { 654 console.log('matchStart', {params, data, defaultFromAirportCode}); 655 if($.trim(params.term).length < 1) { 656 if( defaultFromAirportCode.includes(data.id) ) { 657 return data; 658 } else { 659 return null; 660 } 661 } 662 // If there are no search terms, return all of the data 663 if ($.trim(params.term) === '') { 664 return data; 665 } 666 // Skip if there is no 'children' property 667 if (typeof data.children === 'undefined') { 668 //return null; 669 } 670 671 if( params.term.length === -1) { 672 if( (data.id || '').toLowerCase() === params.term.toLowerCase()) { 673 return data; 674 } else { 675 return null; 676 } 677 } else { 678 if ( data.text.toLowerCase().indexOf(params.term.toLowerCase()) >= 0 ) { 679 return data; 680 } else { 681 return null; 682 } 683 } 684 685 //console.log('matchStart', {params, data, defaultFromAirportCode}); 686 // Return `null` if the term should not be displayed 687 return null; 688 } 689 function matchTo(params, data) { 690 //console.log('matchTo', {params, data, defaultFromAirportCode}); 691 if($.trim(params.term).length < 1) { 692 if( defaultToAirportCode.includes(data.id) ) { 693 return data; 694 } else { 695 return null; 696 } 697 } 698 // If there are no search terms, return all of the data 699 if ($.trim(params.term) === '') { 700 return data; 701 } 702 // Skip if there is no 'children' property 703 if (typeof data.children === 'undefined') { 704 //return null; 705 } 706 707 if( params.term.length === -1) { 708 if( (data.id || '').toLowerCase() === params.term.toLowerCase()) { 709 return data; 710 } else { 711 return null; 712 } 713 } else { 714 if ( data.text.toLowerCase().indexOf(params.term.toLowerCase()) >= 0 ) { 715 return data; 716 } else { 717 return null; 718 } 719 } 720 721 //console.log('matchStart', {params, data, defaultFromAirportCode}); 722 // Return `null` if the term should not be displayed 723 return null; 724 } 725 function sortResult(result) { 726 //console.log('sortResult', result); 727 return result.sort(function (a, b) { 728 var numberToSortA = a.weight === null ? 0 : parseFloat(a.weight); 729 var numberToSortB = b.weight === null ? 0 : parseFloat(b.weight); 730 return numberToSortB - numberToSortA; 731 }) 732 //return result; 733 } 734 function parseAirportJson(ap) { 735 for(var i = 0; i < ap.length; i++) { 736 airportData.push({ id: ap[i].Code, text: ap[i].Label + ' ('+ap[i].Code+')' }); 737 } 738 } 739 var defaultFromAirportCode = ['HNL', 'OGG', 'MKK', 'LNY', 'MUE', 'JHM', 'KOA', 'HNM']; 740 var defaultToAirportCode = ['HNL', 'OGG', 'MKK', 'LNY', 'MUE', 'JHM', 'KOA', 'HNM']; 741 $.ajax({ 742 dataType:"json", 743 url: "/wp-content/themes/mokuleleairlines/json/airports-list.json", 744 success:function(airportList){ 745 //console.log('airportList', airportList); 746 parseAirportJson(airportList); 747 fuseAirport = new Fuse(airportData, fuseOptions); 748 749 $('select#OriginAirportCode').select2( 750 { 751 data: airportData, 752 placeholder: 'Select from', 753 dropdownParent: $('.popup-destination-from'), 754 minimumInputLength: 0, 755 matcher: matchStart, 756 sorter: sortResult, 757 //matcher: fuseMatchCustom, 758 } 759 ); 760 $('select#DestinationAirportCode').select2( 761 { 762 data: airportData, 763 placeholder: 'Select to', 764 dropdownParent: $('.popup-destination-to'), 765 minimumInputLength: 0, 766 matcher: matchTo, 767 sorter: sortResult, 768 /*matcher: function(params, data) { 769 770 if ($.trim(params.term) === '') { 771 return data; 772 } 773 774 if (typeof data.text === 'undefined') { 775 return null; 776 } 777 778 // `params.term` should be the term that is used for searching 779 // `data.text` is the text that is displayed for the data object 780 if (fuzzysearch(params.term.toUpperCase(), data.text.toUpperCase())) { 781 var modifiedData = $.extend({}, data, true); 782 783 // You can return modified objects from here 784 // This includes matching the `children` how you want in nested data sets 785 return modifiedData; 786 } 787 788 // Return `null` if the term should not be displayed 789 return null; 790 }*/ 791 } 792 ); 793 },error:function(jqXHR,error,errorThrown){ 794 if(jqXHR.status&&jqXHR.status==400){ 795 console.log(jqXHR.responseText) 796 } else { 797 console.log("Something went wrong - ",error) 798 } 799 } 800 }); 801 802 $('.destination-left label').on('click', function(e) { 803 //console.log('click-h4', $('.popup-destination-from .select2-container--open').length); 804 $('select#OriginAirportCode').select2('open'); 805 /*$('.popup-fusejs-to').removeClass('open'); 806 $('.popup-fusejs-from').addClass('open'); 807 $('input#fusejs-from').focus();*/ 808 }); 809 $('.select-from-span').on('click', function(e) { 810 $('select#OriginAirportCode').select2('open'); 811 /*$('.popup-fusejs-to').removeClass('open'); 812 $('.popup-fusejs-from').addClass('open'); 813 $('input#fusejs-from').focus();*/ 814 //event.stopPropagation(); 815 }); 816 $('.destination-right label').on('click', function(e) { 817 //console.log('click-h4'); 818 $('select#DestinationAirportCode').select2('open'); 819 /*$('.popup-fusejs-from').removeClass('open'); 820 $('.popup-fusejs-to').addClass('open'); 821 $('input#fusejs-to').focus();*/ 822 }); 823 $('.select-to-span').on('click', function(e) { 824 $('select#DestinationAirportCode').select2('open'); 825 /*$('.popup-fusejs-from').removeClass('open'); 826 $('.popup-fusejs-to').addClass('open'); 827 $('input#fusejs-to').focus(); 828 event.stopPropagation();*/ 829 }); 830 831 $('select#OriginAirportCode').on('select2:select', function (e) { 832 var data = e.params.data; 833 var airportId = data.id || 'FROM'; 834 $('.destination-left label').html(airportId); 835 //console.log(data); 836 }); 837 $('select#DestinationAirportCode').on('select2:select', function (e) { 838 var data = e.params.data; 839 var airportId = data.id || 'TO'; 840 $('.destination-right label').html(airportId); 841 //console.log(data); 842 }); 843 $('.close-banner').on('click', function(e) { 844 e.preventDefault(); 845 $('.top-banner-wrapper').addClass('hide'); 846 $('.block-banner-wrapper').addClass('opacity-zero'); 847 }); 848 849 $('.banner-item-wrapper').slick({ 850 slidesToShow: 1, 851 slidesToScroll: 1,
852 arrows: false, 853 dots: false, 854 autoplay: true, 855 autoplaySpeed: 5000, 856 infinite: false, 857 }); 858 859 }); 860})(jQuery); 861 862 863 864/* MOKULELE_SUBLABEL_FIX: mirror the selected airport name into the .select-from-span / .select-to-span sub-labels (restores production behavior). Safe, self-contained, jQuery-guarded. */ 865(function(){ 866 if(!window.jQuery){return;} 867 var $ = window.jQuery; 868 function upd(selectId, spanSel){ 869 var sel = document.querySelector(selectId), 870 span = document.querySelector(spanSel); 871 if(sel && span && sel.value && sel.selectedIndex > -1){ 872 span.textContent = sel.options[sel.selectedIndex].text; 873 } 874 } 875 $(document).ready(function(){ 876 $(document).on('change select2:select', '#OriginAirportCode', function(){ upd('#OriginAirportCode','.select-from-span'); }); 877 $(document).on('change select2:select', '#DestinationAirportCode', function(){ upd('#DestinationAirportCode','.select-to-span'); }); 878 upd('#OriginAirportCode','.select-from-span'); 879 upd('#DestinationAirportCode','.select-to-span'); 880 }); 881})();
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.