{"version":3,"sources":["chosenImage.jquery.js","jquery-ui.min.js","jquery.maskedinput.min.js","jquery.scrolling-tabs.js","_ga.js","account-details.js","communication-bar.js","container-timeline-journey.js","containerPlacement.js","datepicker.js","doubleAccordion.js","formLogin.js","global.js","navigation.js","notification.js","invoices.js","onboardingflow.js","tab-to-select.js","timelineJourney.js","update-password.js","videoModal.js"],"names":["$","fn","chosenImage","options","this","each","$select","imgMap","find","filter","text","i","attr","chosen","$chosen","next","addClass","cssObj","imgSrc","background-image","on","event","imgIndex","css","change","trigger","jQuery","t","define","amd","u","ui","version","a","n","e","toString","f","re","parse","parseInt","toFixed","space","l","Color","r","d","rgba","props","red","idx","type","green","blue","hsla","hue","saturation","lightness","p","byte","floor","max","percent","degrees","mod","s","support","h","g","_typeof","call","m","def","parseFloat","isNaN","Math","min","c","o","_rgba","toLowerCase","exec","cache","length","join","extend","M","transparent","style","cssText","backgroundColor","indexOf","alpha","split","prototype","jquery","nodeType","_default","slice","to","inArray","from","is","_space","push","pop","transition","blend","map","toRgbaString","toHslaString","round","toHexString","arguments","_hsla","empty","hook","cssHooks","set","parentNode","fx","step","colorInit","start","elem","end","pos","borderColor","expand","b","y","v","x","C","w","k","_","S","names","aqua","black","fuchsia","gray","lime","maroon","navy","olive","purple","silver","teal","white","yellow","j","B","I","H","ownerDocument","defaultView","getComputedStyle","currentStyle","replace","toUpperCase","T","effect","isPlainObject","speeds","duration","off","complete","W","effects","R","outerWidth","outerHeight","top","right","bottom","left","border","borderBottom","borderLeft","borderRight","borderTop","borderWidth","margin","padding","setAttr","addBack","add","prevObject","animateClass","speed","queue","children","el","diff","Deferred","resolve","animate","promise","when","apply","get","done","removeClass","remove","toggleClass","toggle","switchClass","expr","pseudos","animated","data","uiBackCompat","save","restore","setMode","createWrapper","parent","width","height","float","fontSize","background","document","activeElement","id","body","wrap","contains","position","zIndex","show","removeWrapper","replaceWith","mode","scaledDimensions","clipToBox","clip","unshift","splice","concat","dequeue","saveStyle","restoreStyle","removeData","getBaseline","createPlaceholder","marginTop","marginBottom","marginLeft","marginRight","test","nodeName","insertAfter","display","visibility","removePlaceholder","cleanUp","setTransition","cssUnit","shift","hide","cssClip","transfer","scrollTop","scrollLeft","offset","innerHeight","innerWidth","appendTo","className","easing","clipInit","pow","Sine","cos","PI","Circ","sqrt","Elastic","sin","Back","Bounce","exports","require","navigator","userAgent","mask","definitions","9","*","autoclear","dataName","placeholder","caret","setSelectionRange","createTextRange","collapse","moveEnd","moveStart","select","selectionStart","selectionEnd","selection","createRange","duplicate","begin","unmask","completed","RegExp","charAt","q","z","A","val","E","D","substring","one","prop","clearTimeout","setTimeout","which","keyCode","preventDefault","ctrlKey","altKey","metaKey","String","fromCharCode","proxy","window","sr","CONSTANTS","CONTINUOUS_SCROLLING_TIMEOUT_INTERVAL","SCROLL_OFFSET_FRACTION","DATA_KEY_DDMENU_MODIFIED","DATA_KEY_IS_MOUSEDOWN","CSS_CLASSES","ALLOW_SCROLLBAR","SCROLL_ARROW_DISABLE","SLIDE_DIRECTION","LEFT","RIGHT","EVENTS","CLICK","DROPDOWN_MENU_HIDE","DROPDOWN_MENU_SHOW","FORCE_REFRESH","MOUSEDOWN","MOUSEUP","WINDOW_RESIZE","TABS_READY","ElementsHandler","scrollingTabsControl","stc","EventHandlers","ScrollMovement","ScrollingTabsControl","$tabsContainer","movableContainerLeftPos","scrollArrowsVisible","scrollToTabEdge","disableScrollArrowsOnFullyScrolled","reverseScroll","widthMultiplier","scrollMovement","eventHandlers","elementsHandler","bind","func","obj","args","timeout","execAsap","threshold","initElements","setElementReferences","setEventListeners","refreshAllElementSizes","minPos","smv","scrollArrowsWereVisible","actionsTaken","didScrollToActiveTab","setElementWidths","setScrollArrowVisibility","getMinPos","scrollToActiveTab","isOnWindowResize","refreshScrollArrowsDisabledState","incrementMovableContainerRight","slideMovableContainerToLeftPos","$leftArrow","$rightArrow","isNavPills","$fixedContainer","prev","$movableContainer","$tabsUl","$tabsLiCollection","$slideLeftArrow","$slideRightArrow","$scrollArrows","$win","winWidth","scrollArrowsCombinedWidth","setFixedContainerWidth","setMovableContainerWidth","evh","ev","handleMousedownOnSlideMovContainerLeftArrow","handleMouseupOnSlideMovContainerLeftArrow","handleClickOnSlideMovContainerLeftArrow","handleMousedownOnSlideMovContainerRightArrow","handleMouseupOnSlideMovContainerRightArrow","handleClickOnSlideMovContainerRightArrow","tabClickHandler","smartresize","handleWindowResize","tabsContainerRect","getBoundingClientRect","fixedContainerWidth","setFixedContainerWidthForHiddenScrollArrows","setFixedContainerWidthForVisibleScrollArrows","$tabLi","movableContainerWidth","$li","totalMargin","shouldBeVisible","incrementMovableContainerLeft","continueSlideMovableContainerLeft","continueSlideMovableContainerRight","newWinWidth","decrementMovableContainerLeftPos","setMovableContainerLeftPosToTabEdge","disableSlideLeftArrow","disableSlideRightArrow","enableSlideLeftArrow","enableSlideRightArrow","getMovableContainerCssLeftVal","activeTabLeftPos","activeTabRightPos","rightArrowLeftPos","rightScrollArrowWidth","$activeTab","leftScrollArrowWidth","slideDirection","offscreenWidth","totalTabWidth","index","tabWidth","leftVal","performingSlideAnim","stop","newMinPos","initTabs","$scroller","readyCallback","attachTabContentToDomCallback","num","Number","tabElements","getElTabPaneForLi","getNewElNavTabs","getNewElScrollerElementWrappingNavTabsInstance","$navTabsInstance","settings","leftArrowContent","cssClassLeftArrow","rightArrowContent","cssClassRightArrow","append","getNewElTabAnchor","getNewElTabContent","getNewElTabLi","tab","propNames","forceActiveTab","$a","disabled","active","getNewElTabPane","$pane","paneId","html","content","title","tabUtils","didTabOrderChange","$currTabLis","updatedTabs","isTabOrderChanged","currDomIdx","newIdx","getTabIndexByPaneId","getIndexOfClosestEnabledTab","startIndex","lastIndex","closestIdx","incrementFromStartIndex","testIdx","eq","hasClass","storeDataOnLiEl","tabs","paneIdPropName","some","wrapNavTabsInstanceInScroller","$ddMenu","clone","navTabsInstanceData","scroller","hasTabClickHandler","ddMenuRightX","$ddParentTabLi","target","ddLiOffset","$currActiveTab","$selectedMenuItemAnc","$selectedMenuItemLi","$selectedMenuItemDropdownMenu","targetPaneId","not","tabsContainerMaxX","ddMenuTargetLeft","checkForTabsRemovedOrUpdated","refreshData","updatedTabsArray","isInitTabsRequired","$contentPane","origTabData","newTabData","tabLi","tabLiData","ignoreTabPanes","idxToMakeActive","$currTabContentPanes","refreshDataDrivenTabs","$container","$navTabs","$currTabContentPanesContainer","newTabsCollection","newTabPanesCollection","instanceData","scrtabs","forEach","isTabIdxPastCurrTabs","insertBefore","undefined","scrtabsData","methods","destroy","destroyPlugin","init","$targetEls","targetElsLastIndex","scrollingTabs","defaults","$newTargetEl","$targetElInstance","propPaneId","propTitle","propActive","propDisabled","propContent","hasTabContent","$tabContent","after","buildNavTabsAndTabContentForTargetElementInstance","enableSwiping","enableSwipingElement","$targetEl","isWrapperOnly","refresh","closest","removeAttr","parents","methodOrOptions","Array","error","dataLayer","_ga","dataLayerPush","pushEvent","mapOrderEventCode","moveLegCode","createLegToGaEvent","legId","oldOrders","newOrders","userId","orderId","oldQuoteId","containerId","oldLegId","oldScheduleDate","Containers","MoveLegs","oContainer","oLeg","MoveLegId","OrderId","QuoteId","ContainerId","ScheduledDate","newLegId","container","user_id","order_id","order_type","OrderType","order_date","OrderDate","quote_id","move_leg_details","move_leg_code","MoveLegType","delivery_details","delivery_date","delivery_location","postal_code","Address","PostalCode","city","City","state","State","container_size","containerSizeText","mapOrderContainerSize","ContainerType","confirm_placement","pickup_details","pickup_date","pickup_location","pushMoveLegSubmit","gaEvent","err","console","pushMoveLegError","errorType","errorLabel","errorSource","error_details","error_payload","error_type","error_label","error_source","panel","edit","cancel","forceHide","slidePanel","slideUp","slideToggle","siblings","changeText","parentsUntil","linkID","link","linkText","buttonID","paymentID","primaryCard","reset","accountCancelInit","timerIncrement","idleTime","idleTimeCount","clearInterval","idleInterval","idleClose","screenTop","windowWidth","commBar","communicationBarPos","button","panelClose","setInterval","mousemove","keypress","stopPropagation","blur","focus","scrollTo","click","containerTimelineJourneyVM","assignContainerTimelineJourneyVM","ko","observableArray","Steps","enableprev","observable","enablenext","formatDate","date","Date","month","getMonth","day","getDate","year","getFullYear","formatFinanceDate","initContainerTimelineJourney","applyBindings","getElementById","refreshContainers","flag","customerOrders","Orders","generateContainers","feather","tooltip","addDatePicker","enableContainerPlacement","enableSubmitIfValid","setupCityStateSubmit","setupAddressValidation","setupMoveLegSubmit","setupGoogleApiAddressAutocomplete","datepicker","containerDatasourceId","ko_Container","self","quoteId","price","Price","orderDateFormatted","OrderDateFormatted","isCityService","IsCityService","legNumberLabel","OrderNumberLabel","containerType","etaDays","ETADays","etaDaysText","ETADaysText","containerImg","ContainerImageSrc","containerImgAlt","ContainerImageAlt","moveLegs","togglePrevText","toggleNextText","showUpcomingText","ShowUpcomingText","showPreviousText","ShowPreviousText","hideUpcomingText","HideUpcomingText","hidePreviousText","HidePreviousText","moveLegTemplate","moveLeg","legKnockoutTemplateName","toggleShowHide","visibleMoveLegs","currentTarget","first","prevAll","last","nextAll","legFormVisible","legFormType","ko_Legs","leg","_this","MoveLegKnockoutTemplateName","legEta","ETA","legStatus","MoveLegStatus","legType","warehouseCode","WarehouseCode","legScheduledDate","legScheduledDateFormatted","ScheduledDateFormatted","legTransitDays","TransitDays","legActive","isActive","legNextStep","isNextStep","legTitle","MoveLegTitle","legDescription","MoveLegDescription","legDateLabel","MoveLegDateLabel","legPickupDetails","MovePickupDetails","legToolTip","MoveToolTip","legWindowLabel","MoveLegWindowLabel","legAddressLabel","MoveLegAddressLabel","legDeliveryAddress","legAvailabilityOriginZip","AvailabilityOriginZip","legAvailabilityOriginCountry","AvailabilityOriginCountry","legAvailabilityDestinationZip","AvailabilityDestinationZip","legAvailabilityDestinationCountry","AvailabilityDestinationCountry","legEdit","isEdit","legCityService","legInlineForm","isInlineForm","legScheduleForm","isScheduleForm","legPodsTip","isPodsTip","legContainerPlacement","isContainerPlacement","editDetailsHelpText","EditDetailsHelpText","loadFinance","LoadFinance","financeTag","loadPaymentAmountWidget","acornParameters","loanAmount","merCustomerId","UserId","merRefId","merOrderId","merDeliveryDate","hideWidget","utm_source","docSource","User","personalInfo","firstname","FirstName","lastName","LastName","email","Email","phonenumber","PhoneNumber","streetaddress","apartment","Apartment","zipcode","Zipcode","setAcornWidget","podsTipIconSrc","PodsTip","IconSrc","podsTipIconAlt","IconAlt","podsTipTitle","TitleText","podsTipDescription","HelpText","nextStepTitle","NextStepTitle","nextStepDescription","NextStepDescription","nextStepCtaText","NextStepCtaText","editDetailsCtaText","EditDetailsCtaText","scheduleTitle","ScheduleTitle","scheduleDescription","ScheduleDescription","scheduleLocationTitle","ScheduleLocationTitle","scheduleDateLabel","ScheduleDateLabel","scheduleDateInformation","ScheduleDateInformation","scheduleConfirmButtonLabel","ScheduleConfirmButtonLabel","scheduleCancelButtonLabel","ScheduleCancelButtonLabel","scheduleDateHelperLabel","ScheduleDateHelperLabel","additionalChargeConfirmationMessageText","AdditionalChargeConfirmationMessageText","refundConfirmationMessageText","RefundConfirmationMessageText","confirmationButtonText","ConfirmationButtonText","disableWindow","DisableWindow","reschedulingWindow","ReschedulingWindow","AccessContainerDateHeader","accessContainerDateHeader","orText","OrText","cancelVisitCtaText","CancelVisitCtaText","nevermindCancelVisitCtaText","NevermindCancelVisitCtaText","previousScheduledDateFormatted","PreviousScheduledDateFormatted","previousLegDateLabel","PreviousLegDateLabel","schedulePreviousLegDateLabel","SchedulePreviousLegDateLabel","hasParentAction","scheduleLocationDescription","ScheduleLocationDescription","postalCodeLabel","PostalCodeLabel","postalCodeValidationText","PostalCodeValidationText","addressEmptyValidationText","AddressEmptyValidationText","addressOutsideLocalMarketValidationText","AddressOutsideLocalMarketValidationText","addressOutsideLocalMarketErrorText","AddressOutsideLocalMarketErrorText","postalCodeOutsideServiceAreaValidationText","PostalCodeOutsideServiceAreaValidationText","streetAddress1Label","StreetAddress1Label","streetAddress2Label","StreetAddress2Label","optionalLabel","OptionalLabel","cityLabel","CityLabel","stateLabel","StateLabel","dateLabel","DateLabel","dateInformation","DateInformation","confirmButtonLabel","ConfirmButtonLabel","cancelButtonLabel","CancelButtonLabel","dateHelperLabel","DateHelperLabel","legAddress1","Address1","legAddress2","Address2","legCity","legState","legPostalCode","legCountry","Country","schedulingRuleCanSchedule","SchedulingRule","CanSchedule","schedulingRuleStartDate","ScheduleStart","schedulingRuleEndDate","ScheduleEnd","icpTitle","ContainerPlacement","Title","icpHelpText","icpIconId","IconId","icpConfirmedMessage","ConfirmedMessage","icpImageAlt","ImageAlt","icpImageUrl","ImageUrl","icpCtaText","CtaText","icpValidationMessage","ValidationMessage","Action1MoveLeg","action1CtaText","Action1CtaText","action1MoveLeg","parentActionMoveLeg","toggleAction1","targetLeg","Action2MoveLeg","action2CtaText","Action2CtaText","action2MoveLeg","toggleAction2","handleSubmitActionableForm","log","submitActionableForm","modal","actionableState","legStatusIcon","computed","toggleForm","dataset","formType","inProgress","$parent","ko_ContainerPlacement","containers","ModalTitle","CurrentStepId","PreviousStepId","QuestionText","ImageSrc","BackButtonText","NextButtonText","FinishButtonText","isRadioOnly","IsRadioOnly","isImageAnswers","IsImageAnswers","IsPodsTip","isTextArea","IsTextArea","isLastStep","IsLastStep","Answers","PodsTipIcon","PodsTipIconAlt","PodsTipTitle","PodsTipHelptext","isContainerReviewPanel","IsContainerReviewPanel","ContainerReviewPanel","ContainerReviewPanelSubTitle","SubTitle","ContainerReviewPanelType","Type","ContainerReviewPanelPlacementTitle","PlacementTitle","ContainerReviewPanelPlacementImg","PlacementImg","ContainerReviewPanelPlacementImgAlt","PlacementImgAlt","ContainerReviewPanelInstructionTitle","InstructionTitle","ContainerReviewPanelInstructionText","InstructionText","isMultiselectPanel","IsMultiselectPanel","MultiselectPanel","ZipRegulations","enablefinish","TotalSteps","CurrentQuestion","Width","progress","currentStep","generateContainerPlacement","placeObj","place","orderObj","removeAll","oOrder","lastMoveLeg","currentleg","nextMoveLeg","handleMoveLegSubmissionResponse","confirmationMessageTag","errorContainer","Success","RequiresConfirmation","PriceDifference","NotificationTitle","FriendlyErrorMessage","ExceptionMessage","finishStepCheck","showNotification","submitScheduleForm","clickTarget","requestedDate","isCancelLeg","ajax","url","contentType","dataType","JSON","stringify","ContainerDatasourceId","RequestedDate","IsCancelLeg","SiteIdentity","beforeSend","success","textStatus","errorThrown","submitInlineForm","form","address1","address2","zipCode","countryCode","ServiceAddress","finalArray","populateCities","cities","regionCode","citiesDropdown","stateField","regionCodeField","element","postalCodeElement","disableContainerPlacement","resetDatePicker","isValidZip","invalidateContainerPlacement","resetContainerPlacementButton","areInTheSameServiceArea","card","result","Response","postalCode","Cities","RegionCode","addressLine1Controls","addressLine1","addressLine2","fields","autocomplete","moveLegCard","moveLegId","field","pca","fieldMode","POPULATE","google","createAutocomplete","addListener","fillAddress","debug","ctlAddress","cntrl","querySelector","maps","places","Autocomplete","componentRestrictions","country","types","getPlace","_step","streetNumber","streetName","postcode","line1ControlId","postalCodeControlId","_iterator","_createForOfIteratorHelper","ctl","value","_step2","currentPostalCode","_iterator2","address_components","shipComp","long_name","short_name","Boolean","receiveAcornProcessStatus","messageDataRec","receivedData","detail","podsAction","acornProcessStatus","FinanceSettings","financeSetting","Status","Body","SurveyCode","merAction","lenderNameSelected","acornPostMessageKind","addEventListener","delayTimelineInit","initContainerPlacement","initTimelineJourney","previousStepValue","currentAnswer","postStepID","postAnswerVal","postCurrentStepId","postCurrentAnswerVal","postZipVal","maxLength","userAnswers","BackstepID","backProgress","isLocalEnv","location","hostname","ajaxRequest","URL","UsersAnswersObject","StepID","AnswerVal","ZipVal","currentstate","keyup","$checkbox","textlen","address","validDateBtnEnabler","previousStepId","ZipRegulation","getId","stepID","datePickerStartDate","datePickerEndDate","previousLegScheduledDate","nextLegScheduledDate","lastLegScheduledDate","currentLegScheduledDate","postDate","originCountryCode","destCountryCode","originZip","destZip","serviceCode","xhr","xhrTimer","earliestAvailableDate","setDate","latestPossibleDate","setFullYear","getAvailableDates","datePicker","changeMonthEventArgs","abort","showLoadingMessage","callAvailability","OriginCountryCode","OriginZip","DestinationCountryCode","DestinationZip","ReferenceDate","ServiceCode","dateValue","disabledDates","item","IsAvailable","DateTimeFormatted","moveLegDate","UpdateCalendarDates","hideLoadingMessage","handleDatePickerErrorResponse","errorMessage","setDatePickerReferenceDates","datepickerTarget","enforceWindow","addDays","datepickerWindow","rescheduledStartDate","dateArray","startDate","endDate","tomorrow","scheduleStartDate","nextDate","update","getPreviousRawScheduledDate","currentCard","rawScheduledDate","previousCard","getPreviousScheduledDate","previousCardDate","getNextRawScheduledDate","nextCard","getPreviousTransitDaysText","transitDaysText","getAvailabilityFields","rawCurrentLegDate","rawNextLegDate","transitDays","selectedDate","configureNewDatePicker","datePickerParams","format","language","defaultViewDate","minDate","autoclose","maxViewMode","disableEntry","updateViewDate","orientation","daysOfWeekDisabled","configureNewBaseDatePicker","addBaseDatePicker","days","accordion","formLoginAll","formLoginUser","formLoginForgotPin","validate","highlight","errorClass","validClass","unhighlight","errorPlacement","checkUsername","isNum","fieldUsername","fieldSubmit","maxlength","minlength","valid","stackLegs","wrapAll","experienceEditorUtilities","Sitecore","PageModes","PageEditor","resizeend","rtime","movePayment","moveTo","detach","isMobile","setSessionTimeout","inactivityTimeout","logout","globalTimeoutOptions","loginUrl","videoSrcDesktop","toggleSwitch","clientId","sessionId","substr","modalId","href","disable_search","video","videoSrcTablet","onresize","bootstrapVersion","resize","has","ajaxComplete","globalGaSettings","gtmId","urlParams","URLSearchParams","search","client_id","session_id","cookies","getCookie","cookieName","match","cookie","setCookie","cookieValue","expiresInHours","expiresString","setTime","getTime","toUTCString","attachLogout","redirectUrl","logoutUrl","ErrorMessage","alert","showWeightNotification","notification","Data","CSSClass","JavascriptCallbackMethodName","Icon","NotificationText","closeWeightNotification","description","leftcta1","leftcta2","rightcta","cssclass","titleDiv","descDiv","cta1Div","cta2Div","documentElement","invoicesPaymentForm","invoicePaymentAmount","invoicePaymentMethod","invoicePaymentMethodCancel","validator","setDefaults","ignore","input","dropdown","logoutDestination","logoutDestinationUrl","mainMenu","countryMenu","subMenu","desktopAccount","mobileNav","backBtn","mouseenter","mouseleave","notificationClose","callbackMethodName","customerNotifications","setCookieOnboarding","name","expires","pathname","onboarding","onload","hashText","anchoredTab","$tabButtonItem","$tabSelect","$tabContents","activeClass","targetSelectNum","hash","scheduleLater","revealContent","toReveal","tag","confirmationButtonTag","setSubmitBtn","flagOldPassword","flagNewPassword","flagConfirmPassword","lengthRegex","lowercaseRegex","uppercaseRegex","specialCharRegex","passwordElem","passwordVal","validNumber","validSmallLetter","validBigLetter","validSpecialChars","passwordNew","passwordConfirm","newPassword","oldPassword","doneResponse","passwordSectionLink","responseCode","message","mainMessage","helperMessage","fail","failResponse","videoModal","loader","videoid","videoFile","opacity","hiddenVideos","count","shownVideos"],"mappings":"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","file":"main.min.js","sourcesContent":["/*\r\n * Chosen jQuery plugin to add an image to the dropdown items.\r\n */\r\n(function($) {\r\n $.fn.chosenImage = function(options) {\r\n return this.each(function() {\r\n var $select = $(this);\r\n var imgMap = {};\r\n\r\n // 1. Retrieve img-src from data attribute and build object of image sources for each list item.\r\n $select.find('option').filter(function(){\r\n return $(this).text();\r\n }).each(function(i) {\r\n imgMap[i] = $(this).attr('data-img-src');\r\n });\r\n\r\n // 2. Execute chosen plugin and get the newly created chosen container.\r\n $select.chosen(options);\r\n var $chosen = $select.next('.chosen-container').addClass('chosenImage-container');\r\n\r\n // 3. Style lis with image sources.\r\n $chosen.on('click.chosen, mousedown.chosen, keyup.chosen', function(event){\r\n $chosen.find('.chosen-results li').each(function() {\r\n var imgIndex = $(this).attr('data-option-array-index');\r\n $(this).css(cssObj(imgMap[imgIndex]));\r\n });\r\n });\r\n\r\n // 4. Change image on chosen selected element when form changes.\r\n $select.change(function() {\r\n var imgSrc = $select.find('option:selected').attr('data-img-src') || '';\r\n $chosen.find('.chosen-single span').css(cssObj(imgSrc));\r\n });\r\n $select.trigger('change');\r\n\r\n // Utilties\r\n function cssObj(imgSrc) {\r\n var bgImg = (imgSrc) ? 'url(' + imgSrc + ')' : 'none';\r\n return { 'background-image' : bgImg };\r\n }\r\n });\r\n };\r\n})(jQuery);\r\n","/*! jQuery UI - v1.13.1 - 2022-03-08\r\n* http://jqueryui.com\r\n* Includes: effect.js\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n\r\n!function(t){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)}(function(u){\"use strict\";u.ui=u.ui||{};u.ui.version=\"1.13.1\";var a=u,n={},e=n.toString,f=/^([\\-+])=\\s*(\\d+\\.?\\d*)/,t=[{re:/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16),t[4]?(parseInt(t[4],16)/255).toFixed(2):1]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16),t[4]?(parseInt(t[4]+t[4],16)/255).toFixed(2):1]}},{re:/hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,space:\"hsla\",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=a.Color=function(t,e,n,r){return new a.Color.fn.parse(t,e,n,r)},d={rgba:{props:{red:{idx:0,type:\"byte\"},green:{idx:1,type:\"byte\"},blue:{idx:2,type:\"byte\"}}},hsla:{props:{hue:{idx:0,type:\"degrees\"},saturation:{idx:1,type:\"percent\"},lightness:{idx:2,type:\"percent\"}}}},p={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},s=l.support={},r=a(\"

\")[0],h=a.each;function g(t){return null==t?t+\"\":\"object\"==typeof t?n[e.call(t)]||\"object\":typeof t}function m(t,e,n){var r=p[e.type]||{};return null==t?n||!e.def?null:e.def:(t=r.floor?~~t:parseFloat(t),isNaN(t)?e.def:r.mod?(t+r.mod)%r.mod:Math.min(r.max,Math.max(0,t)))}function c(r){var o=l(),i=o._rgba=[];return r=r.toLowerCase(),h(t,function(t,e){var n=e.re.exec(r),n=n&&e.parse(n),e=e.space||\"rgba\";if(n)return n=o[e](n),o[d[e].cache]=n[d[e].cache],i=o._rgba=n._rgba,!1}),i.length?(\"0,0,0,0\"===i.join()&&a.extend(i,M.transparent),o):M[r]}function o(t,e,n){return 6*(n=(n+1)%1)<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}r.style.cssText=\"background-color:rgba(1,1,1,.5)\",s.rgba=-1i.mod/2?r+=i.mod:r-o>i.mod/2&&(r-=i.mod)),c[n]=m((o-r)*s+r,e)))}),this[e](c)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),n=e.pop(),r=l(t)._rgba;return l(a.map(e,function(t,e){return(1-n)*r[e]+n*t}))},toRgbaString:function(){var t=\"rgba(\",e=a.map(this._rgba,function(t,e){return null!=t?t:2\").addClass(\"ui-effects-wrapper\").css({fontSize:\"100%\",background:\"transparent\",border:\"none\",margin:0,padding:0}),e={width:n.width(),height:n.height()},o=document.activeElement;try{o.id}catch(t){o=document.body}return n.wrap(t),n[0]!==o&&!u.contains(n[0],o)||u(o).trigger(\"focus\"),t=n.parent(),\"static\"===n.css(\"position\")?(t.css({position:\"relative\"}),n.css({position:\"relative\"})):(u.extend(r,{position:n.css(\"position\"),zIndex:n.css(\"z-index\")}),u.each([\"top\",\"left\",\"bottom\",\"right\"],function(t,e){r[e]=n.css(e),isNaN(parseInt(r[e],10))&&(r[e]=\"auto\")}),n.css({position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\"})),n.css(e),t.css(r).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(\".ui-effects-wrapper\")&&(t.parent().replaceWith(t),t[0]!==e&&!u.contains(t[0],e)||u(e).trigger(\"focus\")),t}}),u.extend(u.effects,{version:\"1.13.1\",define:function(t,e,n){return n||(n=e,e=\"effect\"),u.effects.effect[t]=n,u.effects.effect[t].mode=e,n},scaledDimensions:function(t,e,n){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var r=\"horizontal\"!==n?(e||100)/100:1,e=\"vertical\"!==n?(e||100)/100:1;return{height:t.height()*e,width:t.width()*r,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*r}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,n){var r=t.queue();1\").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css(\"display\"))?\"inline-block\":\"block\",visibility:\"hidden\",marginTop:t.css(\"marginTop\"),marginBottom:t.css(\"marginBottom\"),marginLeft:t.css(\"marginLeft\"),marginRight:t.css(\"marginRight\"),float:t.css(\"float\")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass(\"ui-effects-placeholder\"),t.data(j+\"placeholder\",e)),t.css({position:n,left:r.left,top:r.top}),e},removePlaceholder:function(t){var e=j+\"placeholder\",n=t.data(e);n&&(n.remove(),t.removeData(e))},cleanUp:function(t){u.effects.restoreStyle(t),u.effects.removePlaceholder(t)},setTransition:function(r,t,o,i){return i=i||{},u.each(t,function(t,e){var n=r.cssUnit(e);0\");c.appendTo(\"body\").addClass(t.className).css({top:r.top-s,left:r.left-a,height:n.innerHeight(),width:n.innerWidth(),position:o?\"fixed\":\"absolute\"}).animate(i,t.duration,t.easing,function(){c.remove(),\"function\"==typeof e&&e()})}}),u.fx.step.clip=function(t){t.clipInit||(t.start=u(t.elem).cssClip(),\"string\"==typeof t.end&&(t.end=R(t.end,t.elem)),t.clipInit=!0),u(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},S={},u.each([\"Quad\",\"Cubic\",\"Quart\",\"Quint\",\"Expo\"],function(e,t){S[t]=function(t){return Math.pow(t,e+2)}}),u.extend(S,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,n=4;t<((e=Math.pow(2,--n))-1)/11;);return 1/Math.pow(4,3-n)-7.5625*Math.pow((3*e-2)/22-t,2)}}),u.each(S,function(t,e){u.easing[\"easeIn\"+t]=e,u.easing[\"easeOut\"+t]=function(t){return 1-e(1-t)},u.easing[\"easeInOut\"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});u.effects});\r\n","/*\r\n jQuery Masked Input Plugin\r\n Copyright (c) 2007 - 2015 Josh Bush (digitalbush.com)\r\n Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)\r\n Version: 1.4.1\r\n*/\r\n!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],a):a(\"object\"==typeof exports?require(\"jquery\"):jQuery)}(function(a){var b,c=navigator.userAgent,d=/iphone/i.test(c),e=/chrome/i.test(c),f=/android/i.test(c);a.mask={definitions:{9:\"[0-9]\",a:\"[A-Za-z]\",\"*\":\"[A-Za-z0-9]\"},autoclear:!0,dataName:\"rawMaskFn\",placeholder:\"_\"},a.fn.extend({caret:function(a,b){var c;if(0!==this.length&&!this.is(\":hidden\"))return\"number\"==typeof a?(b=\"number\"==typeof b?b:a,this.each(function(){this.setSelectionRange?this.setSelectionRange(a,b):this.createTextRange&&(c=this.createTextRange(),c.collapse(!0),c.moveEnd(\"character\",b),c.moveStart(\"character\",a),c.select())})):(this[0].setSelectionRange?(a=this[0].selectionStart,b=this[0].selectionEnd):document.selection&&document.selection.createRange&&(c=document.selection.createRange(),a=0-c.duplicate().moveStart(\"character\",-1e5),b=a+c.text.length),{begin:a,end:b})},unmask:function(){return this.trigger(\"unmask\")},mask:function(c,g){var h,i,j,k,l,m,n,o;if(!c&&this.length>0){h=a(this[0]);var p=h.data(a.mask.dataName);return p?p():void 0}return g=a.extend({autoclear:a.mask.autoclear,placeholder:a.mask.placeholder,completed:null},g),i=a.mask.definitions,j=[],k=n=c.length,l=null,a.each(c.split(\"\"),function(a,b){\"?\"==b?(n--,k=a):i[b]?(j.push(new RegExp(i[b])),null===l&&(l=j.length-1),k>a&&(m=j.length-1)):j.push(null)}),this.trigger(\"unmask\").each(function(){function h(){if(g.completed){for(var a=l;m>=a;a++)if(j[a]&&C[a]===p(a))return;g.completed.call(B)}}function p(a){return g.placeholder.charAt(a=0&&!j[a];);return a}function s(a,b){var c,d;if(!(0>a)){for(c=a,d=q(b);n>c;c++)if(j[c]){if(!(n>d&&j[c].test(C[d])))break;C[c]=C[d],C[d]=p(d),d=q(d)}z(),B.caret(Math.max(l,a))}}function t(a){var b,c,d,e;for(b=a,c=p(a);n>b;b++)if(j[b]){if(d=q(b),e=C[b],C[b]=c,!(n>d&&j[d].test(e)))break;c=e}}function u(){var a=B.val(),b=B.caret();if(o&&o.length&&o.length>a.length){for(A(!0);b.begin>0&&!j[b.begin-1];)b.begin--;if(0===b.begin)for(;b.beging)&&g&&13!==g){if(i.end-i.begin!==0&&(y(i.begin,i.end),s(i.begin,i.end-1)),c=q(i.begin-1),n>c&&(d=String.fromCharCode(g),j[c].test(d))){if(t(c),C[c]=d,z(),e=q(c),f){var k=function(){a.proxy(a.fn.caret,B,e)()};setTimeout(k,0)}else B.caret(e);i.begin<=m&&h()}b.preventDefault()}}}function y(a,b){var c;for(c=a;b>c&&n>c;c++)j[c]&&(C[c]=p(c))}function z(){B.val(C.join(\"\"))}function A(a){var b,c,d,e=B.val(),f=-1;for(b=0,d=0;n>b;b++)if(j[b]){for(C[b]=p(b);d++e.length){y(b+1,n);break}}else C[b]===e.charAt(d)&&d++,k>b&&(f=b);return a?z():k>f+1?g.autoclear||C.join(\"\")===D?(B.val()&&B.val(\"\"),y(0,n)):z():(z(),B.val(B.val().substring(0,f+1))),k?b:l}var B=a(this),C=a.map(c.split(\"\"),function(a,b){return\"?\"!=a?i[a]?p(b):a:void 0}),D=C.join(\"\"),E=B.val();B.data(a.mask.dataName,function(){return a.map(C,function(a,b){return j[b]&&a!=p(b)?a:null}).join(\"\")}),B.one(\"unmask\",function(){B.off(\".mask\").removeData(a.mask.dataName)}).on(\"focus.mask\",function(){if(!B.prop(\"readonly\")){clearTimeout(b);var a;E=B.val(),a=A(),b=setTimeout(function(){B.get(0)===document.activeElement&&(z(),a==c.replace(\"?\",\"\").length?B.caret(0,a):B.caret(a))},10)}}).on(\"blur.mask\",v).on(\"keydown.mask\",w).on(\"keypress.mask\",x).on(\"input.mask paste.mask\",function(){B.prop(\"readonly\")||setTimeout(function(){var a=A(!0);B.caret(a),h()},0)}),e&&f&&B.off(\"input.mask\").on(\"input.mask\",u),A()})}})});\r\n","/**\r\n * jquery-bootstrap-scrolling-tabs\r\n * @version v1.2.2\r\n * @link https://github.com/mikejacobson/jquery-bootstrap-scrolling-tabs\r\n * @author Mike Jacobson \r\n * @license MIT License, http://www.opensource.org/licenses/MIT\r\n */\r\n\r\n/**\r\n * jQuery plugin version of Angular directive angular-bootstrap-scrolling-tabs:\r\n * https://github.com/mikejacobson/angular-bootstrap-scrolling-tabs\r\n *\r\n * Usage:\r\n *\r\n * Use case #1: HTML-defined tabs\r\n * ------------------------------\r\n * Demo: http://plnkr.co/edit/thyD0grCxIjyU4PoTt4x?p=preview\r\n *\r\n * Sample HTML:\r\n *\r\n * \r\n *

\r\n *\r\n * \r\n *
\r\n *
Tab 1 content...
\r\n *
Tab 2 content...
\r\n *
Tab 3 content...
\r\n *
Tab 4 content...
\r\n *
\r\n *\r\n *\r\n * JavaScript:\r\n *\r\n * $('.nav-tabs').scrollingTabs();\r\n *\r\n *\r\n * Use Case #2: Data-driven tabs\r\n * -----------------------------\r\n * Demo: http://plnkr.co/edit/MWBjLnTvJeetjU3NEimg?p=preview\r\n *\r\n * Sample HTML:\r\n *\r\n * \r\n *
\r\n *\r\n *\r\n * JavaScript:\r\n *\r\n * $('#tabs-inside-here').scrollingTabs({\r\n * tabs: tabs, // required\r\n * propPaneId: 'paneId', // optional\r\n * propTitle: 'title', // optional\r\n * propActive: 'active', // optional\r\n * propDisabled: 'disabled', // optional\r\n * propContent: 'content', // optional\r\n * ignoreTabPanes: false, // optional\r\n * scrollToTabEdge: false, // optional\r\n * disableScrollArrowsOnFullyScrolled: false, // optional\r\n * reverseScroll: false // optional\r\n * });\r\n *\r\n * Settings/Options:\r\n *\r\n * tabs: tabs data array\r\n * prop*: name of your tab object's property name that\r\n * corresponds to that required tab property if\r\n * your property name is different than the\r\n * standard name (paneId, title, etc.)\r\n * ignoreTabPanes: relevant for data-driven tabs only--set to true if\r\n * you want the plugin to only touch the tabs\r\n * and to not generate the tab pane elements\r\n * that go in .tab-content. By default, the plugin\r\n * will generate the tab panes based on the content\r\n * property in your tab data, if a content property\r\n * is present.\r\n * scrollToTabEdge: set to true if you want to force full-width tabs\r\n * to display at the left scroll arrow. i.e., if the\r\n * scrolling stops with only half a tab showing,\r\n * it will snap the tab to its edge so the full tab\r\n * shows.\r\n * disableScrollArrowsOnFullyScrolled:\r\n * set to true if you want the left scroll arrow to\r\n * disable when the tabs are scrolled fully left,\r\n * and the right scroll arrow to disable when the tabs\r\n * are scrolled fully right.\r\n * reverseScroll:\r\n * set to true if you want the left scroll arrow to\r\n * slide the tabs left instead of right, and the right\r\n * scroll arrow to slide the tabs right.\r\n * enableSwiping:\r\n * set to true if you want to enable horizontal swiping\r\n * for touch screens. This simply enables horizontal\r\n * scrolling--and therefore the horizontal scrollbar--for\r\n * the tabs. For WebKit-based browsers, the scrollbar\r\n * will then be hidden via CSS (because the plugin will\r\n * add CSS class scrtabs-allow-scrollbar to the parent\r\n * element) but for browsers that don't support\r\n * ::-webkit-scrollbar, the scrollbar will be visible.\r\n * widthMultiplier:\r\n * set to a value less than 1 if you want the tabs\r\n * container to be less than the full width of its\r\n * parent element. For example, set it to 0.5 if you\r\n * want the tabs container to be half the width of\r\n * its parent.\r\n * tabClickHandler:\r\n * a callback function to execute any time a tab is clicked.\r\n * The function is simply passed as the event handler\r\n * to jQuery's .on(), so the function will receive\r\n * the jQuery event as an argument, and the 'this'\r\n * inside the function will be the clicked tab's anchor\r\n * element.\r\n * cssClassLeftArrow, cssClassRightArrow:\r\n * custom values for the class attributes for the\r\n * left and right scroll arrows. The defaults are\r\n * 'glyphicon glyphicon-chevron-left' and\r\n * 'glyphicon glyphicon-chevron-right'.\r\n * Using different icons might require you to add\r\n * custom styling to the arrows to position the icons\r\n * correctly; the arrows can be targeted with these\r\n * selectors:\r\n * .scrtabs-tab-scroll-arrow\r\n * .scrtabs-tab-scroll-arrow-left\r\n * .scrtabs-tab-scroll-arrow-right\r\n * leftArrowContent, rightArrowContent:\r\n * custom HTML string for the left and right scroll\r\n * arrows. This will override any custom cssClassLeftArrow\r\n * and cssClassRightArrow settings.\r\n * For example, if you wanted to use svg icons, you\r\n * could set them like so:\r\n *\r\n * leftArrowContent: [\r\n * '
',\r\n * ' ',\r\n * ' ',\r\n * ' ',\r\n * '
'\r\n * ].join(''),\r\n * rightArrowContent: [\r\n * '
',\r\n * ' ',\r\n * ' ',\r\n * ' ',\r\n * '
'\r\n * ].join('')\r\n *\r\n * You would then need to add some CSS to make them\r\n * work correctly if you don't give them the\r\n * default scrtabs-tab-scroll-arrow classes.\r\n * This plunk shows it working with svg icons:\r\n * http://plnkr.co/edit/2MdZCAnLyeU40shxaol3?p=preview\r\n *\r\n *\r\n * On tabs data change:\r\n *\r\n * $('#tabs-inside-here').scrollingTabs('refresh');\r\n *\r\n * On tabs data change, if you want the active tab to be set based on\r\n * the updated tabs data (i.e., you want to override the current\r\n * active tab setting selected by the user), for example, if you\r\n * added a new tab and you want it to be the active tab:\r\n *\r\n * $('#tabs-inside-here').scrollingTabs('refresh', {\r\n * forceActiveTab: true\r\n * });\r\n *\r\n * Any options that can be passed into the plugin can be set on the\r\n * plugin's 'defaults' object instead so you don't have to pass them in:\r\n *\r\n * $.fn.scrollingTabs.defaults.tabs = tabs;\r\n * $.fn.scrollingTabs.defaults.forceActiveTab = true;\r\n * $.fn.scrollingTabs.defaults.scrollToTabEdge = true;\r\n * $.fn.scrollingTabs.defaults.disableScrollArrowsOnFullyScrolled = true;\r\n * $.fn.scrollingTabs.defaults.reverseScroll = true;\r\n * $.fn.scrollingTabs.defaults.widthMultiplier = 0.5;\r\n * $.fn.scrollingTabs.defaults.tabClickHandler = function () { };\r\n *\r\n *\r\n * Methods\r\n * -----------------------------\r\n * - refresh\r\n * On window resize, the tabs should refresh themselves, but to force a refresh:\r\n *\r\n * $('.nav-tabs').scrollingTabs('refresh');\r\n *\r\n * - scrollToActiveTab\r\n * On window resize, the active tab will automatically be scrolled to\r\n * if it ends up offscreen, but you can also programmatically force a\r\n * scroll to the active tab any time (if, for example, you're\r\n * programmatically setting the active tab) by calling the\r\n * 'scrollToActiveTab' method:\r\n *\r\n * $('.nav-tabs').scrollingTabs('scrollToActiveTab');\r\n *\r\n *\r\n * Events\r\n * -----------------------------\r\n * The plugin triggers event 'ready.scrtabs' when the tabs have\r\n * been wrapped in the scroller and are ready for viewing:\r\n *\r\n * $('.nav-tabs')\r\n * .scrollingTabs()\r\n * .on('ready.scrtabs', function() {\r\n * // tabs ready, do my other stuff...\r\n * });\r\n *\r\n * $('#tabs-inside-here')\r\n * .scrollingTabs({ tabs: tabs })\r\n * .on('ready.scrtabs', function() {\r\n * // tabs ready, do my other stuff...\r\n * });\r\n *\r\n *\r\n * Destroying\r\n * -----------------------------\r\n * To destroy:\r\n *\r\n * $('.nav-tabs').scrollingTabs('destroy');\r\n *\r\n * $('#tabs-inside-here').scrollingTabs('destroy');\r\n *\r\n * If you were wrapping markup, the markup will be restored; if your tabs\r\n * were data-driven, the tabs will be destroyed along with the plugin.\r\n *\r\n */\r\n\r\n ;(function ($, window) {\r\n 'use strict';\r\n\r\n var CONSTANTS = {\r\n CONTINUOUS_SCROLLING_TIMEOUT_INTERVAL: 50, // timeout interval for repeatedly moving the tabs container\r\n // by one increment while the mouse is held down--decrease to\r\n // make mousedown continous scrolling faster\r\n SCROLL_OFFSET_FRACTION: 6, // each click moves the container this fraction of the fixed container--decrease\r\n // to make the tabs scroll farther per click\r\n\r\n DATA_KEY_DDMENU_MODIFIED: 'scrtabsddmenumodified',\r\n DATA_KEY_IS_MOUSEDOWN: 'scrtabsismousedown',\r\n\r\n CSS_CLASSES: {\r\n ALLOW_SCROLLBAR: 'scrtabs-allow-scrollbar',\r\n SCROLL_ARROW_DISABLE: 'scrtabs-disable'\r\n },\r\n\r\n SLIDE_DIRECTION: {\r\n LEFT: 1,\r\n RIGHT: 2\r\n },\r\n\r\n EVENTS: {\r\n CLICK: 'click.scrtabs',\r\n DROPDOWN_MENU_HIDE: 'hide.bs.dropdown.scrtabs',\r\n DROPDOWN_MENU_SHOW: 'show.bs.dropdown.scrtabs',\r\n FORCE_REFRESH: 'forcerefresh.scrtabs',\r\n MOUSEDOWN: 'mousedown.scrtabs touchstart.scrtabs',\r\n MOUSEUP: 'mouseup.scrtabs touchend.scrtabs',\r\n WINDOW_RESIZE: 'resize.scrtabs',\r\n TABS_READY: 'ready.scrtabs'\r\n }\r\n };\r\n\r\n // smartresize from Paul Irish (debounced window resize)\r\n (function (sr) {\r\n var debounce = function (func, threshold, execAsap) {\r\n var timeout;\r\n\r\n return function debounced() {\r\n var obj = this, args = arguments;\r\n function delayed() {\r\n if (!execAsap) {\r\n func.apply(obj, args);\r\n }\r\n timeout = null;\r\n }\r\n\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n } else if (execAsap) {\r\n func.apply(obj, args);\r\n }\r\n\r\n timeout = setTimeout(delayed, threshold || 100);\r\n };\r\n };\r\n $.fn[sr] = function (fn) { return fn ? this.bind(CONSTANTS.EVENTS.WINDOW_RESIZE, debounce(fn)) : this.trigger(sr); };\r\n\r\n })('smartresize');\r\n\r\n /* ***********************************************************************************\r\n * ElementsHandler - Class that each instance of ScrollingTabsControl will instantiate\r\n * **********************************************************************************/\r\n function ElementsHandler(scrollingTabsControl) {\r\n var ehd = this;\r\n\r\n ehd.stc = scrollingTabsControl;\r\n }\r\n\r\n // ElementsHandler prototype methods\r\n (function (p) {\r\n p.initElements = function (options) {\r\n var ehd = this;\r\n\r\n ehd.setElementReferences();\r\n ehd.setEventListeners();\r\n };\r\n\r\n p.refreshAllElementSizes = function () {\r\n var ehd = this,\r\n stc = ehd.stc,\r\n smv = stc.scrollMovement,\r\n scrollArrowsWereVisible = stc.scrollArrowsVisible,\r\n actionsTaken = {\r\n didScrollToActiveTab: false\r\n },\r\n isPerformingSlideAnim = false,\r\n minPos;\r\n\r\n ehd.setElementWidths();\r\n ehd.setScrollArrowVisibility();\r\n\r\n // this could have been a window resize or the removal of a\r\n // dynamic tab, so make sure the movable container is positioned\r\n // correctly because, if it is far to the left and we increased the\r\n // window width, it's possible that the tabs will be too far left,\r\n // beyond the min pos.\r\n if (stc.scrollArrowsVisible) {\r\n // make sure container not too far left\r\n minPos = smv.getMinPos();\r\n\r\n isPerformingSlideAnim = smv.scrollToActiveTab({\r\n isOnWindowResize: true\r\n });\r\n\r\n if (!isPerformingSlideAnim) {\r\n smv.refreshScrollArrowsDisabledState();\r\n\r\n if (stc.movableContainerLeftPos < minPos) {\r\n smv.incrementMovableContainerRight(minPos);\r\n }\r\n }\r\n\r\n actionsTaken.didScrollToActiveTab = true;\r\n\r\n } else if (scrollArrowsWereVisible) {\r\n // scroll arrows went away after resize, so position movable container at 0\r\n stc.movableContainerLeftPos = 0;\r\n smv.slideMovableContainerToLeftPos();\r\n }\r\n\r\n return actionsTaken;\r\n };\r\n\r\n p.setElementReferences = function () {\r\n var ehd = this,\r\n stc = ehd.stc,\r\n $tabsContainer = stc.$tabsContainer,\r\n $leftArrow,\r\n $rightArrow;\r\n\r\n stc.isNavPills = false;\r\n\r\n stc.$fixedContainer = $tabsContainer.find('.scrtabs-tabs-fixed-container');\r\n $leftArrow = stc.$fixedContainer.prev();\r\n $rightArrow = stc.$fixedContainer.next();\r\n\r\n stc.$movableContainer = $tabsContainer.find('.scrtabs-tabs-movable-container');\r\n stc.$tabsUl = $tabsContainer.find('.nav-tabs');\r\n\r\n // check for pills\r\n if (!stc.$tabsUl.length) {\r\n stc.$tabsUl = $tabsContainer.find('.nav-pills');\r\n\r\n if (stc.$tabsUl.length) {\r\n stc.isNavPills = true;\r\n }\r\n }\r\n\r\n stc.$tabsLiCollection = stc.$tabsUl.find('> li');\r\n\r\n stc.$slideLeftArrow = stc.reverseScroll ? $leftArrow : $rightArrow;\r\n stc.$slideRightArrow = stc.reverseScroll ? $rightArrow : $leftArrow;\r\n stc.$scrollArrows = stc.$slideLeftArrow.add(stc.$slideRightArrow);\r\n\r\n stc.$win = $(window);\r\n };\r\n\r\n p.setElementWidths = function () {\r\n var ehd = this,\r\n stc = ehd.stc;\r\n\r\n stc.winWidth = stc.$win.width();\r\n stc.scrollArrowsCombinedWidth = stc.$slideLeftArrow.outerWidth() + stc.$slideRightArrow.outerWidth();\r\n\r\n ehd.setFixedContainerWidth();\r\n ehd.setMovableContainerWidth();\r\n };\r\n\r\n p.setEventListeners = function () {\r\n var ehd = this,\r\n stc = ehd.stc,\r\n evh = stc.eventHandlers,\r\n ev = CONSTANTS.EVENTS;\r\n\r\n stc.$slideLeftArrow\r\n .off('.scrtabs')\r\n .on(ev.MOUSEDOWN, function (e) { evh.handleMousedownOnSlideMovContainerLeftArrow.call(evh, e); })\r\n .on(ev.MOUSEUP, function (e) { evh.handleMouseupOnSlideMovContainerLeftArrow.call(evh, e); })\r\n .on(ev.CLICK, function (e) { evh.handleClickOnSlideMovContainerLeftArrow.call(evh, e); });\r\n\r\n stc.$slideRightArrow\r\n .off('.scrtabs')\r\n .on(ev.MOUSEDOWN, function (e) { evh.handleMousedownOnSlideMovContainerRightArrow.call(evh, e); })\r\n .on(ev.MOUSEUP, function (e) { evh.handleMouseupOnSlideMovContainerRightArrow.call(evh, e); })\r\n .on(ev.CLICK, function (e) { evh.handleClickOnSlideMovContainerRightArrow.call(evh, e); });\r\n\r\n if (stc.tabClickHandler) {\r\n stc.$tabsLiCollection\r\n .find('a[data-toggle=\"tab\"]')\r\n .off(ev.CLICK)\r\n .on(ev.CLICK, stc.tabClickHandler);\r\n }\r\n\r\n stc.$win.off('.scrtabs').smartresize(function (e) { evh.handleWindowResize.call(evh, e); });\r\n\r\n $('body').on(CONSTANTS.EVENTS.FORCE_REFRESH, stc.elementsHandler.refreshAllElementSizes.bind(stc.elementsHandler));\r\n };\r\n\r\n p.setFixedContainerWidth = function () {\r\n var ehd = this,\r\n stc = ehd.stc,\r\n tabsContainerRect = stc.$tabsContainer.get(0).getBoundingClientRect();\r\n /**\r\n * @author poletaew\r\n * It solves problem with rounding by jQuery.outerWidth\r\n * If we have real width 100.5 px, jQuery.outerWidth returns us 101 px and we get layout's fail\r\n */\r\n stc.fixedContainerWidth = tabsContainerRect.width || (tabsContainerRect.right - tabsContainerRect.left);\r\n stc.fixedContainerWidth = stc.fixedContainerWidth * stc.widthMultiplier;\r\n\r\n stc.$fixedContainer.width(stc.fixedContainerWidth);\r\n };\r\n\r\n p.setFixedContainerWidthForHiddenScrollArrows = function () {\r\n var ehd = this,\r\n stc = ehd.stc;\r\n\r\n stc.$fixedContainer.width(stc.fixedContainerWidth);\r\n };\r\n\r\n p.setFixedContainerWidthForVisibleScrollArrows = function () {\r\n var ehd = this,\r\n stc = ehd.stc;\r\n\r\n stc.$fixedContainer.width(stc.fixedContainerWidth - stc.scrollArrowsCombinedWidth);\r\n };\r\n\r\n p.setMovableContainerWidth = function () {\r\n var ehd = this,\r\n stc = ehd.stc,\r\n $tabLi = stc.$tabsUl.find('> li');\r\n\r\n stc.movableContainerWidth = 0;\r\n\r\n if ($tabLi.length) {\r\n\r\n $tabLi.each(function () {\r\n var $li = $(this),\r\n totalMargin = 0;\r\n\r\n if (stc.isNavPills) { // pills have a margin-left, tabs have no margin\r\n totalMargin = parseInt($li.css('margin-left'), 10) + parseInt($li.css('margin-right'), 10);\r\n }\r\n\r\n stc.movableContainerWidth += ($li.outerWidth() + totalMargin);\r\n });\r\n\r\n stc.movableContainerWidth += 1;\r\n\r\n // if the tabs don't span the width of the page, force the\r\n // movable container width to full page width so the bottom\r\n // border spans the page width instead of just spanning the\r\n // width of the tabs\r\n if (stc.movableContainerWidth < stc.fixedContainerWidth) {\r\n stc.movableContainerWidth = stc.fixedContainerWidth;\r\n }\r\n }\r\n\r\n stc.$movableContainer.width(stc.movableContainerWidth);\r\n };\r\n\r\n p.setScrollArrowVisibility = function () {\r\n var ehd = this,\r\n stc = ehd.stc,\r\n shouldBeVisible = stc.movableContainerWidth > stc.fixedContainerWidth;\r\n\r\n if (shouldBeVisible && !stc.scrollArrowsVisible) {\r\n stc.$scrollArrows.show();\r\n stc.scrollArrowsVisible = true;\r\n } else if (!shouldBeVisible && stc.scrollArrowsVisible) {\r\n stc.$scrollArrows.hide();\r\n stc.scrollArrowsVisible = false;\r\n }\r\n\r\n if (stc.scrollArrowsVisible) {\r\n ehd.setFixedContainerWidthForVisibleScrollArrows();\r\n } else {\r\n ehd.setFixedContainerWidthForHiddenScrollArrows();\r\n }\r\n };\r\n\r\n }(ElementsHandler.prototype));\r\n\r\n /* ***********************************************************************************\r\n * EventHandlers - Class that each instance of ScrollingTabsControl will instantiate\r\n * **********************************************************************************/\r\n function EventHandlers(scrollingTabsControl) {\r\n var evh = this;\r\n\r\n evh.stc = scrollingTabsControl;\r\n }\r\n\r\n // prototype methods\r\n (function (p){\r\n p.handleClickOnSlideMovContainerLeftArrow = function (e) {\r\n var evh = this,\r\n stc = evh.stc;\r\n\r\n stc.scrollMovement.incrementMovableContainerLeft();\r\n };\r\n\r\n p.handleClickOnSlideMovContainerRightArrow = function (e) {\r\n var evh = this,\r\n stc = evh.stc;\r\n\r\n stc.scrollMovement.incrementMovableContainerRight();\r\n };\r\n\r\n p.handleMousedownOnSlideMovContainerLeftArrow = function (e) {\r\n var evh = this,\r\n stc = evh.stc;\r\n\r\n stc.$slideLeftArrow.data(CONSTANTS.DATA_KEY_IS_MOUSEDOWN, true);\r\n stc.scrollMovement.continueSlideMovableContainerLeft();\r\n };\r\n\r\n p.handleMousedownOnSlideMovContainerRightArrow = function (e) {\r\n var evh = this,\r\n stc = evh.stc;\r\n\r\n stc.$slideRightArrow.data(CONSTANTS.DATA_KEY_IS_MOUSEDOWN, true);\r\n stc.scrollMovement.continueSlideMovableContainerRight();\r\n };\r\n\r\n p.handleMouseupOnSlideMovContainerLeftArrow = function (e) {\r\n var evh = this,\r\n stc = evh.stc;\r\n\r\n stc.$slideLeftArrow.data(CONSTANTS.DATA_KEY_IS_MOUSEDOWN, false);\r\n };\r\n\r\n p.handleMouseupOnSlideMovContainerRightArrow = function (e) {\r\n var evh = this,\r\n stc = evh.stc;\r\n\r\n stc.$slideRightArrow.data(CONSTANTS.DATA_KEY_IS_MOUSEDOWN, false);\r\n };\r\n\r\n p.handleWindowResize = function (e) {\r\n var evh = this,\r\n stc = evh.stc,\r\n newWinWidth = stc.$win.width();\r\n\r\n if (newWinWidth === stc.winWidth) {\r\n return false;\r\n }\r\n\r\n stc.winWidth = newWinWidth;\r\n stc.elementsHandler.refreshAllElementSizes();\r\n };\r\n\r\n }(EventHandlers.prototype));\r\n\r\n /* ***********************************************************************************\r\n * ScrollMovement - Class that each instance of ScrollingTabsControl will instantiate\r\n * **********************************************************************************/\r\n function ScrollMovement(scrollingTabsControl) {\r\n var smv = this;\r\n\r\n smv.stc = scrollingTabsControl;\r\n }\r\n\r\n // prototype methods\r\n (function (p) {\r\n\r\n p.continueSlideMovableContainerLeft = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n setTimeout(function() {\r\n if (stc.movableContainerLeftPos <= smv.getMinPos() ||\r\n !stc.$slideLeftArrow.data(CONSTANTS.DATA_KEY_IS_MOUSEDOWN)) {\r\n return;\r\n }\r\n\r\n if (!smv.incrementMovableContainerLeft()) { // haven't reached max left\r\n smv.continueSlideMovableContainerLeft();\r\n }\r\n }, CONSTANTS.CONTINUOUS_SCROLLING_TIMEOUT_INTERVAL);\r\n };\r\n\r\n p.continueSlideMovableContainerRight = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n setTimeout(function() {\r\n if (stc.movableContainerLeftPos >= 0 ||\r\n !stc.$slideRightArrow.data(CONSTANTS.DATA_KEY_IS_MOUSEDOWN)) {\r\n return;\r\n }\r\n\r\n if (!smv.incrementMovableContainerRight()) { // haven't reached max right\r\n smv.continueSlideMovableContainerRight();\r\n }\r\n }, CONSTANTS.CONTINUOUS_SCROLLING_TIMEOUT_INTERVAL);\r\n };\r\n\r\n p.decrementMovableContainerLeftPos = function (minPos) {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n stc.movableContainerLeftPos -= (stc.fixedContainerWidth / CONSTANTS.SCROLL_OFFSET_FRACTION);\r\n if (stc.movableContainerLeftPos < minPos) {\r\n stc.movableContainerLeftPos = minPos;\r\n } else if (stc.scrollToTabEdge) {\r\n smv.setMovableContainerLeftPosToTabEdge(CONSTANTS.SLIDE_DIRECTION.LEFT);\r\n\r\n if (stc.movableContainerLeftPos < minPos) {\r\n stc.movableContainerLeftPos = minPos;\r\n }\r\n }\r\n };\r\n\r\n p.disableSlideLeftArrow = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n if (!stc.disableScrollArrowsOnFullyScrolled || !stc.scrollArrowsVisible) {\r\n return;\r\n }\r\n\r\n stc.$slideLeftArrow.addClass(CONSTANTS.CSS_CLASSES.SCROLL_ARROW_DISABLE);\r\n };\r\n\r\n p.disableSlideRightArrow = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n if (!stc.disableScrollArrowsOnFullyScrolled || !stc.scrollArrowsVisible) {\r\n return;\r\n }\r\n\r\n stc.$slideRightArrow.addClass(CONSTANTS.CSS_CLASSES.SCROLL_ARROW_DISABLE);\r\n };\r\n\r\n p.enableSlideLeftArrow = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n if (!stc.disableScrollArrowsOnFullyScrolled || !stc.scrollArrowsVisible) {\r\n return;\r\n }\r\n\r\n stc.$slideLeftArrow.removeClass(CONSTANTS.CSS_CLASSES.SCROLL_ARROW_DISABLE);\r\n };\r\n\r\n p.enableSlideRightArrow = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n if (!stc.disableScrollArrowsOnFullyScrolled || !stc.scrollArrowsVisible) {\r\n return;\r\n }\r\n\r\n stc.$slideRightArrow.removeClass(CONSTANTS.CSS_CLASSES.SCROLL_ARROW_DISABLE);\r\n };\r\n\r\n p.getMinPos = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n return stc.scrollArrowsVisible ? (stc.fixedContainerWidth - stc.movableContainerWidth - stc.scrollArrowsCombinedWidth) : 0;\r\n };\r\n\r\n p.getMovableContainerCssLeftVal = function () {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n return (stc.movableContainerLeftPos === 0) ? '0' : stc.movableContainerLeftPos + 'px';\r\n };\r\n\r\n p.incrementMovableContainerLeft = function () {\r\n var smv = this,\r\n stc = smv.stc,\r\n minPos = smv.getMinPos();\r\n\r\n smv.decrementMovableContainerLeftPos(minPos);\r\n smv.slideMovableContainerToLeftPos();\r\n smv.enableSlideRightArrow();\r\n\r\n // return true if we're fully left, false otherwise\r\n return (stc.movableContainerLeftPos === minPos);\r\n };\r\n\r\n p.incrementMovableContainerRight = function (minPos) {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n // if minPos passed in, the movable container was beyond the minPos\r\n if (minPos) {\r\n stc.movableContainerLeftPos = minPos;\r\n } else {\r\n stc.movableContainerLeftPos += (stc.fixedContainerWidth / CONSTANTS.SCROLL_OFFSET_FRACTION);\r\n\r\n if (stc.movableContainerLeftPos > 0) {\r\n stc.movableContainerLeftPos = 0;\r\n } else if (stc.scrollToTabEdge) {\r\n smv.setMovableContainerLeftPosToTabEdge(CONSTANTS.SLIDE_DIRECTION.RIGHT);\r\n }\r\n }\r\n\r\n smv.slideMovableContainerToLeftPos();\r\n smv.enableSlideLeftArrow();\r\n\r\n // return true if we're fully right, false otherwise\r\n // left pos of 0 is the movable container's max position (farthest right)\r\n return (stc.movableContainerLeftPos === 0);\r\n };\r\n\r\n p.refreshScrollArrowsDisabledState = function() {\r\n var smv = this,\r\n stc = smv.stc;\r\n\r\n if (!stc.disableScrollArrowsOnFullyScrolled || !stc.scrollArrowsVisible) {\r\n return;\r\n }\r\n\r\n if (stc.movableContainerLeftPos >= 0) { // movable container fully right\r\n smv.disableSlideRightArrow();\r\n smv.enableSlideLeftArrow();\r\n return;\r\n }\r\n\r\n if (stc.movableContainerLeftPos <= smv.getMinPos()) { // fully left\r\n smv.disableSlideLeftArrow();\r\n smv.enableSlideRightArrow();\r\n return;\r\n }\r\n\r\n smv.enableSlideLeftArrow();\r\n smv.enableSlideRightArrow();\r\n };\r\n\r\n p.scrollToActiveTab = function (options) {\r\n var smv = this,\r\n stc = smv.stc,\r\n RIGHT_OFFSET_BUFFER = 20,\r\n $activeTab,\r\n activeTabLeftPos,\r\n activeTabRightPos,\r\n rightArrowLeftPos,\r\n leftScrollArrowWidth,\r\n rightScrollArrowWidth;\r\n\r\n if (!stc.scrollArrowsVisible) {\r\n return;\r\n }\r\n\r\n $activeTab = stc.$tabsUl.find('li.active');\r\n\r\n if (!$activeTab.length) {\r\n return;\r\n }\r\n\r\n /**\r\n * @author poletaew\r\n * We need relative offset (depends on $fixedContainer), don't absolute\r\n */\r\n activeTabLeftPos = $activeTab.offset().left - stc.$fixedContainer.offset().left;\r\n activeTabRightPos = activeTabLeftPos + $activeTab.outerWidth();\r\n\r\n rightArrowLeftPos = stc.fixedContainerWidth - RIGHT_OFFSET_BUFFER;\r\n\r\n if (activeTabRightPos > rightArrowLeftPos) { // active tab off right side\r\n rightScrollArrowWidth = stc.$slideRightArrow.outerWidth();\r\n stc.movableContainerLeftPos -= (activeTabRightPos - rightArrowLeftPos + rightScrollArrowWidth);\r\n smv.slideMovableContainerToLeftPos();\r\n return true;\r\n } else {\r\n leftScrollArrowWidth = stc.$slideLeftArrow.outerWidth();\r\n if (activeTabLeftPos < leftScrollArrowWidth) { // active tab off left side\r\n stc.movableContainerLeftPos += leftScrollArrowWidth - activeTabLeftPos;\r\n smv.slideMovableContainerToLeftPos();\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n p.setMovableContainerLeftPosToTabEdge = function (slideDirection) {\r\n var smv = this,\r\n stc = smv.stc,\r\n offscreenWidth = -stc.movableContainerLeftPos,\r\n totalTabWidth = 0;\r\n\r\n // make sure LeftPos is set so that a tab edge will be against the\r\n // left scroll arrow so we won't have a partial, cut-off tab\r\n stc.$tabsLiCollection.each(function (index) {\r\n var tabWidth = $(this).width();\r\n\r\n totalTabWidth += tabWidth;\r\n\r\n if (totalTabWidth > offscreenWidth) {\r\n stc.movableContainerLeftPos = (slideDirection === CONSTANTS.SLIDE_DIRECTION.RIGHT) ? -(totalTabWidth - tabWidth) : -totalTabWidth;\r\n return false; // exit .each() loop\r\n }\r\n\r\n });\r\n };\r\n\r\n p.slideMovableContainerToLeftPos = function () {\r\n var smv = this,\r\n stc = smv.stc,\r\n minPos = smv.getMinPos(),\r\n leftVal;\r\n\r\n if (stc.movableContainerLeftPos > 0) {\r\n stc.movableContainerLeftPos = 0;\r\n } else if (stc.movableContainerLeftPos < minPos) {\r\n stc.movableContainerLeftPos = minPos;\r\n }\r\n\r\n stc.movableContainerLeftPos = stc.movableContainerLeftPos / 1;\r\n leftVal = smv.getMovableContainerCssLeftVal();\r\n\r\n smv.performingSlideAnim = true;\r\n\r\n stc.$movableContainer.stop().animate({ left: leftVal }, 'slow', function __slideAnimComplete() {\r\n var newMinPos = smv.getMinPos();\r\n\r\n smv.performingSlideAnim = false;\r\n\r\n // if we slid past the min pos--which can happen if you resize the window\r\n // quickly--move back into position\r\n if (stc.movableContainerLeftPos < newMinPos) {\r\n smv.decrementMovableContainerLeftPos(newMinPos);\r\n stc.$movableContainer.stop().animate({ left: smv.getMovableContainerCssLeftVal() }, 'fast', function() {\r\n smv.refreshScrollArrowsDisabledState();\r\n });\r\n } else {\r\n smv.refreshScrollArrowsDisabledState();\r\n }\r\n });\r\n };\r\n\r\n }(ScrollMovement.prototype));\r\n\r\n /* **********************************************************************\r\n * ScrollingTabsControl - Class that each directive will instantiate\r\n * **********************************************************************/\r\n function ScrollingTabsControl($tabsContainer) {\r\n var stc = this;\r\n\r\n stc.$tabsContainer = $tabsContainer;\r\n\r\n stc.movableContainerLeftPos = 0;\r\n stc.scrollArrowsVisible = false;\r\n stc.scrollToTabEdge = false;\r\n stc.disableScrollArrowsOnFullyScrolled = false;\r\n stc.reverseScroll = false;\r\n stc.widthMultiplier = 1;\r\n\r\n stc.scrollMovement = new ScrollMovement(stc);\r\n stc.eventHandlers = new EventHandlers(stc);\r\n stc.elementsHandler = new ElementsHandler(stc);\r\n }\r\n\r\n // prototype methods\r\n (function (p) {\r\n p.initTabs = function (options, $scroller, readyCallback, attachTabContentToDomCallback) {\r\n var stc = this,\r\n elementsHandler = stc.elementsHandler,\r\n num;\r\n\r\n if (options.scrollToTabEdge) {\r\n stc.scrollToTabEdge = true;\r\n }\r\n\r\n if (options.disableScrollArrowsOnFullyScrolled) {\r\n stc.disableScrollArrowsOnFullyScrolled = true;\r\n }\r\n\r\n if (options.reverseScroll) {\r\n stc.reverseScroll = true;\r\n }\r\n\r\n if (options.widthMultiplier !== 1) {\r\n num = Number(options.widthMultiplier); // handle string value\r\n\r\n if (!isNaN(num)) {\r\n stc.widthMultiplier = num;\r\n }\r\n }\r\n\r\n setTimeout(initTabsAfterTimeout, 100);\r\n\r\n function initTabsAfterTimeout() {\r\n var actionsTaken;\r\n\r\n // if we're just wrapping non-data-driven tabs, the user might\r\n // have the .nav-tabs hidden to prevent the clunky flash of\r\n // multi-line tabs on page refresh, so we need to make sure\r\n // they're visible before trying to wrap them\r\n $scroller.find('.nav-tabs').show();\r\n\r\n elementsHandler.initElements(options);\r\n actionsTaken = elementsHandler.refreshAllElementSizes();\r\n\r\n $scroller.css('visibility', 'visible');\r\n\r\n if (attachTabContentToDomCallback) {\r\n attachTabContentToDomCallback();\r\n }\r\n\r\n if (readyCallback) {\r\n readyCallback();\r\n }\r\n }\r\n };\r\n\r\n p.scrollToActiveTab = function(options) {\r\n var stc = this,\r\n smv = stc.scrollMovement;\r\n\r\n smv.scrollToActiveTab(options);\r\n };\r\n }(ScrollingTabsControl.prototype));\r\n\r\n\r\n var tabElements = (function () {\r\n\r\n return {\r\n getElTabPaneForLi: getElTabPaneForLi,\r\n getNewElNavTabs: getNewElNavTabs,\r\n getNewElScrollerElementWrappingNavTabsInstance: getNewElScrollerElementWrappingNavTabsInstance,\r\n getNewElTabAnchor: getNewElTabAnchor,\r\n getNewElTabContent: getNewElTabContent,\r\n getNewElTabLi: getNewElTabLi,\r\n getNewElTabPane: getNewElTabPane\r\n };\r\n\r\n ///////////////////\r\n\r\n // ---- retrieve existing elements from the DOM ----------\r\n function getElTabPaneForLi($li) {\r\n return $($li.find('a').attr('href'));\r\n }\r\n\r\n\r\n // ---- create new elements ----------\r\n function getNewElNavTabs() {\r\n return $('');\r\n }\r\n\r\n function getNewElScrollerElementWrappingNavTabsInstance($navTabsInstance, settings) {\r\n var $tabsContainer = $('
'),\r\n leftArrowContent = settings.leftArrowContent || '
',\r\n $leftArrow = $(leftArrowContent),\r\n rightArrowContent = settings.rightArrowContent || '
',\r\n $rightArrow = $(rightArrowContent),\r\n $fixedContainer = $('
'),\r\n $movableContainer = $('
');\r\n\r\n if (settings.disableScrollArrowsOnFullyScrolled) {\r\n $leftArrow.add($rightArrow).addClass('scrtabs-disable');\r\n }\r\n\r\n return $tabsContainer\r\n .append($leftArrow,\r\n $fixedContainer.append($movableContainer.append($navTabsInstance)),\r\n $rightArrow);\r\n }\r\n\r\n function getNewElTabAnchor(tab, propNames) {\r\n return $('')\r\n .attr('href', '#' + tab[propNames.paneId])\r\n .html(tab[propNames.title]);\r\n }\r\n\r\n function getNewElTabContent() {\r\n return $('
');\r\n }\r\n\r\n function getNewElTabLi(tab, propNames, forceActiveTab) {\r\n var $li = $('
  • '),\r\n $a = getNewElTabAnchor(tab, propNames).appendTo($li);\r\n\r\n if (tab[propNames.disabled]) {\r\n $li.addClass('disabled');\r\n $a.attr('data-toggle', '');\r\n } else if (forceActiveTab && tab[propNames.active]) {\r\n $li.addClass('active');\r\n }\r\n\r\n return $li;\r\n }\r\n\r\n function getNewElTabPane(tab, propNames, forceActiveTab) {\r\n var $pane = $('
    ')\r\n .attr('id', tab[propNames.paneId])\r\n .html(tab[propNames.content]);\r\n\r\n if (forceActiveTab && tab[propNames.active]) {\r\n $pane.addClass('active');\r\n }\r\n\r\n return $pane;\r\n }\r\n\r\n\r\n }()); // tabElements\r\n\r\n var tabUtils = (function () {\r\n\r\n return {\r\n didTabOrderChange: didTabOrderChange,\r\n getIndexOfClosestEnabledTab: getIndexOfClosestEnabledTab,\r\n getTabIndexByPaneId: getTabIndexByPaneId,\r\n storeDataOnLiEl: storeDataOnLiEl\r\n };\r\n\r\n ///////////////////\r\n\r\n function didTabOrderChange($currTabLis, updatedTabs, propNames) {\r\n var isTabOrderChanged = false;\r\n\r\n $currTabLis.each(function (currDomIdx) {\r\n var newIdx = getTabIndexByPaneId(updatedTabs, propNames.paneId, $(this).data('tab')[propNames.paneId]);\r\n\r\n if ((newIdx > -1) && (newIdx !== currDomIdx)) { // tab moved\r\n isTabOrderChanged = true;\r\n return false; // exit .each() loop\r\n }\r\n });\r\n\r\n return isTabOrderChanged;\r\n }\r\n\r\n function getIndexOfClosestEnabledTab($currTabLis, startIndex) {\r\n var lastIndex = $currTabLis.length - 1,\r\n closestIdx = -1,\r\n incrementFromStartIndex = 0,\r\n testIdx = 0;\r\n\r\n // expand out from the current tab looking for an enabled tab;\r\n // we prefer the tab after us over the tab before\r\n while ((closestIdx === -1) && (testIdx >= 0)) {\r\n\r\n if ( (((testIdx = startIndex + (++incrementFromStartIndex)) <= lastIndex) &&\r\n !$currTabLis.eq(testIdx).hasClass('disabled')) ||\r\n (((testIdx = startIndex - incrementFromStartIndex) >= 0) &&\r\n !$currTabLis.eq(testIdx).hasClass('disabled')) ) {\r\n\r\n closestIdx = testIdx;\r\n\r\n }\r\n }\r\n\r\n return closestIdx;\r\n }\r\n\r\n function getTabIndexByPaneId(tabs, paneIdPropName, paneId) {\r\n var idx = -1;\r\n\r\n tabs.some(function (tab, i) {\r\n if (tab[paneIdPropName] === paneId) {\r\n idx = i;\r\n return true; // exit loop\r\n }\r\n });\r\n\r\n return idx;\r\n }\r\n\r\n function storeDataOnLiEl($li, tabs, index) {\r\n $li.data({\r\n tab: $.extend({}, tabs[index]), // store a clone so we can check for changes\r\n index: index\r\n });\r\n }\r\n\r\n }()); // tabUtils\r\n\r\n function buildNavTabsAndTabContentForTargetElementInstance($targetElInstance, settings, readyCallback) {\r\n var tabs = settings.tabs,\r\n propNames = {\r\n paneId: settings.propPaneId,\r\n title: settings.propTitle,\r\n active: settings.propActive,\r\n disabled: settings.propDisabled,\r\n content: settings.propContent\r\n },\r\n ignoreTabPanes = settings.ignoreTabPanes,\r\n hasTabContent = tabs.length && tabs[0][propNames.content] !== undefined,\r\n $navTabs = tabElements.getNewElNavTabs(),\r\n $tabContent = tabElements.getNewElTabContent(),\r\n $scroller,\r\n attachTabContentToDomCallback = ignoreTabPanes ? null : function() {\r\n $scroller.after($tabContent);\r\n };\r\n\r\n if (!tabs.length) {\r\n return;\r\n }\r\n\r\n tabs.forEach(function(tab, index) {\r\n tabElements\r\n .getNewElTabLi(tab, propNames, true) // true -> forceActiveTab\r\n .appendTo($navTabs);\r\n\r\n // build the tab panes if we weren't told to ignore them and there's\r\n // tab content data available\r\n if (!ignoreTabPanes && hasTabContent) {\r\n tabElements\r\n .getNewElTabPane(tab, propNames, true) // true -> forceActiveTab\r\n .appendTo($tabContent);\r\n }\r\n });\r\n\r\n $scroller = wrapNavTabsInstanceInScroller($navTabs,\r\n settings,\r\n readyCallback,\r\n attachTabContentToDomCallback);\r\n\r\n $scroller.appendTo($targetElInstance);\r\n\r\n $targetElInstance.data({\r\n scrtabs: {\r\n tabs: tabs,\r\n propNames: propNames,\r\n ignoreTabPanes: ignoreTabPanes,\r\n hasTabContent: hasTabContent,\r\n scroller: $scroller\r\n }\r\n });\r\n\r\n // once the nav-tabs are wrapped in the scroller, attach each tab's\r\n // data to it for reference later; we need to wait till they're\r\n // wrapped in the scroller because we wrap a *clone* of the nav-tabs\r\n // we built above, not the original nav-tabs\r\n $scroller.find('.nav-tabs > li').each(function (index) {\r\n tabUtils.storeDataOnLiEl($(this), tabs, index);\r\n });\r\n\r\n return $targetElInstance;\r\n }\r\n\r\n\r\n function wrapNavTabsInstanceInScroller($navTabsInstance, settings, readyCallback, attachTabContentToDomCallback) {\r\n var $scroller = tabElements.getNewElScrollerElementWrappingNavTabsInstance($navTabsInstance.clone(true), settings), // use clone because we replaceWith later\r\n scrollingTabsControl = new ScrollingTabsControl($scroller),\r\n navTabsInstanceData = $navTabsInstance.data('scrtabs');\r\n\r\n if (!navTabsInstanceData) {\r\n $navTabsInstance.data('scrtabs', {\r\n scroller: $scroller\r\n });\r\n } else {\r\n navTabsInstanceData.scroller = $scroller;\r\n }\r\n\r\n $navTabsInstance.replaceWith($scroller.css('visibility', 'hidden'));\r\n\r\n if (settings.tabClickHandler && (typeof settings.tabClickHandler === 'function')) {\r\n $scroller.hasTabClickHandler = true;\r\n scrollingTabsControl.tabClickHandler = settings.tabClickHandler;\r\n }\r\n\r\n $scroller.initTabs = function () {\r\n scrollingTabsControl.initTabs(settings,\r\n $scroller,\r\n readyCallback,\r\n attachTabContentToDomCallback);\r\n };\r\n\r\n $scroller.scrollToActiveTab = function() {\r\n scrollingTabsControl.scrollToActiveTab(settings);\r\n };\r\n\r\n $scroller.initTabs();\r\n\r\n listenForDropdownMenuTabs($scroller, scrollingTabsControl);\r\n\r\n return $scroller;\r\n }\r\n\r\n function checkForTabAdded(refreshData) {\r\n var updatedTabsArray = refreshData.updatedTabsArray,\r\n propNames = refreshData.propNames,\r\n ignoreTabPanes = refreshData.ignoreTabPanes,\r\n options = refreshData.options,\r\n $currTabLis = refreshData.$currTabLis,\r\n $navTabs = refreshData.$navTabs,\r\n $currTabContentPanesContainer = ignoreTabPanes ? null : refreshData.$currTabContentPanesContainer,\r\n $currTabContentPanes = ignoreTabPanes ? null : refreshData.$currTabContentPanes,\r\n isInitTabsRequired = false;\r\n\r\n // make sure each tab in the updated tabs array has a corresponding DOM element\r\n updatedTabsArray.forEach(function (tab, idx) {\r\n var $li = $currTabLis.find('a[href=\"#' + tab[propNames.paneId] + '\"]'),\r\n isTabIdxPastCurrTabs = (idx >= $currTabLis.length),\r\n $pane;\r\n\r\n if (!$li.length) { // new tab\r\n isInitTabsRequired = true;\r\n\r\n // add the tab, add its pane (if necessary), and refresh the scroller\r\n $li = tabElements.getNewElTabLi(tab, propNames, options.forceActiveTab);\r\n tabUtils.storeDataOnLiEl($li, updatedTabsArray, idx);\r\n\r\n if (isTabIdxPastCurrTabs) { // append to end of current tabs\r\n $li.appendTo($navTabs);\r\n } else { // insert in middle of current tabs\r\n $li.insertBefore($currTabLis.eq(idx));\r\n }\r\n\r\n if (!ignoreTabPanes && tab[propNames.content] !== undefined) {\r\n $pane = tabElements.getNewElTabPane(tab, propNames, options.forceActiveTab);\r\n if (isTabIdxPastCurrTabs) { // append to end of current tabs\r\n $pane.appendTo($currTabContentPanesContainer);\r\n } else { // insert in middle of current tabs\r\n $pane.insertBefore($currTabContentPanes.eq(idx));\r\n }\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n return isInitTabsRequired;\r\n }\r\n\r\n function checkForTabPropertiesUpdated(refreshData) {\r\n var tabLiData = refreshData.tabLi,\r\n ignoreTabPanes = refreshData.ignoreTabPanes,\r\n $li = tabLiData.$li,\r\n $contentPane = tabLiData.$contentPane,\r\n origTabData = tabLiData.origTabData,\r\n newTabData = tabLiData.newTabData,\r\n propNames = refreshData.propNames,\r\n isInitTabsRequired = false;\r\n\r\n // update tab title if necessary\r\n if (origTabData[propNames.title] !== newTabData[propNames.title]) {\r\n $li.find('a[role=\"tab\"]')\r\n .html(origTabData[propNames.title] = newTabData[propNames.title]);\r\n\r\n isInitTabsRequired = true;\r\n }\r\n\r\n // update tab disabled state if necessary\r\n if (origTabData[propNames.disabled] !== newTabData[propNames.disabled]) {\r\n if (newTabData[propNames.disabled]) { // enabled -> disabled\r\n $li.addClass('disabled');\r\n $li.find('a[role=\"tab\"]').attr('data-toggle', '');\r\n } else { // disabled -> enabled\r\n $li.removeClass('disabled');\r\n $li.find('a[role=\"tab\"]').attr('data-toggle', 'tab');\r\n }\r\n\r\n origTabData[propNames.disabled] = newTabData[propNames.disabled];\r\n isInitTabsRequired = true;\r\n }\r\n\r\n // update tab active state if necessary\r\n if (refreshData.options.forceActiveTab) {\r\n // set the active tab based on the tabs array regardless of the current\r\n // DOM state, which could have been changed by the user clicking a tab\r\n // without those changes being reflected back to the tab data\r\n $li[newTabData[propNames.active] ? 'addClass' : 'removeClass']('active');\r\n\r\n $contentPane[newTabData[propNames.active] ? 'addClass' : 'removeClass']('active');\r\n\r\n origTabData[propNames.active] = newTabData[propNames.active];\r\n\r\n isInitTabsRequired = true;\r\n }\r\n\r\n // update tab content pane if necessary\r\n if (!ignoreTabPanes && origTabData[propNames.content] !== newTabData[propNames.content]) {\r\n $contentPane.html(origTabData[propNames.content] = newTabData[propNames.content]);\r\n isInitTabsRequired = true;\r\n }\r\n\r\n return isInitTabsRequired;\r\n }\r\n\r\n function checkForTabRemoved(refreshData) {\r\n var tabLiData = refreshData.tabLi,\r\n ignoreTabPanes = refreshData.ignoreTabPanes,\r\n $li = tabLiData.$li,\r\n idxToMakeActive;\r\n\r\n if (tabLiData.newIdx !== -1) { // tab was not removed--it has a valid index\r\n return false;\r\n }\r\n\r\n // if this was the active tab, make the closest enabled tab active\r\n if ($li.hasClass('active')) {\r\n\r\n idxToMakeActive = tabUtils.getIndexOfClosestEnabledTab(refreshData.$currTabLis, tabLiData.currDomIdx);\r\n if (idxToMakeActive > -1) {\r\n refreshData.$currTabLis\r\n .eq(idxToMakeActive)\r\n .addClass('active');\r\n\r\n if (!ignoreTabPanes) {\r\n refreshData.$currTabContentPanes\r\n .eq(idxToMakeActive)\r\n .addClass('active');\r\n }\r\n }\r\n }\r\n\r\n $li.remove();\r\n\r\n if (!ignoreTabPanes) {\r\n tabLiData.$contentPane.remove();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function checkForTabsOrderChanged(refreshData) {\r\n var $currTabLis = refreshData.$currTabLis,\r\n updatedTabsArray = refreshData.updatedTabsArray,\r\n propNames = refreshData.propNames,\r\n ignoreTabPanes = refreshData.ignoreTabPanes,\r\n newTabsCollection = [],\r\n newTabPanesCollection = ignoreTabPanes ? null : [];\r\n\r\n if (!tabUtils.didTabOrderChange($currTabLis, updatedTabsArray, propNames)) {\r\n return false;\r\n }\r\n\r\n // the tab order changed...\r\n updatedTabsArray.forEach(function (t, i) {\r\n var paneId = t[propNames.paneId];\r\n\r\n newTabsCollection.push(\r\n $currTabLis\r\n .find('a[role=\"tab\"][href=\"#' + paneId + '\"]')\r\n .parent('li')\r\n );\r\n\r\n if (!ignoreTabPanes) {\r\n newTabPanesCollection.push($('#' + paneId));\r\n }\r\n });\r\n\r\n refreshData.$navTabs.append(newTabsCollection);\r\n\r\n if (!ignoreTabPanes) {\r\n refreshData.$currTabContentPanesContainer.append(newTabPanesCollection);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function checkForTabsRemovedOrUpdated(refreshData) {\r\n var $currTabLis = refreshData.$currTabLis,\r\n updatedTabsArray = refreshData.updatedTabsArray,\r\n propNames = refreshData.propNames,\r\n isInitTabsRequired = false;\r\n\r\n\r\n $currTabLis.each(function (currDomIdx) {\r\n var $li = $(this),\r\n origTabData = $li.data('tab'),\r\n newIdx = tabUtils.getTabIndexByPaneId(updatedTabsArray, propNames.paneId, origTabData[propNames.paneId]),\r\n newTabData = (newIdx > -1) ? updatedTabsArray[newIdx] : null;\r\n\r\n refreshData.tabLi = {\r\n $li: $li,\r\n currDomIdx: currDomIdx,\r\n newIdx: newIdx,\r\n $contentPane: tabElements.getElTabPaneForLi($li),\r\n origTabData: origTabData,\r\n newTabData: newTabData\r\n };\r\n\r\n if (checkForTabRemoved(refreshData)) {\r\n isInitTabsRequired = true;\r\n return; // continue to next $li in .each() since we removed this tab\r\n }\r\n\r\n if (checkForTabPropertiesUpdated(refreshData)) {\r\n isInitTabsRequired = true;\r\n }\r\n });\r\n\r\n return isInitTabsRequired;\r\n }\r\n\r\n function listenForDropdownMenuTabs($scroller, stc) {\r\n var $ddMenu;\r\n\r\n // for dropdown menus to show, we need to move them out of the\r\n // scroller and append them to the body\r\n $scroller\r\n .on(CONSTANTS.EVENTS.DROPDOWN_MENU_SHOW, handleDropdownShow)\r\n .on(CONSTANTS.EVENTS.DROPDOWN_MENU_HIDE, handleDropdownHide);\r\n\r\n function handleDropdownHide(e) {\r\n // move the dropdown menu back into its tab\r\n $(e.target).append($ddMenu.off(CONSTANTS.EVENTS.CLICK));\r\n }\r\n\r\n function handleDropdownShow(e) {\r\n var $ddParentTabLi = $(e.target),\r\n ddLiOffset = $ddParentTabLi.offset(),\r\n $currActiveTab = $scroller.find('li[role=\"presentation\"].active'),\r\n ddMenuRightX,\r\n tabsContainerMaxX,\r\n ddMenuTargetLeft;\r\n\r\n $ddMenu = $ddParentTabLi\r\n .find('.dropdown-menu')\r\n .attr('data-' + CONSTANTS.DATA_KEY_DDMENU_MODIFIED, true);\r\n\r\n // if the dropdown's parent tab li isn't already active,\r\n // we need to deactivate any active menu item in the dropdown\r\n if ($currActiveTab[0] !== $ddParentTabLi[0]) {\r\n $ddMenu.find('li.active').removeClass('active');\r\n }\r\n\r\n // we need to do our own click handling because the built-in\r\n // bootstrap handlers won't work since we moved the dropdown\r\n // menu outside the tabs container\r\n $ddMenu.on(CONSTANTS.EVENTS.CLICK, 'a[role=\"tab\"]', handleClickOnDropdownMenuItem);\r\n\r\n $('body').append($ddMenu);\r\n\r\n // make sure the menu doesn't go off the right side of the page\r\n ddMenuRightX = $ddMenu.width() + ddLiOffset.left;\r\n tabsContainerMaxX = $scroller.width() - (stc.$slideRightArrow.outerWidth() + 1);\r\n ddMenuTargetLeft = ddLiOffset.left;\r\n\r\n if (ddMenuRightX > tabsContainerMaxX) {\r\n ddMenuTargetLeft -= (ddMenuRightX - tabsContainerMaxX);\r\n }\r\n\r\n $ddMenu.css({\r\n 'display': 'block',\r\n 'top': ddLiOffset.top + $ddParentTabLi.outerHeight() - 2,\r\n 'left': ddMenuTargetLeft\r\n });\r\n\r\n function handleClickOnDropdownMenuItem(e) {\r\n var $selectedMenuItemAnc = $(this),\r\n $selectedMenuItemLi = $selectedMenuItemAnc.parent('li'),\r\n $selectedMenuItemDropdownMenu = $selectedMenuItemLi.parent('.dropdown-menu'),\r\n targetPaneId = $selectedMenuItemAnc.attr('href');\r\n\r\n if ($selectedMenuItemLi.hasClass('active')) {\r\n return;\r\n }\r\n\r\n // once we select a menu item from the dropdown, deactivate\r\n // the current tab (unless it's our parent tab), deactivate\r\n // any active dropdown menu item, make our parent tab active\r\n // (if it's not already), and activate the selected menu item\r\n $scroller\r\n .find('li.active')\r\n .not($ddParentTabLi)\r\n .add($selectedMenuItemDropdownMenu.find('li.active'))\r\n .removeClass('active');\r\n\r\n $ddParentTabLi\r\n .add($selectedMenuItemLi)\r\n .addClass('active');\r\n\r\n // manually deactivate current active pane and activate our pane\r\n $('.tab-content .tab-pane.active').removeClass('active');\r\n $(targetPaneId).addClass('active');\r\n }\r\n\r\n }\r\n }\r\n\r\n function refreshDataDrivenTabs($container, options) {\r\n var instanceData = $container.data().scrtabs,\r\n scroller = instanceData.scroller,\r\n $navTabs = $container.find('.scrtabs-tab-container .nav-tabs'),\r\n $currTabContentPanesContainer = $container.find('.tab-content'),\r\n isInitTabsRequired = false,\r\n refreshData = {\r\n options: options,\r\n updatedTabsArray: instanceData.tabs,\r\n propNames: instanceData.propNames,\r\n ignoreTabPanes: instanceData.ignoreTabPanes,\r\n $navTabs: $navTabs,\r\n $currTabLis: $navTabs.find('> li'),\r\n $currTabContentPanesContainer: $currTabContentPanesContainer,\r\n $currTabContentPanes: $currTabContentPanesContainer.find('.tab-pane')\r\n };\r\n\r\n // to preserve the tab positions if we're just adding or removing\r\n // a tab, don't completely rebuild the tab structure, but check\r\n // for differences between the new tabs array and the old\r\n if (checkForTabAdded(refreshData)) {\r\n isInitTabsRequired = true;\r\n }\r\n\r\n if (checkForTabsOrderChanged(refreshData)) {\r\n isInitTabsRequired = true;\r\n }\r\n\r\n if (checkForTabsRemovedOrUpdated(refreshData)) {\r\n isInitTabsRequired = true;\r\n }\r\n\r\n if (isInitTabsRequired) {\r\n scroller.initTabs();\r\n }\r\n\r\n return isInitTabsRequired;\r\n }\r\n\r\n function refreshTargetElementInstance($container, options) {\r\n if (!$container.data('scrtabs')) { // target element doesn't have plugin on it\r\n return;\r\n }\r\n\r\n // force a refresh if the tabs are static html or they're data-driven\r\n // but the data didn't change so we didn't call initTabs()\r\n if ($container.data('scrtabs').isWrapperOnly || !refreshDataDrivenTabs($container, options)) {\r\n $('body').trigger(CONSTANTS.EVENTS.FORCE_REFRESH);\r\n }\r\n }\r\n\r\n function scrollToActiveTab() {\r\n var $targetElInstance = $(this),\r\n scrtabsData = $targetElInstance.data('scrtabs');\r\n\r\n if (!scrtabsData) {\r\n return;\r\n }\r\n\r\n scrtabsData.scroller.scrollToActiveTab();\r\n }\r\n\r\n var methods = {\r\n destroy: function() {\r\n var $targetEls = this;\r\n\r\n return $targetEls.each(destroyPlugin);\r\n },\r\n\r\n init: function(options) {\r\n var $targetEls = this,\r\n targetElsLastIndex = $targetEls.length - 1,\r\n settings = $.extend({}, $.fn.scrollingTabs.defaults, options || {});\r\n\r\n // ---- tabs NOT data-driven -------------------------\r\n if (!settings.tabs) {\r\n\r\n // just wrap the selected .nav-tabs element(s) in the scroller\r\n return $targetEls.each(function(index) {\r\n var dataObj = {\r\n isWrapperOnly: true\r\n },\r\n $targetEl = $(this).data({ scrtabs: dataObj }),\r\n readyCallback = (index < targetElsLastIndex) ? null : function() {\r\n $targetEls.trigger(CONSTANTS.EVENTS.TABS_READY);\r\n };\r\n\r\n if (settings.enableSwiping) {\r\n $targetEl.parent().addClass(CONSTANTS.CSS_CLASSES.ALLOW_SCROLLBAR);\r\n $targetEl.data('scrtabs').enableSwipingElement = 'parent';\r\n }\r\n\r\n wrapNavTabsInstanceInScroller($targetEl, settings, readyCallback);\r\n });\r\n\r\n }\r\n\r\n // ---- tabs data-driven -------------------------\r\n return $targetEls.each(function (index) {\r\n var $targetEl = $(this),\r\n readyCallback = (index < targetElsLastIndex) ? null : function() {\r\n $targetEls.trigger(CONSTANTS.EVENTS.TABS_READY);\r\n };\r\n\r\n var $newTargetEl = buildNavTabsAndTabContentForTargetElementInstance($targetEl, settings, readyCallback);\r\n\r\n if (settings.enableSwiping) {\r\n $newTargetEl.addClass(CONSTANTS.CSS_CLASSES.ALLOW_SCROLLBAR);\r\n $newTargetEl.data('scrtabs').enableSwipingElement = 'self';\r\n }\r\n });\r\n },\r\n\r\n refresh: function(options) {\r\n var $targetEls = this,\r\n settings = $.extend({}, $.fn.scrollingTabs.defaults, options || {});\r\n\r\n return $targetEls.each(function () {\r\n refreshTargetElementInstance($(this), settings);\r\n });\r\n },\r\n\r\n scrollToActiveTab: function() {\r\n return this.each(scrollToActiveTab);\r\n }\r\n };\r\n\r\n function destroyPlugin() {\r\n var $targetElInstance = $(this),\r\n scrtabsData = $targetElInstance.data('scrtabs'),\r\n $tabsContainer;\r\n\r\n if (!scrtabsData) {\r\n return;\r\n }\r\n\r\n if (scrtabsData.enableSwipingElement === 'self') {\r\n $targetElInstance.removeClass(CONSTANTS.CSS_CLASSES.ALLOW_SCROLLBAR);\r\n } else if (scrtabsData.enableSwipingElement === 'parent') {\r\n $targetElInstance.closest('.scrtabs-tab-container').parent().removeClass(CONSTANTS.CSS_CLASSES.ALLOW_SCROLLBAR);\r\n }\r\n\r\n scrtabsData.scroller\r\n .off(CONSTANTS.EVENTS.DROPDOWN_MENU_SHOW)\r\n .off(CONSTANTS.EVENTS.DROPDOWN_MENU_HIDE);\r\n\r\n // if there were any dropdown menus opened, remove the css we added to\r\n // them so they would display correctly\r\n scrtabsData.scroller\r\n .find('[data-' + CONSTANTS.DATA_KEY_DDMENU_MODIFIED + ']')\r\n .css({\r\n display: '',\r\n left: '',\r\n top: ''\r\n })\r\n .off(CONSTANTS.EVENTS.CLICK)\r\n .removeAttr('data-' + CONSTANTS.DATA_KEY_DDMENU_MODIFIED);\r\n\r\n if (scrtabsData.scroller.hasTabClickHandler) {\r\n $targetElInstance\r\n .find('a[data-toggle=\"tab\"]')\r\n .off('.scrtabs');\r\n }\r\n\r\n if (scrtabsData.isWrapperOnly) { // we just wrapped nav-tabs markup, so restore it\r\n // $targetElInstance is the ul.nav-tabs\r\n $tabsContainer = $targetElInstance.parents('.scrtabs-tab-container');\r\n\r\n if ($tabsContainer.length) {\r\n $tabsContainer.replaceWith($targetElInstance);\r\n }\r\n\r\n } else { // we generated the tabs from data so destroy everything we created\r\n if (scrtabsData.scroller && scrtabsData.scroller.initTabs) {\r\n scrtabsData.scroller.initTabs = null;\r\n }\r\n\r\n // $targetElInstance is the container for the ul.nav-tabs we generated\r\n $targetElInstance\r\n .find('.scrtabs-tab-container')\r\n .add('.tab-content')\r\n .remove();\r\n }\r\n\r\n $targetElInstance.removeData('scrtabs');\r\n\r\n $(window).off(CONSTANTS.EVENTS.WINDOW_RESIZE);\r\n $('body').off(CONSTANTS.EVENTS.FORCE_REFRESH);\r\n }\r\n\r\n\r\n $.fn.scrollingTabs = function(methodOrOptions) {\r\n\r\n if (methods[methodOrOptions]) {\r\n return methods[methodOrOptions].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (!methodOrOptions || (typeof methodOrOptions === 'object')) {\r\n return methods.init.apply(this, arguments);\r\n } else {\r\n $.error('Method ' + methodOrOptions + ' does not exist on $.scrollingTabs.');\r\n }\r\n };\r\n\r\n $.fn.scrollingTabs.defaults = {\r\n tabs: null,\r\n propPaneId: 'paneId',\r\n propTitle: 'title',\r\n propActive: 'active',\r\n propDisabled: 'disabled',\r\n propContent: 'content',\r\n ignoreTabPanes: false,\r\n scrollToTabEdge: false,\r\n disableScrollArrowsOnFullyScrolled: false,\r\n forceActiveTab: false,\r\n reverseScroll: false,\r\n widthMultiplier: 1,\r\n tabClickHandler: null,\r\n cssClassLeftArrow: 'chevron-left',\r\n cssClassRightArrow: 'chevron-right',\r\n leftArrowContent: '',\r\n rightArrowContent: '',\r\n enableSwiping: false\r\n };\r\n\r\n\r\n\r\n}(jQuery, window));\r\n","// Google analytics functionality\r\n\r\nwindow.dataLayer = window.dataLayer || [];\r\n\r\nconst _ga = (function () {\r\n \r\n function dataLayerPush(pushEvent) {\r\n window.dataLayer.push(pushEvent);\r\n };\r\n\r\n function mapOrderContainerSize(containerSizeText) {\r\n if (containerSizeText == null) {\r\n return null;\r\n }\r\n switch(containerSizeText) {\r\n case \"Large Container\":\r\n return \"Large\";\r\n case \"Medium Container\": \r\n return \"Medium\";\r\n case \"Small Container\":\r\n return \"Small\"\r\n }\r\n return null;\r\n }\r\n\r\n function mapOrderEventCode(moveLegCode) {\r\n switch(moveLegCode) {\r\n case \"MOV\": \r\n return \"Schedule Move\";\r\n case \"RDL\":\r\n return \"Schedule Delivery\";\r\n case \"FPU\":\r\n return \"Schedule Return\";\r\n case \"WRT\":\r\n return \"Schedule Pickup\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n function createLegToGaEvent(legId, oldOrders, newOrders, userId) {\r\n\r\n if (legId == null || oldOrders == null || oldOrders.length < 0 || newOrders == null || newOrders.length < 0) {\r\n return null;\r\n }\r\n\r\n let orderId = null;\r\n let oldQuoteId = null;\r\n let containerId = null;\r\n let oldLegId = null;\r\n let oldScheduleDate = null;\r\n\r\n // Finding leg object in old orders\r\n for(let i = 0; i < oldOrders.length; i++) { // orders\r\n for(let j = 0; j < oldOrders[i].Containers.length; j++) { // containers\r\n for (let k = 0; k < oldOrders[i].Containers[j].MoveLegs.length; k++) { // legs\r\n let oContainer = oldOrders[i].Containers[j];\r\n let oLeg = oContainer.MoveLegs[k];\r\n if (oLeg.MoveLegId == legId) {\r\n orderId = oContainer.OrderId;\r\n oldQuoteId = oContainer.QuoteId;\r\n containerId = oContainer.ContainerId;\r\n oldLegId = oLeg.MoveLegId;\r\n oldScheduleDate = oLeg.ScheduledDate;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (orderId == null || oldQuoteId == null || containerId == null || oldLegId == null) {\r\n return null;\r\n }\r\n\r\n // Finding leg in new orders and create push object\r\n for(let i = 0; i < newOrders.length; i++) { // orders\r\n for(let j = 0; j < newOrders[i].Containers.length; j++) { // containers\r\n if (newOrders[i].Containers[j].OrderId !== orderId && newOrders[i].Containers[j].ContainerId !== containerId) {\r\n continue;\r\n }\r\n // Creating new legId based on new quoteID\r\n const newLegId = newOrders[i].Containers[j].QuoteId + oldLegId.replace(oldQuoteId, '');\r\n for (let k = 0; k < newOrders[i].Containers[j].MoveLegs.length; k++) { // legs\r\n const oContainer = newOrders[i].Containers[j];\r\n const oLeg = oContainer.MoveLegs[k];\r\n if (oLeg.MoveLegId == newLegId) {\r\n let container = {\r\n user_id: userId,\r\n order_id: oContainer.OrderId,\r\n order_type: oContainer.OrderType,\r\n order_date: oContainer.OrderDate,\r\n quote_id: oContainer.QuoteId,\r\n }\r\n\r\n // Checking if it's a reschedule\r\n if (oldScheduleDate !== null) {\r\n container.event = \"Edit Delivery\";\r\n container.move_leg_details = {\r\n move_leg_code: oLeg.MoveLegType,\r\n delivery_details: {\r\n delivery_date: oLeg.ScheduledDate,\r\n delivery_location: {\r\n postal_code: oLeg.Address.PostalCode,\r\n city: oLeg.Address.City,\r\n state: oLeg.Address.State\r\n }\r\n }\r\n };\r\n return container;\r\n }\r\n\r\n // Checking Move Leg Type\r\n switch(oLeg.MoveLegType) {\r\n case \"MOV\": \r\n container.event = mapOrderEventCode(oLeg.MoveLegType);\r\n container.move_leg_details = {\r\n move_leg_code: oLeg.MoveLegType,\r\n container_size: mapOrderContainerSize(oContainer.ContainerType),\r\n delivery_details: {\r\n delivery_date: oLeg.ScheduledDate,\r\n delivery_location: {\r\n postal_code: oLeg.Address.PostalCode,\r\n city: oLeg.Address.City,\r\n state: oLeg.Address.State\r\n }\r\n }\r\n };\r\n break;\r\n case \"RDL\":\r\n container.event = mapOrderEventCode(oLeg.MoveLegType);\r\n container.confirm_placement = 'True',\r\n container.move_leg_details = {\r\n move_leg_code: oLeg.MoveLegType,\r\n delivery_details: {\r\n delivery_date: oLeg.ScheduledDate,\r\n delivery_location: {\r\n postal_code: oLeg.Address.PostalCode,\r\n city: oLeg.Address.City,\r\n state: oLeg.Address.State\r\n }\r\n }\r\n };\r\n break;\r\n case \"FPU\":\r\n container.event = mapOrderEventCode(oLeg.MoveLegType);\r\n container.move_leg_details = {\r\n move_leg_code: oLeg.MoveLegType,\r\n delivery_details: {\r\n delivery_date: oLeg.ScheduledDate,\r\n delivery_location: {\r\n postal_code: oLeg.Address.PostalCode,\r\n city: oLeg.Address.City,\r\n state: oLeg.Address.State\r\n }\r\n }\r\n };\r\n break;\r\n case \"WRT\":\r\n container.event = mapOrderEventCode(oLeg.MoveLegType);\r\n container.move_leg_details = {\r\n move_leg_code: oLeg.MoveLegType,\r\n pickup_details: {\r\n pickup_date: oLeg.ScheduledDate,\r\n pickup_location: {\r\n postal_code: oLeg.Address.PostalCode,\r\n city: oLeg.Address.City,\r\n state: oLeg.Address.State\r\n }\r\n }\r\n };\r\n break;\r\n default:\r\n return null;\r\n }\r\n return container;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function pushMoveLegSubmit(legId, oldOrders, newOrders, userId) {\r\n try {\r\n var gaEvent = createLegToGaEvent(legId, oldOrders, newOrders, userId);\r\n if (gaEvent) {\r\n dataLayerPush(gaEvent);\r\n }\r\n } catch(err) {\r\n console.error(err); \r\n }\r\n }\r\n\r\n function pushMoveLegError(moveLegCode, errorType, errorLabel, errorSource, userId) {\r\n try {\r\n const errorEvent = {\r\n 'event': 'ERROR: ' + mapOrderEventCode(moveLegCode),\r\n error_details: {\r\n move_leg_code: moveLegCode,\r\n error_payload: {\r\n error_type: errorType,\r\n error_label: errorLabel,\r\n error_source: errorSource,\r\n user_id: userId \r\n }\r\n }\r\n };\r\n dataLayerPush(errorEvent);\r\n } catch(err) {\r\n console.error(err)\r\n }\r\n }\r\n\r\n return {\r\n pushMoveLegSubmit: pushMoveLegSubmit,\r\n pushMoveLegError: pushMoveLegError\r\n };\r\n})();\r\n","(function ($) {\r\n /* --------------------------- Edit/Cancel Toggle --------------------------- */\r\n const accountEditInit = function () {\r\n $(document).on('click', '.btn-edit', function (e) {\r\n e.preventDefault();\r\n const target = $(this).data('edit-target');\r\n const panel = $(`[data-id=\"${target}\"]`);\r\n const edit = $(this).data('edit');\r\n const cancel = $(this).data('cancel');\r\n const forceHide = $('.body-content');\r\n\r\n let slidePanel = null;\r\n\r\n $('.container-account .component-account .infobody').addClass('active');\r\n if ($(this).attr('id') !== 'link-address2InfoPanel') {\r\n $('#address2InfoBody.hideextra .keepopen:not(.hideextra)').attr('style', 'display: flex !important');\r\n } else {\r\n $('#address2InfoBody.hideextra .keepopen:not(.hideextra)').attr('style', '');\r\n }\r\n\r\n if ($(this).hasClass('keepopen')) {\r\n slidePanel = $(this).parent().parent().parent().next('.component-account-edit-details');\r\n } else {\r\n slidePanel = $(this).parent().parent().parent().find('.component-account-edit-details');\r\n }\r\n if(target == \"emailInfoPanel\" || target == \"contactInfoPanel\"){\r\n slidePanel = $('#'+target);\r\n }\r\n\r\n $('.component-account-edit-details').slideUp(0).attr('style', '');\r\n $(slidePanel).slideToggle(250);\r\n\r\n $(this).parent().parent().find('.body').find('.body-content').addClass('forcehide');\r\n\r\n $('.component-account-edit-details').removeClass('active');\r\n $(forceHide).removeClass('forcehide');\r\n\r\n if ($(this).hasClass('active')) {\r\n $(panel).siblings('.infobody.active').find('.body-2').removeClass('active');\r\n $(this).removeClass('active').find('span').text(edit); // Revert text label\r\n $(panel).removeClass('active');\r\n $(panel).siblings('.infobody').addClass('active');\r\n $(panel).parents().siblings('.infobody').addClass('active');\r\n\r\n if ($(this).parent().parent().hasClass('payment')) {\r\n $(panel).closest('.infobody').addClass('active');\r\n } else {\r\n $(panel).closest('.infobody').removeClass('active');\r\n }\r\n\r\n $('.component-account-title').each(function () {\r\n const changeText = $(this).find('.btn-edit').attr('data-edit');\r\n $(this).find('.btn-edit').removeClass('active');\r\n $(this).find('.btn-edit').find('span').text(changeText);\r\n });\r\n\r\n $('.component-account-field').each(function () {\r\n const changeText = $(this).find('.btn-edit').attr('data-edit');\r\n $(this).find('.btn-edit').removeClass('active');\r\n $(this).find('.btn-edit').find('span').text(changeText);\r\n });\r\n if ($(this).attr('id') === 'link-address2InfoPanel') {\r\n $(this).parentsUntil('.component-account').removeClass('hideextra');\r\n }\r\n\r\n // Reset the textboxes to the original values from when they opened the edit panel\r\n $(\"#\" + target + \" input[type=text]\").each(function () {\r\n $(this).val($(this).data(\"original-value\"));\r\n });\r\n } else {\r\n \r\n // Reset other panels\r\n $('.component-account-title').each(function () {\r\n const changeText = $(this).find('.btn-edit').attr('data-edit');\r\n $(this).find('.btn-edit').removeClass('active');\r\n $(this).find('.btn-edit').find('span').text(changeText);\r\n });\r\n\r\n $('.component-account-field').each(function () {\r\n const changeText = $(this).find('.btn-edit').attr('data-edit');\r\n $(this).find('.btn-edit').removeClass('active');\r\n $(this).find('.btn-edit').find('span').text(changeText);\r\n });\r\n\r\n $('.body-2').removeClass('active');\r\n $(this).parent().parent().find('.body-content').addClass('forcehide');\r\n\r\n $(this).addClass('active').find('span').text(cancel); // Change text label\r\n $(panel).addClass('active');\r\n $(panel).siblings('.infobody').removeClass('active');\r\n if(target == \"emailInfoPanel\")\r\n $(\"#contactInfoBody\").addClass('active');\r\n if(target == \"contactInfoPanel\")\r\n $(\"#emailInfoBody\").addClass('active'); \r\n $(this).parent().parent().parent().addClass('active');\r\n $(panel).parents().siblings('.infobody').addClass('active');\r\n $(panel).siblings('.infobody.active').find('.body-2').addClass('active');\r\n\r\n if ($(this).attr('id') === 'link-address2InfoPanel') {\r\n $(this).parentsUntil('.component-account').addClass('hideextra');\r\n }\r\n\r\n if ($(this).parent().parent().hasClass('payment')) {\r\n $(panel).closest('.infobody').addClass('active');\r\n $(this).parent().parent().siblings('.infobody').addClass('active');\r\n } else {\r\n $(panel).closest('.infobody').removeClass('active');\r\n }\r\n if($(this).attr(\"id\") == \"link-passwordSecurityPanel\"){\r\n $('#passwordSecurityPanel input[type=password]').val(\"\");\r\n $(\"#passwordSecurityPanel .password-conditions li\").removeClass(\"pass\").removeClass(\"noPass\");\r\n $(\"#passwordSecurityForm .error\").removeClass(\"error\");\r\n $(\".help-block\").addClass(\"hidden\");\r\n }\r\n\r\n // Preserve the original value of the textboxes in case they cancel\r\n $(\"#\" + target + \" input[type=text]\").each(function () {\r\n $(this).data(\"original-value\", $(this).val());\r\n });\r\n }\r\n\r\n if ($(this).attr('id') === 'link-billingNewPaymentPanel') {\r\n $(this).parentsUntil('.component-account').removeClass('active');\r\n }\r\n });\r\n };\r\n\r\n /* -------------------------- Cancel Button Handler ------------------------- */\r\n const accountCancelInit = function () {\r\n const btnCancel = $('.btn-cancel');\r\n\r\n $(document).on('click', '.btn-cancel', function (e) {\r\n e.preventDefault();\r\n const target = $(this).data('target');\r\n const panel = $(`[data-id=\"${target}\"]`);\r\n const linkID = $(panel).parent().siblings('.infobody').find('.btn-edit.active').attr('id');\r\n const link = $(`#${linkID}`);\r\n const linkText = $(link).data('edit');\r\n const forceHide = $('.body-content');\r\n const buttonID = $(this).parent().parent().parent().parent().parent().siblings('.infobody').addClass('active');\r\n const paymentID = $(panel).parent().parent().siblings('infobody').closest('.btn-edit').attr('data-id');\r\n const primaryCard = $('#link-billingPrimaryCardPanel').attr('data-edit');\r\n\r\n $(panel).removeClass('active').attr('style', '');\r\n\r\n $('.component-account-title').each(function () {\r\n const changeText = $(this).find('.btn-edit').attr('data-edit');\r\n $(this).find('.btn-edit').removeClass('active');\r\n $(this).find('.btn-edit').find('span').text(changeText);\r\n });\r\n\r\n $('.component-account-field').each(function () {\r\n const changeText = $(this).find('.btn-edit').attr('data-edit');\r\n $(this).find('.btn-edit').removeClass('active');\r\n $(this).find('.btn-edit').find('span').text(changeText);\r\n });\r\n\r\n $('.btn-edit').removeClass('active');\r\n $(panel).removeClass('active');\r\n $(panel).siblings('.infobody').removeClass('active');\r\n $(link).removeClass('active').find('span').text(linkText);\r\n $(linkID).removeClass('active');\r\n $(forceHide).removeClass('forcehide');\r\n $(buttonID).addClass('active');\r\n $(paymentID).addClass('active');\r\n $(this).parent().parent().parent().parent().parent().siblings('.infobody').addClass('active');\r\n $('#link-billingNewPaymentPanel').removeClass('active');\r\n $('#link-billingPrimaryCardPanel').removeClass('active').find('span').text(primaryCard);\r\n\r\n if ($(this).attr('id') === 'addPaymentCancel') {\r\n $('#billingNewPaymentBody').addClass('active');\r\n $(\"#billingNewPaymentForm\")[0].reset();\r\n $(\".payment-choice\").hide();\r\n }\r\n });\r\n };\r\n\r\n const paymentChoiceInit = function () {\r\n $(document).on('click', '.payment-choice-btn input', function (e) {\r\n // e.preventDefault();\r\n // alert($('.payment-choice-btn input:radio:checked').val());\r\n $(\".payment-choice\").hide();\r\n $('#'+$('.payment-choice-btn input:radio:checked').val()).show();\r\n })\r\n };\r\n const init = () => {\r\n /* ----------------------- Initialize Button Handlers ---------------------- */\r\n if ($('.btn-edit').length) { accountEditInit(); }\r\n if ($('.btn-cancel').length) { accountCancelInit(); }\r\n if($('.payment-choice-btn').length){ paymentChoiceInit(); }\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n","(function ($) {\r\n let idleTimeCount = 1;\r\n let idleInterval;\r\n let idleTime;\r\n let idleClose;\r\n let screenTop;\r\n let windowWidth;\r\n const commBar = $('.component-communication-bar');\r\n const time = 1000; // 1 second\r\n\r\n const timerIncrement = () => {\r\n idleTimeCount += 1;\r\n\r\n if (idleTimeCount > (idleTime / 1000)) {\r\n $('.need-help').addClass('active');\r\n clearInterval(idleInterval);\r\n\r\n setTimeout(() => {\r\n $('.need-help').removeClass('active');\r\n }, idleClose);\r\n }\r\n };\r\n\r\n const needHelpNotification = function () {\r\n idleTime = ($('.need-help').data('idle') * time);\r\n idleClose = ($('.need-help').data('close') * time);\r\n\r\n // Increment the \"idle time\" counter every second.\r\n idleInterval = setInterval(timerIncrement, idleTime);\r\n\r\n // Clear the idle timer on mouse movement.\r\n $(window).mousemove(() => {\r\n idleTimeCount = 0;\r\n });\r\n\r\n $(window).keypress(() => {\r\n idleTimeCount = 0;\r\n });\r\n };\r\n\r\n const communicationBar = () => {\r\n // Stick the Communication Bar to the bottom of the page and unstick when scrolled past its vertical position\r\n\r\n let communicationBarPos = 0;\r\n\r\n $(commBar).addClass('affix');\r\n\r\n $(window).on('scroll', () => {\r\n if (commBar.length > 0) {\r\n const bottom = commBar.position().top + commBar.outerHeight(true);\r\n\r\n if (bottom === communicationBarPos && communicationBarPos != null) {\r\n commBar.removeClass('affix');\r\n } else {\r\n commBar.addClass('affix');\r\n }\r\n\r\n communicationBarPos = bottom;\r\n }\r\n });\r\n\r\n if ($(window).height() >= $(document).height()) {\r\n $(commBar).removeClass('affix'); // If page is shorter than the screen, un-affix footer from bottom\r\n }\r\n };\r\n\r\n const supportAndContact = () => {\r\n const button = $('.support-contact');\r\n const panel = $('#supportAndContact');\r\n const panelClose = $(panel).find('.close');\r\n\r\n button.on('click', (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n windowWidth = $(window).width();\r\n\r\n // Stretch the icon's width to match design\r\n $('.feather-arrow-right').find('line').attr('x1', 0);\r\n\r\n $(button).blur();\r\n $(panelClose).focus();\r\n\r\n if (windowWidth <= 586) {\r\n $(commBar).addClass('active');\r\n $('body').addClass('noscroll');\r\n\r\n screenTop = $(document).scrollTop();\r\n\r\n $(panel).insertBefore('header');\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n $(panel).addClass('active');\r\n });\r\n\r\n $(document).click((e) => {\r\n if ($(e.target).closest('#supportAndContact').length === 0) {\r\n $(commBar).removeClass('active');\r\n $(panel).removeClass('active');\r\n }\r\n });\r\n\r\n panelClose.on('click', (e) => {\r\n e.preventDefault();\r\n windowWidth = $(window).width();\r\n\r\n if (windowWidth <= 586) {\r\n $(panel).insertAfter('.support-contact');\r\n window.scrollTo(0, screenTop);\r\n $('body').removeClass('noscroll');\r\n }\r\n\r\n $(commBar).removeClass('active');\r\n $(panel).removeClass('active');\r\n $('body').removeClass('cb-open');\r\n });\r\n };\r\n\r\n const init = () => {\r\n communicationBar();\r\n needHelpNotification();\r\n supportAndContact();\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n","let containerTimelineJourneyVM = {};\r\n\r\nfunction assignContainerTimelineJourneyVM() {\r\n containerTimelineJourneyVM = {\r\n Containers: ko.observableArray(),\r\n Steps: ko.observableArray(), // Container Placement Array\r\n enableprev: ko.observable(false),\r\n enablenext: ko.observable(false),\r\n };\r\n}\r\n\r\nfunction formatDate(date) {\r\n if (!date) {\r\n return '';\r\n }\r\n const d = new Date(date);\r\n let month = `${d.getMonth() + 1}`;\r\n let day = `${d.getDate()}`;\r\n const year = d.getFullYear();\r\n\r\n if (month.length < 2) month = `0${month}`;\r\n if (day.length < 2) day = `0${day}`;\r\n\r\n return [month, day, year].join('-');\r\n}\r\n\r\nfunction formatFinanceDate(date) {\r\n if (!date) {\r\n return '';\r\n }\r\n const d = new Date(date);\r\n let month = `${d.getMonth() + 1}`;\r\n let day = `${d.getDate()}`;\r\n const year = d.getFullYear();\r\n\r\n if (month.length < 2) month = `0${month}`;\r\n if (day.length < 2) day = `0${day}`;\r\n\r\n return [year, month, day].join('-');\r\n}\r\n\r\nconst initContainerTimelineJourney = () => {\r\n if ($('#component-timeline-journey').length > 0) {\r\n ko.applyBindings(containerTimelineJourneyVM, document.getElementById('component-timeline-journey'));\r\n }\r\n\r\n refreshContainers();\r\n};\r\n\r\nfunction refreshContainers(flag) {\r\n if ($('#component-timeline-journey').length > 0 && window.customerOrders.Orders) {\r\n const orderObj = window.customerOrders.Orders;\r\n\r\n generateContainers(orderObj);\r\n feather.replace();\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n // Reinitialize DatePicker After Submitting Move Leg\r\n if (flag == false) {\r\n addDatePicker();\r\n }\r\n\r\n $('.ZipCode').each(function () {\r\n const postalCode = $(this).val();\r\n\r\n if (postalCode.length > 0) {\r\n if ($(this).closest('.component-timeline_journey-card').find('.datepicker.valid').length) {\r\n enableContainerPlacement($(this));\r\n enableSubmitIfValid();\r\n }\r\n }\r\n });\r\n\r\n setupCityStateSubmit();\r\n setupAddressValidation();\r\n setupMoveLegSubmit();\r\n setupGoogleApiAddressAutocomplete();\r\n }\r\n\r\n if (flag != undefined) {\r\n $('.datepicker').datepicker().on('changeDate', function () {\r\n $('.component-timeline_journey-card.active').find('.submitScheduleForm').removeClass('disabled');\r\n });\r\n }\r\n \r\n}\r\n\r\n// Containers Observables Defination\r\n\r\nlet ko_Container = function (container) {\r\n const self = this;\r\n\r\n if (container) {\r\n self.orderId = ko.observable(container.OrderId);\r\n self.quoteId = ko.observable(container.QuoteId);\r\n self.price = ko.observable(container.Price);\r\n self.orderDateFormatted = ko.observable(container.OrderDateFormatted);\r\n self.isCityService = ko.observable(container.IsCityService);\r\n self.legNumberLabel = ko.observable(container.OrderNumberLabel);\r\n self.containerType = ko.observable(container.ContainerType);\r\n self.containerId = ko.observable(container.ContainerId);\r\n self.etaDays = ko.observable(container.ETADays);\r\n self.etaDaysText = ko.observable(container.ETADaysText);\r\n self.containerImg = ko.observable(container.ContainerImageSrc);\r\n self.containerImgAlt = ko.observable(container.ContainerImageAlt);\r\n self.moveLegs = ko.observableArray();\r\n self.togglePrevText = ko.observable(false);\r\n self.toggleNextText = ko.observable(false);\r\n self.showUpcomingText = ko.observable(container.ShowUpcomingText);\r\n self.showPreviousText = ko.observable(container.ShowPreviousText);\r\n self.hideUpcomingText = ko.observable(container.HideUpcomingText);\r\n self.hidePreviousText = ko.observable(container.HidePreviousText);\r\n self.moveLegTemplate = function (moveLeg) {\r\n return moveLeg.legKnockoutTemplateName();\r\n };\r\n self.toggleShowHide = function(data, ev) {\r\n let visibleMoveLegs = $(ev.currentTarget).closest('.component-timeline_journey').find('.component-timeline_journey-card[data-active=true]');\r\n\r\n if (data == 'prev') {\r\n visibleMoveLegs.first().prevAll().toggleClass('d-none');\r\n this.togglePrevText(!this.togglePrevText());\r\n } else if (data == 'next') {\r\n visibleMoveLegs.last().nextAll().toggleClass('d-none');\r\n this.toggleNextText(!this.toggleNextText());\r\n }\r\n };\r\n self.legFormVisible = ko.observable(false);\r\n self.legFormType = ko.observable();\r\n }\r\n};\r\n\r\nconst ko_Legs = function (leg, container) {\r\n const self = this;\r\n\r\n if (leg) {\r\n self.cancel = (data, ev) => {};\r\n self.container = container;\r\n self.legKnockoutTemplateName = ko.observable(leg.MoveLegKnockoutTemplateName);\r\n self.legEta = ko.observable(leg.ETA);\r\n self.legId = ko.observable(leg.MoveLegId);\r\n self.legStatus = ko.observable(leg.MoveLegStatus);\r\n self.legType = ko.observable(leg.MoveLegType);\r\n self.warehouseCode = ko.observable(leg.WarehouseCode);\r\n self.legScheduledDate = ko.observable(formatDate(leg.ScheduledDate));\r\n self.legScheduledDateFormatted = ko.observable(leg.ScheduledDateFormatted);\r\n self.legTransitDays = ko.observable(leg.TransitDays);\r\n self.legActive = ko.observable(leg.isActive);\r\n self.legNextStep = ko.observable(leg.isNextStep);\r\n self.legTitle = ko.observable(leg.MoveLegTitle);\r\n self.legDescription = ko.observable(leg.MoveLegDescription);\r\n self.legDateLabel = ko.observable(leg.MoveLegDateLabel);\r\n self.legPickupDetails = ko.observable(leg.MovePickupDetails);\r\n self.legToolTip = ko.observable(leg.MoveToolTip);\r\n self.legWindowLabel = ko.observable(leg.MoveLegWindowLabel);\r\n self.legAddressLabel = ko.observable(leg.MoveLegAddressLabel);\r\n self.legDeliveryAddress = ko.observable(leg.Address);\r\n self.legAvailabilityOriginZip = ko.observable(leg.AvailabilityOriginZip);\r\n self.legAvailabilityOriginCountry = ko.observable(leg.AvailabilityOriginCountry);\r\n self.legAvailabilityDestinationZip = ko.observable(leg.AvailabilityDestinationZip);\r\n self.legAvailabilityDestinationCountry = ko.observable(leg.AvailabilityDestinationCountry);\r\n self.legEdit = ko.observable(leg.isEdit);\r\n self.legCityService = ko.observable(leg.isCityService);\r\n self.legInlineForm = ko.observable(leg.isInlineForm);\r\n self.legScheduleForm = ko.observable(leg.isScheduleForm);\r\n self.legPodsTip = ko.observable(leg.isPodsTip);\r\n self.legContainerPlacement = ko. observable(leg.isContainerPlacement);\r\n self.editDetailsHelpText = ko.observable(leg.EditDetailsHelpText);\r\n self.loadFinance = ko.observable(leg.LoadFinance);\r\n self.financeTag = ko.observable();\r\n if(leg.LoadFinance) {\r\n self.financeTag = ko.observable('');\r\n }\r\n self.loadPaymentAmountWidget = function loadPaymentAmountWidget() {\r\n setTimeout(function(){\r\n if(acornParameters != undefined && acornParameters != null) {\r\n acornParameters.loanAmount = self.container.price()\r\n acornParameters.merCustomerId = window.customerOrders.UserId\r\n acornParameters.merRefId = self.container.quoteId() //Use prefix POD- with suffix PODS's Quote Number (PAW will set utm_content to this value too)\r\n acornParameters.merOrderId = self.container.orderId()\r\n acornParameters.merDeliveryDate = formatFinanceDate(leg.ScheduledDate)\r\n acornParameters.hideWidget = false // false or null or none, true (optional overrides the merDeliveryDate logic)\r\n acornParameters.utm_source = 'MyPODS-Orders'\r\n acornParameters.docSource = 'MyPODS-Orders'\r\n if(window.customerOrders.User != null){\r\n acornParameters.personalInfo = {\r\n firstname: window.customerOrders.User.FirstName,\r\n lastName: window.customerOrders.User.LastName,\r\n email: window.customerOrders.User.Email,\r\n phonenumber: window.customerOrders.User.PhoneNumber,\r\n city: window.customerOrders.User.City, \r\n state: window.customerOrders.User.State,\r\n streetaddress: window.customerOrders.User.Address,\r\n apartment: window.customerOrders.User.Apartment,\r\n zipcode: window.customerOrders.User.Zipcode\r\n }\r\n }\r\n setAcornWidget('acorn-mypods-widget');\r\n }\r\n }, 300)\r\n\t\t}\r\n\r\n if (leg.isPodsTip) {\r\n self.podsTipIconSrc = ko.observable(leg.PodsTip.IconSrc);\r\n self.podsTipIconAlt = ko.observable(leg.PodsTip.IconAlt);\r\n self.podsTipTitle = ko.observable(leg.PodsTip.TitleText);\r\n self.podsTipDescription = ko.observable(leg.PodsTip.HelpText);\r\n }\r\n\r\n if (leg.isNextStep) {\r\n self.nextStepTitle = ko.observable(leg.NextStepTitle);\r\n self.nextStepDescription = ko.observable(leg.NextStepDescription);\r\n self.nextStepCtaText = ko.observable(leg.NextStepCtaText);\r\n }\r\n\r\n if (leg.isEdit) {\r\n self.editDetailsCtaText = ko.observable(leg.EditDetailsCtaText);\r\n }\r\n\r\n if (leg.isScheduleForm || leg.MoveLegKnockoutTemplateName === 'visitform-ml-template') {\r\n self.scheduleTitle = ko.observable(leg.ScheduleTitle);\r\n self.scheduleDescription = ko.observable(leg.ScheduleDescription);\r\n self.scheduleLocationTitle = ko.observable(leg.ScheduleLocationTitle);\r\n self.scheduleDateLabel = ko.observable(leg.ScheduleDateLabel);\r\n self.scheduleDateInformation = ko.observable(leg.ScheduleDateInformation);\r\n self.scheduleConfirmButtonLabel = ko.observable(leg.ScheduleConfirmButtonLabel);\r\n self.scheduleCancelButtonLabel = ko.observable(leg.ScheduleCancelButtonLabel);\r\n self.scheduleDateHelperLabel = ko.observable(leg.ScheduleDateHelperLabel);\r\n self.additionalChargeConfirmationMessageText = ko.observable(leg.AdditionalChargeConfirmationMessageText);\r\n self.refundConfirmationMessageText = ko.observable(leg.RefundConfirmationMessageText);\r\n self.confirmationButtonText = ko.observable(leg.ConfirmationButtonText);\r\n self.disableWindow = ko.observable(leg.DisableWindow); \r\n self.reschedulingWindow = ko.observable(leg.ReschedulingWindow);\r\n\r\n if (leg.AccessContainerDateHeader) {\r\n self.accessContainerDateHeader = ko.observable(leg.AccessContainerDateHeader);\r\n self.orText = ko.observable(leg.OrText);\r\n self.cancelVisitCtaText = ko.observable(leg.CancelVisitCtaText);\r\n self.nevermindCancelVisitCtaText = ko.observable(leg.NevermindCancelVisitCtaText);\r\n self.previousScheduledDateFormatted = ko.observable(leg.PreviousScheduledDateFormatted);\r\n self.previousLegDateLabel = ko.observable(leg.PreviousLegDateLabel);\r\n self.schedulePreviousLegDateLabel = ko.observable(leg.SchedulePreviousLegDateLabel);\r\n \r\n self.hasParentAction = ko.observable(false);\r\n\r\n // TODO: set up \"cancel\"\r\n }\r\n }\r\n\r\n if (leg.isInlineForm) {\r\n self.scheduleTitle = ko.observable(leg.ScheduleTitle);\r\n self.scheduleDescription = ko.observable(leg.ScheduleDescription);\r\n self.scheduleLocationTitle = ko.observable(leg.ScheduleLocationTitle);\r\n self.scheduleLocationDescription = ko.observable(leg.ScheduleLocationDescription);\r\n self.postalCodeLabel = ko.observable(leg.PostalCodeLabel);\r\n self.postalCodeValidationText = ko.observable(leg.PostalCodeValidationText);\r\n self.addressEmptyValidationText = ko.observable(leg.AddressEmptyValidationText);\r\n self.addressOutsideLocalMarketValidationText = ko.observable(leg.AddressOutsideLocalMarketValidationText);\r\n self.addressOutsideLocalMarketErrorText = ko.observable(leg.AddressOutsideLocalMarketErrorText);\r\n self.postalCodeOutsideServiceAreaValidationText = ko.observable(leg.PostalCodeOutsideServiceAreaValidationText);\r\n self.streetAddress1Label = ko.observable(leg.StreetAddress1Label);\r\n self.streetAddress2Label = ko.observable(leg.StreetAddress2Label);\r\n self.optionalLabel = ko.observable(leg.OptionalLabel);\r\n self.cityLabel = ko.observable(leg.CityLabel);\r\n self.stateLabel = ko.observable(leg.StateLabel);\r\n self.dateLabel = ko.observable(leg.DateLabel);\r\n self.dateInformation = ko.observable(leg.DateInformation);\r\n self.confirmButtonLabel = ko.observable(leg.ConfirmButtonLabel);\r\n self.cancelButtonLabel = ko.observable(leg.CancelButtonLabel);\r\n self.dateHelperLabel = ko.observable(leg.DateHelperLabel);\r\n self.additionalChargeConfirmationMessageText = ko.observable(leg.AdditionalChargeConfirmationMessageText);\r\n self.refundConfirmationMessageText = ko.observable(leg.RefundConfirmationMessageText);\r\n self.confirmationButtonText = ko.observable(leg.ConfirmationButtonText); \r\n self.disableWindow = ko.observable(leg.DisableWindow); \r\n self.reschedulingWindow = ko.observable(leg.ReschedulingWindow);\r\n }\r\n\r\n if (leg.MoveLegKnockoutTemplateName === 'inlineform-ml-template') {\r\n self.legAddress1 = ko.observable(leg.Address.Address1);\r\n self.legAddress2 = ko.observable(leg.Address.Address2);\r\n self.legCity = ko.observable(leg.Address.City);\r\n self.legState = ko.observable(leg.Address.State);\r\n self.legPostalCode = ko.observable(leg.Address.PostalCode);\r\n self.legCountry = ko.observable(leg.Address.Country);\r\n }\r\n\r\n if (leg.MoveLegKnockoutTemplateName === 'scheduleform-ml-template' || leg.MoveLegKnockoutTemplateName === 'visitform-ml-template' || leg.isScheduleForm) {\r\n self.schedulingRuleCanSchedule = ko.observable(leg.SchedulingRule.CanSchedule);\r\n self.schedulingRuleStartDate = ko.observable(leg.SchedulingRule.ScheduleStart);\r\n self.schedulingRuleEndDate = ko.observable(leg.SchedulingRule.ScheduleEnd);\r\n\r\n if (leg.SchedulingRule.CanSchedule) {\r\n self.editDetailsCtaText = ko.observable(leg.EditDetailsCtaText);\r\n }\r\n }\r\n\r\n if (leg.isContainerPlacement) {\r\n self.icpTitle = ko.observable(leg.ContainerPlacement.Title);\r\n self.icpHelpText = ko.observable(leg.ContainerPlacement.HelpText);\r\n self.icpIconId = ko.observable(leg.ContainerPlacement.IconId);\r\n self.icpConfirmedMessage = ko.observable(leg.ContainerPlacement.ConfirmedMessage);\r\n self.icpImageAlt = ko.observable(leg.ContainerPlacement.ImageAlt);\r\n self.icpImageUrl = ko.observable(leg.ContainerPlacement.ImageUrl);\r\n self.icpCtaText = ko.observable(leg.ContainerPlacement.CtaText);\r\n self.icpValidationMessage = ko.observable(leg.ContainerPlacement.ValidationMessage);\r\n }\r\n\r\n if (leg.MoveLegKnockoutTemplateName === 'actionable-ml-template') {\r\n self.previousScheduledDateFormatted = ko.observable(leg.PreviousScheduledDateFormatted);\r\n if (leg.Action1MoveLeg) {\r\n self.action1CtaText = ko.observable(leg.Action1CtaText);\r\n self.action1MoveLeg = new ko_Legs(leg.Action1MoveLeg, container);\r\n self.action1MoveLeg.parentActionMoveLeg = self;\r\n self.action1MoveLeg.hasParentAction(true);\r\n\r\n self.toggleAction1 = (data, ev) => {\r\n ev.preventDefault();\r\n let targetLeg = self.action1MoveLeg;\r\n self.container.moveLegs.replace(self, targetLeg);\r\n feather.replace();\r\n addDatePicker();\r\n setupMoveLegSubmit();\r\n };\r\n self.action1MoveLeg.cancel = (data, ev) => {\r\n ev.preventDefault();\r\n let targetLeg = self.action1MoveLeg;\r\n self.container.moveLegs.replace(targetLeg, self);\r\n feather.replace();\r\n };\r\n }\r\n if (leg.Action2MoveLeg) {\r\n self.action2CtaText = ko.observable(leg.Action2CtaText);\r\n self.action2MoveLeg = new ko_Legs(leg.Action2MoveLeg, container);\r\n self.action2MoveLeg.parentActionMoveLeg = self;\r\n self.action2MoveLeg.hasParentAction(true);\r\n \r\n self.toggleAction2 = (data, ev) => {\r\n ev.preventDefault();\r\n let targetLeg = self.action2MoveLeg;\r\n self.container.moveLegs.replace(self, targetLeg);\r\n feather.replace();\r\n addDatePicker();\r\n setupMoveLegSubmit();\r\n };\r\n self.action2MoveLeg.cancel = (data, ev) => {\r\n ev.preventDefault();\r\n let targetLeg = self.action2MoveLeg;\r\n self.container.moveLegs.replace(targetLeg, self);\r\n feather.replace();\r\n };\r\n }\r\n \r\n self.handleSubmitActionableForm = (data, ev) => {\r\n ev.preventDefault();\r\n $(\"#CancelPickup .btn-primary\").off('click').on('click', () => {\r\n console.log(ev);\r\n submitActionableForm($(ev.currentTarget).closest('.component-timeline_journey-card'));\r\n $(\"#CancelPickup\").modal(\"hide\"); \r\n });\r\n $(\"#CancelPickup\").modal(\"show\");\r\n \r\n }\r\n self.actionableState = ko.observable(leg.MoveLegType);\r\n }\r\n\r\n self.legStatusIcon = ko.computed(() => {\r\n let status = this.legStatus();\r\n let completedIcon = 'check-circle';\r\n let scheduledIcon = 'circle';\r\n\r\n if (status == 'Completed') {\r\n return completedIcon;\r\n }\r\n\r\n return scheduledIcon;\r\n });\r\n\r\n self.toggleForm = function (data, ev) {\r\n data.legFormVisible(true);\r\n data.legFormType((`${ev.currentTarget.dataset.formType}-leg-form`).toLowerCase());\r\n feather.replace();\r\n };\r\n\r\n self.inProgress = function ($parent, e) {\r\n $(e.currentTarget).parentsUntil('.component-timeline_journey-card').parent().addClass('InProgress');\r\n return true;\r\n };\r\n }\r\n};\r\n\r\n// Container Placement Observables Definition\r\n\r\nlet ko_ContainerPlacement = function (containers) {\r\n let self = this;\r\n\r\n if (containers) {\r\n self.ModalTitle = ko.observable(containers.ModalTitle);\r\n self.CurrentStepId = ko.observable(containers.CurrentStepId);\r\n self.PreviousStepId = ko.observable(containers.PreviousStepId);\r\n self.QuestionText = ko.observable(containers.QuestionText);\r\n self.HelpText = ko.observable(containers.HelpText);\r\n self.ImageSrc = ko.observable(containers.ImageSrc);\r\n self.ImageAlt = ko.observable(containers.ImageAlt);\r\n self.BackButtonText = ko.observable(containers.BackButtonText);\r\n self.NextButtonText = ko.observable(containers.NextButtonText);\r\n self.FinishButtonText = ko.observable(containers.FinishButtonText);\r\n self.isRadioOnly = ko.observable(containers.IsRadioOnly);\r\n self.isImageAnswers = ko.observable(containers.IsImageAnswers);\r\n self.isPodsTip = ko.observable(containers.IsPodsTip);\r\n self.isTextArea = ko.observable(containers.IsTextArea);\r\n self.isLastStep = ko.observable(containers.IsLastStep);\r\n self.Answers = ko.observable(containers.Answers);\r\n self.PodsTip = ko.observable(containers.PodsTip);\r\n self.PodsTipIcon = ko.observable(containers.PodsTip.IconSrc);\r\n self.PodsTipIconAlt = ko.observable(containers.PodsTip.IconAlt);\r\n self.PodsTipTitle = ko.observable(containers.PodsTip.TitleText);\r\n self.PodsTipHelptext = ko.observable(containers.PodsTip.HelpText);\r\n self.isContainerReviewPanel = ko.observable(containers.IsContainerReviewPanel);\r\n self.ContainerReviewPanel = ko.observable(containers.ContainerReviewPanel);\r\n self.ContainerReviewPanelSubTitle = ko.observable(containers.ContainerReviewPanel.SubTitle);\r\n self.ContainerReviewPanelType = ko.observable(containers.ContainerReviewPanel.Type);\r\n self.ContainerReviewPanelPlacementTitle = ko.observable(containers.ContainerReviewPanel.PlacementTitle);\r\n self.ContainerReviewPanelPlacementImg = ko.observable(containers.ContainerReviewPanel.PlacementImg);\r\n self.ContainerReviewPanelPlacementImgAlt = ko.observable(containers.ContainerReviewPanel.PlacementImgAlt);\r\n self.ContainerReviewPanelInstructionTitle = ko.observable(containers.ContainerReviewPanel.InstructionTitle);\r\n self.ContainerReviewPanelInstructionText = ko.observable(containers.ContainerReviewPanel.InstructionText);\r\n self.isMultiselectPanel = ko.observable(containers.IsMultiselectPanel);\r\n self.MultiselectPanel = ko.observable(containers.MultiselectPanel);\r\n self.ZipRegulations = ko.observable(containers.ZipRegulations);\r\n self.enablefinish = ko.observable(false);\r\n self.TotalSteps = ko.observable(containers.TotalSteps);\r\n self.CurrentQuestion = ko.observable(1);\r\n\r\n self.Width = ko.computed(function() {\r\n var progress = 0;\r\n progress = parseInt(100 * currentStep / self.TotalSteps());\r\n (progress > 100) && (progress = 100);\r\n var result = String(progress) + '%'; //css width property\r\n return result;\r\n });\r\n }\r\n};\r\n\r\n// Container Placement function to collect Data\r\n\r\nfunction generateContainerPlacement (placeObj) {\r\n if (placeObj) {\r\n placeObj.forEach((place) => {\r\n const i = new ko_ContainerPlacement(place);\r\n containerTimelineJourneyVM.Steps.push(i);\r\n });\r\n }\r\n}\r\n\r\nfunction generateContainers(orderObj) {\r\n containerTimelineJourneyVM.Containers.removeAll();\r\n\r\n orderObj.forEach(oOrder => {\r\n oOrder.Containers.forEach(oContainer => {\r\n let i = new ko_Container(oContainer);\r\n let lastMoveLeg;\r\n\r\n oContainer.MoveLegs.forEach((leg) => {\r\n let currentleg = new ko_Legs(leg, i);\r\n i.moveLegs.push(currentleg);\r\n\r\n // Save next move leg\r\n if (lastMoveLeg)lastMoveLeg.nextMoveLeg = currentleg;\r\n\r\n // Update last move leg\r\n lastMoveLeg = currentleg;\r\n });\r\n\r\n containerTimelineJourneyVM.Containers.push(i);\r\n });\r\n });\r\n}\r\n\r\nfunction handleMoveLegSubmissionResponse(moveLeg, data) {\r\n if (data) {\r\n if (data.Success == true && data.RequiresConfirmation == true) {\r\n // Show confirmation message\r\n let confirmationMessageTag = moveLeg.find('.confirmation-texts');\r\n if (data.PriceDifference < 0) {\r\n confirmationMessageTag.html(confirmationMessageTag.attr('data-refundConfirmationMessageText').replace('{PriceDifference}', (data.PriceDifference * -1)));\r\n } else {\r\n confirmationMessageTag.html(confirmationMessageTag.attr('data-additionalChargeConfirmationMessageText').replace('{PriceDifference}', data.PriceDifference));\r\n }\r\n confirmationMessageTag.removeClass('d-none');\r\n \r\n // Update button text\r\n let confirmationButtonTag = moveLeg.find('.submitForm');\r\n confirmationButtonTag.html(confirmationMessageTag.attr('data-confirmationButtonText'));\r\n\r\n // Attach Quote ID\r\n moveLeg.attr('data-quoteId', data.QuoteId);\r\n\r\n // Flip panels\r\n moveLeg.find('.book-loading').addClass('d-none');\r\n moveLeg.find('.progress-content.showEdit').removeClass('d-none')\r\n } else if (data.Success == true) {\r\n moveLeg.find('.book-loading').addClass('d-none');\r\n moveLeg.find('.book-booked').removeClass('d-none');\r\n\r\n setTimeout(function () {\r\n if (data.Orders) {\r\n // Adding google analytics\r\n _ga.pushMoveLegSubmit(moveLeg.attr('data-legId'), window.customerOrders.Orders, data.Orders, window.customerOrders.UserId);\r\n\r\n window.customerOrders = data;\r\n \r\n var flag = false;\r\n refreshContainers(flag); // Need to re-get the moveLeg now that we've refreshed the containers and re-show the loading markup\r\n \r\n moveLeg = $('[data-legid=' + moveLeg.attr('data-legId') + ']'); \r\n }\r\n moveLeg.find('.book-booked').addClass('d-none');\r\n }, 1000);\r\n } else {\r\n moveLeg.find('.book-loading').addClass('d-none');\r\n let errorContainer = moveLeg.find('.book-error');\r\n errorContainer.removeClass('d-none');\r\n\r\n // Wire up the \"try again\" button to re-show the edit screen\r\n errorContainer.find(\"a.try-again\").off(\"click\").on(\"click\", function(e) {\r\n e.preventDefault();\r\n $(this).closest('.component-timeline_journey-card.active').find('.progress-content.showEdit').removeClass('d-none');\r\n errorContainer.addClass('d-none');\r\n });\r\n _ga.pushMoveLegError(moveLeg.attr('data-legType'), data.NotificationTitle, data.FriendlyErrorMessage, data.ExceptionMessage, window.customerOrders.UserId);\r\n }\r\n\r\n // Once Container placement journey is done and successful, reset the progress and make the StepCheck back to false.\r\n currentStep = 0;\r\n finishStepCheck = false;\r\n } else {\r\n showNotification('error', 'Error submitting move leg');\r\n _ga.pushMoveLegError(moveLeg.attr('data-legType'), \"handleMoveLegSubmissionResponse\", \"No data return for leg: \" + moveLeg.attr('data-legType'), \"\", window.customerOrders.UserId);\r\n }\r\n}\r\n\r\nfunction submitScheduleForm(moveLeg, clickTarget) {\r\n var containerDatasourceId = moveLeg.closest('.component-timeline').attr('data-datasourceId');\r\n const container = moveLeg.closest('.component-timeline_journey');\r\n const orderId = container.attr('data-orderId');\r\n const containerId = container.attr('data-containerId');\r\n var legId = moveLeg.attr('data-legId');\r\n var legType = moveLeg.attr('data-legType');\r\n var requestedDate = moveLeg.find('.datepicker').val();\r\n var legTransitDays = moveLeg.attr('data-legTransitDays');\r\n var quoteId = moveLeg.attr('data-quoteId');\r\n var isCancelLeg = clickTarget.attr('data-isCancelLeg') == \"true\";\r\n var warehouseCode = moveLeg.attr('data-warehouseCode');\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: '/api/sitecore/Orders/SubmitMoveLeg',\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n cache: false,\r\n data: JSON.stringify({\r\n 'ContainerDatasourceId': containerDatasourceId,\r\n 'OrderId': orderId,\r\n 'ContainerId': containerId,\r\n // \"CustomerId\":\"\", // This will be populated by BED code before sending to Locum\r\n 'MoveLegId': legId, //ServiceId\r\n 'MoveLegType': legType, //ServiceType\r\n 'RequestedDate': requestedDate,\r\n // No address needed to submit because Locum already knows it\r\n // Transit Days only required for WTW leg, other legs will ignore value\r\n 'TransitDays': isNaN(legTransitDays) ? 0 : parseInt(legTransitDays),\r\n 'QuoteId': quoteId,\r\n 'IsCancelLeg': isCancelLeg,\r\n 'SiteIdentity': warehouseCode\r\n }),\r\n beforeSend: function() {\r\n moveLeg.find('.book-loading').removeClass('d-none');\r\n },\r\n success: function(data) {\r\n handleMoveLegSubmissionResponse(moveLeg, data);\r\n },\r\n error: function(data, textStatus, errorThrown) {\r\n console.error('error getting data', textStatus, errorThrown);\r\n _ga.pushMoveLegError(legType, \"submitScheduleForm\", textStatus, errorThrown, window.customerOrders.UserId);\r\n }\r\n });\r\n}\r\n\r\nfunction submitInlineForm(moveLeg, clickTarget) {\r\n var containerDatasourceId = moveLeg.closest('.component-timeline').attr('data-datasourceId');\r\n const container = moveLeg.closest('.component-timeline_journey');\r\n const orderId = container.attr('data-orderId');\r\n const containerId = container.attr('data-containerId');\r\n const legId = moveLeg.attr('data-legId');\r\n const legType = moveLeg.attr('data-legType');\r\n const quoteId = moveLeg.attr('data-quoteId');\r\n const isCancelLeg = moveLeg.attr('data-isCancelLeg') == \"true\";\r\n const warehouseCode = moveLeg.attr('data-warehouseCode');\r\n const requestedDate = moveLeg.find('.datepicker').val();\r\n\r\n const form = moveLeg.find('.inlineForm');\r\n const address1 = $(form).find('.Address1').val();\r\n const address2 = $(form).find('.Address2').val();\r\n const city = $(form).find('.City').val();\r\n const state = $(form).find('.State').val();\r\n const zipCode = $(form).find('.ZipCode').val();\r\n const countryCode = $(form).find('.RegionCode').val();\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: '/api/sitecore/Orders/SubmitMoveLeg',\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n cache: false,\r\n data: JSON.stringify({\r\n 'ContainerDatasourceId': containerDatasourceId,\r\n 'OrderId': orderId,\r\n 'ContainerId': containerId,\r\n //\"CustomerId\":\"\", //this will be populated by BED code before sending to Locum\r\n 'MoveLegId': legId, //ServiceId\r\n 'MoveLegType': legType, //ServiceType\r\n 'RequestedDate': requestedDate,\r\n 'ServiceAddress': {\r\n 'Address1': address1,\r\n 'Address2': address2,\r\n 'City': city,\r\n 'State': state,\r\n 'PostalCode': zipCode,\r\n 'Country': countryCode\r\n },\r\n 'ContainerPlacement': finalArray,\r\n 'QuoteId': quoteId,\r\n 'IsCancelLeg': isCancelLeg,\r\n 'SiteIdentity': warehouseCode\r\n }),\r\n beforeSend: function() {\r\n moveLeg.find('.book-loading').removeClass('d-none');\r\n },\r\n success: function(data) {\r\n handleMoveLegSubmissionResponse(moveLeg, data);\r\n },\r\n error: function(data, textStatus, errorThrown) {\r\n console.error('Error getting data', textStatus, errorThrown);\r\n _ga.pushMoveLegError(legType, \"submitInlineForm\", textStatus, errorThrown, window.customerOrders.UserId);\r\n }\r\n });\r\n}\r\n\r\nfunction populateCities(form, cities, state, regionCode) {\r\n var citiesDropdown = $(form).find('.City');\r\n var stateField = $(form).find('.State');\r\n var regionCodeField = $(form).find('.RegionCode');\r\n\r\n citiesDropdown.html('');\r\n\r\n $(cities).each(function (index, element) {\r\n citiesDropdown.append(``);\r\n $(citiesDropdown).trigger('chosen:updated');\r\n });\r\n\r\n if (cities.length > 1) {\r\n citiesDropdown.prop('disabled', false);\r\n }\r\n\r\n stateField.val(state);\r\n regionCodeField.val(regionCode);\r\n}\r\n\r\nfunction enableContainerPlacement(postalCodeElement) {\r\n // $(postalCodeElement).closest(\".component-timeline_journey-card\").find(\"#containerplacementModal\").removeClass(\"disabled\");\r\n $(postalCodeElement).closest('.component-timeline_journey-card').find('[data-id=containerplacementModal]').removeClass('disabled').prop('disabled', false);\r\n}\r\n\r\nfunction disableContainerPlacement(postalCodeElement) {\r\n// $(postalCodeElement).closest(\".component-timeline_journey-card\").find(\"#containerplacementModal\").addClass(\"disabled\");\r\n $(postalCodeElement).closest('.component-timeline_journey-card').find('[data-id=containerplacementModal]').addClass('disabled').prop('disabled', true);\r\n}\r\n\r\nfunction resetDatePicker(element) {\r\n const form = element.closest('.inlineForm');\r\n form.find('.datepicker').val('');\r\n \r\n}\r\n\r\nfunction isValidZip(zipCode) {\r\n return /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/.test(zipCode);\r\n}\r\n\r\nfunction setupAddressValidation() {\r\n $('.Address1').on('change', function (e) {\r\n $(this).removeClass('error');\r\n $(this).next().addClass('d-none');\r\n\r\n invalidateContainerPlacement();\r\n resetContainerPlacementButton();\r\n resetDatePicker($(this));\r\n\r\n //Add error message if address is empty\r\n\r\n if (!$(this).val()) {\r\n $(this).next().removeClass('d-none');\r\n $(this).addClass('error');\r\n }\r\n\r\n var datepicker = $('.component-timeline_journey-card.active').find('.datepicker');\r\n var zipCode = $('.component-timeline_journey-card.active').find('.ZipCode');\r\n\r\n if ($(this).val() && datepicker.val() && zipCode.val()) {\r\n enableContainerPlacement(zipCode);\r\n } else {\r\n disableContainerPlacement(zipCode);\r\n }\r\n });\r\n}\r\n\r\n// Checking if new address is in the same delivery area\r\nfunction areInTheSameServiceArea(form) {\r\n const card = $(form).closest('.component-timeline_journey-card');\r\n const data = {\r\n 'address1': {\r\n 'Address1': card.attr('data-legAddress1'),\r\n 'Address2': card.attr('data-legAddress2'),\r\n 'City': card.attr('data-legCity'),\r\n 'State': card.attr('data-legState'),\r\n 'PostalCode': card.attr('data-legPostalCode'),\r\n 'Country': card.attr('data-legCountry')\r\n },\r\n 'address2': {\r\n 'Address1': $(form).find('.Address1').val(),\r\n 'Address2': $(form).find('.Address2').val(),\r\n 'City': $(form).find('.City').val(),\r\n 'State': $(form).find('.State').val(),\r\n 'PostalCode': $(form).find('.ZipCode').val(),\r\n 'Country': $(form).find('.RegionCode').val()\r\n }\r\n };\r\n\r\n $.ajax({\r\n url: '/api/sitecore/Orders/AreInTheSameServiceArea',\r\n type: 'POST',\r\n contentType: 'application/json',\r\n cache: false,\r\n data: JSON.stringify(data),\r\n success: function (result) {\r\n if (result.Success) {\r\n if (result.Response) {\r\n // Enabling datepicker\r\n $(form).closest('.component-timeline_journey-card').find('.datepicker').prop('disabled', false);\r\n }\r\n else {\r\n form.find('.error.outside-local-market').removeClass('d-none');\r\n }\r\n }\r\n if (!result.Success) {\r\n form.find('.error.outside-local-market-error').removeClass('d-none');\r\n console.error('Error getting Service Area: ' + result.NotificationTitle + ': ' + result.FriendlyErrorMessage);\r\n }\r\n },\r\n error: function(data, textStatus, errorThrown) {\r\n form.find('.error.outside-local-market-error').removeClass('d-none');\r\n console.error('Error getting data', textStatus, errorThrown);\r\n }\r\n });\r\n}\r\n\r\nfunction setupCityStateSubmit() {\r\n $('.ZipCode').attr('maxlength', 7); // Set maxlength\r\n\r\n $('.ZipCode').on('change', function (e) {\r\n invalidateContainerPlacement();\r\n resetContainerPlacementButton();\r\n resetDatePicker($(this));\r\n disableContainerPlacement($(this));\r\n\r\n var postalCodeElement = $(this);\r\n var form = postalCodeElement.closest('.inlineForm');\r\n\r\n // Hide postal code validation messages (we will show them again if necessary)\r\n form.find('.error.outside-local-market').addClass('d-none');\r\n form.find('.error.outside-local-market-error').addClass('d-none');\r\n form.find('.error.outside-service-area').addClass('d-none');\r\n\r\n postalCodeElement.next().addClass('d-none');\r\n postalCodeElement.removeClass('error');\r\n\r\n // Disabling datepicker\r\n $(form).closest('.component-timeline_journey-card').find('.datepicker').prop('disabled', true);\r\n\r\n var postalCode = postalCodeElement.val();\r\n var postalRegex = /^[0-9]{5}$|^[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9]$/;\r\n\r\n if (!postalCode.length > 0 || !postalRegex.test(postalCode)) {\r\n postalCodeElement.next().removeClass('d-none');\r\n postalCodeElement.addClass('error');\r\n\r\n return false;\r\n }\r\n\r\n $.ajax({\r\n url: '/api/sitecore/Orders/DoCityStates?postalCode=' + postalCode,\r\n type: 'GET',\r\n contentType: 'application/json',\r\n success: function (result) {\r\n if (result.Cities && result.Cities.length > 0) {\r\n populateCities(form, result.Cities, result.State, result.RegionCode);\r\n areInTheSameServiceArea(form);\r\n }\r\n else if (result.FriendlyErrorMessage && result.NotificationTitle) {\r\n console.error('Error getting City and State: ' + result.NotificationTitle + ': ' + result.FriendlyErrorMessage);\r\n if (result.ExceptionMessage) {\r\n console.error('Exception message: ' + result.ExceptionMessage);\r\n }\r\n // Show validation message because there are no cities or states\r\n form.find('.error.outside-service-area').removeClass('d-none');\r\n }\r\n else if (result.ExceptionMessage) {\r\n console.error('Error getting City and State: ' + result.ExceptionMessage);\r\n // Show validation message because there are no cities or states\r\n form.find('.error.outside-service-area').removeClass('d-none');\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction setupGoogleApiAddressAutocomplete(){ \r\n var addressLine1Controls = $('.Address1');\r\n \r\n if (!addressLine1Controls || !addressLine1Controls.length) { console.debug(\"Unable to wire up Loqate address validation: can't find any Address1 controls\"); return; }\r\n\r\n addressLine1Controls.each((i, addressLine1) => {\r\n // For each instance of address line 1 text fields, get the parent and find the corresponding address line 2 and zip code fields\r\n\r\n var moveLegCard = $(addressLine1).closest('.component-timeline_journey-card');\r\n\r\n if (!moveLegCard) {\r\n console.error(\"Unable to wire up Loqate address validation: Can't find the move leg card container\");\r\n return;\r\n }\r\n\r\n var addressLine2 = moveLegCard.find('.Address2');\r\n if (!addressLine2 || !addressLine2.length) {\r\n console.error(\"Unable to wire up Loqate address validation: can't find the Address2 text input\");\r\n return;\r\n }\r\n addressLine2 = addressLine2[0];\r\n \r\n var zipCode = moveLegCard.find('.ZipCode');\r\n if (!zipCode || !zipCode.length) {\r\n console.error(\"Unable to wire up Loqate address validation: can't find the ZipCode text input\");\r\n return;\r\n }\r\n zipCode = zipCode[0];\r\n\r\n var moveLegId = moveLegCard.attr('data-legId');\r\n\r\n // Assign unique IDs for these controls (using the move leg ID) so they can be mapped with Loqate\r\n addressLine1.id = 'addressLine1-' + moveLegId;\r\n addressLine2.id = 'addressLine2-' + moveLegId;\r\n zipCode.id = 'zipCode-' + moveLegId;\r\n\r\n var fields = [\r\n { element: addressLine1.id, field: 'Line1' },\r\n { element: addressLine2.id, field: 'Line2', mode: pca.fieldMode.POPULATE },\r\n { element: zipCode.id, field: 'PostalCode', mode: pca.fieldMode.POPULATE }\r\n ];\r\n\r\n // $.registerLoqateControl(fields, window.globalLoqateOptions, zipCode.id);\r\n if (google != undefined) {\r\n let autocomplete = createAutocomplete(addressLine1.id);\r\n autocomplete.addListener(\"place_changed\", () => fillAddress(autocomplete, fields));\r\n }\r\n\r\n });\r\n}\r\n\r\n\r\nfunction createAutocomplete(ctlAddress) { \r\n let cntrl = document.querySelector(\"#\" + ctlAddress); \r\n let autocomplete = new google.maps.places.Autocomplete(cntrl, {\r\n componentRestrictions: { country: [\"us\", \"ca\"] },\r\n fields: [\"address_components\", \"geometry\"],\r\n types: [\"address\"],\r\n });\r\n return autocomplete;\r\n}\r\n\r\nfunction fillAddress(autocomplete, fields) {\r\n let place = autocomplete.getPlace();\r\n if (place) {\r\n\r\n let streetNumber = \"\";\r\n\t\tlet streetName = \"\";\r\n let postcode=\"\"; \r\n let line1ControlId=\"\";\r\n let postalCodeControlId=\"\";\r\n\r\n for(let ctl of fields){\r\n switch (ctl.field) {\r\n case \"Line1\": {\r\n line1ControlId=ctl.element;\r\n }\r\n case \"PostalCode\": {\r\n postalCodeControlId=ctl.element;\r\n }\r\n }\r\n }\r\n let currentPostalCode=$('#'+postalCodeControlId).value;\r\n for (let shipComp of place.address_components) {\r\n let shipCompType = shipComp.types[0];\r\n\t\t\t\tswitch (shipCompType) {\r\n case \"street_number\": {\r\n streetNumber = `${shipComp.long_name}`;\r\n break;\r\n }\r\n case \"route\": {\r\n streetName = shipComp.short_name;\r\n break;\r\n }\r\n case \"postal_code\": {\r\n postcode = `${shipComp.long_name}`;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n document.querySelector('#'+line1ControlId).value = [streetNumber, streetName].filter(Boolean).join(\" \");\r\n document.querySelector('#' + postalCodeControlId).value = postcode;\r\n if(currentPostalCode!==postcode){\r\n // Fire the zip code search\r\n $(`#${postalCodeControlId}`).trigger('change');\r\n }\r\n }\r\n}\r\n\r\nfunction setupMoveLegSubmit() {\r\n $('.submitInlineForm').off().on('click', function () {\r\n if (!$(this).hasClass('disabled')) {\r\n let clickTarget = $(this);\r\n let moveLeg = clickTarget.closest('.component-timeline_journey-card');\r\n submitInlineForm(moveLeg, clickTarget);\r\n moveLeg.find('.progress-content.inlineForm').addClass('d-none');\r\n }\r\n });\r\n\r\n $('.submitScheduleForm').off().on('click', function () {\r\n if (!$(this).hasClass('disabled')) {\r\n let clickTarget = $(this);\r\n let moveLeg = clickTarget.closest('.component-timeline_journey-card');\r\n submitScheduleForm(moveLeg, clickTarget);\r\n moveLeg.find('.progress-content.showEdit').addClass('d-none');\r\n }\r\n });\r\n}\r\n\r\n window.addEventListener('acornProcessStatus', receiveAcornProcessStatus, false);\r\n function receiveAcornProcessStatus(messageDataRec) {\r\n $(\"#acorn-mypods-widget\").hide();\r\n let receivedData = messageDataRec.detail || ''\r\n let podsAction = 'None'\r\n if (receivedData && receivedData.acornProcessStatus) {\r\n if(window.customerOrders != undefined && window.customerOrders.FinanceSettings != undefined)\r\n {\r\n var financeSetting = window.customerOrders.FinanceSettings.filter(x => x.Status == receivedData.acornProcessStatus)[0];\r\n if (financeSetting != undefined) {\r\n $('#financestatus').html(financeSetting.Body);\r\n $('#financestatus').show();\r\n if (financeSetting.SurveyCode != '') {\r\n $('body').append(financeSetting.SurveyCode);\r\n }\r\n } \r\n }\r\n if (receivedData.merAction === 'update') {\r\n podsAction = 'Update Quote with receivedData values (no offers, pending)'\r\n } else if (receivedData.merAction === 'add-payment-type' && receivedData.lenderNameSelected === 'Upgrade Indirect') {\r\n podsAction = 'Add Upgrade Payment Type and Update receivedData values'\r\n } else if (receivedData.merAction === 'add-payment-type' && receivedData.lenderNameSelected === 'Citi Pay') {\r\n podsAction = 'Add Citi Pay Payment Type and Update receivedData values'\r\n }\r\n podsAction = '' + podsAction + ''\r\n }\r\n console.log('receiveAcornProcessStatus', podsAction, receivedData.acornProcessStatus, receivedData.acornPostMessageKind, receivedData)\r\n }\r\n\r\n$(function() {\r\n if (typeof delayTimelineInit === 'undefined' || !delayTimelineInit) {\r\n assignContainerTimelineJourneyVM();\r\n initContainerTimelineJourney();\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: '/api/sitecore/Orders/InitOrders?containerId=' + $('.component-timeline').attr('data-datasourceId'),\r\n type: 'GET',\r\n contentType: 'application/json',\r\n success: function (result) {\r\n window.customerOrders = result;\r\n console.log(customerOrders);\r\n $('.component-timeline-loader').hide();\r\n $('.component-timeline_container_wrapper').show();\r\n assignContainerTimelineJourneyVM();\r\n\r\n initContainerTimelineJourney();\r\n initContainerPlacement();\r\n init();\r\n initTimelineJourney();\r\n }\r\n });\r\n});\r\n","// Container Placement Popup\r\nlet containerDatasourceId;\r\nlet currentStep = 0;\r\nlet maxLength = 201;\r\nlet userAnswers = [];\r\nlet BackstepID = [];\r\nlet backProgress = false;\r\nlet previousStepValue;\r\nlet currentAnswer;\r\nlet finalArray = [];\r\nlet postStepID;\r\nlet postAnswerVal;\r\nlet postCurrentStepId;\r\nlet postCurrentAnswerVal;\r\nlet postZipVal;\r\nlet finishStepCheck = false;\r\nlet isLocalEnv = false;\r\n\r\nif (location.hostname === 'localhost' || location.hostname === '127.0.0.1') {\r\n isLocalEnv = true;\r\n}\r\n\r\nconst initContainerPlacement = () => {\r\n const innerInit = () => {\r\n containerDatasourceId = $('.component-timeline').attr('data-datasourceId');\r\n if ($('#component-placement').length > 0) {\r\n feather.replace();\r\n }\r\n };\r\n\r\n // Managing Disabled / Enabled CTA Buttons\r\n $(document).on('click', 'input[type=radio]', function () {\r\n if ($(this).prop('checked') == true) {\r\n $('[id^=\"nextstep\"]').removeAttr('disabled');\r\n currentAnswer = $(this).val();\r\n } else {\r\n $('[id^=\"nextstep\"]').attr('disabled', true);\r\n }\r\n });\r\n\r\n // On Image click adding CSS and managing CTA Buttons Enabled / Disabled\r\n $(document).on('click', '.image-checkbox', function (e) {\r\n e.preventDefault();\r\n const $checkbox = $(this).find('input[type=\"checkbox\"], input[type=\"radio\"]');\r\n\r\n $('.image-checkbox').removeClass('image-checkbox-checked'); // Clear Check mark class\r\n $(this).addClass('image-checkbox-checked');\r\n $checkbox.prop('checked', true).css('border', '1px solid #f00');\r\n\r\n if ($(this).find('input[type=radio]').prop('checked') == true) {\r\n $('[id^=\"nextstep\"]').removeAttr('disabled');\r\n currentAnswer = $(this).find('input[type=radio]').val();\r\n } else {\r\n $('[id^=\"nextstep\"]').attr('disabled', true);\r\n }\r\n });\r\n\r\n // Textarea functionalities and managing CTA Buttons Enabled / Disabled\r\n $(document).on('keyup', '#placementDetails', function () {\r\n\r\n const textlen = $(this).val().length;\r\n $('#chars').text(textlen);\r\n\r\n if (textlen > 0) {\r\n $('[id^=\"nextstep\"]').removeAttr('disabled');\r\n currentAnswer = $(this).val();\r\n } else {\r\n $('[id^=\"nextstep\"]').attr('disabled', true);\r\n }\r\n\r\n if (textlen >= 201) {\r\n $(this).addClass('error');\r\n $('.charcount').addClass('error');\r\n $('[id^=\"nextstep\"]').attr('disabled', true);\r\n } else {\r\n $(this).removeClass('error');\r\n $('.charcount').removeClass('error');\r\n }\r\n });\r\n\r\n // AJAX Fucntion on Popup, Next and Previous\r\n function ajaxRequest(URL) {\r\n const request = {\r\n ContainerDatasourceId: containerDatasourceId,\r\n UsersAnswersObject: finalArray,\r\n StepID: postCurrentStepId,\r\n AnswerVal: postCurrentAnswerVal,\r\n ZipVal: postZipVal,\r\n };\r\n\r\n // setTimeout(function () {\r\n // $('#placementDetails').keyup();\r\n // }, 200);\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: URL,\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n cache: false,\r\n data:JSON.stringify(request),\r\n success: function(data) {\r\n window.currentstate = data;\r\n $('[data-id=placementModal] .modal-dialog').remove();\r\n\r\n if (backProgress != true) {\r\n currentStep++;\r\n }\r\n\r\n generateContainerPlacement(data);\r\n $('.modal-backdrop:gt(0)').remove();\r\n $('input[type=radio]').prop('checked',false);\r\n\r\n if (currentStep > 1) {\r\n $('[id^=\"previousstep\"],[data-id^=\"previousstep\"]').removeAttr('disabled');\r\n } else {\r\n $('[id^=\"previousstep\"],[data-id^=\"previousstep\"]').attr('disabled' , true);\r\n }\r\n\r\n if (data[0].IsContainerReviewPanel || data[0].IsMultiselectPanel) {\r\n $('[id^=\"nextstep\"],[data-id^=\"nextstep\"]').removeAttr('disabled');\r\n } else {\r\n $('[id^=\"nextstep\"],[data-id^=\"nextstep\"]').attr('disabled' , true);\r\n }\r\n\r\n if (backProgress) {\r\n $('.component-timeline_journey.current').find('.component-radio li').each (function () {\r\n if ($(this).find('input[type=radio]').val() == previousStepValue) {\r\n $(this).find('input[type=radio]').prop('checked', true).trigger('click');\r\n $('[id^=\"nextstep\"],[data-id^=\"nextstep\"]').removeAttr('disabled');\r\n }\r\n });\r\n\r\n $('.component-timeline_journey.current').find('.placement-grid .placement-image').each (function () {\r\n if ($(this).find('input[type=radio]').val() == previousStepValue) {\r\n $(this).find('input[type=radio]').prop('checked', true).trigger('click');\r\n $(this).find('.image-checkbox').addClass('image-checkbox-checked');\r\n $('[id^=\"nextstep\"],[data-id^=\"nextstep\"]').removeAttr('disabled');\r\n }\r\n });\r\n }\r\n $('#placementDetails').keyup(); // Trigger keyup to advance \"Notes\" textarea without being required\r\n },\r\n error: function(data, textStatus, errorThrown) {\r\n console.log('Error getting data', textStatus, errorThrown);\r\n }\r\n });\r\n }\r\n\r\n if ($('.component-timeline_journey').length) {\r\n $(document).on('click', '#placementModal, [data-id=placementModal] .close', function (e) {\r\n if (e.target == this) {\r\n invalidateContainerPlacement();\r\n $('#placementModal').modal('hide');\r\n $('[data-id=placementModal]').modal('hide');\r\n $('main').removeClass('container-backdrop');\r\n\r\n if ($('.component-timeline_journey').hasClass('current')) {\r\n $('.component-timeline_journey').removeClass('current');\r\n }\r\n }\r\n });\r\n }\r\n\r\n $(document).on('click', '[id^=\"finishstep\"],[data-id^=\"finishstep\"]', function () {\r\n // $('#placementModal').modal('hide');\r\n $('[data-id=placementModal]').modal('hide');\r\n $('.container-intro').addClass('d-none');\r\n $('.component-container-placement').find('.confirmed').removeClass('d-none');\r\n $('main').removeClass('container-backdrop');\r\n $(this).parents('.component-timeline_journey').removeClass('current');\r\n\r\n finishStepCheck = true;\r\n enableSubmitIfValid();\r\n });\r\n\r\n function enableSubmitIfValid() {\r\n var moveLegCard = $('.component-timeline_journey-card.InProgress');\r\n var address = moveLegCard.find('.AddressRequired');\r\n var zipCode = moveLegCard.find('.ZipCode');\r\n var datepicker = moveLegCard.find('.datepicker');\r\n\r\n if (finishStepCheck && address.val() && zipCode.val() && datepicker.val()) {\r\n moveLegCard.find('.component-container-placement .container-intro').removeClass('container-error');\r\n moveLegCard.find('.component-container-placement .container-intro span').addClass('d-none');\r\n moveLegCard.find('.submitInlineForm').removeClass('disabled');\r\n }\r\n\r\n validDateBtnEnabler();\r\n }\r\n\r\n $(document).on('click', '[data-id=\"containerplacementModal\"]', function (e) {\r\n e.preventDefault();\r\n\r\n $(this).parents('.component-timeline_journey').addClass('current');\r\n // $(this).closest('.component-timeline_journey.current').find('#placementModal').modal('show');\r\n $(this).closest('.component-timeline_journey.current').find('[data-id=placementModal]').modal('show');\r\n\r\n if ($('body').hasClass('modal-open')) {\r\n $('main').addClass('container-backdrop');\r\n }\r\n\r\n isLocalEnv ? (URL = '/api/sitecore/container-placement-1/getnextstep') : (URL = '/api/sitecore/containerplacement/getnextstep');\r\n\r\n ajaxRequest(URL);\r\n });\r\n\r\n $(document).on('click', '[id^=\"nextstep\"],[data-id^=\"nextstep\"]', function (e) {\r\n e.preventDefault();\r\n backProgress = false;\r\n\r\n let previousStepId = $(this).closest('.modal-dialog').attr('data-stepid');\r\n let ZipRegulation = $('.ZipCode').val();\r\n let getId = currentstate[0].CurrentStepId;\r\n\r\n BackstepID.push(getId);\r\n postStepID = getId;\r\n\r\n if ($('#placementDetails').length) {\r\n previousStepValue = true;\r\n } else if ($('.component-checkbox').length) {\r\n previousStepValue = true;\r\n } else if ($('.nostepselection').length) {\r\n currentAnswer = true;\r\n previousStepValue = true;\r\n } else {\r\n previousStepValue = $('.Stepvalue:checked').val();\r\n }\r\n\r\n userAnswers[currentStep-1] = currentAnswer;\r\n postAnswerVal = currentAnswer;\r\n postCurrentStepId = previousStepId;\r\n postCurrentAnswerVal = previousStepValue;\r\n postZipVal = ZipRegulation;\r\n\r\n isLocalEnv ? (URL =`/api/sitecore/container-placement-1/previousStepId=${previousStepId}/previousStepValue=${previousStepValue}`) : (URL = `/api/sitecore/containerplacement/getnextstep?previousStepId=${previousStepId}&previousStepValue=${previousStepValue}&zipcode=${ZipRegulation}`);\r\n\r\n finalArray[currentStep-1] = {stepID:postStepID,value:postAnswerVal};\r\n ajaxRequest(URL);\r\n });\r\n\r\n $(document).on('click', '[id^=\"previousstep\"],[data-id^=\"previousstep\"]', function (e) {\r\n e.preventDefault();\r\n backProgress = true;\r\n\r\n let ZipRegulation = $('.ZipCode').val();\r\n\r\n previousStepValue = userAnswers;\r\n previousStepValue = previousStepValue[previousStepValue.length-1];\r\n currentStep--;\r\n postCurrentStepId = BackstepID[BackstepID.length-1];\r\n postCurrentAnswerVal = previousStepValue;\r\n postZipVal = ZipRegulation;\r\n\r\n isLocalEnv ? (URL = `/api/sitecore/container-placement-1/getstep/previousStepId=${BackstepID[BackstepID.length-1]}/previousStepValue=${previousStepValue}`) : (URL = `/api/sitecore/containerplacement/getstep?stepid=${BackstepID[BackstepID.length-1]}&previousStepValue=${previousStepValue}&zipcode=${ZipRegulation}`);\r\n\r\n BackstepID.pop();\r\n userAnswers.pop();\r\n finalArray.pop();\r\n ajaxRequest(URL);\r\n });\r\n\r\n $(innerInit);\r\n}\r\n\r\nfunction invalidateContainerPlacement() {\r\n currentStep = 0;\r\n maxLength = 201;\r\n userAnswers = [];\r\n BackstepID = [];\r\n backProgress = false;\r\n previousStepValue = '';\r\n currentAnswer = '';\r\n finalArray = [];\r\n postStepID = '';\r\n postAnswerVal = '';\r\n postCurrentStepId = '';\r\n postCurrentAnswerVal = '';\r\n postZipVal = '';\r\n finishStepCheck = false;\r\n\r\n $('.component-timeline_journey-card.active').find('.submitInlineForm').addClass('disabled');\r\n}\r\n\r\nfunction resetContainerPlacementButton() {\r\n $('.container-intro').removeClass('d-none');\r\n $('.component-container-placement').find('.confirmed').addClass('d-none');\r\n}\r\n\r\nif (typeof delayTimelineInit === 'undefined' || !delayTimelineInit) {\r\n initContainerPlacement();\r\n}","// Must be at least 1 days in the future\r\nlet earliestAvailableDate = new Date(new Date().setDate(new Date().getDate() + 1));\r\n//Getting the current date + 1 year - RBMS does not return more than 1 year\r\nlet latestPossibleDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1));\r\nlet datePickerStartDate;\r\nlet datePickerEndDate;\r\nlet previousLegScheduledDate;\r\nlet nextLegScheduledDate;\r\nlet lastLegScheduledDate;\r\nlet currentLegScheduledDate;\r\nlet postDate;\r\nlet originCountryCode;\r\nlet destCountryCode;\r\nlet originZip;\r\nlet destZip;\r\nlet serviceCode;\r\nlet xhr;\r\nlet xhrTimer;\r\n\r\n// Adding timeout to reduce the number of calls made\r\nfunction getAvailableDates(datePicker, changeMonthEventArgs) {\r\n if (xhrTimer) {\r\n clearTimeout(xhrTimer);\r\n xhrTimer = null;\r\n console.log(\"cancelling timeout\");\r\n }\r\n if (xhr) {\r\n xhr.abort();\r\n console.log(\"cancelling xhr call\");\r\n }\r\n\r\n showLoadingMessage();\r\n\r\n xhrTimer = setTimeout(function() {\r\n callAvailability(datePicker, changeMonthEventArgs);\r\n }, 500);\r\n}\r\n\r\nfunction callAvailability(datePicker, changeMonthEventArgs) {\r\n showLoadingMessage();\r\n xhr = $.ajax({\r\n type: 'POST',\r\n url: '/api/sitecore/Orders/GetAvailableDates',\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n cache: false,\r\n data: JSON.stringify({\r\n OriginCountryCode: originCountryCode,\r\n OriginZip: originZip,\r\n DestinationCountryCode: destCountryCode,\r\n DestinationZip: destZip,\r\n ReferenceDate: datePickerStartDate,\r\n ServiceCode: serviceCode,\r\n }),\r\n success(data) {\r\n const dateValue = data;\r\n console.log(data);\r\n if (dateValue && dateValue.Response) {\r\n let disabledDates = dateValue.Response.filter((item) => !item.IsAvailable);\r\n disabledDates = disabledDates.map((a) => a.DateTimeFormatted);\r\n window.moveLegDate = disabledDates;\r\n UpdateCalendarDates(datePicker, disabledDates, changeMonthEventArgs);\r\n console.log(\"Done updating calendar\");\r\n hideLoadingMessage();\r\n } \r\n else if (xhr.abort()){\r\n }\r\n else {\r\n handleDatePickerErrorResponse(data);\r\n }\r\n },\r\n error(data, textStatus, errorThrown) {\r\n if (xhr.abort())\r\n return;\r\n handleDatePickerErrorResponse(data, textStatus, errorThrown);\r\n }\r\n });\r\n}\r\n\r\nfunction handleDatePickerErrorResponse(data, textStatus, errorThrown) {\r\n const errorMessage = 'Error getting availability data';\r\n console.error(errorMessage, data, textStatus, errorThrown);\r\n showNotification('error', errorMessage);\r\n $('.selected-date-picker').datepicker('hide');\r\n}\r\n\r\nfunction showLoadingMessage() {\r\n $('#loadingTBody').remove();\r\n $('.datepicker-days tbody').hide();\r\n $('div.datepicker-days table').after(\"
    Loading...
    \");\r\n}\r\n\r\nfunction hideLoadingMessage() {\r\n console.log(\"Hiding calendar loading\");\r\n $('#loadingTBody').remove();\r\n $('.datepicker-days tbody').show();\r\n}\r\n\r\nfunction setDatePickerReferenceDates(datepickerTarget, changeMonthEventArgs) { \r\n \r\n datePickerStartDate = new Date($('.datepicker-dropdown').find('.table-condensed tr td.day:first-of-type').data('date'));\r\n // add a few days to compensate for the fact the legacy service returns a few days\r\n datePickerStartDate = addDays(datePickerStartDate, +5);\r\n datePickerEndDate = nextLegScheduledDate != undefined ? nextLegScheduledDate : latestPossibleDate;\r\n // If this reference update is a result of the month being changed, use the date from the new month\r\n if (changeMonthEventArgs && changeMonthEventArgs.date) {\r\n // Get the first day of the selected month so we get availability for the whole month\r\n if (console.debug) console.debug(\"changeMonthEventArgs.date: \" + changeMonthEventArgs.date);\r\n datePickerStartDate = new Date(changeMonthEventArgs.date.getFullYear(), changeMonthEventArgs.date.getMonth(), 1); \r\n }\r\n // The currently referenced date cannot be before the earliest available booking date\r\n datePickerStartDate = earliestAvailableDate < datePickerStartDate ? datePickerStartDate : earliestAvailableDate;\r\n console.log(\"Previous leg:\" + previousLegScheduledDate);\r\n \r\n // The currently referenced date cannot be before the previous move leg's scheduled date\r\n if (datePickerStartDate < previousLegScheduledDate && ($(datepickerTarget).closest(\".component-timeline_journey-card\").attr('data-legtype') != \"NEW\")) {\r\n datePickerStartDate = previousLegScheduledDate;\r\n }\r\n \r\n console.log(\"Start Date: \" + datePickerStartDate);\r\n // If there's a scheduled leg, then we want to set a window before/after selected value\r\n if (currentLegScheduledDate != undefined){\r\n let enforceWindow = $(datepickerTarget).attr('data-disableWindow') ? true : false;\r\n console.log(\"Datepicker: \"+ enforceWindow);\r\n console.log(\"currentleg: \" + currentLegScheduledDate);\r\n let attr = $(datepickerTarget).attr('data-legreschedulingwindow');\r\n let datepickerWindow = (typeof attr !== 'undefined' && attr !== false && attr > 0) ? attr : 7; \r\n \r\n console.log(\"datepickerWindow: \" + datepickerWindow);\r\n if (enforceWindow){\r\n let rescheduledStartDate = enforceWindow ? addDays(currentLegScheduledDate, -datepickerWindow) : earliestAvailableDate;\r\n datePickerStartDate = rescheduledStartDate > earliestAvailableDate ? rescheduledStartDate : earliestAvailableDate;\r\n console.log(\"Rescheduled Start Date: \" + datePickerStartDate);\r\n datePickerStartDate = datePickerStartDate < previousLegScheduledDate ? previousLegScheduledDate : datePickerStartDate;\r\n \r\n\t console.log(\"After Previous Leg Start Date: \" + datePickerStartDate);\r\n console.log(\"currentleg: \" + currentLegScheduledDate);\r\n datePickerEndDate = enforceWindow ? addDays(currentLegScheduledDate, +datepickerWindow) : latestPossibleDate;\r\n if (lastLegScheduledDate != undefined){\r\n console.log(\"lastLegScheduledDate- \" + lastLegScheduledDate);\r\n datePickerEndDate = datePickerEndDate < lastLegScheduledDate ? datePickerEndDate : lastLegScheduledDate;\r\n }\r\n }\r\n //console.log(\"Enforced last Date: \" + addDays(currentLegScheduledDate, +datepickerWindow));\r\n //console.log(\"End last Date: \" + datePickerEndDate);\r\n //console.log(\"Enforced start: \" + addDays(currentLegScheduledDate, +datepickerWindow));\r\n // console.log(\"End start Date: \" + datePickerStartDate);\r\n }\r\n}\r\n\r\nfunction UpdateCalendarDates(datePicker, dateArray, changeMonthEventArgs) {\r\n $(datePicker).datepicker('setDatesDisabled', dateArray);\r\n // Using schedule start/end date for first leg\r\n //console.log(changeMonthEventArgs);\r\n if ($(datePicker).closest('.component-timeline_journey-card.active').attr('data-legtype') == 'NEW') {\r\n const tomorrow = new Date(new Date().setDate(new Date().getDate() + 1));\r\n const scheduleStartDate = new Date($(datePicker).closest('.component-timeline_journey-card.active').find().attr('data-schedulingRuleStartDate'));\r\n // Setting start date to tomorrow if the date is in the past\r\n let startDate = scheduleStartDate > tomorrow ? scheduleStartDate : tomorrow;\r\n //startDate = datePickerStartDate > startDate ? datePickerStartDate : startDate;\r\n let nextDate = new Date($(datePicker).closest('.component-timeline_journey-card.active').next().find(\"[data-bind^='text:legScheduledDate']\").html());\r\n nextDate.setDate(nextDate.getDate() + -1); \r\n \r\n let endDate = ((nextDate != undefined && nextDate != null && nextDate != \"Invalid Date\"))? nextDate : new Date(new Date().setFullYear(new Date().getFullYear() + 1));\r\n\r\n if ($(datePicker).attr('data-disablewindow')){ \r\n let attr = $(datePicker).attr('data-legreschedulingwindow');\r\n let currentLegScheduledDate = new Date($(datePicker).closest('.component-timeline_journey-card.active').find(\"[data-bind^='text:legScheduledDate']\").html())\r\n console.log(\"updated currentLegScheduledDate: \" + currentLegScheduledDate);\r\n let datepickerWindow = (typeof attr !== 'undefined' && attr !== false && attr > 0) ? attr : 7; \r\n startDate = addDays(currentLegScheduledDate, -datepickerWindow);\r\n endDate = addDays(currentLegScheduledDate, +datepickerWindow);\r\n console.log(\"updated start: \" + startDate);\r\n console.log(\"updated end: \" + endDate);\r\n }\r\n console.log(endDate)\r\n \r\n $(datePicker).datepicker('setStartDate', startDate); \r\n $(datePicker).datepicker('setEndDate', endDate); \r\n }\r\n $(datePicker).data('datepicker').update();\r\n console.log(\"Done UpdateCalendarDates\");\r\n}\r\n\r\nfunction getPreviousRawScheduledDate(currentCard) {\r\n let rawScheduledDate;\r\n let previousCard = currentCard;\r\n while (!rawScheduledDate && (previousCard = previousCard.prev(\".component-timeline_journey-card\")).length > 0) {\r\n rawScheduledDate = previousCard.find(\"[data-scheduleddate]\").data('scheduleddate');\r\n }\r\n return rawScheduledDate;\r\n}\r\n\r\nfunction getPreviousScheduledDate(currentCard) {\r\n let previousCardDate;\r\n if (currentCard.prevAll(\".component-timeline_journey-card.Scheduled\").length > 0 && currentCard.prevAll(\".component-timeline_journey-card.Scheduled\").attr(\"data-legtype\") != \"PPF\") {\r\n previousCardDate = currentCard.prevAll(\".component-timeline_journey-card.Scheduled\").find(\"[data-bind^='text:legScheduledDate']\").html();\r\n }\r\n else if (currentCard.prevAll(\".component-timeline_journey-card.Scheduled\").length > 0 && currentCard.prevAll(\".component-timeline_journey-card.Scheduled\").attr(\"data-legtype\") == \"PPF\" ){\r\n previousCardDate = currentCard.prev().prevAll(\".component-timeline_journey-card.Scheduled\").find(\"[data-bind^='text:legScheduledDate']\").html();\r\n }\r\n else {\r\n previousCardDate = undefined;\r\n }\r\n return previousCardDate;\r\n}\r\n\r\nfunction getNextRawScheduledDate(currentCard) {\r\n let rawScheduledDate;\r\n let nextCard = currentCard;\r\n while (!rawScheduledDate && (nextCard = nextCard.next(\".component-timeline_journey-card\")).length > 0) {\r\n rawScheduledDate = nextCard.find(\"[data-scheduleddate]\").data('scheduleddate');\r\n }\r\n return rawScheduledDate;\r\n}\r\n\r\nfunction getPreviousTransitDaysText(currentCard) {\r\n let transitDaysText;\r\n let previousCard = currentCard;\r\n while (!transitDaysText && (previousCard = previousCard.prev(\".component-timeline_journey-card\")).length > 0) {\r\n transitDaysText = previousCard.find(\"[data-bind^='text:legTransitDays']\").html();\r\n }\r\n return transitDaysText;\r\n}\r\n\r\nfunction getAvailabilityFields(datePicker) {\r\n \r\n // Go get the scheduled date from the previous move leg\r\n let currentCard = $(datePicker).closest(\".component-timeline_journey-card\")\r\n // checking if it's an inline form\r\n if ($(datePicker).closest('.component-timeline_journey-card.active').find('.progress-content.inlineForm').find('.ZipCode').val()) {\r\n // using zip code field value\r\n originZip = $(datePicker).closest('.component-timeline_journey-card.active').find('.progress-content.inlineForm').find('.ZipCode').val();\r\n originCountryCode = $(datePicker).closest('.component-timeline_journey-card.active').find('.progress-content.inlineForm').find('.RegionCode').val();\r\n destZip = $(datePicker).closest('.component-timeline_journey-card.active').find('.progress-content.inlineForm').find('.ZipCode').val();\r\n destCountryCode = $(datePicker).closest('.component-timeline_journey-card.active').find('.progress-content.inlineForm').find('.RegionCode').val();\r\n serviceCode = $(datePicker).closest('.component-timeline_journey-card').data('legtype');\r\n } else {\r\n // using the attribute zip code\r\n originZip = currentCard.attr('data-legAvailabilityOriginZip');\r\n originCountryCode = currentCard.attr('data-legAvailabilityOriginCountry');\r\n destZip = currentCard.attr('data-legAvailabilityDestinationZip');\r\n destCountryCode = currentCard.attr('data-legAvailabilityDestinationCountry');\r\n serviceCode = $(datePicker).closest('.component-timeline_journey-card').data('legtype');\r\n }\r\n if (!destCountryCode) {\r\n destCountryCode = originCountryCode;\r\n }\r\n let rawScheduledDate = getPreviousRawScheduledDate(currentCard);\r\n let rawCurrentLegDate = currentCard.find(\"[data-scheduleddate]\").data('scheduleddate');\r\n let rawNextLegDate = getNextRawScheduledDate(currentCard);\r\n //console.log(\"rawNextLegDate: \" + rawNextLegDate);\r\n\r\n previousLegScheduledDate = rawScheduledDate != undefined ? new Date(rawScheduledDate) : new Date(getPreviousScheduledDate(currentCard));\r\n let transitDaysText = getPreviousTransitDaysText(currentCard);\r\n let transitDays = parseInt(transitDaysText);\r\n if (isNaN(transitDays)) {\r\n transitDays = 0;\r\n }\r\n \r\n // We need to add one extra day so they can't schedule it for the same day as the previous leg.\r\n previousLegScheduledDate.setDate(previousLegScheduledDate.getDate() + transitDays + 1);\r\n if (rawCurrentLegDate != undefined){ \r\n currentLegScheduledDate = new Date(rawCurrentLegDate);\r\n }\r\n else {\r\n currentLegScheduledDate = previousLegScheduledDate;\r\n }\r\n // Set up New Leg type to look for the current leg\r\n let isNewLeg = currentCard.attr('data-legtype') == 'NEW' ? true : false;\r\n \r\n if (isNewLeg) {\r\n datePickerStartDate = new Date(currentLegScheduledDate);\r\n datePickerStartDate = new Date(currentLegScheduledDate.getFullYear(), currentLegScheduledDate.getMonth(), 1);\r\n previousLegScheduledDate = new Date(earliestAvailableDate);\r\n nextLegScheduledDate = new Date(latestPossibleDate);\r\n if (currentCard.find('.datepicker').attr('data-disableWindow')){\r\n let attr = currentCard.find('.datepicker').attr('data-legreschedulingwindow');\r\n let datepickerWindow = (typeof attr !== 'undefined' && attr !== false && attr > 0) ? attr : 7; \r\n \r\n // console.log(\"New Leg datepickerWindow: \" + datepickerWindow);\r\n let rescheduledStartDate = addDays(currentLegScheduledDate, -datepickerWindow);\r\n datePickerStartDate = rescheduledStartDate > earliestAvailableDate ? rescheduledStartDate : earliestAvailableDate;\r\n // console.log(\"New Leg Rescheduled Start Date: \" + datePickerStartDate);\r\n datePickerStartDate = datePickerStartDate < previousLegScheduledDate ? previousLegScheduledDate : datePickerStartDate;\r\n \r\n\t // console.log(\"New Leg After Previous Leg Start Date: \" + datePickerStartDate);\r\n //console.log(\"New Leg currentleg: \" + currentLegScheduledDate);\r\n datePickerEndDate = addDays(currentLegScheduledDate, +datepickerWindow);\r\n if (lastLegScheduledDate != undefined){\r\n console.log(\"New Leg lastLegScheduledDate- \" + lastLegScheduledDate);\r\n datePickerEndDate = datePickerEndDate < lastLegScheduledDate ? datePickerEndDate : lastLegScheduledDate;\r\n }\r\n }\r\n }\r\n //console.log(currentLegScheduledDate);\r\n // Go get the scheduled date from the next move leg, if it's scheduled\r\n rawScheduledDate = currentCard.next().find(\"[data-scheduleddate]\").data('scheduleddate');\r\n if (rawScheduledDate) {\r\n nextLegScheduledDate = new Date(rawScheduledDate);\r\n // We need to remove one extra day so they can't schedule it for the same day as the next leg.\r\n nextLegScheduledDate.setDate(nextLegScheduledDate - 1);\r\n }\r\n else {\r\n nextLegScheduledDate = undefined;\r\n }\r\n if (rawNextLegDate){ \r\n lastLegScheduledDate = new Date(rawNextLegDate);\r\n // We need to remove one extra day so they can't schedule it for the same day as the next leg.\r\n lastLegScheduledDate.setDate(lastLegScheduledDate.getDate() - 1);\r\n //Make the next leg end date also the same as the last leg scheduled date\r\n if (nextLegScheduledDate == undefined || isNaN(nextLegScheduledDate))\r\n {\r\n nextLegScheduledDate = lastLegScheduledDate;\r\n }\r\n }\r\n else {\r\n lastLegScheduledDate = latestPossibleDate;\r\n }\r\n datePickerStartDate = previousLegScheduledDate;\r\n datePickerEndDate = nextLegScheduledDate;\r\n}\r\n\r\n// function validDateBtnEnabler() {\r\n// // Input button is disabled until a valid date has been entered\r\n// // When valid, the button associated becomes active\r\n// const btns = $('.invalid');\r\n\r\n// $(btns).each(function () {\r\n// const attr = $(this).attr('data-enable-btn');\r\n\r\n// $(this).on('input change', function () {\r\n// if ($(this).val() !== '') {\r\n// $(attr).removeClass('disabled');\r\n// $(this).addClass('valid');\r\n// } else {\r\n// $(attr).removeClass('disabled');\r\n// }\r\n// });\r\n// });\r\n// };\r\n\r\n$(document).on('click', '.datepicker.selected-date-picker', function () {\r\n $(this).closest('.component-timeline_journey-card').addClass('active');\r\n\r\n if ($(this).closest('.component-timeline_journey-card.active').find('.progress-content.inlineForm').find('.ZipCode').val() == '') {\r\n $(this).closest('.component-timeline_journey-card.active').find('.ZipCode').closest('.error:not(.outside-service-area)').removeClass('d-none');\r\n $(this).closest('body').find('.datepicker.datepicker-dropdown').remove();\r\n } else {\r\n if (!$('.baseDatepicker').length > 0) {\r\n var selectedDate = { date: $(this).data('current-date') };\r\n \r\n getAvailabilityFields(this);\r\n setDatePickerReferenceDates(this, selectedDate);\r\n \r\n callAvailability(this, null);\r\n }\r\n }\r\n});\r\n\r\n// This will make Edit button enable only when date is selected.\r\n// $(window).on('load',() => {\r\n// $('.datepicker').datepicker().on('changeDate', () => {\r\n// $('.component-timeline_journey-card.active').find('.submitScheduleForm').removeClass('disabled');\r\n// });\r\n// });\r\n\r\n$(document).on('changeDate', '.datepicker', function () {\r\n invalidateContainerPlacement();\r\n resetContainerPlacementButton();\r\n\r\n let address = $('.component-timeline_journey-card.active').find('.AddressRequired');\r\n let zipCode = $('.component-timeline_journey-card.active').find('.ZipCode');\r\n\r\n if ($(this).val() && address.val() && zipCode.val()) {\r\n enableContainerPlacement(zipCode);\r\n } else {\r\n disableContainerPlacement(zipCode);\r\n }\r\n});\r\n\r\n$(document).on('changeMonth', '.datepicker', (e) => {\r\n if (e && e.currentTarget) {\r\n $(e.currentTarget).data('current-date', e.date);\r\n let datePicker = e.currentTarget;\r\n if (!$('.baseDatepicker').length > 0) {\r\n\t\t setDatePickerReferenceDates(datePicker, e);\r\n getAvailableDates(datePicker, e);\r\n }\r\n }\r\n});\r\n\r\nconst configureNewDatePicker = function(datePicker) {\r\n // console.log('Configuration........');\r\n getAvailabilityFields(datePicker);\r\n setDatePickerReferenceDates(datePicker);\r\n let datePickerParams = {\r\n format: 'mm-dd-yyyy',\r\n language: 'en',\r\n startDate: datePickerStartDate,\r\n defaultViewDate: datePickerStartDate,\r\n endDate: datePickerEndDate,\r\n minDate: 0,\r\n autoclose: !0,\r\n maxViewMode: 1,\r\n disableEntry: !0,\r\n updateViewDate: !1,\r\n orientation: 'bottom',\r\n daysOfWeekDisabled: \"0\"\r\n };\r\n \r\n $(datePicker).datepicker(datePickerParams);\r\n let year = datePickerStartDate.getFullYear();\r\n let month = (1 + datePickerStartDate.getMonth()).toString();\r\n let day = datePickerStartDate.getDate().toString();\r\n //console.log('datePickerStartDate' + datePickerStartDate);\r\n month = month.length > 1 ? month : `0${month}`;\r\n day = day.length > 1 ? day : `0${day}`;\r\n\r\n let checkDate = `${month}-${day}-${year}`;\r\n\r\n let dateTest = $(datePicker).val();\r\n\r\n if (checkDate !== dateTest) {\r\n $(datePicker).addClass('active');\r\n }\r\n\r\n $(datePicker).datepicker().on('changeDate', () => {\r\n $('.component-timeline_journey-card.active').find('.submitScheduleForm').removeClass('disabled');\r\n });\r\n}\r\n\r\nconst configureNewBaseDatePicker = function(datePicker) { \r\n let datePickerParams = {\r\n format: 'mm-dd-yyyy',\r\n language: 'en',\r\n minDate: 0,\r\n autoclose: !0,\r\n maxViewMode: 1,\r\n disableEntry: !0,\r\n updateViewDate: !1,\r\n orientation: 'bottom',\r\n daysOfWeekDisabled: \"0\"\r\n };\r\n \r\n $(datePicker).datepicker(datePickerParams);\r\n}\r\n\r\nconst addDatePicker = function () { \r\n $('.datepicker').each(function(i, datePicker) { \r\n configureNewDatePicker(datePicker);\r\n });\r\n};\r\n\r\nconst addBaseDatePicker = function () { \r\n $('.baseDatepicker').each(function(i, datePicker) { \r\n configureNewBaseDatePicker(datePicker);\r\n });\r\n};\r\n\r\nconst init = function () {\r\n if ($('.baseDatepicker').length > 0) {\r\n earliestAvailableDate = new Date(new Date().setDate(new Date().getDate() - 60));\r\n addBaseDatePicker();\r\n }\r\n if ($('.datepicker').length > 0) {\r\n addDatePicker();\r\n }\r\n};\r\n//prototypes\r\nfunction addDays(date, days) {\r\n var result = new Date(date);\r\n result.setDate(date.getDate() + days);\r\n return result;\r\n}\r\n\r\nif (typeof delayTimelineInit === 'undefined' || !delayTimelineInit) {\r\n $(init);\r\n}\r\n(function ($) {\r\n $(\".component-timeline .datepicker\").on('click',function(){ $(this).focus().blur();});\r\n}(jQuery));\r\n","(function ($) {\r\n const accordionInit = function () {\r\n const accordion = $('.panel-heading a');\r\n\r\n accordion.on('click', function () {\r\n if ($(this).hasClass('active')) {\r\n $(this).removeClass('active');\r\n } else {\r\n accordion.removeClass('active');\r\n $(this).addClass('active');\r\n }\r\n });\r\n\r\n $('.panel-collapse').on('show.bs.collapse', function () {\r\n $(this).siblings('.panel-heading').addClass('active');\r\n });\r\n\r\n $('.panel-collapse').on('hide.bs.collapse', function () {\r\n $(this).siblings('.panel-heading').removeClass('active');\r\n });\r\n };\r\n\r\n const init = () => {\r\n if ($('.component-double-accordion').length) {\r\n accordionInit();\r\n }\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n","(function ($) {\r\n function validateLogin() {\r\n const formLoginAll = '.component-login form';\r\n const formLoginUser = '[class=\"component-login\"] form';\r\n const formLoginResetPin = '.component-login.reset-pin form';\r\n const formLoginResetPinSecurity = '.component-login.reset-pin-security-question form';\r\n const formLoginForgotPin = '.component-login.forgot-pin form';\r\n\r\n if ($(formLoginAll).length) {\r\n // Validation - For all login forms\r\n $(formLoginAll).validate({\r\n highlight(element, errorClass, validClass) {\r\n $(element).closest('.form-group').addClass('error');\r\n },\r\n unhighlight(element, errorClass, validClass) {\r\n $(element).closest('.form-group').removeClass('error');\r\n },\r\n errorPlacement(error, element) {\r\n $(element).closest('.form-group').find('input').after(error);\r\n },\r\n });\r\n\r\n // Check input values\r\n $(formLoginAll).find('input').on('keyup', () => {\r\n const fieldUsername = '#username';\r\n const fieldPIN = '#pin';\r\n const fieldSubmit = '[type=\"submit\"]';\r\n\r\n // User Login\r\n if ($(formLoginUser).length) {\r\n const checkUsername = $(fieldUsername).val();\r\n const isNum = /^\\d+$/.test(checkUsername);\r\n\r\n $(formLoginUser).find(fieldUsername).attr({ maxlength: '256' });\r\n\r\n if (!isNum && checkUsername.indexOf('@') >= 0 && checkUsername.indexOf('.') >= 0) {\r\n $(formLoginUser).find(fieldUsername).removeAttr('minlength');\r\n } else if (parseInt(checkUsername)) {\r\n if (isNum && checkUsername.length === 9) {\r\n $(formLoginUser).find(fieldUsername).removeAttr('minlength');\r\n } else {\r\n $(formLoginUser).find(fieldUsername).attr({ minlength: '1024' });\r\n }\r\n } else {\r\n $(formLoginUser).find(fieldUsername).attr({ minlength: '1024' });\r\n }\r\n }\r\n\r\n // Reset Your Pin\r\n if ($(formLoginResetPin).length) {\r\n // Using default validation and equalTo attribute\r\n }\r\n\r\n // Login - Reset Pin - Security Question\r\n if ($(formLoginResetPinSecurity).length) {\r\n // Using default validation\r\n }\r\n\r\n // Login - Forgot Pin\r\n if ($(formLoginForgotPin).length) {\r\n const checkUsername = $(fieldUsername).val();\r\n const isNum = /^\\d+$/.test(checkUsername);\r\n\r\n if (!isNum && checkUsername.indexOf('@') >= 0 && checkUsername.indexOf('.') >= 0) {\r\n $(formLoginForgotPin).find(fieldUsername).removeAttr('minlength');\r\n } else if (parseInt(checkUsername)) {\r\n if (isNum && checkUsername.length === 9) {\r\n $(formLoginForgotPin).find(fieldUsername).removeAttr('minlength');\r\n } else {\r\n $(formLoginForgotPin).find(fieldUsername).attr({ minlength: '1024' });\r\n }\r\n } else {\r\n $(formLoginForgotPin).find(fieldUsername).attr({ minlength: '1024' });\r\n }\r\n }\r\n\r\n // Submission - if form is valid, enable submit button\r\n if ($(formLoginAll).valid() && $(fieldUsername).val() != '' && $(fieldPIN).val() != '') {\r\n $(formLoginAll).find(fieldSubmit).prop('disabled', false);\r\n } else {\r\n $(formLoginAll).find(fieldSubmit).prop('disabled', 'disabled');\r\n }\r\n });\r\n }\r\n }\r\n\r\n const init = function () {\r\n validateLogin();\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n","(function ($) {\r\n let isMobile = false;\r\n let rtime;\r\n let timeout = false;\r\n const delta = 200;\r\n\r\n const isPageEditor = function () {\r\n return !!(typeof Sitecore !== 'undefined' && Sitecore.PageModes && Sitecore.PageModes.PageEditor);\r\n };\r\n\r\n const detectMobile = () => {\r\n // Device detection\r\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4))) {\r\n isMobile = true;\r\n }\r\n };\r\n\r\n const mobileSelect = () => {\r\n const select = $('select');\r\n\r\n if (select.length && isMobile) {\r\n select.addClass('isMobile').wrap('');\r\n }\r\n };\r\n\r\n const makeModal = function () {\r\n // Dynamically add modal triggers to any link that includes the class \"modal-link\"\r\n if ($('.modal-link').length) {\r\n $('.modal-link').each(function () {\r\n const modalUrl = $(this)[0].href;\r\n const modalId = modalUrl.split('#').pop(); // Extract ID string after hash\r\n\r\n $(this).attr('data-toggle', 'modal');\r\n // $(this).attr('data-target', `#${modalId}`);\r\n $(this).attr('data-target', `${modalId}`);\r\n });\r\n }\r\n\r\n $('.modal-link').on('click', (e) => {\r\n e.preventDefault();\r\n });\r\n };\r\n\r\n const stackLegs = function () {\r\n // If in Experience Editor, wrap multiple \"progress-content\" sections in a container\r\n // so that they can be stacked\r\n\r\n $('.progress-content + .progress-content').each(function () {\r\n $(this).prev().addBack().wrapAll('
    ');\r\n });\r\n };\r\n\r\n const iconFix = function () {\r\n // Adds a span wrapper to allow svg manipulation\r\n $('.progress-icon svg').each(function () {\r\n $(this).wrap('');\r\n });\r\n };\r\n\r\n const pageBackground = function () {\r\n // This simply controls whether an additional page background element should appear or not\r\n // Add any element to text for its existence. If it exists on a page, the background will\r\n // be hidden\r\n\r\n let bgExceptions = [\r\n '.page-error',\r\n ];\r\n\r\n $.each(bgExceptions, (index, value) => {\r\n if ($(value).length) {\r\n $('body').addClass('nobg');\r\n } else {\r\n $('body').addClass('hasbg');\r\n }\r\n });\r\n };\r\n\r\n // Select Menu - Chosen Dropdowns\r\n const chosenDropdowns = () => {\r\n if ($('select').length) {\r\n $('select').chosen({\r\n disable_search: true,\r\n });\r\n }\r\n };\r\n\r\n const videoMQ = () => {\r\n const video = $('.component-timeline_banner video');\r\n\r\n if (video.length) {\r\n // Replace video with proper video based on screen size\r\n const windowWidth = $(window).width();\r\n const videoSrcDesktop = video.attr('srcDesktop');\r\n const videoSrcTablet = video.attr('srcTablet');\r\n\r\n if (windowWidth >= 991) {\r\n video.append(``);\r\n } else if (windowWidth <= 991 && windowWidth >= 768) {\r\n video.append(``);\r\n }\r\n }\r\n };\r\n\r\n const experienceEditorUtilities = () => {\r\n if (isPageEditor()) {\r\n $('body').addClass('is-editor');\r\n $('#modalVideo').hide();\r\n $('body').removeClass('modal-open');\r\n $('#videoLoader').attr('src', '');\r\n $('.modal-backdrop').remove();\r\n $('.panel-collapse').collapse('toggle');\r\n stackLegs();\r\n }\r\n };\r\n\r\n const resetGypsyForm = () => {\r\n $('#gypsyReset').on('click', (e) => {\r\n e.preventDefault();\r\n document.getElementById('gypsyMoth').reset();\r\n });\r\n };\r\n\r\n const inputMask = () => {\r\n $('[data-mask=phone]').mask('999-999-9999', { placeholder: ' ', autoclear: false });\r\n $('[data-mask=date]').mask('99/99/9999', { placeholder: ' ' });\r\n $('[data-mask=accountid]').mask('99-999999999', { placeholder: ' ' });\r\n };\r\n\r\n const mobileToggle = () => {\r\n const toggleSwitch = $('.toggleSwitch');\r\n\r\n if (window.innerWidth <= 586) {\r\n $(toggleSwitch).parent().parent().addClass('mobile');\r\n }\r\n\r\n window.onresize = function () {\r\n if (window.innerWidth <= 586) {\r\n $(toggleSwitch).parent().parent().addClass('mobile');\r\n } else {\r\n $(toggleSwitch).parent().parent().removeClass('mobile');\r\n }\r\n };\r\n };\r\n\r\n const resizeend = function () {\r\n if (new Date() - rtime < delta) {\r\n setTimeout(resizeend, delta);\r\n } else {\r\n timeout = false;\r\n\r\n $('.scrtabs-tabs-fixed-container').attr('style', '');\r\n $('.scrtabs-tabs-movable-container').attr('style', '');\r\n $('.nav-tabs').scrollingTabs('refresh');\r\n }\r\n };\r\n\r\n const tabScroll = () => {\r\n if ($('.component-tabs')) {\r\n $('.nav-tabs:not(.noscroll)').scrollingTabs({\r\n bootstrapVersion: 4,\r\n disableScrollArrowsOnFullyScrolled: true,\r\n enableSwiping: false,\r\n }).on('ready.scrtabs', () => {\r\n $('.tab-content').show();\r\n });\r\n\r\n $(window).resize(() => {\r\n rtime = new Date();\r\n\r\n if (timeout === false) {\r\n timeout = true;\r\n setTimeout(resizeend, delta);\r\n }\r\n });\r\n }\r\n };\r\n\r\n const timeoutHandler = () => {\r\n $(document).ajaxComplete(() => {\r\n window.clearTimeout(window.inactivityTimeout);\r\n setSessionTimeout();\r\n });\r\n };\r\n\r\n const setSessionTimeout = () => {\r\n window.inactivityTimeout = setTimeout(() => {\r\n logout(`${window.globalTimeoutOptions.loginUrl}`, null);\r\n }, window.globalTimeoutOptions.timeout);\r\n };\r\n\r\n const initialDatePicker = () => {\r\n // Change initial font color after date has been selected\r\n const datePicker = $('.selected-date-picker');\r\n\r\n $(datePicker).on('change', function () {\r\n $(this).addClass('active');\r\n });\r\n };\r\n\r\n const movePayment = function () {\r\n const resizeend = function () {\r\n $('.component-account-title.payment .edit a').each(function () {\r\n let moveTo = $(this).parent().parent().siblings('.infobody').find('.edit');\r\n $(this).detach().appendTo(moveTo);\r\n });\r\n };\r\n\r\n $(window).on('resize load', () => {\r\n resizeend();\r\n });\r\n };\r\n\r\n const podsGaSetup = function () {\r\n const setupCrossDomain = function () {\r\n if (window.globalGaSettings.gtmId) {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const clientId = urlParams.get('clientId');\r\n const sessionId = urlParams.get('sessionId');\r\n if (clientId && sessionId) {\r\n dataLayer.push('config', window.globalGaSettings.gtmId, {\r\n 'client_id': clientId,\r\n 'session_id': sessionId\r\n });\r\n }\r\n else {\r\n console.debug(\"Unable to set GA client_id and session_id:\", window.globalGaSettings.gtmId, clientId, sessionId);\r\n }\r\n }\r\n };\r\n\r\n setupCrossDomain();\r\n };\r\n\r\n const datePickerBlur = function () {\r\n $(document).on('click, scroll', function (e) {\r\n\t\t\t// Date picker \"sticks\" focus if scrolled on a mobile device.\r\n\t\t\tvar container = $('.selected-date-picker');\r\n\r\n\t\t\tif (!container.is(e.target) && container.has(e.target).length === 0) {\r\n\t\t\t\t$('.selected-date-picker').blur();\r\n\t\t\t}\r\n\t\t});\r\n }\r\n\r\n const init = () => {\r\n detectMobile();\r\n experienceEditorUtilities();\r\n pageBackground();\r\n makeModal();\r\n stackLegs();\r\n chosenDropdowns();\r\n videoMQ();\r\n resetGypsyForm();\r\n inputMask();\r\n feather.replace();\r\n mobileToggle();\r\n mobileSelect();\r\n tabScroll();\r\n initialDatePicker();\r\n movePayment();\r\n iconFix();\r\n datePickerBlur();\r\n\r\n if (window.globalTimeoutOptions) {\r\n setSessionTimeout();\r\n timeoutHandler();\r\n }\r\n if (window.globalGaSettings) {\r\n podsGaSetup();\r\n }\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n\r\n\r\n\r\nconst cookies = {\r\n\tgetCookie: function getCookie(cookieName) {\r\n\t\tconst match = document.cookie.match(new RegExp(cookieName + '=([^;]+)'));\r\n\t\tif (match) return match[1];\r\n\t},\r\n\tsetCookie: function setCookie(cookieName, cookieValue, expiresInHours) {\r\n\t\tlet expiresString = '';\r\n\t\tif (expiresInHours) {\r\n\t\t\tvar date = new Date();\r\n\t\t\tdate.setTime(date.getTime() + (expiresInHours * 60 * 60 * 1000));\r\n\t\t\texpiresString = \" expires=\" + date.toUTCString();\r\n\t\t}\r\n\t\tdocument.cookie = cookieName + ' = ' + cookieValue + '; path=/; ' + expiresString;\r\n\t}\r\n};\r\n","(function ($) {\r\n const isPageEditor = function () {\r\n return !!(typeof Sitecore !== 'undefined' && Sitecore.PageModes && Sitecore.PageModes.PageEditor);\r\n };\r\n\r\n const init = function () {\r\n let toggle = $('.navbar-toggle');\r\n let mainMenu = $('.main-menu .navbar-collapse');\r\n let countryMenu = $('.mobile-nav #countryDropdown');\r\n let subMenu = $('.country-dropdown');\r\n let dropdownLink = $('.nav-container .dropdown-toggle');\r\n let desktopAccount = $('.desktop-nav .my-account');\r\n let mobileNav = $('.mobile-nav .main-nav');\r\n let backBtn = $('mobile-nav .backcta');\r\n \r\n $(backBtn).on('click', function () {\r\n $(this).parent('.dropdown-menu').removeClass('show');\r\n });\r\n\r\n $(desktopAccount).mouseenter(function () {\r\n $(this).find('.dropdown-menu').addClass('show');\r\n });\r\n\r\n $(desktopAccount).mouseleave(function () {\r\n $(this).find('.dropdown-menu').removeClass('show');\r\n });\r\n\r\n $(toggle).on('click', function () {\r\n if ($(this).hasClass('collapsed')) {\r\n $(this).removeClass('collapsed');\r\n showMenu();\r\n } else {\r\n $(this).addClass('collapsed');\r\n hideMenu();\r\n }\r\n });\r\n\r\n function showMenu() {\r\n $(mainMenu).addClass('show');\r\n\r\n if ($(window).width() < 836) {\r\n $(mobileNav).css('height', 'calc(100vh - 58px)');\r\n }\r\n }\r\n\r\n function hideMenu() {\r\n $(mainMenu).removeClass('show');\r\n\r\n if ($(window).width() < 836) {\r\n $(mobileNav).css('height', 'unset');\r\n }\r\n }\r\n\r\n $(countryMenu).on('click', () => {\r\n $(subMenu).toggleClass('show');\r\n });\r\n };\r\n\r\n var logoutDestination = (logoutDestinationUrl === undefined) ? '' : logoutDestinationUrl;\r\n var logoutUrl = (logoutUrl === undefined) ? '' : logoutUrl;\r\n \r\n if (!isPageEditor()) {\r\n attachLogout(logoutDestination, logoutUrl);\r\n }\r\n // if (commercialAccount == 'true') {\r\n // $(a[href^='/orders']).parent('li').hide;\r\n // }\r\n $(init);\r\n}(jQuery));\r\n\r\nfunction attachLogout(redirectUrl, logoutUrl) {\r\n $('.logout').on('click', (e) => {\r\n e.preventDefault();\r\n logout(redirectUrl, logoutUrl);\r\n });\r\n}\r\n\r\nfunction logout(redirectUrl, logoutUrl) {\r\n if (!redirectUrl) {\r\n redirectUrl = '/';\r\n }\r\n\r\n if (!logoutUrl) {\r\n logoutUrl = '/api/sitecore/SspNavigation/DoLogout';\r\n }\r\n\r\n $.ajax({\r\n url: logoutUrl,\r\n type: 'GET',\r\n contentType: 'application/json',\r\n success(result) {\r\n if (result.ErrorMessage) {\r\n // TODO: What should we do here?\r\n alert(result.ErrorMessage);\r\n } else {\r\n window.location.href = redirectUrl;\r\n }\r\n },\r\n });\r\n}\r\n","$(window).on('load', () => {\r\n console.log('checking notification Load');\r\n const notificationClose = $('.close-notification');\r\n\r\n $(notificationClose).on('click', function () {\r\n let notification = $(this).parents('.component-notification')\r\n notification.hide();\r\n console.debug(\"notification.data('callback'): \" + notification.data('callback'));\r\n let callbackMethodName = notification.data('callback');\r\n if (callbackMethodName && callbackMethodName.length) {\r\n window[callbackMethodName](notification);\r\n }\r\n });\r\n\r\n\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: '/api/sitecore/Notification/GetWaitTicketNotifications',\r\n\t\t\ttype: 'GET',\r\n\t\t\tcontentType: 'application/json',\r\n\t\t\tsuccess: function (result) {\r\n\t\t\t\tdebugger;\r\n\t\t\t\twindow.customerNotifications = result;\r\n\t\t\t\tconsole.log(customerNotifications);\r\n if(customerNotifications){\r\n showWeightNotification(customerNotifications);\r\n }\r\n\t\t\t}\r\n\t\t});\r\n\t\r\n\r\n});\r\n\r\nfunction showWeightNotification(notification){\r\n if(notification.Data){\r\n\r\n $('#weightNotification').append('
    '+\r\n\t'
    '+\r\n\t\t'
    '+ notification.Icon +\r\n\t\t'
    '+\r\n\t\t'
    '+\r\n '
    '+ \tnotification.NotificationTitle + '
    \t\t\t
    '\r\n + notification.NotificationText + \r\n '
    '+\r\n '\t\t'+\r\n '\t
    '+\r\n '
    ');\r\n }\r\n}\r\n\r\nfunction closeWeightNotification(){\r\n console.log('..............');\r\n // let notification = $(this).parents('.weight-notification'); \r\n let notification = $('.weight-notification');\r\n notification.hide();\r\n console.log('..............' + notification.length );\r\n // $('#myDiv').hide();\r\n}\r\n\r\nfunction showNotification(type, title, description, leftcta1, leftcta2, rightcta) {\r\n // First, hide any existing content-managed notifications\r\n $('.component-notification[data-cm=true]').hide();\r\n\r\n const cssclass = (type !== undefined ? `.${type}` : '');\r\n const notification = $(`.component-notification${cssclass}`);\r\n const titleDiv = notification.find('.notification-title');\r\n const descDiv = notification.find('.notification-message');\r\n const cta1Div = notification.find('.cta1');\r\n const cta2Div = notification.find('.cta2');\r\n\r\n if (title && title.length) {\r\n titleDiv.html(title);\r\n }\r\n\r\n if (description && description.length) {\r\n descDiv.html(description);\r\n }\r\n\r\n if (leftcta1 && leftcta1.length) {\r\n cta1Div.html(leftcta1);\r\n }\r\n\r\n if (leftcta2 && leftcta2.length) {\r\n cta2Div.html(leftcta2);\r\n }\r\n\r\n if (rightcta && leftcta2.length) {\r\n cta2Div.html(leftcta2);\r\n }\r\n\r\n notification.show();\r\n\r\n if (notification && notification.length > 0) {\r\n $([document.documentElement, document.body]).animate({\r\n scrollTop: $('.component-notification').offset().top,\r\n }, 'fast');\r\n }\r\n else {\r\n console.error('Unable to show \\'' + type + '\\' notification because no notification component has been added to this page. (Title: ' + title + '; Description: ' + description + ')');\r\n }\r\n}","/* -------------------------------------------------------------------------- */\r\n// Invoices\r\n/* -------------------------------------------------------------------------- */\r\n\r\n(function ($) {\r\n const init = function () {\r\n let invoicesPaymentForm = $('.invoice-item-payment form');\r\n let invoicePaymentAmount = $('.invoice-item-payment #paymentAmount');\r\n let invoicePaymentMethod = $('.invoice-item-payment #paymentMethod');\r\n let invoicePaymentMethodCancel = $('.invoice-item-payment .cancel');\r\n\r\n function invoicesCheckAmount() {\r\n $(invoicePaymentAmount).on('change', function () {\r\n const otherAmount = $(this).val();\r\n if (otherAmount.indexOf('other') >= 0) {\r\n $(this).closest('.field').next('.toggle-content').show();\r\n } else {\r\n $(this).closest('.field').next('.toggle-content').hide();\r\n }\r\n });\r\n }\r\n\r\n function invoicesCheckForm() {\r\n if ($(invoicesPaymentForm).length) {\r\n $(invoicesPaymentForm).each(function () {\r\n $.validator.setDefaults({ ignore: ':hidden:not(select)' });\r\n $(this).validate({\r\n highlight: function (element, errorClass, validClass) {\r\n $(element).closest('.field').addClass('error')\r\n },\r\n unhighlight: function(element, errorClass, validClass) {\r\n $(element).closest('.field').removeClass('error')\r\n }\r\n ,\r\n errorPlacement: function (error, element) {\r\n $(element).closest('.field').append(error);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n function invoicesPaymentMethodDropdown() {\r\n if ($(invoicePaymentMethod).length) {\r\n $(invoicePaymentMethod).chosenImage({\r\n width: '100%',\r\n disable_search: true,\r\n });\r\n }\r\n }\r\n\r\n function invoicesPaymentAmountDropdown() {\r\n if ($(invoicePaymentAmount).length) {\r\n $(invoicePaymentAmount).chosen({ width: '100%', disable_search: true });\r\n }\r\n }\r\n\r\n function invoicePaymentCancel() {\r\n if ($(invoicePaymentMethodCancel).length) {\r\n $(invoicePaymentMethodCancel).on('click', function (e) {\r\n e.preventDefault();\r\n var input = $(this).closest('form').find('input:visible');\r\n var dropdown = $(this).closest('form').find('select');\r\n var toggle = $(this).closest('form').find('.toggle-content');\r\n\r\n input.val('');\r\n toggle.hide();\r\n dropdown.chosen('destroy');\r\n dropdown.prop('selectedIndex', -1);\r\n dropdown.chosen();\r\n });\r\n }\r\n }\r\n\r\n invoicesCheckAmount();\r\n invoicesCheckForm();\r\n invoicesPaymentMethodDropdown();\r\n invoicesPaymentAmountDropdown();\r\n invoicePaymentCancel();\r\n };\r\n $(init);\r\n}(jQuery));\r\n","(function ($) {\r\n const onboarding = $('.onboarding-flow');\r\n const setCookie = (name, value, days) => {\r\n let expires = '';\r\n const pathname = `; path=${location.pathname}`;\r\n\r\n // We'll modify days logic based on future integration\r\n if (days) {\r\n const date = new Date();\r\n\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = `; expires=${date.toUTCString()}`;\r\n }\r\n\r\n document.cookie = `${name}=${value || ''}${expires}${pathname}`;\r\n };\r\n\r\n const setCookieOnboarding = () => {\r\n const button = $('#gotit');\r\n\r\n button.on('click', (e) => {\r\n e.preventDefault();\r\n\r\n $('#onboarding').modal('hide');\r\n setCookie('onboardingContainer', true, 365);\r\n });\r\n };\r\n\r\n window.onload = () => {\r\n if (onboarding.length) {\r\n if (document.cookie.indexOf('onboardingContainer') == -1) {\r\n $('#onboarding').modal('show');\r\n }\r\n }\r\n };\r\n\r\n const init = () => {\r\n setCookieOnboarding();\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n","(function ($) {\r\n const tabsToSelect = function () {\r\n const $tabButtonItem = $('#tabs li');\r\n const $tabSelect = $('#tab-select');\r\n const $tabContents = $('.tab-pane');\r\n const activeClass = 'is-active';\r\n\r\n $tabButtonItem.find('a').first().addClass(activeClass);\r\n $tabContents.not(':first').hide();\r\n\r\n $tabButtonItem.find('a').on('click', function (e) {\r\n // Hijack Bootstrap's tabs for consistency\r\n const target = $(this).attr('href');\r\n\r\n $tabButtonItem.find('a').removeClass(activeClass);\r\n $(this).parent().addClass(activeClass);\r\n $(this).addClass(activeClass);\r\n $tabSelect.val(target);\r\n $tabContents.hide().removeClass('active');\r\n $(target).show().addClass('active');\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n $tabSelect.on('change', function () {\r\n // Spoof tab behavior when option is selected\r\n const target = $(this).val();\r\n const targetSelectNum = $(this).prop('selectedIndex');\r\n\r\n $tabButtonItem.find('a').removeClass(activeClass);\r\n $('.nav-item .nav-link').removeClass(activeClass);\r\n $tabButtonItem.eq(targetSelectNum).find('a').addClass(activeClass);\r\n $tabContents.hide();\r\n $(target).show();\r\n });\r\n };\r\n\r\n //If the URL has an anchor, select the associated tab\r\n const selectUrlTab = function () {\r\n if (window.location.hash) {\r\n var hashText = window.location.hash.replace('#', '');\r\n var anchoredTab = $(\"#\" + hashText);\r\n if (anchoredTab.length > 0) {\r\n $(\".nav-item .nav-link\").removeClass(\"is-active\");\r\n $(\"#tab\" + hashText).addClass(\"is-active\");\r\n\r\n $(\"#tab-select\").val(\"#\" + hashText);\r\n $(\".tab-pane\").hide().removeClass(\"active\");\r\n anchoredTab.show().addClass(\"active\");\r\n }\r\n }\r\n };\r\n\r\n const init = function () {\r\n if ($('#resourcesContent').length) {\r\n tabsToSelect();\r\n selectUrlTab();\r\n }\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n","let initTimelineJourney = () => { };\r\n\r\n// client side validation of login form\r\n(function ($) {\r\n const tooltipInit = function () {\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n };\r\n\r\n const reveal = function () {\r\n const revealContent = $('[data-reveal]');\r\n\r\n // Open / Edit Forms on Init\r\n $(revealContent).each(function () {\r\n $(this).on('click', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const toReveal = $(this).attr('data-reveal');\r\n\r\n $(this).closest('.progress-content').addClass('hidden');\r\n $(this).closest('.component-timeline_journey-card').find('.hide-details').addClass('d-none');\r\n $(this).closest('.component-timeline_journey-card').find('#' + toReveal).removeClass('hidden');\r\n });\r\n\r\n // Open / Edit Forms After Submitting Move Leg (Depricate above method due to Knockout Bindings)\r\n const editLink = '.progress-content_edit-details a';\r\n\r\n $(document).on('click', editLink, function () {\r\n $(this).closest('.component-timeline_journey-card').addClass('editCurrent');\r\n $(this).closest('.component-timeline_journey-card.editCurrent').find('#' + $(this).attr(\"data-reveal\")).removeClass('hidden');\r\n $(this).closest('.component-timeline_journey-card.editCurrent').find('.hide-details').addClass('d-none');\r\n $(this).closest('.progress-content').addClass('hidden');\r\n });\r\n\r\n const formLink = '.progress-content .showForm';\r\n\r\n $(document).on('click', formLink, function () {\r\n $(this).closest('.component-timeline_journey-card').addClass('addCurrent');\r\n $(this).closest('.component-timeline_journey-card.addCurrent').find('.showEdit').removeClass('hidden');\r\n $(this).closest('.progress-content').addClass('hidden');\r\n });\r\n\r\n const cancleForm = '.progress-content .cancleleg';\r\n\r\n $(document).on('click', cancleForm, function () {\r\n $(this).closest('.component-timeline_journey-card').addClass('cancleCurrent');\r\n $(this).closest('.component-timeline_journey-card.cancleCurrent').find('.progress-content .progress-content.hidden').removeClass('hidden');\r\n $(this).closest('.component-timeline_journey-card.cancleCurrent').find('.progress-content.showEdit').addClass('hidden');\r\n $(this).closest('.component-timeline_journey-card.cancleCurrent').find('.hide-details').removeClass('d-none');\r\n });\r\n });\r\n };\r\n\r\n const legInProgress = function () {\r\n if ($('.component-timeline_journey').length) {\r\n const showForm = $('.showForm');\r\n const scheduleLater = $('.cancleleg');\r\n const editDetails = $('.progress-content_edit-details a');\r\n const timelineJourney = $('#component-timeline-journey');\r\n const card = $('.component-timeline_journey-card');\r\n\r\n $('body').on('click', '.showForm', (e) => {\r\n\r\n e.preventDefault();\r\n $('.InProgress').removeClass('InProgress');\r\n $(e.currentTarget).closest('.component-timeline_journey-card').addClass('InProgress');\r\n });\r\n\r\n $('body').on('click', '.cancleleg', (e) => {\r\n e.preventDefault();\r\n $('.InProgress').removeClass('InProgress');\r\n\r\n // Hide the confirmation text area if it's present\r\n var moveLeg = $(e.currentTarget).closest('.component-timeline_journey-card');\r\n moveLeg.find('.confirmation-texts').addClass('d-none');\r\n\r\n // Remove Quote ID\r\n moveLeg.removeAttr('data-quoteId');\r\n\r\n // Update button text back to the edit text, if it's available\r\n let confirmationButtonTags = moveLeg.find('.submitForm');\r\n confirmationButtonTags.each((i, tag) => {\r\n let confirmationButtonTag = $(tag);\r\n confirmationButtonTag.html(confirmationButtonTag.attr('data-confirmButtonLabel'));\r\n });\r\n });\r\n\r\n $('body').on('click', '.progress-content_edit-details a', (e) => {\r\n $(e.currentTarget).parent().parent().parent().parent().parent().addClass('InProgress');\r\n });\r\n\r\n $(scheduleLater).on('click', '.component-timeline_journey-card', (e) => {\r\n $('.component-timeline_journey-card').removeClass('InProgress');\r\n });\r\n }\r\n };\r\n\r\n initTimelineJourney = function () {\r\n reveal();\r\n tooltipInit();\r\n legInProgress();\r\n };\r\n\r\n if (typeof delayTimelineInit === 'undefined' || !delayTimelineInit) {\r\n initTimelineJourney();\r\n }\r\n}(jQuery));\r\n","(function ($) {\r\n function submitPassword() {\r\n $(\"#passwordSecurityForm\").on(\"submit\", function(e) {\r\n e.preventDefault();\r\n $(\"#passwordSecurityButton\").prop('disabled', true);\r\n\r\n var url = $(e.currentTarget).attr('action');\r\n var data = {\r\n newPassword: $(\"#passwordSecurityForm :input[name='passwordNew']\").val(),\r\n oldPassword: $(\"#passwordSecurityForm :input[name='passwordOld']\").val(),\r\n email: $(\"#passwordSecurityForm :input[name='email']\").val()\r\n }\r\n \r\n $.ajax({\r\n url: url, \r\n type: \"POST\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\"\r\n })\r\n .done(function(doneResponse) {\r\n\r\n if (doneResponse.responseCode === \"SUCCESS\") {\r\n showNotification(\"success\", doneResponse.message.mainMessage, doneResponse.message.helperMessage);\r\n\r\n // Clear all panels\r\n $('.component-account-edit-details').removeClass('active').css('display', 'none');\r\n $('.infobody').addClass('active').removeClass('hideextra');\r\n let passwordSectionLink = $('#link-passwordSecurityPanel');\r\n if (passwordSectionLink.length > 0) {\r\n passwordSectionLink.removeClass('active').find('span').text(passwordSectionLink.data('edit'));\r\n }\r\n\r\n // reset form\r\n $(\"#passwordSecurityForm\")[0].reset();\r\n \r\n // reset new password validation\r\n $(\"#passwordSecurityForm\").find(\".password-conditions .valid-number\").removeClass(\"noPass\").removeClass(\"pass\");\r\n $(\"#passwordSecurityForm\").find(\".password-conditions .valid-small-letter\").removeClass(\"noPass\").removeClass(\"pass\");\r\n $(\"#passwordSecurityForm\").find(\".password-conditions .valid-big-letter\").removeClass(\"noPass\").removeClass(\"pass\");\r\n $(\"#passwordSecurityForm\").find(\".password-conditions .valid-special-chars\").removeClass(\"noPass\").removeClass(\"pass\");\r\n $(\"#passwordSecurityButton\").prop('disabled', true);\r\n } else {\r\n showNotification(\"error\", doneResponse.message.mainMessage, doneResponse.message.helperMessage);\r\n }\r\n $(\"#passwordSecurityButton\").prop('disabled', false);\r\n })\r\n .fail(function(failResponse) {\r\n $(\"#passwordSecurityButton\").prop('disabled', false);\r\n showNotification(\"error\", \"Error\", failResponse.message);\r\n console.error(failResponse);\r\n });\r\n });\r\n }\r\n\r\n function validatePassword() {\r\n \r\n const formPasswordUpdate = \"#passwordSecurityForm\";\r\n var flagOldPassword, flagNewPassword, flagConfirmPassword;\r\n \r\n if($(formPasswordUpdate).length){\r\n $(\".passwordEye\").on(\"click\", function(){\r\n if($(this).find(\".fa-eye-slash\").length){\r\n $(this).find(\".fa\").removeClass(\"fa-eye-slash\").addClass(\"fa-eye\");\r\n $(this).prev(\"input\").attr(\"type\",\"text\");\r\n }\r\n else{\r\n $(this).find(\".fa\").removeClass(\"fa-eye\").addClass(\"fa-eye-slash\");\r\n $(this).prev(\"input\").attr(\"type\",\"password\");\r\n }\r\n })\r\n $(\"#passwordOld\").on(\"keyup change\", function(){ \r\n if($(this).val() != \"\"){\r\n flagOldPassword = true;\r\n }else{\r\n flagOldPassword = false;\r\n }\r\n setSubmitBtn();\r\n })\r\n \r\n const lengthRegex = /.{8,}/;\r\n const lowercaseRegex = /.*[a-z].*/;\r\n const uppercaseRegex = /.*[A-Z].*/;\r\n const specialCharRegex = /.*[\\W_].*/;\r\n var passwordElem, passwordVal;\r\n $(\"#passwordNew\").on(\"keyup change\", function(){ \r\n passwordElem = $(this);\r\n passwordVal = $(this).val();\r\n \r\n let validNumber = passwordElem.siblings(\".sms-option\").find(\".password-conditions .valid-number\");\r\n let validSmallLetter = passwordElem.siblings(\".sms-option\").find(\".password-conditions .valid-small-letter\");\r\n let validBigLetter = passwordElem.siblings(\".sms-option\").find(\".password-conditions .valid-big-letter\");\r\n let validSpecialChars = passwordElem.siblings(\".sms-option\").find(\".password-conditions .valid-special-chars\");\r\n if(passwordVal != \"\"){\r\n if(lengthRegex.test(passwordVal) == true && validNumber.length){\r\n validNumber.removeClass(\"noPass\").addClass(\"pass\");\r\n flagNewPassword = true;\r\n } else if (validNumber.length && validNumber != \"\") {\r\n validNumber.removeClass(\"pass\").addClass(\"noPass\");\r\n flagNewPassword = false;\r\n }\r\n if(lowercaseRegex.test(passwordVal) == true && validSmallLetter.length){\r\n validSmallLetter.removeClass(\"noPass\").addClass(\"pass\");\r\n flagNewPassword = true;\r\n } else if (validSmallLetter.length) {\r\n validSmallLetter.removeClass(\"pass\").addClass(\"noPass\");\r\n flagNewPassword = true;\r\n }\r\n if(uppercaseRegex.test(passwordVal) == true && validBigLetter.length){\r\n validBigLetter.removeClass(\"noPass\").addClass(\"pass\");\r\n flagNewPassword = true;\r\n } else if (validSmallLetter.length) {\r\n validBigLetter.removeClass(\"pass\").addClass(\"noPass\");\r\n flagNewPassword = false;\r\n }\r\n if(specialCharRegex.test(passwordVal) == true && validSpecialChars.length){\r\n validSpecialChars.removeClass(\"noPass\").addClass(\"pass\");\r\n flagNewPassword = true;\r\n } else if (validSmallLetter.length) {\r\n validSpecialChars.removeClass(\"pass\").addClass(\"noPass\");\r\n flagNewPassword = false;\r\n }\r\n if(flagNewPassword == true){\r\n if($(\"#passwordConfirm\").length != 0 && ($(\"#passwordConfirm\").val() == $(this).val())){\r\n flagConfirmPassword = true;\r\n }else{\r\n flagConfirmPassword = false;\r\n }\r\n }\r\n }else{\r\n passwordElem.siblings(\".sms-option\").find(\".password-conditions li\").removeClass(\"pass\").removeClass(\"noPass\");\r\n flagNewPassword = false;\r\n }\r\n setSubmitBtn();\r\n })\r\n\r\n $(\"#passwordConfirm,#passwordNew\").on(\"keyup change\", function(){\r\n let passwordNew = $(\"#passwordNew\");\r\n let passwordConfirm = $(\"#passwordConfirm\");\r\n if(passwordNew.length != 0 && passwordConfirm.val() != \"\"){\r\n if(passwordNew.length != 0 && (passwordNew.val() == passwordConfirm.val())){\r\n passwordConfirm.parent().removeClass(\"error\");\r\n passwordConfirm.siblings(\"#accountsecurityPassword-error\").addClass(\"hidden\");\r\n flagConfirmPassword = true;\r\n }else{\r\n passwordConfirm.parent().addClass(\"error\");\r\n passwordConfirm.siblings(\"#accountsecurityPassword-error\").removeClass(\"hidden\");\r\n flagConfirmPassword = false;\r\n }\r\n } else\r\n flagConfirmPassword = false;\r\n setSubmitBtn();\r\n })\r\n }\r\n\r\n function setSubmitBtn(){\r\n if(flagOldPassword == true && flagNewPassword == true && flagConfirmPassword == true){\r\n $(\"#passwordSecurityButton\").prop('disabled', false)\r\n }else{\r\n $(\"#passwordSecurityButton\").prop('disabled', true);\r\n }\r\n }\r\n }\r\n \r\n const init = function () {\r\n validatePassword();\r\n submitPassword();\r\n };\r\n \r\n $(init);\r\n }(jQuery));\r\n ","(function ($) {\r\n const videoModal = function () {\r\n const loader = $('#videoLoader');\r\n const modal = $('#modalVideo');\r\n\r\n $('.video-tile, .video-card .title').on('click', function () {\r\n const videoid = $(this).data('id');\r\n let videoFile = `https://player.vimeo.com/video/${videoid}?autoplay=1`;\r\n\r\n loader.css({\r\n display: 'block',\r\n opacity: 1,\r\n }).attr('src', videoFile);\r\n });\r\n\r\n modal.on('hidden.bs.modal', () => {\r\n loader.attr('src', ''); // Unload the video to stop playback\r\n });\r\n };\r\n\r\n const showVideos = function () {\r\n $('.cta-videos a').on('click', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n let count = 1;\r\n\r\n if ($(this)[0].id === 'seeMoreVideos') {\r\n // Display the next three video cards\r\n const hiddenVideos = $('.component-videos-container').find('.hidden');\r\n\r\n $(hiddenVideos).each(function () {\r\n if (hiddenVideos.length) {\r\n if (count <= 3) {\r\n $(this).removeClass('hidden');\r\n $(this).addClass('shown');\r\n count++;\r\n\r\n const checkHiddenVideos = $('.component-videos-container').find('.hidden');\r\n if (checkHiddenVideos.length === 0) {\r\n // Replace \"See More\" cta with \"See Less\"\r\n $('#seeLessVideos').addClass('active');\r\n $('#seeMoreVideos').removeClass('active');\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n if ($(this)[0].id === 'seeLessVideos') {\r\n // Replace \"See Less\" cta with \"See More\"\r\n $('#seeLessVideos').removeClass('active');\r\n $('#seeMoreVideos').addClass('active');\r\n\r\n const shownVideos = $('.component-videos-container').find('.shown');\r\n\r\n if (shownVideos.length) {\r\n // Hide all video cards but show the first three\r\n $(shownVideos).each(function () {\r\n if (count > 3) {\r\n $(this).removeClass('shown');\r\n $(this).addClass('hidden');\r\n }\r\n count++;\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n const init = function () {\r\n if ($('.component-videos-container').length) {\r\n videoModal();\r\n showVideos();\r\n } else if ($('.video-tile, .video-card .title').length) {\r\n videoModal();\r\n }\r\n };\r\n\r\n $(init);\r\n}(jQuery));\r\n"]}