{"version":3,"file":"AE.ui.min.js","sources":["AE.ui.min.js"],"sourcesContent":["var AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n/*\nThe AE.ui object will be the returned result of a self-invoked function. This allows us to expose methods\nfor use by other modules while protecting some variables in a closure. If the AE.ui object is already\ndefined then it's not altered. This prevents us from running the entire function each time one of its\ninternal methods are called.\n*/\nAE.ui = AE.ui || (function () {\n\t/*\n\tDEPENDENCIES: AE\n\t*/\n\n\tvar UI = {\n\t\t// Like resizeTasks in AE.js, these arrays are to be filled with functions to be executed...\n\t\tbodyClickTasks: [], // Delegated Tasks Triggered On Body Click\n\t\tbodyChangeTasks: [], // Delegated Tasks Triggered On Body Change\n\t\tinit: function () {\n\t\t\tvar prepMenusearch = prepMenusearch || false;\n\t\t\t/* Establish the props object only upon init. No need to do the work if the module isn't being called. */\n\t\t\tUI.props = {\n\t\t\t\tbodyEvent: '',\n\t\t\t\tclicksDisabled: false, // If set to true, then clicks will not be registered for matrix and results elements.\n\t\t\t\t// This property will be defined as the result of an IFFE (Individually Invoked Function Expression)\n\t\t\t\tappendTarget: (function () {\n\t\t\t\t\t// Used for the main search form. Most jQuery UI widgets have a property called \"appendTo\" which controls where widgets will\n\t\t\t\t\t// exist in the DOM. If the value is null then widgets will be attached to the body. Otherwise, the widget will be attached\n\t\t\t\t\t// to whatever selector or jQuery object is defined. This is important because we've put our content on a different branch of\n\t\t\t\t\t// the DOM than dialogs occupy, so we could have dropdowns or autocomplete widgets which don't scroll when they should.\n\t\t\t\t\t//\n\t\t\t\t\t// We have three possibilities for where the main search form may appear. The main page, modify or in a dialog. The value is\n\t\t\t\t\t// initially set to null, which means that the widgets will be appended to the body.\n\t\t\t\t\t// 1. MODIFY:\t\tThis is an inline form, but it doesn't have the same parent structure as the main page. The page is checked\n\t\t\t\t\t// \t\t\t\t\tto see if the user is on the modify page and sets the variable accordingly.\n\t\t\t\t\t// 2. HOME PAGE:\tSame as above, but due to the different structure the variable is set to a different ID.\n\t\t\t\t\t// 3. IN A DIALOG:\tDialogs are not on the same branch of the DOM, to prevent them from scrolling along with site content. For\n\t\t\t\t\t// \t\t\t\t\tthis case, the variable needs to be set to null so that widgets will be appended to the body.\n\n\t\t\t\t\tvar appendTo = null; // Default, mainly used for dialogs.\n\t\t\t\t\tif ($('body').hasClass('my-booking')) {\n\t\t\t\t\t\t// Modify page\n\t\t\t\t\t\tappendTo = '#search-form';\n\t\t\t\t\t} else if (!$('#ae-search').closest('.ui-dialog')[0]) {\n\t\t\t\t\t\t// Home page\n\t\t\t\t\t\tappendTo = '#top_search_form';\n\t\t\t\t\t}\n\t\t\t\t\treturn appendTo; //( $('#ae-search').closest('.ui-dialog')[0] ) ? null : '#top_search_form'\n\t\t\t\t})(),\n\n\t\t\t\tscrollContainer: $('#scroll-content'),\n\t\t\t\t$mainFooterTogglers: $('.main-footer__header'),\n\t\t\t\t$mainFooterTogglees: $('.main-footer__links'),\n\t\t\t\t$aeSearch: $(\"#ae-search\"),\n\t\t\t\t$menusearchEnabled: prepMenusearch,\n\t\t\t\t$tabContainers: $(\".tab_container\"),\n\t\t\t\t$accordionContainers: $(\".accordion_container\"),\n\t\t\t\t$accordionCollapsedContainers: $(\".accordion_container--collapsed\"),\n\t\t\t\t$dateInputs: $('input[class=\"datePickerInput\"]'),\n\t\t\t\t$autoPostForms: $('#trg-autoPostForm'),\n\t\t\t\t$currentDatePicker: null\n\t\t\t};\n\n\t\t\tUI.searchProps = {\n\t\t\t\troundTrip: true,\n\t\t\t\tcity: null, // City name for pickup\n\t\t\t\tcityr: null, // City name for dropoff\n\t\t\t\tpuloclist: null, // List of pickup locations\n\t\t\t\tdoloclist: null, // List of dropoff locations\n\t\t\t\tpucode: null, // country ISO code for pickup.\n\t\t\t\tdocode: null, // country ISO code for dropoff.\n\t\t\t\tpuCal: null, // Pickup date\n\t\t\t\tdoCal: null, // Dropoff date\n\t\t\t\tputime: null, // Pickup hour, must be 24 hour time, 0 - 23\n\t\t\t\tdotime: null, // dropoff hour, must be 24 hour time, 0 - 23\n\t\t\t\tsearchAge: 40, // checkbox for if the driver's age is between 25 and 70\n\t\t\t\tbookingstep: 'searchwait' // Set and done. Required for back-end.\n\t\t\t\t/* Conditional Properties\n\t\t\t\t\tmodUUID: Included when search form posts from Modify Page, ColdFusion UUID\n\t\t\t\t*/\n\t\t\t};\n\n\t\t\tUI.addBodyClickTask({\n\t\t\t\tfunc: UI.onBodyClick\n\t\t\t});\n\n\t\t\t//var bodyEvent = (AE.getSiteViewType() === 'palm' && $('html').hasClass('ua-ios')) ? 'click, touchend' : 'click';\n\t\t\t$('body').on('click', function (event) {\n\t\t\t\tUI.manageBodyClick(event);\n\t\t\t});\n\t\t\t//$('body').on('touchend', function(event){UI.manageBodyClick(event)});\n\n\t\t\t$('body').on('change', function (event) {\n\t\t\t\tUI.manageBodyChange(event)\n\t\t\t});\n\t\t\tUI.applyJQUI();\n\n\t\t\t// iOS patch for related links,\n\t\t\t// real solution would be to move\n\t\t\t// bodyevent from manage resize to props\n\t\t\tif ($('html').hasClass('ua-ios')) {\n\t\t\t\t$('body').on('touchend', function (event) {\n\t\t\t\t\tif ($(event.target).parent().hasClass('related__links')) {\n\t\t\t\t\t\tUI.manageBodyClick(event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/* Set padding-top to <5px to workaround WEBAE3-4259\n\t\t\t* This will cause jquery-ui _hasScroll() to return false to jquery-ui _scrollIntoView()\n\t\t\t* avoiding an uncaught exception inside the latter where the passed element is empty. \n\t\t\t\n\t\t\tWEBAE3-5178 - changed padding below from 4px to 2px and it seems to fix sporadic\n\t\t\tissue that breaks text inputs\n\t\t\t\n\t\t\t*/\n\t\t\tvar fractionalScrollHeightStyle = document.createElement('style');\n\t\t\tif (AE.props.siteCode == 'FCR') {\n\t\t\t\tfractionalScrollHeightStyle.appendChild( document.createTextNode('#ui-id-147,#ui-id-150{padding-top:2px!important}') );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfractionalScrollHeightStyle.appendChild( document.createTextNode('#ui-id-99,#ui-id-102{padding-top:2px!important}') );\n\t\t\t}\n\t\t\tdocument.head.appendChild(fractionalScrollHeightStyle);\n\n\t\t\n\t\t\t$('a').filter(function () {\n\t\t\t\t// Checking for external links and adding rel=\"noopener\" - Because we can't train marketing how to SEO good\n\t\t\t\tvar $a = $(this);\n\t\t\t\tvar _href = $a.attr('href') || false;\n\t\t\t\tvar _host = this.hostname || false;\n\t\t\t\n\t\t\t\t// test script to remove the no opener rel tag\n\t\t\t\tvar _langTag = $a.attr('hreflang');\n\t\t\t\tvar _href = $a.attr('href') || false;\n\t\t\t\n\t\t\t\tif (_langTag === 'zh-CN' || _langTag === 'tr-TR') {\n\t\t\t\t\t_href = false;\n\t\t\t\t}\n\n\t\t\t\tvar _location = (typeof (location) != 'undefined') ? location.hostname : false;\n\t\t\t\tvar _hrefStr = _href ? $a.attr('href').substring(0, 4) : _href;\n\t\t\t\n\t\t\t\tif (_host && _location && (_host === _location)) {\n\t\t\t\t\t_hrefStr = false;\n\t\t\t\t}\n\t\t\t\tif (_host && _location && (_host.substring(0, 3) === _location.substring(0, 3))) {\n\t\t\t\t\t_hrefStr = false;\n\t\t\t\t}\n\t\t\t\treturn (_hrefStr === 'http') ? this.hostname && this.hostname !== location.hostname : false;\n\t\t\t}).addClass(\"external\").attr({\n\t\t\t\trel: 'noopener'\n\t\t\t});\n\t\t\n\t\t\t// Manage resize\n\t\t\tAE.addResizeTask({\n\t\t\t\tfunc: function () {\n\t\t\t\t\tUI.manageResize();\n\t\t\t\t},\n\t\t\t\targs: []\n\t\t\t});\n\n\t\t\t// scroll task-Back to top-WEBAE3-3319\n\t\t\tAE.addScrollTask({\n \t\t\t\tfunc: function () {\t \t\t\t\t\t\n \t\t\t\t\tvar elm = document.getElementById(\"scroll_target\");\n \t\t\t\t\tvar distanceFromTop = elm.getBoundingClientRect().top; \n \t\t\t\t\tvar targetDistance = -1200; \n \t\t\t\t\tvar $b2t = $('#back2top'); \t\t\t\t\n\t\t\t\t\tif(distanceFromTop < targetDistance){\n    \t\t\t\t\t$b2t.removeClass('visuallyhidden');\n    \t\t\t\t}else{\n    \t\t\t\t\t$b2t.addClass('visuallyhidden');\n    \t\t\t\t}    \t\t\t\t\n \t\t\t\t}\n \t\t\t});\n\t\t\n\t\t\t// Initiate UI modules, if they exist\n\t\t\tif (AE.ui.search && $(\"#ae-search\")[0]) {\n\t\t\t\tAE.ui.search.init();\n\t\t\t} else {\n\t\t\t\t$.each($('select.time--select'), function () {\n\t\t\t\t\t$(this).parent('.styled--select').removeClass('ui-searchform--custom-form-el ui-timeselect-rev ui-ready-waiting');\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (AE.ui.searchType && $(\"#ae-search\")[0]) {\n\t\t\t\tAE.ui.searchType.init();\n\t\t\t}\n\t\t\tif (AE.ui.dialog) {\n\t\t\t\tAE.ui.dialog.init();\n\t\t\t}\n\t\t\t/*\n\t\t\t * Timeselect and datepicker inits are now in AE.ui.searchType's init function\n\t\t\t *\n\t\t\t * if (AE.ui.timeselectmenu) { AE.ui.timeselectmenu.init(); }\n\t\t\t * if (AE.ui.datepicker) { AE.ui.datepicker.init(); }\n\t\t\t */\n\t\t\tif (AE.ui.modify && $('#aemodify')[0]) {\n\t\t\t\tAE.ui.modify.init();\n\t\t\t}\n\t\t\tif (AE.ui.tabcordion) {\n\t\t\t\tAE.ui.tabcordion.init();\n\t\t\t}\n\t\t\tif (AE.ui.carousel) {\n\t\t\t\tAE.ui.carousel.init();\n\t\t\t}\n\t\t\tif (AE.ui.selectmenu) {\n\t\t\t\tAE.ui.selectmenu.init();\n\t\t\t}\n\t\t\tif (AE.affiliate) {\n\t\t\t\tAE.affiliate.init();\n\t\t\t}\n\t\t\tif (AE.affiliate.terms) {\n\t\t\t\tAE.affiliate.terms.init();\n\t\t\t}\n\n\t\t\t// CAROUSEL FOR RAU/RNZ HERO CARDS\n\t\t\tvar slide = document.getElementsByClassName(\"hero_-slide\");// WEBAE3-3645 - disable test\n\n\t\t\tif(slide.length !== 0) {\n\t\t\t\tvar heroCardIndex = 0;\n\t\t\t\tfunction carousel() {\n\t\t\t\t\tvar i;\n\t\t\t\t\tslide[0].style.display = \"block\";\n\t\t\t\t\tfor (i = 0; i < slide.length; i++) {\n\t\t\t\t\t\tslide[i].style.display = \"none\";\n\t\t\t\t\t}\n\t\t\t\t\theroCardIndex++;\n\t\t\t\t\tif (heroCardIndex > slide.length) {heroCardIndex = 1}\n\t\t\t\t\t$(slide[heroCardIndex-1]).css('opacity', 1)\n\t\t\t\t\t\t\t\t.show('slide', {direction: 'right'}, 1500)\n\t\t\t\t\t\t\t\t.animate(\n\t\t\t\t\t\t\t\t\t{ opacity: 1 },\n\t\t\t\t\t\t\t\t\t{ queue: false, duration: 2000 }\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\tsetTimeout(carousel, 7000); // Change hero card every 7 seconds\n\t\t\t\t}\n\t\t\t\tcarousel();\n\t\t\t}\n\t\t},\n\t\tdisableClicks: function () {\n\t\t\tUI.props.clicksDisabled = true;\n\t\t},\n\t\tenableClicks: function () {\n\t\t\tUI.props.clicksDisabled = false;\n\t\t},\n\t\tmanageResize: function () {\n\t\t\tvar siteViewType = AE.getSiteViewType();\n\n\t\t\t// Changing the target event for body clicks, changing to touchend when using a mobile device.\n\t\t\tUI.props.bodyEvent = ($('html').hasClass('ua-mobile')) ? 'touchend' : 'click';\n\n\t\t\t/*\n\t\t\tNOTE: The $mainFooterTogglees start with the \"visuallyhidden\" class so they don't flash into view upon palm-sized page load. This is\n\t\t\tsorted out by the initial run of manageResize() so they will be properly visible on a desk-sized page load.\n\n\t\t\t* Added check if toggle was already open on resize to leave it at it's current state.\n\t\t\t*/\n\t\t\t$('.hasDatepicker')\n\t\t\t\t.datepicker('hide')\n\t\t\t\t.on('click', function () {\n\t\t\t\t\t$(this).datepicker('show')\n\t\t\t\t});\n\n\t\t\t/* Mobile toggles only work at lap and down sizes. */\n\t\t\t$('.toggler.toggler--portable')\n\t\t\t\t.each(function (index) {\n\t\t\t\t\tvar $togglee = $(this)\n\t\t\t\t\t\t.closest('.toggle')\n\t\t\t\t\t\t.find('.togglee');\n\n\t\t\t\t\tif (siteViewType === 'desk' || siteViewType === 'desk-wide') {\n\t\t\t\t\t\t$(this).addClass('open');\n\t\t\t\t\t\tUI.show($togglee);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(this).removeClass('open');\n\t\t\t\t\t\tUI.hide($togglee);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t/* Palm-only toggles only work at palm size, so they need to be closed initially. */\n\t\t\t$('.toggler.toggler--palm')\n\t\t\t\t.each(function (index) {\n\t\t\t\t\tvar $togglee = $('' + $(this).data('togglee') + '');\n\n\t\t\t\t\t// Insurance options Shenanigans  with Plus and Minus state, different than other toggles\n\t\t\t\t\tvar insurance = ($(this).closest('#insuranceUI').length) ? true : false;\n\t\t\t\t\tvar pmOptionsStop = ($(this).hasClass('open') && !$togglee.hasClass('visuallyhidden')) ? false : true;\n\n\t\t\t\t\tif (siteViewType === 'palm') {\n\t\t\t\t\t\tif (insurance) {\n\t\t\t\t\t\t\tif (pmOptionsStop) {\n\t\t\t\t\t\t\t\thideToggle($(this), $togglee);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thideToggle($(this), $togglee);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!pmOptionsStop) {\n\t\t\t\t\t\t\t$(this).addClass('open');\n\t\t\t\t\t\t\tUI.show($togglee);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (insurance) {\n\t\t\t\t\t\t\tif (!pmOptionsStop) {\n\t\t\t\t\t\t\t\tshowToggle($(this), $togglee);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tshowToggle($(this), $togglee);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction hideToggle($toggler, $togglee) {\n\t\t\t\t\t\t$toggler.removeClass('open');\n\t\t\t\t\t\tUI.hide($togglee);\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction showToggle($toggler, $togglee) {\n\t\t\t\t\t\t$toggler.addClass('open');\n\t\t\t\t\t\tUI.show($togglee);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t/* Toggles for larger sizes don't work at this size, so they need to be opened. */\n\t\t\t$('.toggler.toggler--lap-and-up').each(function (index) {\n\t\t\t\tvar $togglee = $(this).closest('.toggle').find('.togglee');\n\n\t\t\t\t/* Open non-palm toggles upon resize in palm view. */\n\t\t\t\tif (siteViewType === 'palm') {\n\t\t\t\t\t$(this).addClass('open');\n\t\t\t\t\tUI.show($togglee);\n\t\t\t\t} else {\n\t\t\t\t\t$(this).removeClass('open');\n\t\t\t\t\tUI.hide($togglee);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/*\n\t\t\t\tTogglees that need to be open and delay befor then closing.\n\t\t\t\tNOTE: Need to add data size on togglee to target delay by type or all\n\t\t\t*/\n\t\t\t$('.togglee--delay-close').each(function (index) {\n\t\t\t\tvar $togglee = $(this);\n\t\t\t\tvar deviceSize = ($togglee.data('size') !== undefined) ? $togglee.data('size') : '';\n\t\t\t\tvar palm = ($togglee.hasClass('delay--palm')) ? 'palm' : '';\n\t\t\t\tvar lap = ($togglee.hasClass('delay--lap')) ? 'lap' : '';\n\t\t\t\tvar desk = ($togglee.hasClass('delay--desk')) ? 'desk' : '';\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t_.each([palm, lap, desk], function (device) {\n\t\t\t\t\t\tif (AE.getSiteViewType() === device) {\n\t\t\t\t\t\t\tvar passSize = (deviceSize !== '') ? '--' + device : '';\n\t\t\t\t\t\t\tUI.hide($togglee, passSize);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}, 2000);\n\t\t\t});\n\t\t},\n\t\tonBodyClick: function (event, $target) {\n\n\t\t\t// Add scroll to top of this id selector\n\t\t\tif($target.hasClass('btn--back2top') || $($target.parent()).hasClass('btn--back2top')){\t\t\t\t\t\n \t\t\t\tdocument.getElementById('sticky-wrapper').scrollIntoView();\t\t\n \t\t\t}\n\n\t\t\t/*  HANDLE TOGGLES:\n\t\t\t\tA container with a class of \".toggle\" contains a \".toggler\" and a \"togglee\". They don't have\n\t\t\t\tto be siblings. They can be in grids and other containers, so long as they can track upward to the same parent.\n\t\t\t\t\n\t\t\t\tFor manual toggles, use both classes: \"toggler\" and \"toggler--manual\". The toggler class will apply the proper\n\t\t\t\tCSS to the element, and the toggler--manual class will prevent it from functioning automatically.\n\t\t\t\t\n\t\t\t\tManual toggles require specific code to run the handleToggle() function, but they can add a callback function.\n\t\t\t\tSend in a jQuery collection of your toggler, the name of your function and an array of arguments.\n\t\t\t\t\n\t\t\t\tExample: AE.ui.handleToggle( $myToggler, myFunctionName, [arg1, arg2, arg3] );\n\t\t\t*/\n\t\t\tif ($target.hasClass('toggler') && !$target.hasClass('toggler--manual')) {\n\t\t\t\tUI.handleToggle($target);\n\t\t\t}else if($target.prop('tagName') !== 'INPUT' && !$target.hasClass('grid__item-ta-modifier')){// WEBAE3-3866 - don't run closeToggle when user clicks an input to start entering values - LJW\n\t\t\t\tvar $target = $(event.target);// now it's a jQuery object\n\t\t\t\tvar $toggleeContainer = $target.closest('.matrix_filter');\n\t\t\t\tvar $taModChildren = $target.find('.grid__item-ta-modifier');\n                var checkout_process = $('body#options').length || $('body#upgrade').length|| $('body#checkout').length == 0;\n\t\t\t\tif($toggleeContainer.length == 0 && $taModChildren.length == 0 && !checkout_process) {\n\t\t\t\t\tUI.closeToggle();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Test environment for staging and production - QA1, QA2, QA3, QA4, and PTEST\n\t\t\tif ($target.hasClass('test_environment')) {\n\t\t\t\tAECookie.update('PTEST', 'no', 0); //remove the ptest cookie\n\t\t\t\tvar qaCookie = (AECookie.read('QA')) ? '?QA=false' : '';\n\t\t\t\twindow.location.href = '/'+qaCookie; //reset the stage/test environment back to the base\n\t\t\t}\n\t\t\t\n\t\t\t// ENABLER ELEMENT - toggle disabled property of a selected element\n\t\t\tif ($target.hasClass('trg__enabler') && $target.data('enablee')) {\n\t\t\t\tif ($target.hasClass('enabler--on')) {\n\t\t\t\t\t$($target.data('enablee')).prop('disabled', true);\n\t\t\t\t\t$target.removeClass('enabler--on');\n\t\t\t\t} else {\n\t\t\t\t\t$($target.data('enablee')).prop('disabled', false);\n\t\t\t\t\t$target.addClass('enabler--on');\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Matrix Results, Utility bar, Modify & Optional Eq - More Info Tips\n\t\t\tif ($target.hasClass('more-info-tip')) {\n\t\t\t\t//WEBAE-4574 catch cancel modal triggers\n\t\t\t\tif ($target.attr('data-modalname')==\"cancelModal\"){\n\t\t\t\t\tAE.booking.cancelModal();\n\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\tAE.ui.dialog.launch({\n\t\t\t\t\ttype: 'infoTip',\n\t\t\t\t\tpos: {\n\t\t\t\t\t\tmy: 'left top',\n\t\t\t\t\t\tat: 'left bottom+5',\n\t\t\t\t\t\tof: $target\n\t\t\t\t\t},\n\t\t\t\t\tselector: $target.children('.more-info-text')\n\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\n\t\t\t}\n\n\t\t\t// For pages which aren't part of the buyback or luxury portions of the booking system, we're going to have a special\n\t\t\t// link for \"iCommunicator Voice Over IP\". This is only shown on desktop, and opens a pop-up window.\n\t\t\tif ($target.hasClass('voip-link')) {\n\t\t\t\tAE.ga.gaArrayProcess([{\n\t\t\t\t\tGACATEGORY: 'VOIP',\n\t\t\t\t\tGAACTION: 'click'\n\t\t\t\t}]);\n\t\t\t\tvar clientID = $target.data('voipcode');\n\t\t\t\t\n\t\t\t\tif ($target.hasClass('icomm_direct') || (clientID == '8fb2338n0n5w2bj7' || clientID == 'ecz610fox8q57dgn' || clientID == 'o3lwm3e04730w06o')) {\n\t\t\t\t\twindow.open(\"http://client.icommconnect.com/Home/DirectCall?contactGuid=\" + clientID + \"\", \"\", \"scrollbars=yes,width=360, height=640\");\n\t\t\t\t} else {\n\t\t\t\t\t// hasClass 'icomm_directory'\n\t\t\t\t\twindow.open(\"http://client.icommconnect.com/Home/Call?clientSubscriptionGUId=\" + clientID + \"\", \"\", \"scrollbars=yes,width=360, height=640\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// 8x8 co-browsing\n\t\t\tif ($target.hasClass('co_browse_site')) {\n\t\t\t\treturn UI.call8x8CoBrowsing(event);\n\t\t\t}\n\t\t},\n\t\tmanageBodyClick: function (event) {\n\t\t\t/* Cycle through Body Click tasks */\n\t\t\tif (UI.props.clicksDisabled) {\n\t\t\t\treturn\n\t\t\t};\n\t\t\t// This module listens to 'click' and 'touchend' events to run this function. To prevent it from firing\n\t\t\t// twice, we keep a string in the props object to indicate which one to use. The event.type string in\n\t\t\t// the event object must match this module prop string in order to go forward. For example, if a tablet\n\t\t\t// registers both events, then the 'click' will cause this function to return, while the 'touchent' call\n\t\t\t// will run this function normally.\n\t\t\t//\n\t\t\t// This is important in case some brand of tablets decides to abandon click in favor of touchend. Since\n\t\t\t// the bodyEvent property initializes as an empty string, this line will also prevent toggles from working\n\t\t\t// until the property is populated by the name of the appropriate event.\n\t\t\t//if(event.type !== UI.props.bodyEvent) { return; }\n\n\t\t\tvar $target = $(event.target);\n\n\t\t\t// Run through all of the registered body click tasks in our codebase.\n\t\t\tfor (var i = 0; i < UI.bodyClickTasks.length; i++) {\n\t\t\t\t// Even if no arguments were passed in, the args array was still established as an empty array when\n\t\t\t\t// the task is added to the array. The first two arguments will be the event and target, with other\n\t\t\t\t// arguments following after. A new array is made with each loop iteration so that previous arguments\n\t\t\t\t// cannot carry over into subsequent iterations.\n\t\t\t\tvar arrArgs = [event, $target].concat(UI.bodyClickTasks[i].args);\n\n\t\t\t\t// Using the apply method, we'll pass in \"this\" from the perspective of this function, using the\n\t\t\t\t// arguments from the task object. So if you were to establish some sort of property like \"this.thing\"\n\t\t\t\t// then every bodyClick function in every module would have access to this.thing. We don't really do\n\t\t\t\t// that, however. Most of these functions simply require the event object and the first thing they\n\t\t\t\t// want to do is establish a jQuery collection of the event target. To save lines, we do this here\n\t\t\t\t// and pass it in.\n\t\t\t\tUI.bodyClickTasks[i].func.apply(this, arrArgs);\n\t\t\t};\n\t\t},\n\t\taddBodyClickTask: function (task) {\n\t\t\t/*\n\t\t\tAdds an object with a func property that is function taking the\n\t\t\tevent object as its ONLY argument to an array of functions.\n\t\t\tOn a body change event, these functions will be executed using\n\t\t\tthe apply() method in manageBodyClick() to pass in the correct target on each event.\n\n\t\t\tEach 'task' should start by performing logic on the event target to determine whether it should run.\n\n\t\t\tAE.ui.addBodyClickTask(\n\t\t\t\t{\n\t\t\t\tfunc:function(event){\n\t\t\t\t\tif(event meets criteria){\n\t\t\t\t\tdo stuff\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\t*/\n\n\t\t\t// Make sure that the args array is an array if it wasn't defined.\n\t\t\ttask.args = task.args || [];\n\t\t\tUI.bodyClickTasks.push(task);\n\t\t},\n\t\tmanageBodyChange: function (event) {\n\t\t\t/* Cycle through Body Change tasks */\n\t\t\t// Explanations for this code are documented above in body click management\n\t\t\tvar $target = $(event.target);\n\t\t\tfor (var i = 0; i < UI.bodyChangeTasks.length; i++) {\n\t\t\t\tvar arrArgs = [event, $target].concat(UI.bodyChangeTasks[i].args);\n\t\t\t\tUI.bodyChangeTasks[i].func.apply(this, arrArgs);\n\t\t\t};\n\t\t},\n\t\taddBodyChangeTask: function (task) {\n\t\t\t/*\n\t\t\tAdds an object with a func property that is function taking the\n\t\t\tevent object as its ONLY argument to an array of functions.\n\t\t\tOn a body change event, these functions will be executed using\n\t\t\tthe apply() method in manageBodyChange() to pass in the correct target on each event.\n\n\t\t\tEach 'task' should start by performing logic on the event target to determine whether it should run.\n\n\t\t\tAE.ui.addBodyChangeTask(\n\t\t\t\t{\n\t\t\t\tfunc:function(event){\n\t\t\t\t\tif(event meets criteria){\n\t\t\t\t\tdo stuff\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\t*/\n\t\t\ttask.args = task.args || [];\n\t\t\tUI.bodyChangeTasks.push(task);\n\t\t},\n\t\taddSpinner: function (selector, settings) {\n\t\t\t/*\n\t\t\tTurns an element into a relatively-positioned container for a spinner element, then adds the spinner. FontAwesome\n\t\t\tis used for the spinner itself, and it's rotated with CSS.\n\n\t\t\tExample call: AE.ui.addSpinner('.my-selector', { size:'5x', color: 'white' });\n\t\t\tThe size can be any size provided by FontAwesome. A value of '5x' results in a class of \"fa-5x\". The color can be\n\t\t\tthe default gray, white or black. Hex values may not be passed in because we don't want every developer to use a\n\t\t\tdifferent color every time. Three colors is plenty.\n\t\t\t*/\n\t\t\tvar $target = $(selector);\n\t\t\tsettings = settings || {};\n\t\t\tvar sizeClass = settings.size ? ' fa-ae-' + settings.size : '';\n\n\t\t\t/* If a color setting is passed in, white or black is used instead of relying upon the default gray in the CSS. */\n\n\t\t\t$target\n\t\t\t\t.addClass('spinner__container')\n\t\t\t\t.find('.spinner__div').parent()\n\t\t\t\t.remove()\n\t\t\t\t.end();\n\n\n\t\t\tif(AE.props.siteCode !== 'FCR') {\n\t\t\t\t$target.append('<div class=\"wrap\"><div class=\"spinner__div align-center' + sizeClass + '\"><i class=\"spinner fa fa-ae-spinner fa-spin' + sizeClass + ' \" aria-hidden=\"true\"></i></div></div>');\n\t\t\t} else {\n\t\t\t\tfunction isIE() {\n\t\t\t\t\tvar ua = window.navigator.userAgent; //Check the userAgent property of the window.navigator object\n\t\t\t\t\tvar msie = ua.indexOf('MSIE '); // IE 10 or older\n\t\t\t\t\tvar trident = ua.indexOf('Trident/'); //IE 11\n\t\t\t\t\n\t\t\t\t\treturn (msie > 0 || trident > 0);\n\t\t\t\t}\n\t\t\t\tif(isIE()) {\n\t\t\t\t\t$target.append('<div class=\"wrap\"><div class=\"spinner__div align-center\"><div class=\"preloader-wrapper small active\"><div class=\"spinner-layer spinner-blue-only\"><div class=\"circle-clipper left\"><div class=\"circle\"></div></div><div class=\"gap-patch\"><div class=\"circle\"></div></div><div class=\"circle-clipper right\"><div class=\"circle\"></div></div></div></div></div></div>');\n\t\t\t\t} else {\n\t\t\t\t\t$target.append('<div class=\"wrap\"><div class=\"spinner__div align-center' + sizeClass + '\"><div style=\"position:relative\"><div class=\"indeterminate-circle\"><svg version=\"1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100%\" height=\"100%\" viewBox=\"0 0 24 24\"><path id=\"indeterminate\" d=\"M12 3.25A8.75 8.75 0 1 1 3.25 12\" fill=\"none\" stroke-width=\"2.5\" stroke-linecap=\"square\" stroke=\"#0072EA\"/></svg></div></div></div></div>');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (settings.color) {\n\t\t\t\tif ((settings.color.indexOf('#') != -1)) {\n\t\t\t\t\t$target.find('.spinner').css({\n\t\t\t\t\t\t'color': settings.color\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvar colorClass = (settings.color === 'white') ? 'spinner--white' : 'spinner--black';\n\t\t\t\t\t$target.find('.spinner').addClass(colorClass);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$target.find('.spinner__div').parent().css('min-height', ($target.find('.spinner__div').outerHeight(true)) + 'px');\n\n\t\t\tif (settings.noWobble) {\n\t\t\t\tvar noWobbleClass = 'no-wobble';\n\t\t\t\t$target.find('.spinner').addClass(noWobbleClass);\n\t\t\t}\n\n\t\t},\n\t\tremoveSpinner: function (selector) {\n\t\t\t$(selector).removeClass('spinner__container').find('.spinner__div').parent().remove();\n\t\t},\n\t\tapplyJQUI: function (selector) { // Applies Common jQueryUI widget behaviors to elements with trigger classes in selected container\n\t\t\t// Get the jQuery selector for the CONTAINER element\n\t\t\tselector = selector || 'body';\n\t\t\t\n\t\t\t// This applies the jQueryUI datepicker method to all input elements with the datePickerInput class\n            $(selector + ' input.datePickerInput').datepicker();\n\t\t\t\n\t\t\t// Set an \"onSelect\" event globally to all datePicker form fields on the page\n\t\t\t$(selector + ' input.datePickerInput')\n\t\t\t\t.datepicker(\"option\", \"onSelect\", function (dateText, inst) {\n\t\t\t\t\tif (this.dataset && this.dataset.endDatePicker && this.dataset.endDatePicker.length) {\n\t\t\t\t\t\tvar startDate = new Date(dateText);\n\t\t\t\t\t\tvar duration = this.dataset.minDuration || 0;\n\t\t\t\t\t\tif ($.isNumeric(duration) && duration >= 0) {\n\t\t\t\t\t\t\tstartDate.setDate(startDate.getDate() + duration);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$($.trim(this.dataset.endDatePicker)).datepicker(\"option\", \"minDate\", startDate);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\n\t\t\t$(selector + ' input.datePickerInput').prop(\"readonly\", true);\n\t\t\t\n\t\t\t/* Additional DatePicker calendar parameters */\n\t\t\t// Loop through all of the DatePickers on the page\n\t\t\tfor (var i = 0; i < $(selector + ' input.datePickerInput').length; i++) {\n\t\t\t\t// Get a pointer to the current DatePicker\n\t\t\t\tvar currentDatePicker = $(selector + ' input.datePickerInput')[i];\n\n\t\t\t\t// Read the data attribute about what kind of DatePicker this is\n\t\t\t\tvar pickerType = $(currentDatePicker).attr('data-pickertype');\n\n\t\t\t\t// If there is a date already chosen, get it\n\t\t\t\tvar pickerValue = $(currentDatePicker).val();\n\t\t\t\t\n\t\t\t\t// Call a function to configure this specific DatePicker\n\t\t\t\tconfigureCurrentDatePicker($(currentDatePicker), pickerType, pickerValue);\n\t\t\t}\n\n\t\t\t/* Function to configure specific DatePicker parameters */\n\t\t\tfunction configureCurrentDatePicker(currentDatePicker, pickerType, pickerValue) {\n\t\t\t\tvar yearUpperRange, yearLowerRange, dp_options = {};\n\t\t\t\tswitch (pickerType) {\n\t\t\t\t\tcase \"birthdate\":\n\t\t\t\t\tcase \"birthdateNotReq\":\n\t\t\t\t\t\n\t\t\t\t\t\t// DatePicker used for \"date of birth\"\n\t\t\t\t\t\tyearUpperRange = $.datepicker.formatDate(\"yy\", new Date()) - 18;\n\t\t\t\t\t\tif (pickerValue == \"\") {\n\t\t\t\t\t\t\tpickerValue = (pickerType == \"birthdateNotReq\") ? pickerValue : \"-18y\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar setminDate = \"-18y\";\n\t\t\t\t\t\thiddenDob = $(\"input#hidden-dob-date\").val();\n\n\t\t\t\t\t\tif(hiddenDob.length){\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thiddenDob = $.datepicker.parseDate('yy-mm-dd', hiddenDob);\n\t\t\t\t\t\t\t//pickerValue = hiddenDob;\n\t\t\t\t\t\t\tpickerValue = new Date(hiddenDob);\n\t\t\t\t\t     } \n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\thideIfNoPrevNext: true,\n\t\t\t\t\t\t\tchangeMonth: true,\n\t\t\t\t\t\t\tchangeYear: true,\n\t\t\t\t\t\t\tyearRange: \"1900:\" + yearUpperRange,\n\t\t\t\t\t\t\tminDate: new Date(\"01/01/1900\"),\n\t\t\t\t\t\t\tdefaultDate: setminDate,\n\t\t\t\t\t\t\tsetDate: pickerValue,\n\t\t\t\t\t\t\taltField: '#hidden-dob-date',\n\t\t\t\t\t\t\taltFormat: 'mm-dd-yy'\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(hiddenDob.length !=0){currentDatePicker.datepicker(\"setDate\", pickerValue);} \n\t\t\t\t\t\t// Should we show or hide the \"clear datepicker input form field\" option\n\t\t\t\t\t\tif (pickerValue == \"\") {\n\t\t\t\t\t\t\t$('span.ui-datepicker-target-input').hide();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$('span.ui-datepicker-target-input').show();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\t\t\t\t\n\t\t\t\t\tcase \"expires\":\n\t\t\t\t\t\t// Datepicker used for things that expire in the future\n\t\t\t\t\t\tyearUpperRange = parseInt($.datepicker.formatDate(\"yy\", new Date())) + 20;\n\t\t\t\t\t\tyearLowerRange = parseInt($.datepicker.formatDate(\"yy\", new Date()));\n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\thideIfNoPrevNext: true,\n\t\t\t\t\t\t\tchangeMonth: true,\n\t\t\t\t\t\t\tchangeYear: true,\n\t\t\t\t\t\t\tyearRange: yearLowerRange + \":\" + yearUpperRange,\n\t\t\t\t\t\t\tminDate: new Date(),\n\t\t\t\t\t\t\tsetDate: \"\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"report\":\n\t\t\t\t\t\n\t\t\t\t\t\t// DatePicker used for \"date of birth\"\n\t\t\t\t\t\t//yearUpperRange = $.datepicker.formatDate(\"yy\", new Date()) - 18;\n\t\t\t\t\t\tif (pickerValue == \"\") {\n\t\t\t\t\t\t\tpickerValue = (pickerType == \"birthdateNotReq\") ? pickerValue : \"-18y\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//var setminDate = \"-18y\";\n\t\t\t\t\t\thiddenReport = $(\"input#hiddenreportdate\").val();\n\n\t\t\t\t\t\tif(hiddenReport.length){\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thiddenReport = $.datepicker.parseDate('yy-mm-dd', hiddenReport);\n\t\t\t\t\t\t\tpickerValue = new Date(hiddenReport);\n\t\t\t\t\t     } \n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\thideIfNoPrevNext: true,\n\t\t\t\t\t\t\tchangeMonth: true,\n\t\t\t\t\t\t\tchangeYear: true,\n\t\t\t\t\t\t\t//yearRange: \"1900:\" + yearUpperRange,\n\t\t\t\t\t\t\tminDate: new Date(\"01/01/1900\"),\n\t\t\t\t\t\t\t//defaultDate: setminDate,\n\t\t\t\t\t\t\tmaxDate: new Date(),\n\t\t\t\t\t\t\tsetDate: pickerValue,\n\t\t\t\t\t\t\taltField: '#hiddenreportdate',\n\t\t\t\t\t\t\taltFormat: 'mm-dd-yy'\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(hiddenReport.length !=0){currentDatePicker.datepicker(\"setDate\", pickerValue);} \n\t\t\t\t\t\t// Should we show or hide the \"clear datepicker input form field\" option\n\t\t\t\t\t\tif (pickerValue == \"\") {\n\t\t\t\t\t\t\t$('span.ui-datepicker-target-input').hide();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$('span.ui-datepicker-target-input').show();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\t\n\t\t\t\t\tcase \"report2\":\n\t\t\t\t\t\n\t\t\t\t\t\t// DatePicker used for \"date of birth\"\n\t\t\t\t\t\t//yearUpperRange = $.datepicker.formatDate(\"yy\", new Date()) - 18;\n\t\t\t\t\t\tif (pickerValue == \"\") {\n\t\t\t\t\t\t\tpickerValue = (pickerType == \"birthdateNotReq\") ? pickerValue : \"-18y\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//var setminDate = \"-18y\";\n\t\t\t\t\t\thiddenReport = $(\"input#hiddenreportdate2\").val();\n\n\t\t\t\t\t\tif(hiddenReport.length){\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thiddenReport = $.datepicker.parseDate('yy-mm-dd', hiddenReport);\n\t\t\t\t\t\t\tpickerValue = new Date(hiddenReport);\n\t\t\t\t\t     } \n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\thideIfNoPrevNext: true,\n\t\t\t\t\t\t\tchangeMonth: true,\n\t\t\t\t\t\t\tchangeYear: true,\n\t\t\t\t\t\t\t//yearRange: \"1900:\" + yearUpperRange,\n\t\t\t\t\t\t\tminDate: new Date(\"01/01/1900\"),\n\t\t\t\t\t\t\t//defaultDate: setminDate,\n\t\t\t\t\t\t\tmaxDate: new Date(),\n\t\t\t\t\t\t\tsetDate: pickerValue,\n\t\t\t\t\t\t\taltField: '#hiddenreportdate2',\n\t\t\t\t\t\t\taltFormat: 'mm-dd-yy'\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(hiddenReport.length !=0){currentDatePicker.datepicker(\"setDate\", pickerValue);} \n\t\t\t\t\t\t// Should we show or hide the \"clear datepicker input form field\" option\n\t\t\t\t\t\tif (pickerValue == \"\") {\n\t\t\t\t\t\t\t$('span.ui-datepicker-target-input').hide();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$('span.ui-datepicker-target-input').show();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\t\n\t\t\t\t\tcase \"issued\":\n                        if(AE.props.siteCode == 'DAU' || AE.props.siteCode == 'DNZ' || AE.props.siteCode == 'DAP') {\n                            dp_options = {\n\t\t\t\t\t\t\t\tbeforeShow: function (input, inst) {\n                                    setTimeout(function() {\n                                        var dpoffset = currentDatePicker.offset();\n                                        var dpheight = currentDatePicker.outerHeight();\n                                        var top = dpoffset.top + dpheight;\n                                        \n                                        inst.dpDiv.css({\n                                            top: top,\n                                            left: dpoffset.left\n                                        });\n                                    }, 0);\n                                }\n                            };\n                            break;\n                        }\n\t\t\t\t\tcase \"issuedExt\":\n\t\t\t\t\t\t// DatePicker used for things in the past like a \"date of issue\"\n\t\t\t\t\t\tyearUpperRange = parseInt($.datepicker.formatDate(\"yy\", new Date()));\n\t\t\t\t\t\tyearRangeSize = (pickerType === 'issuedExt' && AE.props.chaosSystem === 'EU')? 100 : 20;\n\t\t\t\t\t\tyearLowerRange = parseInt($.datepicker.formatDate(\"yy\", new Date())) - yearRangeSize;\n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\thideIfNoPrevNext: true,\n\t\t\t\t\t\t\tchangeMonth: true,\n\t\t\t\t\t\t\tchangeYear: true,\n\t\t\t\t\t\t\tyearRange: yearLowerRange + \":\" + yearUpperRange,\n\t\t\t\t\t\t\tminDate: new Date(\"01/01/\" + yearLowerRange),\n\t\t\t\t\t\t\tmaxDate: new Date(),\n\t\t\t\t\t\t\tsetDate: \"\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"lookup\":\n\t\t\t\t\t\t// DatePicker used to lookup a voucher\n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\taltFormat: \"mm-dd-yy\",\n\t\t\t\t\t\t\taltField: \"#dateToPassAlong\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gps_pu\":\n\t\t\t\t\t\t// DatePicker used on the GPS form\n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\t// dateFormat: \"mm/dd/yy\",\n\t\t\t\t\t\t\taltFormat: \"mm-dd-yy\",\n\t\t\t\t\t\t\tminDate: new Date(),\n\t\t\t\t\t\t\tsetDate: \"\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// Removed for WEBAE3-1652\n\t\t\t\t\t\t// currentDatePicker.attr(\"placeholder\", $.datepicker.formatDate(currentDatePicker.datepicker(\"option\", \"dateFormat\"), new Date()));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gps_do\":\n\t\t\t\t\t\t// DatePicker used on the GPS form\n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\t// dateFormat: \"mm/dd/yy\",\n\t\t\t\t\t\t\taltFormat: \"mm-dd-yy\",\n\t\t\t\t\t\t\tminDate: new Date(),\n\t\t\t\t\t\t\tsetDate: \"\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// Removed for WEBAE3-1652\n\t\t\t\t\t\t// currentDatePicker.attr(\"placeholder\", $.datepicker.formatDate(currentDatePicker.datepicker(\"option\", \"dateFormat\"), new Date()));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datepaid\":\n\t\t\t\t\t\t// DatePicker used on the DAP advise electronic payment form\n\t\t\t\t\t\t// This is specifically written for Sydney, AU time. dapDatePaidMax and dapDatePaidMin are created in CF and sent to JS in mod_ds_actions.cfm.\n\t\t\t\t\t\t\n\t\t\t\t\t\t/*console.log(dapDatePaidMax);\n\t\t\t\t\t\tconsole.log(dapDatePaidMin);*/\n\t\t\t\t\t\t\n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\t// dateFormat: \"mm/dd/yy\",\n\t\t\t\t\t\t\taltFormat: \"mm-dd-yy\",\n\t\t\t\t\t\t\tminDate: dapDatePaidMin,\n\t\t\t\t\t\t\tmaxDate: dapDatePaidMax,\n\t\t\t\t\t\t\tsetDate: dapDatePaidMax\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// All other DatePickers\n\t\t\t\t\t\tdp_options = {\n\t\t\t\t\t\t\tminDate: new Date(),\n\t\t\t\t\t\t\tsetDate: new Date()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdp_options.onSelect = function (dateText) {\n\t\t\t\t\tif ($(this).attr('required') && dateText != '') {\n\t\t\t\t\t\t$(this).parent()\n\t\t\t\t\t\t\t.removeClass(\"ui-state-invalid\")\n\t\t\t\t\t\t\t.addClass(\"ui-state-valid\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t$(this).next('span.ui-error-message').remove();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tdp_options.onClose = function (dateText) {\n\t\t\t\t\tif ($(this).is('[dpStartDate]')) {\n\t\t\t\t\t\tvar startDate = new Date(dateText);\n\t\t\t\t\t\tvar endDateElement = document.querySelector('input.datePickerInput[dpEndDate]');\n\t\t\t\t\t\tif (endDateElement) {\n\t\t\t\t\t\t\t$(endDateElement).datepicker(\"option\", \"minDate\", startDate);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// Apply the above datepicker options\n\t\t\t\tcurrentDatePicker.datepicker(\"hide\").datepicker(\"destroy\").blur();\n\t\t\t\tcurrentDatePicker.datepicker(dp_options);\n\t\t\t\t\n\t\t\t\t$(AE.ui.props.scrollContainer)[0].addEventListener('scroll', function (e) {\n\t\t\t\t\tcurrentDatePicker.datepicker('hide').on('click', function () {\n\t\t\t\t\t\tcurrentDatePicker.datepicker('show');\n\t\t\t\t\t});\n\t\t\t\t}, {\n\t\t\t\t\tpassive: true\n\t\t\t\t});\n\t\t}\n\n\t\t\t// Keep the datepicker field empty on the forms found on these pages\n\t\t\tvar pagesWithEmptyDatepickerFields = [\"/driver-profile/\", \"/beatrate/\"];\n\t\t\tif (pagesWithEmptyDatepickerFields.includes(AE.url.props.path)) {\n\t\t\t\t//$(selector+' input.datePickerInput').datepicker('setDate','')\n\t\t\t}\n\t\t\t\n\t\t\t// Pick Up Date field in voucher lookup form must be excluded from these rules per Karen 2017-01-26 NW\n\t\t\tif ($('#vouchpudate')[0]) {\n\t\t\t\t$.datepicker._clearDate($('#vouchpudate').datepicker('option', 'minDate', null));\n\t\t\t}\n\t\t\t\n\t\t\t// Pickup and Dropoff defaults for different services. Put correct class on given input\n\t\t\t$(selector + ' .tab_container').tabs();\n\t\t\t\n\t\t\t/* This code anticipates an element with the tab_container class to have a child UL\n\t\t\t\twith LIs of anchored links to subsequent children\n\t\t\t\tExample:\n\t\t\t\t<div class=\"tab_container\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"#tab_1\">First</a></li>\n\t\t\t\t\t<li><a href=\"#tab_2\">Second</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<div id=\"tab_1\">First</div>\n\t\t\t\t<div id=\"tab_2\">Second</div>\n\t\t\t\t</div>\n\t\t\t*/\n\t\t\t$(selector + ' .accordion_container').accordion({\n\t\t\t\theightStyle: 'content'\n\t\t\t});\n\t\t\t\n\t\t\t/* This code anticipates an element with the accordion_container class to have a\n\t\t\t\tseries of child header and div pairs\n\t\t\t\tExample:\n\t\t\t\t<div class=\"accordion_container\">\n\t\t\t\t<h6>First</h6>\n\t\t\t\t<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>\n\t\t\t\t<h6>Second</h6>\n\t\t\t\t<div>Phasellus mattis tincidunt nibh.</div>\n\t\t\t\t<h6>Third</h6>\n\t\t\t\t<div>Nam dui erat, auctor a, dignissim quis.</div>\n\t\t\t\t</div>\n\t\t\t*/\n\t\t\t$(selector + ' .accordion_container--collapsed').accordion({\n\t\t\t\tcollapsible: true,\n\t\t\t\tactive: false,\n\t\t\t\theightStyle: \"content\"\n\t\t\t}); // This accordion variant \"starts closed\" and sections will \"close\" if clicked after being \"opened\"\n\t\t},\n\t\tdecodeHtml: function (htmlStr) {\n\t\t\tvar txt = document.createElement(\"textarea\");\n\t\t\ttxt.innerHTML = htmlStr;\n\t\t\treturn txt.value;\n\t\t},\n\t\n\t\t/*\n\t\tWe have our own functions for some common jQuery methods to help with accessibility. The 'visuallyhidden' class moves an element\n\t\toff-screen but leaves it visible so that screen readers can still read it. The 'size' argument allows us to specifically target\n\t\tcertain sizes. For example, you could hide something only from the palm size. Leaving out the 'size' argument results in the\n\t\tregular 'visuallyhidden' class.\n\n\t\tThe code looks weird, so here are the steps:\n\n\t\tshow()\n\t\t1. Check the size, and set to an empty string if it isn't defined.\n\t\t2. Do a normal jQuery slideUp(). The element now has an inline style of \"display:none\".\n\t\t3. When finished, remove the 'visuallyhidden' class.\n\t\t4. Do a normal jQuery slideDown, but with a zero duration. The element is now displayed, but off-screen.\n\n\t\thide()\n\t\t1. Check the size, and set to an empty string if it isn't defined.\n\t\t2. Add the appropriate \"visuallyhidden\" class.\n\t\t4. Do a jQuery slideDown with a zero duration just to make sure that the element doesn't have \"display:none\" attached to it.\n\n\t\tslideUp()\n\t\t1. Check the size, and set to an empty string if it isn't defined.\n\t\t2. Do a jQuery slideUp() with a duration of 'fast'.The element now has an inline style of \"display:none\".\n\t\t3. When finished, add the appropriate \"visuallyhidden\" class.\n\t\t4. Do a normal jQuery slideDown, but with a zero duration. The element is now displayed, but off-screen.\n\n\t\tslideDown()\n\t\t1. Do a normal jQuery slideUp() to put \"display:none\" on the elements. This prevents it from becoming momentarily visible in the next step.\n\t\t2. When finished, remove all \"visuallyhidden\" classes. This eliminates the need for a size argument.\n\t\t3. Do a normal jQuery slideDown. The element is now displayed and on-screen.\n\t\t*/\n\t\tshow: function ($target, size) {\n\t\t\tsize = size || '';\n\t\t\t$target.slideUp(0, function () {\n\t\t\t\t$target.removeClass('visuallyhidden' + size).slideDown(0);\n\t\t\t});\n\t\t},\n\t\thide: function ($target, size) {\n\t\t\tsize = size || '';\n\t\t\t$target.addClass('visuallyhidden' + size).slideDown(0);\n\t\t},\n\t\tslideUp: function ($target, size) {\n\t\t\t/*\n\t\t\tIf the size has been passed in and if it's not an empty string, then prepend with dashes to build visibility class.\n\t\t\tOtherwise, leave it as an empty string so that we will wind up with just \"visuallyhidden\".\n\t\t\t*/\n\t\t\tsize = size || '';\n\t\t\t$target.slideUp('fast', function () {\n\t\t\t\t$target.addClass('visuallyhidden' + size).slideDown(0);\n\t\t\t});\n\t\t},\n\t\tslideDown: function ($target) {\n\t\t\t$target.slideUp(0, function () {\n\t\t\t\t$target\n\t\t\t\t\t.removeClass('visuallyhidden visuallyhidden--palm visuallyhidden--lap visuallyhidden--portable visuallyhidden--lap-and-up visuallyhidden--desk visuallyhidden--desk-wide')\n\t\t\t\t\t.slideDown('fast', function()\n                    {\n                        $target.removeClass('opening');\n                    });\n\t\t\t});\n\t\t},\n\t\tisVisuallyHidden: function ($target, size) {\n\t\t\t/* Returns true if the target is visually hidden at the given size. If no size is given, current size is used. */\n\t\t\tsize = size || AE.getSiteViewType();\n\t\t\treturn ($target.hasClass('visuallyhidden') || $target.hasClass('visuallyhidden' + size));\n\t\t},\n\t\thandleToggle: function ($toggler, objCallback, args) {\n\t\t\t// $toggler:  jQuery object representing your toggler.\n\t\t\t// callback:  The name of a function that you want to run along with the toggle. Not invoked, so no parentheses.\n\t\t\t// args:    An array of arguments to be applied to the function.\n\t\t\t//\n\t\t\t// Example: AE.ui.handleToggle( $myToggler, myFunctionName, [arg1, arg2, arg3] );\n\n\t\t\tvar $togglee = null,\n\t\t\t\t$toggleo = null,\n\t\t\t\tsize = $toggler.data('size');\n\n\t\t\t// If there's a data attribute for the togglee, then use that as a jQuery selector string. If not, then find the\n\t\t\t// parent \"toggle\" class and then drill down within that parent container to the element with the \"togglee\" class.\n\n\t\t\tif ($toggler.data('togglee')) {\n\t\t\t\t$togglee = $($toggler.data('togglee'));\n\n\t\t\t\t// Since there's a date attribute, look for any other elements with the same data attribute. This covers the\n\t\t\t\t// rare case when there are two different togglers which act upon the same target. A $toggler is just a jQuery\n\t\t\t\t// collection, so jQuery methods will be run on all elements within that collection. Chevrons will stay in sync.\n\t\t\t\t$toggler = $('[data-togglee=\"' + $toggler.data('togglee') + '\"]');\n\n\t\t\t} else {\n\t\t\t\t$togglee = $toggler.closest('.toggle').find('.togglee');\n\t\t\t}\n\n\t\t\tif ($toggler.data('toggleo')) {\n\t\t\t\t$toggleo = $($toggler.data('toggleo'));\n\t\t\t} else {\n\t\t\t\t$toggleo = $togglee;\n\t\t\t}\n\n\t\t\tif (!(\n\t\t\t\t\tsize === 'palm' ||\n\t\t\t\t\tsize === 'portable' ||\n\t\t\t\t\tsize === 'lap' ||\n\t\t\t\t\tsize === 'lap-and-up' ||\n\t\t\t\t\tsize === 'desk' ||\n\t\t\t\t\tsize === 'desk-wide'\n\t\t\t\t)) {\n\t\t\t\tsize = '';\n\t\t\t}\n\t\t\n\t\t\t// This is an on/off toggle using a slide animation. We use our own slideUp and slideDown functions.\n\n\t\t\t// If the subset has been passed in and if it's not an empty string, then prepend with dashes to build visibility class.\n\t\t\t// Otherwise, leave it as an empty string so that we will wind up with just \"visuallyhidden\".\n\t\t\tsize = (size !== '') ? ('--' + size) : '';\n\n\t\t\tif ($togglee.hasClass('visuallyhidden' + size)) {\n\t\t\t// Close any open filters first\n                var checkout_process = $('body#options').length || $('body#upgrade').length|| $('body#checkout').length == 0;\n\t\t\t\tif ($('.toggler').hasClass('open') && !$('.toggler').closest('#insuranceUI').length && !checkout_process) {\n                    $('.toggler').removeClass('open');\n\t\t\t\t\t$('.toggler').addClass('closed');\n\t\t\t\t\tUI.slideUp($('.styled--select .togglee'));\n                    \n                    // WEBAE3-4854 Handle closing of opened accordion FAQ questions\n                    UI.slideUp($('.US_Accordion .togglee'));\n\t\t\t\t}\n\t\t\t\t// Now open the the togglee\n                $toggler.removeClass('closed')\n                $toggler.addClass('open')\n                $togglee.addClass('opening'); // Opening the toggle target, so add the 'open' class.\n                UI.slideDown($togglee)\n            } else if(!$togglee.hasClass('opening')) {\n                $toggler.removeClass('open'); // Closing the toggle target, so remove the 'open' class.\n                $toggler.addClass('closed'); // Closing the toggle target, so remove the 'open' class.\n                UI.slideUp($togglee, size);\n            }\n\n            // Target an non nested header with an open class Modify Optional Eq has a cancel button that is an alternate toggler\n            if ($toggleo.hasClass('open')) {\n                $toggleo.removeClass('open');\n            }\n\n            // $('body').on('click', function () {\n            // \t$('.toggler').removeClass('open')\n            // \t$('.toggler').addClass('closed')\n            // \tUI.slideUp($('.togglee'));\n            // });\n\n            // After the slide up or down is activated, the optional callback object is handled, if it was passed in.\n            if (objCallback) {\n                objCallback.func.apply(this, objCallback.args);\n            }\n\t\t\t// }\n\t\t},\n\t\tcloseToggle: function () {\n            // WEABE3-3864 & 5526 - Plus Minus Headers shouldn't be part of the togglers auto-closed when something besides them gets clicked.\n\t\t\t$('.toggler:not(.toggle_pm_header):not(.package-header)').removeClass('open')\n\t\t\t$('.toggler:not(.toggle_pm_header):not(.package-header)').addClass('closed')\n\t\t\tUI.slideUp($('.styled--select .togglee'));\n\n\t\t\t// var $toggleParent = ([event.target][0].parentElement)\n\t\t\t// // console.log(\"&*&*&*&*&*&*&*&*&*&\")\n\t\t\t// // console.log($toggleParent)\n\t\t\t// if ($toggleParent !== $('.matrix_filter')[0]) {\n\t\t\t// \t$('.toggler').removeClass('open')\n\t\t\t// \t$('.toggler').addClass('closed')\n\t\t\t// \tUI.slideUp($('.togglee'));\n\t\t\t// }\n\t\t},\n\t\tcontentGroup: function ($controllers, $contentEls, settings) {\n\t\t\t/*\n\t\t\tSimilar to tabs, but not limited by markup. The $controllers argument is a jQuery collection of links which will show or hide\n\t\t\tcontent. The $contentEls argument is a jQuery selector which targets the various content areas. For example, a set of navigation\n\t\t\tlinks could have a class called 'controllers' and the content areas could have a class called 'content'.\n\n\t\t\tThe controller links each need to have a data attribute which will identify it's content area. This DOES NOT need to be an id.\n\t\t\tContent areas will be limited to the $contentEls collection, so the data attribute just needs to be unique in that context.\n\n\t\t\tNOTE: The settings object is optional, and is used to determine what kind of show/hide method will be used.\n\n\t\t\t1.\tSetting the \"willSlide\" boolean property to true will cause items to slide up or down instead of the default show/hide.\n\t\t\t2.\tThe \"visual\" property determins whether our own show/hide methods will be used instead of the standard jQuery versions.\n\t\t\t\tOur methods show, hide and slide up or down using the \"visuallyhidden\" class within the inuitcss framework. Since these\n\t\t\t\tare technically visible (although off-screen) we can't just use is(\":visible\") to see if an element is shown on-screen.\n\t\t\t\tThis function DOES NOT support the other forms of the \"visuallyhidden\" class used for media queries. It just uses the\n\t\t\t\tregular class.\n\n\t\t\tHere's an example of the markup:\n\n\t\t\t<nav>\n\t\t\t\t<a href class=\"myController\" data-content=\"stuff\">Stuff</a>\n\t\t\t\t<a href class=\"myController\" data-content=\"things\">Things</a>\n\t\t\t\t<a href class=\"myController\" data-content=\"doodad\">Doodads</a>\n\t\t\t\t<a href class=\"myController\" data-content=\"dinglehopper\">Dinglehopper</a>\n\t\t\t</nav>\n\t\t\t<div class=\"myContent\" data-content=\"stuff\">This is some stuff.</div>\n\t\t\t<div class=\"myContent\" data-content=\"things\">Here are some things.</div>\n\t\t\t<div class=\"myContent\" data-content=\"doodad\">Look at these doodads.</div>\n\t\t\t<div class=\"myContent\" data-content=\"dinglehopper\">Here is a dinglehopper.</div>\n\n\t\t\tYou would either add \"visuallyhidden\" or style=\"display:none\" to elements which will start out hidden.\n\n\t\t\tAnd then in your JavaScript:\n\t\t\tAE.ui.contentGroup( $('.myController'), $('.myContent') );\n\t\t\t*/\n\t\t\tvar options = $.extend({\n\t\t\t\t\twillSlide: false, // slide up/down or just show/hide\n\t\t\t\t\tvisual: false // display block/none or use \"visuallyhidden\" class\n\t\t\t\t},\n\t\t\t\tsettings // Object passed in will override default.\n\t\t\t);\n\n\t\t\tvar showHideFunc = (options.visual === true) ? visuallyToggle : showHide;\n\n\t\t\t$controllers.on(\"click\", function (event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t$controllers.not($(this)).removeClass('current');\n\t\t\t\t$(this).addClass('current');\n\n\t\t\t\t// Saving \"$(this)\" to variable for when we go into a different scope.\n\t\t\t\tvar $content = $contentEls.filter(\"[data-content='\" + $(this).data('content') + \"']\");\n\t\t\t\tshowHideFunc($contentEls, $content, options.willSlide);\n\t\t\t});\n\n\n\t\t\tfunction showHide($contentEls, $content, willSlide) {\n\n\t\t\t\tvar $otherEls = $([]),\n\t\t\t\t\t$targetEl = $([]);\n\n\t\t\t\t$contentEls.not($content).each(function (index) {\n\t\t\t\t\tvar $item = $(this);\n\t\t\t\t\tif ($item.is(':visible')) {\n\t\t\t\t\t\t$otherEls = $otherEls.add($item);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!$content.is(':visible')) {\n\t\t\t\t\t$targetEl = $targetEl.add($content);\n\t\t\t\t}\n\n\t\t\t\tif (willSlide) {\n\t\t\t\t\t// Using jQuery selectors to decide which ones to show or hide.\n\t\t\t\t\t$otherEls.slideUp();\n\t\t\t\t\t$targetEl.slideDown();\n\t\t\t\t} else {\n\t\t\t\t\t// Using jQuery selectors to decide which ones to show or hide.\n\t\t\t\t\t$otherEls.hide();\n\t\t\t\t\t$targetEl.show();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction visuallyToggle($contentEls, $content, willSlide) {\n\n\t\t\t\t// Empty at first, fill it up in a sec.\n\t\t\t\tvar $otherEls = $([]),\n\t\t\t\t\t$targetEl = $([]);\n\n\t\t\t\t$contentEls.not($content).each(function (index) {\n\t\t\t\t\tvar $item = $(this);\n\t\t\t\t\tif (!$item.hasClass('visuallyhidden')) {\n\t\t\t\t\t\t$otherEls = $otherEls.add($item);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ($content.hasClass('visuallyhidden')) {\n\t\t\t\t\t$targetEl = $targetEl.add($content);\n\t\t\t\t}\n\n\n\t\t\t\tif (willSlide) {\n\t\t\t\t\t// Using jQuery selectors to decide which ones to show or hide.\n\t\t\t\t\tAE.ui.slideUp($otherEls);\n\t\t\t\t\tAE.ui.slideDown($targetEl);\n\t\t\t\t} else {\n\t\t\t\t\t// Using jQuery selectors to decide which ones to show or hide.\n\t\t\t\t\tAE.ui.hide($otherEls);\n\t\t\t\t\tAE.ui.show($targetEl);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\n\t\t\n\n\t}\n\treturn UI;\n})();\n\n;\r\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\r\n\r\n/*\r\n    This object will be the returned result of a self-invoked function. This allows us to expose methods\r\n    for use by other modules while protecting some variables in a closure. If the object is already\r\n    defined then it's not altered. This prevents us from running the entire function each time one of its\r\n    internal methods are called.\r\n*/\r\nAE.ui.search = AE.ui.search || (function () {\r\n    'use strict';\r\n    /* DEPENDENCIES: Any other modules that this one will call */\r\n\r\n    var oSubmit = {},\r\n        oStoredSearch = {},\r\n        props = {},\r\n        searchPuDate,\r\n        searchDoDate,\r\n        searchPuTime,\r\n        searchDoTime,\r\n        isMenuSearch = false;\r\n\r\n    var UI = {\r\n        init: function () {\r\n            // Options for the datepicker, adding to props because they need to be reset (after widget.Destroy) in order to change the number of displayed months\r\n            props = {\r\n                $form: $(\"#ae-search\"),\r\n                memberage: \"\",\r\n                ageDefault: (AEdata && AEdata.defaultAgeOverride) ? AEdata.defaultAgeOverride : 40, // The generic default age can be overridden by member age bewteen 25-69 in search_form.cfm - WEBAE3-1686\r\n                ageMin: 25, // The minimum age to rent without additional restrictions or fees\r\n                ageMax: 69, // The maximum age to rent without additional restrictions or fees\r\n                direction: \"\",\r\n                useStoredSearch: (typeof useStoredSearch != \"undefined\") ? useStoredSearch : false, // useStoredSearch: (\"localStorage\" in window),\r\n                $viewSize: AE.getSiteViewType(), // As of now, only changing the number of months displayed on the calendar for handhelds\r\n                searchFormErrorHandler: {},\r\n                displayMenusearch: AE.ui.props.$menusearchEnabled,\r\n                oStoredSearch: AE.ui.search.getStoredSearch(),\r\n                menusearch: {},\r\n                menusearchOptions: {\r\n                    searchtype: 'menusearch',\r\n                    query: window.location.search.substring(1),\r\n                    timeout: 0\r\n                },\r\n                $searchFormErrorHandler: {\r\n                    msgTitle: null,\r\n                    msgDesc: null,\r\n                    pos: {\r\n                        top: -5,\r\n                        left: 0\r\n                    }\r\n                },\r\n                hasAgeChkbx:true,\r\n            };\r\n\r\n            if(oSite.bIsDapTpDomain){ //WEBAE3-6038\r\n                if (oSite.path_info === \"\"){ \r\n                    AE.ui.search.cleanStoredSearch();\r\n                }\r\n            }\r\n\r\n            if (!window.jsloginStatus) {\r\n                if (UI.readCookie('MEMBERAGE')) { $.removeCookie('MEMBERAGE', { path: '/' }); }\r\n                if (UI.readCookie('MEMBERFIRST')) { $.removeCookie('MEMBERFIRST', { path: '/' }); }\r\n                props.showFillAgeCheckout = true;\r\n            }\r\n\r\n            // The appendTarget considers this module when setting its value\r\n            props.$topSearch = AE.ui.props.appendTarget;\r\n            props.$bottomSearch = '#bottom_search_form';\r\n            props.$searchContainer = $('#search-form')[0];\r\n            props.$searchSlideBtn = $('#targetSearch');\r\n\r\n            props.$locationsWrapper = $('#locations-wrapper');\r\n            props.$chkDiff = props.$form.find($(\"input[name='chk-diff']\")); // Pointer to the \"Different Dropoff Location\" checkbox form field\r\n            props.$chkAge = props.$form.find($(\"input[name='chk-age']\")); // Pointer to the \"Age\" checkbox form field\r\n            props.$txtAge = props.$form.find($(\"input[name='txt-age']\")); // Pointer to the \"Age\" text imput form field\r\n\r\n            props.$jsonPost = props.$form.find($(\"input[name='jsonPost']\")); // A stringified version of the other values in the \"form\" object\r\n            props.$btnSubmit = props.$form.find($(\"button[name='btn-submit']\")); // Button used to submit the hidden form\r\n\r\n            props.$puLoc = props.$form.find($(\"div[name='pickup-loc']\"));\r\n            props.$doLoc = props.$form.find($(\"div[name='dropoff-loc']\"));\r\n\r\n            // MENU search: pointers to the PU & DO form fields\r\n            props.$menu_puCountry = props.$form.find($(\"select[name='PU-country']\"));\r\n            props.$menu_puCity = props.$form.find($(\"select[name='PU-city']\"));\r\n            props.$menu_puLocation = props.$form.find($(\"select[name='PU-loc']\"));\r\n            props.$menu_doCountry = props.$form.find($(\"select[name='DO-country']\"));\r\n            props.$menu_doCity = props.$form.find($(\"select[name='DO-city']\"));\r\n            props.$menu_doLocation = props.$form.find($(\"select[name='DO-loc']\"));\r\n\r\n            // Pointers to the \"Pickup Date\" & \"Dropoff Date\" form fields\r\n            props.$puDate = props.$form.find($(\"input[name='pickup-date']\"));\r\n            props.$doDate = props.$form.find($(\"input[name='dropoff-date']\"));\r\n            props.$doDateOneway = props.$form.find($(\"input[id='dropoff-date_oneway']\"));\r\n\r\n            // Pointers to the hidden \"Pickup Date\" & \"Dropoff Date\" form fields - used when the past search criteria is found\r\n            props.$hiddenPuDate = props.$form.find($(\"input[name='hidden-pickup-date']\"));\r\n            props.$hiddenDoDate = props.$form.find($(\"input[name='hidden-dropoff-date']\"));\r\n            \r\n\r\n            // Pointers to the \"Pickup Time\" & \"Dropoff Time\" form fields\r\n            props.$puTime = props.$form.find($(\"select[name='pickup-time']\"));\r\n            props.$doTime = props.$form.find($(\"select[name='dropoff-time']\"));\r\n            props.$doTimeOneway = props.$form.find($(\"select[id='dropoff-time_oneway']\"));\r\n\r\n            // Pointers to the hidden \"Pickup Time\" & \"Dropoff Time\" form fields - used when the past search criteria is found\r\n            props.$hiddenPuTime = props.$form.find($(\"input[name='hidden-pickup-time']\"));\r\n            props.$hiddenDoTime = props.$form.find($(\"input[name='hidden-dropoff-time']\"));\r\n         \r\n            props.memberage = UI.readCookie('MEMBERAGE');\r\n\r\n            props.$fcrOnewayChk = props.$form.find($(\"input[name='fcr-oneway_chk']\"))\r\n \r\n\r\n            if (props.memberage == null) {\r\n                props.memberage = (AEdata && AEdata.defaultAgeOverride) ? AEdata.defaultAgeOverride : props.memberage;\r\n            }\r\n           \r\n            props.useStoredSearch = (!AE.privateBrowsing._checkLocalStorageAvailability()) ? true : false;\r\n\r\n            if (!props.useStoredSearch) {\r\n                props.ageDefault = (props.memberage) ? props.memberage:  props.ageDefault;       \r\n            }\r\n\r\n            isMenuSearch = prepMenusearch;//WEBAE3-4074 prepMenusearch will always be a boolean from CF now\r\n\r\n            if(AE.props.siteCode){props.hasAgeChkbx = (AE.props.siteCode === 'PEU' || AE.props.siteCode === 'RNZ'|| AE.props.siteCode === 'RAU')? false : true;}\r\n\r\n            oSubmit = {\r\n                viewSize: AE.getSiteViewType(),\r\n                display_label: null, // display value for search input\r\n                display_labelr: null, // display value for search input\r\n                city: null, // city name for pickup\r\n                cityr: null, // city name for dropoff\r\n                puloclist: null, // list of pickup locations\r\n                doloclist: null, // list of dropoff locations\r\n                pucode: null, // country ISO code for pickup\r\n                docode: null, // country ISO code for dropoff\r\n                puloctype: null, // category type for pickup\r\n                doloctype: null, // category type for dropoff\r\n                puCal: null, // pickup date sent from form (different from what the user sees)\r\n                doCal: null, // dropoff date sent from form (different from what the user sees)\r\n                putime: null, // pickup hour, must be 24 hour time, 0 - 23\r\n                dotime: null, // dropoff hour, must be 24 hour time, 0 - 23\r\n                puchaos_hub_id: null, // chaos_hub_id to increment click count server side\r\n                dochaos_hub_id: null, // chaos_hub_id to increment click count server side\r\n                searchAge: props.ageDefault, // checkbox for when the driver's age is less than 25 or over 69\r\n                searchAgeCheckbox: true,\r\n                showFillAgeCheckout:true,\r\n                bookingstep: 'searchwait', // Set and done - required for back-end\r\n                bookingUUID: '', // Filled with Car Search UUID or Booking Lookup UUID when posting from the Booking Process or Lookup Page respectively\r\n                excl_ltr: false, // Flag for Long-Term Rental/Peugeot Lease exclusive search\r\n                excl_cats: '' // Optional comma-delimited list of category codes (e.g. C6,C10 for luxury/convertible) for category exclusive search\r\n            };\r\n\r\n             props.searchAgeCheckbox = props.hasAgeChkbx;\r\n\r\n            // Set the age checkbox as checked, setting the text input to the default age - moved above stored search check WEBAE3-1695\r\n            if(props.hasAgeChkbx){\r\n                if (props.ageDefault >= props.ageMax || props.ageDefault <= props.ageMin) {\r\n                     props.$chkAge.prop('checked', false);\r\n                     props.$txtAge.val(props.ageDefault.toString()).show();\r\n                } else {\r\n                   props.$chkAge.prop('checked', true);  \r\n                   props.$txtAge.val(props.ageDefault.toString()).hide();\r\n                }\r\n            }\r\n            //WEBAE3-5460 if WL site, make sure aff and sys haven't changed\r\n            //and if they have, clear stored search (again) only on white labels\r\n            if(localStorage.getItem('aeSearchAff') !== null && localStorage.getItem('aeSearchSys') !== null && oSite.mSiteCode == 'WL'){\r\n                if(localStorage.getItem('aeSearchAff') !== oSite.affiliate || localStorage.getItem('aeSearchSys') !== oSite.chaosSystem){\r\n                    localStorage.removeItem('aeSearch');\r\n                    localStorage.removeItem('aeSearchAff');\r\n                    localStorage.removeItem('aeSearchSys');\r\n                }\r\n            }\r\n\r\n            if(AE.ui.search.useStoredSearch() && localStorage.getItem('aeSearch') === null && AECookie.read('aeSearch')){\r\n                var cookieSearch = AECookie.read('aeSearch');\r\n                if(_.isString(cookieSearch) && cookieSearch !== ''){\r\n                    localStorage.setItem('aeSearch',cookieSearch);\r\n                }\r\n            }\r\n\r\n            if (AE.ui.search.useStoredSearch() && localStorage.getItem('aeSearch') && \r\n                _.isString(localStorage.getItem('aeSearch')) && \r\n                localStorage.getItem('aeSearch') != '') {\r\n                props.oStoredSearch = JSON.parse(localStorage.getItem('aeSearch'));\r\n\r\n                if (props.oStoredSearch.putime && _.isString(props.oStoredSearch.putime) && props.oStoredSearch.putime != '') {\r\n                    searchPuTime = props.oStoredSearch.putime;\r\n                    props.$hiddenPuTime.val(searchPuTime);\r\n                    props.$puTime.val(searchPuTime);\r\n                } else {\r\n                    searchPuTime = '10:00';\r\n                    props.$hiddenPuTime.val(searchPuTime);\r\n                    props.$puTime.val(searchPuTime);\r\n                }\r\n                \r\n                if (props.oStoredSearch.dotime && _.isString(props.oStoredSearch.dotime) && props.oStoredSearch.dotime != '') {\r\n                    searchDoTime = props.oStoredSearch.dotime;\r\n                    props.$hiddenDoTime.val(searchDoTime);\r\n                    props.$doTime.val(searchDoTime);\r\n                } else {\r\n                    searchDoTime = '10:00';\r\n                    props.$hiddenDoTime.val(searchDoTime);\r\n                    props.$doTime.val(searchDoTime);\r\n                }\r\n                \r\n                if (props.oStoredSearch.puCal && _.isString(props.oStoredSearch.puCal) && props.oStoredSearch.puCal != '') {\r\n                    searchPuDate = props.oStoredSearch.puCal;\r\n                    props.$hiddenPuDate.val(searchPuDate);\r\n                }\r\n                \r\n                if (props.oStoredSearch.doCal && _.isString(props.oStoredSearch.doCal) && props.oStoredSearch.doCal != '') {\r\n                    searchDoDate = props.oStoredSearch.doCal;\r\n                    props.$hiddenDoDate.val(searchDoDate);\r\n                    isMenuSearch = prepMenusearch;//WEBAE3-4074 prepMenusearch will always be a boolean from CF now\r\n                }\r\n                \r\n                //WEBAE3-1695 - use age from stored search if avail\r\n\r\n                if (props.oStoredSearch.searchAge && props.oStoredSearch.search != '' && !isLTRSearch) {\r\n                    searchAge = props.oStoredSearch.searchAge;\r\n                    AE.ui.search.setAge(searchAge);//setAge function handles box checking for age range\r\n\r\n                    //if previous search had box unchecked, make sure this one does, too - WEBAE3-1686\r\n                    if (props.oStoredSearch.searchAgeCheckbox === false) {\r\n                        AE.ui.search.forceSearchAgeCheckBox();\r\n                     }\r\n                }\r\n            } else {\r\n                //WEBAE3-1686 if not using local storage so analyze search age set in search_form.cfm for possible member age or oBK age\r\n                if (props.ageDefault && props.ageDefault != '' && props.hasAgeChkbx) {\r\n                    AE.ui.search.setAge(props.ageDefault);\r\n                } else if (searchAge && searchAge != '') {\r\n                    AE.ui.search.setAge(searchAge);\r\n\r\n                    //if previous search had box unchecked, make sure this one does, too - WEBAE3-1686\r\n                    if (props.oStoredSearch.searchAgeCheckbox === false) {\r\n                        AE.ui.search.forceSearchAgeCheckBox();\r\n                     }\r\n                }\r\n            }\r\n\r\n            if(isBMRSearch){\r\n               if(localStorage.getItem('aeBMRsearch')){ \r\n                    var bmr_age = JSON.parse(localStorage.getItem('aeBMRsearch')).driverAge;\r\n                    props.$txtAge.val(bmr_age);\r\n                } \r\n            }\r\n\r\n             if(!props.hasAgeChkbx){\r\n                props.$chkAge.hide();\r\n                $('label[for=\"chk-age\"]').hide();\r\n\r\n                props.$txtAge.addClass('flush').prop('required',true).attr('max',1000);\r\n                $('input[name=\"txt-age\"]').show();\r\n                props.$txtAge.show();\r\n           \r\n                if(props.memberage && props.memberage != '' && !AE.ui.search.useStoredSearch()){\r\n                      props.$txtAge.val( props.memberage);\r\n                }       \r\n            }\r\n\r\n            //search age handlers\r\n            props.$chkAge.on(\"change\", function (event) {\r\n                UI.chkAgeHandler(event.target.checked);\r\n                var _checked = $(this).is(':checked');\r\n                if (!_checked) {\r\n                    props.$txtAge.attr({ 'required': true });\r\n                    if (AE.props.siteCode == 'FCR') {\r\n                        $('#txt-age-error').show();\r\n                    }\r\n                } else {\r\n                    props.$txtAge.attr({ 'required': false });\r\n                    if (AE.props.siteCode == 'FCR') {\r\n                        $('#txt-age-error').hide();\r\n                    }\r\n                }\r\n                if(!AE.account.props){AE.account.init();}\r\n\r\n                if (props.memberage && AE.account.props.$isLoggedIn && !isBMRSearch) {\r\n                    if (_checked) {\r\n                        if (props.$txtAge.val() > props.ageMax || props.$txtAge.val()< props.ageMin || props.$txtAge.val() == \"\") {\r\n                            UI.setAge(40);// WEABE3-2963 - Changing this value to props.ageDefault in WEBAE3-2936 causes the checkbox to break\r\n                            // Returning this value to 40 restores checkbox functionality WITHOUT messing up the age input filling from the voucher OR member data\r\n                        } else { \r\n                            UI.setAge(props.$txtAge.val());\r\n                        }\r\n                    }\r\n                }\r\n                //WEBAE3-3047\r\n                if (isBMRSearch) {\r\n                    if (bmr_age) {\r\n                         props.$txtAge.val(bmr_age);\r\n                    } else if ( props.memberage) {\r\n                     props.$txtAge.val(props.memberage);\r\n                   }\r\n                }\r\n            });\r\n            //search age handlers\r\n            props.$txtAge.on(\"blur\", function (event) {\r\n                var runThis = true;\r\n                if (AE.props.isAUNZ) { runThis = false; }\r\n                if (runThis) {\r\n                    if (props.$txtAge.val() != '') {\r\n                        props.ageDefault = props.$txtAge.val();\r\n                        searchAge = props.oStoredSearch.searchAge;\r\n                    } else {\r\n                        props.$txtAge.attr({'required': true });\r\n                        oSubmit.searchAge = '';\r\n                        UI.chkAgeHandler(props.$chkAge.prop('checked'));\r\n                    }\r\n                } else {\r\n                    props.$txtAge.attr({'required': true });\r\n                }\r\n            });\r\n            props.$chkDiff.on(\"change\", function (event) {\r\n                var _checked = $(this).is(':checked');\r\n                if (_checked) {\r\n                    props.$locationsWrapper.addClass('both');\r\n                } else {\r\n                    props.$locationsWrapper.removeClass('both');\r\n\r\n                    // clear the drop off input and check for LTR\r\n                    if (isLTRSearch) {\r\n                        AE.ui.searchType.leasesearch.props.$ltrdo.val(AE.ui.searchType.leasesearch.props.$ltrpu.val());\r\n                        AE.ui.searchType._forceInputBlur(AE.ui.searchType.text.props.$ltrdo);\r\n                    } else if (isBMRSearch) {\r\n                        // AE.ui.searchType.bmr.props.$ltrdo.val(AE.ui.searchType.bmr.props.$ltrpu.val());\r\n                    } else {\r\n                        AE.ui.searchType.text.props.$doLoc.next('.ui-textsearch-clear-input').trigger('click');\r\n                        AE.ui.searchType._forceInputBlur(AE.ui.searchType.text.props.$doLoc);\r\n                    }\r\n                }\r\n            });\r\n\r\n            // // keep oneway search open without registering change event\r\n            // if ($(\"input[name='chk-diff']\").is(\":checked\")) {\r\n            //     alert(\"checked\")\r\n            //     props.$locationsWrapper.addClass('both');\r\n            // } else {\r\n            //     props.$locationsWrapper.removeClass('both');\r\n            //     alert(\"NOT checked\")\r\n\r\n            // }\r\n\r\n            // Set the bookingUUID\r\n            if (AEdata) {\r\n                if (AEdata.booking && AEdata.booking.props && AEdata.booking.props.uuid) {\r\n                    oSubmit.bookingUUID = AEdata.booking.props.uuid;\r\n                } else if (AEdata.modify && AEdata.modify.uuid) {\r\n                    oSubmit.bookingUUID = AEdata.modify.uuid;\r\n                }\r\n                // Set the Commission Junction Event ID //WEBAE3-5634 : commission junction - believe this to possibly still be in use\r\n                if(AEdata.URL && AEdata.URL.cjevent){\r\n                    oSubmit.cjEvent = AEdata.URL.cjevent;\r\n                } else if(AEdata.URL && AEdata.URL.CJEVENT) {\r\n                    oSubmit.cjEvent = AEdata.URL.CJEVENT;\r\n                } else if(AECookie.read('cje')) { //WEBAE3-5053\r\n                    if(_.isString(AECookie.read('cje')) && AECookie.read('cje') !== ''){\r\n                        oSubmit.cjEvent = AECookie.read('cje');\r\n                    }\r\n                }\r\n            }\r\n            // Set exclusive search parameters\r\n            if ($('.search-type--lease')[0]) {\r\n                oSubmit.excl_ltr = true;\r\n            } // Long Term Rental/Short Term Lease/Buyback only search\r\n            \r\n            if ($('.search-type--luxury')[0]) {\r\n                oSubmit.excl_cats = 'C6,C10';\r\n            } // Luxury ONLY Search - will include Standards to ensure results come back\r\n            \r\n            if ($('.search-type--van')[0]) {\r\n                oSubmit.excl_cats = 'C8,C9';\r\n            } // Vans ONLY Search\r\n\r\n            // Submit button behaviors\r\n            props.$btnSubmit.on(\"click\", function (event) {\r\n                event.preventDefault();\r\n                UI.formSubmit();\r\n            });\r\n\r\n            // Slide down to the form\r\n            props.$searchSlideBtn.on(\"click\", function (event) {\r\n                $('#scroll-content').stop().animate({\r\n                        scrollTop: parseInt($(props.$bottomSearch).offset().top)\r\n                    },\r\n                    'fast',\r\n                    'swing'\r\n                );\r\n            });\r\n\r\n            // (WEBAE3-1095)\r\n            props.$txtAge.on('keydown', function (e) {\r\n                if (e.keyCode == 13) {\r\n                    e.preventDefault();\r\n                }\r\n            });\r\n\r\n            // Submit the search form when the user presses the submit button\r\n            // Ignore \"Return\" by defaulting to click submit button\r\n            props.$form.on('keydown', function (e) {\r\n                if (e.keyCode == 13) {\r\n                    // props.$btnSubmit.click();\r\n                    e.preventDefault();// WEBAE3-3383\r\n                }\r\n            });\r\n\r\n            // ONLY RUN IF THE BOTTOM FORM CONTAINER EXISTS\r\n            if (props.$bottomSearch != 'undefined') {\r\n                // If open site in mobile view append search to bottom container\r\n                if (AE.getSiteViewType() == 'palm') {\r\n                    AE.ui.props.appendTarget = props.$bottomSearch; // set target\r\n                    // wait for the page to load everything then append\r\n                    $(window).on('load', function () {\r\n                        $(props.$bottomSearch).append(props.$searchContainer)\r\n                            .ready(function () {\r\n                                // try and catch any mis loads and set page at top\r\n                                $('#scroll-content').scrollTop(0);\r\n                            });\r\n                    });\r\n                } else {\r\n                    AE.ui.props.appendTarget = ($('#ae-search').closest('.ui-dialog')[0]) ? null : props.$topSearch;\r\n                }\r\n\r\n                // Transition between lap and palm append search\r\n                AE.addTransitionTask({\r\n                    func: function () {\r\n                        /*  HANDLES CONTENT MOVED BY APPEND:\r\n                            ARGUMENTS: 'Palm View', 'Desk Container', 'Mobile Container', 'Content Appended'  */\r\n                        UI.palmTransition(arguments[0], props.$topSearch, props.$bottomSearch, '#search-form'); // Search Form\r\n                    }\r\n                });\r\n            };\r\n\r\n            \r\n\r\n            props.$fcrOnewayChk.on(\"change\", function(event) {\r\n                var _checked = $(this).is(':checked');\r\n                if (_checked) {\r\n                    UI.fcrToggleOnewayOpen();\r\n                } else {\r\n                    UI.fcrToggleOnewayClose();\r\n                }\r\n            });\r\n\r\n            if (AE.props.siteCode == 'FCR') {\r\n                $(document).ready(function(event) {\r\n                    if(props.$fcrOnewayChk.is(':checked')){\r\n                        UI.fcrToggleOnewayOpen();\r\n                    } else {\r\n                        //see if different dropoff box should be checked on page load based on previous search\r\n                        var oStoredSearch = JSON.parse(localStorage.getItem('aeSearch'));\r\n                        try {\r\n                            if (oStoredSearch.puloclist !== oStoredSearch.doloclist && oStoredSearch.doloclist !== null && typeof AEdata.booking === 'undefined') {\r\n                                $(\"input[name='fcr-oneway_chk']\").prop( \"checked\", true );\r\n                                UI.fcrToggleOnewayOpen();\r\n                            } \r\n                        }\r\n                        catch (e) {\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (AE.props.siteCode == 'FCR' && typeof(AEdata.booking) !== 'undefined') {\r\n                //console.log(\"this ran AEbooking ==\", AEdata.booking )\r\n                $(document).ready(function(event) {\r\n                    //console.log(\"this ran too\")\r\n                    UI.fcrOneWayToggle();\r\n                });\r\n            }\r\n        },\r\n\r\n        fcrToggleOnewayOpen: function(){\r\n            //make sure it isn't already open\r\n            if(!props.$locationsWrapper.hasClass('both')) {\r\n                props.$locationsWrapper.addClass('both');\r\n                $(\".fcr-dropoff_toggle\").slideDown();\r\n                $(\".fcr-input_text_over\").addClass('fcr-full_width');\r\n                $(\".fcr-pu_do_toggle\").toggle();\r\n            }\r\n        },\r\n        fcrToggleOnewayClose: function(){\r\n            props.$locationsWrapper.removeClass('both');\r\n            $(\".fcr-dropoff_toggle\").slideUp();\r\n            $(\".fcr-pu_do_toggle\").toggle();\r\n            $(\".fcr-input_text_over\").removeClass('fcr-full_width');\r\n            $(\"[name='dropoff-loc']\").next('.ui-textsearch-target-input').trigger('click');\r\n        },\r\n        palmTransition: function () {\r\n            var palmContent = $('' + arguments[3] + '')[0];\r\n            var container = (arguments[0]) ? arguments[2] : arguments[1];\r\n\r\n            if (AE.getSiteViewType() == 'palm') {\r\n                AE.ui.props.appendTarget = props.$bottomSearch;\r\n            } else {\r\n                AE.ui.props.appendTarget = ($('#ae-search').closest('.ui-dialog')[0]) ? null : props.$topSearch;\r\n            }\r\n\r\n            $('' + container + '').append(palmContent);\r\n        },\r\n        getValue: function (property) {\r\n            /*\r\n            Gets the current value from the JSON object which will be submitted to the server. This\r\n            isn't the same as getting the value of the\r\n            */\r\n            var value = 'No property given';\r\n            var _obj = Object.keys(oSubmit);\r\n\r\n            for (var i in _obj) {\r\n                var _key = _obj[i];\r\n                if (_key.toString() == property) {\r\n                    value = oSubmit[_key];\r\n                }\r\n            }\r\n            return value;\r\n        },\r\n        getSubmitValues: function () {\r\n            // Returns the JSON object which will be submitted to the server\r\n            return oSubmit;\r\n        },\r\n        getStoredSearch: function () {\r\n            // Returns the JSON object which will was submitted to the server and saved in local storage\r\n            if (props.oStoredSearch) {\r\n                return props.oStoredSearch; // WEBAE3-2049 added 'props.' so menu search doesn't get empty default object\r\n            } else {\r\n                return oStoredSearch; // return empty default struct\r\n            }; \r\n        },\r\n        getMaxAge: function () {\r\n           return props.$ageMax;\r\n        },\r\n        getMinAge: function () {\r\n           return props.$ageMin;\r\n        },\r\n        setValue: function (settings) {\r\n            var options = {\r\n                name: null,\r\n                value: null,\r\n                item: null,\r\n                jsonOnly: false\r\n            };\r\n            $.extend(options, settings);\r\n\r\n            // Without a name, we can't go forward\r\n            if (!options.name) {\r\n                throw \"ERR: AE.ui.search.setValue() - No input or value given.\";\r\n            }\r\n\r\n            if (options.resetAge) {\r\n                oSubmit.searchAge = '';\r\n            }\r\n\r\n            if (options.item) {\r\n                // Only the autocomplete needs entire jQuery UI item. For now, we'll just\r\n                // assume that we're dealing with those two fields only.\r\n                if (options.name == 'pickup-loc') {\r\n                    UI.autocomplete.setValue(options.item);\r\n                } else if (options.name == 'dropoff-loc') {\r\n                    UI.autocomplete.setValue(options.item);\r\n                } else {\r\n                    throw 'ERR search.setValue(): Valid jQuery UI item required.';\r\n                }\r\n            }\r\n            if (options.value) {\r\n                // If there's a value, then we're going to directly set the input\r\n                switch (options.name) {\r\n                    case \"pickup-time\":\r\n                        if (!options.jsonOnly) {\r\n                            props.$puTime.val(options.value);\r\n                        }\r\n                        oSubmit.putime = options.value;\r\n                        props.$hiddenPuTime.val(options.value);\r\n                        break;\r\n                    case \"dropoff-time\":\r\n                        if (!options.jsonOnly) {\r\n                            props.$doTime.val(options.value);\r\n                        }\r\n                        oSubmit.dotime = options.value;\r\n                        props.$hiddenDoTime.val(options.value);\r\n                        break;\r\n                    case \"pickup-date\":\r\n                        if (!options.jsonOnly) {\r\n                            props.$puDate.val(options.value);\r\n                        }\r\n\r\n                        var _puDate = UI.isValidDate(options.value) ? options.value : AE.ui.datepicker.convertDate(props.$puDate);\r\n\r\n                        oSubmit.puCal = _puDate;\r\n                        props.$hiddenPuDate.val(_puDate);\r\n\r\n                        break;\r\n                    case \"dropoff-date\":\r\n                        if (!options.jsonOnly) {\r\n                            props.$doDate.val(options.value);\r\n                        }\r\n\r\n                        var _doDate = UI.isValidDate(options.value) ? options.value : AE.ui.datepicker.convertDate(props.$doDate);\r\n\r\n                        oSubmit.doCal = _doDate;\r\n                        props.$hiddenDoDate.val(_doDate);\r\n\r\n                        break;\r\n                        //case 'chk-diff':\r\n                        //  break;\r\n                        //case 'chk-age':\r\n                        //  break;\r\n                        //VM\r\n                    case \"txt-age\":\r\n                        if (!options.jsonOnly) {\r\n                            props.$txtAge.val(options.value);\r\n                        }\r\n                        oSubmit.searchAge = options.value;\r\n                        break;\r\n                    case \"chk-age\":\r\n                        if (!options.jsonOnly) {\r\n                            props.$chkAge.prop('checked');\r\n                        }\r\n                        oSubmit.searchAgeCheckbox = options.value;\r\n                        break;\r\n                    case \"display_label\":\r\n                        oSubmit.display_label = options.value;\r\n                        break;\r\n                    case \"display_labelr\":\r\n                        oSubmit.display_labelr = options.value;\r\n                        break;\r\n                    default:\r\n                        throw \"ERR search.setValue(): Valid value required.\";\r\n                }\r\n            }\r\n\r\n            return oSubmit;\r\n        },\r\n        getmemberage : function() {\r\n            return  props.memberage;\r\n        },\r\n        isValidDate : function(d) {\r\n            return d instanceof Date && !isNaN(d);\r\n        },\r\n        formSubmit: function (loginOverride) {\r\n\t\t\tloginOverride = loginOverride || false;\r\n\r\n            /*\r\n                oSubmit.city        = set upon select in the ui.autocomplete module\r\n                oSubmit.cityr       = set upon select in the ui.autocomplete module\r\n                oSubmit.puloclist   = set upon select in the ui.autocomplete module\r\n                oSubmit.doloclist   = set upon select in the ui.autocomplete module\r\n                oSubmit.pucode      = set upon select in the ui.autocomplete module\r\n                oSubmit.docode      = set upon select in the ui.autocomplete module\r\n                oSubmit.puCal       = set upon init and select in the ui.datepicker module\r\n                oSubmit.doCal       = set upon init and select in the ui.datepicker module\r\n                oSubmit.searchAge   = Set in the behaviors listed above\r\n                oSubmit.searchAgeCheckbox\r\n            */\r\n\r\n            var $ui_chkDiff = props.$chkDiff;\r\n\r\n            // Text search\r\n             var $ui_puInput = props.$puLoc;\r\n             var $ui_doInput = props.$doLoc;\r\n\r\n            // Menu search\r\n            var $ui_menu_puInput_country = props.$menu_puCountry;\r\n            var $ui_menu_puInput_city = props.$menu_puCity;\r\n            var $ui_menu_puInput_location = props.$menu_puLocation;\r\n            var $ui_menu_doInput_country = props.$menu_doCountry;\r\n            var $ui_menu_doInput_city = props.$menu_doCity;\r\n            var $ui_menu_doInput_location = props.$menu_doLocation;\r\n\r\n            var $ui_puDate = props.$puDate;\r\n            var $ui_doDate = props.$doDate;\r\n\r\n            var $ui_puTime = props.$puTime;\r\n            var $ui_doTime = props.$doTime;\r\n\r\n            var $ui_chkAge = props.$chkAge;\r\n            var $ui_txtAge = props.$txtAge;\r\n            var $_subBtn = props.$btnSubmit;\r\n\r\n            var _flagTitle;\r\n            var _flagMsg;\r\n            var _posDiff = {\r\n                top: -5,\r\n                left: 0\r\n            };\r\n\r\n            var $ui_elObj = {}\r\n\r\n            if (isMenuSearch && !loginOverride && !isLTRSearch) {       \r\n                $ui_elObj.menusearchpucountry = ($ui_menu_puInput_country.val() === '' || $ui_menu_puInput_country.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                $ui_elObj.menusearchpucity = ($ui_menu_puInput_city.val() === '' || $ui_menu_puInput_city.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                $ui_elObj.menusearchpulocation = ($ui_menu_puInput_location.val() === '' || $ui_menu_puInput_location.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                if ($ui_chkDiff.is(':checked')) {\r\n                    $ui_elObj.menusearchdocountry = ($ui_menu_doInput_country.val() === '' || $ui_menu_doInput_country.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                    $ui_elObj.menusearchdocity = ($ui_menu_doInput_city.val() === '' || $ui_menu_doInput_city.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                    $ui_elObj.menusearchdolocation = ($ui_menu_doInput_location.val() === '' || $ui_menu_doInput_location.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                }\r\n            } else if (isBMRSearch) {                \r\n                // Let remote BMR API call to check results handle incomplete input\r\n                $ui_menu_puInput_country = $('select#bmr__country');\r\n                $ui_menu_puInput_city = $('select#bmr__city');\r\n                $ui_menu_doInput_country = $('select#bmr__countryr');\r\n                $ui_menu_doInput_city = $('select#bmr__cityr');\r\n                $ui_elObj.menusearchpucountry = ($ui_menu_puInput_country.val() === '' || $ui_menu_puInput_country.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                $ui_elObj.menusearchpucity = ($ui_menu_puInput_city.val() === '' || $ui_menu_puInput_city.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                if ($ui_chkDiff.is(':checked')) {\r\n                    $ui_elObj.menusearchdocountry = ($ui_menu_doInput_country.val() === '' || $ui_menu_doInput_country.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                    $ui_elObj.menusearchdocity = ($ui_menu_doInput_city.val() === '' || $ui_menu_doInput_city.val() === '--') ? $fn_checkMenuSearchLocationInput : false;\r\n                }\r\n            } else {\r\n               if (isLTRSearch ) {\r\n                    $ui_puInput = AE.ui.searchType.leasesearch.props.$ltrpu;\r\n                    $ui_doInput =  AE.ui.searchType.leasesearch.props.$ltrdo;\r\n\r\n                    if($ui_puInput.val() === ''){\r\n                        $ui_elObj.textsearchlocation = $fn_flagLocationInput;\r\n                    }else if ($ui_doInput.val() === ''){\r\n                        $ui_elObj.textsearchlocation = $fn_flagLocationInput;\r\n                    }else{\r\n                        $ui_elObj.textsearchlocation = false;\r\n                    } \r\n                } else {\r\n                   $ui_elObj.textsearchlocation = (UI.getValue(\"city\") == null) ? $fn_flagLocationInput : false;                     \r\n               }       \r\n            }\r\n\r\n            if (isBMRSearch && AE.ui.searchType.bmr) {\r\n                if(AE.props.isAUNZ && AE.account.props.$isLoggedIn && props.$txtAge.val() == \"\"){\r\n                    /* WEBAE3-3034 - AUS and NZL display changes lead to mix ups when\r\n                        user is logged in, but deletes their age from the BMR search form\r\n                        this forces stricter validation and the appropriate alerts to display\r\n                    */\r\n                    oSubmit.searchAgeCheckbox = false;\r\n                    oSubmit.searchAge = '';\r\n                }\r\n            }  \r\n           \r\n            if(props.hasAgeChkbx){\r\n                $ui_elObj.age = (!UI.getValue(\"searchAgeCheckbox\") && props.$txtAge.val() === \"\" ) ? $fn_flagChkAgeInput : false;               \r\n                //$ui_elObj.age = (!UI.getValue(\"searchAgeCheckbox\") && UI.getValue(\"searchAge\") == \"\" ) ? $fn_flagChkAgeInput : false;\r\n            }\r\n            else{\r\n                $ui_elObj.age = (UI.getValue(\"searchAge\") == \"\" ||  $ui_txtAge.val() == '') ? $fn_flagChkAgeInput : false;\r\n            }\r\n\r\n            //WEBAE3-4473 - make sure DO is later than PU\r\n            var pickupDate = new Date($.datepicker.formatDate('yy-mm-dd',$ui_puDate.datepicker(\"getDate\")) + 'T' + $ui_puTime.val());\r\n            var dropoffDate = new Date($.datepicker.formatDate('yy-mm-dd', $ui_doDate.datepicker(\"getDate\")) + 'T' + $ui_doTime.val());\r\n            $ui_elObj.badDates = (dropoffDate.getTime() <= pickupDate.getTime()) ? $fn_flagDates  : false;\r\n\r\n\r\n            AE.forms.addSpinGear($_subBtn.attr('disabled', true));\r\n            for (var i = 0; i < Object.keys($ui_elObj).length; i++) {\r\n                var _el = Object.keys($ui_elObj)[i];       \r\n\r\n                if ($ui_elObj[_el] != false) {\r\n                 return $ui_elObj[_el]();\r\n                }\r\n            }\r\n            function $fn_flagDates() {\r\n                $ui_doTime.addClass('ui--invalid-input');\r\n                var _posDiff = {\r\n                    top: -5,\r\n                    left: -8\r\n                };\r\n\r\n                _flagTitle = AE.ui.decodeHtml(AE.props.oSearch.LABEL_DROPOFF_TIME); \r\n                _flagMsg = '';\r\n\r\n              return AE.ui.search.searchFormErrorHandler.init(_flagTitle, _flagMsg, _posDiff);\r\n            }\r\n            function $fn_flagLocationInput() {\r\n\r\n                var _posDiff = {\r\n                    top: -5,\r\n                    left: -8\r\n                };\r\n\r\n                if(isLTRSearch ){          \r\n                    if($ui_puInput.val() === ''){\r\n                        $ui_puInput.addClass('ui--invalid-input');\r\n                        _flagTitle = AE.ui.decodeHtml(AE.props.oSearch.ERRORMSG_INPUTEMPTY); \r\n                        _flagMsg = '';\r\n                        $ui_puInput.attr({\r\n                            placeholder: _flagTitle\r\n                        });\r\n                    }else{\r\n                        $ui_doInput.addClass('ui--invalid-input');\r\n                        _flagTitle = AE.ui.decodeHtml(AE.props.oSearch.ERRORMSG_INPUTEMPTY); \r\n                        _flagMsg = '';\r\n                        $ui_doInput.attr({\r\n                            placeholder: _flagTitle\r\n                        });\r\n                    }\r\n                }else{\r\n                     $ui_puInput.addClass('ui--invalid-input');\r\n                     _flagTitle = AE.ui.decodeHtml(AE.props.oSearch.ERRORMSG_PULOCEMPTY); \r\n                    _flagMsg = AE.ui.decodeHtml(AE.props.oSearch.ERRORMSG_INPUTEMPTY);\r\n                    $ui_puInput.attr({\r\n                        placeholder: _flagTitle\r\n                    });\r\n                } \r\n\r\n              return AE.ui.search.searchFormErrorHandler.init(_flagTitle, _flagMsg, _posDiff);\r\n            }                \r\n\r\n            function $fn_flagChkAgeInput() {\r\n                var $ui_ageInput = $ui_txtAge;\r\n                var _val = $ui_ageInput.val();\r\n                var _chars = _val.length;\r\n                var _min = $ui_ageInput.attr('min');\r\n                var _max = $ui_ageInput.attr('max');\r\n\r\n                _posDiff = {\r\n                    top: -5,\r\n                    left: AE.legacy.grief.isIE ? 180 : 165\r\n                };\r\n\r\n                if((isBMRSearch && AE.props.isAUNZ) || !props.hasAgeChkbx) {\r\n                    _posDiff = { top: -5 };\r\n                }\r\n\r\n                $ui_txtAge.addClass('ui--invalid-input').parent().css({\r\n                    position: 'relative'\r\n                });\r\n\r\n                if (_val == '') { //} || _val <= 17) {\r\n                    _flagTitle = AE.props.oSearch.ERRORMSG_DRIVERAGETITLE; //'DRIVER AGE'\r\n                    _flagMsg = AE.props.oSearch.ERRORMSG_DRIVERAGEMESSAGE; //'ENTER A THE DRIVER'S AGE'\r\n                    return AE.ui.search.searchFormErrorHandler.init(_flagTitle, _flagMsg, _posDiff);\r\n//                } else if ( (_val < parseInt(_min)) || (_chars == 2 && (parseInt(_val) < parseInt(_min))) ) {\r\n                } else if ( (parseInt(_val) < parseInt(_min)) || (parseInt(_val) > parseInt(_max)) ) {\r\n                    _flagTitle = AE.props.oSearch.ERRORMSG_INVALIDAGETITLE; //'INVALID AGE SELECTION'\r\n                    _flagMsg = AE.props.oSearch.ERRORMSG_INVALIDAGEMESSAGE.replace('[AGE]', '<strong>' + _min + '</strong>');\r\n                    return AE.ui.search.searchFormErrorHandler.init(_flagTitle, _flagMsg, _posDiff);\r\n                }\r\n\r\n                UI.setValue({\r\n                    name: 'txt-age',\r\n                    value: props.$txtAge.val(),\r\n                    jsonOnly: true\r\n                });\r\n          \r\n                props.$btnSubmit.removeClass('ui--btn-submit-wait').attr({\r\n                    'disabled': false\r\n                }).find('.ui--loading-results').remove();\r\n               // return props.$btnSubmit.trigger('click');\r\n               return false;\r\n            }\r\n\r\n            function $fn_checkMenuSearchLocationInput() {\r\n                var menuSearchError = false;\r\n\r\n                // Only show one error in this particular order\r\n                if ($ui_menu_puInput_country.val() === '' || $ui_menu_puInput_country.val() === '--') {\r\n                    menuSearchError = true;\r\n                    $ui_menu_puInput_country.addClass('ui--invalid-input');\r\n                    _posDiff = { top: -19, left: -2 };\r\n                } else if ($ui_menu_puInput_city.val() === '' || $ui_menu_puInput_city.val() === '--') {\r\n                    menuSearchError = true;\r\n                    $ui_menu_puInput_city.addClass('ui--invalid-input');\r\n                    _posDiff = { top: -19, left: -2 };\r\n                } else if ($ui_menu_puInput_location.val() === '' || $ui_menu_puInput_location.val() === '--') {\r\n                    menuSearchError = true;\r\n                    $ui_menu_puInput_location.addClass('ui--invalid-input');\r\n                    _posDiff = { top: -19, left: -15 };\r\n                } else if ($ui_chkDiff.is(':checked')) {\r\n                    if ($ui_menu_doInput_country.val() === '' || $ui_menu_doInput_country.val() === '--') {\r\n                        menuSearchError = true;\r\n                        $ui_menu_doInput_country.addClass('ui--invalid-input');\r\n                        _posDiff = { top: -19, left: -2 };\r\n                    } else if ($ui_menu_doInput_city.val() === '' || $ui_menu_doInput_city.val() === '--') {\r\n                        menuSearchError = true;\r\n                        $ui_menu_doInput_city.addClass('ui--invalid-input');\r\n                        _posDiff = { top: -19, left: -2 };\r\n                    } else if ($ui_menu_doInput_location.val() === '' || $ui_menu_doInput_location.val() === '--') {\r\n                        menuSearchError = true;\r\n                        $ui_menu_doInput_location.addClass('ui--invalid-input');\r\n                        _posDiff = { top: -19, left: -15 };\r\n                    }\r\n                }\r\n\r\n                if (menuSearchError) {\r\n                    _flagTitle = AE.ui.decodeHtml(AE.props.oSearch.ERRORMSG_INPUTEMPTY); //'INPUT CANNOT BE EMPTY'\r\n                    _flagMsg = '';\r\n                    $ui_puInput.attr({ placeholder: _flagTitle });\r\n                    return AE.ui.search.searchFormErrorHandler.init(_flagTitle, _flagMsg, _posDiff);\r\n                }\r\n            }\r\n\r\n            if(!loginOverride){\r\n                UI.setValue({\r\n                    name: \"txt-age\",\r\n                    value: props.$txtAge.val(),\r\n                    jsonOnly: true\r\n                });\r\n\r\n                UI.setValue({\r\n                    name: \"chk-age\",\r\n                    value: props.$chkAge.prop('checked'),\r\n                    jsonOnly: true\r\n                });\r\n            }\r\n\r\n            UI.setValue({\r\n                name: 'pickup-date',\r\n                value: props.$puDate.val(),\r\n                jsonOnly: true\r\n            });\r\n\r\n                            //gbr test\r\n//if( AE.props.siteCode == 'GBR' ) {console.log(\"GBR\")}else{console.log(\"not GBR\")}\r\n            \r\n            // check for FCR one way dropoff date before setting value\r\n\r\n\r\n\r\n            if (AE.props.siteCode == 'FCR') {\r\n                if(props.$fcrOnewayChk.is(':checked')){\r\n                    props.$doDate = props.$doDateOneway;\r\n                }\r\n            }\r\n\r\n            UI.setValue({\r\n                name: 'dropoff-date',\r\n                value: props.$doDate.val(),\r\n                jsonOnly: true\r\n            });\r\n            \r\n            /*if (AE.props.siteCode == 'FCR') {\r\n               if(props.$fcrOnewayChk.is(':checked')){\r\n                    UI.setValue({\r\n                        name: 'dropoff-date',\r\n                        value: props.$doDateOneway.val(),\r\n                        jsonOnly: true\r\n                    });\r\n                }\r\n            }*/\r\n           \r\n            UI.setValue({\r\n                name: 'pickup-time',\r\n                value: props.$puTime.val(),\r\n                jsonOnly: true\r\n            });\r\n\r\n            UI.setValue({\r\n                name: 'dropoff-time',\r\n                value: props.$doTime.val(),\r\n                jsonOnly: true\r\n            });\r\n\r\n            // check for FCR one way and override dropoff time if present\r\n            if (AE.props.siteCode == 'FCR') {\r\n                if(props.$fcrOnewayChk.is(':checked')){\r\n                    UI.setValue({\r\n                        name: 'dropoff-time',\r\n                        value: props.$doTimeOneway.val(),\r\n                        jsonOnly: true\r\n                    });\r\n                }\r\n            }\r\n\r\n            var _obj = JSON.stringify(oSubmit);\r\n            var _path = $(props.$form).attr(\"action\");\r\n\r\n            AECookie.create('aeSearch', _obj);\r\n            //WEBAE3-5460 save aff and sys at time of search in case of change\r\n            localStorage.setItem('aeSearchAff',oSite.affiliate);\r\n            localStorage.setItem('aeSearchSys',oSite.chaosSystem);\r\n            props.useStoredSearch = (AE.ui.search.useStoredSearch() && localStorage.setItem('aeSearch', _obj) == null) ? true : false;\r\n\r\n            if (isBMRSearch && AE.ui.searchType.bmr) {\r\n                AE.ui.searchType.bmr.handleSubmit(oSubmit);\r\n            } else {\r\n                 return AE.ui.search.postToForm(_path, oSubmit, 'post');\r\n            }\r\n\r\n         },\r\n        postToForm: function (path, params, method) {\r\n            method = method || \"post\";\r\n            \r\n            //Sanitize JSON from POST URL\r\n            var _tempForm = document.createElement(\"form\");\r\n            _tempForm.setAttribute(\"method\", method);\r\n            _tempForm.setAttribute(\"action\", path);\r\n            \r\n            //respect window targeting\r\n            var killBtnSpinner = false;\r\n            if (tgt !== undefined && tgt !== 0 && (isBMRSearch || self !== top)) {\r\n                switch (tgt) {\r\n                    case \"1\":\r\n                        _tempForm.setAttribute(\"target\", '_blank');\r\n                        killBtnSpinner = true; //if targeting a new window, don't leave form in endless waiting\r\n                        break;\r\n                    case \"2\":\r\n                        _tempForm.setAttribute(\"target\", '_parent');\r\n                        break;\r\n                }\r\n            }\r\n\r\n            // Check to see if the search is coming from within an iFrame and cookies have been disabled\r\n            if (window.location !== window.parent.location) {\r\n                // The form submit is coming from inside an iframe\r\n                if (!AECookie.props.cookiesEnabled()) {\r\n                    // Cookies have been turned off, pop out of the iFrame to show results in a new tab\r\n                    _tempForm.setAttribute(\"target\", '_parent');\r\n                    \r\n                    // Since cookies have been disables, set a hidden form field with the session id so that\r\n                    // the search results in a new tab in the AE.com domain can continue\r\n                    // WEBAE3-5723 changed sessid to affiliate because we only get sessid from the cookie \r\n                    var _tempHiddenField_aff = document.createElement(\"input\");\r\n                    _tempHiddenField_aff.setAttribute(\"type\", \"hidden\");\r\n                    _tempHiddenField_aff.setAttribute(\"name\", \"aff\");\r\n                    _tempHiddenField_aff.setAttribute(\"value\", AE.props.affiliate);\r\n                    _tempForm.appendChild(_tempHiddenField_aff);\r\n                    \r\n                    // We now want to just send the customer's search request to the domain associated with the affiliate\r\n                    //_tempForm.setAttribute(\"action\", 'https://'+actualURL+'/'+searchFormAction+'/');//We dont need to do this so it is now commented out, form should know already WEBAE3-6611\r\n                } else if ((navigator.userAgent.search(\"Safari\") >= 0 && navigator.userAgent.search(\"Chrome\") < 0) ||navigator.userAgent.search(\"Firefox\") >= 0) {\r\n                    // 3rd party cookies are no longer allowed by Safari without user interaction with domain\r\n                    // set critical values in DOM but change no other behavior\r\n                    // WEBAE3-5723 added check for Firefox and changed sessid to affiliate because we only get sessid from the cookie \r\n                    var _tempHiddenField_aff = document.createElement(\"input\");\r\n                    _tempHiddenField_aff.setAttribute(\"type\", \"hidden\");\r\n                    _tempHiddenField_aff.setAttribute(\"name\", \"aff\");\r\n                    _tempHiddenField_aff.setAttribute(\"value\", AE.props.affiliate);\r\n                    _tempForm.appendChild(_tempHiddenField_aff);\r\n                }\r\n            }\r\n\r\n            for (var key in params) {\r\n                if (params.hasOwnProperty(key)) {\r\n                    var _tempHiddenField = document.createElement(\"input\");\r\n                    _tempHiddenField.setAttribute(\"type\", \"hidden\");\r\n                    _tempHiddenField.setAttribute(\"name\", key);\r\n                    _tempHiddenField.setAttribute(\"value\", params[key]);\r\n                    _tempForm.appendChild(_tempHiddenField);\r\n                }\r\n            }\r\n\r\n            document.body.appendChild(_tempForm);\r\n            _tempForm.submit();\r\n            if (killBtnSpinner) props.$btnSubmit.removeClass('ui--btn-submit-wait').attr({\r\n                'disabled': false\r\n            }).find('.ui--loading-results').remove();\r\n        },\r\n        chkAgeHandler: function (isChecked) {\r\n            /* This is called on the checkbox's change event, and also handles the text input. */\r\n            var _checked = isChecked || false;\r\n\r\n        //4646 console.log(_checked)\r\n \r\n\r\n            if (_checked == true) {\r\n                props.$txtAge.val(props.ageDefault.toString()).hide();\r\n                props.$chkAge.prop(\"checked\", true);\r\n                oSubmit.searchAgeCheckbox = true;\r\n                $('.ui-warn-flag').hide();\r\n                \r\n                //fix issue with driver age error still showing when checked \r\n                // what should happen is the last error message should not show if unchecked and pick-up location is set to default\r\n                props.$txtAge.removeClass('ui--invalid-input');//WEBAE3-4632\r\n\r\n                           \r\n\r\n            } else {\r\n                props.$txtAge.val(\"\").show();\r\n                props.$chkAge.prop(\"checked\", false);\r\n                oSubmit.searchAgeCheckbox = false;\r\n     \r\n            }\r\n            oSubmit.searchAge = props.$txtAge.val();\r\n            \r\n            return oSubmit;\r\n        },\r\n        setDefaultAgeOverride: function (age) {\r\n            // This is called from outside of this module. It starts with the text input and updates the checkbox\r\n            AEdata.defaultAgeOverride = age;\r\n        },\r\n        setAge: function (age) {\r\n            // This is called from outside of this module. It starts with the text input and updates the checkbox\r\n\r\n            // First we update the text input\r\n            props.$txtAge.val(age.toString());\r\n                            // And now we update the JSON object\r\n            oSubmit.searchAge = age.toString();\r\n\r\n            if(!AEdata.modify){// Then we update the checkbox and show/hide the text input according to the age\r\n                if(!props.hasAgeChkbx){\r\n                    props.$chkAge.hide()\r\n                    oSubmit.searchAgeCheckbox = false;\r\n                    props.$txtAge.show();\r\n                }\r\n                else if (age < props.ageMin || age > props.ageMax) {\r\n                    props.$chkAge.prop('checked', false);\r\n                    oSubmit.searchAgeCheckbox = false;\r\n                    props.$txtAge.show();\r\n                } else {\r\n                    props.$chkAge.prop('checked', true);\r\n                    oSubmit.searchAgeCheckbox = true;\r\n                    props.$txtAge.hide();\r\n                }\r\n            }\r\n            return oSubmit;\r\n        },\r\n        forceSearchAgeCheckBox: function () {\r\n            //will uncheck search age box even if age is within range so user sees whatever was input - WEBAE3-1686\r\n            props.$chkAge.prop('checked', false); \r\n            props.$txtAge.show();\r\n            oSubmit.searchAgeCheckbox = false;\r\n\r\n            return true;\r\n        },\r\n        useStoredSearch: function () {\r\n            return props.useStoredSearch;\r\n        },\r\n\r\n        hasAgeChkbx: function () {\r\n            return props.hasAgeChkbx;\r\n        },\r\n        cleanStoredSearch: function () {\r\n            if (AE.ui.search.useStoredSearch()) {\r\n                return (localStorage.aeSearch = \"\");\r\n            } else {\r\n                return \"\";\r\n            }\r\n        },\r\n        searchFormErrorHandler: {\r\n            init: function (title, msg, posDiff, newClass) {\r\n                var _elems = $('[tag*=\\'--ae-custom\\']');\r\n\r\n                props.$searchFormErrorHandler = {\r\n                    msgTitle: title,\r\n                    msgDesc: msg,\r\n                    pos: posDiff || {\r\n                        top: -5,\r\n                        left: 0\r\n                    },\r\n                    newClass: newClass || 'arrow-down'\r\n                };\r\n\r\n                if (AE.getSiteViewType() == 'palm') { \r\n                    props.$puLoc.blur();\r\n                    props.$doLoc.blur();\r\n                }\r\n\r\n                props.$btnSubmit.removeClass('ui--btn-submit-wait').attr({\r\n                    'disabled': false\r\n                }).find('.ui--loading-results').remove();\r\n\r\n                return UI.searchFormErrorHandler._checkValidity(_elems);\r\n            },\r\n            _checkValidity: function (elems) {\r\n                var _elems = elems;\r\n\r\n                for (var i = 0; i < _elems.length; i++) {\r\n                    var _el = _elems[i];\r\n                    var _isInvalid = $(_el).hasClass('ui--invalid-input');\r\n\r\n                    if (_isInvalid) {\r\n                        UI.searchFormErrorHandler._toggleFlag(_el);\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            },\r\n            _renderFlag: function (el) {\r\n\r\n                var _el = el;\r\n                var _flag = $('<div/>', {\r\n                    'class': 'ui-warn-flag ui-invalid-input',\r\n                    role: 'tooltip',\r\n                    tag: 'warn--ae-custom',\r\n                    'for': $(_el).attr('name'),\r\n                    visible: false\r\n                }).uniqueId();\r\n                var $ui_closeBtn = $('<button/>', {\r\n                    'class': 'ui-warn-flag-close-btn',\r\n                    role: 'button'\r\n                });\r\n                var $ui_txtContent = $('<div/>', {\r\n                    'class': 'ui-warn-flag-content',\r\n                    role: 'contentinfo'\r\n                });\r\n                var $ui_warnTitle = $('<h5/>', {\r\n                    'class': 'ui-warn-flag-title',\r\n                    role: 'heading'\r\n                });\r\n                var $ui_warnMsg = $('<span/>', {\r\n                    'class': 'ui-warn-flag-message',\r\n                    role: 'definition'\r\n                });\r\n                var $ui_flagPos = {};\r\n\r\n                $ui_warnTitle.text(AE.ui.decodeHtml(props.$searchFormErrorHandler.msgTitle)).attr({\r\n                    alt: props.$searchFormErrorHandler.msgTitle\r\n                });\r\n                $ui_warnMsg.html(props.$searchFormErrorHandler.msgDesc).attr({\r\n                    alt: props.$searchFormErrorHandler.msgDesc\r\n                });\r\n\r\n                if( AE.props.siteCode == 'FCR' ) {\r\n                    var invalidName = $(_el).attr('name');\r\n                    $('#' + invalidName + '-error').html(props.$searchFormErrorHandler.msgTitle);\r\n                    $('#' + invalidName + '-error').show();\r\n                    if(invalidName == 'pickup-loc') {\r\n                        $('div[name=\"pickup-input_text_wrapper\"]').addClass('ui--invalid-input');\r\n                    }\r\n                    if(invalidName == 'dropoff-loc') {\r\n                        $('div[name=\"dropoff-input_text_wrapper\"]').addClass('ui--invalid-input');\r\n                    }\r\n                    \r\n                }\r\n                $ui_txtContent.append($('<header/>').append($ui_warnTitle), $('<section/>').append($ui_warnMsg));\r\n\r\n                _flag.append($ui_closeBtn, $('<article/>').append($ui_txtContent)).insertBefore(_el);\r\n\r\n                props.$searchFormErrorHandler.pos = {\r\n                    top: (_flag.height() < 30) ? parseInt(props.$searchFormErrorHandler.pos.top + 12) : props.$searchFormErrorHandler.pos.top,\r\n                    left: props.$searchFormErrorHandler.pos.left\r\n                };\r\n\r\n                $ui_flagPos = {\r\n                    top: (props.$searchFormErrorHandler.pos.top - _flag.outerHeight()) + 'px',\r\n                    left: props.$searchFormErrorHandler.pos.left + 'px',\r\n                    display: 'none'\r\n\r\n                };\r\n\r\n//console.log( $ui_flagPos );\r\n                if (props.$searchFormErrorHandler.newClass != false) {\r\n                    _flag.addClass(props.$searchFormErrorHandler.newClass);\r\n                }\r\n//console.log( _flag );\r\n\r\n\r\n                _flag.css($ui_flagPos);\r\n//console.log(_flag.outerHeight())\r\n\r\n//console.log(AE.props.siteCode);//this is what I can use to detect the site and make adjustments\r\n\r\n// $('label[for=\"chk-age\"]').hide();\r\n\r\n\r\n\r\n                $ui_closeBtn.on('click', function (event) {\r\n                    event.preventDefault();\r\n                    return UI.searchFormErrorHandler._toggleFlag(_el);\r\n                });\r\n\r\n                $('.ui-selectmenu-text,.ui-datepicker-trigger').click(function() { \r\n                    clearFlag()\r\n                });\r\n\r\n                /* Text Search */\r\n                if ($(_el).is('.ui-textsearch-input') && $(_el).data('direction') == 'do') {\r\n                    document.querySelector(\"[tag*='--ae-custom']\").addEventListener(\"focus\", clearFlag);\r\n                }\r\n                if ($(_el).is('.ui-textsearch-input') && $(_el).data('direction') == 'pu') {\r\n                    document.querySelector('.ui-textsearch-input[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                }\r\n\r\n                /* Menu Search */\r\n                if ($(_el).is('.trg__menusearch--country') && $(_el).data('direction') == 'pu') {\r\n                    document.querySelector('.trg__menusearch--country[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                } else if ($(_el).is('.trg__menusearch--city') && $(_el).data('direction') == 'pu') {\r\n                    document.querySelector('.trg__menusearch--city[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                } else if ($(_el).is('.trg__menusearch--loc') && $(_el).data('direction') == 'pu') {\r\n                    document.querySelector('.trg__menusearch--loc[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                } else if ($(_el).is('.trg__menusearch--country') && $(_el).data('direction') == 'do') {\r\n                    document.querySelector('.trg__menusearch--country[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                } else if ($(_el).is('.trg__menusearch--city') && $(_el).data('direction') == 'do') {\r\n                    document.querySelector('.trg__menusearch--city[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                } else if ($(_el).is('.trg__menusearch--loc') && $(_el).data('direction') == 'do') {\r\n                    document.querySelector('.trg__menusearch--loc[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                } else if ($(_el).is('.trg__bmrsearch--country') && $(_el).data('direction') == 'pu') {\r\n                    document.querySelector('.trg__bmrsearch--country[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                } else if ($(_el).is('.trg__bmrsearch--city') && $(_el).data('direction') == 'pu') {\r\n                    document.querySelector('.trg__bmrsearch--city[data-direction=pu]').addEventListener('focus', clearFlag);\r\n                }\r\n                \r\n                if ($(_el).is('input[name=txt-age]')) {\r\n                    document.querySelector('input[name=txt-age]').addEventListener('focus', clearFlag);\r\n                }\r\n\r\n                //WEBAE3-4473 close date warning on any date interaction\r\n                if ($(_el).is('select[id=dropoff-time]')) {\r\n                    document.querySelector('span[id=dropoff-time-button]').addEventListener('focus', clearFlag);\r\n                    /* dropoff-date clearFlag doesn't work but pickup-date and pickup-time-button do, not sure why\r\n                    document.querySelector('input[id=dropoff-date]').addEventListener('focus', clearFlag);\r\n                    document.querySelector('input[name=pickup-date]').addEventListener('focus', clearFlag);\r\n                    document.querySelector('span[id=pickup-time-button]').addEventListener('focus', clearFlag);\r\n                    */\r\n                }\r\n                \r\n                function clearFlag() {\r\n                    \r\n                    document.querySelector(\"[tag='input--ae-custom']\").removeEventListener(\"focus\", clearFlag);\r\n                    return UI.searchFormErrorHandler._hideErrorFlag(_el);\r\n                }\r\n\r\n                return UI.searchFormErrorHandler._toggleFlag(_el);\r\n            },\r\n            _toggleFlag: function (el) { \r\n                var _el = el;\r\n                var _hasFlag = (typeof $(_el).parent().has('[tag=\\'warn--ae-custom\\']')[0] != 'undefined');\r\n                var $_flag = _hasFlag ? $(_el).prev('[tag=\\'warn--ae-custom\\']') : void(0);\r\n\r\n                if (!_hasFlag) {\r\n                    return UI.searchFormErrorHandler._renderFlag(_el);\r\n                } else {\r\n                    if ($_flag.is(':visible')) { return UI.searchFormErrorHandler._hideErrorFlag(_el); }\r\n                    if (!$_flag.is(':visible')) { return UI.searchFormErrorHandler._showErrorFlag(_el); }\r\n                }\r\n\r\n                return false;\r\n            },\r\n            _showErrorFlag: function (el) {\r\n                var _el = el;\r\n                var _hasFlag = (typeof $(_el).parent().has('[tag=\\'warn--ae-custom\\']')[0] != 'undefined');\r\n                var $_flag = _hasFlag ? $(_el).prev('[tag=\\'warn--ae-custom\\']') : void(0);\r\n                var $_button = $(_el).parent().find('button');\r\n\r\n                return $_flag.stop().fadeIn('slow', function () {\r\n                    $_flag.attr({\r\n                        'visible': true\r\n                    });\r\n                    $_button.addClass('ui-warn-flag-animated-el ui-warn--in');\r\n                });\r\n            },\r\n            _hideErrorFlag: function (el) {\r\n                var _el = el;\r\n                var _hasFlag = (typeof $(_el).parent().has('[tag=\\'warn--ae-custom\\']')[0] != 'undefined');\r\n                var $_flag = _hasFlag ? $(_el).prev('[tag=\\'warn--ae-custom\\']') : void(0);\r\n                var $_button = $(_el).parent().find('button');\r\n\r\n                if( AE.props.siteCode == 'FCR' ) {\r\n                    var invalidName = $(_el).attr('name');\r\n                    $('#' + invalidName + '-error').hide();\r\n                    if(invalidName == 'pickup-loc') {\r\n                        $('div[name=\"pickup-input_text_wrapper\"]').removeClass('ui--invalid-input');\r\n                    }\r\n                    if(invalidName == 'dropoff-loc') {\r\n                        $('div[name=\"dropoff-input_text_wrapper\"]').removeClass('ui--invalid-input');\r\n                    }\r\n                }\r\n\r\n\r\n\r\n\r\n                $_button.addClass('ui-warn--out').removeClass('ui-warn--in');\r\n\r\n                return _hasFlag ? $_flag.stop().animate({\r\n                    top: parseInt(props.$searchFormErrorHandler.pos.top - 10) + 'px',\r\n                    opacity: 0\r\n                }, 'slow', function () {\r\n                    $_flag.attr({\r\n                        'visible': false\r\n                    });\r\n                    UI.searchFormErrorHandler._destroy(_el);\r\n                }) : false;\r\n            },\r\n            _destroy: function (el) {\r\n                var _el = el;\r\n                var _hasFlag = (typeof $(_el).parent().has('[tag=\\'warn--ae-custom\\']')[0] != 'undefined');\r\n                var $_flag = _hasFlag ? $(_el).prev('[tag=\\'warn--ae-custom\\']') : void(0);\r\n                $(_el).removeClass('ui--invalid-input');\r\n\r\n                return _hasFlag ? setTimeout(function () {\r\n                    $_flag.remove();\r\n                }, 500) : false;\r\n            }\r\n        },\r\n        readCookie:function(name) {\r\n            var nameEQ = name.toLowerCase() + \"=\";\r\n            var ca = document.cookie.split(';');\r\n            for (var i = 0; i < ca.length; i++) {\r\n                var c = ca[i].toLowerCase();\r\n                while (c.charAt(0) == ' ') c = c.substring(1, c.length);\r\n                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\r\n            }\r\n            return null;\r\n        },\r\n        fcrOneWayToggle: function(event) {\r\n            //for some reason, a successful search populates 'oOW', but a failed search populates 'OOW'. So check for both. - Mike\r\n            try {\r\n                if(AEdata.booking && (typeof(AEdata.booking.quote.oQuote.oOW) !== 'undefined') || typeof(AEdata.booking.quote.oQuote.OOW) !== 'undefined') {\r\n                    if( (typeof(AEdata.booking.quote.oQuote.oOW) !== 'undefined' && AEdata.booking.quote.oQuote.oOW.locList) || (typeof(AEdata.booking.quote.oQuote.OOW) !== 'undefined' && AEdata.booking.quote.oQuote.OOW.locList) ) {\r\n                        $(\"input[name='fcr-oneway_chk']\").prop( \"checked\", true );\r\n                        UI.fcrToggleOnewayOpen();\r\n\r\n                    }\r\n                }\r\n            } catch (e) {}\r\n        },\r\n        autocomplete: {\r\n            getInputs: function () {\r\n                return {\r\n                    $puLoc: props.$puLoc,\r\n                    $doLoc: props.$doLoc,\r\n                    $puDate: props.$puDate,\r\n                    $doDate: props.$doDate,\r\n                    $hiddenPuDate: props.$hiddenPuDate,\r\n                    $hiddenDoDate: props.$hiddenDoDate,\r\n                    $puTime: props.$puTime,\r\n                    $doTime: props.$doTime,\r\n                    $hiddenPuTime: props.$hiddenPuTime,\r\n                    $hiddenDoTime: props.$hiddenDoTime,\r\n                    $chkDiff: props.$chkDiff,\r\n                    $btnSubmit: props.$btnSubmit\r\n                };\r\n            },\r\n            setFromQuote: function (options) {\r\n                options = options || {};\r\n                if(AEdata && AEdata.booking && AEdata.booking.quote && AEdata.booking.quote.oQuote){\r\n                    oSubmit.searchAge = AEdata.booking.quote.oQuote.age;\r\n                    if(AEdata.booking.quote.oQuote.oPU){\r\n                        oSubmit.display_label = AEdata.booking.quote.oQuote.oPU.name;\r\n                        oSubmit.city = AEdata.booking.quote.oQuote.oPU.city;\r\n                        oSubmit.puloclist = AEdata.booking.quote.oQuote.oPU.locList;\r\n                        oSubmit.pucode = AEdata.booking.quote.oQuote.oPU.country;\r\n                        oSubmit.puloctype = AEdata.booking.quote.oQuote.oPU.deskType;\r\n                    }\r\n                    if(AEdata.booking.quote.oQuote.oOW){\r\n                        if(AEdata.booking.quote.oQuote.oOW.locList || AEdata.booking.quote.oQuote.oOW.city || AEdata.booking.quote.oQuote.oOW.country){\r\n                            if(AEdata.booking.quote.oQuote.oDO){\r\n                                oSubmit.display_labelr = AEdata.booking.quote.oQuote.oDO.name;\r\n                                oSubmit.cityr = AEdata.booking.quote.oQuote.oDO.city;\r\n                                oSubmit.doloclist = AEdata.booking.quote.oQuote.oDO.locList;\r\n                                oSubmit.docode = AEdata.booking.quote.oQuote.oDO.country;\r\n                                oSubmit.doloctype = AEdata.booking.quote.oQuote.oDO.deskType;\r\n                            }\r\n                        }\r\n                    }\r\n                    if(!_.isEmpty(options)){\r\n                        _.extend(oSubmit,options);\r\n                    }\r\n                }\r\n            },\r\n            setValue: function (options) {\r\n                /*\r\n                    Called from the Autocomplete module when an autocomplete text input value is selected.\r\n                    The parent-level setValue() function is used for all other fields.\r\n\r\n                    Autocomplete inputs manage themselves, so we just\r\n                    need for the JSON to keep up. An object is passed in with the required properties for\r\n                    the server-side code. The object must also have a \"name\" property which contains the\r\n                    HTML name attribute as a string.\r\n\r\n                    Property names passed are defined in AE.ui.autocomplete, so this function will need to\r\n                    be kept in sync with that module.\r\n\r\n                    If the dropoff property is null, then this is a pickup. We need to clear out the\r\n                    dropoff properties. If there is data, then we just need to add the dropoff properties.\r\n                    By the time a dropoff value is set, the pickup will already be set.\r\n                */\r\n                if (options.pu == null) {\r\n                    oSubmit.display_label = null;\r\n                    oSubmit.city = null;\r\n                    oSubmit.puloclist = null;\r\n                    oSubmit.pucode = null;\r\n                    oSubmit.puloctype = null;\r\n                    oSubmit.puchaos_hub_id = null;\r\n                    return;\r\n                }\r\n\r\n                if (!options.drop) {\r\n                    oSubmit.pu = options.pu;\r\n                    oSubmit.display_label = options.pu.display_label;\r\n                    oSubmit.city = options.pu.chaos_city_name;\r\n                    oSubmit.puloclist = options.pu.desk_list;\r\n                    oSubmit.pucode = options.pu.chaos_country_code;\r\n                    oSubmit.puloctype = options.pu.loc_type;\r\n                    oSubmit.puchaos_hub_id = options.pu.chaos_hub_id;\r\n\r\n                    // If this is a pickup, clear out the dropoff data\r\n                    if (!options.preserveDO) {\r\n                        oSubmit.drop = false;\r\n                        oSubmit.display_labelr = null;\r\n                        oSubmit.cityr = null;\r\n                        oSubmit.doloclist = null;\r\n                        oSubmit.docode = null;\r\n                        oSubmit.doloctype = null;\r\n                        oSubmit.dochaos_hub_id = null;\r\n                    }\r\n                } else {\r\n                    oSubmit.drop = options.drop;\r\n                    oSubmit.display_labelr = options.drop.display_label;\r\n                    oSubmit.cityr = options.drop.chaos_city_name;\r\n                    oSubmit.doloclist = options.drop.desk_list;\r\n                    oSubmit.docode = options.drop.chaos_country_code;\r\n                    oSubmit.doloctype = options.drop.loc_type;\r\n                    oSubmit.dochaos_hub_id = options.drop.chaos_hub_id;\r\n                }\r\n\r\n                oSubmit.tgt = $('[name=tgt]').val();\r\n            }\r\n        }, // END OF autocomplete\r\n\r\n        allStorage: function (options) {  \r\n\r\n         var archive = [],\r\n            keys = Object.keys(localStorage),\r\n            i = 0, key;\r\n\r\n        for (; key = keys[i]; i++) {\r\n            archive.push( key + '=' + localStorage.getItem(key));\r\n        }\r\n\r\n        return archive;\r\n\r\n            return archive;\r\n        }\r\n    };\r\n\r\n\r\n    return UI;\r\n})();\n;var AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\n\n/*\nThe AE.ui object will be the returned result of a self-invoked function. This allows us to expose methods\nfor use by other modules while protecting some variables in a closure. If the AE.ui object is already\ndefined then it's not altered. This prevents us from running the entire function each time one of its\ninternal methods are called.\n*/\nAE.ui.selectmenu = AE.ui.selectmenu || (function(){\n\n\t'use strict';\n\t/*\n\tDEPENDENCIES: AE, AE.ui\n\t*/\n\n\tvar UI = {\n\t\tinit:function()  {\n\n\t\t\t/* Establish the props object only upon init. No need to do the work if the module isn't being called. */\n\t\t\tUI.props = {};\n\n\t\t\tAE.ui.selectmenu.statesHandled = 0;//flag for statesHandled = 0: not done; 1: done; 2: attempted but failed\n\t\t\t/*\tDROP DOWN DATASETS - Arrays to support drop downs whose options need to change based on selections in another dropdown\t*/\n\t\t\t// Country/State Dropdowns\n\t\t\tif($('select.state--select')[0] && AEdata.arrstates){\n\t\t\t\tUI.buildStateArray();\n\t\t\t\tif ( $('form .state-container')[0] && Array.isArray(UI.props.arrStates) && UI.props.arrStates.length ){\n\t\t\t\t\tUI.handleStateMenus($('form'),'div.state-container',true);\n\t\t\t\t}\n\t\t\t\t//if initial state menu build fails, try once more\n\t\t\t\tif(AE.ui.selectmenu.statesHandled !== 1){\n\t\t\t\t\t//check for array build fail before trying again\n\t\t\t\t\tif(!Array.isArray(UI.props.arrStates) || !UI.props.arrStates.length) {\n\t\t\t\t\t\tUI.buildStateArray();\n\t\t\t\t\t}\n\t\t\t\t\tif ( $('form .state-container')[0] && UI.props.arrStates.length){\n\t\t\t\t\t\tUI.handleStateMenus($('form'),'div.state-container',true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t// Motorhome Country/City Dropdowns\n\t\t\tif($('select.motorhome__select--city')[0] && $('select.motorhome__select--city').first().data('arrmhcities')){\n\t\t\t\tvar rawMHCities = $('select.motorhome__select--city').first().data('arrmhcities');\n\t\t\t\tUI.props.arrMHCities = (rawMHCities.length)? JSON.parse(decodeURIComponent(rawMHCities)) : [];\n\t\t\t\tif ( UI.props.arrMHCities.length){\n\t\t\t\t\tUI.handleMotorHomeCityMenus($('form'),true);\n\t\t\t\t}\n\t\t\t}\n\t\t// Chauffeur Country/City Dropdowns\n\t\t\tif($('select.chauffeur__select--city')[0] && $('select.chauffeur__select--city').first().data('arrcfcities')){\n\t\t\t\tvar rawCFCities = $('select.chauffeur__select--city').first().data('arrcfcities');\n\t\t\t\tUI.props.arrCFCities = (rawCFCities.length)? JSON.parse(decodeURIComponent(rawCFCities)) : [];\n\t\t\t\tif ( UI.props.arrCFCities.length){\n\t\t\t\t\tUI.handleChauffeurCityMenus($('form'),false,true);// Pick Up Country/City\n\t\t\t\t\tUI.handleChauffeurCityMenus($('form'),true,true);// Drop Off Country/City\n\t\t\t\t}\n\t\t\t}\n\t\t\tAE.ui.addBodyChangeTask({func: UI.onBodyChange});\n\t\t},\n\t\tbuildDynamicOptions:function(arrSrc){\n\t\t\tarrSrc = arrSrc || [];\n\t\t\tvar $df = $( document.createDocumentFragment() );\n\t\t\tfor(var i=0; i<arrSrc.length;i++){\n\t\t\t\tvar item = arrSrc[i];\n\t\t\t\tif(item.value === '-'){\n\t\t\t\t\t$df.append($(document.createElement('optgroup')).addClass(item.value).attr('label',item.label));\n\t\t\t\t} else {\n\t\t\t\t\t$df.append($(document.createElement('option')).attr('value',item.value).append(item.label));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $df;\n\t\t},\n\t\tbuildStateArray:function(){\n\t\t\t//WEBAE3-4036 moved to func so both init and onbodychange can build arrStates, useful in case of init error/race condition building array on init\n\t\t\tif($('select.state--select')[0] && AEdata.arrstates){\n\t\t\t\t/*\n\t\t\t\tvar rawStates = $('select.state--select').first().data('arrstates');\n\t\t\t\tUI.props.arrStates = (rawStates.length)? JSON.parse(decodeURIComponent(rawStates)) : [];\n\t\t\t\t*/\n\t\t\t\tUI.props.arrStates = (AEdata.arrstates.length)? JSON.parse(AEdata.arrstates) : [];\n\t\t\t}\n\t\t},\n\t\thandleStateMenus:function($parentForm,stateContainerSelector,preselect){\n\t\t\t$parentForm = $parentForm || $('form');\n\t\t\tstateContainerSelector = stateContainerSelector || 'div.state-container';\n\t\t\tpreselect = preselect || false;\n\t\t\tif($parentForm.hasClass('mura-form')) stateContainerSelector = 'div.mura-control-group';\n\t\t\tvar $countryDD = $parentForm.find('select.country--select');\n\t\t\tvar $stateDD = $parentForm.find('select.state--select');\n\t\t\tvar $stateDDContainer = $parentForm.find(stateContainerSelector);\n\t\t\tvar $label = $stateDDContainer.find('label');\n\t\t\t//WEBAE3-4036 adding catch so a failure doesn't break validation JS\n\t\t\ttry{\n\t\t\t\t// prevent error if attributes have not been added to state/province label\n\t\t\t\tif($label.attr('state') !== undefined && $label.attr('province') !== undefined) {\n\t\t\t\t\tvar $stateLabel = $label.attr('state');\n\t\t\t\t\tvar $provinceLabel = $label.attr('province');\n\t\t\t\t\t// Switch Label for State/Province select\n\t\t\t\t\tswitch($countryDD.val()){\n\t\t\t\t\t\tcase 'CA':\n\t\t\t\t\t\tcase 'ZA':\n\t\t\t\t\t\t\t$label.text($provinceLabel);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'AU':\n\t\t\t\t\t\tcase 'BR':\n\t\t\t\t\t\tcase 'US':\n\t\t\t\t\t\t\t$label.text($stateLabel);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar arrTheseStates = _.filter(UI.props.arrStates,function(state){\n\t\t\t\t\treturn ( state.group === $countryDD.val() );\n\t\t\t\t});\n\n\t\t\t\t$stateDD.empty().addClass('state_dd_hide');\n\t\t\t\t$stateDD.parent().removeClass('ui-state-invalid ui-state-valid');\n\t\t\t\tif(arrTheseStates.length){\n\t\t\t\t\t$stateDD.append(UI.buildDynamicOptions(arrTheseStates)).removeClass('state_dd_hide');\n\t\t\t\t\tif(preselect) $stateDD.find('option[value=\"'+$stateDD.data('startval')+'\"]').prop('selected',true);\n\t\t\t\t\t$stateDDContainer.removeClass('state_dd_hide');\n\t\t\t\t} else {\n\t\t\t\t\t$stateDDContainer.addClass('state_dd_hide');\n\t\t\t\t\tif(AE.props.funnelPage === '/affaccmgt'){\n\t\t\t\t\t\t$stateDD.append($('<option/>')).change();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tAE.ui.selectmenu.statesHandled = 1;//set to 1 on completion\n\t\t\t} catch (err) {\n\t\t\t\tAE.ui.selectmenu.statesHandled = 2;//set to 2 on failure\n\t\t\t\t//console.log(err)\n\t\t\t}\t\t\t\n\t\t},\n\t\thandleMotorHomeCityMenus:function($parentForm,preselect){\n\t\t\t$parentForm = $parentForm || $('form');\n\t\t\tpreselect = preselect || false;\n\t\t\tvar $countryDD = $parentForm.find('select.motorhome__select--country');\n\t\t\tvar $cityDD = $parentForm.find('select.motorhome__select--city');\n\t\t\tvar $vehTypeBoxes = $parentForm.find('.vehType');\n\t\t\tvar arrTheseCities = _.filter(UI.props.arrMHCities,function(city){\n\t\t\t\treturn ( city.group === $countryDD.val() );\n\t\t\t});\n\t\t\t$cityDD.empty();\n\t\t\t$cityDD.parent().removeClass('ui-state-invalid ui-state-valid');\n\t\t\tif(arrTheseCities.length){\n\t\t\t\t$cityDD.append(UI.buildDynamicOptions(arrTheseCities));\n\t\t\t\tif(preselect) $cityDD.find('option[value=\"'+$cityDD.data('startval')+'\"]').prop('selected',true);\n\t\t\t}\n\t\t\t$vehTypeBoxes.addClass('trulyhidden');\n\t\t\t$($vehTypeBoxes.filter('.'+$countryDD.val())).removeClass('trulyhidden');\n\t\t},\n\t\thandleChauffeurCityMenus:function($parentForm,dropoff,preselect){\n\t\t\t$parentForm = $parentForm || $('form');\n\t\t\tdropoff = dropoff || false;\n\t\t\tpreselect = preselect || false;\n\t\t\tvar selector = (dropoff)? 'select.chauffeur__select--do' : 'select.chauffeur__select--pu';\n\t\t\tvar $countryDD = $parentForm.find(selector+'.chauffeur__select--country');\n\t\t\tvar $cityDD = $parentForm.find(selector+'.chauffeur__select--city');\n\t\t\tvar arrTheseCities = _.filter(UI.props.arrCFCities,function(city){\n\t\t\t\treturn ( city.group === $countryDD.val() );\n\t\t\t});\n\t\t\t$cityDD.empty();\n\t\t\t$cityDD.parent().removeClass('ui-state-invalid ui-state-valid');\n\t\t\tif(arrTheseCities.length){\n\t\t\t\t$cityDD.append(UI.buildDynamicOptions(arrTheseCities));\n\t\t\t\tif(preselect) $cityDD.find('option[value=\"'+$cityDD.data('startval')+'\"]').prop('selected',true);\n\t\t\t}\n\t\t},\n\t\thandleExpiryMenus:function($yearSelect){\n\t\t\t$yearSelect = $yearSelect || $('form select.expyear--select');\n\t\t\tvar rightNow = new Date();\n\t\t\tvar thisMonth = rightNow.getMonth()+1;// JS Months are 0 Indexed\n\t\t\tvar thisYear = rightNow.getFullYear().toString().substring(2);\n\t\t\tif($yearSelect[0]){\n\t\t\t\tvar $monthSelect = $($yearSelect.data('expmonth'));\n\t\t\t\tif($monthSelect[0]){\n\t\t\t\t\tvar $monthOptions = $monthSelect.children('option').prop('disabled',false);\n\t\t\t\t\tif($yearSelect.val() === thisYear){\n\t\t\t\t\t\tvar aPastOptions = _.filter($monthOptions,function(opt){return Number(opt.value) < thisMonth});\n\t\t\t\t\t\t$(aPastOptions).prop('disabled',true).prop('selected',false);\n\t\t\t\t\t\t//console.log(_.filter($monthOptions,function(opt){return Number(opt.value) < thisMonth}));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/* \n\t\tWEBAE3-3806 \n\t\t- IATA input now always shows as optional, regardless of site\n\t\t  or of source country.\n\t\t- left this in comments in case we need to bring this back\n\t\thandleIataInput:function($parentForm,tpiataContainerSelector){\n\t\t\t//this handles IATA input on Travel Partner sign up form when country select \n\t\t\t$parentForm = $parentForm || $('form');\n\t\t\ttpiataContainerSelector = tpiataContainerSelector || 'div.tpiata';\n\t\t\tvar $countryDD = $parentForm.find('select.country--select');\n\t\t\tvar $tpiataContainer = $parentForm.find(tpiataContainerSelector);\n\t\t\tvar $tpiataInput = $parentForm.find('input#tpiata');\n\t\t\tvar $tpiataDiv = $parentForm.find('div.tpiatawrap');\n\t\t\t// show iata field for relevant countries\n\t\t\tvar iataShow = false;\n\t\t\tvar iataRequired = false;\n\t\t\tswitch($countryDD.val()){\n\t\t\t\tcase 'CA':\n\t\t\t\tcase 'US':\n\t\t\t\t\tiataShow = true;\n\t\t\t\t\tiataRequired = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ZA':\n\t\t\t\t\tiataShow = true;\n\t\t\t\t\tiataRequired = false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(iataShow){\n\t\t\t\t$tpiataContainer.removeClass('state_dd_hide');\n\t\t\t\t$tpiataDiv.removeClass('ui-state-invalid ui-state-valid');\n\t\t\t\tif(iataRequired) {\n\t\t\t\t\t$tpiataInput.prop(\"required\", \"required\");\n\t\t\t\t\t$tpiataDiv.addClass('required');\n\t\t\t\t} else {\n\t\t\t\t\t$tpiataInput.prop(\"required\", \"\");\n\t\t\t\t\t$tpiataDiv.removeClass('required');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$tpiataContainer.addClass('state_dd_hide');\n\t\t\t\t$tpiataInput.prop(\"required\", \"\");\n\t\t\t\t$tpiataDiv.removeClass('ui-state-invalid ui-state-valid');\n\t\t\t\t$tpiataDiv.addClass('required');\n\t\t\t\t$tpiataInput.val('');\n\t\t\t}\n\t\t},\n\t\tEND COMMENT for WEBAE3-3806 */\n\t\tonBodyChange:function(event,$target){\n\n\t\t\tif(event.target.tagName.toUpperCase() === 'SELECT'){\n\t\t\t\tif($target.hasClass('expyear--select')) UI.handleExpiryMenus($target);\n\t\t\t\tif($target.hasClass('country--select'))\t{\n\t\t\t\t\t//WEBAE3-4036 in case init failed, make sure we have a states array before trying to build menu\n\t\t\t\t\tif(!Array.isArray(UI.props.arrStates) || !UI.props.arrStates.length){\n\t\t\t\t\t\tUI.buildStateArray();\n\t\t\t\t\t}\n\t\t\t\t\tUI.handleStateMenus($target.closest('form'));\n\n\t\t\t\t\t//WEBAE3-4840 hide uplift promo divs if country is not US or CA\n\t\t\t\t\tvar aUpliftPromoDivs = document.getElementsByClassName('aeUplift-modal-container');\n\t\t\t\t\tif(aUpliftPromoDivs.length){\n\t\t\t\t\t\tvar upDivDisp = 'inline-block';\n\t\t\t\t\t\tswitch($target.val()){\n\t\t\t\t\t\t\tcase 'CA':\n\t\t\t\t\t\t\tcase 'US':\n\t\t\t\t\t\t\t\tupDivDisp = 'inline-block';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tupDivDisp = 'none';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const upDiv of aUpliftPromoDivs) {\n\t\t\t\t\t\t\tupDiv.style.display = upDivDisp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// WEBAE3-3806 IATA input always optional for TP signup\n\t\t\t\t// if($target.hasClass('country--select'))\tUI.handleIataInput($target.closest('form'));//added for WEBAE3-3162\n\t\t\t\tif($target.hasClass('motorhome__select--country')) UI.handleMotorHomeCityMenus($target.closest('form'));\n\t\t\t\tif($target.hasClass('chauffeur__select--country')){\n\t\t\t\t\tif($target.hasClass('chauffeur__select--pu')){\n\t\t\t\t\t\tUI.handleChauffeurCityMenus($target.closest('form'),false,false);\n\t\t\t\t\t} else if($target.hasClass('chauffeur__select--do')){\n\t\t\t\t\t\tUI.handleChauffeurCityMenus($target.closest('form'),true,false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn UI;\n})();\n\n;\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\n\n/*\nThe AE.ui object will be the returned result of a self-invoked function. This allows us to expose methods\nfor use by other modules while protecting some variables in a closure. If the AE.ui object is already\ndefined then it's not altered. This prevents us from running the entire function each time one of its\ninternal methods are called.\n*/\nAE.ui.timeselectmenu = AE.ui.timeselectmenu || (function () {\n\n\t'use strict';\n\t/*\n\tDEPENDENCIES: AE, AE.ui\n\t*/\n\tvar searchPuTime,\n\t\tsearchDoTime,\n\t\tvouchDateTime = ((typeof (oBKdateTime) != 'undefined') && !_.isEmpty(oBKdateTime)) ? oBKdateTime : false;\n\n\tvar UI = {\n\t\tinit: function () {\n\t\t\t// Setup the timeselects\n\t\t\tvar GET_INPUTS = AE.ui.search.autocomplete.getInputs();\n\t\t\t/* Establish the props object only upon init. No need to do the work if the module isn't being called. */\n\t\t\tUI.props = {\n\t\t\t\t$puTime: GET_INPUTS.$puTime,\n\t\t\t\t$doTime: GET_INPUTS.$doTime,\n\t\t\t\t$hiddenPuTime: GET_INPUTS.$hiddenPuTime,\n\t\t\t\t$hiddenDoTime: GET_INPUTS.$hiddenDoTime,\n\t\t\t\tmodElement: $('html, body'),\n\t\t\t\tmodClass: 'ui-timeselect-open'\n\t\t\t};\n\n\t\t\tUI.mainSearch();\n\t\t},\n\t\tmainSearch: function () {\n\n\t\t\tvar _tempPuT;\n\t\t\tvar _tempDoT;\n\t\t\tvar _deeplinkPuT;\n\t\t\tvar _deeplinkDoT;\n\n\t\t\tsearchPuTime = UI.props.$hiddenPuTime.val();\n\t\t\tsearchDoTime = UI.props.$hiddenDoTime.val();\n\n\t\t\t/*\n\t\t\t * Getting the times from stored search if available.\n\t\t\t * used below in 'timeselectmenucreate'\n\t\t\t */\n\t\t\t_tempPuT = !vouchDateTime ? searchPuTime : vouchDateTime.bkputime;\n\t\t\t_tempDoT = !vouchDateTime ? searchDoTime : vouchDateTime.bkdotime;\n\n\t\t\t_deeplinkPuT = UI.props.$hiddenPuTime.attr('data-deeplinkval');\n\t\t\t_deeplinkDoT = UI.props.$hiddenDoTime.attr('data-deeplinkval');\n\n\n\t\t\tif (typeof _deeplinkPuT !== typeof undefined && _deeplinkPuT !== false) {\n\t\t\t  _tempPuT = _deeplinkPuT;\n\t\t\t}\n\n\t\t\tif (typeof _deeplinkDoT !== typeof undefined && _deeplinkDoT !== false) {\n\t\t\t  _tempDoT = _deeplinkDoT;\n\t\t\t}\n\t\t\t// WEBAE3-3327 - Recover Search Times after BK data wiped\n\t\t\tif(_tempPuT === '') _tempPuT = searchPuTime;\n\t\t\tif(_tempDoT === '') _tempDoT = searchDoTime;\n\n\t\t\t$.widget('custom.timeselectmenu', $.ui.selectmenu, {\n\t\t\t\t_create: function (event, ui) {\n\t\t\t\t\tthis._super(event, ui);\n\t\t\t\t\tthis.element.menu().data('menu', this.menu);\n\t\t\t\t},\n\t\t\t\t_renderMenu: function (ul, items) {\n\t\t\t\t\tvar $widget = this;\n\t\t\t\t\tvar $menu = ul;\n\t\t\t\t\t$.each(items, function (index, item) {\n\t\t\t\t\t\titem.ind = index;\n\t\t\t\t\t\t$widget._renderItemData($menu, item);\n\t\t\t\t\t});\n\t\t\t\t\t$menu.find(\"li:odd\").addClass(\"odd\");\n\t\t\t\t},\n\t\t\t\t_renderItem: function (ul, item) {\n\n\t\t\t\t\tvar $widget = this;\n\t\t\t\t\tvar $select = $widget.element;\n\t\t\t\t\tvar time = item.label;\n\t\t\t\t\tvar ind = item.ind;\n\t\t\t\t\tvar hours = Number(time.match(/^(\\d+)/)[1]);\n\t\t\t\t\tvar minutes = Number(time.match(/:(\\d+)/)[1]);\n\t\t\t\t\tvar AM_PM = time.slice(-2);\n\n\t\t\t\t\tif (AM_PM == \"PM\" && hours < 12) hours = hours + 12;\n\t\t\t\t\tif (AM_PM == \"AM\" && hours == 12) hours = hours - 12;\n\t\t\t\t\tvar sHours = hours.toString();\n\t\t\t\t\tvar sMinutes = minutes.toString();\n\t\t\t\t\tif (hours < 10) sHours = \"0\" + sHours;\n\t\t\t\t\tif (minutes < 10) sMinutes = \"0\" + sMinutes;\n\n\t\t\t\t\tvar _updatedTime = sHours + \":\" + sMinutes;\n\n\t\t\t\t\tvar li = $('<li/>', {\n\t\t\t\t\t\t'data-position': ind,\n\t\t\t\t\t\tclass: 'ui-timeselect-rev-opt'\n\t\t\t\t\t});\n\n\t\t\t\t\tvar innerDiv = $('<div/>', {\n\t\t\t\t\t\t'tabindex': -1,\n\t\t\t\t\t\trole: 'option',\n\t\t\t\t\t\tclass: 'ui-menu-item-wrapper ui-timeselect-rev-opt-inner'\n\t\t\t\t\t}).text(item.label);\n\n\t\t\t\t\tif (item.disabled) li.addClass('ui-state-disabled');\n\n\t\t\t\t\tif ($select.val() === _updatedTime) li.addClass('ui-time-active');\n\t\t\t\t\tli.append(innerDiv);\n\t\t\t\t\treturn li.appendTo(ul);\n\t\t\t\t}\n\t\t\t\t// TODO : remove eventlistener from \"open\" and access here…\n\t\t\t\t// ,\n\t\t\t\t// _customTouchMove: function(event) {\n\t\t\t\t// \tconsole.log(\"doing custom touchmove\")\n\t\t\t\t// \t\t\t\t\tvar $target = $(event.target);\n\t\t\t\t// \t\t\t\t\tif ($target.is('[class*=ui-timeselect-rev]')) {\n\t\t\t\t// \t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t// \t\t\t\t\t} else {\n\n\t\t\t\t// \t\t\t\t\t\t$('.' + UI.props.modClass).each(function (ind, item) {\n\t\t\t\t// \t\t\t\t\t\t\treturn item.removeEventListener('touchmove', UI._customTouchMove, {\n\t\t\t\t// \t\t\t\t\t\t\t\tpassive: true\n\t\t\t\t// \t\t\t\t\t\t\t});\n\t\t\t\t// \t\t\t\t\t\t});\n\n\t\t\t\t// \t\t\t\t\t\t$(this).timeselectmenu('close');\n\t\t\t\t// \t\t\t\t\t}\n\t\t\t\t// \t\t\t\t}\n\t\t\t});\n\n\t\t\t// if(UI.props.$puTime != ''){\n\n\t\t\tUI.props.$puTime.add(UI.props.$doTime).on('timeselectmenucreate', function (event, ui) {\n\n\t\t\t\tvar $widget = $(this).timeselectmenu().timeselectmenu('instance');\n\t\t\t\tvar $select = $widget.element;\n\t\t\t\tvar $menu = $widget.menu;\n\t\t\t\tvar $button = $widget.button;\n\t\t\t\tvar $wrap = $widget.menuWrap;\n\t\t\t\tvar _direction = $select.data('direction');\n\t\t\t\tvar _updatedVal = (_direction == 'pu') ? _tempPuT : _tempDoT;\n\n\t\t\t\t$select.attr({\n\t\t\t\t\t'aria-owns': $widget.menu.attr('id'),\n\t\t\t\t\t'aria-labelledby': $widget.button.attr('id') + '-label',\n\t\t\t\t\t'aria-autocomplete': 'list',\n\t\t\t\t\t'aria-readonly': true,\n\t\t\t\t\trole: 'combobox'\n\t\t\t\t});\n\n\t\t\t\t$menu.attr({\n\t\t\t\t\trole: 'listbox',\n\t\t\t\t\t'tabindex': -1\n\t\t\t\t}).addClass('ui-timeselect-rev-menu');\n\n\t\t\t\t$button.attr({\n\t\t\t\t\t'aria-controls': $menu.attr('id'),\n\t\t\t\t\t'aria-labelledby': $widget.button.attr('id') + '-label'\n\t\t\t\t}).addClass('ui-timeselect-trigger ui-timeselect-rev-button');\n\n\t\t\t\t$wrap.addClass('ui-timeselect-menu');\n\t\t\t\t/* *\n\t\t\t\t* '.ui-ready-waiting' class is used to block text switch on setting value\n\t\t\t\t* */\n\t\t\t\t$select.parent('.styled--select').removeClass('ui-ready-waiting');\n\t\t\t\t/* *\n\t\t\t\t * Use the value as defined in UI.mainSearch()\n\t\t\t\t * */\n\t\t\t\t$select.val(_updatedVal).timeselectmenu('refresh');\n\t\t\t});\n\n\t\t\tUI.props.$puTime.add(UI.props.$doTime).on('timeselectmenuopen', function (event, ui) {\n\t\t\t\tvar $widget = $(this).timeselectmenu().timeselectmenu('instance');\n\t\t\t\tvar $select = $widget.element;\n\t\t\t\tvar $menu = $widget.menu;\n\n\t\t\t\tvar _selInd = $select.find('option:selected')[0].index + 1;\n\t\t\t\tvar scrollTo = $menu.find('li:nth-child(' + _selInd + ')');\n\n\t\t\t\tUI.props.modElement.addClass(UI.props.modClass);\n\n\t\t\t\tfunction tsTouchM(event) {\n\t\t\t\t\tvar $target = $(event.target);\n\t\t\t\t\tif ($target.is('[class*=ui-timeselect-rev]')) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t$('.' + UI.props.modClass).each(function (ind, item) {\n\t\t\t\t\t\t\treturn item.removeEventListener('touchmove', tsTouchM, {\n\t\t\t\t\t\t\t\tpassive: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$select.timeselectmenu('close');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// $( '.' + UI.props.modClass ).each(function(ind, item){\n\t\t\t\t// \t\treturn item.addEventListener('touchmove', UI._customTouchMove, {\n\t\t\t\t// \t\t\tpassive: true,\n\t\t\t\t// \t\t\tcapture: true\n\t\t\t\t// \t\t});\n\t\t\t\t// \t});\n\n\t\t\t\t$('.' + UI.props.modClass).each(function (ind, item) {\n\t\t\t\t\treturn item.addEventListener('touchmove', tsTouchM, {\n\t\t\t\t\t\tpassive: true,\n\t\t\t\t\t\tcapture: true\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t// FCR had disabled this for some reason. Putting back so as not to lose it on AE. We can add a condition later if we need to disable this on FCR.\n\t\t\t\treturn $menu.animate({\n\t\t\t\t\tscrollTop: scrollTo.offset().top - $menu.offset().top + $menu.scrollTop()\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t\tUI.props.$puTime.add(UI.props.$doTime).on('timeselectmenuclose', function (event, ui) {\n\t\t\t\tUI.props.modElement.removeClass(UI.props.modClass);\n\t\t\t});\n\n\t\t\tUI.props.$puTime.add(UI.props.$doTime).on('timeselectmenuselect', function (event, ui) {\n\t\t\t\tvar $widget = $(this).timeselectmenu().timeselectmenu('instance');\n\t\t\t\tvar $select = $widget.element;\n\t\t\t\tvar $menu = $widget.menu;\n\t\t\t\tvar $item = ui.item;\n\t\t\t\tvar $selectPos = $item.index;\n\t\t\t\tvar $selectVal = $item.value;\n\t\t\t\tvar $menuItems = $menu.find('li');\n\n\t\t\t\tfor (var i = 0; i < $menuItems.length; i++) {\n\t\t\t\t\tvar $mI = $($menuItems[i]);\n\t\t\t\t\tif ($mI.hasClass('ui-time-active')) $mI.removeClass('ui-time-active');\n\t\t\t\t\tif ($mI.attr('data-position') == $selectPos) $mI.addClass('ui-time-active');\n\t\t\t\t}\n\n\t\t\t\t$select.val($selectVal);\n\t\t\t});\n\n\t\t\t$.each(UI.props.$puTime.add(UI.props.$doTime), function (ind, obj) {\n\t\t\t\tvar $select = $(obj);\n\t\t\t\t$select.timeselectmenu({\n\t\t\t\t\tappendTo: AE.ui.props.appendTarget,\n\t\t\t\t\tposition: {\n\t\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\t\tat: \"left bottom+3\",\n\t\t\t\t\t\tcollision: \"none\"\n\t\t\t\t\t},\n\t\t\t\t\ticons: {\n\t\t\t\t\t\tbutton: \"ui-timeselect-icon far fa-clock\"\n\t\t\t\t\t}\n\t\t\t\t}).timeselectmenu(\"menuWidget\").addClass(\"overflow\");\n\t\t\t});\n\t\t}\n\n\n\t\t// }\n\t};\n\treturn UI;\n})();\n;\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n/*\nThe AE.ui object will be the returned result of a self-invoked function. This allows us to expose methods\nfor use by other modules while protecting some variables in a closure. If the AE.ui object is already\ndefined then it's not altered. This prevents us from running the entire function each time one of its\ninternal methods are called.\n*/\nAE.ui.datepicker = AE.ui.datepicker || (function() {\n\t'use strict';\n\t/*\n\tDEPENDENCIES: AE, AE.ui\n\t*/\n\n\tvar searchPuDate,\n\t\tsearchDoDate,\n\t\tvouchDateTime = ((typeof(oBKdateTime) !== 'undefined') && !_.isEmpty(oBKdateTime)) ? oBKdateTime : false;\n\n\tvar UI = {\n\t\tinit: function() {\n\t\t\t// Setup the datepickers\n\t\t\tvar GET_INPUTS = AE.ui.search.autocomplete.getInputs();\n\n\t\t\tUI.props = {\n\t\t\t\t$puDate: GET_INPUTS.$puDate,\n\t\t\t\t$doDate: GET_INPUTS.$doDate,\n\t\t\t\t$hiddenPuDate: GET_INPUTS.$hiddenPuDate,\n\t\t\t\t$hiddenDoDate: GET_INPUTS.$hiddenDoDate,\n\t\t\t\t$puTime: GET_INPUTS.$puTime,\n\t\t\t\t$doTime: GET_INPUTS.$doTime,\n\t\t\t\t$hiddenPuTime: GET_INPUTS.$hiddenPuTime,\n\t\t\t\t$hiddenDoTime: GET_INPUTS.$hiddenDoTime,\n\t\t\t\tstrDateFormat: $.datepicker._defaults.dateFormat, // The format of the date that the user sees\n\t\t\t\taltFormat: \"yy-mm-dd\", // The date format that gets passed along when the search form is submitted\n\t\t\t\tcurrentWindowSize: AE.getSiteViewType(),\n\t\t\t\tresponsiveNumMonthsToShow: {\n\t\t\t\t\t\"palm\": 1,\n\t\t\t\t\t\"lap\": 2,\n\t\t\t\t\t\"desk\": 2,\n\t\t\t\t\t\"desk-wide\": 2\n\t\t\t\t},\n\t\t\t\tdatepickerOptions: {},\n\t\t\t\tisLeaseSearch: (AE.ui.searchType.leasesearch && $(AE.ui.props.$aeSearch[0])\n\t\t\t\t\t.find('#locations-wrapper')\n\t\t\t\t\t.hasClass('ae__lease_search')),\n\t\t\t\tisBMRSearch: (isBMRSearch && AE.ui.searchType.bmr)? true : false,\n\t\t\t\toSubmit: AE.ui.search.getSubmitValues()\n\t\t\t};\n\n//if (UI.props.isLeaseSearch && AE.props.isAUNZ) {\n//\tAE.props.buyBackMin = AE.props.buyBackMin + 'T16:00:00.000Z';\n//}\n\n\t\t\tUI.props.numberOfCalendarMonthsToShow = UI.checkCurrentWindowSize(AE.ui.search.$viewSize);\n\n\t\t\t// Set initial values\n\t\t\tUI.props.datepickerOptions = {\n\t\t\t\t_isOpen: false,\n\t\t\t\tfirstDay: $.datepicker._defaults.firstDat,\n\t\t\t\tchangeMonth: (UI.props.currentWindowSize === 'palm') ? true : false,\n\t\t\t\tchangeYear: (UI.props.currentWindowSize === 'palm') ? true : false,\n\t\t\t\tshowAnim: \"fadeIn\",\n\t\t\t\tshowOn: 'button',\n\t\t\t\tbuttonImage: '/plugins/ae3/themes/AE1/images/empty-pixel-datepicker-btn.png',\n\t\t\t\tbuttonImageOnly: false,\n\t\t\t\tbuttonText: '',\n\t\t\t\t// https://objectpartners.com/2012/06/18/jquery-ui-datepicker-ie-focus-fix/\n\t\t\t\tfixFocusIE: false,\n\t\t\t\t// The format of the date that the user sees\n\t\t\t\tdateFormat: UI.props.strDateFormat,\n\t\t\t\tonSelect: function(dateText, inst) {\n\t\t\t\t\tvar _tempPuD;\n\t\t\t\t\tvar _tempDoD;\n\t\t\t\t\t\n\t\t\t\t\t// Fixes Datepicker from automatically re-opening after selection is made\n\t\t\t\t\tthis.fixFocusIE = true;\n\t\t\t\t\t$(this).change().focus();\n\t\t\t\t\t\n\t\t\t\t\t// The datepicker is updating its own input in this case, so we just need to update the JSON object to match\n\t\t\t\t\tif (UI.isPickupField('#' + inst.id)) {\n\t\t\t\t\t\tUI.props.oSubmit.puCal = UI.convertDate(UI.props.$puDate);\n\t\t\t\t\t\t_tempPuD = UI.props.oSubmit.puCal + 'T' + UI.props.$puTime.val();\n\t\t\t\t\t\tif (UI.props.isBMRSearch) {\n\t\t\t\t\t\t\t_tempPuD = UI.props.oSubmit.puCal + 'T05:00:00.000Z';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsearchPuDate = new Date(_tempPuD);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Because this is a pickup field, we must set a new minimum date and value for the dropoff\n\t\t\t\t\t\tUI.setMinDropoffDate();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!UI.isAfterPickup()) {\n\t\t\t\t\t\t\tUI.setDropoffForward((UI.props.oSubmit.excl_ltr && AE.props.buyBackMin) ? AE.props.buyBackMin : 3);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is a dropoff field, so we just need to set the JSON to match the input\n\t\t\t\t\t\tUI.props.oSubmit.doCal = UI.convertDate(UI.props.$doDate);\n\t\t\t\t\t\t_tempDoD = UI.props.oSubmit.doCal + 'T' + UI.props.$doTime.val();\n\t\t\t\t\t\tif (UI.props.isBMRSearch) {\n\t\t\t\t\t\t\t_tempDoD = UI.props.oSubmit.doCal + 'T05:00:00.000Z';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsearchDoDate = new Date(_tempDoD);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!UI.isAfterPickup()) {\n\t\t\t\t\t\t\tUI.setMinDropoffDate();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (UI.props.oSubmit.excl_ltr && UI.tooShortForLease()) {\n\t\t\t\t\t\t\tUI.setMinDropoffDate();\n\t\t\t\t\t\t\tUI.setDropoffForward((UI.props.oSubmit.excl_ltr && AE.props.buyBackMin) ? AE.props.buyBackMin : 3);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (UI.props.isBMRSearch && UI.tooShortForBMR()) {\n\t\t\t\t\t\t\tUI.setMinDropoffDate();\n\t\t\t\t\t\t\tUI.setDropoffForward(AE.props.bmrMin);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonClose: function(dateText, inst) {\n\t\t\t\t\tvar $input = inst.id === 'pickup-date' ? UI.props.$puDate.datepicker() : UI.props.$doDate.datepicker();\n\t\t\t\t\tif (!AE.legacy.grief.isIE) {\n\t\t\t\t\t\t$(this)\n\t\t\t\t\t\t\t.trigger('touchend');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// IE 10 has trouble reopening after hide\n\t\t\t\t\t\t$($input.data('datepicker').trigger).on('click', function() {\n\t\t\t\t\t\t\t$input.datepicker('show');\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// Fixes Datepicker from automatically re-opening after selection is made\n\t\t\t\t\t// this.fixFocusIE = true;\n\t\t\t\t\t// this.focus();\n\t\t\t\t},\n\t\t\t\tbeforeShow: function(input, inst) {\n\t\t\t\t\tvar direction = $(input)\n\t\t\t\t\t\t.data('direction');\n\t\t\t\t\t$(inst.dpDiv)\n\t\t\t\t\t\t.attr('data-direction', direction);\n\t\t\t\t\t// If the form is on the main page\n\t\t\t\t\tif (AE.ui.props.appendTarget) $(AE.ui.props.appendTarget)\n\t\t\t\t\t\t.append(inst.dpDiv);\n\n\t\t\t\t\t// TODO: UI.highlightSelectionRange(inst);\n\n\t\t\t\t\tvar newPuMin = new Date($(input).data('searchmindate'));\n\t\t\t\t\tvar moddedMinPuDate = AE.ui.search.isValidDate(newPuMin) ? new Date(newPuMin.getUTCFullYear(), newPuMin.getUTCMonth(),\n\t\t\t\t\t\tnewPuMin.getUTCDate())\n\t\t\t\t\t\t.toISOString() : false;\n\n\t\t\t\t\tif (moddedMinPuDate && direction === 'pu') {\n\t\t\t\t\t\tUI.props.$puDate.datepicker(\"option\", {\n\t\t\t\t\t\t\tminDate: new Date(moddedMinPuDate)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tUI.repositionDatepickerArrow(input, inst);\n\n\t\t\t\t\t$(AE.ui.props.scrollContainer)[0].addEventListener('scroll', function() {\n\t\t\t\t\t\tUI.hideOnScrollMove(input);\n\t\t\t\t\t}, {\n\t\t\t\t\t\tpassive: true\n\t\t\t\t\t});\n\n\t\t\t\t\t// Fixes Datepicker from automatically re-opening after selection is made\n\t\t\t\t\tvar result = AE.legacy.grief.isIE ? !this.fixFocusIE : true;\n\t\t\t\t\tthis.fixFocusIE = false;\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\tbeforeShowDay: UI.markDates\n\t\t\t};\n\t\t\t//END OF set initial search form datepicker options\n\t\t\t// Grab the _numberOfCalendarMonthsToShow var when it's set on Datepicker init and add it to options\n\t\t\tUI.props.datepickerOptions.numberOfMonths = UI.props.numberOfCalendarMonthsToShow;\n\t\t\t// Assign new Datepicker options\n\t\t\tUI.props.$puDate.add(UI.props.$doDate)\n\t\t\t\t.datepicker(UI.props.datepickerOptions)\n\t\t\t\t.on('touchend', function() {\n\t\t\t\t\treturn $(this).trigger('blur');\n\t\t\t\t});\n\n\t\t\t// if (UI.props.isLeaseSearch) UI.disableWeekendSelection();\n\n\t\t\tAE.addResizeTask({\n\t\t\t\tfunc: function() {\n\t\t\t\t\tUI.manageResize();\n\t\t\t\t},\n\t\t\t\targs: []\n\t\t\t});\n\n\t\t\tUI.mainSearch();\n\t\t},\n\t\tmainSearch: function() {\n\t\t\tvar _tempPuD;\n\t\t\tvar _tempDoD;\n            var _deeplinkPuD;\n\t\t\tvar _deeplinkDoD;\n\n\t\t\t// Set initial PU/DO dates from widget\n\t\t\tsearchPuDate = UI.props.$hiddenPuDate.val();\n\t\t\tsearchDoDate = UI.props.$hiddenDoDate.val();\n\n\t\t\t//GET PU DATE FROM STORED SEARCH\n\t\t\t_tempPuD = searchPuDate;\n            _tempDoD = searchDoDate;\n            if(vouchDateTime){\n            \tif(vouchDateTime.bkpudate && vouchDateTime.bkpudate !== '') _tempPuD = vouchDateTime.bkpudate;\n            \tif(vouchDateTime.bkdodate && vouchDateTime.bkdodate !== '') _tempDoD = vouchDateTime.bkdodate;\n            }\n\n            _deeplinkPuD = UI.props.$hiddenPuDate.attr('data-deeplinkval');\n\t\t\t_deeplinkDoD = UI.props.$hiddenDoDate.attr('data-deeplinkval');\n\n\t\t\tif (typeof _deeplinkPuD !== typeof undefined && _deeplinkPuD !== false) {\n\t\t\t  _tempPuD = _deeplinkPuD;\n\t\t\t}\n\n\t\t\tif (typeof _deeplinkDoD !== typeof undefined && _deeplinkDoD !== false) {\n\t\t\t  _tempDoD = _deeplinkDoD;\n\t\t\t}\n\n\t\t\tsearchPuDate = (_tempPuD !== '')? new Date(_tempPuD) : new Date();\n\t\t\tsearchPuDate = new Date(searchPuDate.getUTCFullYear(), searchPuDate.getUTCMonth(), searchPuDate.getUTCDate())\n\t\t\t\t.toISOString();\n\n\t\t\tsearchDoDate = (_tempDoD !== '')? new Date(_tempDoD) : new Date();\n\t\t\tsearchDoDate = new Date(searchDoDate.getUTCFullYear(), searchDoDate.getUTCMonth(), searchDoDate.getUTCDate())\n\t\t\t\t.toISOString();\n\n\t\t\tUI.props.$puDate.datepicker(\"setDate\", new Date(searchPuDate));\n\t\t\tUI.props.$doDate.datepicker(\"setDate\", new Date(searchDoDate));\n\n\t\t\tUI.props.$puDate.parent('.styled--select')\n\t\t\t\t.removeClass('ui-ready-waiting');\n\t\t\tUI.props.$doDate.parent('.styled--select')\n\t\t\t\t.removeClass('ui-ready-waiting');\n\n\t\t\tif (UI.props.isBMRSearch && UI.tooShortForBMR()) {\n\t\t\t\tUI.setMinDropoffDate();\n\t\t\t\tUI.setDropoffForward(AE.props.bmrMin);\n\t\t\t}else{\n\t\t\t\tUI.setMinDropoffDate();\n\t\t\t}\n\n\t\t},\n\t\thideOnScrollMove: function(input) {\n\t\t\tvar $target = $(input);\n\n\t\t\tif ($target.datepicker('widget')\n\t\t\t\t.is(':visible')) {\n\t\t\t\t$target.datepicker('hide');\n\n\t\t\t\tif (AE.legacy.grief.isIE) {\n\t\t\t\t\t$target.on('click', function() {\n\t\t\t\t\t\t$(this)\n\t\t\t\t\t\t\t.datepicker('show');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn $(AE.ui.props.scrollContainer)[0].removeEventListener('scroll', function() {\n\t\t\t\t\tUI.hideOnScrollMove();\n\t\t\t\t}, {\n\t\t\t\t\tpassive: true\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tdisableWeekendSelection: function() {\n\t\t\tvar minDate = UI.props.$puDate.datepicker('getDate');\n\n\t\t\tminDate.setDate(minDate.getDate() + AE.props.buyBackMin);\n\n\t\t\tswitch (minDate.getDay()) {\n\t\t\t\tcase 0:\n\t\t\t\t\t// Sunday\n\t\t\t\t\tminDate.setDate(minDate.getDate() + 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\t\t// Saturday\n\t\t\t\t\tminDate.setDate(minDate.getDate() + 2);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar minDoDate = $.datepicker.formatDate(UI.props.strDateFormat, new Date(minDate));\n\t\t\t/* Set the data attribute */\n\t\t\t$(UI.props.$doDate)\n\t\t\t\t.data('searchmindate', minDoDate);\n\t\t\t/* Set the minDate option */\n\t\t\tUI.props.$doDate.datepicker(\"option\", {\n\t\t\t\tminDate: minDoDate\n\t\t\t});\n\t\t},\n\t\tmarkDates: function(date) {\n\t\t\tvar $input = $(this)[0];\n\t\t\tvar _selectable = ($($input)\n\t\t\t\t.data('direction') === 'pu');\n\n\t\t\treturn UI.highlightTripDates(date, $input, _selectable);\n\t\t},\n\t\thighlightTripDates: function(date, input, selectable) {\n\t\t\tvar _selectable = selectable;\n\t\t\tvar puVal = _selectable ? new Date(UI.props.$puDate.val()) : new Date(searchPuDate);\n\t\t\tvar doVal = _selectable ? new Date(UI.props.$doDate.val()) : new Date(searchDoDate);\n\t\t\tvar minDoDateRange = new Date(searchPuDate);\n\t\t\tvar markRange = UI.getDatesInRange(puVal, doVal);\n\t\t\tvar appliedClass = '';\n\n\t\t\tif (UI.props.isLeaseSearch) {\n\t\t\t\tminDoDateRange.setDate(minDoDateRange.getDate() + AE.props.buyBackMin);\n\t\t\t} else if (UI.props.isBMRSearch){\n                // No BMR minimum rental range provided\n                minDoDateRange.setDate(minDoDateRange.getDate() + 0);\n\t\t\t} else {\n\t\t\t\tminDoDateRange.setDate(minDoDateRange.getDate());\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < markRange.length; i++) {\n\t\t\t\tif (date.getMonth() === markRange[i][0] && date.getDate() === markRange[i][1] && date.getUTCFullYear() ===\n\t\t\t\t\tmarkRange[i][2]) {\n\t\t\t\t\tif (i === 0 && !UI.props.$doDate) {\n\t\t\t\t\t\t_selectable = true;\n\t\t\t\t\t\tappliedClass = _selectable ? 'date-in-range date-range-start ui-date-highlight' : 'date-range-start';\n\t\t\t\t\t\treturn [_selectable, appliedClass, $(UI.props.$puDate)\n\t\t\t\t\t\t\t.attr('aria-label')];\n\t\t\t\t\t} else if (i === markRange.length - 1) {\n\t\t\t\t\t\tappliedClass = 'date-in-range date-range-end ui-date-highlight';\n\t\t\t\t\t\treturn [true, appliedClass, $(UI.props.$doDate)\n\t\t\t\t\t\t\t.attr('aria-label')];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tappliedClass = 'date-in-range ui-date-highlight';\n\t\t\t\t\t\tif (new Date(minDoDateRange.getTime()) <= new Date(date.getTime())) _selectable = true;\n\n\t\t\t\t\t\t// if (UI.props.isLeaseSearch && dayNum == 0 || dayNum == 6) {\n\t\t\t\t\t\t//     appliedClass = 'date-in-range ' + dayNum + '-weekend-date';\n\t\t\t\t\t\t//     _selectable = false;\n\t\t\t\t\t\t// }\n\t\t\t\t\t\treturn (UI.props.isLeaseSearch) ? [_selectable, appliedClass] : [true, appliedClass];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if (UI.props.isLeaseSearch && (dayNum == 0 || dayNum == 6)) {\n\t\t\t//     appliedClass = dayNum + '-weekend-date';\n\t\t\t//     return [false, appliedClass];\n\t\t\t// }\n\n\t\t\tappliedClass = 'ui-date-highlight';\n\n\t\t\treturn [true, appliedClass];\n\t\t},\n\t\tgetDatesInRange: function(d0, d1) {\n\t\t\tvar start = d0,\n\t\t\t\tend = d1,\n\t\t\t\tcurrentDate = new Date(start.getTime()),\n\t\t\t\tbetween = [];\n\n\t\t\twhile (currentDate <= end) {\n\t\t\t\tvar newDate = new Date(currentDate);\n\t\t\t\tbetween.push([newDate.getMonth(), newDate.getDate(), newDate.getUTCFullYear()]);\n\t\t\t\tcurrentDate.setDate(currentDate.getDate() + 1);\n\t\t\t}\n\t\t\treturn between;\n\t\t},\n\t\tisPickupField: function(selector) {\n\t\t\tvar isPickup = ($(selector)\n\t\t\t\t.data('direction') === 'pu') ? true : false;\n\t\t\treturn isPickup;\n\t\t},\n\t\tsetDate: function(name, value) {\n\t\t\tvar _val = value;\n\t\t\tvar timestamp = Date.parse(_val);\n\n\t\t\tif (!isNaN(timestamp)) {\n\t\t\t\tvar dateFromPassedInValue = new Date(_val);\n\n\t\t\t\tif (name === 'pickup-date') {\n\t\t\t\t\tUI.props.$puDate.datepicker(\"setDate\", dateFromPassedInValue);\n\t\t\t\t\tUI.props.oSubmit.puCal = UI.convertDate(UI.props.$puDate);\n\t\t\t\t} else {\n\t\t\t\t\tUI.props.$doDate.datepicker(\"setDate\", dateFromPassedInValue);\n\t\t\t\t\tUI.props.oSubmit.doCal = UI.convertDate(UI.props.$doDate);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcheckCurrentWindowSize: function(size) {\n\t\t\treturn UI.props.responsiveNumMonthsToShow[size];\n\t\t},\n\t\tconvertDate: function($target) {\n\t\t\t/*\n\t\t\t\tReturns a date string which is formatted for our booking engine. This value is what we need to send\n\t\t\t\tto the back-end, either through the main search form's prop object or through a hidden field.\n\t\t\t*/\n\t\t\treturn $.datepicker.formatDate(UI.props.altFormat, new Date($target.datepicker('getDate')));\n\t\t},\n\t\tsetMinPickupDate: function(){\n\t\t\tvar newPuMin = new Date(UI.props.$puDate.data('searchmindate')), moddedMinPuDate = false;\n\n\t\t\tif(AE.ui.search.isValidDate(newPuMin)){\n\t\t\t\tmoddedMinPuDate = new Date(newPuMin.getUTCFullYear(), newPuMin.getUTCMonth(),\tnewPuMin.getUTCDate()).toISOString();\n\t\t\t}\n\n\t\t\tif (moddedMinPuDate) {\n\t\t\t\tUI.props.$puDate.datepicker(\"option\", {\n\t\t\t\t\tminDate: new Date(moddedMinPuDate)\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tsetMinDropoffDate: function() {\n\t\t\tvar _setPuDate = (searchPuDate !== '') ? searchPuDate : UI.props.$puDate.datepicker('getDate');\n\n\t\t\tvar pickupDate = $.datepicker.formatDate(UI.props.strDateFormat, new Date(_setPuDate));\n\t\t\t// If this is a LTR and we have a minimum date delta, enforce it\n\t\t\tif (UI.props.oSubmit.excl_ltr && AE.props.buyBackMin) {\n\t\t\t\t// Enforce variable minimum duration for Long Term Rentals (LTR)\n\t\t\t\tvar ltrDate = UI.props.$puDate.datepicker('getDate');\n\t\t\t\tpickupDate = $.datepicker.formatDate(UI.props.strDateFormat, new Date(ltrDate));\n\t\t\t}\n\t\t\t// Get the value of the PU date\n\t\t\tUI.props.$puDate.val(pickupDate);\n\n\t\t\t// If this is NOT a LTR and the DO date is before the PU date, move the DO date forward 3 days\n\t\t\tif (!UI.props.oSubmit.excl_ltr && !UI.isAfterPickup()) UI.setDropoffForward(3);\n\t\t\t// If this IS a LTR and the delta between the PU & DO dates are too short for a LTR, move the DO date forward\n\t\t\tif (UI.props.oSubmit.excl_ltr && UI.tooShortForLease()) UI.setDropoffForward(AE.props.buyBackMin);\n\n\t\t\t// If this a LTR, figure out what the new DO date should be\n\t\t\tvar _tempNewDoDate = UI.props.$puDate.datepicker('getDate');\n\t\t\t/*_tempNewDoDate.setDate(_tempNewDoDate.getDate() + AE.props.buyBackMin);\n\n\t\t\tvar minDoDate = UI.props.oSubmit.excl_ltr ? _tempNewDoDate : pickupDate;*/\n\t\t\tvar overRideMinDoDate = false;\n\t\t\tif(UI.props.isBMRSearch && UI.tooShortForBMR()){\n\t\t\t\t_tempNewDoDate.setDate(_tempNewDoDate.getDate() + AE.props.bmrMin);\n\t\t\t\toverRideMinDoDate = true;\n\t\t\t} else if(UI.props.oSubmit.excl_ltr) {\n\t\t\t\t_tempNewDoDate.setDate(_tempNewDoDate.getDate() + AE.props.buyBackMin);\n\t\t\t\toverRideMinDoDate = true;\n\t\t\t}\n\t\t\tvar minDoDate = (overRideMinDoDate)? _tempNewDoDate : pickupDate;\n\t\t\t/* Set the data attribute */\n\t\t\tUI.props.$doDate.data('searchmindate', minDoDate);\n\n\t\t\t/* Set the minDate option */\n\t\t\tUI.props.$doDate.datepicker(\"option\", {\n\t\t\t\tminDate: minDoDate\n\t\t\t});\n\t\t},\n\t\tsetDropoffForward: function(daysToAdd) {\n\t\t\tvar dToAdd = daysToAdd || 3;\n\t\t\tvar tempDate = UI.props.$puDate.datepicker('getDate');\n\n\t\t\t// Set dropoff for \"dToAdd\" days after the pickup\n\t\t\ttempDate.setDate(tempDate.getDate() + dToAdd);\n\n\t\t\tvar futureDate = $.datepicker.formatDate(UI.props.strDateFormat, new Date(tempDate));\n\t\t\tUI.props.$doDate.datepicker(\"setDate\", futureDate);\n\n\t\t\treturn false;\n\t\t},\n\t\tisAfterPickup: function() {\n\t\t\tvar pickupDate = new Date($.datepicker.formatDate(UI.props.altFormat, UI.props.$puDate.datepicker(\"getDate\")) +\n\t\t\t\t'T' + UI.props.$puTime.val());\n\t\t\tvar dropoffDate = new Date($.datepicker.formatDate(UI.props.altFormat, UI.props.$doDate.datepicker(\"getDate\")) +\n\t\t\t\t'T' + UI.props.$doTime.val());\n\t\t\tvar isAfter = (dropoffDate.getTime() < pickupDate.getTime()) ? false : true;\n\n\t\t\treturn isAfter;\n\t\t},\n\t\ttooShortForLease: function() {\n\t\t\tvar minDropoffDate = UI.props.$puDate.datepicker('getDate');\n\t\t\tvar dropoffDate = UI.props.$doDate.datepicker('getDate');\n\t\t\tvar dropoffTime = UI.props.$doTime.val();\n\t\t\tif(typeof(dropoffTime) === 'string'){\n\t\t\t\tdropoffTime = dropoffTime.split(':');\n\t\t\t} else {\n\t\t\t\tdropoffTime = ['0'];\n\t\t\t}\n\n\t\t\tminDropoffDate.setDate(minDropoffDate.getDate() + AE.props.buyBackMin);\n\t\t\tminDropoffDate.setHours(dropoffTime[0], dropoffTime[1]);\n\t\t\tdropoffDate.setHours(dropoffTime[0], dropoffTime[1]);\n\n\t\t\treturn (dropoffDate.getTime() < minDropoffDate.getTime()) ? true : false;\n\t\t},\n\t\ttooShortForBMR: function() {\n\t\t\tvar BMRmin = AE.props.bmrMin;\n\t\t\tvar minDropoffDate = UI.props.$puDate.datepicker('getDate');\n\t\t\tvar dropoffDate = UI.props.$doDate.datepicker('getDate');\n\n\t\t\tminDropoffDate.setDate(minDropoffDate.getDate() + BMRmin);\n\n\t\t\treturn (dropoffDate.getTime() < minDropoffDate.getTime()) ? true : false;\n\t\t},\n\t\trepositionDatepickerArrow: function(input, inst) {\n\t\t\t// Positions yellow arrow on bottom or top of datepicker widget so its always pointing toward the input\n\t\t\tvar $focusInput = $(input);\n\t\t\tvar $widget = $focusInput.datepicker(\"widget\");\n\t\t\tvar $menu = $(inst.dpDiv);\n\t\t\tvar _winH = $(window)\n\t\t\t\t.height();\n\t\t\tvar _formTop = parseInt($focusInput.offset()\n\t\t\t\t.top) + parseInt($focusInput.outerHeight()) + parseInt($widget.outerHeight());\n\t\t\tvar _scrollDist = parseInt($(document)\n\t\t\t\t.scrollTop());\n\n\t\t\treturn ((_formTop - _scrollDist) > _winH) ? $menu.addClass('reposition-arrow-above-input') : $menu.removeClass(\n\t\t\t\t'reposition-arrow-above-input');\n\t\t},\n\t\t// highlightSelectionRange: function(inst) {\n\t\t// \t// TODO: This was temporarily(?) abandoned. I'll be back!\n\t\t// \tvar _input = inst;\n\t\t// \tvar _menu = _input.dpDiv;\n\t\t// \tvar _daysToHighlight = document.querySelectorAll('.ui-date-highlight:not(.ui-datepicker-unselectable)');\n\t\t// \t$(function() {\n\t\t// \t\tfunction setDays(days, day) {\n\t\t// \t\t\tvar effectiveDates = [];\n\t\t// \t\t\tvar tD = day.find('a')\n\t\t// \t\t\t\t.text();\n\t\t// \t\t\tvar tM = day.attr('data-month');\n\t\t// \t\t\tvar tY = day.attr('data-year');\n\t\t// \t\t\tfor (var i = 0; i < days.length; i++) {\n\t\t// \t\t\t\tvar _day = $(days[i]);\n\t\t// \t\t\t\tvar dD = _day.find('a')\n\t\t// \t\t\t\t\t.text();\n\t\t// \t\t\t\tvar dM = _day.attr('data-month');\n\t\t// \t\t\t\tvar dY = _day.attr('data-year');\n\t\t// \t\t\t\tif (tD === dD && tM === dM && tY === dY) return effectiveDates;\n\t\t// \t\t\t\teffectiveDates.push(_day);\n\t\t// \t\t\t}\n\t\t// \t\t\treturn effectiveDates;\n\t\t// \t\t}\n\t\t// \t\t$(\".ui-date-highlight:not(.ui-datepicker-unselectable)\")\n\t\t// \t\t\t.on(\"mouseenter\", function() {\n\t\t// \t\t\t\tvar _selectedDay = $(this);\n\t\t// \t\t\t\t_selectedDay.addClass('ui-new-date-selection');\n\t\t// \t\t\t\tif (_selectedDay.parent()\n\t\t// \t\t\t\t\t.has('td.date-range-start')\n\t\t// \t\t\t\t\t.length !== 0) {\n\t\t// \t\t\t\t\tvar _children = _selectedDay.parent()\n\t\t// \t\t\t\t\t\t.find('td');\n\t\t// \t\t\t\t\tvar _firstWeek = $('.date-range-start')\n\t\t// \t\t\t\t\t\t.nextUntil('td.ui-new-date-selection', 'td');\n\t\t// \t\t\t\t\t_children.not(_firstWeek)\n\t\t// \t\t\t\t\t\t.attr({\n\t\t// \t\t\t\t\t\t\tstyle: 'background-color:unset !important'\n\t\t// \t\t\t\t\t\t});\n\n\t\t// \t\t\t\t\t$.each(_firstWeek, function(ind) {\n\t\t// \t\t\t\t\t\tvar d = $(_firstWeek[ind]);\n\t\t// \t\t\t\t\t\tif (d.hasClass('date-in-range')) d.attr({\n\t\t// \t\t\t\t\t\t\tstyle: 'background-color:red !important'\n\t\t// \t\t\t\t\t\t});\n\t\t// \t\t\t\t\t});\n\t\t// \t\t\t\t}\n\t\t// \t\t\t});\n\t\t// \t\t$(\".ui-date-highlight:not(.ui-datepicker-unselectable)\")\n\t\t// \t\t\t.on(\"mouseleave\", function() {\n\t\t// \t\t\t\tvar _selectedDay = $(this);\n\t\t// \t\t\t\t_selectedDay.removeClass('ui-new-date-selection');\n\t\t// \t\t\t});\n\t\t// \t});\n\t\t// },\n\t\tresizeDatepicker: function() {\n\t\t\tUI.props.currentWindowSize = AE.getSiteViewType();\n\n\t\t\t// Hide and destroy the current datepicker to reset settings\n\t\t\tUI.props.$puDate.add(UI.props.$doDate)\n\t\t\t\t.datepicker(\"hide\")\n\t\t\t\t.datepicker(\"destroy\")\n\t\t\t\t.blur();\n\n\t\t\t// Update global vars\n\t\t\tUI.props.numberOfCalendarMonthsToShow = UI.checkCurrentWindowSize(UI.props.currentWindowSize);\n\t\t\t//  UI.props.responsiveNumMonthsToShow(UI.props.currentWindowSize);\n\t\t\tUI.props.datepickerOptions.numberOfMonths = UI.props.numberOfCalendarMonthsToShow;\n\n\t\t\tUI.props.$puDate.add(UI.props.$doDate)\n\t\t\t\t.datepicker(UI.props.datepickerOptions)\n\t\t\t\t.on('touchend', function() {\n\t\t\t\t\treturn $(this)\n\t\t\t\t\t\t.trigger('blur');\n\t\t\t\t});\n\n\t\t\t// Set the PU minimum date to be today (since you can not pick up in the past)\n\t\t\tUI.props.$puDate.datepicker(\"option\", {\n\t\t\t\tminDate: new Date()\n\t\t\t});\n\t\t\tUI.setMinPickupDate();\n\t\t\t\n\t\t\t// Set the DO minimum date to be the PU date (because you can not return the car before picking it up)\n\t\t\tUI.props.$doDate.datepicker(\"option\", {\n\t\t\t\tminDate: UI.props.$puDate.datepicker(\"getDate\")\n\t\t\t});\n\t\t},\n\t\tmanageResize: function() {\n\t\t\treturn UI.resizeDatepicker();\n\t\t}\n\t};\n\treturn UI;\n})();\n\n;var AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\nAE.ui.searchType = AE.ui.searchType || ( function () {\n\t/*\n\t *DEPENDENCIES: AE, AE.ui. AE.search, AE.utils, AE.legacy\n\t */\n\t'use strict';\n\n\tvar UI = {\n\t\tinit: function () {\n\n\t\t\tUI.props = {\n\t\t\t\t$siteCode: AE.props.siteCode,\n\t\t\t\t$viewSize: AE.getSiteViewType(),\n\t\t\t\t$menusearchEnabled: false,\n\t\t\t\tLTRLondonSelected: false,\n\t\t\t\t_searchControllerLocation: '/plugins/ae3/lib/searchController.cfc',\n\t\t\t\t_searchControllerMethods: {\n\t\t\t\t\ttextsearch: 'textsearch',\n\t\t\t\t\ttextsearchPrefill: 'textsearchPrefill',\n\t\t\t\t\ttextsearchCityLocs: 'textsearchCityLocs',\n\t\t\t\t\tmenusearchCountryList: 'getLocalizedCountries',\n\t\t\t\t\tmenusearchCityList: 'getLocalizedCities',\n\t\t\t\t\tget_operatorIdListByCountry: 'getOperatorIDsByCountry',\n\t\t\t\t\tget_operatorIdListByCity: 'getOperatorIDsByCity',\n\t\t\t\t\tget_countriesActiveBySitecode: 'getCountriesActiveBySitecode',\n\t\t\t\t\tsClick: 'incrementHubClick'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tUI.props.$menusearchEnabled = prepMenusearch;//WEBAE3-4074 prepMenusearch will always be a boolean from CF now\n\t\t\tif ( AE.ui.timeselectmenu ) AE.ui.timeselectmenu.init();\n\t\t\tif ( AE.ui.datepicker ) AE.ui.datepicker.init();\n\n\t\t\t/*Modfiies search input behavior for devices*/\n\t\t\tif ( (AE.getSiteViewType() == 'palm') && AE.ui.devices ) {\n\t\t\t\tAE.ui.devices.init();\n\t\t\t}\n\n\t\t\t/* MAIN SEARCH FORM: If the main search form is defined, then set up search*/\n\t\t\tUI.mainSearch();\n\t\t},\n\n\t\tmainSearch: function () {\n\t\t\tif ( !isLTRSearch && !isBMRSearch ){\n\t\t\t\tif(AE.ui.searchType.text) AE.ui.searchType.text.init();\n\t\t\t\tif(AE.ui.searchType.menu && UI.props.$menusearchEnabled ) AE.ui.searchType.menu.init();\n\t\t\t}\n\t\t\tif ( isLTRSearch && AE.ui.searchType.leasesearch ) AE.ui.searchType.leasesearch.init();\n\t\t\tif ( isBMRSearch && AE.ui.searchType.bmr ) AE.ui.searchType.bmr.init();\n\t\t},\n\n\t\t_toggleAccordions: function ( activeAccordion ) {\n\t\t\t/*\n\t\t\t * After city accordions are initiated,\n\t\t\t * toggles any open accordions to keep only one open at a time.\n\t\t\t */\n\t\t\tvar $enabledAccordion = activeAccordion;\n\t\t\tvar $disableAccordions = $( '.ui-textsearch-accordion' ).not( $enabledAccordion );\n\n\t\t\t$enabledAccordion.addClass( 'ui-textsearch-accordion-active' );\n\t\t\t$disableAccordions.not( $enabledAccordion ).removeClass( 'ui-textsearch-accordion-active ui-state-active' );\n\n\t\t\t$disableAccordions.not( $enabledAccordion ).accordion( {\n\t\t\t\tcollapsible: true,\n\t\t\t\tactive: false\n\t\t\t} );\n\t\t\t$enabledAccordion.accordion( {\n\t\t\t\tcollapsible: false,\n\t\t\t\tactive: 0\n\t\t\t} );\n\n\t\t\tUI._scrollToTopOfContainer( $enabledAccordion );\n\t\t},\n\n\t\t_scrollToTopOfContainer: function ( target ) {\n\t\t\tvar $target = target;\n\t\t\tvar $menu = $target.closest( '.ui-textsearch-accordion-list' );\n\t\t\tvar _customOffset = ( $menu.find( '.ui-textsearch-accordion' ).length == 1 ) ? 70 : 35\n\n\t\t\treturn $menu.animate( {\n\t\t\t\tscrollTop: $target.offset().top - $menu.offset().top + $menu.scrollTop() - _customOffset\n\t\t\t} );\n\t\t},\n\n\t\t_scrollToListTop: function ( dl ) {\n\t\t\tvar $_menu = dl;\n\t\t\treturn $_menu.stop().animate( {\n\t\t\t\tscrollTop: 0\n\t\t\t}, 500 );\n\t\t},\n\n\t\t_throwWarningFlag: function ( input, title, msg, pos, newClass ) {\n\t\t\tinput.addClass( 'ui--invalid-input' );\n\t\t\treturn AE.ui.search.searchFormErrorHandler.init( title, msg, pos, newClass );\n\t\t},\n\n\t\t_updateInputValue: function ( input, str ) {\n\t\t\tvar $input = input;\n\t\t\tvar $widget = $input.textsearch().textsearch( 'instance' );\n\t\t\tvar $clearButton = $widget.targetActionButton;\n\t\t\tvar _direction = $input.data( 'direction' );\n\t\t\tvar _displayString = str;\n\t\t\tvar _hasSetValue = _displayString != '';\n\n\t\t\tvar $fn_getInputs = AE.ui.search.autocomplete.getInputs();\n\t\t\tvar $puLoc = $fn_getInputs.$puLoc;\n\t\t\tvar $doLoc = $fn_getInputs.$doLoc;\n\t\t\tvar $chkDiff = $fn_getInputs.$chkDiff;\n\t\t\tvar _updatePlaceholderTo;\n\n\t\t\tif ( !AE.props.isIE ) $input.data( 'placeholderVal', $input.attr( 'data-placeholder' ) );\n\n\t\t\tif ( _hasSetValue ) {\n\t\t\t\t$input.data( { 'hasVal': _hasSetValue, 'savedVal': _displayString } );\n\t\t\t\tif ( _direction == 'pu' ) $doLoc.data( { 'hasVal': _hasSetValue, 'savedVal': _displayString } );\n\t\t\t} else {\n\t\t\t\t/*CLEARING THE INPUTS*/\n\t\t\t\t$input.data( { 'hasVal': _hasSetValue, 'savedVal': ( _direction == 'pu' ) ? $input.attr( 'data-placeholder-static' ) : $puLoc.attr( 'data-placeholder' ) } );\n\t\t\t\t/*RESET DROP WITH NEW PICKUP*/\n\t\t\t\tif ( _direction == 'pu' ) {\n\t\t\t\t\t$( '#locations-wrapper' ).removeClass( 'both' );\n\t\t\t\t\t$chkDiff.prop( 'checked', false );\n\t\t\t\t\t$doLoc.data( { 'hasVal': _hasSetValue, 'savedVal': $doLoc.attr( 'data-placeholder-static' ) } );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_updatePlaceholderTo = _hasSetValue ? ( $input.data( 'savedVal' ) ) : $input.attr( 'data-placeholder-static' );\n\n\t\t\t$input.attr( 'data-placeholder', _updatePlaceholderTo );\n\t\t\tif ( _direction == 'pu' ) $doLoc.attr( 'data-placeholder', _updatePlaceholderTo ).text( '' );\n\t\t\tif ( $puLoc.text() == $doLoc.text() )$doLoc.attr( 'data-placeholder', $puLoc.data( 'savedVal' ) ).text( '' );\n\t\t\tif ( !$clearButton.is(':visible') && (AE.getSiteViewType() != 'palm') ) $clearButton.show().removeClass( $input.data( 'hasVal' ) ? 'rotate-scale-out-center' : 'rotate-scale-in-center' ).addClass( $input.data( 'hasVal' ) ? 'rotate-scale-in-center' : 'rotate-scale-out-center' );\n\n\t\t\tif ( !$input.data( 'hasVal' ) ) setTimeout( function () {\n\t\t\t\tif ( AE.getSiteViewType() != 'palm' ) $clearButton.hide();\n\t\t\t}, 500 );\n\n\t\t\t$input.text( _hasSetValue ? _displayString : '' );\n\n\t\t\t// if(AE.props.isIE){\n\t\t\t\treturn UI._forceInputBlur( $input );\n\t\t\t// }\n\n\t\t},\n\n\t\t_clearInput: function ( input ) {\n\n\t\t\treturn UI._updateInputValue( input, false, '' );\n\t\t},\n\n\t\t_forceInputBlur: function ( input ) {\n\t\t\t/* Prevents voucher page from scrolling to search form */\n\t\t\tif (window.devicePixelRatio >= 1 && AE.url.props.path !== \"/my-booking/\") {\n\t\t\t\tinput.focus().blur();\n\t\t\t};\n\n\t\t\treturn input.trigger('blur');\n\t\t},\n\n\t\t_cursorToEndOfString: function ( input ) {\n\n\t\t\tvar editableElem = input,\n\t\t\t\tstr = $( editableElem ).text(),\n\t\t\t\tendOffset = editableElem.childNodes.length,\n\t\t\t\trange,\n\t\t\t\tselection;\n\n\t\t\tif ( document.createRange ) {\n\t\t\t\t/*Firefox, Chrome, Opera, Safari, IE 9+*/\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents( editableElem );\n\t\t\t\trange.collapse( false );\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tselection.removeAllRanges();\n\t\t\t\tselection.addRange( range );\n\n\t\t\t} else if ( document.selection ) {\n\t\t\t\t/*IE 8 and lower*/\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText( editableElem );\n\t\t\t\trange.collapse( false );\n\t\t\t\trange.select();\n\t\t\t}\n\t\t},\n\n\t\t_objHoverHelper: function (obj, toggleClass) {\n\t\t\t/*\n\t\t\t * jQuery.hover() is deprecated\n\t\t\t */\n\t\t\tvar $obj = obj;\n\t\t\tvar $toggleClass = toggleClass || 'ui-state-hover';\n\t\t\treturn $obj.on('mouseenter', function () {\n\t\t\t\treturn $(this).addClass($toggleClass);\n\t\t\t}).on('mouseleave', function () {\n\t\t\t\treturn $(this).removeClass($toggleClass);\n\t\t\t});\n\t\t},\n\n\t\t_hideDeviceKeyboard: function () {\n\t\t\t/*\n\t\t\t * For mobile UI, once textsearch becomes a selectable menu - as opposed to textsearch.\n\t\t\t * We can force the 'select' to 100% vh and suppress the keyboard.\n\t\t\t */\n\t\t\t$( 'input' ).blur();\n\t\t\treturn false;\n\t\t}\n\n\t};\n\treturn UI;\n} )();\n\n;\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\nAE.ui.searchType.text = AE.ui.searchType.text || (function () {\n    /***\n     * DEPENDENCIES: AE, AE.ui. AE.search, AE.utils, AE.legacy\n     ***/\n    'use strict';\n\n    var _fetchPuCityName,\n        _fetchPuIso,\n        _fetchPuCategory,\n        _fetchDoCityName,\n        _fetchDoIso,\n        _fetchDoCategory,\n        vouchDateTime = ((typeof (oBKdateTime) != 'undefined') && !_.isEmpty(oBKdateTime)) ? oBKdateTime : false,\n        AFFILIATE_NAME = typeof (affiliateName) != 'undefined' ? affiliateName : 'AUTOEUROPE',\n        DISPLAY_TOP_COUNTRIES = typeof (returnTopCountries) != 'undefined' ? returnTopCountries : true,\n        DISPLAY_TOP_CITIES = typeof (returnTopCities) != 'undefined' ? returnTopCities : true;\n\n    /* Use to prefill \"manage my booking\" if all properties exist. */\n    if (vouchDateTime)\n        for (var i in vouchDateTime) {\n            var testProp = vouchDateTime[i] || '';\n            vouchDateTime = !_.isEmpty(testProp) ? vouchDateTime : false;\n        }\n\n    var UI = {\n        init: function () {\n\n            var GET_INPUTS = AE.ui.search.autocomplete.getInputs();\n            \n            UI.props = {\n                $puLoc: GET_INPUTS.$puLoc,\n                /* Local ref to pickup location, defined in AE.ui module. */\n                _puLocHasData: false,\n                /* Tracking whether PU input has been filled. */\n                $doLoc: GET_INPUTS.$doLoc,\n                /* Local ref to dropoff location, defined in AE.ui module. */\n                _doLocHasData: false,\n                /* Tracking whether DO has been filled. */\n                $tempDoDataHolder: {},\n                /* If PU hasn't been set and DO fires first - put it in this temporary container object. */\n                $chkDiff: GET_INPUTS.$chkDiff,\n                $arr_isoCountryList: (typeof activatedCountries != 'undefined') ? activatedCountries : {},\n                _textsearchPrefillObj: {\n                    'pu': {\n                        'chaos_city_name': (typeof searchPuCity != 'undefined') ? searchPuCity : false,\n                        'chaos_country_code': (typeof searchPuCountry != 'undefined') ? searchPuCountry : false,\n                        'category': (typeof searchPuCategory != 'undefined') ? searchPuCategory : false\n                    },\n                    'drop': {\n                        'chaos_city_name': (typeof searchDoCity != 'undefined') ? searchDoCity : false,\n                        'chaos_country_code': (typeof searchDoCountry != 'undefined') ? searchDoCountry : false,\n                        'category': (typeof searchDoCategory != 'undefined') ? searchDoCategory : false\n                    },\n                },\n                /* Warning flag error message - pick-up first. */\n                msg_pickupFirst: $('#locations-wrapper').data('pufirst'),\n                /* Warning flag error message - input cannot be empty. */\n                msg_inputEmpty: $('#locations-wrapper').data('inputempty'),\n                _LAUNCH_MENUSEARCH: false,\n                _DISPLAY_ALPHA_LIST: true,\n                _READY_TO_CLOSE: false,\n                _OVERRIDE_MENU_ANIMATION: false,\n                _DISPLAY_COUNTRY_LIST: false,\n                _DISPLAY_COUNTRY_CITIES_LIST: false,\n                $RES_OBJ_FOR_BOOKING: {\n                    pu: false,\n                    drop: false\n                },\n                _activeMenu: null,\n                _shadeStyle: {}\n            };\n\n            $.extend(UI.props, AE.ui.searchType.props);\n\n            UI.props._LAUNCH_MENUSEARCH = UI.props.$menusearchEnabled;\n\n            if (!UI.props._LAUNCH_MENUSEARCH) {\n                AE.ui.addBodyClickTask({\n                    func: UI.onBodyClick\n                });\n            }\n\n            AE.addResizeTask({\n                func: function (event) {\n                    UI.manageResize(event);\n                },\n                args: [{\n                    pu: UI.props.$puLoc,\n                    do: UI.props.$doLoc\n                }]\n            });\n\n            UI.mainSearch();\n        },\n\n        mainSearch: function () {\n\n            var TRY_LOCAL_STORAGE = AE.ui.search.useStoredSearch() && !vouchDateTime,\n                PREFILL_STORAGE_STR = TRY_LOCAL_STORAGE ? localStorage.getItem('aeSearch') : false,\n                USE_PAGE_PREFILL = ((typeof (searchPuCity) != 'undefined') && (searchPuCity!='' || searchPuOAG!='')),\n                USE_STORED_SEARCH = (PREFILL_STORAGE_STR != false);\n\n                if (USE_PAGE_PREFILL)\n                    USE_STORED_SEARCH = false;\n\n\n            /* Reference to searchcontroller location and methods. */\n            var $CF_SEARCH_CONTROLLER_REF = UI.props._searchControllerLocation;\n            var $CF_SEARCH_METHOD = UI.props._searchControllerMethods;\n            /* Setting some default properties to check over in textsearchcreate. */\n            var OPERATOR_ID_LIST_TO_FILTER_DO = [];\n            var PREVENT_INPUT_BLUR = false;\n            var TRY_PREFILL_PICKUP = false;\n            var TRY_PREFILL_DROPOFF = false;\n            /* Menu open/close animation. */\n            var _showMenuClass = 'scale-in-ver-top';\n            var _hideMenuClass = 'scale-out-ver-top';\n            /* Override menu open/close animation. */\n            var _hideMenuClass_alt = 'fade-out';\n            /*\n             * US alphabet for city lists.\n             * TODO: Figure out how to integrate language.\n             * */\n            var _alphaList = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\n\n            /* Set up a few default objects to be reused within the search menus. */\n            var $ui_badge = $('<span/>').attr({\n                'class': 'ui-textsearch-badge'\n            });\n            var $ui_textsearchMenuFooter = $('<footer/>', {\n                'class': 'ui-textsearch-menu-footer'\n            });\n            var $ui_textsearchScrollBtn = $('<button/>', {\n                'class': 'ui-textsearch-btn-sm ui-textsearch-scroll-btn',\n                role: 'button'\n            });\n            var $button_back_to_list = $('<button/>', {\n                'class': 'ui-textsearch-btn-med',\n                role: 'button'\n            });\n            var $button_reset_input = $('<button/>', {\n                'class': 'ui-textsearch-btn-med',\n                role: 'button'\n            });\n\n            /*Displays country name and flag.*/\n            var $textsearchAccordionHead = $('<a/>', {\n                'class': 'ui-textsearch-accordion-head'\n            });\n            /*Base accordion body structure.*/\n            var $textsearchAccordionBody = $('<dl/>', {\n                'class': 'ui-textsearch-accordion-body'\n            });\n\n\n            /* Hub categories as defined in searchcontroller. */\n            var _CNT = 'COUNTRY',\n                _CTY = 'CITY',\n                _APT = 'AIRPORT',\n                _ATERM = 'AIRPORT_TERMINAL--ITEM',\n                _RWY = 'RAIL',\n                _FRY = 'FERRY',\n                _OTH = 'OTHER',\n                _TOP = 'TOP',\n                _ERR = 'ERROR';\n            /* Default icons for hub types. */\n            var _hubCases = {};\n            \n                // _hubCases[_CNT] = {\n                //     icon: 'fa-location-arrow',\n                //     behavior: false\n                // };\n                _hubCases[_APT] = {\n                    icon: 'fa-plane',\n                    behavior: false\n                };\n                _hubCases[_ATERM] = {\n                    icon: 'fa-angle-right',\n                    behavior: false\n                };\n                _hubCases[_ATERM.replace('--ITEM', '--LIST')] = {\n                    icon: 'fa-plane',\n                    behavior: false\n                };\n                _hubCases[_RWY] = {\n                    icon: 'fa-train',\n                    behavior: false\n                };\n                _hubCases[_FRY] = {\n                    icon: 'fa-ship',\n                    behavior: false\n                };\n                _hubCases[_OTH] = {\n                    icon: 'fa-map-pin',\n                    behavior: false\n                };\n                _hubCases[_CTY] = {\n                    icon: 'fa-map-marker',\n                    behavior: false\n                };\n                _hubCases[_ERR] = {\n                    icon: 'fa-exclamation-triangle',\n                    behavior: false\n                };\n                _hubCases[_TOP] = {\n                    icon: 'fa-star',\n                    behavior: false\n                };\n            \n                if(AE.props.siteCode == 'FCR') {\n                    _hubCases[_APT] = {\n                        icon: 'fcr-flight',\n                        iconType: '',\n                        behavior: false\n                    };\n                    _hubCases[_ATERM] = {\n                        icon: 'fcr-chevron-right',\n                        iconType: '',\n                        behavior: false\n                    };\n                    _hubCases[_ATERM.replace('--ITEM', '--LIST')] = {\n                        icon: 'fcr-flight',\n                        iconType: '',\n                        behavior: false\n                    };\n                    _hubCases[_RWY] = {\n                        icon: 'fcr-train',\n                        iconType: '',\n                        behavior: false\n                    };\n                    _hubCases[_CTY] = {\n                        icon: 'fcr-place',\n                        iconType: '',\n                        behavior: false\n                    };\n                    _hubCases[_FRY] = {\n                        icon: 'fcr-boat',\n                        iconType: '',\n                        behavior: false\n                    };\n                    _hubCases[_CNT] = {\n                        icon: 'fcr-nearby',\n                        iconType: '',\n                        behavior: false\n                    };\n                    _hubCases[_OTH] = {\n                        icon: 'fcr-place',\n                        iconType: '',\n                        behavior: false\n                    };\n                }\n\n            $ui_textsearchScrollBtn.html('<i class=\"fa fa-chevron-up\"></i>');\n            $ui_textsearchMenuFooter.append($ui_textsearchScrollBtn);\n\n\n            UI.props.$chkDiff.on('change', function (event) {\n                var $btn = $(this);\n                var _checked = $btn.is(':checked');\n\n                if (UI.props.$menusearchEnabled) {\n                    if (!_checked) {\n                        $('#locations-wrapper .dropoff-wrapper .trg__menusearch--country-x').click();\n                    }\n                } else {\n\n                    if (UI.props.$RES_OBJ_FOR_BOOKING.pu == false) {\n                        $('#locations-wrapper').removeClass('both');\n                        $btn.prop('checked', false);\n                        return AE.ui.searchType._throwWarningFlag(UI.props.$puLoc, UI.props.msg_pickupFirst, UI.props.msg_inputEmpty, {\n                            top: 50,\n                            left: 50\n                        }, 'arrow-left');\n                    }\n\n                    if (!_checked) {\n                        AE.ui.searchType._updateInputValue(UI.props.$doLoc, '');\n                        UI.props.$RES_OBJ_FOR_BOOKING.drop = false;\n                        AE.ui.search.autocomplete.setValue(UI.props.$RES_OBJ_FOR_BOOKING);\n                    }\n                }\n            });\n\n\n\n\n\n            $.widget('custom.textsearch', $.ui.autocomplete, {\n                    \n            \n                _create: function (event, ui) {\n\n                    this._super();\n                    this.menu = $('<dl/>').hide().appendTo(this._appendTo()).menu({\n                        role: null\n                    }).menu('instance');\n                    this.element.data('input', this.element).addClass('ui-textsearch-input');\n\n\n                    this.element.menu().data('menu', this.menu);\n                    this.widget().menu('option', 'items', '.ui-menu-item, > :not(.ui-menu-item-error, .ui-menu-item-disabled, .ui-textsearch-label, .ui-textsearch-category, .ui-textsearch-accordion-wrapper, .ui-accordion-header, .ui-textsearch-error-msg-title, .ui-textsearch-error-msg)').addClass('ui-textsearch');\n                    \n                    this.menu.activeMenu = this.widget().menu();\n             \n                },\n\n                _sortHubsToDisplay: function (dl, direction, items, addClass) {\n\n                    var $widget = this;\n                    var $arr_items = [];\n                    var _addClassToListItem = addClass;\n                    var _dd;\n                    /* Temporary arrays to sort locations by hub type. */\n                    var $arr_airport = [];\n                    var $arr_airport_terminals = [];\n                    var $arr_rail = [];\n                    var $arr_ferry = [];\n                    var $arr_city = [];\n                    var $arr_country = [];\n                    var $arr_error = [];\n                    var $arr_other = [];\n                    var $arr_hubArrays = {};\n                    $arr_hubArrays[_CNT] = $arr_country;\n                    $arr_hubArrays[_APT] = $arr_airport;\n                    $arr_hubArrays[_ATERM] = $arr_airport_terminals;\n                    $arr_hubArrays[_RWY] = $arr_rail;\n                    $arr_hubArrays[_FRY] = $arr_ferry;\n                    $arr_hubArrays[_OTH] = $arr_other;\n                    $arr_hubArrays[_ERR] = $arr_error;\n                    $arr_hubArrays[_CTY] = $arr_city;\n                    \n                    for (var i in items) {\n                        var _loc = items[i];\n                        var _type = _loc.category || _ERR;\n                        if ((_type != 'INVISIBLE') && $arr_hubArrays[_type]) $arr_hubArrays[_type].push(_loc);\n                    }\n\n                    $arr_hubArrays[_ATERM] = AE.utils._sortPropByAlphaInArray($arr_hubArrays[_ATERM], 'display_label');\n\n                    for (var j in $arr_hubArrays) {\n                        var hType = j;\n                        if ($arr_hubArrays[j].length != 0 && (j != _ATERM)) {\n                            var _hubArray = AE.utils._sortPropByAlphaInArray($arr_hubArrays[j], 'click_count').reverse();\n                            _hubArray = AE.utils._removeDuplicateObjectsFromArray(_hubArray, 'display_label');\n\n                            for (var k in _hubArray) {\n                                var _locToDisplay = _hubArray[k];\n\n                                if (hType == _APT && $arr_hubArrays[_ATERM].length != 0) {\n                                    var chaos_hub_id = _locToDisplay.chaos_hub_id;\n                                    var association_array = [];\n\n                                    for (var l in $arr_hubArrays[_ATERM]) association_array.push($arr_hubArrays[_ATERM][l].parent_hub_id);\n\n                                    if ($arr_items.indexOf(_locToDisplay) == -1) {\n                                        if (association_array.indexOf(chaos_hub_id) != -1) _locToDisplay.category += '_TERMINAL--LIST';\n                                        $arr_items.push(_locToDisplay);\n                                    }\n\n                                    for (var m in $arr_hubArrays[_ATERM]) {\n                                        var _terminal = $arr_hubArrays[_ATERM][m];\n                                        var parent_hub_id = _terminal.parent_hub_id || 0;\n                                        if (parent_hub_id == chaos_hub_id) $arr_items.push(_terminal);\n                                    }\n                                } else {\n                                    if ($arr_items.indexOf(_locToDisplay) == -1) $arr_items.push(_locToDisplay);\n                                }\n                            }\n                        }\n                    }\n\n                    for (var n in $arr_items) {\n                        var _location = $arr_items[n];\n                        _dd = $widget._renderItemData(dl, _location).addClass(_addClassToListItem);\n                    }\n                    return false;\n                },\n\n                _renderMenu: function (dl, items) {\n                    /*\n                     * Renders menu\n                     */\n                    var $widget = this;\n                    var $input = this.element;\n                    var $menu = dl;\n                    var _direction = $input.data('direction');\n                    var list_length = 0;\n                    var $items = items;\n                    var $menu_header_label = $('<h1/>').addClass('ui-textsearch-shade-header-title');\n                    var $number_matches_badge = $ui_badge.clone().addClass('ui--badge-total-locations');\n                    var $icon_menu_item = $('<i/>', {\n                        'aria-hidden': true\n                    });\n                    var _addClassToListItem = '';\n                    var _breakTopLocsAt;\n                    var _headerID;\n                    var _dt;\n                    var _dd;\n                    \n                    $menu.empty();\n\n                    if (UI.props._DISPLAY_ALPHA_LIST && !AE.props.isIE) $widget._buildListIndexHelper($menu, 'destroy');\n                    if (UI.props._DISPLAY_COUNTRY_LIST || UI.props._DISPLAY_COUNTRY_CITIES_LIST) {\n                        $menu.addClass('ui-textsearch-accordion-list');\n                        $items = AE.utils._sortPropByAlphaInArray(items, 'sequence');\n                    } else {\n                        $items = AE.utils._sortPropByAlphaInArray(items, 'click_count').reverse();\n                    }\n\n                    if (UI.props._DISPLAY_COUNTRY_LIST) {\n                        _addClassToListItem = 'ui-menu-item';\n\n                        if (DISPLAY_TOP_COUNTRIES) {\n                            var $arr_topCountries = [];\n\n                            for (var i in $items)\n                                if ($items[i].chaos_country_code == '--') _breakTopLocsAt = $items[i].sequence;\n\n                            for (var j in $items) {\n                                var $newCountryLoc = $items[j];\n                                if ($newCountryLoc.sequence < _breakTopLocsAt) {\n                                    $newCountryLoc.click_count = _TOP;\n                                    $arr_topCountries.push($newCountryLoc);\n                                }\n                            }\n\n                            $items.splice(0, _breakTopLocsAt);\n\n                            $.each($arr_topCountries, function (index, item) {\n                                _dd = $widget._renderItemData($menu, item).addClass(_addClassToListItem + ' ui-top-location').uniqueId();\n                            });\n                        }\n\n                        $.each($items, function (index, item) {\n                            _dd = $widget._renderItemData($menu, item).addClass(_addClassToListItem).uniqueId();\n                        });\n\n                        $menu.removeClass('ui-textsearch-hide-flags');\n\n                    } else if (UI.props._DISPLAY_COUNTRY_CITIES_LIST) {\n\n                        $menu.addClass('ui-textsearch-hide-flags');\n                        _addClassToListItem = !$menu.hasClass('ui-textsearch-accordion-body') ? 'ui-menu-item fa-override-icon' : 'ui-menu-item';\n\n                        if (!$menu.hasClass('ui-textsearch-accordion-body')) {\n\n                            var _chaosCountryCode = $items[0].chaos_country_code || false;\n                            var _listTitle = $items[0].country_label || false;\n\n                            if (DISPLAY_TOP_CITIES) {\n                                var $arr_topCities = [];\n\n                                for (var k in $items)\n                                    if ($items[k].chaos_country_code == '--') _breakTopLocsAt = $items[k].sequence;\n\n                                for (var l in $items) {\n                                    var $newLoc = $items[l];\n                                    if ($newLoc.sequence < _breakTopLocsAt) {\n                                        $newLoc.click_count = _TOP;\n                                        $arr_topCities.push($newLoc);\n                                    }\n                                }\n\n                                $items.splice(0, _breakTopLocsAt);\n\n                                $.each($arr_topCities, function (index, item) {\n                                    _dt = $widget._renderItemData($menu, item).addClass(_addClassToListItem + ' ui-top-location').uniqueId();\n                                    _headerID = _dt.attr('id');\n                                });\n                            }\n\n                            $.each($items, function (index, item) {\n                                _dt = $widget._renderItemData($menu, item).addClass(_addClassToListItem).uniqueId();\n                                _headerID = _dt.attr('id');\n                            });\n\n                        } else {\n\n                            $widget._sortHubsToDisplay($menu, _direction, $items, _addClassToListItem);\n                        }\n\n                    } else {\n\n                        _addClassToListItem = '';\n\n                        $.each($items, function (index, item) {\n\n                            var $item = item;\n                            var $arr_sub_locations = $item.locations;\n                            var master_click_count = $item.click_count;\n                            var master_display_label = $item.display_label;\n                            var master_category = $item.category;\n                            var master_city_name = $item.chaos_city_name || false;\n                            var master_chaos_country_code = !$item.chaos_country_code ? 'NO' : $item.chaos_country_code;\n                            var master_add_header = true;\n                            var $number_matches_badge = $ui_badge.clone().addClass('ui--badge-locations').text($arr_sub_locations.length);\n\n                            if (master_category == 'ERROR') return $widget._renderMenuErrorNoMatches($menu, $item);\n                            master_chaos_country_code = master_chaos_country_code.trim();\n\n                            if (master_add_header) {\n                                _dt = $('<dt/>').attr({\n                                    'aria-label': master_city_name,\n                                    'data-weight': master_click_count,\n                                    'data-country-code': master_chaos_country_code,\n                                    'role': 'separator'\n                                }).addClass('ui-textsearch-category').text(master_display_label).uniqueId();\n                                if (master_category != _CNT) _dt.append($number_matches_badge);\n                                _dt.appendTo($menu);\n                                _headerID = _dt.attr('id');\n                            }\n\n                            $widget._sortHubsToDisplay($menu, _direction, $arr_sub_locations, _addClassToListItem);\n                        });\n\n                        list_length = $menu.find('dd').not('.ui-textsearch-error-msg').length;\n                        list_length += (list_length != 1) ? ' ' + matchPlural : ' ' + matchSingular;\n\n                        $number_matches_badge.text(list_length);\n                        $menu_header_label.text(txtInitialheader);\n\n                        _dt = $('<dt/>').addClass('ui-textsearch-label').attr({\n                            role: 'menubar'\n                        }).append($menu_header_label, $number_matches_badge).prependTo($menu);\n                        $menu.removeClass('ui-textsearch-hide-flags');\n                    }\n\n                    /*ADDING BUTTONS TO THE MENU, BUTTON TO RESET DROPOFF*/\n                    if (UI.props._DISPLAY_COUNTRY_LIST) {\n                        $menu_header_label.text(txtPUheader);\n                        _dt = $('<dt/>').addClass('ui-textsearch-label').attr({\n                            role: 'menubar'\n                        }).append($menu_header_label).uniqueId();\n\n                        if (_direction == 'do') {\n                            $menu_header_label.text(txtDOheader);\n                            $button_reset_input.prependTo($menu);\n                            $icon_menu_item.addClass('fas fa-sync right');\n                            $button_reset_input.text(txtSameAsPu).addClass('ui-reset-input').append($icon_menu_item);\n                            _dt.append($button_reset_input);\n\n                            AE.ui.searchType._objHoverHelper($button_reset_input);\n                        }\n\n                        _dt.prependTo($menu);\n                        _headerID = _dt.attr('id');\n                    }\n\n                    /* ADDING BUTTONS TO THE MENU, BUTTON TO RETURN TO COUNTRY LIST */\n                    if (UI.props._DISPLAY_COUNTRY_CITIES_LIST && !UI.props._DISPLAY_COUNTRY_LIST) {\n                        $icon_menu_item.addClass('fa fa-chevron-left left');\n                        $button_back_to_list.text(txtAllCountries).addClass('ui-back-to-list').prepend($icon_menu_item);\n                        $menu_header_label.addClass('ui-menu-item-wrapper').text(_listTitle);\n                        //VM\n                        if (!$menu.hasClass('ui-textsearch-accordion-body')) {\n                            _dt = $('<dt/>').attr({\n                                role: 'menubar',\n                                'data-country-code': _chaosCountryCode\n                            }).addClass('ui-textsearch-label').append($menu_header_label, $button_back_to_list).uniqueId();\n                            _dt.prependTo($menu);\n                            _headerID = _dt.attr('id');\n\n                            AE.ui.searchType._objHoverHelper($button_back_to_list);\n                        }\n                    }\n\n                    if (UI.props._DISPLAY_ALPHA_LIST && !AE.props.isIE && (UI.props._DISPLAY_COUNTRY_CITIES_LIST || UI.props._DISPLAY_COUNTRY_LIST) && !$menu.hasClass('ui-textsearch-accordion-body') && ($items.length > 10)) $widget._buildListIndexHelper($menu, 'init');\n\n                    var _headers = $menu.find('dt');\n                    var _topLocs = $menu.find('dd.ui-top-location');\n\n                    $(_topLocs[(_topLocs.length) - 1]).addClass('last');\n\n                    /* GRAB ODD DD FROM EACH DT ~ DD LIST RATHER THAN ASSIGN ODD TO EVERY OTHER ITEM*/\n                    for (var m = 0; m < _headers.length; m++) {\n                        var _head = $(_headers[m]);\n                        var _newID = _head.attr('id');\n                        if (_newID != 'undefined') $('#' + _newID).nextUntil('dt', 'dd:odd').addClass('odd');\n                    }\n\n                    if ($menu.find('dd.ui-textsearch-error-msg').length) $number_matches_badge.hide();\n\n                    if (!AE.props.isIE) $widget._scrollMenu($menu);\n                },\n\n                _renderMenuErrorNoMatches: function (dl, item) {\n\n                    var $menu = dl;\n                    var $item = item;\n                    var _message = warnNoLocationsSpecific;\n                    _message = _message.replace(/[+/'::REQUEST::/'+'\\[\\]']+/g, '<mark class=\"ui-textsearch-highlight\">' + $item.label + '<mark/>');\n                    var _dt = $('<dt/>').attr({\n                        class: 'ui-textsearch-error-msg-title'\n                    });\n                    var _dd = $('<dd/>').attr({\n                        class: 'ui-textsearch-error-msg'\n                    }).html(_message);\n\n                    $menu.append(_dt, _dd);\n                },\n\n                _renderItem: function (dl, item) {\n                    /*\n                     * Renders result items\n                     */\n                    var $icon_menu_item = $('<i/>').attr({\n                        'aria-hidden': true,\n                        class: 'fa pull-right'\n                    });\n                    var $itemWrapper = $('<div/>').attr({\n                        'tabindex': -1,\n                        class: 'ui-menu-item-wrapper'\n                    });\n\n                    var $menu = dl;\n                    var $item = item;\n                    var _category = $item.category;\n                    var _chaosCountryCode = $item.chaos_country_code;\n                    var item_click_count = $item.click_count;\n                    var item_display_label = item.display_label;\n                    var icon_style;\n                    var icon_type;\n                    var $dd = $('<dd/>', {\n                        \"aria-label\": item_display_label,\n                        \"data-weight\": item_click_count,\n                        \"data-category\": _category,\n                        \"data-country-code\": _chaosCountryCode,\n                        role: 'menuitem'\n                    }).append($itemWrapper);\n\n                    if (_hubCases[_category]) icon_style = _hubCases[_category].icon;\n\n                    //VM WEBAE3-5384\n                    if (typeof icon_type === \"undefined\" && AE.props.siteCode != 'FCR') {\n                        icon_type = 'NA'\n                    } else {icon_type = _hubCases[_category].iconType}\n\n                    //VM WEBAE3-5384 -- Error was in below if else\n                    //console.log(item.category)\n                    //if (_hubCases[_category].iconType){ icon_type = _hubCases[_category].iconType\n                    //}else{ icon_type = ''};\n                    if (item_click_count == _TOP) icon_style = _hubCases[item_click_count].icon;\n                    if (AE.props.siteCode == 'FCR') {\n                        if (_hubCases[_category].iconType === 'flight') {\n                            var $icon_menu_item = $('<i>' + icon_type +'</i>').attr({\n                                'aria-hidden': true,\n                                class: 'display-none fcr-text_search_icon pull-right fcr-rotate45'\n                            });\n                        } else {\n                            var $icon_menu_item = $('<i>' + icon_type + '</i>').attr({\n                                'aria-hidden': true,\n                                class: 'display-none fcr-text_search_icon pull-right'\n                            });\n                        }\n                    }\n                    $itemWrapper.text(item_display_label).append($icon_menu_item.addClass(icon_style));\n\n                    //VM WEBAE3-5384 Prevent drill down in search\n                    if (_category == 'COUNTRY') {\n                        $dd.css('display', 'none');\n                        //$dd.addClass('ui-menu-item-disabled').attr({'aria-disabled': true})\n                    }\n\n                    if (_category.indexOf('_TERMINAL--LIST') != -1) {\n                        $dd.addClass('ui-menu-item-disabled').attr({\n                            'aria-disabled': true\n                        });\n\n                        $itemWrapper.data('initialContent', $itemWrapper.html());\n\n                        $dd.on('mouseenter', function () {\n                            //if the initial content wraps, and 'select a terminal below' does not, the menu 'jumps' when the div resizes on mouseover. So make it retain the original div height.\n                            var originalheight = $itemWrapper.height();\n                            $itemWrapper.height(originalheight);\n                            return $itemWrapper.text('select a terminal below').append($icon_menu_item.addClass('fa-level-down'));\n                            \n                        }).on('mouseleave', function () {\n                            return $itemWrapper.html($itemWrapper.data('initialContent'));\n                        });\n\n                    } else if (_category == 'ERROR') {\n                        $dd.addClass('ui-menu-item-error').removeClass('ui-menu-item');\n                    } else {\n                        $dd.data('iObj', $item);\n                    }\n\n                    return $dd.appendTo($menu);\n                },\n\n                _populateMenusearchCountryList: function (dl) {\n                    /*\n                     * Populating the all country list\n                     */\n                    var $widget = this;\n                    var $menu = dl;\n                    var $input = $widget.element;\n                    var _direction = $input.data('direction');\n\n                    $.ajax({\n                        url: $CF_SEARCH_CONTROLLER_REF,\n                        dataType: 'json',\n                        data: {\n                            method: $CF_SEARCH_METHOD.menusearchCountryList,\n                            returnTopCountries: DISPLAY_TOP_COUNTRIES,\n                            affiliateName: AFFILIATE_NAME,\n                            operator_id_list: (_direction == 'pu') ? '' : OPERATOR_ID_LIST_TO_FILTER_DO\n                        },\n                        success: function (data) {\n                            var $arr_matchedLocations = [];\n                            $arr_matchedLocations = data;\n                            $widget._renderMenu($menu, $arr_matchedLocations);\n                        }\n                    });\n                    return AE.ui.searchType._scrollToListTop($menu);\n                },\n\n                _populateMenusearchCityList: function (dl, item, country) {\n                    /*\n                     * When viewing country list - or clicking through results to a country\n                     * will display all cities in country Returning featured cities first\n                     */\n\n                    var $widget = this;\n                    var $menu = dl;\n                    var $item = item;\n                    var $input = $widget.element;\n                    var _direction = $input.data('direction');\n                    var _iso = $item.chaos_country_code;\n\n                    $.ajax({\n                        url: $CF_SEARCH_CONTROLLER_REF,\n                        dataType: 'json',\n                        data: {\n                            method: $CF_SEARCH_METHOD.menusearchCityList,\n                            chaos_country_code: _iso,\n                            returnTopCities: DISPLAY_TOP_CITIES,\n                            affiliateName: AFFILIATE_NAME,\n                            operator_id_list: (_direction == 'pu') ? '' : OPERATOR_ID_LIST_TO_FILTER_DO\n                        },\n                        success: function (data) {\n                            var $arr_matchedLocations = [];\n\n                            for (var i in data) {\n                                var cityListing = data[i];\n                                cityListing.country_label = country;\n                                $arr_matchedLocations.push(cityListing);\n                            }\n                            $widget._renderMenu($menu, $arr_matchedLocations);\n                        }\n                    });\n\n                    return AE.ui.searchType._scrollToListTop($menu);\n                },\n\n                _operatorIdListByCity: function (chaos_city_id) {\n                    return $.getJSON($CF_SEARCH_CONTROLLER_REF, {\n                        method: $CF_SEARCH_METHOD.get_operatorIdListByCity,\n                        chaos_city_id: chaos_city_id\n                    }).done(function (data) {\n                        return data;\n                    });\n                },\n\n                _operatorIdListByCountry: function (chaos_country_id) {\n                    return $.getJSON($CF_SEARCH_CONTROLLER_REF, {\n                        method: $CF_SEARCH_METHOD.get_operatorIdListByCountry,\n                        chaos_country_id: chaos_country_id\n                    }).done(function (data) {\n                        return data;\n                    });\n                },\n\n                _scrollMenu: function (dl) {\n                    /*\n                     * Watches menu scroll event.\n                     */\n                    var $menu = dl;\n\n                    $menu.on('scroll', function () {\n                        // var $aside = $($menu.parent('.ui-textsearch-menu-wrapper').find('.ui-textsearch-alpha-index-helper')[0]);\n                        /*If menu is scrolled to the top of its parent, disable scroll-to-top button by unbind*/\n                        if ($(this).scrollTop() < 100 && $menu.hasClass('scrolling')) $menu.removeClass('scrolling');\n                        /*If menu has been scrolled within its parent, enable scroll-top-top button*/\n                        if ($(this).scrollTop() > 100 && !$menu.hasClass('scrolling')) $menu.addClass('scrolling');\n                        return false;\n                    });\n                },\n\n                _buildListIndexHelper: function (dl, callback) {\n                    /*AN ALPHA LIST DISPLAY NEXT TO LONG SCROLLING LISTS, TOGGLED FROM UI.props._DISPLAY_ALPHA_LIST*/\n                    var $menu = dl;\n                    var $arrAlphaHelper = [];\n                    var $elemArr = [];\n                    var $items = $menu.find('dd:not(.ui-top-location)');\n                    var $displayList = $('<aside/>', {\n                        class: 'ui-textsearch-alpha-index-helper',\n                        role: 'navigation'\n                    });\n                    var $list = $('<ul/>', {\n                        class: 'ui-textsearch-alpha-index-list'\n                    });\n                    var $listItem = $('<li/>', {\n                        class: 'ui-textsearch-alpha-index-list-item'\n                    });\n\n                    var _destroyHelper = function () {\n                        var $aside = $($menu.parent('.ui-textsearch-menu-wrapper').find('.ui-textsearch-alpha-index-helper')[0]);\n                        return $aside.length > 0 ? $aside.remove() : false;\n                    };\n\n                    var _initHelper = function () {\n                        for (var i = 0; i < $items.length; i++) {\n                            var $item = $items[i];\n                            var _startsWith = $($item).text().toUpperCase().substring(0, 1);\n                            if ($arrAlphaHelper.indexOf(_startsWith) == -1) {\n                                $arrAlphaHelper.push(_startsWith);\n                                $elemArr.push($item);\n                            }\n                        }\n\n                        for (var j in _alphaList) {\n                            var _ind = _alphaList[j];\n                            var $entry = $listItem.clone().text(_ind).uniqueId();\n\n                            if ($arrAlphaHelper.indexOf(_ind) != -1) {\n                                var _charPosition = $arrAlphaHelper.indexOf(_ind);\n                                var $target = $($elemArr[_charPosition]);\n\n                                $entry.attr({\n                                    'aria-controls': $target.attr('id'),\n                                    'data-value': _ind\n                                }).addClass('ui-state-available');\n                            } else {\n                                $entry.attr({\n                                    'data-value': _ind\n                                });\n                            }\n                            $list.append($entry);\n                        }\n                        if ($menu.parent('.ui-textsearch-menu-wrapper').find('.ui-textsearch-alpha-index-helper').length == 0) {\n                            $displayList.append($list);\n                            $displayList.insertBefore($menu);\n                        }\n\n                        AE.ui.searchType._objHoverHelper($('.ui-textsearch-alpha-index-list-item'));\n\n                    };\n                    return (callback == 'init') ? _initHelper() : (callback == 'destroy') ? _destroyHelper() : false;\n                },\n\n                _setMenuItemAccordion: function (target, chaosCityId, chaosCityName, chaosCountryCode) {\n                    /*\n                     * Builds Country/city accordions.\n                     */\n\n                    var $widget = this;\n                    var $menu;\n                    var _direction = $(this.element).data('direction');\n                    var $accordionContainer = $(target);\n                    var $accordionContainerTriggerElement = $accordionContainer.find('.ui-menu-item-wrapper');\n                    var _doAccordionInit = !$accordionContainer.hasClass('ui-textsearch-accordion');\n\n                    AE.ui.searchType._objHoverHelper($textsearchAccordionHead);\n\n                    $accordionContainerTriggerElement.addClass('ui-show-flag');\n                    var $activeAccordion = $accordionContainer;\n\n                    if (_doAccordionInit) {\n                        $menu = $textsearchAccordionBody.uniqueId();\n                        $accordionContainer.addClass('ui-textsearch-accordion');\n                        $accordionContainerTriggerElement.wrap($textsearchAccordionHead);\n                        $accordionContainer.append($menu);\n                        $textsearchAccordionHead.attr({\n                            'aria-owns': $menu.attr('id')\n                        });\n\n                        return $.ajax({\n                            url: $CF_SEARCH_CONTROLLER_REF,\n                            dataType: 'json',\n                            data: {\n                                method: $CF_SEARCH_METHOD.textsearchCityLocs,\n                                chaos_city_id: chaosCityId,\n                                affiliateName: AFFILIATE_NAME,\n                                operator_id_list: (_direction == 'pu') ? '' : OPERATOR_ID_LIST_TO_FILTER_DO\n                            },\n                            success: function (data) {\n                                var $arr_matchedLocations = [];\n                                for (var i in data) {\n                                    var $item = data[i];\n\n                                    for (var j in Object.keys($item)) {\n                                        var locations = $item[j].locations;\n                                        for (var k in locations) {\n                                            var location = locations[k];\n                                            var locCity = location.chaos_city_name || false;\n                                            var locCCC = location.chaos_country_code || false;\n\n                                            if (locCity && (locCity.toUpperCase() == chaosCityName.toUpperCase()) && (location.category != _CNT) && locCCC && (locCCC.toUpperCase() == chaosCountryCode.toUpperCase())) $arr_matchedLocations.push(location);\n                                        }\n                                    }\n                                }\n\n                                if (!$arr_matchedLocations.length) {\n                                    $arr_matchedLocations[0] = {\n                                        category: 'ERROR',\n                                        chaos_city_name: '',\n                                        chaos_country_code: '',\n                                        chaos_hub_id: '',\n                                        city_hub_list: [],\n                                        click_count: 0,\n                                        country_label: '',\n                                        desk_list: '',\n                                        display_label: warnNoLocationsVague,\n                                        hubtype_id: 0,\n                                        iata: '',\n                                        oag: '',\n                                        operator_id_list: [],\n                                        title: ''\n                                    };\n                                }\n\n                                $arr_matchedLocations = AE.utils._removeDuplicateObjectsFromArray($arr_matchedLocations, 'display_label');\n                                $widget._renderMenu($menu, $arr_matchedLocations);\n\n                                return $accordionContainer.accordion({\n                                    header: $textsearchAccordionHead,\n                                    active: 0,\n                                    collapsible: false,\n                                    animate: true,\n                                    heightStyle: 'content',\n                                    create: function (event, ui) {\n                                        return AE.ui.searchType._toggleAccordions($activeAccordion);\n                                    }\n                                });\n                            }\n                        });\n\n                    } else {\n                        return AE.ui.searchType._toggleAccordions($activeAccordion);\n                    }\n                },\n\n                _resizeWidgetMenu: function (menu) {\n                    var $menu = menu;\n                    var $menuStyle = $menu.attr('style');\n                    var $shadeStyleObj = {};\n\n                    $menuStyle = $menuStyle.split(';');\n\n                    for (var i in $menuStyle) {\n                        var _style = $menuStyle[i].split(':');\n                        if (typeof _style[1] != 'undefined') {\n                            var _prop = _style[0].trim();\n                            var _val = _style[1].trim();\n                            $shadeStyleObj[_prop] = _val;\n                        }\n                    }\n\n                    delete $shadeStyleObj.position;\n                    delete $shadeStyleObj.top;\n                    delete $shadeStyleObj.display;\n\n                    return $shadeStyleObj;\n                },\n\n                _customTextsearchFnHandler: function (event, ui) {\n\n                    /* Supplements for the default autocomplete functions. */\n                    event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                    var ev = event;\n                    var evType = ev.type;\n                    var $widget = $(ev.target).textsearch().textsearch('instance');\n                    var $input = $widget.element;\n                    var $menu = $widget.menu.element;\n                    var _direction = $input.data('direction');\n                    var $wrap = $('.ui-textsearch-menu-wrapper[data-direction=' + _direction + ']');\n                    var $clearButton = $widget.targetActionButton;\n                    var _removeClasses = _hideMenuClass + ' ' + _hideMenuClass_alt;\n\n                    \n\n                    switch (evType) {\n                        case 'textsearchopen':\n\n                            $wrap.attr({\n                                'aria-expanded': true,\n                                'data-open': true\n                            }).addClass('ui-front ui-display-absolute-block opening');\n\n                            UI.props._activeMenu = $wrap;\n\n                            if (AE.getSiteViewType() != 'palm') $clearButton.show().removeClass('rotate-scale-out-center').addClass('rotate-scale-in-center');\n                            UI.props._shadeStyle = $widget._resizeWidgetMenu($menu);\n\n                            if (_direction == $wrap.attr('data-direction')) $wrap.css(UI.props._shadeStyle).removeClass(_removeClasses);\n\n                            if(AE.props.siteCode == 'FCR') {\n                                $wrap.position({\n                                    my: 'left top',\n                                    at: 'left-10 bottom',\n                                    of: $input,\n                                    collision: 'none'\n                                });\n                            }else{\n                                $wrap.position({\n                                    my: 'left top',\n                                    at: 'left bottom',\n                                    of: $input,\n                                    collision: 'none'\n                                });\n                            }\n\n                            $menu.css({\n                                'top': 0,\n                                'left': 0\n                            });\n\n                            AE.ui.searchType._scrollToListTop($menu);\n                            /* For menusearch variant. */\n                            if (UI.props._LAUNCH_MENUSEARCH) $wrap.css('width', $input.outerWidth());\n                            if (($wrap.has($menu).length == 0) && ($wrap.attr('data-direction') == $menu.attr('data-direction'))) $wrap.prepend($menu);\n                            if ($(AE.ui.props.appendTarget).has($wrap).length == 0) $wrap.appendTo(AE.ui.props.appendTarget);\n\n                            $wrap.addClass(_showMenuClass);\n\n                            return;\n\n                        case 'textsearchclose':\n\n                            $wrap.removeClass(_showMenuClass + ' ' + 'fs-menu' + ' ' + _hideMenuClass_alt).addClass(UI.props._OVERRIDE_MENU_ANIMATION ? _hideMenuClass_alt : _hideMenuClass);\n\n                            if (AE.getSiteViewType() != 'palm') {\n                                if (!$input.data('hasVal')) $clearButton.addClass('rotate-scale-out-center').removeClass('rotate-scale-in-center');\n                            }\n\n                            UI.props._OVERRIDE_MENU_ANIMATION = false;\n\n                            return setTimeout(function () {\n                                if (!$input.data('hasVal') && (AE.getSiteViewType() != 'palm')) $clearButton.hide();\n                                $wrap.attr({\n                                    'aria-expanded': false,\n                                    'data-open': false\n                                }).removeClass('ui-display-absolute-block');\n\n                            }, 500);\n\n                        case 'textsearchenable':\n                            $input.removeClass('ui-state-disabled').attr({\n                                contentEditable: true\n                            });\n                            return;\n                        case 'textsearchdisable':\n                            $input.addClass('ui-state-disabled').attr({\n                                contentEditable: false\n                            });\n                            return;\n                    }\n                }\n                \n            });\n\n\n            /***End of $.widget***/\n            /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/\n            /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/\n            /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/\n\n            UI.props.$puLoc.add(UI.props.$doLoc).on('textsearchcreate', function (event, ui) {\n\n                var $item = {};\n                var $this = $(this);\n                var $widget = $this.data('customTextsearch');\n                var _hasVal = $this.data('hasVal');\n                var _savedVal = $this.data('savedVal');\n                var _placeholder = _hasVal ? _savedVal : $this.attr(\"data-placeholder-static\");\n                var $input = $this.data('customTextsearch').element.attr({\n                    role: 'textbox',\n                    'data-placeholder': _placeholder\n                });\n                var _direction = $input.data('direction');\n                var $searchMenuWrap = $('<div/>').attr({\n                    class: 'ui-textsearch-menu-wrapper',\n                    id: (_direction == 'pu') ? 'pickup-search-wrapper' : 'dropoff-search-wrapper',\n                    'data-direction': _direction,\n                    role: 'dialog',\n                    'aria-expanded': false,\n                    'data-open': false\n                });\n                var $menu = $this.data('customTextsearch').menu.element.attr({\n                    role: 'menu',\n                    'data-direction': _direction\n                }).wrap($searchMenuWrap);\n                var $menuFooter = $ui_textsearchMenuFooter.clone();\n                var $icon_clear_input = $('<i/>', {\n                    'class': 'ui-textsearch-clear-icon fa',\n                    'aria-hidden': true\n                });\n                var $button_target_input = $('<button/>', {\n                    class: 'ui-textsearch-btn-sm ui-textsearch-target-input',\n                    role: 'button',\n                    title: AE.props.oSearch.TXT_CLEAR_INPUT,\n                    'data-direction': _direction,\n                    'tabindex': -1\n                });\n\n\n                AE.ui.searchType._objHoverHelper($input);\n\n\n                var $ev = $.Event('select');\n                var _iconClass = 'fa-times fa-2';\n\n                this._isOpen = false;\n\n                $widget.wrapper = $searchMenuWrap;\n                $widget.targetActionButton = $button_target_input;\n                $menuFooter.insertAfter($menu);\n\n                if (AE.getSiteViewType() == 'palm') {\n                    $button_target_input.append($icon_clear_input).insertAfter($input);\n                } else {\n                    $button_target_input.append($icon_clear_input).hide().insertAfter($input);\n                }\n\n                if (UI.props._DISPLAY_ALPHA_LIST && !AE.props.isIE && (UI.props._DISPLAY_COUNTRY_CITIES_LIST || UI.props._DISPLAY_COUNTRY_LIST)) $menu.addClass('ui-append-list-index-helper');\n                /* Remove the default autocomplete list. */\n                $('ul.ui-autocomplete').remove();\n\n                _iconClass = (AE.getSiteViewType() == 'palm') ? 'fa-times-circle fa-2' : _iconClass;\n                $icon_clear_input.addClass(_iconClass);\n\n                if (AE.getSiteViewType() != 'palm') AE.ui.searchType._objHoverHelper($button_target_input);\n\n                var IS_PICKUP = (_direction == 'pu');\n                var IS_DROPOFF = (_direction == 'do');\n                var $JSON_PREFILL_OBJ = {};\n                var $JSON_PICKUP_OBJ = {};\n                var $JSON_DROPOFF_OBJ = {};\n\n                var PREFILL_PAGE_DATA = {};\n                var CHECK_PU_ISO = '';\n                var CHECK_PU_CITY = '';\n\n                var CHECK_DO_ISO = '';\n                var CHECK_DO_CITY = '';\n                var ALLOW_DROPOFF = false;\n\n                if (USE_STORED_SEARCH) {\n                    $JSON_PREFILL_OBJ = (typeof (PREFILL_STORAGE_STR) == 'string') ? JSON.parse(PREFILL_STORAGE_STR) : false;\n                    $JSON_PICKUP_OBJ = $JSON_PREFILL_OBJ ? $JSON_PREFILL_OBJ.pu : false;\n                    $JSON_DROPOFF_OBJ = $JSON_PREFILL_OBJ ? $JSON_PREFILL_OBJ.drop : false;\n                    TRY_PREFILL_PICKUP = false;\n                    TRY_PREFILL_DROPOFF = false;\n                    if (PREFILL_STORAGE_STR && !$JSON_PREFILL_OBJ.excl_ltr) {\n                        TRY_PREFILL_PICKUP = $JSON_PICKUP_OBJ && IS_PICKUP;\n                        TRY_PREFILL_DROPOFF = $JSON_DROPOFF_OBJ && IS_DROPOFF;\n                    }\n                    if($JSON_PREFILL_OBJ.excl_ltr){// Stored LTR Searches have fewer properties WEBAE3-3408 LW\n                        var dspLTRlbl = 'Leasing Locations';\n                        if($JSON_PICKUP_OBJ && !$JSON_PICKUP_OBJ.display_label) $JSON_PICKUP_OBJ.display_label = $JSON_PICKUP_OBJ.chaos_city_name+' '+dspLTRlbl;\n                        if($JSON_DROPOFF_OBJ && !$JSON_DROPOFF_OBJ.display_label) $JSON_DROPOFF_OBJ.display_label = $JSON_DROPOFF_OBJ.chaos_city_name+' '+dspLTRlbl;\n                    }   \n                } else {\n                    PREFILL_PAGE_DATA = UI.props._textsearchPrefillObj;\n                    CHECK_PU_ISO = PREFILL_PAGE_DATA.pu.chaos_country_code;\n                    CHECK_PU_CITY = PREFILL_PAGE_DATA.pu.chaos_city_name;\n                    switch (CHECK_PU_ISO) {\n                        case 'UK':\n                            CHECK_PU_ISO = 'GB';\n                            break;\n                    }\n                    _fetchPuIso = CHECK_PU_ISO;\n                    _fetchPuCityName = CHECK_PU_CITY;\n                    _fetchPuCategory = PREFILL_PAGE_DATA.pu.category;\n                    TRY_PREFILL_PICKUP = true;\n                    CHECK_DO_ISO = PREFILL_PAGE_DATA.drop.chaos_country_code;\n                    CHECK_DO_CITY = PREFILL_PAGE_DATA.drop.chaos_city_name;\n                    ALLOW_DROPOFF = (CHECK_DO_ISO != '') && (CHECK_DO_CITY != '') && !((CHECK_DO_ISO == CHECK_PU_ISO) && (CHECK_DO_CITY == CHECK_PU_CITY));\n                    if (ALLOW_DROPOFF) {\n                        _fetchDoIso = CHECK_DO_ISO;\n                        _fetchDoCityName = CHECK_DO_CITY;\n                        _fetchDoCategory = PREFILL_PAGE_DATA.drop.category;\n                        TRY_PREFILL_DROPOFF = true;\n                    }\n                }\n\n                if (TRY_PREFILL_PICKUP && IS_PICKUP) {\n                    $item = (USE_STORED_SEARCH && PREFILL_STORAGE_STR) ? $JSON_PICKUP_OBJ : {\n                        display_label: _fetchPuCityName,\n                        chaos_country_code: _fetchPuIso,\n                        oag: searchPuOAG, \n                        category: _fetchPuCategory\n                    }; \n                }\n\n                if (TRY_PREFILL_DROPOFF && IS_DROPOFF) {\n                    $item = (USE_STORED_SEARCH && PREFILL_STORAGE_STR) ? $JSON_DROPOFF_OBJ : {\n                        display_label: _fetchDoCityName,\n                        chaos_country_code: _fetchDoIso,\n                        oag: searchDoOAG,\n                        category: _fetchDoCategory\n                    };\n                }\n\n                return (USE_STORED_SEARCH && PREFILL_STORAGE_STR) ? $widget._trigger('select', $ev, {\n                    type: 'textsearchselect',\n                    item: $item\n                }) : $.getJSON($CF_SEARCH_CONTROLLER_REF, {\n                    method: $CF_SEARCH_METHOD.textsearchPrefill,\n                    city: $item.display_label,\n                    countrycode: $item.chaos_country_code,\n                    oag: $item.oag\n\n                }).done(function (data) {\n                    /* WEBAE3-1201 - prevent DO from attempting fill before PU\n                     * Related JS can be found at the bottom of \"textsearchselect\" */\n                    if (_direction == 'pu') {\n                        /* Always fill pick-up… */\n                        UI.props._puLocHasData = true;\n                        return $widget._trigger('select', $ev, {\n                            type: 'textsearchselect',\n                            item: data.pickupLocation\n                        });\n                    }\n\n                    if (_direction == 'do' && UI.props._puLocHasData) {\n                        /* Fill drop-ff as long as pick-up is already set. */\n                        UI.props._doLocHasData = true;\n                        return $widget._trigger('select', $ev, {\n                            type: 'textsearchselect',\n                            item: data.pickupLocation\n                        });\n                    }\n\n                    if (_direction == 'do' && !UI.props._puLocHasData) {\n                        /* If pick-up is not filled - then store the drop-off location in a temp object and trigger it again after pick-up has been selected */\n                        return UI.props.$tempDoDataHolder = data;\n                    }\n\n                });\n            });\n\n            UI.props.$puLoc.add(UI.props.$doLoc).on('textsearchopen', function (event, ui) {\n\n                if (!UI.props._LAUNCH_MENUSEARCH) {\n                    if (this._isOpen) return;\n                } else {\n                    if (UI.props._READY_TO_CLOSE) return;\n                }\n\n                this._isOpen = true;\n                UI.props._READY_TO_CLOSE = false;\n\n                var $widget = $(this).textsearch().textsearch('instance');\n                return $widget._customTextsearchFnHandler(event, ui);\n            });\n\n            UI.props.$puLoc.add(UI.props.$doLoc).on('textsearchclose', function (event, ui) {\n\n                if (!this._isOpen) return;\n                if (!UI.props._READY_TO_CLOSE) return;\n                this._isOpen = false;\n                UI.props._READY_TO_CLOSE = true;\n\n                var $widget = $(this).textsearch().textsearch('instance');\n                return $widget._customTextsearchFnHandler(event, ui);\n            });\n\n            UI.props.$puLoc.add(UI.props.$doLoc).on('textsearchenable', function (event, ui) {\n                var $widget = $(this).textsearch().textsearch('instance');\n                return $widget._customTextsearchFnHandler(event, ui);\n            });\n\n            UI.props.$puLoc.add(UI.props.$doLoc).on('textsearchdisable', function (event, ui) {\n                var $widget = $(this).textsearch().textsearch('instance');\n                return $widget._customTextsearchFnHandler(event, ui);\n            });\n\n            UI.props.$puLoc.add(UI.props.$doLoc).on('textsearchsearch', function (event, ui) {\n\n                var $input = $(this).data('customTextsearch').element;\n                var $menu = $(this).data('customTextsearch').menu.element;\n                var _inDialog = $('body').find('.ui-dialog');\n                var _dialog;\n\n                UI.props._READY_TO_CLOSE = false;\n                UI.props._OVERRIDE_MENU_ANIMATION = false;\n\n                if (_inDialog.length != 0) {\n                    _dialog = AE.ui.dialog.instance();\n                    _dialog.on(\"dialogclose\", function (event, ui) {\n                        _dialog.off(\"dialogclose\");\n                        UI.props._READY_TO_CLOSE = true;\n                        UI.props._OVERRIDE_MENU_ANIMATION = true;\n                        return $input.textsearch('close');\n                    });\n                }\n\n                AE.ui.searchType._scrollToListTop($menu);\n            });\n\n            UI.props.$puLoc.add(UI.props.$doLoc).textsearch({\n                delay: 0,\n                minLength: 3,\n                appendTo: AE.ui.props.appendTarget,\n                autoFill: true,\n                source: function (request, response) {\n                    var _request = request.term;\n                    var _direction = this.element.data('direction');\n                    $.ajax({\n                        type: 'GET',\n                        url: $CF_SEARCH_CONTROLLER_REF,\n                        dataType: 'json',\n                        data: {\n                            method: $CF_SEARCH_METHOD.textsearch,\n                            criteria: _request,\n                            affiliateName: AFFILIATE_NAME,\n                            operator_id_list: (_direction == 'pu') ? '' : OPERATOR_ID_LIST_TO_FILTER_DO\n                        },\n                        success: function (data) {\n                            var $arr_matches = data.locations;\n                            var list_length = Object.keys($arr_matches).length;\n\n                            if (!list_length) {\n                                var result = [{\n                                    display_label: 'No matches found',\n                                    label: response.term,\n                                    value: request.term,\n                                    category: 'ERROR',\n                                    click_count: 0,\n                                    locations: {}\n                                }];\n                                $arr_matches = result;\n                            }\n                            var gaActionString = ($arr_matches[0].category != 'ERROR') ? 'searchFormLoadSuccess' : 'searchFormLoadError';\n                            /* Successful/Failed search term tracking. */\n                            AE.ga.gaArrayProcess([{\n                                GACATEGORY: 'carTextSearch',\n                                GAACTION: gaActionString,\n                                GALABEL: _request\n                            }]);\n                            return response($arr_matches);\n                        }\n                    });\n                },\n                select: function (event, ui) {\n                    UI.props._DISPLAY_COUNTRY_LIST = false;\n                    UI.props._DISPLAY_COUNTRY_CITIES_LIST = false;\n// RETURNING TO HOME PAGE AFTER LTR SEARCH NEEDS TO REPOPULATE TEXT SEARCH BETTER\n                    if ((typeof (ui.item) == 'undefined') || (!Object.keys(ui.item).length)) { return false; }\n\n                    var $widget = $(this).textsearch().textsearch('instance');\n                    var $input = $(this).data('customTextsearch').element;\n                    var $menu = $(this).data('customTextsearch').menu.element;\n                    var $event = event || window.event;\n                    var $item = ui.item;\n                    var _direction = $input.data('direction');\n                    var displayLabel = $item.display_label;\n                    var category = $item.category;\n                    var chaosCityName = $item.chaos_city_name;\n                    var chaosCountryCode = $item.chaos_country_code;\n                    var countryLabel = $item.country_label;\n                    var chaosCityId = $item.chaos_city_id || false;\n                    var _triggerCountryList = (category == _CNT);\n                    var _triggerCityList = (category == _CTY + '-EXPANDABLE');\n                    var operatorIdList = $item.operator_id_list;\n                    var evTarget = $event.currentTarget;\n                    var addCogToListItem = $(evTarget).attr('data-city') == 'false' ? true : false;\n                    var chaosCountryLabel;\n\n                    $item.loc_type = category;\n\n                    PREVENT_INPUT_BLUR = (_triggerCountryList || _triggerCityList) ? true : false;\n\n                    if (addCogToListItem) { $(evTarget).find('.ui-menu-item-wrapper i').addClass('fa-cog fa-spin'); }\n\n                    // Initiate country or city lists - Exit textsearchselect as these are tiered lists\n                    if (PREVENT_INPUT_BLUR) {\n                        UI.props._READY_TO_CLOSE = false;\n                        UI.props._DISPLAY_COUNTRY_LIST = false;\n                        UI.props._DISPLAY_COUNTRY_CITIES_LIST = true;\n\n                        chaosCountryLabel = (category == _CNT) ? countryLabel : '';\n\n                        // Initiate country list\n                        if (_triggerCountryList) { return $widget._populateMenusearchCityList($menu, $item, chaosCountryLabel); }\n                        // Initiate city list (accordions)\n                        if (_triggerCityList) { return $widget._setMenuItemAccordion(evTarget, chaosCityId, chaosCityName, chaosCountryCode); }\n                    }\n\n                    // Set up the returned object\n                    if (_direction == 'pu') {\n                        // Set to sort operator IDs in DO\n                        OPERATOR_ID_LIST_TO_FILTER_DO = operatorIdList;\n                        UI.props.$RES_OBJ_FOR_BOOKING.pu = $item;\n                        UI.props.$RES_OBJ_FOR_BOOKING.drop = false;\n                    } else if (_direction == 'do') {\n                        UI.props.$RES_OBJ_FOR_BOOKING.drop = $item;\n\n                        var puDisplayLabel = false;\n                        if (_.has(UI.props.$RES_OBJ_FOR_BOOKING, 'pu')) {\n                            if (_.has(UI.props.$RES_OBJ_FOR_BOOKING.pu, 'display_label')) {\n                                puDisplayLabel = UI.props.$RES_OBJ_FOR_BOOKING.pu.display_label;\n                            } else if (_.has(UI.props.$RES_OBJ_FOR_BOOKING.pu, 'locations')) {\n                                puDisplayLabel = UI.props.$RES_OBJ_FOR_BOOKING.pu.locations.display_label || false;\n                            }\n                        }\n\n                        var doDisplayLabel = false;\n                        if($item.loc_type === undefined){\n                            doDisplayLabel = $item.chaos_city_name || false;\n                        } else {\n                            doDisplayLabel = $item.display_label || $item.locations.display_label;\n                        }\n                        \n                        puDisplayLabel = puDisplayLabel ? puDisplayLabel : false;\n                        doDisplayLabel = doDisplayLabel ? doDisplayLabel : false;\n\n                        if (!puDisplayLabel && searchPuCity && searchPuCity !== '') { puDisplayLabel = searchPuCity; }\n                        if (!doDisplayLabel && searchDoCity && searchDoCity !== '') { doDisplayLabel = searchDoCity; }\n\n                        if (puDisplayLabel == doDisplayLabel) { UI.props.$RES_OBJ_FOR_BOOKING.drop = false; }\n                        if (doDisplayLabel && (puDisplayLabel != doDisplayLabel) && !UI.props.$chkDiff.is(':checked')) { UI.props.$chkDiff.trigger('click'); }\n                    }\n\n                    UI.props._READY_TO_CLOSE = true;\n                    UI.props._OVERRIDE_MENU_ANIMATION = false;\n\n                    AE.ui.searchType._updateInputValue($input, displayLabel);\n                    // Pickup has been changed, reset dropoff\n                    if (_direction == 'do' && !UI.props.$RES_OBJ_FOR_BOOKING.drop) { AE.ui.searchType._updateInputValue($input, ''); }\n                    // Set itinerary value to hand off to booking\n                    AE.ui.search.autocomplete.setValue(UI.props.$RES_OBJ_FOR_BOOKING);\n\n                    $input.textsearch('close');\n\n                    $('#grab-focus').trigger('focus');\n\n                    AE.ga.gaArrayProcess([{\n                        GACATEGORY: 'carTextSearch',\n                        GAACTION: 'searchFormSelect',\n                        GALABEL: ($item.loc_type == 'CITY') ? 'ALL Downtown' : $item.loc_type\n                    }]);\n                    if (!UI.props.$RES_OBJ_FOR_BOOKING.drop) AE.ga.gaArrayProcess([{\n                        GACATEGORY: 'carSearch',\n                        GAACTION: 'oneWaySelect'\n                    }]);\n\n                    /* WEBAE3-1201 - prevent DO from attempting fill before PU\n                     * Related JS can be found in \"done()\" function of textsearchcreate */\n                    if (_direction == 'pu' && UI.props._puLocHasData && !UI.props._doLocHasData && UI.props.$tempDoDataHolder.hasOwnProperty('pickupLocation')) {\n                        var $ev = $.Event('select');\n                        $ev.target = UI.props.$doLoc;\n                        UI.props._doLocHasData = true;\n                        return $widget._trigger('select', $ev, {\n                            type: 'textsearchselect',\n                            item: UI.props.$tempDoDataHolder.pickupLocation\n                        });\n                    }\n                }\n            });\n\n\n            UI.props.$puLoc.add(UI.props.$doLoc).on('keydown', function (event) {\n                    /*KeyDown because KeyUp cannot be assigned to contentEditable*/\n                    var input = event.target;\n                    var key = event.charCode ? event.charCode : event.keyCode ? event.keyCode : 0;\n\n                    switch (key) {\n                        /* quote/apostrophe - simari 12/15/17 */\n                        /* case 222:\n                             event.preventDefault ? event.preventDefault() : ( event.returnValue = false );\n                             return false; */\n                        /* space - simari 12/15/17\n                         * jQuery autocomplete was not handling the space correctly x-browser,\n                         * [case 32] should be left in here. */\n                        case 32:\n                            var _updateTextString = input.innerHTML.replace(/<br\\s*\\/?>/gi, '') + '&nbsp;';\n                            _updateTextString = _updateTextString.replace('&nbsp;&nbsp;', '&nbsp;');\n                            _updateTextString = encodeURIComponent(_updateTextString);\n\n                            event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                            event.originalEvent.returnValue = true;\n\n                            _updateTextString = decodeURIComponent(_updateTextString);\n                            input.innerHTML = _updateTextString;\n                            return AE.ui.searchType._cursorToEndOfString(input);\n                        default:\n                            return true;\n                    }\n                })\n                .on('input', function (event) {\n                    var $input = $(event.target);\n                    var _direction = $input.data('direction');\n\n                    UI.props._DISPLAY_COUNTRY_LIST = false;\n                    UI.props._DISPLAY_COUNTRY_CITIES_LIST = false;\n\n                    if ((_direction == 'do') && !UI.props.$puLoc.data('hasVal')) {\n                        UI.props.$doLoc.text('');\n                        return UI.props.$puLoc.trigger('customFocus');\n                    }\n\n                    return true;\n                })\n                .on('focus', function (event) {\n\n                    UI.props._DISPLAY_COUNTRY_LIST = false;\n                    UI.props._DISPLAY_COUNTRY_CITIES_LIST = false;\n                    UI.props._LAUNCH_MENUSEARCH = false;\n                    if (AE.legacy.grief.whichIE.isIE9 || AE.legacy.grief.whichIE.isIE10) {\n                        $(this).addClass('hide-cursor-ie-patch');\n                    }\n                    event.stopPropagation();\n                    return $(this).trigger('customFocus');\n                })\n                .on('blur', function (event) {\n                    event.stopPropagation();\n                    return $(this).trigger('customBlur');\n                })\n                .on('customFocus', function (event) {\n                    var $input = $(event.target);\n                    var _direction = $input.data('direction');\n\n                    $input.addClass('ui-state-focus');\n                    $input.attr({\n                        'data-placeholder': $input.data('savedVal'),\n                        tabindex: 0\n                    });\n\n                    if (AE.getSiteViewType() == 'palm') {\n\n                        if ($input.hasClass('ui-state-disabled')) {\n                            event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                            event.stopPropagation();\n                            return false;\n                        }\n\n                        if( AE.props.siteCode !== 'FCR' ) {\n                            AE.ui.devices._show($input);\n                        } else {\n                            \n                            // scroll to pickup field then stop the page from scrolling to ensure menu is visible\n                            var pukeycount = 0;\n                            $('div[name^=\"pickup-wrapper\"]').keydown(function() { \n                                pukeycount =  pukeycount + 1\n                                if (pukeycount === 1) {\n                                    \n                                    var $container = $('div'),\n                                    $scrollTo = $('div[name^=\"pickup-input_text_wrapper\"]');\n                                    $container.scrollTop(\n                                        $scrollTo.offset().top - $container.offset().top + $container.scrollTop()\n                                    );\n                                    \n                                    $(\"#scroll-content\").css(\"overflow\", \"hidden\");\n                                    $(\"#pickup-search-wrapper\").css(\"max-height\", \"200px\");\n                                    $(\"#pickup-search-wrapper\").css(\"overflow\", \"scroll\");\n                                }\n\n                               \n                \n                            });\n\n                            $('div[name^=\"pickup-wrapper\"]').click(function() { \n                                pukeycount = 0\n                            });\n\n\n                            // scroll to dropoff field then stop the page from scrolling to ensure menu is visible\n                            var dokeycount = 0;\n                            $('div[name^=\"dropoff-wrapper\"]').keydown(function() { \n                                dokeycount =  dokeycount + 1\n                                if (dokeycount === 1) {\n                                    \n                                    var $container = $('div'),\n                                    $scrollTo = $('div[name^=\"dropoff-input_text_wrapper\"]');\n                                    $container.scrollTop(\n                                        $scrollTo.offset().top - $container.offset().top + $container.scrollTop()\n                                    );\n                                    \n                                    $(\"#scroll-content\").css(\"overflow\", \"hidden\");\n                                    $(\"#dropoff-search-wrapper\").css(\"max-height\", \"200px\");\n                                    $(\"#dropoff-search-wrapper\").css(\"overflow\", \"scroll\");\n                                }\n\n                               \n                \n                            });\n\n                            $('div[name^=\"dropoff-wrapper\"]').click(function() { \n                                dokeycount = 0\n                            });\n\n                            // cleanup after menu selection is made\n                            $(\"body\").click(function() { \n                                $(\"#scroll-content\").css(\"overflow\", \"\");\n                                $(\"#pickup-search-wrapper\").css(\"max-height\", \"\");\n                                $(\"#pickup-search-wrapper\").css(\"overflow\", \"\");\n                                $(\"#scroll-content\").css(\"overflow\", \"\");\n                                $(\"#dropoff-search-wrapper\").css(\"max-height\", \"\");\n                                $(\"#dropoff-search-wrapper\").css(\"overflow\", \"\");\n                            });\n\n\n                        \n                        }\n                        \n                        \n\n\n                    }\n\n                    if ($input.data('hasVal')) $input.text('');\n\n                    $input.attr({\n                        'data-placeholder': ($input.attr('data-placeholder') == '') ? $input.attr('data-placeholder-static') : $input.data('savedVal')\n                    });\n\n                    if ((_direction == 'do') && !UI.props.$puLoc.data('hasVal')) {\n                        $input.attr({\n                            'data-placeholder': $input.attr('data-placeholder-static')\n                        });\n                        return AE.ui.searchType._throwWarningFlag($input, UI.props.msg_pickupFirst, UI.props.msg_inputEmpty, {\n                            top: 50,\n                            left: -5\n                        }, 'arrow-left');\n                    }\n                })\n                .on('customBlur', function (event) {\n                    var $input = $(event.target);\n                    var _direction = $input.data('direction');\n\n                    if (PREVENT_INPUT_BLUR) {\n                        event.stopPropagation();\n                        return $input.trigger('customFocus');\n                    }\n\n                    if ((AE.getSiteViewType() == 'palm') && UI.props._READY_TO_CLOSE) AE.ui.devices._hide($input);\n\n                    $input.removeClass('ui-state-focus');\n                    $input.data('hasVal') ? $input.text($input.data('savedVal')) : $input.text('');\n                    $input.attr({\n                        'data-placeholder': ($input.attr('data-placeholder') == '') ? $input.attr('data-placeholder-static') : $input.data('savedVal'),\n                        tabindex: -1\n                    });\n\n                    if (_direction == 'do' && (UI.props.$puLoc.text() == UI.props.$doLoc.text())) {\n                        $input.text('');\n                    }\n                });\n\n        },\n\n        onBodyClick: function (event, target) {\n\n            var $target = $(target);\n            var $wrap = $('.ui-textsearch-menu-wrapper[aria-expanded=true]');\n            var _direction = ($wrap.length != 0) ? $wrap.attr('data-direction') : $target.attr('data-direction');\n            var $input = (_direction == 'pu') ? UI.props.$puLoc : UI.props.$doLoc;\n            var $widget = $input.data('customTextsearch');\n            var $menu = $widget.menu.element;\n            var isBtn = $target.prop(\"tagName\").toLowerCase() == 'button';\n            var isTextsearchInput = $target.hasClass('ui-textsearch-input');\n            var isTextsearchMenuItem = $target.parent('dd').is('[role=menuitem]');\n            var isInputResetBtn = $target.hasClass('ui-reset-input');\n            var isScrollToTopBtn = $target.hasClass('ui-textsearch-scroll-btn');\n            var isBackToListBtn = $target.hasClass('ui-back-to-list');\n            var isTargetInputBtn = $target.hasClass('ui-textsearch-target-input');\n            var isAlphaListHelperBtn = $target.hasClass('ui-textsearch-alpha-index-list-item');\n            var _preventDefault = (isBtn && (isInputResetBtn || isBackToListBtn || isScrollToTopBtn || isTargetInputBtn)) || isAlphaListHelperBtn || isTextsearchMenuItem;\n            var wrapDir, inputDir, dontClose;\n\n           \n            if (_preventDefault) {\n                event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n            }\n\n            if (isTextsearchInput) {\n                /* Target is a search input, setting some variables. */\n                wrapDir = $wrap.data('direction');\n                inputDir = $target.data('direction');\n                dontClose = (wrapDir == inputDir);\n            }\n\n            if (isBtn) {\n\n                if (isInputResetBtn) {\n                    // event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                    /* Target is reset-input button in DO menu. */\n                    $input = UI.props.$doLoc;\n                    AE.ui.searchType._updateInputValue($input, '');\n                    UI.props.$RES_OBJ_FOR_BOOKING.drop = false;\n                    UI.props._READY_TO_CLOSE = true;\n                    UI.props._OVERRIDE_MENU_ANIMATION = false;\n                    AE.ui.search.autocomplete.setValue(UI.props.$RES_OBJ_FOR_BOOKING);\n                    return $input.textsearch('close');\n                }\n\n                if (isBackToListBtn) {\n                    // event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                    /* Target is back-to-list (country) button. */\n                    UI.props._DISPLAY_COUNTRY_LIST = true;\n                    return $widget._populateMenusearchCountryList($menu);\n                }\n\n                if (isScrollToTopBtn) {\n                    // event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                    /* Target is scroll-to-top button in menu footer. */\n                    return AE.ui.searchType._scrollToListTop($menu);\n                }\n\n                if (isTargetInputBtn) {\n                    // event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                    /* Target is the clear-input button. */\n                    UI.props.$RES_OBJ_FOR_BOOKING = (_direction == 'pu') ? {\n                        'pu': false,\n                        'drop': false\n                    } : {\n                        'pu': UI.props.$RES_OBJ_FOR_BOOKING.pu,\n                        'drop': false\n                    };\n                    if (UI.props._LAUNCH_MENUSEARCH) {\n                        UI.props._READY_TO_CLOSE = false;\n                        $input.textsearch('open');\n                    } else {\n                        UI.props._READY_TO_CLOSE = true;\n                        UI.props._OVERRIDE_MENU_ANIMATION = false;\n                        AE.ui.searchType._clearInput($input);\n                        /* If target attempts to clear the PU input, hide the button in DO as well. */\n                        if (_direction == 'pu') UI.props.$doLoc.textsearch().textsearch('instance').targetActionButton.hide();\n                        $input.textsearch('close');\n                    }\n                    return AE.ui.search.autocomplete.setValue(UI.props.$RES_OBJ_FOR_BOOKING);\n                }\n            } else {\n                if (isAlphaListHelperBtn) {\n                    // event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                    /* Target is a character in the right-side alphabetical menu, visible on city lists per country. */\n                    var $scrollTarget = $(target).attr('aria-controls');\n                    var $scrollObj = $('#' + $scrollTarget);\n                    return AE.ui.searchType._scrollToTopOfContainer($scrollObj);\n                }\n            }\n\n            if (isTextsearchMenuItem) {\n                // event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n                /* Target is a search menu-item. */\n                var $this = $target.parent('dd');\n                var $item = $this.data('iObj');\n                var $event = event || window.event;\n                var $ev = $.Event($event);\n\n                $ev.target = $this;\n                $ev.currentTarget = $this;\n\n                return $widget._trigger('select', $ev, {\n                    type: 'textsearchselect',\n                    item: $item\n                });\n            }\n\n            if (dontClose) {\n                /* Target is a search input, don't hide the menu. */\n            } else if (UI.props._activeMenu && target && $wrap.length && UI.props._activeMenu.has(target).length) {\n                /* Target is contained in the active menu, okay to hide the menu. */\n            } else {\n                UI.props._OVERRIDE_MENU_ANIMATION = !target.is('[class^=ui-textsearch]');\n                UI.props._READY_TO_CLOSE = true;\n                return $input.textsearch('close');\n            }\n\n            if (isTextsearchInput && (UI.props._LAUNCH_MENUSEARCH || (!UI.props._LAUNCH_MENUSEARCH && !AE.props.isIE))) {\n                UI.props._DISPLAY_COUNTRY_LIST = true;\n                UI.props._DISPLAY_COUNTRY_CITIES_LIST = true;\n                return $target.trigger('customFocus');\n            }\n        },\n        manageResize: function (event) {\n\n            var $wrap = $('.ui-textsearch-menu-wrapper[aria-expanded=true]') || UI.props._activeMenu;\n            var _direction = $wrap.attr('data-direction');\n            var $input = (_direction == 'pu') ? UI.props.$puLoc : UI.props.$doLoc;\n            var $viewSize = AE.getSiteViewType();\n\n            if ($viewSize === 'palm' && AE.ui.searchType.props.$viewSize !== $viewSize) location.reload();\n\n            if ($wrap.length) {\n                UI.props._OVERRIDE_MENU_ANIMATION = true;\n                UI.props._READY_TO_CLOSE = true;\n                return $input.textsearch('close');\n            } else {\n                return false;\n            }\n        }\n    };\n\n    return UI;\n})();\n;var AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\nAE.ui.searchType.menu = AE.ui.searchType.menu || (function () {\n    'use strict';\n\n    var vouchDateTime = ((typeof (oBKdateTime) != 'undefined') && !_.isEmpty(oBKdateTime)) ? oBKdateTime : false;\n\n    /* Use to prefill \"manage my booking\" if all properties exist. */\n    if (vouchDateTime)\n        for (var i in vouchDateTime) {\n            var testProp = vouchDateTime[i] || '';\n            vouchDateTime = !_.isEmpty(testProp) ? vouchDateTime : false;\n        }\n    /*\n    DEPENDENCIES: AE, AE.ui, AE.ui.searchType\n    */\n    var UI = {\n        init: function () {\n            UI.props = {\n                cfcRef: '/plugins/ae3/lib/searchController.cfc',\n                oPrefill: {\n                    PU: {\n                        ran: false,\n                        country: '',\n                        city: '',\n                        loclist: ''\n                    },\n                    DO: {\n                        ran: false,\n                        country: '',\n                        city: '',\n                        loclist: ''\n                    },\n                    OW: {\n                        city: false,\n                        country: false\n                    }\n                },\n                inModify: false,\n                $do: $('div[name=\"dropoff-wrapper\"].menusearch'),\n                $chkDiffs: $('input.chk-diff-linked')\n            };\n\n            UI.props.$chkDiffs.prop('checked', false);\n            var $voucherNewSearchContainer = $('#toggleeNewSearch');\n            if ($voucherNewSearchContainer[0]) {\n                UI.props.inModify = true;\n            }\n            UI.state = {\n                synchingChkDiff: false,\n                operator_id_list: '',\n                PU: {\n                    country: '',\n                    city: '',\n                    loc: '',\n                    cities: {},\n                    hubs: []\n                },\n                DO: {\n                    country: '',\n                    city: '',\n                    loc: '',\n                    cities: {},\n                    hubs: []\n                },\n                OW: {\n                    country: false,\n                    city: false\n                }\n            };\n            $('#locations-wrapper .menusearch').css('paddingLeft', '3px');\n            $('#locations-wrapper .menusearch label.location-label').css('marginLeft', '-3px');\n            $('#locations-wrapper .menusearch .menusearch--container .styled--select select option').removeClass('visuallyhidden');\n            AE.ui.addBodyChangeTask({\n                func: UI.onBodyChange\n            });\n            AE.ui.addBodyClickTask({\n                func: UI.onBodyClick\n            });\n            UI.prefill();\n        },\n        menuSearchSelectInit: function ($target) {\n            var oProps = {\n                direction: $target.attr('name').substring(0, 2),\n                splitID: $target.attr('id').split('_'),\n                value: $target.val(),\n                display_label: $target.val(),\n                selectType: '',\n                ID: 0,\n                baseID: $target.attr('id')\n            };\n            if (oProps.splitID.length > 1) {\n                oProps.selectType = oProps.splitID[0];\n                oProps.baseID = oProps.splitID[1];\n            }\n            if (oProps.value === null) {\n                oProps.value = UI.props.oPrefill[oProps.direction][oProps.selectType];\n                if ($target.hasClass('trg__menusearch--city')) {\n                    oProps.value = UI.state[oProps.direction].cities[oProps.value] || '--';\n                }\n            }\n            var $selected = $($target).find('option[value=\"' + oProps.value + '\"]');\n            oProps.display_label = $selected.html();\n            oProps.ID = $selected.attr('id');\n            $('#' + oProps.baseID + ' .ui-state-invalid').removeClass('ui-state-invalid');\n            if (oProps.direction === 'PU' && oProps.selectType !== 'country') {\n                UI.state.operator_id_list = $selected.data('opid-list');\n            }\n            if (oProps.value !== null) {\n                UI.state[oProps.direction][oProps.selectType] = oProps.value || '';\n            }\n            if (UI.props.oPrefill[oProps.direction].ran) {\n                UI.clearInput(oProps.direction, $target);\n            }\n            if (!$target.hasClass('trg__menusearch--loc')) {\n                // $target.parent('.styled--select').addClass('visuallyhidden');\n                if (UI.state.PU.country !== '' && UI.state.DO.country !== '' && UI.state.PU.country !== UI.state.DO.country) {\n                    UI.state.OW.country = true;\n                }\n                if (UI.state.PU.city !== '' && UI.state.DO.city !== '' && UI.state.PU.city !== UI.state.DO.city) {\n                    UI.state.OW.city = true;\n                }\n                if (UI.state.OW.country || (!UI.state.OW.country && UI.state.OW.city)) {\n                    if (UI.state.DO.loc !== '') {\n                        UI.checkTheOneWayBox();\n                    }\n                }\n            }\n\n            return oProps;\n        },\n        handleCountryMenuSelect: function ($target) {\n            var oProps = UI.menuSearchSelectInit($target);\n            $.ajax({\n                url: UI.props.cfcRef,\n                dataType: 'json',\n                data: {\n                    method: 'getLocalizedCities',\n                    chaos_country_code: oProps.value,\n                    returnTopCities: AEdata.returnTopCities,\n                    affiliateName: AEdata.affiliateName,\n                    operator_id_list: (oProps.direction === 'PU') ? '' : UI.state.operator_id_list || ''\n                },\n                beforeSend: function(){\n                    //WEBAE3-4265\n                    UI.resetInput('country',oProps.direction,oProps.baseID);\n                },\n                success: function (data) {\n                    var $citySelect = $('#city_' + oProps.baseID),\n                        $df = $(document.createDocumentFragment());\n                        if(UI.props.$chkDiffs.prop('checked') && oProps.direction =='DO' && oProps.selectType == 'country'){searchPuCity='';}\n\n                        _.each(data, function (tempCity) {\n                            UI.state[oProps.direction].cities[tempCity.chaos_city_name] = tempCity.chaos_city_id;\n                            if (  tempCity.hasOwnProperty(\"optgroup\") && tempCity.optgroup ) {\n                                $df.append($('<option disabled>' + tempCity.display_label + '</option>', { label: tempCity.display_label }));\n                                //$df.append($('<optgroup/>', { label: tempCity.display_label }));\n                            } else {\n                                $df.append($('<option/>', {\n                                    'id': tempCity.chaos_city_id + '-' + tempCity.chaos_city_name + oProps.direction,\n                                    'value': tempCity.chaos_city_id,\n                                    'data-opid-list': tempCity.operator_id_list,\n                                    'html': tempCity.display_label,\n                                    'selected': (searchPuCity != '') ? (tempCity.chaos_city_name.toUpperCase() == searchPuCity.toUpperCase() ? tempCity.chaos_city_name : false) : false\n                                }));\n                            }\n                        });\n\n                        var _baseId = $target.closest('.menusearch--container').attr('id');\n                        $('#city_' + _baseId).change();\n\n                    if (data.length == 0)\n                        $target.val('--');\n\n\n                    /*$('#searchcrumbs_'+oProps.baseID+' .searchcrumbs--country').addClass('trg__menusearch--country-x').html(\n                    \t$( document.createDocumentFragment() ).append(\n                    \t\t$('<img/>',{\n                    \t\t\tsrc:AE.props.muraThemePath+'/images/flags/'+oProps.value+'.png',\n                    \t\t\talt:oProps.display_label\n                    \t\t}),\n                    \t\t'&nbsp;'+oProps.display_label+'&nbsp;'\n                    \t)\n                    );\n                    AE.heightAdjust('.searchcrumbs_container');*/\n                    UI.state[oProps.direction].city = '';\n                    $citySelect.empty().append($('<option/>', {\n                        value: '--',\n                        html: AEdata.menuPrompts[oProps.direction].CITY\n                    }), $df);\n                   \n                    $('#loc_' + oProps.baseID).empty().append($('<option/>', {\n                        value: '--',\n                        html: AEdata.menuPrompts[oProps.direction].HUB\n                    }));\n                \n\n                    if (!UI.props.oPrefill[oProps.direction].ran) {\n                        if (oProps.direction !== 'DO' || UI.props.oPrefill.OW.country || (!UI.props.oPrefill.OW.country && UI.props.oPrefill.OW.city)) {\n                            $citySelect.val(UI.state[oProps.direction].cities[UI.props.oPrefill[oProps.direction].city.toUpperCase()] || '--');\n                            $citySelect.change();\n                        } else {\n                            UI.props.oPrefill[oProps.direction].ran = true;\n                        }\n                    }\n                }\n\n            });\n        },\n        handleCityMenuSelect: function ($target) {\n            var oProps = UI.menuSearchSelectInit($target),\n                $locSelect = $('#loc_' + oProps.baseID),\n                locPrompt = AEdata.menuPrompts[oProps.direction].HUB;\n            \n            if (oProps.value !== '--') {\n                $.ajax({\n                    url: UI.props.cfcRef,\n                    dataType: 'json',\n                    data: {\n                        method: 'textsearchCityLocs',\n                        sitecode: AE.props.siteCode,\n                        affiliateName: AEdata.affiliateName,\n                        chaos_city_id: oProps.value,\n                        oag: searchPuOAG,\n                        operator_id_list: (oProps.direction === 'PU') ? '' : UI.state.operator_id_list\n                    },\n                beforeSend: function(){\n                    //WEBAE3-4265\n                    UI.resetInput('city',oProps.direction,oProps.baseID);\n                },\n                    success: function (data) {\n                        data.locations = data.locations || {};\n                        var $df = $(document.createDocumentFragment()),\n                            oCity = data.locations[0] || {},\n                            activatedHubs = [],\n                            labelHtmlTxt;\n\n                        if (oCity && oCity.locations && oCity.locations.length) {\n                            activatedHubs = _.filter(oCity.locations, function (tempLoc) {\n                                return !_.isEmpty(tempLoc.desk_list.toString());\n                            });\n                        }\n                        if (activatedHubs.length) {\n                            UI.state[oProps.direction].hubs = _.sortBy(activatedHubs, function (tempLoc) {\n                                return tempLoc.click_count;\n                            }).reverse();\n                            var groupedHubs = _.groupBy(UI.state[oProps.direction].hubs, 'category');\n                            var aMissingParentHubs = [];\n                            if (groupedHubs['AIRPORT_TERMINAL--ITEM']){\n                                groupedHubs.TERMINALS = _.groupBy(groupedHubs['AIRPORT_TERMINAL--ITEM'], 'parent_hub_id');\n                                _.each(_.keys(groupedHubs.TERMINALS), function (tempKey){\n                                    aMissingParentHubs.push(Number(tempKey));\n                                });\n                                aMissingParentHubs = _.difference(aMissingParentHubs,_.pluck(groupedHubs.AIRPORT,'chaos_hub_id'));\n                            }\n                            if (groupedHubs.AIRPORT) {\n                                labelHtmlTxt = AE.ui.decodeHtml(AEdata.hubLabels.AIRPORT);\n                                var $airHubs = $('<optgroup/>', {\n                                    'label': labelHtmlTxt\n                                });\n                                $df.append($airHubs);\n\n                                $airHubs.attr('label', decodeURI(labelHtmlTxt)); //decodeURI(enc);\n                                _.each(groupedHubs.AIRPORT, function (tempAirHub) {\n                                    if (groupedHubs.TERMINALS && groupedHubs.TERMINALS[tempAirHub.chaos_hub_id]) {\n\n                                        _.each(groupedHubs.TERMINALS[tempAirHub.chaos_hub_id], function (tempTerminal) {\n                                            $airHubs.append($('<option/>', {\n                                                'id': tempTerminal.chaos_hub_id,\n                                                'value': tempTerminal.desk_list,\n                                                'data-opid-list': tempTerminal.operator_id_list,\n                                                'html': tempTerminal.display_label\n                                            }));\n                                        });\n                                    } else {\n                                        $airHubs.append($('<option/>', {\n                                            'id': tempAirHub.chaos_hub_id,\n                                            'value': tempAirHub.desk_list,\n                                            'data-opid-list': tempAirHub.operator_id_list,\n                                            'html': tempAirHub.display_label\n                                        }));\n                                    }\n                                });\n                                if(aMissingParentHubs.length) {\n                                    _.each(aMissingParentHubs, function (tempParentID) {\n                                        _.each(groupedHubs.TERMINALS[tempParentID], function (tempTerminal){\n                                            $airHubs.append($('<option/>', {\n                                                'id': tempTerminal.chaos_hub_id,\n                                                'value': tempTerminal.desk_list,\n                                                'data-opid-list': tempTerminal.operator_id_list,\n                                                'html': tempTerminal.display_label\n                                            }));\n                                        });\n                                    });\n                                }\n                            }\n                            // WEBAE3-4649 There are orphaned terminals and no airport hubs, so we create a home for them\n                            if(aMissingParentHubs.length && !groupedHubs.AIRPORT) {\n                                labelHtmlTxt = AE.ui.decodeHtml(AEdata.hubLabels.AIRPORT);\n                                var $airHubs = $('<optgroup/>', {\n                                    'label': labelHtmlTxt\n                                });\n                                $df.append($airHubs);\n                                _.each(aMissingParentHubs, function (tempParentID) {\n                                    _.each(groupedHubs.TERMINALS[tempParentID], function (tempTerminal) {\n                                        $airHubs.append($('<option/>', {\n                                            'id': tempTerminal.chaos_hub_id,\n                                            'value': tempTerminal.desk_list,\n                                            'data-opid-list': tempTerminal.operator_id_list,\n                                            'html': tempTerminal.display_label\n                                        }));\n                                    });\n                                });\n                            }\n                            if (groupedHubs.RAIL) {\n                                labelHtmlTxt = AE.ui.decodeHtml(AEdata.hubLabels.RAIL);\n                                var $railHubs = $('<optgroup/>', {\n                                    'label': labelHtmlTxt\n                                });\n                                $df.append($railHubs);\n                                _.each(groupedHubs.RAIL, function (tempRailHub) {\n                                    $railHubs.append($('<option/>', {\n                                        'id': tempRailHub.chaos_hub_id,\n                                        'value': tempRailHub.desk_list,\n                                        'data-opid-list': tempRailHub.operator_id_list,\n                                        'html': tempRailHub.display_label\n                                    }));\n                                });\n                            }\n                            if (groupedHubs.FERRY) {\n                                labelHtmlTxt = AE.ui.decodeHtml(AEdata.hubLabels.FERRY);\n                                var $ferryHubs = $('<optgroup/>', {\n                                    'label': labelHtmlTxt\n                                });\n                                $df.append($ferryHubs);\n                                _.each(groupedHubs.FERRY, function (tempFerryHub) {\n                                    $ferryHubs.append($('<option/>', {\n                                        'id': tempFerryHub.chaos_hub_id,\n                                        'value': tempFerryHub.desk_list,\n                                        'data-opid-list': tempFerryHub.operator_id_list,\n                                        'html': tempFerryHub.display_label\n                                    }));\n                                });\n                            }\n                            if (groupedHubs.CITY) {\n                                labelHtmlTxt = AE.ui.decodeHtml(AEdata.hubLabels.CITY);\n                                var $cityHubs = $('<optgroup/>', {\n                                    'label': labelHtmlTxt\n                                });\n                                $df.append($cityHubs);\n                                _.each(groupedHubs.CITY, function (tempCityHub) {\n                                    $cityHubs.append($('<option/>', {\n                                        'id': tempCityHub.chaos_hub_id,\n                                        'value': tempCityHub.desk_list,\n                                        'data-opid-list': tempCityHub.operator_id_list,\n                                        'html': tempCityHub.display_label\n                                    }));\n                                });\n                            }\n                            /*$('#searchcrumbs_'+oProps.baseID+' .searchcrumbs--city').addClass('trg__menusearch--city-x').html(\n                            \t$( document.createDocumentFragment() ).append(\n                            \t\t'&nbsp;',\n                            \t\t$('<i/>',{\n                            \t\t\tclass:'fa fa-angle-double-right'\n                            \t\t}),\n                            \t\t'&nbsp;'+oProps.display_label+'&nbsp;'\n                            \t)\n                            );\n                            AE.heightAdjust('.searchcrumbs_container');*/\n                        } else {\n                            locPrompt = warnNoLocationsVague || '-----';\n                        }\n                        $locSelect.empty().append($('<option/>', {\n                            value: '--',\n                            html: locPrompt\n                        }), $df);\n                        \n                        if (!UI.props.oPrefill[oProps.direction].ran && _.has(AEdata, 'menuPrefill') && _.has(AEdata.menuPrefill, 'LOCLIST') && _.has(AEdata.menuPrefill, 'DOLOCLIST')) {\n                            if (oProps.direction !== 'DO' || UI.props.oPrefill.OW.country || (!UI.props.oPrefill.OW.country && UI.props.oPrefill.OW.city)) {\n                                var compareLocList = (oProps.direction !== 'DO') ? AEdata.menuPrefill.LOCLIST.toString() : AEdata.menuPrefill.DOLOCLIST.toString();\n                                var compareLocId = (oProps.direction !== 'DO') ? AE.ui.search.getStoredSearch().puchaos_hub_id : AE.ui.search.getStoredSearch().dochaos_hub_id;\n                                var optionToSelect = _.filter($locSelect.find('optgroup option'), function (thisOption) {\n                                    var thisLocList = $(thisOption).attr('value');\n                                    var commonLocList = _.intersection(thisLocList.split(','), compareLocList.split(','));\n                                    var thisLocId = (typeof thisOption === 'undefined') ? 0 : thisOption.getAttribute( 'id' );\n                                    \n                                    var matchMaker = false;\n                                    if (thisLocId != 0) {\n                                        matchMaker = (compareLocId == thisLocId) ? true : false ;\n                                    } else {\n                                        matchMaker = (commonLocList.length > 0) ? true : false ;\n                                    }\n                                   \n                                    return matchMaker;\n                                });\n                                if (optionToSelect[0]) {\n                                    $locSelect.val(optionToSelect[0].value);\n                                    $locSelect.change();\n                                }\n                            }\n                        }\n                        UI.props.oPrefill[oProps.direction].ran = true;\n                    }\n                });\n            } else {\n                $locSelect.empty().append($('<option/>', {\n                    value: '--',\n                    html: locPrompt\n                }));\n            }\n        },\n        handleLocMenuSelect: function ($target) {\n            var oProps = UI.menuSearchSelectInit($target);\n            \n            if (oProps.value !== '--' && oProps.value !== '') {\n                var oHub = _.findWhere(UI.state[oProps.direction].hubs, {\n                        chaos_hub_id: Number(oProps.ID)\n                    }),\n                    oValues = {\n                        chaos_hub_id: oHub.chaos_hub_id,\n                        chaos_city_name: oHub.chaos_city_name,\n                        chaos_country_code: oHub.chaos_country_code,\n                        iso_country_code: oHub.chaos_country_code,\n                        desk_list: oHub.desk_list,\n                        hub_name: oHub.title,\n                        loc_type: oHub.category,\n                        display_label: oHub.display_label\n                    };\n                AE.ui.search.setValue({\n                    name: (oProps.direction === 'DO') ? 'dropoff-loc' : 'pickup-loc',\n                    item: {\n                        pu: (oProps.direction === 'DO') ? false : oValues,\n                        drop: (oProps.direction === 'DO') ? oValues : false,\n                        preserveDO: (oProps.direction === 'PU' && !UI.props.oPrefill.PU.ran && UI.props.oPrefill.DO.ran) ? true : false\n                    }\n                });\n            }\n        },\n        handleCountryCrumbClick: function ($target) {\n            // $target.removeClass('trg__menusearch--country-x').empty();\n            var parentID = $target.parent().attr('id');\n            var splitID = parentID.split('_');\n            if (splitID[1]) {\n                var baseID = splitID[1];\n                /*$('#searchcrumbs_'+baseID+' .trg__menusearch--city-x').removeClass('trg__menusearch--city-x').empty();\n                $('#loc_'+baseID).parent('.styled--select').addClass('visuallyhidden');\n                $('#city_'+baseID).parent('.styled--select').addClass('visuallyhidden');\n                $('#country_'+baseID).parent('.styled--select').removeClass('visuallyhidden');*/\n                $('#country_' + baseID).val('--');\n                UI.clearInput(baseID.substring(0, 2), $target);\n            }\n            AE.heightAdjust('.searchcrumbs_container');\n        },\n        handleCityCrumbClick: function ($target) {\n            // $target.removeClass('trg__menusearch--city-x').empty();\n            var parentID = $target.parent().attr('id');\n            var splitID = parentID.split('_');\n            if (splitID[1]) {\n                var baseID = splitID[1];\n                /*$('#loc_'+baseID).parent('.styled--select').addClass('visuallyhidden');\n                $('#city_'+baseID).parent('.styled--select').removeClass('visuallyhidden');*/\n                $('#city_' + baseID).val('--');\n                UI.clearInput(baseID.substring(0, 2), $target);\n            }\n            AE.heightAdjust('.searchcrumbs_container');\n        },\n        clearInput: function (direction, $target) {\n            direction = direction || 'PU';\n            $target = $target || $('.trg__menusearch--country-x,.trg__menusearch--city-x');\n            if (direction !== 'DO') {\n                if(!$target.hasClass('trg__menusearch--loc')) UI.state.operator_id_list = '';\n                UI.state.DO.loc = '';\n                // $target.closest('#locations-wrapper').find('.dropoff-wrapper .trg__menusearch--country-x').click();\n                UI.props.$do.find('.trg__menusearch--loc').val('--');\n            }\n\n            AE.ui.search.setValue((direction !== 'DO') ? {\n                name: 'pickup-loc',\n                item: {\n                    pu: false,\n                    drop: false\n                }\n            } : {\n                name: 'dropoff-loc',\n                item: {\n                    pu: AE.ui.search.getSubmitValues().pu,\n                    drop: false\n                }\n            });\n        },\n        prefill: function () {\n            var $menus = $('#locations-wrapper .menusearch--container');\n            if ($menus[0]) {\n                var puMenu = _.filter($menus, function (tempMenu) {\n                    return $(tempMenu).attr('id').substring(0, 2) === 'PU';\n                });\n                var doMenu = _.filter($menus, function (tempMenu) {\n                    return $(tempMenu).attr('id').substring(0, 2) === 'DO';\n                });\n                var $puMenu = $(puMenu),\n                    $doMenu = $(doMenu);\n                var puBaseID = $puMenu.attr('id'),\n                    doBaseID = $doMenu.attr('id');\n                UI.props.oPrefill.PU.city = searchPuCity || '';\n                UI.props.oPrefill.PU.country = searchPuCountry || '';\n                UI.props.oPrefill.PU.loclist = searchPuLoclist || '';\n                UI.props.oPrefill.DO.city = searchDoCity || '';\n                UI.props.oPrefill.DO.country = searchDoCountry || '';\n                UI.props.oPrefill.DO.loclist = searchDoLoclist || '';\n\n                var TRY_LOCAL_STORAGE = AE.ui.search.useStoredSearch() && !vouchDateTime,\n                    PREFILL_STORAGE_STR = TRY_LOCAL_STORAGE ? localStorage.getItem('aeSearch') : false,\n                    USE_PAGE_PREFILL = ((typeof (searchPuCity) != 'undefined') && searchPuCity != ''),\n                    USE_STORED_SEARCH = (PREFILL_STORAGE_STR != false);\n                if (USE_PAGE_PREFILL) {\n                    USE_STORED_SEARCH = false;\n                    TRY_LOCAL_STORAGE = false;\n                }\n\n                if (TRY_LOCAL_STORAGE) {\n                    UI.props.oPrefill.PU.city = AE.ui.search.getStoredSearch().city || searchPuCity || '',\n                        UI.props.oPrefill.PU.country = AE.ui.search.getStoredSearch().pucode || searchPuCountry || '',\n                        UI.props.oPrefill.PU.loclist = AE.ui.search.getStoredSearch().puloclist || '',\n                        UI.props.oPrefill.DO.city = AE.ui.search.getStoredSearch().cityr || '',\n                        UI.props.oPrefill.DO.country = AE.ui.search.getStoredSearch().docode || '',\n                        UI.props.oPrefill.DO.loclist = AE.ui.search.getStoredSearch().doloclist || '';\n                    if (UI.props.oPrefill.DO.city === null) UI.props.oPrefill.DO.city = UI.props.oPrefill.PU.city;\n                    if (UI.props.oPrefill.DO.country === null) UI.props.oPrefill.DO.country = UI.props.oPrefill.PU.country;\n                    if (UI.props.oPrefill.DO.loclist === null) UI.props.oPrefill.DO.loclist = UI.props.oPrefill.PU.loclist;\n                    AEdata.menuPrefill = AEdata.menuPrefill || {};\n                    AEdata.menuPrefill.LOCLIST = AEdata.menuPrefill.LOCLIST || AE.ui.search.getStoredSearch().puloclist || {};\n                    AEdata.menuPrefill.DOLOCLIST = AEdata.menuPrefill.DOLOCLIST || AE.ui.search.getStoredSearch().doloclist;\n                }\n\n                if (USE_STORED_SEARCH && !USE_PAGE_PREFILL) {\n                    /* Prefills last submitted search criteria. */\n                    var $storeObj = JSON.parse(PREFILL_STORAGE_STR);\n\n                    if (!_.isEmpty($storeObj)) {\n                        UI.props.oPrefill.PU.city = $storeObj.city;\n                        UI.props.oPrefill.PU.country = $storeObj.pucode;\n                        AEdata.menuPrefill.LOCLIST = $storeObj.puloclist;\n\n                        if ($storeObj.cityr == 'null' || $storeObj.docode == 'null') {\n                            UI.props.oPrefill.DO.city = $storeObj.cityr;\n                            UI.props.oPrefill.DO.country = $storeObj.docode;\n                            AEdata.menuPrefill.DOLOCLIST = $storeObj.doloclist;\n                        }\n                    }\n                }\n\n                if (UI.props.oPrefill.DO.country !== '') UI.props.oPrefill.OW.country = (UI.props.oPrefill.DO.country === UI.props.oPrefill.PU.country) ? false : true;\n                if (UI.props.oPrefill.DO.city !== '') {\n                    UI.props.oPrefill.OW.city = (UI.props.oPrefill.DO.city === UI.props.oPrefill.PU.city && UI.props.oPrefill.PU.loclist === UI.props.oPrefill.DO.loclist) ? false : true;\n                }\n                if (UI.props.oPrefill.PU.country === '') UI.props.oPrefill.PU.ran = true;\n                if (UI.props.oPrefill.DO.country === '') UI.props.oPrefill.DO.ran = true;\n                var isOW = (UI.props.oPrefill.OW.country || (!UI.props.oPrefill.OW.country && UI.props.oPrefill.OW.city)) ? true : false;\n\n                if (isOW) UI.checkTheOneWayBox();\n\n                if (($puMenu[0] && TRY_LOCAL_STORAGE) || ($puMenu[0] && !UI.props.oPrefill.PU.ran && $('#country_' + puBaseID).find('option[value=\"' + UI.props.oPrefill.PU.country + '\"]').length)) {\n                    if (UI.props.oPrefill.PU.country !== '') {\n                        $('#country_' + puBaseID).val(UI.props.oPrefill.PU.country);\n                        $('#country_' + puBaseID).change();\n                    } else if (TRY_LOCAL_STORAGE) {\n                        /* Prefills destination page location criteria. */\n\n                        $('#country_' + puBaseID).val(searchPuCountry);\n                        $('#country_' + puBaseID).change();\n\n                        UI.props.oPrefill.PU.city = searchPuCity;\n                        $('#city_' + puBaseID).val(searchPuCity);\n                        $('#city_' + puBaseID).change();\n                    }\n                }\n                if ($doMenu[0] && !UI.props.oPrefill.DO.ran && $('#country_' + doBaseID).find('option[value=\"' + UI.props.oPrefill.DO.country + '\"]').length) {\n                    if (UI.props.oPrefill.DO.country !== '' && isOW) {\n                        $('#country_' + doBaseID).val(UI.props.oPrefill.DO.country);\n                        $('#country_' + doBaseID).change();\n                    }\n                }\n\n            }\n            \n            /* if stored menu selections aren't present in this menu, set to default */\n            if ($('#country_' + puBaseID).val() === null) {\n                $('#country_' + puBaseID).val('--');\n                $('#country_' + puBaseID).change();\n                UI.props.oPrefill.PU.city = '--';\n            }\n        },\n        checkTheOneWayBox: function () {\n            if (!AE.ui.search.autocomplete.getInputs().$chkDiff.prop('checked')) AE.ui.search.autocomplete.getInputs().$chkDiff.click();\n        },\n        resetInput: function (inputChanged,direction,baseID) {\n            /* WEBAE3-4265 set inputs to 1st item when parent input changes\n            to prevent unintended form submits while waiting on XHR data to\n            come back \n            inputChanged = country or city\n            direction = PU or DO \n            baseID = used to target select IDs*/\n            //only reset city on country change\n            if (inputChanged === 'country') {\n                $('#city_' + baseID).prop(\"selectedIndex\", 0).find(\"option:not(:first)\").remove();\n            }\n            //loc gets cleared on city or country change\n            $('#loc_' + baseID).prop(\"selectedIndex\", 0).find(\"option:not(:first)\").remove();\n            //if loc options get cleared, remove optgroup labels\n            $('#loc_' + baseID).children().remove(\"optgroup\");\n        },\n        onBodyClick: function (event, $target) {\n            //WEBAE3-4646------------------------------------------ \n           /*the last error message needs to be adjusted for optimal hieght position depending on how many characters there are which chnages the height of the div which also will change depending on the screen width*/\n            var flagHeight= $(\".ui-warn-flag\").height();\n            var flagTop= $(\".ui-warn-flag\").css(\"top\");\n\n            //console.log(flagHeight);\n           // console.log(flagTop);\n            if (flagHeight>20 ){\n               // console.log(\"move it up >20\");\n                $(\".ui-warn-flag\").addClass(\"custHt\");\n                $(\".ui-warn-flag\").removeClass(\"custHtb\"); \n                $(\".ui-warn-flag\").removeClass(\"custHtc\");\n                $(\".ui-warn-flag\").removeClass(\"custHtd\");\n            }\n            if (flagHeight>40 ){\n               // console.log(\"move it up >40\");\n                $(\".ui-warn-flag\").removeClass(\"custHt\");\n                $(\".ui-warn-flag\").removeClass(\"custHtc\");\n                $(\".ui-warn-flag\").removeClass(\"custHtd\");\n                $(\".ui-warn-flag\").addClass(\"custHtb\");\n            }\n            if (flagHeight>50){\n              //  console.log(\"move it up >50\");\n                $(\".ui-warn-flag\").removeClass(\"custHt\");\n                $(\".ui-warn-flag\").removeClass(\"custHtb\");\n                $(\".ui-warn-flag\").removeClass(\"custHtd\");\n                $(\".ui-warn-flag\").addClass(\"custHtc\");\n            }\n            if (flagHeight>60){\n              //  console.log(\"move it up >50\");\n                $(\".ui-warn-flag\").removeClass(\"custHt\");\n                $(\".ui-warn-flag\").removeClass(\"custHtb\");\n                $(\".ui-warn-flag\").removeClass(\"custHtc\");\n                $(\".ui-warn-flag\").addClass(\"custHtd\");\n            }if(flagHeight< 20 ){\n              // console.log(\"leave it alone\");\n                $(\".ui-warn-flag\").removeClass(\"custHtb\");\n                $(\".ui-warn-flag\").removeClass(\"custHt\");\n                $(\".ui-warn-flag\").removeClass(\"custHtc\");\n                $(\".ui-warn-flag\").removeClass(\"custHtd\");\n            }\n       \n\n            if ($target.attr('name') === 'btn-submit') {\n                var $puMenu = $('#locations-wrapper [name=\"pickup-wrapper\"] .menusearch--container');\n                var $doMenu = $('#locations-wrapper [name=\"dropoff-wrapper\"] .menusearch--container');\n\n  //------------------------------------------    \n        \n\n                /*\n                                if (UI.state.PU.country === '' || UI.state.PU.country === '--') {\n                                    $puMenu.find('.trg__menusearch--country').parent('.styled--select').addClass('ui-state-invalid');\n                                }\n                                if (UI.state.PU.city === '' || UI.state.PU.city === '--') {\n                                    $puMenu.find('.trg__menusearch--city').parent('.styled--select').addClass('ui-state-invalid');\n                                }\n                                if (UI.state.PU.loc === '' || UI.state.PU.loc === '--') {\n                                    $puMenu.find('.trg__menusearch--loc').parent('.styled--select').addClass('ui-state-invalid');\n                                }\n                                if (UI.state.OW.country || UI.state.OW.city) {\n                                    if (UI.state.DO.country === '' || UI.state.DO.country === '--') {\n                                        $doMenu.find('.trg__menusearch--country').parent('.styled--select').addClass('ui-state-invalid');\n                                    }\n                                    if (UI.state.DO.city === '' || UI.state.DO.city === '--') {\n                                        $doMenu.find('.trg__menusearch--city').parent('.styled--select').addClass('ui-state-invalid');\n                                    }\n                                    if (UI.state.DO.loc === '' || UI.state.DO.loc === '--') {\n                                        $doMenu.find('.trg__menusearch--loc').parent('.styled--select').addClass('ui-state-invalid');\n                                    }\n                                }\n                */\n            }\n            /*if($target.hasClass('trg__menusearch--country-x')) UI.handleCountryCrumbClick($target);\n            if($target.hasClass('trg__menusearch--city-x')) UI.handleCityCrumbClick($target);\n            if(UI.props.inModify && $target.data('togglee') && $target.data('togglee') === '#toggleeNewSearch'){\n            \tAE.heightAdjust('.searchcrumbs_container');\n            }*/\n\n        },\n        onBodyChange: function (event, $target) {\n\n\n\n\n\n\n            if (event.target.tagName.toUpperCase() === 'SELECT') {\n//console.log(\"select\");\n\n                //4646\n\n                if($target.data('direction') === 'do'){\n\n                    if($('.ui-warn-flag-close-btn')[0]) $('.ui-warn-flag-close-btn').click();\n                    \n                }\n\n\n//4646-----\n/*              if($target.val() !== '--'){\n\n\n}*/\n                    if($target.val() == '--'){\n//console.log(\"blank\");\n\n\n                    }\n\n                    //--------\n                if ($target.hasClass('trg__menusearch--country')) {\n                   UI.handleCountryMenuSelect($target);\n                }\n                if ($target.hasClass('trg__menusearch--loc')) {\n                    UI.handleLocMenuSelect($target);\n                }\n                // }\n                if ($target.hasClass('trg__menusearch--city')) {\n                    UI.handleCityMenuSelect($target);\n                }\n            }\n            if (!UI.state.synchingChkDiff && $target.hasClass('chk-diff-linked')) {\n                UI.state.synchingChkDiff = true;\n                var thisState = $target.prop('checked');\n                UI.props.$chkDiffs.prop('checked', thisState);\n                UI.props.$chkDiffs.not($target).change();\n                UI.state.synchingChkDiff = false;\n                if ($target.prop('checked')) {\n                    UI.props.$do.removeClass('visuallyhidden');\n                } else {\n                    UI.props.$do.addClass('visuallyhidden');\n                    UI.clearInput('DO');\n                    UI.props.$do.find('.trg__menusearch--loc').val('--');\n                }\n\n            }\n        }\n    };\n    return UI;\n})();\n\n;\nvar AE = AE || {};\n\nAE.ui.searchType.leasesearch = AE.ui.searchType.leasesearch || ( function () {\n\t/*\n\tDEPENDENCIES: AE, AE.ui, AE.ui.search\n\t*/\n\tvar UI = {\n\t\tinit: function () {\n\t\t\tUI.props = {\n\t\t\t\t$ltrpu: $( 'select#ltrpu.lease__select' ),\n\t\t\t\t$ltrdo: $( 'select#ltrdo.lease__select' ),\n\t\t\t\t$chkDiff: $( 'input[id*=\"chk-diff\"]' ),\n\t\t\t\tdolock: false\n\t\t\t};\n\t\t\t// if(UI.props.$ltrpu.val() !== UI.props.$ltrdo.val()) UI.props.dolock = false;\n\t\t\tif ( ( UI.props.$ltrpu.val() === '' ) && ( UI.props.$ltrpu.val() !== UI.props.$ltrdo.val() ) ) UI.props.dolock = false;\n\t\t\tif ( UI.props.$ltrpu.val() !== '' ) UI.props.dolock = false;\n\n\t\t\tif ( AE.ui.search.useStoredSearch() && !_.isEmpty( AE.ui.search.getStoredSearch() ) ) {\n\t\t\t\tvar oStoredSearch = AE.ui.search.getStoredSearch();\n\t\t\t\tif ( oStoredSearch.excl_ltr ) {\n\t\t\t\t\tif ( oStoredSearch.pu ) UI.props.$ltrpu.val( (oStoredSearch.pu.hasOwnProperty('desk_list'))? oStoredSearch.pu.desk_list : '');\n\t\t\t\t\tif ( oStoredSearch.drop ) {\n\t\t\t\t\t\tUI.props.dolock = false;\n\t\t\t\t\t\tUI.props.$ltrdo.val( (oStoredSearch.drop.hasOwnProperty('desk_list'))? oStoredSearch.drop.desk_list : '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// UI.props.$chkDiff.prop('checked',!UI.props.dolock);\n\t\t\tUI.setValue( 'pu' );\n\t\t\tUI.setValue( 'do' );\n\t\t\t// UI.props.$chkDiff.on('click',function(){UI.lockDropoff();});\n\t\t\tUI.props.$ltrpu.on( 'change', function () {\n\t\t\t\tUI.setValue( 'pu' );\n\t\t\t\t// Set Drop off to Match Pickup on pickup selection\n\t\t\t\tUI.props.$ltrdo.val( UI.props.$ltrpu.val() );\n\t\t\t\tUI.setValue( 'do' );\n\t\t\t});\n\t\t\tUI.props.$ltrdo.on( 'change', function () {\n\t\t\t\tUI.setValue( 'do' );\n\t\t\t\t// UI.lockDropoff();\n\t\t\t});\n\t\t\t// Turn off Disabling Drop off so lease search will always work (patch)\n\t\t\t//UI.props.$ltrdo.on( 'change', function () { UI.setValue( 'do' ); } ).prop( 'disabled', UI.props.dolock );\n\n\t\t\t\t// Palm only Task\n\t\t\t\t// AE.addTransitionTask({\n\t\t\t\t// \tfunc:function() {\n\t\t\t\t\t\t// Handle different drop off checkbox on mobile if PU neq DO\n\t\t\t\t\t\tif( (UI.props.$ltrdo.val() != UI.props.$ltrpu.val()) && !UI.props.$chkDiff.is(':checked') ){\n\t\t\t\t\t\t\tUI.props.$chkDiff.trigger('click');\n\t\t\t\t\t\t}\n\t\t\t\t// \t}\n\t\t\t\t// });\n\t\t},\n\t\tsetValue: function ( direction ) {\n\t\t\tvar _direction = direction || 'pu';\n\t\t\tvar $selectedLoc, _doDisplayLabel, _puDisplayLabel;\n\n\t\t\tif ( _direction == 'do' ) { // && !UI.props.dolock\n\t\t\t\t$selectedLoc = UI.props.$ltrdo.find( 'option[value=\"' + UI.props.$ltrdo.val() + '\"]' );\n\t\t\t\tvar selData = $selectedLoc.data();\n\t\t\t\tvar validSelect = ($selectedLoc.hasOwnProperty('text'))? true : false;\n\t\t\t\tif(!_.isEmpty(selData)){\n\t\t\t\t\tif(!validSelect) validSelect = (_.has(selData,'city'))? true : false;\n\t\t\t\t} else {\n\t\t\t\t\tvalidSelect = false;\n\t\t\t\t}\n\t\t\t\tif(validSelect){\n\t\t\t\t\t_doDisplayLabel = ($selectedLoc.hasOwnProperty('text'))? $selectedLoc.text : selData.city;//( UI.props.$ltrdo.val() != '' ) ? AE.props.oSearch.TXT_ALL_LOCATIONS.replace('[CITY]', UI.props.$ltrdo.val().replace('PGT','').trim()): null;\n\t\t\t\t\tAE.ui.search.setValue( {\n\t\t\t\t\t\tname: 'dropoff-loc',\n\t\t\t\t\t\titem: {\n\t\t\t\t\t\t\tpu: false,\n\t\t\t\t\t\t\tdrop: {\n\t\t\t\t\t\t\t\tchaos_city_name: $selectedLoc.data().city,\n\t\t\t\t\t\t\t\tchaos_country_code: $selectedLoc.data().country,\n\t\t\t\t\t\t\t\tiso_country_code: $selectedLoc.data().isocode,\n\t\t\t\t\t\t\t\tdesk_list: UI.props.$ltrdo.val(),//( UI.props.$ltrdo.val() != '' ) ? 'allDowntown' : null,\n\t\t\t\t\t\t\t\thub_name: $selectedLoc.text,\n\t\t\t\t\t\t\t\tdisplay_label:  _doDisplayLabel\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t} else if ( _direction == 'pu' ) {\n\t\t\t\t$selectedLoc = UI.props.$ltrpu.find( 'option[value=\"' + UI.props.$ltrpu.val() + '\"]' );\n\t\t\t\tvar selData = $selectedLoc.data();\n\t\t\t\tvar validSelect = ($selectedLoc.hasOwnProperty('text'))? true : false;\n\t\t\t\tif(!_.isEmpty(selData)){\n\t\t\t\t\tif(!validSelect) validSelect = (_.has(selData,'city'))? true : false;\n\t\t\t\t} else {\n\t\t\t\t\tvalidSelect = false;\n\t\t\t\t}\n\t\t\t\tif(validSelect){\n\t\t\t\t\t_puDisplayLabel  = ($selectedLoc.hasOwnProperty('text'))? $selectedLoc.text : selData.city;//( UI.props.$ltrpu.val() != '' ) ? AE.props.oSearch.TXT_ALL_LOCATIONS.replace('[CITY]', UI.props.$ltrpu.val().replace('PGT','').trim()): null;\n\t\t\t\t\tAE.ui.search.setValue( {\n\t\t\t\t\t\tname: 'pickup-loc',\n\t\t\t\t\t\titem: {\n\t\t\t\t\t\t\tdrop: false,\n\t\t\t\t\t\t\tpu: {\n\t\t\t\t\t\t\t\tchaos_city_name: $selectedLoc.data().city,\n\t\t\t\t\t\t\t\tchaos_country_code: $selectedLoc.data().country,\n\t\t\t\t\t\t\t\tiso_country_code: $selectedLoc.data().isocode,\n\t\t\t\t\t\t\t\tdesk_list: UI.props.$ltrpu.val(),//( UI.props.$ltrpu.val() != '' ) ? 'allDowntown' : null,\n\t\t\t\t\t\t\t\thub_name: $selectedLoc.text,\n\t\t\t\t\t\t\t\tdisplay_label:   _puDisplayLabel\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\n\t\t\t}\n\t\t},\n\t\tlockDropoff: function () {\n\t\t\tUI.props.dolock = !UI.props.dolock;\n\t\t\tUI.props.$ltrdo.prop( 'disabled', UI.props.dolock );\n\t\t\tif ( !UI.props.dolock ) {\n\t\t\t\tAE.ga.gaArrayProcess( [ { GACATEGORY: 'carSearch', GAACTION: 'oneWaySelect' } ] );\n\t\t\t\tAE.ui.props.$locationsWrapper.addClass( 'both' );\n\t\t\t} else {\n\t\t\t\tAE.ui.props.$locationsWrapper.removeClass( 'both' );\n\t\t\t\tUI.setValue( 'pu' );\n\t\t\t}\n\t\t}\n\t};\n\treturn UI;\n} )();\n\n;var AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\nAE.ui.searchType.bmr = AE.ui.searchType.bmr || (function () {\n    'use strict';\n\n    /*\n    DEPENDENCIES: AE, AE.ui, AE.ui.search, AE.ui.searchType\n    */\n    var oBMR = {\n        cfc: '/plugins/ae3/lib/bookmyride.cfc',\n        agency: 'eu',\n        locale: 'en',\n        url: 'autoeurope-motorhome.com',\n        conversion: 'AUTOEUROPE',\n        campaign: 0\n    };\n    var ajaxInitRan = false, puPrefillRan = false, doPrefillRan = false, oDOlocs = {};\n\n    var UI = {\n        init: function () {\n            UI.props = {\n                oPrefill: { pickUpCountry: '--', pickUpCity: '--', dropOffCountry: '--', dropOffCity: '--' },\n                synchingChkDiff: false,\n                $do: $('.bmr__item--do'),\n                $chkDiffs: $('input.chk-diff-linked'),\n                $dfd: $.Deferred(),\n                isAUNZ: AE.props.isAUNZ\n            };\n            UI.props.$chkDiffs.prop('checked', false);\n\n            oBMR.conversion = AE.props.affiliate;\n            oBMR.campaign = AE.props.campaign;\n            if(!ajaxInitRan){\n                ajaxInitRan = true;\n                // AJAX to update oBMR from bookmyride.cfc\n                $.ajax({\n                    url: oBMR.cfc,dataType: 'json',\n                    data: {method: 'getProps'},\n                    success: function (data){\n                        _.extendOwn(oBMR,data);\n                    }\n                });\n\n                // AJAX to get countries from BMR and build dropdown\n                $.ajax({\n                    url: oBMR.cfc,dataType: 'json',\n                    data: {method: 'getCountries'},\n                    success: function (data){\n                        var o$Regions = {};\n                        _.each(data,function(thisCountry){\n                            if(thisCountry.region){\n                                if(!o$Regions[thisCountry.region.code]){\n                                    o$Regions[thisCountry.region.code] = $('<optgroup/>',{\n                                        label:thisCountry.region.text,class:thisCountry.region.code\n                                    });\n                                }\n                                o$Regions[thisCountry.region.code].append(\n                                    $('<option/>',{\n                                        value:(thisCountry.code === false)? 'NO' : thisCountry.slug,\n                                        html: thisCountry.text\n                                    })\n                                );\n                            }\n                        });\n                        //VM\n                        //WEBAE3-5374\n                        \n                        if (AE.props.isAUNZ == true) {\n                            _.each('OCE,NAM,SAM,EUR,ASA,SAF'.split(','),function(regKey){\n                                $('select.trg__bmrsearch--country').append(o$Regions[regKey]);\n                            });\n                        }\n                        else {\n                        _.each('NAM,SAM,EUR,OCE,ASA,SAF'.split(','),function(regKey){\n                            $('select.trg__bmrsearch--country').append(o$Regions[regKey]);\n                        });\n                    }\n\n                        if(AE.ui.search.useStoredSearch()){\n                            var oPrefill = localStorage.getItem('aeBMRsearch');\n                            if( oPrefill !== null && _.isString(oPrefill) && oPrefill != ''){\n                                UI.props.oPrefill = JSON.parse(oPrefill);\n                                $('select.trg__bmrsearch--country').val(UI.props.oPrefill.pickUpCountry);\n                            }\n                        } else {\n                            puPrefillRan = true;\n                            doPrefillRan = true;\n                        }\n                        $('select.trg__bmrsearch--country').change();\n                    }\n                });\n            }\n            AE.ui.addBodyChangeTask({ func: UI.onBodyChange });\n\n            if(UI.props.isAUNZ){\n                $('input#chk-age').hide();\n                $('label[for=\"chk-age\"]').click().hide();\n                $('input[name=\"txt-age\"]').addClass('flush').prop('required',true).attr('max',1000);\n                $('#bmr__aunz--age').removeClass('visuallyhidden');\n                $('input[name=\"txt-age\"]').show();\n                $('#bmr__aunz--age').show();               \n                // if(AE.ui.search.getmemberage() && AE.ui.search.getmemberage() != ''){\n                //     $('input[name=\"txt-age\"]').val(AE.ui.search.getmemberage());\n                // } \n                // else if(UI.props.oPrefill.driverAge){\n                //     $('input[name=\"txt-age\"]').val(UI.props.oPrefill.driverAge);\n\n                // }       \n            }\n\n\n        },\n        getSubmitTarget: function() {\n            return 'https://'+oBMR.url+'/quotes';\n        },\n        getSubmitValues: function (oSearch) {\n            // tgt = \"1\";// WEABE3-2259 Don't open a new window\n            oSearch = oSearch || AE.ui.search.getSubmitValues();\n            var oSubmit = {locale: oBMR.locale, agency: oBMR.agency};\n            oSubmit.conversion = oBMR.conversion;\n            oSubmit.campaign = oBMR.campaign;\n            oSubmit.pickUpDate = oSearch.puCal;\n            oSubmit.dropOffDate = oSearch.doCal;\n            if(oSite.bIsDapTpDomain) {\n                oSubmit.agencyCode = oSite.affiliateIATA;\n            }\n           \n            var rawAge = $('input[name=txt-age]').val();\n            if(!$('#chk-age').prop('checked') || (UI.props.isAUNZ && rawAge !== '')){\n                oSubmit.driverAge = rawAge;\n            }\n            oSubmit.passengers = $('#bmr__passengers').val();\n            oSubmit.pickUpCountry = $('#bmr__country').val();\n            oSubmit.pickUpCity = $('#bmr__city').val();\n            _.extend(oSubmit,UI.getDOValues(oSubmit.pickUpCountry,oSubmit.pickUpCity));\n            _.extend(oSubmit,UI.getAUNZValues());\n\n            if(AE.ui.search.useStoredSearch()){\n                localStorage.setItem('aeBMRsearch',JSON.stringify(oSubmit));\n            }\n\n            return oSubmit;\n        },\n        getCheckValues: function (oSearch) {\n            oSearch = oSearch || AE.ui.search.getSubmitValues();\n            var oCheckParams = UI.getSubmitValues(oSearch);\n            oCheckParams.method = 'checkResults';\n            var oAjax = {\n                url: oBMR.cfc,\n                dataType: 'json',\n                data: oCheckParams,\n                success: function (data){\n                    // console.log(data);\n                }\n            };\n            return oAjax;\n        },\n        handleCountryMenuSelect: function ($target) {\n            $.ajax({\n                url: oBMR.cfc,\n                dataType: 'json',\n                data: {\n                    method: 'getCities',\n                    code: $target.val()\n                },\n                success: function (data) {\n                    var $promptOptionPU = $('#city-0-0').detach(), $promptOptionDO = $('#cityr-0-0').detach();\n                    $('#bmr__city,#bmr__cityr').empty();\n                    _.each(data,function(thisCity){\n                        $('#bmr__city').append($('<option/>',{value:thisCity.slug,html:thisCity.text}));\n                    });\n                    var puPrefill = '--', doPrefill = '--';\n                    if(!puPrefillRan && AE.ui.search.useStoredSearch()){\n                        puPrefill = UI.props.oPrefill.pickUpCity;\n                        doPrefill = UI.props.oPrefill.dropOffCity || '--';\n                        puPrefillRan = true;\n                    }\n                    $('#bmr__cityr').prepend($promptOptionDO);\n                    $('#bmr__city').prepend($promptOptionPU).val(puPrefill).change();\n                    if(puPrefill !== '--' && doPrefill !== '--' && puPrefill !== doPrefill){\n                        UI.props.$chkDiffs.prop('checked', true);\n                        UI.props.$chkDiffs.change();\n                    }\n                }\n            });\n        },\n        handlePickupSelect: function ($target) {\n            if($target.val() !== '--' && $target.val() !== ''){\n            $.ajax({\n                url: oBMR.cfc,\n                dataType: 'json',\n                data: {\n                    method: 'getDropoffCities',\n                    puCity: $target.val()\n                },\n                success: function (data) {\n                    var $promptOptionDOcountry = $('#countryr-0-0').detach(),\n                        $promptOptionDOcity = $('#cityr-0-0').detach();\n                    $('#bmr__cityr,#bmr__countryr').empty();\n                    oDOlocs = {};\n                    _.each(data,function(thisCity){\n                        if(!oDOlocs.hasOwnProperty(thisCity.country.slug)){\n                            oDOlocs[thisCity.country.slug] = {\n                                value:thisCity.country.slug, html:thisCity.country.text, aLocs:[]\n                            };\n                        }\n                        oDOlocs[thisCity.country.slug].aLocs.push({value:thisCity.slug,html:thisCity.text});\n                    });\n                    var aDOlocs = _.sortBy(_.keys(oDOlocs),function(kLoc){return oDOlocs[kLoc].html;});\n                    _.each(aDOlocs,function(thisCountryKey){\n                        var thisCountry = oDOlocs[thisCountryKey];\n                        $('#bmr__countryr').append($('<option/>',{value:thisCountry.value,html:thisCountry.html}));\n                    });\n                    var doPrefill = '--',doPrefillCountry = '--';\n                    if(!doPrefillRan && AE.ui.search.useStoredSearch()){\n                        if(oDOlocs.hasOwnProperty(UI.props.oPrefill.dropOffCountry)){\n                            doPrefillCountry = UI.props.oPrefill.dropOffCountry;\n                        } else if(oDOlocs.hasOwnProperty(UI.props.oPrefill.pickUpCountry)) {\n                            doPrefillCountry = UI.props.oPrefill.pickUpCountry;\n                        } else {\n                            doPrefillRan = true;\n                        }\n\n                        if(!doPrefillRan && UI.props.oPrefill.dropOffCity !== UI.props.oPrefill.pickUpCity){\n                            var aDOcityCheck = _.find(oDOlocs[doPrefillCountry].aLocs, \n                                function(thisLoc){ return thisLoc.value === UI.props.oPrefill.dropOffCity;}\n                            );\n                            if(!_.isObject(aDOcityCheck)){\n                                doPrefillRan = true;\n                                doPrefillCountry = '--';\n                            }\n                        } else {\n                            doPrefillCountry = '--';\n                        }\n                    }\n                    $('#bmr__cityr').prepend($promptOptionDOcity).val(doPrefill).change();\n                    $('#bmr__countryr').prepend($promptOptionDOcountry).val(doPrefillCountry).change();\n                }\n            });\n            }\n        },\n        handleDropoffCountrySelect: function ($target) {\n            if(oDOlocs.hasOwnProperty($target.val())){\n                var doPrefill = '--', useStoredSearch = AE.ui.search.useStoredSearch(),\n                    $promptOptionDOcity = $('#cityr-0-0').detach();\n                    $('#bmr__cityr').empty();\n                _.each(oDOlocs[$target.val()].aLocs,function(thisCity){\n                    $('#bmr__cityr').append($('<option/>',{\n                        value:thisCity.value,html:thisCity.html\n                    }));\n                    if(!doPrefillRan && useStoredSearch && thisCity.value === UI.props.oPrefill.dropOffCity){\n                        doPrefill = UI.props.oPrefill.dropOffCity;\n                        doPrefillRan = true;\n                    }\n                });\n                $('#bmr__cityr').prepend($promptOptionDOcity).val(doPrefill).change();\n            }\n        },\n        getDOValues: function (puCountry,puCity) {\n            var oDO={}, city = $('#bmr__cityr').val(), country = $('#bmr__countryr').val();\n            if(city !== '--' && city !== '') oDO.dropOffCity = city;\n            if(country !== '--' && country !== '' && puCountry !== city) oDO.dropOffCountry = country;\n            return oDO;\n        },\n        getAUNZValues: function () {\n            var oAUS={};\n            if(UI.props.isAUNZ){\n                var lic = $('#bmr__lic').val();\n                if(lic && lic !== ''){\n                    oAUS.domestic = lic;\n                }\n            }\n            return oAUS;\n        },\n        handleSubmit: function (oSearch) {\n            oSearch = oSearch || AE.ui.search.getSubmitValues();\n            var oCheckParams = UI.getSubmitValues(oSearch);\n            oCheckParams.method = 'checkResults';\n            UI.props.$dfd = $.Deferred();\n            UI.props.$dfd.done(function(){\n                AE.ui.search.setValue({name:'txt-age',resetAge:true});\n                $(\"form#ae-search button[name='btn-submit']\")\n                    .removeClass('ui--btn-submit-wait')\n                    .attr({'disabled': false})\n                    .find('.ui--loading-results').remove();\n            });\n            $.ajax({\n                url: oBMR.cfc,\n                dataType: 'json',\n                data: oCheckParams,\n                success: function (data){\n                    UI.props.$dfd.resolve();\n                    if(data.ST){\n                        return AE.ui.search.postToForm(\n                            UI.getSubmitTarget(), \n                            UI.getSubmitValues(oSearch), \n                            'get'\n                        );\n                    } else {\n                        AE.ui.dialog.launch({\n                            titleBar:true,\n                            id:\"noResultWarning\",\n                            // dialogClass: 'top-dialog',\n                            content: AE.ui.searchType.bmr.buildNoResultMarkup(data.HD,data.MSG,data.META),\n                            applyUI: true,\n                            width: ($(window).width() > 600) ? 500 : '70%'\n                        });\n                        \n                        return false;\n                    }\n                },\n                failure: function (){\n                    UI.props.$dfd.resolve();\n                    return false;\n                }\n            });\n        },\n        buildNoResultMarkup: function (HD,MSG,META) {\n            HD = HD || '';\n            MSG = MSG || '';\n            var docFrag = $(document.createDocumentFragment());\n            docFrag.append($(document.createElement('h3')).append(HD));\n            docFrag.append($(document.createElement('div')).append(MSG));\n            if(META && !AE.props.isLiveServer) docFrag.append($(document.createElement('h4')).append(META));\n            return docFrag;\n        },\n        onBodyChange: function (event, $target) {\n            if (event.target.tagName.toUpperCase() === 'SELECT') {\n                if ($target.hasClass('trg__bmrsearch--country')) {\n                    UI.handleCountryMenuSelect($target);\n                }\n                if ($target.hasClass('trg__bmrsearch--city')) {\n                    UI.handlePickupSelect($target);\n                }\n                if ($target.hasClass('trg__bmrsearch--countryr')) {\n                    UI.handleDropoffCountrySelect($target);\n                }\n            }\n            if (!UI.props.synchingChkDiff && $target.hasClass('chk-diff-linked')) {\n                UI.props.synchingChkDiff = true;\n                var thisState = $target.prop('checked');\n                UI.props.$chkDiffs.prop('checked', thisState);\n                UI.props.$chkDiffs.not($target).change();\n                UI.props.synchingChkDiff = false;\n                if ($target.prop('checked')) {\n                    UI.props.$do.removeClass('visuallyhidden');\n                } else {\n                    UI.props.$do.addClass('visuallyhidden');\n                    $('#bmr__cityr,#bmr__countryr').val('--');\n                }\n\n            }\n        }\n    };\n    return UI;\n})();\n\n;\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\nAE.ui.devices = AE.ui.devices || ( function () {\n\t/***\n\tDEPENDENCIES: AE, AE.ui\n\t***/\n\t'use strict';\n\n\tvar UI = {\n\t\tinit: function () {\n\n\t\t\tvar $fn_getInputs = AE.ui.search.autocomplete.getInputs();\n\t\t\tvar $puLoc = $fn_getInputs.$puLoc;\n\t\t\tvar $doLoc = $fn_getInputs.$doLoc;\n\t\t\tvar $chkDiff = $fn_getInputs.$chkDiff;\n\n\t\t\t\tUI.props = {\n\t\t\t\t\t\t\tsoftKeyboardActive: false,\n\t\t\t\t\t\t\tnavigatorUA: navigator.userAgent,\n\t\t\t\t\t\t\tviewport: document.querySelector( \"meta[name=viewport]\" ),\n\t\t\t\t\t\t\ttoggleKeyboardElem: $( '<menu/>', { class: 'ui-toggle-keyboard', type: 'toolbar' } ),\n\t\t\t\t\t\t\tmodElement: $( 'html' ),\n\t\t\t\t\t\t\tmodClass: 'ui-soft-kb-active',\n\t\t\t\t\t\t\t$puLoc : $fn_getInputs.$puLoc,\n\t\t\t\t\t\t\t$doLoc : $fn_getInputs.$doLoc,\n\t\t\t\t\t\t\t$chkDiff : $fn_getInputs.$chkDiff\n\t\t\t\t};\n\t\t\t\tUI.features = {};\n\t\t\t\tUI.elements = {};\n\n\t\t\t\tif( AE.props.siteCode !== 'FCR' ) {\n\t\t\t\t\tUI.mainSearch();\n\t\t\t\t/*!\n\t\t\t\t\t* IE10 viewport hack for Surface/desktop Windows 8 bug\n\t\t\t\t\t* Copyright 2014-2017 The Bootstrap Authors\n\t\t\t\t\t* Copyright 2014-2017 Twitter, Inc.\n\t\t\t\t\t* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n\t\t\t\t\t*/\n\t\t\t\t\t(function (d) {\n\t\t\t\t\tif (UI.props.navigatorUA.match(/IEMobile\\/10\\.0/)) {\n\t\t\t\t\t\tvar msViewportStyle = d.createElement('style');\n\t\t\t\t\t\tmsViewportStyle.appendChild( d.createTextNode('@-ms-viewport{width:auto!important}') );\n\t\t\t\t\t\td.head.appendChild(msViewportStyle);\n\t\t\t\t\t}\n\t\t\t\t\t/* Set border-top to <2px to workaround WEBAE3-4182\n\t\t\t\t\t* This will cause jquery-ui _hasScroll() to return false to jquery-ui _scrollIntoView()\n\t\t\t\t\t* avoiding an uncaught exception inside the latter where the passed element is empty. \n\t\t\t\t\t*/\n\t\t\t\t\tif (UI.props.navigatorUA.match(/Chrome\\/9[\\d]\\.[\\d]+\\.[\\d]+\\.[\\d]+ Mobile/)) {\n\t\t\t\t\t\tvar fractionalScrollHeightStyle = d.createElement('style');\n\t\t\t\t\t\tfractionalScrollHeightStyle.appendChild( d.createTextNode('#ui-id-99{border-top-width:1.999px!important}') );\n\t\t\t\t\t\td.head.appendChild(fractionalScrollHeightStyle);\n\t\t\t\t\t}\n\t\t\t\t\t})(document);\n\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t},\n\t\t\n\t\tmainSearch: function () {\n\t\t\tthis._isOpen = false;\n\t\t\t// console.log( UI.props.navigatorUA );\n\t\t\t// if(_.contains(UI.props.navigatorUA.split(' '),'Android') ) UI.props.modClass += ' ui-sticky-menu-android-offset';\n\t\t},\n\t\tonShow: function ( input ) {\n\t\t\t\n\t\t\tthis._isOpen = true;\n\n\t\t\tvar _offsetT = input.offset().top;\n\t\t\tvar inputId = input.attr( 'id' );\n\t\t\tvar $widget = input.data( 'customTextsearch' );\n\t\t\tvar $button = $widget.targetActionButton;\n\t\t\tvar $scrollToInput = document.getElementById( inputId );\n\t\t\tvar $input = $widget.element;\n\t\t\tvar $overlay = $( '<div/>', { class: 'ui-mobile-overlay' } );\n\n\t\t\t// console.log( $widget.status );\n\n\n\t\t\tfunction touchM( event ) {\n\t\t\t\t\tvar $target = $( event.target );\n\n\t\t\t\t\tif ( $target.hasClass( 'ui-mobile-overlay' ) || $target.is( '[class*=ui-textsearch]' ) ) {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( '.' + UI.props.modClass ).each(function(ind, item){\n\t\t\t\t\treturn item.addEventListener( 'touchmove', touchM, {passive:true, capture:true});\n\t\t\t});\n\n\t\t\treturn setTimeout( function () {\n\n\t\t\t\t$scrollToInput.scrollIntoView( { behavior: 'instant', block: 'start', inline: 'start' } );\n\n\t\t\t\tif ( !$overlay.is( ':visible' ) ) {\n\t\t\t\t\t\t$overlay.insertAfter( $button ).addClass( 'fade-in' );\n\n\t\t\t\t\t\t$overlay.on( 'click', function ( event ) {\n\t\t\t\t\t\t\t\t\t$overlay.addClass('ui-state-active').off( 'click' );\n\t\t\t\t\t\t\t\t\treturn AE.ui.devices._hide( $input );\n\t\t\t\t\t\t} )\n\t\t\t\t}\n\n\t\t\t\tvar scrolledY = window.scrollY;\n\t\t\t\t// if ( scrolledY ) window.scrollTo( 0, scrolledY - _offsetT );\n\t\t\t\tif ( scrolledY ) window.scrollTo( 0, 1 );\n\n\t\t\t\t// $input.trigger('customFocus');\n\t\t\t\t// $input.attr({autofocus:\"autofocus\"});\n\n\t\t\t}, 200 );\n\t\t},\n\t\tonHide: function ( event, ui ) {\n\t\t\tvar _openMenu = $( '[data-open=true]' )\n\t\t\t_openMenu.addClass( 'fs-menu' );\n\n\t\t\tthis._isOpen = false;\n\n\t\t\t$( '.' + UI.props.modClass ).each( function ( ind, item ) {\n\t\t\t\t\treturn item.removeEventListener( 'touchmove', touchM, { passive: true } );\n\t\t\t} );\n\n\t\t\treturn $( '.ui-mobile-overlay' ).animate( { opacity: 0 }, 'fast', function () {\n\t\t\t\t\tUI.props.modElement.find( '.ui-mobile-overlay' ).remove();\n\t\t\t\t\treturn false;\n\t\t\t} );\n\t\t},\n\t\t_show: function ( input ) {\n\t\t\tvar $input = input;\n\t\t\tvar _direction = $input.data( 'direction' );\n\t\t\tvar _addClass = ( _direction == 'pu' ) ? 'ui-pu-input-focus' : 'ui-do-input-focus';\n\t\t\tvar _removeClass = ( _direction == 'pu' ) ? 'ui-do-input-focus' : 'ui-pu-input-focus';\n\n\t\t\tswitch(_direction){\n\t\t\t\t\t\tcase 'pu':\n\t\t\t\t\t\t\t\tUI.props.$doLoc.textsearch().trigger('textsearchdisable');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'do':\n\t\t\t\t\t\t\t\tUI.props.$puLoc.textsearch().trigger('textsearchdisable');\n\t\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tUI.props.softKeyboardActive = true;\n\t\t\tUI.props.modElement.addClass( UI.props.modClass + ' ' + _addClass ).removeClass( _removeClass );\n\n\t\t\t\n\t\t\treturn !this._isOpen ? UI.onShow( $input ) : false;\n\n\t\t},\n\t\t_hide: function ( input ) {\n\t\t\tvar $input = input;\n\t\t\tvar _direction = $input.data( 'direction' );\n\t\t\tvar _removeClass = 'ui-pu-input-focus ui-do-input-focus';\n\n\t\t\tUI.props.softKeyboardActive = false;\n\t\t\tUI.props.modElement.removeClass( UI.props.modClass + ' ' + _removeClass );\n\n\t\t\tswitch(_direction){\n\t\t\t\t\t\tcase 'pu':\n\t\t\t\t\t\t\t\tUI.props.$doLoc.textsearch().trigger('textsearchenable');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'do':\n\t\t\t\t\t\t\t\tUI.props.$puLoc.textsearch().trigger('textsearchenable');\n\t\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$input.trigger('textsearchclose');\n\n\t\t\treturn UI.onHide( input );\n\t\t},\n\t\t_hideDeviceKeyboard: function () {\n\t\t\t/***\n\t\t\t\t* For mobile UI, once textsearch becomes a selectable menu - as opposed to textsearch.\n\t\t\t\t* We can force the 'select' to 100% vh and suppress the keyboard.\n\t\t\t\t***/\n\t\t\t$( 'input' ).blur();\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn UI;\n\t\n} )();\n\n;\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\nAE.ui.carousel = AE.ui.carousel || (function() {\n    'use strict';\n    /*\n    DEPENDENCIES: AE, AE.ui, mura, looper.js\n\n    Although this module is always present, it doesn't run unless there's a carousel on the page. If we do have a carousel,\n    then we still don't want to run it until after the global deferred object is resolved by the main AE object. For this\n    reason, the init function will be run by the display object which loads it rather than by AE.init.\n    /*\n\n\n    /*\n    Full Looper.js Docs: http://rygine.com/projects/looper.js/docs/\n    EXAMPLE LOOPER MARKUP -- classes and data attributesneed to be in markup before .looper() can be called\n    \tTRANSITIONS: slide {up, down}, xfade\n    \tINTERVAL: integer amount of milliseconds between automatic transition. FALSE for no autoplay\n    \t<div class=\"carousel_container looper {transition}\" data-looper=\"go\" data-interval=\"{interval}\" id=\"{carouselID}\">\n    \t\t<div class=\"looper-inner\">\n    \t\t\t<div class=\"item\">{...content...}</div>\n    \t\t\t{...more items...}\n    \t\t</div>\n    \t\t<nav><!-- OPTIONAL -->\n    \t        <a class=\"looper-control\" data-looper=\"prev\" href=\"#{carouselID}\">\n    \t            <i class=\"fa fa-2x fa-chevron-left\"></i>\n    \t        </a>\n    \t        <a class=\"looper-control right\" data-looper=\"next\" href=\"#{carouselID}\">\n    \t            <i class=\"fa fa-2x fa-chevron-right\"></i>\n    \t        </a>\n    \t         <ul class=\"looper-nav\">\n    \t\t\t\t<li><a href=\"#{carouselID}\" data-looper=\"to\" data-args=\"1\">{Nav Trigger, e.g. &bull; for bullet entity}</a></li>\n    \t        \t{... more bullets ...}\n    \t        </ul>\n    \t    </nav>\n    \t</div>\n    */\n    var UI = {\n        loaded: false,\n        init: function() {\n            //if(!UI.loaded){\n            //\tif(mura){\n            //\t\tmura.loader()\n            //\t\t\t.loadcss(siteThemeAssetPath+'/assets/looper/src/looper.css',{media:\"all\"})\n            //\t\t\t.loadjs(siteThemeAssetPath+'/assets/looper/src/looper.min.js');\n            //\t\tUI.loaded=true;\n            //\t}\n            $('.looper-control.right').attr({ name: 'next', 'aria-label': 'next' });\n            $('.looper-control').not('.right').addClass('visuallyhidden').attr({ name: 'prev', 'aria-label': 'prev' });\n            AE.ui.addBodyClickTask({ func: UI.onBodyClick });\n            //AE.addResizeTask({func:function(){UI.manageResize();},args:[]});\n            //}\n            if(typeof(initSurveyResize) !== 'undefined') AE.ui.carousel.surveyResize.init();\n            if(AEdata && AEdata.hasOwnProperty('ui')){\n                if(AEdata.ui.hasOwnProperty('surveySpinnerOn')){\n                    $('body').on('shown',function(event){\n                        $('.carousel_cloak').removeClass('carousel_cloak');\n                        if(AEdata.ui.surveySpinnerOn){\n                            $('.review_spinner').remove();\n                            AEdata.ui.surveySpinnerOn = false;\n                        }\n                    });\n                }\n            }\n        },\n        onBodyClick: function(event, $target) {\n            if ($target.hasClass('looper-control')) {\n                var looperSelector = $target[0].href.substring($target[0].href.indexOf('#')),\n                    $thisLooper = $(looperSelector),\n                    $looperControls = $thisLooper.find('.looper-control'),\n                    $looperItems = $thisLooper.find('.looper-inner .item');\n                $looperControls.removeClass('visuallyhidden');\n                if ($looperItems.first().hasClass('prev go') || $looperItems.first().hasClass('next go')) $looperControls.not('.right').addClass('visuallyhidden');\n                if ($looperItems.last().hasClass('prev go') || $looperItems.last().hasClass('next go')) $looperControls.filter('.right').addClass('visuallyhidden');\n            }\n        },\n        manageResize: function() {\n            var viewType = AE.getSiteViewType();\n            $('.looper-control').removeClass('visuallyhidden').not('.right').addClass('visuallyhidden');\n            // Normalize all carousel item, Carousel container, and USP container heights\n            $('#autoratingbar.grid>.grid__item').attr(\"style\", \"overflow:inherit;\"); // remove overflow initial setting\n            if (viewType !== \"palm\") {\n                AE.heightAdjust($('.carousel_container>.looper-inner>.item,#autoratingbar.grid>.grid__item').not('.noHeightAdjust'));\n            } else {\n                AE.heightAdjust($('.carousel_container>.looper-inner>.item').not('.noHeightAdjust'));\n                $('#autoratingbar.grid>.grid__item').height('auto');\n            }\n        }\n    }\n\n\n\n    return UI;\n})();\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\nAE.ui.carousel.surveyResize = AE.ui.carousel.surveyResize || (function() {\n    /*\n    DEPENDENCIES: Any other modules that this one will call.\n    AE.displayObjects:\n    \tThis module assumes that the AE object has already been loaded and initialized.\n    \tThe reviews displayObject is added after the page has finished loading, so it\n    \tdoesn't get kicked off with the rest of the framework.\n    */\n    var UI = {\n        init: function() {\n            UI.props = {\n                maxSlides: 1, // Maximum number of slides to show\n                arrSlides: [], // Array to recieve the detached slides\n                $slideContainer: $('#autoratingbar .carousel_container .carousel__slides-container'), // Where the slides will be taken in and out of\n                $carousel: $('#autoratingbar .looper') // The actual carousel object that we can run carousel library methods on\n            };\n            UI.draw();\n            UI.positionReadMoreLink();\n            AE.addResizeTask({ func: function() { UI.manageResize(); }, args: [] });\n        },\n        computeMaxSlides: function(viewType) {\n            viewType = viewType || \"palm\";\n            var maxSlides = 1;\n            if (viewType === \"desk\" || viewType === \"desk-wide\") {\n                maxSlides = ($('.reviewCarousel__USP')[0]) ? 2 : 4;\n            }\n            return maxSlides;\n        },\n        draw: function() {\n            UI.props.maxSlides = UI.computeMaxSlides(AE.getSiteViewType());\n            if (!UI.props.arrSlides[0]) UI.props.arrSlides = UI.props.$slideContainer.find('.carousel__slide').detach();\n            UI.props.$slideContainer.empty();\n            var gridItemClass = (UI.props.maxSlides === 2) ? 'one-half' : 'one-quarter';\n            var $df = $(document.createDocumentFragment());\n            for (var slidx = 0; slidx < UI.props.arrSlides.length; slidx++) {\n                var $carouselItem = $(document.createElement('div')).addClass('item');\n                if (UI.props.maxSlides === 1) {\n                    $carouselItem.append(UI.props.arrSlides[slidx]);\n                } else {\n                    var $tr = $(document.createElement('tr'));\n                    var $table = $(document.createElement('table')).addClass('flush').append($tr);\n                    $carouselItem.append($table);\n\n                    for (var tdx = 0; tdx < UI.props.maxSlides; tdx++) {\n                        if (slidx + tdx < UI.props.arrSlides.length) {\n                            $tr.append($(document.createElement('td')).addClass(gridItemClass + ' hard').append(UI.props.arrSlides[slidx + tdx]));\n                        }\n                    }\n                    slidx += (UI.props.maxSlides - 1);\n                }\n                $df.append($carouselItem);\n            }\n            UI.props.$slideContainer.append($df);\n            // Bumped up to a second since loading was happening to fast Deferred was not working can refactor later\n            setTimeout(function() {\n                AE.ui.carousel.manageResize();\n                UI.props.$carousel.find('.item').first().addClass('active');\n            }, 1000);\n\n        },\n        positionReadMoreLink: function() {\n            var $rmLink = $('#autoratingfulllink');\n            $rmLink.parent().css({ position: 'relative' });\n            $rmLink.css({ position: 'absolute', width: '100%', left: '-14px', bottom: '14px' });\n            if (AE.getSiteViewType() !== \"palm\" && AE.getSiteViewType() !== \"lap\") $rmLink.css('bottom', '0px');\n        },\n        manageResize: function() {\n            UI.draw();\n            UI.positionReadMoreLink();\n        }\n    }\n    return UI;\n})();\n\n;\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\nAE.ui.carousel.surveySort = AE.ui.carousel.surveySort || (function() {\n    // AE.displayObjects.surveySort = (function() {\n    /*\n    DEPENDENCIES: Any other modules that this one will call.\n    AE.displayObjects:\n    \tThis module assumes that the AE object has already been loaded and initialized.\n    \tThe reviews displayObject is added after the page has finished loading, so it\n    \tdoesn't get kicked off with the rest of the framework.\n    */\n    var UI = {\n        init: function() {\n\n\n\n            UI.props = {\n                $select: $('select[name=\"surveySort\"]'),\n                $contents: $('#reviewPagesCarousel').find('.carousel__slides-container'),\n                $carousel: $('#reviewPagesCarousel'), // The actual carousel object that we can run carousel library methods on\n                arrReviews: [],\n                perPage: 20\n            };\n\n            $('.review_spinner').remove();\n\n            /* Do various things that happen once upon init. */\n            UI.props.$select.on(\"change\", function() {\n                if (!UI.props.arrReviews[0]) UI.props.arrReviews = UI.props.$contents.find('.carousel__slide').detach();\n\n                var selValue = $(this).val(),\n                    options = {};\n\n                switch (selValue) {\n                    case 'lo':\n                        options = { prop: \"score\", asc: true }\n                        break;\n                    case 'hi':\n                        options = { prop: \"score\", asc: false }\n                        break;\n                    case 'old':\n                        options = { prop: \"created\", asc: true }\n                        break;\n                    default: // new\n                        options = { prop: \"created\", asc: false }\n                }\n                // console.log(UI.split( UI.sort( UI.props.arrReviews, options.prop, options.asc ) ) );\n\n                UI.draw(UI.split(UI.sort(UI.props.arrReviews, options.prop, options.asc)));\n            });\n            UI.props.$carousel.find('.item').first().addClass('active');\n        },\n        sort: function(arrReviews, key, ascending) {\n            var arrSorted = [];\n            if (key === \"score\") { // Display Each score value from most recent to least recent\n                var oScores = _.groupBy(arrReviews, function(review) { return review.dataset.score });\n                for (var score = 0; score <= 5; score++) {\n                    if (oScores[score] && oScores[score][0]) { // Skip score values with no reivews associated with them\n                        oScores[score] = _.sortBy(oScores[score], function(review) { return review.dataset.created });\n                        if (ascending) { // Because whole array will be reversed for 'lowest score', reverse the group arrays so the end display will still show the most recent review at each score value, while the score values are displayed in ascending order\n                            oScores[score].reverse();\n                        }\n                    }\n                }\n                arrSorted = _.union(oScores[0], oScores[1], oScores[2], oScores[3], oScores[4], oScores[5]);\n            } else {\n                arrSorted = _.sortBy(arrReviews, function(review) { return review.dataset[key] });\n            }\n\n            if (!ascending) { // 'Oldest' or 'Lowsest Score' Reviews\n                arrSorted.reverse();\n            }\n\n            return arrSorted;\n        },\n        split: function(arrReviews, key) {\n            /*\n            This function splits a given array into pages of a length determined in the props above. The \"perPage\" property\n            is used as a marker for starting a new page.\n            */\n            var arrPages = [], // This will be a two-dimensional array, since each page within it will also be an array.\n                arrSet = []; // This is an individual page. We don't want to confuse \"arrPages\" with \"arrPage\".\n\n            // First we transform the data. Then we built the document fragment.\n            for (var i = 0; i < arrReviews.length; i++) {\n                // If we're ready for a new page, reset the page array.\n                if (i % UI.props.perPage === 0) {\n                    // Don't add an empty page on the first time through.\n                    if (arrSet.length > 0) {\n                        // If sorting by score,\n\n                        // Add this page to the pages array.\n                        arrPages.push(arrSet);\n                    }\n                    // Reset the page array.\n                    arrSet = [];\n                }\n                // Add this item to the current page array.\n                arrSet.push(arrReviews[i]);\n            };\n            // Add the set to the pages array.\n            arrPages.push(arrSet);\n\n            return arrPages;\n        },\n        draw: function(arrPages) {\n\n            /*\n            The carousel pages already exist in the markup. We'll loop through them and replace their\n            contents with new contents which are sorted according to the select input. The arrPages\n            array is built to match the carousel content, so we can use the \"index\" variable to grab\n            the appropriate item within the array.\n            */\n            UI.props.$contents.each(function(index) {\n                $(this).append(fillPage(arrPages[index]));\n            });\n            UI.props.$carousel.find('.item').first().addClass('active');\n\n            /*\n            This is run on an individual carousel slide container. The array passed in is used to\n            build each review, which is then added to a document fragment. The end result is returned\n            as a document fragment.\n            */\n            function fillPage(arrSet) {\n                var $docFragment = $(document.createDocumentFragment());\n                for (var i = 0; i < arrSet.length; i++) {\n                    $docFragment.append(arrSet[i]);\n                };\n                return $docFragment;\n            }\n            return;\n        }\n    }\n    return UI;\n})();\n;\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\n/*\nThe AE.ui object will be the returned result of a self-invoked function. This allows us to expose methods\nfor use by other modules while protecting some variables in a closure. If the AE.ui object is already\ndefined then it's not altered. This prevents us from running the entire function each time one of its\ninternal methods are called.\n\n========================================================================\nLAUNCHING A NEW DIALOG:\nDialogs are called with a method in this module, which then runs some internal functions. The launch method\nis used to create a new one, and it closes normally according to jQuery UI docs. It takes an options object as\nits only argument, which will override and/or add to a standardized internal object.\n\n\nDIALOG OPTIONS:\nThe \"options\" object argument will override and/or add to the internal settings object. We're adding a few extra\nproperties for our internal use.\n\n\nselector:\t\tThis selector string will be fed to jQuery first. It will be used to see if there's a prepared\n\t\t\t\tcontainer for the dialog in the DOM somewhere. If nothing is found, then an element will be\n\t\t\t\tdynamically created to launch the dialog.\n\nid:\t\t\t\tIf this string is provided, then it will be assined to the dialog's id attribute. If there's no\n\t\t\t\tselector then a hashtag will be added to this and jQuery will search the DOM for any existing\n\t\t\t\tmarkup. If nothing is found, then a new element is created as describec above. If both the selector\n\t\t\t\tand the id are provided, then the selector will be used to search the dom and the id will be\n\t\t\t\tassigned to the new dialog.\n\ntitleBar:\t\tBoolean, defaults to true. If passed in as false, then CSS will be used to hide the dialog's\n\t\t\t\ttitle bar. It does this by adding a class to the dialogClass property. This class is appended,\n\t\t\t\tso it's okay to pass in a dialogClass with our own classes if needed.\n\napplyUI:\t\tBoolean, defaults to false. If passed in as true, then UI functions in AE.ui will be applied\n\t\t\t\tto the dialog content. Date pickers, Accordions, and Tabs.\n\ncontent:\t\tThis property is a document fragment which is appended to the dialog's content container.\n\t\t\t\tIf no content property is set, then the dialog will be launched with a spinner.\n\n\t\t\t\tNOTE: jQuery UI will put a source div back when the dialog closes, but this module does not.\n\t\t\t\tInstead, a clone of the content is used so that the original remains in the markukp. Don't\n\t\t\t\tuse this with an existing bit of content that has an id, or that id will appear twice in the\n\t\t\t\tDOM. If the content has an id, then just pass in the id with no selector.\n\ntype:\t\t\tThis property allows us to use a specific settings object. This allows us to call an infoTip\n\t\t\t\tdialog instead of a regular one. Almost all dialogs will be standard, so no type needs to be\n\t\t\t\tdeclared. If we need another type later, then we can add it in later.\n\npos:\t\t\tAn object which will be fed to the dialog internally. It uses jQuery UI's position method to\n\t\t\t\tcorrect the position of a dialog which needs to be placed somewhere other than the center. One\n\t\t\t\texample of this is the matrix infoTips. Here are the docs and an example object:\n\t\t\t\thttps://jqueryui.com/position/\n\t\t\t\t{ my: \"left+10 top\", at: \"right top\", of: '.my-selector'}\n\nautoupdate:\t\tA boolean which defaults to true, and allows dialogs to be corrected for position upon resize.\n\t\t\t\tIf it's passed in as false, then we'll need to run the dialog module's update method manually.\n\t\t\t\tThis is currently used for the matrix, which is destroyed and redrawn upon resize. You can pass\n\t\t\t\tan object into jQuery UI's position method, but that reference gets lost when the element is\n\t\t\t\tremoved. If a selector string is passed in, then it will be used to search for the element every\n\t\t\t\ttime. This allows us to wait until after the matrix is redrawn before manually updating to the\n\t\t\t\telement we need.\n\n\nEXAMPLES OF USE:\n\nA regular dialog called with some content:\nAE.ui.dialog.launch(\"#save-quote\", { content:myDocumentFragment } );\n\n\nA dialog with dynamic content which will arive after an ajax call:\nAE.ui.dialog.launchDialog(\"#save-quote\");]\n\n\tAnd here's the line we use when the content is built:\n\tAE.ui.dialog.addContent( myDocumentFragment );\n\n\nThis is a more complex example, used for matrix infoTips. Since the autoupdate is turned off, we need to run\nthe initial update manually.\n\n\tAE.ui.dialog.launch({\n\t\tid:'my-new-id',\n\t\ttype:'infoTip',\n\t\tautoupdate: false,\n\t\tpos: { my: \"left+5 top\", at: \"right top\", of: mySelectorString },\n\t\tcontent: myDocumentFragment\n\t});\n\tAE.ui.dialog.update(true);\n\n========================================================================\n\n\n\n*/\nAE.ui.dialog = AE.ui.dialog || (function() {\n    /*\n    DEPENDENCIES: AE, AE.ui\n    */\n    var UI = {\n        dialogHandlers: [], // Delegated Tasks Triggered On Dialog Trigger Click\n        init: function() {\n\n            /* Establish the props object only upon init. No need to do the work if the module isn't being called. */\n            UI.props = {\n                $currentDialog: null, // This will be the instance of the jQuery UI dialog, not the markup.\n                positionTarget: null,\n                lastBodyY: 0, // Last position of the body before a touchmove scroll.\n                size: '80%',\n                overClick: true, // Whether an overlay click closes a dialog. Turned off by special buttons, turned back on when a dialog closes.\n                maxSize: '850px',\n                allTabWidth: 0, // The terms dialog sometimes wraps the tabs, so we're going to set them to full width when that happens.\n                $autoDialogs: $('.trg__dialog--Auto'),\n                dialogTriggered: false\n            };\n            //UI.addDialogHandler({func:function(event){UI.markupDialog(event);}});\n            //UI.handle(UI.props.$autoDialogs.first());// Only Launch One Dialog on Page Load\n            AE.ui.addBodyClickTask({ func: UI.onBodyClick });\n\n            AE.addResizeTask({\n                func: function() {\n                    UI.manageResize();\n                },\n                args: []\n            });\n            AE.addScrollTask({\n                func: function() {\n                        UI.manageScroll();\n                    } //,\n                    //args:[]\n            });\n\n\n            /*\n            This options object contains the settings for the two types of dialogs that we're using. We're not\n            extending anything yet because we want to preserve readability until we finish converting everything.\n            Other types of dialogs should have their settings added here.\n            */\n            UI.options = {\n                infoTip: {\n                    type: 'infoTip',\n                    titleBar: false,\n                    applyUI: true,\n                    dialogClass: \"\",\n                    typeClass: \"info-tip\",\n                    draggable: true,\n                    resizable: false,\n                    minHeight: 'auto',\n                    modal: true,\n                    //appendTo: \"#dialog-content\",\n                    autoupdate: true,\n                    // collision: \"fit\",\n                    // using: null\n                },\n                standard: {\n                    type: 'standard',\n                    titleBar: true,\n                    applyUI: false,\n                    dialogClass: \"\",\n                    draggable: false,\n                    resizable: false,\n                    width: ($(window).width() > 900) ? 850 : '80%',\n                    modal: true,\n                    //appendTo: \"#dialog-content\",\n                    autoupdate: true,\n                    // collision: \"flip\",\n                    // using: null\n                }\n            };\n            if(AE.props.siteCode == 'FCR') {\n                UI.options = {\n                    infoTip: {\n                        type: 'infoTip',\n                        titleBar: false,\n                        applyUI: true,\n                        dialogClass: \"\",\n                        typeClass: \"info-tip\",\n                        draggable: true,\n                        resizable: false,\n                        minHeight: 'auto',\n                        modal: true,\n                        //appendTo: \"#dialog-content\",\n                        autoupdate: true,\n                        // collision: \"fit\",\n                        // using: null\n                    },\n                    standard: {\n                        type: 'standard',\n                        titleBar: true,\n                        applyUI: false,\n                        dialogClass: \"\",\n                        draggable: false,\n                        resizable: false,\n                        width: ($(window).width() > 900) ? 850 : '80%',\n                        modal: true,\n                        //appendTo: \"#dialog-content\",\n                        autoupdate: true,\n                        //collision: \"flip\",\n                        // using: null\n                        //WEBAE3-4197 - the hide effect below was preventing the dropbox dialog from displaying after the one way fee dialog was accepted.\n                        //hide: {effect: \"fadeOut\", duration: 250},\n                        show: {effect: \"fadeIn\", duration: 250}\n                    }\n                };\n            };\n            UI.addListeners();\n        },\n        addListeners: function(settings) {\n\n            $('body')\n                .on({\n                    dialogopen: function(event, ui) {\n\n                        var evtTarget = event.target || null;\n                        var targetDialog;\n\n                        if (evtTarget && $(evtTarget).parent().hasClass('io-observable')) {\n                            targetDialog = $(evtTarget).parent('[role=dialog].io-observable');\n                        }\n\n\n                        // Sometimes on refresh, a dialog which opens automatically might launch before the\n                        // browser gets around to recovering the user's scroll position. Since scrolling is\n                        // killed by a class when the dialog opens, the user can't scroll up to see it. To\n                        // counter this bug, we're going to run an update upon open. If a dialog is updated\n                        // manually, then we'll need to make this correction manually.\n                        $('.ui-dialog-content').css('height', $('.ui-dialog-content').height() + 1);\n                        UI.update();\n                        UI.manageTabWidth();\n\n\n\n                    },\n                    dialogclose: function(event, ui) {\n\n                        var evtTarget = event.target || null;\n                        var targetDialog;\n                        var ariaLabel = $(evtTarget).parent('div').attr('aria-describedby');\n\n                        if (evtTarget && $(evtTarget).parent().hasClass('io-observable')) {\n                            targetDialog = $(evtTarget).parent('[role=dialog].io-observable');\n                        }\n\n                        //for member create account only - on close scroll to top\n                        if(ariaLabel == 'duplicateWarning'){\n                          $(AE.ui.props.scrollContainer).animate({\n                            scrollTop: 0\n                             }, 50);\n                        }\n            \n                        UI.cleanup(event, ui);\n                    }\n                }, '.ui-dialog');\n            /*.on({\n            \ttouchstart: function(event) {\n            \t\t// If there's a dialog, record the current body scroll position.\n            \t\tif ( UI.props.$currentDialog ) {\n            \t\t\tUI.props.lastBodyY = AE.props.$bodyElement.scrollTop();\n            \t\t}\n            \t},\n            \ttouchmove: function(event) {\n            \t\tif ( UI.props.$currentDialog ) {\n            \t\t\t// We have a dialog, so check to see if we should move.\n            \t\t\tif ( !$(event.target).closest('.ui-dialog')[0] ) {\n            \t\t\t\t// Scrolling outside of the dialog, so don't move the body.\n            \t\t\t\tevent.preventDefault();\n            \t\t\t\treturn false;\n            \t\t\t}\n            \t\t}\n            \t},\n            \ttouchend: function(event) {\n            \t\tif ( UI.props.$currentDialog ) {\n            \t\t\t// If there's a dialog, compare the new body scroll position with the last saved\n            \t\t\t// position. If it's less, then reset it. This is being done because iOS will let\n            \t\t\t// the user scroll down when a dialog is already at the top, changing body position.\n            \t\t\t// After this happens, we put the scroll position back.\n            \t\t\tif ( AE.props.$bodyElement.scrollTop() !== UI.props.lastBodyY ) {\n            \t\t\t\tAE.props.$bodyElement.scrollTop(UI.props.lastBodyY)\n            \t\t\t}\n            \t\t}\n            \t}\n            });*/\n        },\n        setPos: function(settings) {\n\n            // This function sets the \"positionTarget\" property to an object which works with jQuery UI's\n            // position() method. This seems to be a modification to the position() method in regular old\n            // jQuery. It takes one object as an argument with the properties that jQuery UI expects.\n            // The docs are here: https://jqueryui.com/position/\n            //\n            // Here's an example of the argument object:\n            //\n            // { my:'left top', at:'right top', of: $('.something') }\n            //\n            // And here's an example of calling the method:\n            // $( \".ui-dialog\" ).position(UI.getPos());\n            //\n            // Just in case you need it, this returns the resulting object.\n\n            if(AE.props.siteCode === 'FCR'){\n                //settings.my = 'left-75 top';\n                settings.my = 'center top';\n                settings.at = 'left bottom+5';\n            }\n\n            UI.props.positionTarget = {\n                my: settings.my,\n                at: settings.at,\n                of: settings.of,\n                collision: settings.collision || 'fit fit'\n            };\n    \n            return UI.props.positionTarget;\n        },\n        getPos: function() {\n\n            // This function returns the object created by setPos(). It's used during a window resize or an\n            // orientation change, to reposition any dialog which is currently open. Here's an example of use:\n            // var obj = AE.ui.dialog.setPos( { my: \"left+10 top\", at: \"right top\", of: $('.matrix__category--info.trg__more-info') } );\n            // $( \".ui-dialog\" ).position( obj );\n            return UI.props.positionTarget;\n        },\n        setDialogTriggered: function() {\n            //WEBAE3-5800 Call this function to set dialog as triggered before it launches, preventing the exit email dialog from displaying\n            UI.props.dialogTriggered = true;\n        },\n        isDialogTriggered: function() {\n            return UI.props.dialogTriggered;\n        },\n        update: function(isManual) {\n\n            if (!UI.props.$currentDialog) { return };\n\n            UI.props.$currentDialog.uiDialog.uniqueId();\n\n            var siteViewType = AE.getSiteViewType(),\n                isManual = isManual || false;\n\n            // If there's an open dialog.\n            if (UI.props.$currentDialog.options.autoupdate === true || isManual === true) {\n                // Max height will be important no matter what size we're at.\n                var winHeight = $(window).height();\n                var maxHeight = winHeight - 60;\n\n                var dialogHeight = UI.props.$currentDialog.uiDialog.outerHeight();\n                dialogHeight = (dialogHeight > maxHeight) ? maxHeight : dialogHeight;\n\n                $(\".ui-dialog\").css({\n                    'max-height': maxHeight + 'px'\n                });\n\n                $(\".ui-dialog-content\").css({\n                    'height': 'auto'\n                });\n\n                // Choose the appropriate update function.\n                if ($(\".ui-dialog\").hasClass('info-tip')) {\n                    updateInfoTip();\n                } else {\n                    updateStandard();\n                }\n                // Check for content overflow.\n                UI.handleOverflow();\n            }\n\n            function updateStandard() {\n\n                var winHeight = $(window).height();\n                var maxHeight = winHeight - 60;\n\n                var dialogHeight = UI.props.$currentDialog.uiDialog.outerHeight();\n                dialogHeight = (dialogHeight > maxHeight) ? maxHeight : dialogHeight;\n\n                var dClass = UI.props.$currentDialog.options.dialogClass;\n\n                // terms and search again are placed at top of window, all others center on screen\n                var dialogPos = (UI.props.$currentDialog.options.dialogClass.search('top-dialog') !== -1) ? 'center top+40' : 'center center-' + dialogHeight / 2 + '';\n\n                if(AE.props.siteCode == 'FCR') {\n                    $( \".ui-accordion\" ).accordion({ \n                        animate: { easing: 'easeInOutSine', duration: 100}, \n                    });\n                }\n\n                // Update a regular dialog that's currently open.\n                if ($(window).width() < 900 && siteViewType !== 'palm') {\n                    $(\".ui-dialog\")\n                        .removeClass('dialog-full')\n                        .width('90%')\n                        .position({\n                            my: 'center top',\n                            at: dialogPos,\n                            of: $(window)\n                        });\n\n\n                } else if (siteViewType !== 'palm') {\n                    var thisWidth = (900 <= UI.props.$currentDialog.options.width+10)? '90%' : UI.props.$currentDialog.options.width;\n                    $(\".ui-dialog\")\n                        .removeClass('dialog-full')\n                        .width(thisWidth)\n                        .position({\n                            my: 'center top',\n                            at: dialogPos,\n                            of: $(window)\n                        });\n\n                } else {\n                    // ====== OTHER DIALOGS: PALM ======\n                    $(\".ui-dialog\")\n                        .addClass('dialog-full')\n                        .width('auto')\n                        .position({\n                            my: 'center top',\n                            at: 'center top+30',\n                            of: $(window)\n                        });\n                }\n\n\n                /*\n                There's an iOS bug which kills scrolling on an element if the height content is dynamically added. Fortunately,\n                subsequent adjustments seem to correct the problem. Although it seems like an extraneous bit of work, the\n                following lines will change the appropriate container and reset scrolling. I considered using the CSS solution\n                from the link below, but it doesn't work for us in this situation. We need to be sure.\n                http://patrickmuff.ch/blog/2014/10/01/how-we-fixed-the-webkit-overflow-scrolling-touch-bug-on-ios/\n                */\n                //$('.ui-dialog-content').height( ($('.ui-dialog-content').height()-1)+'px');\n                //$('.ui-dialog-content').height( ($('.ui-dialog-content').height()+1)+'px');\n            }\n\n            function updateInfoTip() {\n\n                // Update the currently open dialog, if it's an info tip.\n                if ($(\".info-tip\")[0]) {\n                    if (siteViewType !== 'palm') {\n                        $(\".info-tip\").removeClass('info-tip-full').position(UI.getPos());\n                        //UI.allowBodyScroll();\n                    } else {\n                        // ====== INFO TIPS: PALM ======\n                        $(\".ui-dialog-titlebar-close\").hide()\n                        $(\".info-tip\")\n                            .addClass('info-tip-full')\n                            .position({\n                                my: 'center top',\n                                at: 'center top+30',\n                                of: $(window)\n                            });\n                        //UI.stopBodyScroll();\n                    }\n                }\n            }\n        },\n        launch: function(options) {\n            if (UI.props.$currentDialog) { return };\n            var $dialog = [], // This will hold our general dialog reference.\n                inline = true, // Did we use an inline HTML element or did we pass in a document fragment for content?\n                settings = {}, // Creating a new settings object to hold our final local settings.\n                scrollTxt = AE.props.oLang.TXT_SCROLL_DOWN; // Language element for scroll down text structure added in html_head\n            // Close any existing dialog.\n            UI.close();\n\n            if (options.type) {\n                // If there's a type, then add the options passed in to the object of that type.\n                settings = $.extend(true, settings, AE.ui.dialog.options[options.type], options);\n            } else {\n                // Otherwise, use the standard object.\n                settings = $.extend(true, settings, AE.ui.dialog.options.standard, options);\n            }\n\n\n            // If needed, set the module's position reference so we can reposition the dialog on resize.\n            if (settings.pos) {\n                UI.setPos(settings.pos);\n            }\n\n            // If  typeClass is defined, then add it to the dialog class string.\n            settings.dialogClass = (settings.typeClass) ? (settings.dialogClass + ' ' + settings.typeClass) : settings.dialogClass;\n\n            // If  titleBar is false, then add the no-title class to hide the title bar and close button.\n            settings.dialogClass = (settings.titleBar) ? settings.dialogClass : (settings.dialogClass + ' mod-title');\n\n\n            // ========================================================================================================\n            // Check to see if there really is an element with the id that was passed in. If there's nothing in the\n            // jQuery object's array, then there's no inline element and we'll need to make a new element dynamically.\n\n            // If there's no selector but there is an id, use the id to find the inline div.\n            if (!settings.selector && settings.id) { $dialog = $('#' + settings.id); }\n\n            // If there is a selector, that takes precedence, so look for that in the DOM.\n            else if (settings.selector) { $dialog = $(settings.selector) }\n\n            // Set the id if there isn't one.\n            settings.id = settings.id || 'current-dialog';\n\n\n\n            if (settings.type !== 'infoTip') {\n                // This is not an info tip, so we need to stop scrolling for desktop and mobile devices.\n                //UI.stopBodyScroll();\n            }\n\n            if (!$dialog[0]) {\n                // Nothing was found in the DOM, so we need to make a div dynamically. If we need a specific id for this, then\n                // one needs to be passed in. Otherwise, a default id is assigned.\n                inline = false;\n\n                $dialog = $($(document.createElement('div')))\n                    .attr('id', settings.id)\n                    .append($(document.createElement('div'))\n                        .append($(document.createElement('div'))\n                            .append(scrollTxt)).addClass('scrollable'));\n\n                \n\n            }\n\n            //$('#dialog-content').addClass('open');\n\n            // Dynamic or inline, we now have our dialog. Launch a dialog with our completed settings object.\n            $dialog.dialog(settings);\n\n\n            // Set our module property to the instance of our new dialog. This allows us to run methods directly and access more\n            // of the goodies. We can get the content from the resulting object's properties, or we can still run code on $('.ui-dialog')\n            // if we want to mess with stuff in the content area.\n            UI.props.$currentDialog = $dialog.dialog('instance');\n\n\n\n\n            // If there's no inline element for the dialog's source, then we'll need to add our content document fragment to the dialog.\n            if (!inline) {\n                if (settings.content) {\n                    if (settings.cloneContentEvents) {\n                        // Also clone events when indicated or custom behaviors will be lost\n                        UI.addContent($(settings.content).clone(true));\n                    } else {\n                        // If we've passed in content, then remove any spinner which may be there and append the document fragment.\n                        UI.addContent($(settings.content).clone());\n                    }\n                } else {\n                    // If there's no content to append, then add a spinner. Content will probably be added after an ajax call.\n                    AE.ui.addSpinner(UI.props.$currentDialog.uiDialog.find('.ui-dialog-content'), { size: '5x' });\n                }\n            }\n\n            // Apply UI function to content such as tabs, accordions and datepickers\n            if (settings.applyUI) {\n                UI.applyJQUI();\n            }\n\n            // Needs to happen after the dialog is created, because the buttons need to exist for some of the code to run.\n            if (settings.buttonOpts) UI.applyButtonOptions(settings.buttonOpts);\n\n            /*\n            // Commenting out for now, to see if we get better results from applying this just before opening the dialog.\n            if ( UI.props.$currentDialog && UI.props.$currentDialog.options.type !== 'infoTip' ) {\n            \t// This is not an info tip, so we need to stop scrolling for desktop and mobile devices.\n            \tUI.stopBodyScroll();\n            }\n            */\n\n            if(AE.props.siteCode == 'FCR' && settings.class) {\n                    $('.ui-dialog').addClass(settings.class)\n            }\n\n            $('.ui-dialog').scrollTop(0);\n            if (settings.autoupdate) {\n                UI.update();\n            }\n            UI.renderButtonEntities();\n            return $dialog;\n        },\n        addContent: function(content) {\n\n            //http://stackoverflow.com/questions/6068955/jquery-function-after-append\n            if (UI.props.$currentDialog) {\n                AE.ui.removeSpinner(UI.props.$currentDialog.uiDialog.find('.ui-dialog-content'));\n                UI.props.$currentDialog.uiDialog\n                    .find('.ui-dialog-content')\n                    .append(content)\n                    .ready(function() {\n                        UI.manageTabWidth();\n                    });\n            }\n        },\n        applyJQUI: function(dialogSelector) {\n\n            if (UI.props.$currentDialog) {\n                AE.ui.applyJQUI('.ui-dialog-content');\n            }\n        },\n        renderButtonEntities: function() {\n\n            var $dialogButtons = $('.ui-dialog-buttonset button');\n            $.each($dialogButtons, function(btnIdx) {\n                var thisBtn = $dialogButtons[btnIdx];\n                var btnTxt = thisBtn.innerHTML;\n                btnTxt = btnTxt.replace(/&amp;/g, '&');\n                $(thisBtn).empty().append(btnTxt);\n            });\n        },\n        close: function(event, ui) {\n            UI.props.dialogTriggered = false;\n            // Closes any dialog which is currently open.\n            if (UI.props.$currentDialog) { UI.props.$currentDialog.close(); }\n        },\n        instance: function() {\n            // Returns instance of current dialog.\n            return UI.props.$currentDialog.uiDialog;\n        },\n        hasOverflow: function() {\n\n            if (!UI.props.$currentDialog) {\n\n                return false;\n            }\n            var totalHeight = 0;\n            var currDialog = UI.props.$currentDialog.uiDialog;\n            var currentHeight = currDialog.hasClass('mod-title') ? parseInt(currDialog.height() + 15) : currDialog.height();\n\n            //var overflow = ( $().innerHeight() > $().);\n\n            // Changed to use height as was getting false positives with outerHeight()\n            UI.props.$currentDialog.uiDialog.children().each(function(index) {\n\n                if ($(this).is(':visible')) {\n                    totalHeight += $(this).height();\n                }\n            });\n\n            return (currentHeight < totalHeight);\n        },\n        handleOverflow: function() {\n\n            if (UI.hasOverflow()) { //} && $('.ui-dialog-content').find('.scrollable')[0] ) {\n                //console.log('+ Content is taller than the dialog.');\n                UI.props.$currentDialog.uiDialog.addClass('scroll--more');\n            } else {\n                //console.log('- Content fits inside the dialog.');\n                UI.props.$currentDialog.uiDialog.removeClass('scroll--more');\n            }\n        },\n        stopBodyScroll: function() {\n\n            if ($('html').hasClass('ua-firefox')) {\n                // Do nothing, because Firefox desktop shoots to the top when an absolute position is applied, and\n                // with longer pages it can frustrate the user when they lose their place.\n            } else {\n                // In all other cases, use this class.\n                $('html').addClass('scroll-stop');\n            }\n        },\n        allowBodyScroll: function() {\n            $('html').removeClass('scroll-stop');\n        },\n        cleanup: function(event, ui) {\n\n            // Meant to be called whenever a dialog is closed. Won't do anything if there's no $currentDialog.\n            // This function is added to the close method in the dialog options at the top of this file.\n            if (UI.props.$currentDialog) {\n                UI.props.dialogTriggered = false;\n                // We can call the method directly because we saved the instance to this variable.\n                UI.props.$currentDialog.destroy();\n                UI.props.$currentDialog = null;\n                UI.props.overClick = true;\n                //UI.allowBodyScroll();\n                //$('#dialog-content').removeClass('open');\n            }\n        },\n        /*\n        handle:function(event) {\n        \tvar $target = $(event.target);\n        \tfor (var i = 0; i < UI.dialogHandlers.length; i++) {\n        \t\tUI.dialogHandlers[i].func.apply(this, [event]);\n        \t};\n\n        \t//if($target.data('terms')){\n        \t//\tAE.booking.terms.dialog($target);\n        \t//} else if($target.hasClass('email-quote')){\n        \t//\tAE.booking.saveQuote.dialog($target);\n        \t//} else if($target.data('selector')){\n        \t//\t$($target.data('selector')).dialog(UI.getDefaultOptions());\n        \t//}\n        },\n        */\n        addDialogHandler: function(task) {\n            /*\n            Adds an object with a func property that is function taking the\n            event object as its ONLY argument to an array of functions.\n            When a dialog trigger element is clicked, these functions will be executed using\n            the apply() method in handle() to pass in the correct target on each event.\n\n            Each 'task' should start by performing logic on the event target to determine whether it should run.\n\n            \tAE.ui.dialog.addDialogHandler(\n            \t\t{\n            \t\t\tfunc:function(event){\n            \t\t\t\tif(event meets criteria){\n            \t\t\t\t\tdo stuff\n            \t\t\t\t}\n            \t\t\t}\n            \t\t}\n            \t);\n            */\n\n            UI.dialogHandlers.push(task);\n\t\t},\n\t\tonBodyClick: function(event, $target) {\n\t\t\tif ($(event.target).hasClass('trg__dialog')) {\n\t\t\t\t// This is intended for markup-driven dialogs. The link should have the class listed above, and\n\t\t\t\t// a data attribute with an ID. It's an ID, not a generalized selector. This function will then\n\t\t\t\t// launch a standard dialog.\n\t\t\t\tvar contentID = $target.data('dialog-id');\n\t\t\t\tUI.launch({ id: contentID });\n\t\t\t}\n\n\t\t\t// All \"info tips\" close when they are clicked on\n\t\t\tif ($target.closest('.info-tip')[0]) {\n\t\t\t\tUI.close();\n\t\t\t}\n\n\t\t\t// All \"dialog modal overlays\" close when clicked on\n\t\t\tif ($target.hasClass('ui-widget-overlay') && UI.props.overClick) {\n\t\t\t\tUI.close();\n            }\n            \n            if ($target.hasClass('fcr_close')) {\n\t\t\t\tUI.close();\n\t\t\t}\n\n\t\t\t// GPS Form: when closing the T&C modal \"X\" (close)\n\t\t\tif ((oSite.siteCode === 'AUS') && $target.hasClass('ui-icon-closethick') && ($('body').attr('id') == 'gpsrequest')) {\n\t\t\t\t$(\"#gpsreqbtn\").removeClass(\"visuallyhidden\");\n\t\t\t\t$(\"#gpsTNCchk\")\n\t\t\t\t\t.removeClass(\"fa-square\")\n\t\t\t\t\t.addClass(\"fa-check-square\");\n\t\t\t}\n\t\t},\n        /*\n        markupDialog : function(event) {\n        \tvar $target = $(event.target);\n        \tif($target.data('selector')){\n        \t\tvar $selection = $($target.data('selector'));\n        \t\tif($selection[0]){\n        \t\t\t$selection.dialog(UI.getDefaultOptions());\n        \t\t\tif($selection.hasClass('trg__dialog--transparent')){\n        \t\t\t\t$selection\n        \t\t\t\t\t.dialog({minHeight:$selection.dialog('option','maxHeight')})\n        \t\t\t\t\t.parent().css('backgroundColor','transparent').css('border','0').css('padding','0');\n        \t\t\t}\n        \t\t}\n        \t}\n        },\n        */\n        /*\n        create:function(id,dialogOpts,spinnerOpts,content) {\n\n        \tif(typeof(id) !== 'string') id = 'unidentifiedDialog_'+Date.now();\n\n        \tdialogOpts = dialogOpts || UI.getDefaultOptions();\n        \tvar dialogSelector = '#'+$.trim(id);\n        \tvar $dialog = $( $(document.createElement('div')))\n        \t\t.attr('id',id)\n        \t\t.dialog(dialogOpts);\n\n        \tif(!dialogOpts.close){\n        \t\t$dialog.dialog('option','close',\n        \t\t\tfunction(){\n        \t\t\t\t$dialog.dialog('destroy');\n        \t\t\t}\n        \t\t);\n        \t}\n\n        \tif(dialogOpts.noTitleClose) UI.hideTitleCloseButton(dialogSelector);\n\n        \tif(dialogOpts.buttonOpts) UI.applyButtonOptions(dialogSelector,dialogOpts.buttonOpts);\n\n        \tif(spinnerOpts) AE.ui.addSpinner(dialogSelector,spinnerOpts);\n\n        \tif(content){\n        \t\tAE.ui.removeSpinner(dialogSelector);\n        \t\t$dialog.append(content);\n        \t}\n        \t$dialog.closest('.ui-dialog').css({\n        \t\t\"position\"\t: 'fixed',\n        \t\t\"top\"\t: dialogOpts.top\n        \t});\n\n        \treturn $dialog;\n        },\n        */\n        create: function(id, dialogOpts, spinnerOpts, content) {\n\n            if (typeof(id) !== 'string') id = 'unidentifiedDialog_' + Date.now();\n\n            dialogOpts = dialogOpts || {};\n            var dialogSelector = '#' + $.trim(id);\n\n            UI.launch({\n                id: '#' + $.trim(id),\n                content: buildMarkup(termsData),\n                buttons: oButtons,\n                applyUI: true,\n                buttonOpts: buttonOpts,\n                width: ($(window).width() > 900) ? 850 : '80%'\n            });\n\n            var $dialog = $($(document.createElement('div')))\n                .attr('id', id)\n                .dialog(dialogOpts);\n\n            if (!dialogOpts.close) {\n                // $dialog.addClass('modded-title-bar');\n                $dialog.dialog('option', 'close',\n                function(event) {\n                    $dialog.dialog('destroy');\n                }\n            );\n            }\n\n\n\n            // UI.hideTitleCloseButton seems to be unused in this module - Simari 07/24/18\n            // if (dialogOpts.noTitleClose) UI.hideTitleCloseButton(dialogSelector);\n\n            if (dialogOpts.buttonOpts) UI.applyButtonOptions(dialogSelector, dialogOpts.buttonOpts);\n\n            if (spinnerOpts) AE.ui.addSpinner(dialogSelector, spinnerOpts);\n\n            if (content) {\n                AE.ui.removeSpinner(dialogSelector);\n                $dialog.append(content);\n            }\n            $dialog.closest('.ui-dialog').css({\n                \"position\": 'fixed',\n                \"top\": dialogOpts.top\n            });\n\n            return $dialog;\n        },\n        fill: function(dialogSelector, content, buttonOpts) {\n            AE.ui.removeSpinner(dialogSelector);\n            $(dialogSelector).append(content);\n            AE.ui.applyJQUI(dialogSelector);\n            if (buttonOpts) UI.applyButtonOptions(dialogSelector, buttonOpts);\n        },\n        /*\n        getDefaultOptions:function(){\n        \tvar dims = UI.getDimensions();\n        \treturn {\n        \t\tautoOpen: true,\n        \t\tposition:{my:\"center top\", at:\"center top\", of:window},\n        \t\twidth: dims.width,\n        \t\theight: dims.height,\n        \t\ttop: dims.top,\n        \t\tmaxHeight: dims.maxHeight,\n        \t\tdraggable: false,\n        \t\tresizable: false,\n        \t\tmodal: true\n        \t};\n        },\n        */\n        /*\n        buildOptions:function(dialogOpts){\n        \treturn $.extend(true,UI.getDefaultOptions(),dialogOpts);\n        },\n        */\n        /*\n        hideTitleCloseButton:function(dialogSelector){\n        \t$(dialogSelector).siblings('.ui-dialog-titlebar').children('button.ui-dialog-titlebar-close').hide();\n        \tUI.props.overClick = false;\n        },\n        */\n        applyButtonOptions: function(buttonOpts) {\n\n            if (!UI.props.$currentDialog) { return };\n\n\n            var $dialog = UI.props.$currentDialog.uiDialog,\n                $buttonPane = UI.props.$currentDialog.uiDialogButtonPane,\n                $buttonSet = UI.props.$currentDialog.uiButtonSet,\n                $buttonsAll = UI.props.$currentDialog.uiButtonSet.children('button'),\n                $buttonFirst = UI.props.$currentDialog.uiButtonSet.children('button').first(),\n                $buttonLast = UI.props.$currentDialog.uiButtonSet.children('button').last();\n\n            if (buttonOpts.buttons) {\n                $dialog.dialog('option', 'buttons', buttonOpts.buttons);\n            }\n\n            if (buttonOpts.before) {\n                $buttonPane.prepend(buttonOpts.before);\n            }\n            if (buttonOpts.after) {\n                $buttonPane.append(buttonOpts.after);\n            }\n            if (buttonOpts.paneClass) {\n                $buttonPane.addClass(buttonOpts.paneClass);\n            }\n            if (buttonOpts.setClass) {\n                $buttonSet.addClass(buttonOpts.setClass);\n            }\n            if (buttonOpts.buttonsClass) {\n                $buttonsAll.addClass(buttonOpts.buttonsClass);\n            }\n\n            if (buttonOpts.firstButtonClass) {\n                if (buttonOpts.buttonsClass) $buttonFirst.removeClass(buttonOpts.buttonsClass);\n                $buttonFirst.addClass(buttonOpts.firstButtonClass);\n            }\n            if (buttonOpts.lastButtonClass) {\n                if (buttonOpts.buttonsClass) $buttonLast.removeClass(buttonOpts.buttonsClass);\n                $buttonLast.addClass(buttonOpts.lastButtonClass);\n            }\n            if (buttonOpts.firstButtonAttr) {\n                $buttonFirst.attr(buttonOpts.firstButtonAttr[0], buttonOpts.firstButtonAttr[1]);\n            }\n            if (buttonOpts.lastButtonAttr) {\n                $buttonLast.attr(buttonOpts.lastButtonAttr[0], buttonOpts.lastButtonAttr[1]);\n            }\n            if (buttonOpts.exclusiveClose) {\n                // Disable the ability for the overlay to close the dialog, and get rid of the close button in the titlebar.\n                UI.props.overClick = false;\n                UI.props.$currentDialog.uiDialogTitlebarClose.hide();\n            }\n        },\n        empty: function(dialogSelector) {},\n        /*\n        getDimensions:function(initial){\n        \tinitial = initial || false;\n\n        \tvar viewType = AE.getSiteViewType(),\n        \t\twindowWidth = $(window).outerWidth(),\n        \t\twindowHeight = $(window).outerHeight(),\n        \t\tdims = {};\n\n        \tif ( viewType !== 'palm' ) {\n        \t\tdims.width\t\t= windowWidth*0.9 > 700 ? 700 : windowWidth*0.9;\n        \t\tdims.height\t\t= 'auto' //$(window).outerHeight()*0.5;\n        \t\tdims.maxHeight\t= windowHeight-40;//*0.9;\n        \t\tdims.left\t\t= (windowWidth - dims.width) / 2\n        \t\tdims.top\t\t= 20;\n\n        \t} else {\n        \t\tdims.width\t\t= windowWidth;\n        \t\tdims.height\t\t= windowHeight;\n        \t\tdims.maxHeight\t= windowHeight;\n        \t\tdims.left\t\t= 0;\n        \t\tdims.top\t\t= 0;\n        \t}\n        \treturn dims;\n        },\n        */\n        manageTabWidth: function() {\n            if (!UI.props.$currentDialog) { return };\n\n            //See if there are tabs. If not, then return.\n            var $tabList = UI.props.$currentDialog.uiDialog.find('.ui-tabs-nav');\n            if (!$tabList[0] || AE.getSiteViewType() === 'palm') { return };\n\n\n            // If the tabs are normal.\n            if (!$tabList.hasClass('tab-forcefull')) {\n                var total = getTotalWidth();\n\n                if (total >= $tabList.width()) {\n                    UI.allTabWidth = total;\n                    $tabList.addClass('tab-forcefull');\n                }\n            } else {\n                // The tabs DO have the class, so that means we have a value for the total width.\n                if (UI.allTabWidth < $tabList.width()) {\n                    UI.allTabWidth = 0;\n                    $tabList.removeClass('tab-forcefull');\n                }\n            }\n\n            function getTotalWidth() {\n                var allWidth = 0;\n                $tabList.children().each(function() {\n                    allWidth += $(this).outerWidth(true);\n                });\n                return allWidth;\n            }\n        },\n        manageScroll: function() {\n            if (UI.props.$currentDialog && UI.props.$currentDialog.option('type') === 'infoTip') {\n                UI.props.$currentDialog.close();\n            }\n        },\n        manageResize: function() {\n            /*\n            var $dialog\t= $('.ui-dialog'),\n            \tdims\t= UI.getDimensions();\n\n            $dialog.css({\n            \t\"width\"\t\t\t: dims.width,\n            \t\"height\"\t\t: dims.height,\n            \t\"left\"\t\t\t: dims.left,\n            \t\"top\"\t\t\t: dims.top\n            });\n            */\n            UI.update();\n            UI.manageTabWidth();\n        }\n    }\n    return UI;\n})();\n;var AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\n/*\nThe AE.ui object will be the returned result of a self-invoked function. This allows us to expose methods \nfor use by other modules while protecting some variables in a closure. If the AE.ui object is already \ndefined then it's not altered. This prevents us from running the entire function each time one of its \ninternal methods are called.\n*/\nAE.ui.tabcordion = AE.ui.tabcordion || (function(){\n\t/* \n\tDEPENDENCIES: AE, AE.ui\n\t*/\n\n\tvar UI = {\n\t\tinit:function() {\n\n\t\t\t/* Establish the props object only upon init. No need to do the work if the module isn't being called. */\n\t\t\tUI.props = {};\n\t\t\tAE.ui.addBodyClickTask({func: UI.onBodyClick});\n\n\t\t},\n\t\thandleTabcordion:function($target){\n\t\t\tvar props = $target.data();\n\t\t\tprops['display'] = props['display'] || '';\n\t\t\tprops['content'] = props['content'] || '';\n\t\t\tprops['switchsize'] = props['switchsize'] || '';\n\n\n\n\n\n\t\t\tvar $tabcordionGroup = $('.tabcordion__item[data-display=\"'+props['display']+'\"]'); // All trigger items.\n\n\t\t\t/*\n\t\t\tThis next bit looks kind of weird, so it needs some explanation. We're making a jQuery collection from the \n\t\t\tresults of a function, and that function involves UnderscoreJS. We take the collection of tabcordian triggers \n\t\t\tand run them through a chained set of methods from Underscore.\n\n\t\t\t1)\tUse _.map() to get the \"content\" data attribute from each tabcordian item, returned as an array of strings. \n\t\t\t\tThe one that the user clicked will return as a boolean false. Ex: [\"#id1\",\"#id2\",false,\"#id4\"]\n\t\t\t2)\tWe then run that through _.compact() to remove any falsey values.\n\t\t\t3)\tThe _.value() method breaks the chain and returns the final value. Ex: [\"#id1\",\"#id2\",\"#id4\"]\n\t\t\t4)\tThe final value is then converted to a string. Ex. \"#id1,#id2,#id4\"\n\t\t\t5)\tThis string is used as a jQuery selector. Ex. $myVar = $(\"#id1,#id2,#id4\");\n\t\t\t*/\n\t\t\tvar $tabcordionContentGroup = $(\n\t\t\t\t_.chain( $tabcordionGroup )\n\t\t\t\t.map(function(item){\n\t\t\t\t\t// Do not include the content item that we're trying to open with the current trigger. We just want \n\t\t\t\t\t// to find the others so we can close them.\n\t\t\t\t\tvar selector = $(item).data('content').toString();\n\t\t\t\t\tselector = ( selector === props['content'].toString() ) ? false : selector;\n\t\t\t\t\treturn selector;\n\t\t\t\t})\n\t\t\t\t.compact()\n\t\t\t\t.value()\n\t\t\t\t.toString()\n\t\t\t);\n\n\n\n\t\t\t// This bit is used for the promos.\n\t\t\t// Changed to use ID as selector was undefined \n\t\t\t// if we use this for other tabcordions may want to revisit\n\t\t\tvar div = $(props['content'])[0].id.split('-');\n\t\t\t//var div = $(props['content']).selector.split('-');\n\n\n\t\t\tvar removeClasses = 'visuallyhidden';\n\t\t\tswitch($.trim(props['switchsize']).toLowerCase()) {\n\t\t\t\tcase 'palm' : \n\t\t\t\t\taddClasses = 'visuallyhidden--palm visuallyhidden--lap-and-up active-palm';\n\t\t\t\t\tremoveClasses += ' visuallyhidden--palm visuallyhidden--portable active-palm';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'portable' : \n\t\t\t\t\taddClasses = 'visuallyhidden--portable visuallyhidden--desk visuallyhidden--desk-wide active-portable';\n\t\t\t\t\tremoveClasses += ' visuallyhidden--palm visuallyhidden--lap visuallyhidden--portable active-portable';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'lap' : \n\t\t\t\t\taddClasses = 'visuallyhidden--lap visuallyhidden--desk visuallyhidden--desk-wide active-lap';\n\t\t\t\t\tremoveClasses += ' visuallyhidden--lap visuallyhidden--portable active-lap';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'lap-and-up' : \n\t\t\t\t\taddClasses = 'visuallyhidden--lap-and-up visuallyhidden--palm active-lap-and-up';\n\t\t\t\t\tremoveClasses += ' visuallyhidden--lap-and-up visuallyhidden--lap visuallyhidden--desk visuallyhidden--desk-wide active-lap-and-up';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'desk' : \n\t\t\t\t\taddClasses = 'visuallyhidden--desk active-desk';\n\t\t\t\t\tremoveClasses += ' visuallyhidden--desk active-desk';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'desk-wide' : \n\t\t\t\t\taddClasses = 'visuallyhidden--desk-wide active-desk-wide';\n\t\t\t\t\tremoveClasses += ' visuallyhidden--desk-wide active-desk-wide';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t//$tabcordionContentGroup.slideUp('slow').addClass(addClasses);\n\t\t\t//$(props['content']).removeClass(removeClasses).slideDown('slow');\n\n\n\n\t\t\t/*\n\t\t\tBy passing in an object instead of the usual arguments, we can access the methods that slideUp and slideDown \n\t\t\thave with jQuery animate(). We add \"queue:false\" to run the animations simultaneously.\n\t\t\t*/\n\t\t\t$tabcordionContentGroup.slideUp({\n\t\t\t\tduration: 'slow',\n\t\t\t\tqueue: false,\n\t\t\t\tcomplete: function(){ $(this).addClass(addClasses); /*console.log('Finished sliding UP.');*/ }\n\t\t\t});\n\n\t\t\t$(props['content']).removeClass(removeClasses).slideDown({\n\t\t\t\tduration: 'slow',\n\t\t\t\tqueue: false,\n\t\t\t\tcomplete: function(){ /*console.log('Finished sliding DOWN.');*/ }\n\t\t\t});\n\n\t\t\t$(props['display']).empty().removeClass('promo-content-one promo-content-two promo-content-three').append($(props['content']).html()).addClass('promo-content-'+ div[2]);\n\t\t},\n\t\tonBodyClick:function(event,$target){\n\t\t\tif( $target.closest('.tabcordion__item')[0] ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tUI.handleTabcordion($target);\n\t\t\t}\n\n\t\t\t// Stuff for promos.\n\t\t\tif ( $('.tabcordion__opaque__parent')[0] ) {\n\t\t\t\t// Toggle Opaque Background\n\t\t\t\t$('.tabcordion__opaque__parent').addClass('promo-opacity-fill');\n\t\t\t\tvar parent = $target.closest('div.promo-box');\n\t\t\t\tparent.children('.tabcordion__opaque__parent').removeClass('promo-opacity-fill');\n\t\t\t}\n\t\t}\n\t}\n\treturn UI;\n})();\nvar AE = AE || {}; /* Add to Base object or create it if it doesn't exist. */\n\nAE.ui.liveTimer = AE.ui.liveTimer || (function () {\n\t\tvar UI = {\n\t\t\tinit: function (callback, iTxd) {\n\t\t\t\t/* Track mouse-out time by exit direction. */\n\n\t\t\t\tvar _iTxd = iTxd || {top:0, right:0, bottom:0, left:0};\n\t\t\t\tUI.props = {\n\t\t\t\t\tint: 0,\n\t\t\t\t\tbufferInt: 0,\n\t\t\t\t\t/* callback to fire on timer complete */\n\t\t\t\t\t$fn: callback,\n\t\t\t\t\t/* timerInt is set properly in UI._setInt, this is a placeholder. */\n\t\t\t\t\ttimerInt: function () {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t},\n\t\t\t\t\tmouseX: 100, /* mouse X leave for exit modal */\n\t\t\t\t\tmouseY: 100, /* mouse Y leave for exit modal */\n\t\t\t\t\t/* exitDirTest is set properly in UI._trackExit, these are just placeholder values. */\n\t\t\t\t\texitDirTest: {\n\t\t\t\t\t\t'oT': false, /* 'oT' - mouse exits top */\n\t\t\t\t\t\t'oR': false, /* 'oR' - mouse exits right */\n\t\t\t\t\t\t'oB': false, /* 'oB' - mouse exits bottom */\n\t\t\t\t\t\t'oL': false /* 'oL' - mouse exits left */\n\t\t\t\t\t},\n\t\t\t\t\t/* # seconds to wait before firing dialog (# of iterations based on 1000 ms timeout) */\n\t\t\t\t\tidleTimes: {\n\t\t\t\t\t\t'oT': _iTxd.top,\n\t\t\t\t\t\t'oR': _iTxd.right,\n\t\t\t\t\t\t'oB': _iTxd.bottom,\n\t\t\t\t\t\t'oL': _iTxd.left\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\twindow.addEventListener('mousemove', UI._handleMouseMoveEvent, true);\n\t\t\t\tdocument.documentElement.addEventListener('mouseleave', UI._setInt);\n\t\t\t},\n\n\t\t\t_handleMouseMoveEvent: function (e) {\n\t\t\t\treturn UI._setCoordinateProps(e);\n\t\t\t},\n\n\t\t\t_setCoordinateProps: function (e) {\n\t\t\t\tUI.props.mouseX = e.clientX;\n\t\t\t\tUI.props.mouseY = e.clientY;\n\t\t\t},\n\n\t\t\t_setInt: function () {\n\t\t\t\tdocument.documentElement.removeEventListener('mouseleave', UI._setInt);\n\t\t\t\tdocument.documentElement.addEventListener('mouseenter', UI._resetIdleTimer);\n\t\t\t\tUI.timerInt = setInterval(UI._trackExit, UI.props.bufferInt);\n\t\t\t},\n\n\t\t\t_trackExit: function () {\n\n\t\t\t\tUI.props.exitDirTest = {\n\t\t\t\t\t'oT': UI.props.mouseY < 10,\n\t\t\t\t\t'oR': UI.props.mouseX > (window.innerWidth - 30),\n\t\t\t\t\t'oB': UI.props.mouseY > (window.innerHeight - 30),\n\t\t\t\t\t'oL': UI.props.mouseX < 10\n\t\t\t\t};\n\n\t\t\t\tfor (var i in UI.props.exitDirTest)\n\t\t\t\t\tif (UI.props.exitDirTest[i]) UI._watchIdleTimer(i);\n\t\t\t},\n\n\t\t\t_watchIdleTimer: function (exitDirection) {\n\t\t\t\tvar _secondsToLive = UI.props.idleTimes[exitDirection];\n\n\t\t\t\tif (UI.props.int >= _secondsToLive) return UI._triggerCallback();\n\t\t\t\tUI.props.int++;\n\t\t\t},\n\n\t\t\t_triggerCallback: function () {\n\t\t\t\tdocument.documentElement.removeEventListener('mouseleave', UI._setInt);\n\t\t\t\tdocument.documentElement.removeEventListener('mouseenter', UI._killIdleTimer);\n\t\t\t\tdocument.documentElement.removeEventListener('mouseenter', UI._resetIdleTimer);\n\t\t\t\tUI._killIdleTimer();\n\t\t\t\treturn UI.props.$fn();\n\t\t\t},\n\n\t\t\t_resetIdleTimer: function () {\n\t\t\t\tUI.props.int = 0;\n\t\t\t\tclearInterval(UI.timerInt);\n\t\t\t\tdocument.documentElement.addEventListener('mouseleave', UI._setInt);\n\t\t\t},\n\n\t\t\t_killIdleTimer: function () {\n\t\t\t\tUI.props.int = 0;\n\t\t\t\tdocument.documentElement.removeEventListener('mouseenter', UI._killIdleTimer);\n\t\t\t\twindow.removeEventListener('mousemove', UI._handleMouseMoveEvent, true);\n\t\t\t\tclearInterval(UI.timerInt);\n\t\t\t}\n\t\t};\n\n\t\treturn UI;\n})();\n/*\nAE.init.ui: Resolves the deferred object for the ui modules.\n*/\nobjDFD.ui.resolve();"],"names":["AE","ui","UI","bodyClickTasks","bodyChangeTasks","init","props","bodyEvent","clicksDisabled","appendTarget","appendTo","$","hasClass","closest","scrollContainer","$mainFooterTogglers","$mainFooterTogglees","$aeSearch","$menusearchEnabled","$tabContainers","$accordionContainers","$accordionCollapsedContainers","$dateInputs","$autoPostForms","$currentDatePicker","searchProps","roundTrip","city","cityr","puloclist","doloclist","pucode","docode","puCal","doCal","putime","dotime","searchAge","bookingstep","addBodyClickTask","func","onBodyClick","on","event","manageBodyClick","manageBodyChange","applyJQUI","target","parent","heroCardIndex","fractionalScrollHeightStyle","document","createElement","slide","siteCode","appendChild","createTextNode","head","filter","$a","this","_href","attr","_host","hostname","_langTag","_location","location","_hrefStr","substring","addClass","rel","addResizeTask","manageResize","args","addScrollTask","distanceFromTop","getElementById","getBoundingClientRect","top","$b2t","removeClass","search","each","searchType","dialog","modify","tabcordion","carousel","selectmenu","affiliate","terms","getElementsByClassName","length","i","style","display","css","show","direction","animate","opacity","queue","duration","setTimeout","disableClicks","enableClicks","siteViewType","getSiteViewType","datepicker","index","$togglee","find","hide","data","insurance","pmOptionsStop","hideToggle","$toggler","showToggle","deviceSize","undefined","palm","lap","desk","_","device","$target","checkout_process","qaCookie","clientID","scrollIntoView","handleToggle","prop","$toggleeContainer","$taModChildren","closeToggle","AECookie","update","read","window","href","booking","cancelModal","launch","type","pos","my","at","of","selector","children","ga","gaArrayProcess","GACATEGORY","GAACTION","open","call8x8CoBrowsing","arrArgs","concat","apply","task","push","addBodyChangeTask","addSpinner","settings","trident","colorClass","sizeClass","size","remove","end","append","msie","ua","navigator","userAgent","indexOf","color","outerHeight","noWobble","removeSpinner","dateText","inst","dataset","endDatePicker","startDate","Date","minDuration","isNumeric","setDate","getDate","trim","currentDatePicker","pickerType","pickerValue","val","configureCurrentDatePicker","yearUpperRange","yearLowerRange","dp_options","formatDate","hiddenDob","parseDate","hideIfNoPrevNext","changeMonth","changeYear","yearRange","minDate","defaultDate","altField","altFormat","parseInt","hiddenReport","maxDate","beforeShow","input","dpoffset","offset","dpheight","dpDiv","left","yearRangeSize","chaosSystem","dapDatePaidMin","dapDatePaidMax","onSelect","next","onClose","endDateElement","is","querySelector","blur","addEventListener","e","passive","includes","url","path","_clearDate","tabs","accordion","heightStyle","collapsible","active","decodeHtml","htmlStr","txt","innerHTML","value","slideUp","slideDown","isVisuallyHidden","objCallback","$toggleo","contentGroup","$controllers","$contentEls","options","extend","willSlide","visual","showHideFunc","$content","$otherEls","$targetEl","not","$item","add","preventDefault","searchDoTime","oSubmit","oStoredSearch","isMenuSearch","cookieSearch","bmr_age","$form","memberage","ageDefault","AEdata","defaultAgeOverride","ageMin","ageMax","useStoredSearch","$viewSize","searchFormErrorHandler","displayMenusearch","getStoredSearch","menusearch","menusearchOptions","searchtype","query","timeout","$searchFormErrorHandler","msgTitle","msgDesc","hasAgeChkbx","oSite","bIsDapTpDomain","path_info","cleanStoredSearch","jsloginStatus","readCookie","removeCookie","showFillAgeCheckout","$topSearch","$bottomSearch","$searchContainer","$searchSlideBtn","$locationsWrapper","$chkDiff","$chkAge","$txtAge","$jsonPost","$btnSubmit","$puLoc","$doLoc","$menu_puCountry","$menu_puCity","$menu_puLocation","$menu_doCountry","$menu_doCity","$menu_doLocation","$puDate","$doDate","$doDateOneway","$hiddenPuDate","$hiddenDoDate","$puTime","$doTime","$doTimeOneway","$hiddenPuTime","$hiddenDoTime","$fcrOnewayChk","privateBrowsing","_checkLocalStorageAvailability","prepMenusearch","viewSize","display_label","display_labelr","puloctype","doloctype","puchaos_hub_id","dochaos_hub_id","searchAgeCheckbox","bookingUUID","excl_ltr","excl_cats","toString","localStorage","getItem","mSiteCode","removeItem","isString","setItem","JSON","parse","searchPuTime","searchPuDate","searchDoDate","isLTRSearch","setAge","forceSearchAgeCheckBox","isBMRSearch","driverAge","chkAgeHandler","checked","_checked","required","account","$isLoggedIn","runThis","isAUNZ","leasesearch","$ltrdo","$ltrpu","_forceInputBlur","text","trigger","uuid","URL","cjevent","cjEvent","CJEVENT","formSubmit","stop","scrollTop","keyCode","ready","addTransitionTask","palmTransition","arguments","fcrToggleOnewayOpen","fcrToggleOnewayClose","fcrOneWayToggle","toggle","palmContent","container","getValue","property","_obj","Object","keys","_key","getSubmitValues","getMaxAge","$ageMax","getMinAge","$ageMin","setValue","name","item","jsonOnly","resetAge","autocomplete","_puDate","isValidDate","convertDate","_doDate","getmemberage","d","isNaN","loginOverride","_flagTitle","_flagMsg","$ui_chkDiff","$ui_puInput","$ui_doInput","$ui_menu_puInput_country","$ui_menu_puInput_city","$ui_menu_puInput_location","$ui_menu_doInput_country","$ui_menu_doInput_city","$ui_menu_doInput_location","$ui_puDate","$ui_doDate","$ui_puTime","$ui_doTime","$ui_txtAge","$_subBtn","_posDiff","$ui_elObj","pickupDate","menusearchpucountry","$fn_checkMenuSearchLocationInput","menusearchpucity","menusearchdocountry","menusearchdocity","textsearchlocation","$fn_flagLocationInput","menusearchpulocation","menusearchdolocation","bmr","age","$fn_flagChkAgeInput","dropoffDate","badDates","getTime","oSearch","LABEL_DROPOFF_TIME","forms","addSpinGear","_el","ERRORMSG_INPUTEMPTY","ERRORMSG_PULOCEMPTY","placeholder","$ui_ageInput","_val","_min","_max","legacy","grief","isIE","position","ERRORMSG_DRIVERAGETITLE","ERRORMSG_DRIVERAGEMESSAGE","ERRORMSG_INVALIDAGETITLE","ERRORMSG_INVALIDAGEMESSAGE","replace","disabled","menuSearchError","stringify","_path","create","postToForm","handleSubmit","params","method","_tempHiddenField_aff","key","_tempHiddenField","_tempForm","killBtnSpinner","setAttribute","tgt","self","cookiesEnabled","hasOwnProperty","body","submit","isChecked","setDefaultAgeOverride","aeSearch","title","msg","posDiff","newClass","_elems","_checkValidity","elems","_toggleFlag","_renderFlag","el","invalidName","_flag","class","role","tag","for","visible","uniqueId","$ui_closeBtn","$ui_txtContent","$ui_warnTitle","$ui_warnMsg","clearFlag","removeEventListener","_hideErrorFlag","alt","html","insertBefore","height","$ui_flagPos","click","_hasFlag","has","$_flag","prev","_showErrorFlag","$_button","fadeIn","_destroy","nameEQ","toLowerCase","ca","cookie","split","c","charAt","quote","oQuote","oOW","locList","OOW","getInputs","setFromQuote","oPU","country","deskType","oDO","isEmpty","pu","drop","chaos_city_name","desk_list","chaos_country_code","loc_type","chaos_hub_id","preserveDO","allStorage","archive","rawCFCities","statesHandled","arrstates","buildStateArray","Array","isArray","arrStates","handleStateMenus","first","rawMHCities","arrMHCities","decodeURIComponent","handleMotorHomeCityMenus","arrCFCities","handleChauffeurCityMenus","onBodyChange","buildDynamicOptions","arrSrc","$df","createDocumentFragment","label","$parentForm","stateContainerSelector","preselect","$countryDD","$stateDD","$stateDDContainer","$label","$stateLabel","$provinceLabel","arrTheseStates","state","group","empty","funnelPage","change","err","$cityDD","$vehTypeBoxes","arrTheseCities","dropoff","handleExpiryMenus","$yearSelect","$monthOptions","rightNow","thisMonth","getMonth","thisYear","getFullYear","$monthSelect","aPastOptions","opt","Number","tagName","toUpperCase","aUpliftPromoDivs","upDivDisp","upDiv","timeselectmenu","vouchDateTime","oBKdateTime","GET_INPUTS","modElement","modClass","mainSearch","_tempPuT","_tempDoT","_deeplinkPuT","_deeplinkDoT","bkputime","bkdotime","widget","_create","_super","element","menu","_renderMenu","ul","items","$widget","$menu","ind","_renderItemData","_renderItem","$select","time","hours","match","minutes","AM_PM","slice","sHours","sMinutes","_updatedTime","li","data-position","innerDiv","tabindex","$button","button","$wrap","menuWrap","_updatedVal","aria-owns","aria-labelledby","aria-autocomplete","aria-readonly","aria-controls","_selInd","scrollTo","tsTouchM","stopPropagation","capture","$selectPos","$selectVal","$menuItems","$mI","obj","collision","icons","strDateFormat","_defaults","dateFormat","currentWindowSize","responsiveNumMonthsToShow","desk-wide","datepickerOptions","isLeaseSearch","numberOfCalendarMonthsToShow","checkCurrentWindowSize","_isOpen","firstDay","firstDat","showAnim","showOn","buttonImage","buttonImageOnly","buttonText","fixFocusIE","focus","isPickupField","id","_tempPuD","setMinDropoffDate","isAfterPickup","setDropoffForward","buyBackMin","_tempDoD","tooShortForLease","tooShortForBMR","bmrMin","$input","newPuMin","moddedMinPuDate","getUTCFullYear","getUTCMonth","getUTCDate","toISOString","result","repositionDatepickerArrow","hideOnScrollMove","beforeShowDay","markDates","numberOfMonths","_deeplinkPuD","_deeplinkDoD","bkpudate","bkdodate","disableWeekendSelection","getDay","minDoDate","date","_selectable","highlightTripDates","selectable","puVal","doVal","minDoDateRange","markRange","getDatesInRange","appliedClass","d0","d1","currentDate","between","newDate","timestamp","dateFromPassedInValue","setMinPickupDate","_setPuDate","_tempNewDoDate","ltrDate","overRideMinDoDate","daysToAdd","dToAdd","tempDate","futureDate","minDropoffDate","dropoffTime","setHours","BMRmin","$focusInput","resizeDatepicker","$siteCode","LTRLondonSelected","_searchControllerLocation","_searchControllerMethods","textsearch","textsearchPrefill","textsearchCityLocs","menusearchCountryList","menusearchCityList","get_operatorIdListByCountry","get_operatorIdListByCity","get_countriesActiveBySitecode","sClick","devices","_toggleAccordions","activeAccordion","$disableAccordions","$enabledAccordion","_scrollToTopOfContainer","_customOffset","_scrollToListTop","dl","_throwWarningFlag","_updateInputValue","str","$clearButton","targetActionButton","_direction","_hasSetValue","_displayString","$fn_getInputs","hasVal","savedVal","_updatePlaceholderTo","_clearInput","devicePixelRatio","_cursorToEndOfString","range","selection","editableElem","childNodes","createRange","selectNodeContents","collapse","getSelection","removeAllRanges","addRange","createTextRange","moveToElementText","select","_objHoverHelper","toggleClass","$toggleClass","_hideDeviceKeyboard","_fetchPuCityName","_fetchPuIso","_fetchPuCategory","_fetchDoCityName","_fetchDoIso","_fetchDoCategory","AFFILIATE_NAME","affiliateName","DISPLAY_TOP_COUNTRIES","returnTopCountries","DISPLAY_TOP_CITIES","returnTopCities","testProp","_puLocHasData","_doLocHasData","$tempDoDataHolder","$arr_isoCountryList","activatedCountries","_textsearchPrefillObj","searchPuCity","searchPuCountry","category","searchPuCategory","searchDoCity","searchDoCountry","searchDoCategory","msg_pickupFirst","msg_inputEmpty","_LAUNCH_MENUSEARCH","_DISPLAY_ALPHA_LIST","_READY_TO_CLOSE","_OVERRIDE_MENU_ANIMATION","_DISPLAY_COUNTRY_LIST","_DISPLAY_COUNTRY_CITIES_LIST","$RES_OBJ_FOR_BOOKING","_activeMenu","_shadeStyle","do","PREFILL_STORAGE_STR","TRY_LOCAL_STORAGE","USE_PAGE_PREFILL","searchPuOAG","USE_STORED_SEARCH","$CF_SEARCH_CONTROLLER_REF","$CF_SEARCH_METHOD","OPERATOR_ID_LIST_TO_FILTER_DO","PREVENT_INPUT_BLUR","TRY_PREFILL_PICKUP","TRY_PREFILL_DROPOFF","_alphaList","$ui_badge","$ui_textsearchMenuFooter","$ui_textsearchScrollBtn","$button_back_to_list","$button_reset_input","$textsearchAccordionHead","$textsearchAccordionBody","_CNT","_APT","_ATERM","_hubCases","AIRPORT","icon","behavior","AIRPORT_TERMINAL--ITEM","iconType","$btn","_appendTo","activeMenu","_sortHubsToDisplay","j","n","$arr_items","_addClassToListItem","$arr_hubArrays","COUNTRY","RAIL","FERRY","OTHER","ERROR","CITY","_loc","_type","utils","_sortPropByAlphaInArray","hType","k","_hubArray","reverse","_removeDuplicateObjectsFromArray","_locToDisplay","l","m","association_array","parent_hub_id","_terminal","_breakTopLocsAt","_dt","$items","$menu_header_label","$number_matches_badge","clone","$icon_menu_item","aria-hidden","_buildListIndexHelper","$arr_topCountries","sequence","$newCountryLoc","click_count","splice","_chaosCountryCode","_listTitle","country_label","$arr_topCities","$newLoc","$arr_sub_locations","locations","master_click_count","master_display_label","master_category","master_city_name","master_chaos_country_code","_renderMenuErrorNoMatches","aria-label","data-weight","data-country-code","list_length","matchPlural","matchSingular","txtInitialheader","prependTo","txtPUheader","txtDOheader","txtSameAsPu","txtAllCountries","prepend","_headers","_topLocs","_newID","nextUntil","_scrollMenu","_message","warnNoLocationsSpecific","_dd","icon_style","icon_type","$itemWrapper","_category","item_click_count","item_display_label","$dd","data-category","aria-disabled","originalheight","_populateMenusearchCountryList","ajax","dataType","operator_id_list","success","_populateMenusearchCityList","_iso","$arr_matchedLocations","cityListing","_operatorIdListByCity","chaos_city_id","getJSON","done","_operatorIdListByCountry","chaos_country_id","callback","$arrAlphaHelper","$elemArr","$displayList","$list","$listItem","$aside","_startsWith","_ind","$entry","_charPosition","data-value","_setMenuItemAccordion","chaosCityId","chaosCityName","chaosCountryCode","$accordionContainer","$accordionContainerTriggerElement","_doAccordionInit","$activeAccordion","wrap","locCity","locCCC","city_hub_list","warnNoLocationsVague","hubtype_id","iata","oag","header","_resizeWidgetMenu","$menuStyle","$shadeStyleObj","_prop","_style","_customTextsearchFnHandler","returnValue","evType","aria-expanded","data-open","_hideMenuClass","outerWidth","_showMenuClass","contentEditable","CHECK_PU_CITY","CHECK_DO_ISO","CHECK_DO_CITY","$this","_hasVal","_savedVal","_placeholder","data-placeholder","$searchMenuWrap","data-direction","$menuFooter","$icon_clear_input","$button_target_input","TXT_CLEAR_INPUT","$ev","Event","IS_PICKUP","wrapper","insertAfter","_iconClass","IS_DROPOFF","$JSON_PICKUP_OBJ","$JSON_DROPOFF_OBJ","CHECK_PU_ISO","$JSON_PREFILL_OBJ","PREFILL_PAGE_DATA","searchDoOAG","_trigger","countrycode","pickupLocation","_dialog","_inDialog","instance","off","delay","minLength","autoFill","source","request","response","_request","term","criteria","$arr_matches","gaActionString","GALABEL","$event","displayLabel","countryLabel","_triggerCountryList","_triggerCityList","_CTY","operatorIdList","evTarget","currentTarget","addCogToListItem","puDisplayLabel","doDisplayLabel","_updateTextString","charCode","encodeURIComponent","originalEvent","whichIE","isIE9","isIE10","pukeycount","dokeycount","_show","keydown","$container","$scrollTo","_hide","dontClose","isBtn","isTextsearchInput","isTextsearchMenuItem","isInputResetBtn","isScrollToTopBtn","isBackToListBtn","isTargetInputBtn","isAlphaListHelperBtn","$scrollTarget","$scrollObj","reload","cfcRef","oPrefill","PU","ran","loclist","DO","OW","inModify","$do","$chkDiffs","synchingChkDiff","loc","cities","hubs","prefill","menuSearchSelectInit","oProps","splitID","selectType","ID","baseID","$selected","clearInput","checkTheOneWayBox","handleCountryMenuSelect","beforeSend","resetInput","$citySelect","_baseId","tempCity","optgroup","data-opid-list","selected","menuPrompts","HUB","handleCityMenuSelect","$locSelect","locPrompt","sitecode","groupedHubs","aMissingParentHubs","labelHtmlTxt","$airHubs","$railHubs","$ferryHubs","$cityHubs","compareLocList","compareLocId","oCity","activatedHubs","tempLoc","sortBy","groupBy","TERMINALS","tempKey","difference","pluck","hubLabels","decodeURI","tempAirHub","tempTerminal","tempParentID","tempRailHub","tempFerryHub","tempCityHub","menuPrefill","LOCLIST","DOLOCLIST","optionToSelect","thisOption","thisLocList","commonLocList","intersection","thisLocId","getAttribute","handleLocMenuSelect","oValues","oHub","findWhere","iso_country_code","hub_name","handleCountryCrumbClick","heightAdjust","handleCityCrumbClick","$puMenu","puBaseID","doBaseID","$storeObj","isOW","$menus","puMenu","tempMenu","doMenu","$doMenu","searchPuLoclist","searchDoLoclist","inputChanged","flagHeight","thisState","dolock","_puDisplayLabel","$selectedLoc","selData","validSelect","_doDisplayLabel","isocode","lockDropoff","oBMR","cfc","agency","locale","conversion","campaign","ajaxInitRan","puPrefillRan","doPrefillRan","oDOlocs","pickUpCountry","pickUpCity","dropOffCountry","dropOffCity","$dfd","Deferred","extendOwn","o$Regions","thisCountry","region","code","slug","regKey","getSubmitTarget","rawAge","pickUpDate","dropOffDate","agencyCode","affiliateIATA","passengers","getDOValues","getAUNZValues","getCheckValues","oCheckParams","$promptOptionPU","detach","$promptOptionDO","puPrefill","thisCity","doPrefill","handlePickupSelect","puCity","aDOcityCheck","$promptOptionDOcountry","$promptOptionDOcity","aDOlocs","aLocs","kLoc","doPrefillCountry","thisCountryKey","thisLoc","isObject","handleDropoffCountrySelect","puCountry","lic","oAUS","domestic","resolve","ST","titleBar","content","buildNoResultMarkup","HD","MSG","META","applyUI","width","failure","docFrag","isLiveServer","softKeyboardActive","navigatorUA","viewport","toggleKeyboardElem","features","elements","msViewportStyle","onShow","inputId","$scrollToInput","$overlay","touchM","block","inline","scrollY","onHide","_addClass","_removeClass","loaded","surveyResize","surveySpinnerOn","$looperControls","looperSelector","$thisLooper","$looperItems","last","viewType","maxSlides","arrSlides","$slideContainer","$carousel","draw","positionReadMoreLink","computeMaxSlides","gridItemClass","slidx","$carouselItem","$tr","$table","tdx","$rmLink","bottom","surveySort","$contents","arrReviews","perPage","asc","sort","ascending","arrSorted","oScores","review","score","created","union","arrPages","arrSet","$docFragment","dialogHandlers","$currentDialog","positionTarget","lastBodyY","overClick","maxSize","allTabWidth","$autoDialogs","dialogTriggered","manageScroll","infoTip","dialogClass","typeClass","draggable","resizable","minHeight","modal","autoupdate","standard","effect","addListeners","dialogopen","evtTarget","manageTabWidth","dialogclose","ariaLabel","cleanup","setPos","getPos","setDialogTriggered","isDialogTriggered","isManual","dialogHeight","uiDialog","maxHeight","max-height","dialogPos","easing","thisWidth","handleOverflow","$dialog","scrollTxt","oLang","TXT_SCROLL_DOWN","close","cloneContentEvents","addContent","buttonOpts","applyButtonOptions","renderButtonEntities","dialogSelector","$dialogButtons","btnIdx","thisBtn","btnTxt","hasOverflow","totalHeight","currentHeight","currDialog","stopBodyScroll","allowBodyScroll","destroy","addDialogHandler","contentID","dialogOpts","spinnerOpts","now","buildMarkup","termsData","buttons","oButtons","fill","$buttonPane","$buttonSet","$buttonsAll","$buttonFirst","$buttonLast","uiDialogButtonPane","uiButtonSet","before","after","paneClass","setClass","buttonsClass","firstButtonClass","lastButtonClass","firstButtonAttr","lastButtonAttr","exclusiveClose","uiDialogTitlebarClose","$tabList","total","allWidth","option","handleTabcordion","$tabcordionGroup","$tabcordionContentGroup","chain","map","compact","div","removeClasses","addClasses","complete","liveTimer","iTxd","_iTxd","right","int","bufferInt","$fn","timerInt","mouseX","mouseY","exitDirTest","oT","oR","oB","oL","idleTimes","_handleMouseMoveEvent","documentElement","_setInt","_setCoordinateProps","clientX","clientY","_resetIdleTimer","setInterval","_trackExit","innerWidth","innerHeight","_watchIdleTimer","exitDirection","_secondsToLive","_triggerCallback","_killIdleTimer","clearInterval","objDFD"],"mappings":"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"}