{"version":3,"sources":["mingolf/mingolf.ajax.js","mingolf/mingolf.calendar.js","mingolf/mingolf.competition-entry.js","mingolf/mingolf.converter.js","mingolf/mingolf.core.js","mingolf/mingolf.hcp.js","mingolf/mingolf.payment.js","mingolf/mingolf.profileimg.js","mingolf/mingolf.queue.js","mingolf.ui/mingolf.ui.clearer.js","mingolf.ui/mingolf.ui.favourites.js","mingolf.ui/mingolf.ui.golfid.js","mingolf.ui/mingolf.ui.header.js","mingolf.ui/mingolf.ui.helpers.js","mingolf.ui/mingolf.ui.modal.js","mingolf.ui/mingolf.ui.navigation.js","mingolf.ui/mingolf.ui.overlay.js","mingolf.ui/mingolf.ui.popover.js","mingolf.ui/mingolf.ui.select.js","mingolf.ui/mingolf.ui.show-more.js","mingolf.ui/mingolf.ui.time.js","mingolf.ui/mingolf.ui.validation.js"],"names":["$","window","undefined","mg","_","request","type","url","data","suppressError","asAjax","settings","props","extend","error","jqXHR","textStatus","errorThrown","status","indexOf","ui","errormodal","html","translations","SomethingWentWrongUnexpectedlyTryAgain","title","UnknownError","location","reload","ajax","then","Deferred","resolve","promise","reject","async","fetchAsync","params","method","expectedResponseType","reqData","FormData","URLSearchParams","Object","entries","forEach","_ref","let","k","v","append","toString","responsePromise","fetch","body","ok","text","json","response_error_txt","AjaxServerError","Error","constructor","message","serverReponseBody","super","this","name","get","arguments","length","post","httpRequest","httpMethod","getAsync","postAsync","jQuery","load","$target","empty","dataType","cache","done","calendar","_modalPleaseWait","_modalDetails","_htmlDetailsView","_htmlCancelView","loadFutureRounds","max","expandable","maxExpand","filterType","filterPeriodFrom","filterPeriodTo","isFirstLoad","isStartPage","options","loadPreviousRounds","updateFutureRounds","updatePreviousRounds","showDetails","itemTime","slotID","compID","listType","showPleaseWaitModal","hasError","isCompetition","entry","formatHeaderValue","renderButton","btnPayVisible","btnEditVisible","btnDeleteVisible","btnPayText","btnEditText","btnDeleteText","btnPayOnClick","btnEditOnClick","btnDeleteOnClick","btnPayDisabled","btnEditDisabled","btnDeleteDisabled","close","ErrorMessage","CompetitionID","BookedTeeTime","headerHTML","CompetitionName","Players","each","IsSelf","formatEntryValue","property","allowSearchInTeam","team","value","Teams","Entries","kE","vE","kP","vP","EntryID","FormattedDay","ClubName","CourseName","StartTime","FormattedTime","StartHole","PHCP","Tee","Class","$expandable","clone","newExpandableID","getUniqueNumber","newExpandableCollapseID","attr","$icon","find","remove","SeeYourChoices","outerHTML","renderQuestionsHeader","titleClassName","join","renderQuestions","questions","hasAnswerText","Answer","hasPrice","Price","priceTemplate","requestContent","push","replace","cc","formatAmount","Value","renderRequest","Text","content","hasTeam","requestsContent","requestsContentTeam","questionsContent","Questions","reqContent","req","Requests","renderReq","TeeTimeWish","GolfCart","Yes","Caddie","TeeName","MessageForTheClubOrCompetitionLeader","Note","reqHTML","YourChoices","teamQuestionsContent","TheTeamsChoices","onDeleteSuccess","isFunction","renderAsHidden","renderDetailsAsHidden","rows","renderPrice","renderPlayer","renderSeparator","amount","totalPaid","forceOneLine","price","helpers","player","getGenderIconClass","Gender","phcp","tee","TotalPaid","Name","HCP","GolfID","teamValues","country","CountryCode","countries","byCountryIsoCode","priceContent","ShowAsGuest","ForeignId","ShortName","Woman","Man","className","onclick","disabled","AllowPayment","Pay","Edit","CancelTeeTime","SlotID","PayAction","Visible","Enabled","EditAction","DeleteAction","DeleteCompetitionSignup","IsTeenTour","Confirm","TeenTourDelete","Time","SaveToCalendar","setTimeout","actionmodal","titleInHeader","hideStateIcon","hideFooter","modalBodyFull","_data","onOpen","handleAction","action","btnClass","onErrorModalClose","errors","DisabledReasons","$btn","that","id","err","resolveError","substr","off","on","NotAllowed","onClose","removeAttr","addClass","onDeleteErrorModalClose","setTitle","HideChoices","getDetailsFunc","getDetails","showDeleteCompetitionSignup","trigger","hide","preparePopovers","target","src","$wrapper","$container","idx","elem","$this","time","parents","item","popover","create","res","container","boundary","placement","openBooking","slotId","showPaymentDirectly","actions","findTeeTime","openCompetitionSignup","competitionID","redirect","redirectToOMG","openTab","saveToCalendar","clubName","courseName","encodeURIComponent","_saveToCalendarModal","confirmmodal","hideAllButtons","deleteBooking","modalTitle","deleteCalendarItemShared","deleteCompetitionSignup","$modal","$modalTitle","$modalBody","deleteCalendarItem","allowDeleteAll","AllowDeleteAll","onShow","onCancel","show","onSuccess","preSelectView","preSelectViewViewShowHeader","isDeleteSelf","render","cancelTitle","WhoDoYouWantToRemoveBooking","rdoAllText","CancelTheEntireTeeTime","rdoOnlyMeText","OnlyRemoveMeFromTheBall","btnDeleteSaveText","WhoDoYouWantToRemoveCompetition","TheEntireTeam","OnlyMyself","teams","isSoloBooking","Next","Back","next","cancel","save","preSelectViewShowHeader","btnBackFuncPtr","back","prop","hideHeaderText","$detailsCancel","$body0","$body1","$rdo","headerText","youAreNowRemovingText","YouAreNowRemovingCompetition","YouAreNowRemovingBooking","calendarItemHasAPaidFeeText","TheSignupHasAPaidFee","TheBookingHasAPaidFee","playerHasAPaidFeeText","ThePlayerHasAPaidFee","paidWarning","players","val","showTeamName","o","user","GolfId","AllowRefundOnDelete","AnyRefundOfPaidCompetitionFeesHappensAutomatically","DependingOnTheClubsSettingsRefundMayHappenAutomatically","end","toggleClass","$btns","$spinner","removeClass","bookingURLBase","lilumTransactionName","deleteEntireTeam","allowRefundOnlinePayments","filter","ParticipantID","participantId","lilumStartTransaction","Deleted","ShowRefundWarning","infomodal","YourSignupWasDeletedButWeWereUnableToRefund","PleaseNote","hideButtonOK","errorMessage","always","lilumStopTransaction","registerHCP","slot","hcp","registerRound","open","HandicapRounds","abstractView","compEntry","_ViewPlayers","requestData","asTeam","TeamEntries","ID","_renderPlayer","_renderTeam","fvFields","validation","fv","getFields","keys","removeField","playersFvFields","i","e","dataset","some","startsWith","addField","plugins","declarative","parseElement","addPlayer","golfId","funcAddPlayer","trim","MemberID","ThisPlayerAlreadyExists","golfIDs","map","concat","pleaseWait","fail","$ddlClass","availableClasses","_checkRequestResponse","classes","_getParticipantClasses","vC","_renderTeamName","select","sp","refresh","_len","fields","Array","_key","validateFields","FormValidation","Status","Valid","removePlayer","newGolfIDs","selectedClass","classFound","parseInt","searchPlayer","clubId","firstName","lastName","funcSearchPlayer","FullName","ActualHCP","Add","_len2","_key2","toggleAddPlayer","collapse","tees","_getPlayerTees","_getPlayerHTML","idSelectTee","idMainClass","competition","ClassSetup","EnableMultiClass","_getChoicesHTML","_getTeeTimeHTML","_getMainClassHTML","_getOtherClassesHTML","_getTeeHTML","_ddlClassOnChange","Request","TeeWishesOpenFor","_updateAvailableTees","idClass","before","$txtTeamName","$lblTeamName","_ddlTeamClassOnChange","ManualTeamNaming","TeamName","MainClassID","showHCPStatus","showhcpstatus","hcpStatusContent","HandicapStatus","No","hcpStatusColInnerClass","FirstName","LastName","FormattedHCP","HandicapStatusActive_Short","Remove","_len3","choices","_key3","useRemainingWidthIfLast","participant","AllowEarlyLateStart","selected","TeeTime","teetimewishes","Key","isTeam","SameSize","enableMultiClass","isSignedUp","IsPrimary","MainClass","OtherClasses","$existing","TeeGUID","SelectTee","AllowFemale","AllowMale","GUID","ignoreStatus","comparisonType","Classes","Type","ExternalID","filteredClasses","competitionClasses","competitionClass","kC","element","isInit","$classesWrapper","split","newID","$select","isMain","isSelected","s","Participate","addEventListener","preventDefault","parentElement","focus","classID","_updateTeamClassErrorText","sort","a","b","invalidClassHTML","_getInvalidClassesText","Team","setAllowNext","$ddlMainClass","availableTees","isSelectedClass","AvailableTees","key","$ddlTee","currentValue","$options","hideOption","isHidden","parent","is","toggle","Default","unwrap","wrap","teeIDs","disable","errorMessages","InvalidEntries","msg","EntryError","ExistingPlayer","ThisPersonAlreadyExistsInTheCompetition","InactivePlayer","ThisPersonIsNotActiveInAnyClub","SuspendedPlayer","ThisPlayerCannotBeAddedPlayerSuspended","UnknownPlayer","ThePlayerWasNotFound","setAllowAddPlayer","invalidClasses","InvalidCause","_translateInvalidCause","invalidCause","classObj","translation","UnknownCause","NotCalculated","ThePlayersHCPIsTooLow","ThePlayersHCPIsTooHigh","ThePlayerIsTooYoung","ThePlayerIsTooOld","ThePlayersGenderIsNotAllowed","ThePlayersPlayerStatusIsNotAllowed","ThereAreNotEnoughTeamMembersOnTheTeam","ThereAreTooManyTeamMembersOnTheTeam","TheTotalTeamHCPIsTooLow","TheTotalTeamHCPIsTooHigh","BothAManAndAWomanMustBeOnTheTeam","OneOrMoreTeamMembersAreInvalid","ThereAreNoTeamMembers","ThePlayersMembershipIsInvalid","classHcpStatus","HcpStatus","ThePlayerDoesNotHaveHandicapStatus","classHCPStatus","HandicapStatusActive","HandicapStatusInactive","ThePlayersHCPStatusIsNotAllowed","validate","teamClasses","hasValidClass","onBeforeLeave","teeTime","UseRule515","primaryClass","otherClasses","isNaN","oc","AssignType","warnings","warningType","warningTitle","includeClassName","isEdit","MaxParticipantsReached","ReserveListPrincipleText","SignupInTheClassIsPossibleButMaxParticipantsHasBeenReached","MaximumParticipantsReached","prefix","party","themselves","participate","currentClass","HCPStatus","ExcludeInactiveHCPFromResult","ThePlayer","You","doesntHave","DoesNotHave","DoNotHave","Themselves","Yourself","PartyDoesntHaveHCPStatusPartyCanParticipateButWillNotBeOnTheList","toLowerCase","continueOnClose","useOKCancel","continueFunc","btnYesOnClick","_ViewQuestions","renderPlayersSummary","renderRow","participantID","setValueRdo","$tmp","setValueTxt","setValueQuestion","participantQuestions","question","participantQuestion","Info","answer","QuestionType","moment","textToDateTime","format","date","getHours","getMinutes","renderRequestsPlayer","renderPlayerRow","requests","$templateGolfCart","$templateCaddie","IsTeamQuestion","$questionTemplate","AllowPlayersNote","_getNoteHTML","splice","renderRequestsTeam","onAnswerChange","updateNextText","$requests","$dateElements","$parent","flatpickr","dateFormat","$selectElements","$timeElements","requestsFvFields","_getQuestionAnswer","questionID","typeOfQuestion","identifier","getSelector","getElement","el","document","querySelector","fp","_flatpickr","selectedDates","dateTimeToText","Date","hours","minutes","setHours","setMinutes","setSeconds","_getProduct","participantIdentifier","product","productID","ProductID","currency","Currency","vat","VAT","TypeOf","priceTokens","option","currencies","getGBTourCurrency","ProductName","Paid","Balance","IsPaid","AccountNumber","CostCenter","handleQuestions","currentProducts","vQ","cP","productFound","Products","validateAcceptRequired","input","checked","_ViewPayments","paymentRows","renderProducts","products","paymentAllowed","OnlineEntryAndPayment","paymentRequired","oep","EnableOnlinePayment","PaymentWindowOpen","PaymentRequired","EntryFee","CompetitionGreenFee","kQ","matches","kCQ","vCQ","Options","kO","vO","renderProduct","paid","PayNow","newProduct","orgProduct","sumRows","Sum","AlreadyPaid","StillToPay","$paymentsList","updateSums","isPaymentOnly","getPayNowProducts","eq","getSums","total","payNow","alreadyPaid","stillToPay","$v","parseFloat","addToStillToPay","$summaries","setSum","selector","sum","sums","_ViewFinish","_ViewSelectTeeTime","SelectTeeTime","spinner","ignore_selected_match_saved_entries","initially_selected_match","ErrorCodeModulePrefix","force_allow_progression_without_match_selection","saved_entries_part_of_team","saved_entries_not_all_on_same_match","is_editing","allow_progression_without_match_selection","found_open_slots","playersCanSelectTeeTime","$startlists_wrapper","include_link_in_warning_to_switch_signup_method","startlists","renderInlineMessage","initEdit_ifRelevant","foundNoCompatibleStartlist","_this$compEntry$data$","OnlineEntryMethod","Warning","renderWarning_noMatchSelectionPossible","pages","multiple_start_dates","hasMultipleMatchStartDates","reduce","startlist","renderStartList","updateNextBtn","startList","StartList_Reference_ID","Matches","not_available","GroupSizeType","Match_Order","has_match_selection","hasMatchSelection","selectedMatch","getSelectedMatch","show_start_hole_number","StartList_Type","match","renderMatch","MatchRID","Match_RID","views","selectTeeTime","setSelectedMatch","obj","resetSelectedMatch","is_selected","groupSize","GroupSize","slot_startlist_entries","prepareSlotEntries","number_of_entries","slot_open_arr","number_of_locked_slots","Match_Locked_Slots","TryLockFoundOpenSlot","match_initially_selected","slotNo","StartList_Locked","Match_Locked","all_slots_not_open","found_only_locked_slots","slot_open","influenced_by_locks","render_player_prev_slot_as_abandoned","player_self_slotNo","findPlayerSlot_initiallySelectedMatch","first_open_slotNo","renderBtn_AddMyself","renderBtn_RemoveMyself","renderHoleTxt","renderMatchStartTimeTxt","startlist_entry","renderMatchSlot","Entry_Reference_ID","entries_team_rids_set","Set","Entry_TeamRID","has","size","add","Entry_Order","index","EntryTeamRID","EntryRID","default_entry_txt","isEmptyObject","Occupied","NA","Unoccupied","Locked","renderEntryTxt","default_txt","txtHtml","iconName","MyTeam","I","getPlayerSelfIcon","entry_player","Player","Player_IsAnonymous","Anonymous","Player_Name","Player_Gender","Team_Name","_match$Match_StartHol","Hole","Match_StartHoleName","Match_StartHole","outputFormatStr","Match_StartTime","style_as_disabled","StartList_CompetitionID","txt","tryLockSlot","startlist_rid","match_rid","_data$startlists$filt","postData","courseStartID","StartList_CourseStart_Reference_ID","matchID","groupSizeType","startList_rid","checksum","errorTxt","displaySpinner","_startlist$Matches$fi","resp_data","m","TryLockSuccess","selected_match_obj","generateSelectedMatchBasisObj","PrevMatchRID","TryLockFailCode","TheSelectedTeeTimeIsNotAvailable","AllTheTeeTimesOfTheStartListAreCurrentlyLocked","errorTitle","displayError","tryUnlockAnySlot","successFunc","TryUnLockAnySuccess","getUnknownErrorMsg","found_compatible_startlist","getSetOfSavedEntryIDs","initInitiallySelectedMatch_savedEntries","_that$compEntry$data$","TeeTimeSelectionNoAvaliableWhenEditAsPlayerPartOfTeam","renderLinkToSwithSignupMethod","_that$compEntry$data$2","_that$compEntry$data$3","savedEntriesId_set","selected_match","TheTeeTimeCannotBeEditedDueToInconsistenciesInTheTeeTimes","StartlistVersionID","StartList_Version_ID","CourseStartRID","StartListRID","Checksum","editing","asTeamInverse","AnIndividualPlayer","ATeam","signUpMethodNewLink","StartOverAs","ClickTheFollowingLinkIfYouWishToChangeEditMode","ClickTheFollowingLinkIfYouWishToRestartTheSignUpProcess","OtherwiseYouMayClickNextBelowToContinueTheProcessOf","EditingSignUp","SigningUp","includeLinkToSwithSignupMethod","signUpMethodLinkHtml","FoundNoFirstRoundStartListOfTheCompetitionThatIsOpenForRegistration","allowNext","PleaseSelectATeeTimeInTheListAboveBeforeContinuing","setOfStartDates","entry_player_self_arr","_mg$pages$competition","entry_player_self","competitionEntry","capacity","isPayment","activeView","isSigningup","payments","finish","$form","removePlugin","updatePluginOptions","excluded","field","elements","isVisible","offsetWidth","offsetHeight","getClientRects","getAttribute","classList","contains","parentIsVisible","rowSelector","rs","addEvent","init","competitionData","selfPlayer","Courses","CourseID","initAction","initRender","view","rendered","updatePrevState","renderThankYouPageAd","resolveNextStep","resolveStep","resolvePrevStep","direction","steps","currentStepIndex","findIndex","hasOwnProperty","hasQuestions","$rqTemplates","children","hasTemplates","hasQuestionAnswerWithPrice","result","hasPayments","step","isRelevant","prevStep","nextStep","prev","resetForm","onBeforeLeaveConfirmed","cloneFields","excludeFields","assign","NotValidated","Invalid","preSignup","showPaymentWindow","signup","btnNextText","EditSignUp","SignUp","getSignupData","encode","JSON","stringify","callback","pleaseWaitModal","showErrorModal","paymentWindow","payment","callBackOnClose","paymentComplete","selectedProducts","ids","slice","signupData","gaEvent","PaymentID","UnableToContinue","navigate","Promise","all","validateField","results","allowAddPlayer","ddlQuestionOnChange","$element","$option","onChkAcceptRequiredClick","disabledReason","InsufficientRights","event","padZeroes","number","dateTimeToTimeText","dateTimeFormat","TimeSeparator","dateToText","includeHourMinute","textToDate","toDate","toNumeric","failValue","Number","MIN_VALUE","toDecimal","toHcp","hcpToText","culture","tmpHcp","digits","Math","abs","toLocaleString","minimumFractionDigits","maximumFractionDigits","test","toFixed","formatDecimal","forceDigits","tmpDec","forceDecimals","includeCurrency","formatDate","includeYear","formatTime","timeUnitToMinutes","unit","createFunctionWithTimeout","opt_timeout","called","fn","pad","n","getScrollbarWidth","scrollDiv","createElement","style","position","top","width","height","overflow","appendChild","scrollbarWidth","getBoundingClientRect","clientWidth","removeChild","scrollTo","speed","additionalOffset","$header","offset","scrollY","stop","animate","scrollTop","scrollToTop","documentElement","getRandomNumber","minimum","maximum","floor","random","r","resetErrorMessage","errorWrapper","showErrorMessage","includeParagraph","renderErrors","errorsHTML","formatText","errorCode","errorCodeModulePrefix","errorCodeStr","ErrorCode","logout","PleaseWait","showTitle","setTxtSearchBehavior","items","filterProp","ridProp","ridDataAttr","updateClearer","updateResult","$input","$itemHolder","$clearer","dataAttr","filterIndex","$elem","css","$item","which","showTerms","mode","onBoxClicked","box","performSSO","oldMinGolf","showInactiveMembershipInfo","YouDoNotHaveAnActiveMembershipInAnyClub","NoActiveMembership","showVIGHCPDisabledInfo","YouGetYourHandicapWhenYouHaveCompletedGreenCard","showModal","minimodal","modal","showOverlay","defaultOnCloseURL","onClosePages","confirmTitle","confirmText","confirmOnClose","confirmBtnYesText","confirmBtnNoText","overlay","confirmCloseText","showConfirmOnClose","requireMatch","compareMsg","YouDoNotHavePermissionToCompleteTheBooking","YouDoNotHavePermissionToCompleteABookingThatRequiresPayment","YouDoNotHavePermissionToSignUpForCompetitions","YouDoNotHavePermissionToSignUpForCompetitionsWithFees","YouDoNotHavePermissionToPayFeesInMinGolf","YouDoNotHavePermissionToBookGolfLessons","YouDoNotHaveSufficientRightsToPerformThisAction","category","label","gtag","gender","g","removeTrailingSlash","str","orphans","register","parentName","adopt","orphan","initCallback","findChild","childName","child","onClick","eval","href","onCloseURL","instantSpinner","booking","teetimes","grid","activeCell","Slot","SlotId","searchCompetition","string","escape","_utf8_encode","decode","_utf8_decode","unescape","utftext","c","charCodeAt","String","fromCharCode","c1","c2","c3","IsMobileClass","userAgent","ua","navigator","apple_phone","apple_ipod","apple_tablet","android_phone","android_tablet","amazon_phone","amazon_tablet","windows_phone","windows_tablet","other_blackberry","other_blackberry_10","other_opera","other_chrome","other_firefox","seven_inch","RegExp","regex","tmp","apple","phone","ipod","tablet","device","amazon","android","windows","other","blackberry","blackberry10","opera","firefox","chrome","any","extendObject","deep","prototype","call","isObject","isArray","isMobile","isDesktopLayout","matchMedia","ping","countDown","secs","tick","timer","left","count","clearTimeout","start","reset","resetTimer","starts","endsWith","ends","cookie","decodeURIComponent","expires","exec","parse","getTime","toUTCString","path","domain","secure","parts","adsRenderConceptX","mobileTagId","desktopTagId","namespace","ns","namespaces","lastIndex","current","lilum_startTransaction","lilum_stopTransaction","go","ContactYourHomeClub","PleaseContactYourHomeClubTheyWillRegisterYourFirstHandicapRound","param","gotoEarlierRounds","roundTermTxt","selectRoundTxt","delayed","selectedTeeTime","hasUncalculatedRound","HasUncalculatedRound","unregisteredRounds","Rounds","showRegistrationNotPossible","DateTime","round","primary","dateTime","ClubID","Register","PleaseNoteAllRoundsMustBeEnteredInChronologicalOrder","courseId","OlderRounds","RegisterNewHCPRound","SeeEarlierRounds","RegisterHCP","asInfo","modalType","ThereIsARoundThatIsStillBeingCalculatedItMustBeCalculated","scorecard","addCol","dataProp","showSums","highlightFunc","highlightCells","titleDesktop","propsCol","columns","scorecardColumns","renderCell","hideEmptySum","holes","hole","Strokes","Index","Par","ExtraStrokes","visible","AdjustedGross","AdjustedGrossShorter","AdjustedGrossShort","Points","scorecardHTML","headerCells","renderColumn","col","renderBlock","sumIdentifier","highlightClass","IsPlayed","startHole","cells","renderSum","sumClass","forceShow","splitCells","shouldSplitCells","splitIndex","front","totalSum","forceShowTotal","totals","TotalShort","Total","scorecardRows","scorecardTotals","showTotalsRow","renderTotalsRow","playedHoles","allowAdjustedPointsText","showAddedHolesText","renderTotal","showPlayedHolesRow","resultTitle","Result","resultValue","expectedHoles","calculateAdjustedPoints","PlayedHoles","ResultXHoles","Enumerated","allowCalculateAdjustedPoints","titleOverride","scorecardTotalRow","minHoles","showAdjustedGross","points","pointsTitle","calculatePointsForNonPlayedHoles","AdjustedPointsShort","scorecardAddedHolesText","theResultToGenerateTheHandicapHasBeenAdded","missingHoles","holeCount","baseURL","winRef","features","screenX","screenY","receiptOnly","closed","screenLeft","screenTop","outerWidth","outerHeight","clientHeight","screen","createBackOverlay","monitor","removeBackOverlay","paymentID","closeWindow","page","chkPaymentAcceptTermsOnChange","address","postNumber","city","email","startPayment","responseText","btnCancelOnClick","setPaymentComplete","opener","$overlay","_iframe","profileImg","form","$file","$btnBrowse","updateImage","fileName","submit","uploadError","browse","click","delete","confirmed","AreYouSureYouWantToRemoveYourProfilePicture","$iframe","uploadSuccess","state","image","$rowExists","$imgExists","$img","q","queue","activeItems","addItem","processNext","insertItem","onBeforeProcess","onProcess","defaults","returnFocus","onClear","hideOnBlur","clearOnEscape","Clearer","_$input","_options","_$clearer","after","update","destroy","instance","console","warn","removeData","clearer","favourites","instances","set","itemHolder","properties","maxVisibleElements","$txtFilter","$btnShowMore","showMore","prepend","insertAfter","setFilterListener","filterElements","filterRIDProp","getInstance","$items","$hiddenItems","getToggled","hasClass","setShowMore","btnShowMore","nextFocus","blocks","delimiter","numericOnly","onValueChanged","$nextFocus","_cleave","Cleave","HeaderMomentShowHideObserver","abstractObserver","lastScrollTop","delta","defaultState","initOffset","cb","$headerAds","$headerBar","heightAds","heightBar","_initOffsetCB","_adsObserver","MutationObserver","mutationsList","observer","observe","attributes","childList","subtree","checkDirection","nowScrollTop","check","hasAbsolute","hasMovedUp","isHigher","Header","config","observers","isPlainObject","viewport","checkViewport","breakpointsMap","prevViewport","notify","reinit","header","md","sm","lg","xl","xs","detectObservers","resizeTimeOutId","windowW","innerWidth","$window","disabledElements","disableUI","restore","isCharacterKeyPress","evt","keycode","keyCode","_modal","dismissOnEsc","dismissOnOverlayClick","idPrefix","inline","hideClose","hideCloseText","hideHeader","hideButtonCancel","innerOnClose","innerOnOpen","wide","existingModal","showSpinner","openModalsCount","not","onModalShown","backdrop","keyboard","currentlyOpenModals","prevModal","_checkScrollbar","_setScrollbar","_adjustDialog","_enforceFocus","onModalHidden","addButton","closeModal","lock","setDisabled","getModalOpener","systemmodalOpener","systemmodal","minimodalOpener","canCloseModal","pleaseWaitTimeout","onReadyInterval","onReady","clearInterval","setInterval","statemodal","AreYouSure","btnYesText","OK","btnNoText","Cancel","btnYesId","btnNoId","btnNoOnClick","FIXED_CONTENT","STICKY_CONTENT","Navigation","_navigation","_header","_backdrop","_isShown","_isBodyOverflowing","_scrollbarWidth","navigation","_setTopPosition","_showBackdrop","_resetScrollbar","_removeBackdrop","itemClick","func","rect","right","$body","bodyActualPadding","bodyCalculatedPadding","fixedContent","querySelectorAll","stickyContent","actualPadding","paddingRight","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","margin","bodyPadding","overlayOpener","timeout","spinnerModal","footer","confirmModal","redirectURL","origin","prevPage","existingOverlay","referrer","ref","substring","disableInnerContent","setConfirmOnClose","setState","resetState","appendTo","httpReqDefaultsOveride","httpReqOptions","xhr","sanitize","template","mainContent","Close","Select","ddl","_$ddl","opts","events","plugin","selectpicker","liveSearch","$menu","downOnTab","selectOnTab","stopPropagation","$ddl","destroyClearer","initialCount","onShowMore","onShowLess","showLessType","itemHolderClass","parentClass","toggled","hiddenItems","hideText","ShowLess","HideTheList","additionalCount","$allItems","$revealItems","remainingCount","iconClassPlus","iconClassMinus","newClass","ShowMore","getHiddenItems","timePattern","delimiterLazyShow","onBlur","changeInputTime","patternFound","patterns","p","getParts","validators","notEmpty","valid","GolfIdValidator","hideSuccess","elemGroup","elemRowSelector","utils","closest","classSet","has-success","is-valid","camelCase","$1","toUpperCase","Validation","_$form","_plugins","_events","addPlugin","pluginName","removeEvent","grep","formValidation","locale","formValidationLang","localization","locales","styleAsInvalid","inputElement","customAttrName","evtHandler","setAttribute","currentTarget","styleAsInvalid_resetAll"],"mappings":"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","file":"site.min.js","sourcesContent":["(($, window, undefined) => {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n const _ = window.mg;\r\n\r\n const request = (type, url, data, suppressError, asAjax) => {\r\n const settings = {\r\n type: type\r\n };\r\n\r\n const props = {\r\n url : url,\r\n data : data\r\n };\r\n\r\n if (typeof url === 'object') {\r\n $.extend(true, props, url);\r\n }\r\n\r\n $.extend(true, settings, props);\r\n\r\n if (asAjax === true) {\r\n if (suppressError === false && !settings.error) {\r\n\r\n settings.error = (jqXHR, textStatus, errorThrown) => {\r\n if (jqXHR.status == 401) {\r\n location.reload();\r\n return;\r\n }\r\n\r\n if (props.url.indexOf('/Ping') > -1)\r\n return; // We don't want the Ping to show an error\r\n\r\n _.ui.errormodal({\r\n html : '
' + _.translations.SomethingWentWrongUnexpectedlyTryAgain + '.
',\r\n title : _.translations.UnknownError\r\n });\r\n };\r\n }\r\n\r\n return $.ajax(settings);\r\n } else {\r\n const onSuccess = (data, textStatus, jqXHR) => {\r\n // manipulate if need\r\n return $.Deferred().resolve(data, textStatus, jqXHR).promise();\r\n };\r\n\r\n const onError = (jqXHR, textStatus, errorThrown) => {\r\n if (suppressError === false) {\r\n if (jqXHR.status == 401) {\r\n location.reload();\r\n return;\r\n }\r\n\r\n if (props.url.indexOf('/Ping') > -1)\r\n return; // We don't want the Ping to show an error\r\n\r\n _.ui.errormodal({\r\n html : '
' + _.translations.SomethingWentWrongUnexpectedlyTryAgain + '.
',\r\n title : _.translations.UnknownError\r\n });\r\n }\r\n\r\n return $.Deferred().reject(jqXHR, textStatus, errorThrown).promise();\r\n };\r\n \r\n return $.ajax(settings).then(onSuccess, onError);\r\n }\r\n };\r\n\r\n\r\n /*\r\n Examples:\r\n POST:\r\n const responsePost= await fetchAsync('https://httpbin.org/post', {'first_name':'Thomas','last_name':'Kristensen'});\r\n GET:\r\n const responseGet= await fetchAsync('https://httpbin.org/get', {'first_name':'Palle','last_name':'Hansen æøåÆØÅ'},'GET');\r\n */\r\n\r\n async function fetchAsync(url, params, method, expectedResponseType) {\r\n method = !method ? 'POST' : method;\r\n var reqData = method == 'POST' ? new FormData() : new URLSearchParams();\r\n params && Object.entries(params).forEach(([k, v]) => reqData.append(k, v));\r\n url = method == 'POST' ? url : url += '?' + reqData.toString();\r\n \r\n //NOTICE: fetch() won't send cross-origin cookies unless you set the credentials init option (to include)\r\n const responsePromise = await fetch(url, {\r\n 'method': method,\r\n 'body': (method == 'POST' ? reqData : null)\r\n });\r\n \r\n if (!responsePromise.ok) {\r\n const response_error_txt = await responsePromise.text();\r\n throw new AjaxServerError(`Error processing ajax-request. URL| [${url}]`, response_error_txt);\r\n }\r\n \r\n if (!expectedResponseType || expectedResponseType == 'json') {\r\n return responsePromise.json();\r\n } else {\r\n return responsePromise.text();\r\n }\r\n }\r\n\r\n class AjaxServerError extends Error {\r\n constructor(message, serverReponseBody) {\r\n super(message);\r\n this.name = \"AjaxServerError\";\r\n this.serverReponseBody = serverReponseBody;\r\n }\r\n }\r\n\r\n\r\n class Ajax {\r\n get(url, data, suppressError = false, asAjax = false) {\r\n return request('GET', url, data, suppressError, asAjax);\r\n }\r\n\r\n post(url, data, suppressError = false, asAjax = false) {\r\n return request('POST', url, data, suppressError, asAjax);\r\n }\r\n\r\n httpRequest(httpMethod, url, data, suppressError = false, asAjax = false) {\r\n return request(httpMethod, url, data, suppressError, asAjax);\r\n }\r\n\r\n async getAsync(url, data) {\r\n return await fetchAsync(url, data, 'GET')\r\n }\r\n\r\n async postAsync(url, data) {\r\n return await fetchAsync(url, data, 'POST')\r\n\r\n }\r\n }\r\n \r\n _.ajax = new Ajax();\r\n})(jQuery, window);\r\n","(($, window, undefined) => {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n const _ = window.mg;\r\n\r\n const load = ($target, url, data) => {\r\n $target.empty().html(\r\n '
' +\r\n '
' +\r\n '
'\r\n );\r\n\r\n return _.ajax.get({\r\n url,\r\n data,\r\n dataType : 'html',\r\n cache : false,\r\n }).done((data) => {\r\n $target.empty().html(data);\r\n });\r\n };\r\n\r\n const getDetails = (itemTime, slotID, compID, listType, maxExpand, filterType, filterPeriodFrom, filterPeriodTo) => { // Includes all these parameters to match the cache key properly\r\n const url = '/Site/Calendar/?handler=Details';\r\n const data = {\r\n itemTime,\r\n slotID,\r\n compID,\r\n listType,\r\n maxExpand,\r\n filterType,\r\n filterPeriodFrom,\r\n filterPeriodTo\r\n };\r\n\r\n return _.ajax.get(url, data);\r\n };\r\n\r\n class Calendar {\r\n constructor() {\r\n this._modalPleaseWait = null;\r\n this._modalDetails = null;\r\n\r\n this._htmlDetailsView = null;\r\n this._htmlCancelView = null;\r\n }\r\n\r\n loadFutureRounds(max, expandable, maxExpand, filterType, filterPeriodFrom, filterPeriodTo, isFirstLoad, isStartPage) {\r\n const $target = $('.calendar-futurerounds-wrapper');\r\n const url = '/Site/Calendar/?handler=FutureRounds';\r\n const options = {\r\n max,\r\n expandable,\r\n maxExpand,\r\n filterType,\r\n filterPeriodFrom,\r\n filterPeriodTo,\r\n isFirstLoad,\r\n isStartPage\r\n };\r\n\r\n return load($target, url, options);\r\n }\r\n\r\n loadPreviousRounds(max, expandable, maxExpand, filterType, filterPeriodFrom, filterPeriodTo, isFirstLoad, isStartPage) {\r\n const $target = $('.calendar-previousrounds-wrapper');\r\n const url = '/Site/Calendar/?handler=PreviousRounds';\r\n const options = {\r\n max,\r\n expandable,\r\n maxExpand,\r\n filterType,\r\n filterPeriodFrom,\r\n filterPeriodTo,\r\n isFirstLoad,\r\n isStartPage\r\n };\r\n\r\n return load($target, url, options);\r\n }\r\n\r\n updateFutureRounds() {\r\n // Dummy for override\r\n }\r\n\r\n updatePreviousRounds() {\r\n // Dummy for override\r\n }\r\n\r\n showDetails(itemTime, slotID, compID, listType, maxExpand, filterType, filterPeriodFrom, filterPeriodTo, props) {\r\n props = props || {};\r\n this._modalPleaseWait = _.ui.showPleaseWaitModal();\r\n\r\n this._htmlDetailsView = null;\r\n this._htmlCancelView = null;\r\n\r\n var done = (data) => {\r\n this._modalPleaseWait.close();\r\n\r\n if (!data)\r\n return;\r\n\r\n var hasError = data.ErrorMessage;\r\n var isCompetition = data.CompetitionID !== undefined && data.CompetitionID !== null;\r\n\r\n var title = _.translations.BookedTeeTime;\r\n var headerHTML = [];\r\n\r\n if (isCompetition) {\r\n var entry = null;\r\n title = '' + data.CompetitionName + '';\r\n\r\n data.Players && $.each(data.Players, function (k, v) {\r\n if (v.IsSelf) {\r\n entry = v;\r\n return false; // Break the loop\r\n }\r\n });\r\n\r\n var formatHeaderValue = function (title, value) {\r\n return '' + title + ': ' + (value || '') + '';\r\n };\r\n\r\n var formatEntryValue = function (title, property, allowSearchInTeam) {\r\n var value = entry ? entry[property] : null;\r\n\r\n if (allowSearchInTeam && data.Teams && entry) {\r\n var team = null;\r\n\r\n $.each(data.Teams, (k, v) => { // Search for the team that has the currenty entry\r\n v.Entries && $.each(v.Entries, (kE, vE) => {\r\n $.each(data.Players, (kP, vP) => {\r\n if (vP.EntryID === vE) {\r\n team = v;\r\n return false; // Break the vP-loop\r\n }\r\n });\r\n\r\n if (team)\r\n return false; // Break the vE-loop\r\n });\r\n\r\n if (team)\r\n return false; // Break the v-loop\r\n });\r\n\r\n if (team && team[property]) {\r\n value = team[property];\r\n }\r\n }\r\n\r\n return formatHeaderValue(title, value);\r\n };\r\n\r\n headerHTML = [\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
' + data.FormattedDay + '
',\r\n '
' + data.ClubName + '
',\r\n '
' + (data.CourseName || '') + '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
' + formatHeaderValue(_.translations.StartTime, data.FormattedTime) + '
',\r\n '
' + formatEntryValue(_.translations.StartHole, 'StartHole') + '
',\r\n '
' + formatEntryValue(_.translations.PHCP, 'PHCP', true) + '
',\r\n '
' + formatEntryValue(_.translations.Tee, 'Tee') + '
',\r\n '
' + formatEntryValue(_.translations.Class, 'ClassName') + '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n (function () {\r\n var $expandable = $('.mg-expandable-wrapper .expandable').clone();\r\n var newExpandableID = 'expandable-' + mg.getUniqueNumber();\r\n var newExpandableCollapseID = newExpandableID + '-collapse';\r\n\r\n $expandable.attr('id', newExpandableID);\r\n var $icon = $expandable.find('> a > .icon').remove();\r\n $expandable.find('> a').attr('aria-controls', newExpandableCollapseID).attr('href', '#' + newExpandableCollapseID).append('' + mg.translations.SeeYourChoices + '' + $icon[0].outerHTML);\r\n $expandable.find('.collapse').attr('id', newExpandableCollapseID);\r\n\r\n var content = [];\r\n var renderQuestionsHeader = function (title, titleClassName) {\r\n return [\r\n '',\r\n '' + title + '',\r\n ''\r\n ].join('');\r\n };\r\n\r\n var renderRequest = function (title, text) {\r\n return [\r\n '
',\r\n '' + title + ':',\r\n text ? '' + text + '' : '',\r\n '
'\r\n ].join('');\r\n };\r\n\r\n var renderQuestions = function (questions) {\r\n var html = [];\r\n\r\n if (questions && questions.length) {\r\n $.each(questions, function (k, v) {\r\n var hasAnswerText = v.Answer !== '';\r\n var hasPrice = v.Price;\r\n var priceTemplate = hasAnswerText ? '(%price%)' : '%price%';\r\n\r\n var requestContent = [];\r\n hasAnswerText && requestContent.push(' ' + v.Answer + '');\r\n hasPrice && requestContent.push(' ' + priceTemplate.replace('%price%', _.cc.formatAmount(v.Price ? v.Price.Value : 0, true, true)) + '');\r\n\r\n html.push(renderRequest(v.Text, requestContent.join('')));\r\n });\r\n }\r\n\r\n return html.join('');\r\n };\r\n\r\n var hasTeam = data.Teams && data.Teams.length > 0;\r\n var requestsContent = [];\r\n var requestsContentTeam = [];\r\n\r\n var questionsContent = renderQuestions(data.Players[0].Questions);\r\n questionsContent && requestsContent.push(questionsContent);\r\n\r\n var req = data.Players[0].Requests;\r\n\r\n if (req) {\r\n var reqContent = [];\r\n\r\n var renderReq = function (text, value) {\r\n value && reqContent.push(renderRequest(text, ' ' + value));\r\n };\r\n\r\n renderReq(mg.translations.TeeTimeWish, req.TeeTimeWish);\r\n renderReq(mg.translations.GolfCart, req.GolfCart ? mg.translations.Yes : '');\r\n renderReq(mg.translations.Caddie, req.Caddie ? mg.translations.Yes : '');\r\n renderReq(mg.translations.Tee, req.TeeName);\r\n renderReq(mg.translations.MessageForTheClubOrCompetitionLeader, req.Note);\r\n\r\n var reqHTML = reqContent.join('');\r\n reqHTML && requestsContent.push(reqHTML);\r\n }\r\n\r\n if (requestsContent.length) {\r\n content.push([\r\n hasTeam ? renderQuestionsHeader(mg.translations.YourChoices) : '',\r\n '
',\r\n requestsContent.join(''),\r\n '
'\r\n ].join(''));\r\n }\r\n\r\n if (hasTeam) {\r\n var teamQuestionsContent = renderQuestions(data.Teams[0].Questions);\r\n teamQuestionsContent && requestsContentTeam.push(teamQuestionsContent);\r\n\r\n if (requestsContentTeam.length) {\r\n content.push([\r\n renderQuestionsHeader(mg.translations.TheTeamsChoices, 'team-choices-header'),\r\n '
',\r\n requestsContentTeam.join(''),\r\n '
'\r\n ].join(''));\r\n }\r\n }\r\n\r\n content = content.join('');\r\n $expandable.find('.collapse-content').html(content);\r\n\r\n return content ? [\r\n '
',\r\n $expandable[0].outerHTML,\r\n '
'\r\n ].join('') : '';\r\n })()\r\n ];\r\n }\r\n else {\r\n headerHTML = [\r\n '
',\r\n '
',\r\n '
' + data.FormattedDay + '
',\r\n '
' + data.ClubName + '
',\r\n '
',\r\n '
' + data.FormattedTime + '
',\r\n '
' + data.CourseName + '
',\r\n '
',\r\n '
'\r\n ];\r\n }\r\n\r\n if (props.onDeleteSuccess && $.isFunction(props.onDeleteSuccess))\r\n data.onDeleteSuccess = props.onDeleteSuccess;\r\n\r\n var renderAsHidden = props.renderDetailsAsHidden;\r\n\r\n this._htmlDetailsView = [\r\n '
',\r\n '
',\r\n headerHTML.join(''),\r\n '
',\r\n\r\n '
',\r\n (() => {\r\n const rows = [];\r\n\r\n var renderSeparator = () => {\r\n rows.push('
');\r\n };\r\n\r\n if (isCompetition) {\r\n var renderPrice = (amount, totalPaid, forceOneLine) => {\r\n if (amount) {\r\n var price = _.cc.formatAmount(amount.Value, true, true);\r\n return _.ui.helpers.renderPrice(price, amount.Value > 0 && totalPaid >= amount.Value, forceOneLine);\r\n }\r\n\r\n return '';\r\n\r\n };\r\n\r\n var renderPlayer = (player, team) => {\r\n var genderIconClass = mg.getGenderIconClass(player.Gender);\r\n\r\n var getFirstColumn = function (content, isFirst, iconClass) { // We want the first column of each row to align the content. This is achieved by including the gender icon in each row, and only showing it on the first row\r\n var genderIcon = '';\r\n\r\n return [\r\n '
',\r\n genderIcon,\r\n '' + content + '',\r\n '
'\r\n ].join('');\r\n };\r\n\r\n var phcp = player.PHCP && (!team || !team.PHCP) ? player.PHCP : ''; // We only show a player's PHCP if the player is not in any team, or if the player's team does not have a PHCP\r\n var tee = player.Tee;\r\n var price = renderPrice(player.Price, player.TotalPaid);\r\n \r\n rows.push([\r\n '
',\r\n '
',\r\n '
',\r\n '
' + player.Name + '
',\r\n '
' + player.HCP + '
',\r\n '
' + player.GolfID + '
',\r\n '
' + player.ClubName + '
',\r\n '
',\r\n '
',\r\n phcp || tee ? [\r\n '
',\r\n '
',\r\n phcp ? '
' + phcp + '
' : '',\r\n tee ? '
' + tee + '
' : '', // In mobile mode this is only shown as right-aligned if phcp is shown\r\n '
',\r\n '
'\r\n ].join('') : '',\r\n price ? [\r\n '
',\r\n '
',\r\n '
' + price + '
',\r\n '
',\r\n '
'\r\n ].join('') : '',\r\n '
'\r\n ].join(''));\r\n };\r\n\r\n if (data.Teams && data.Teams.length > 0) {\r\n $.each(data.Teams, (k, v) => {\r\n var price = renderPrice(v.Price, v.TotalPaid, true); // We set forceOneLine to true, as we want to show this content on one line for this particular case\r\n\r\n var teamValues = ['' + (v.Name || '-') + ''];\r\n v.PHCP && teamValues.push('' + _.translations.PHCP + ': ' + v.PHCP + '');\r\n price && teamValues.push('' + price + '');\r\n\r\n rows.push('
' + teamValues.join('|') + '
');\r\n\r\n v.Entries && $.each(v.Entries, (kE, vE) => {\r\n var player = null;\r\n\r\n $.each(data.Players, function (kP, vP) {\r\n if (vP.EntryID === vE) {\r\n player = vP;\r\n return false; // Break the loop\r\n }\r\n });\r\n\r\n if (player) {\r\n kE === 0 && renderSeparator();\r\n renderPlayer(player, v);\r\n renderSeparator();\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n renderSeparator();\r\n\r\n data.Players && $.each(data.Players, (k, v) => {\r\n renderPlayer(v);\r\n\r\n renderSeparator();\r\n });\r\n }\r\n }\r\n else {\r\n data.Players && $.each(data.Players, (k, v) => {\r\n const country = v.CountryCode ? _.countries.byCountryIsoCode(v.CountryCode) : null;\r\n k !== 0 && renderSeparator();\r\n\r\n var priceContent = '';\r\n\r\n if (!hasError && v.Price) // If there was an error we won't have a price to show\r\n priceContent = _.ui.helpers.renderPrice(_.cc.formatAmount(v.Price.Value, true, true), v.Price.Value > 0 && v.TotalPaid >= v.Price.Value);\r\n \r\n rows.push([\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '' + v.Name + '',\r\n '
',\r\n '
', // Hiding on lg, as we have a different column we want shown there (we can't properly restore the gutters we have removed)\r\n '' + (!v.ShowAsGuest ? v.HCP : '') + '',\r\n '
',\r\n '
',\r\n '
',\r\n '
', // Hiding on sm, as we have a different column we want shown there\r\n priceContent,\r\n '
',\r\n '
',\r\n '
',\r\n '
' + (!v.ShowAsGuest ? v.HCP : '') + '
', // Only shown on lg and above\r\n '
' + (!v.ShowAsGuest ? ((((v.GolfID??'' !== '') ? v.GolfID : (v.ForeignId??'' !== '') ? v.ForeignId:'-' ))) : '') + '
',\r\n '
' + (!v.ShowAsGuest ? (country ? country.ShortName : '-') : '') + '
',\r\n '
',\r\n '
' + (!v.ShowAsGuest ? (v.ClubName || '-') : '') + '
',\r\n '
' + (!v.ShowAsGuest ? (v.Gender === 0 ? _.translations.Woman : _.translations.Man) : '') + '
',\r\n '
',\r\n '
',\r\n '
',\r\n priceContent,\r\n '
',\r\n '
'\r\n ].join(''));\r\n });\r\n }\r\n\r\n if (hasError)\r\n rows.push('
' + data.ErrorMessage + '
');\r\n\r\n return rows.join('');\r\n })(),\r\n '
',\r\n\r\n '
',\r\n '
',\r\n (function() {\r\n var renderButton = (text, className, onclick, disabled) => {\r\n return '';\r\n };\r\n\r\n var btns = [];\r\n var btnPayVisible = data.AllowPayment;\r\n var btnEditVisible = true;\r\n var btnDeleteVisible = true;\r\n\r\n var btnPayText = _.translations.Pay;\r\n var btnEditText = _.translations.Edit;\r\n var btnDeleteText = _.translations.CancelTeeTime;\r\n\r\n var btnPayOnClick = 'mg.calendar.openBooking(\\'' + data.SlotID + '\\', true)';\r\n var btnEditOnClick = 'mg.calendar.openBooking(\\'' + data.SlotID + '\\', false)';\r\n var btnDeleteOnClick = 'mg.calendar.deleteBooking()';\r\n\r\n var btnPayDisabled = true;\r\n var btnEditDisabled = true;\r\n var btnDeleteDisabled = true;\r\n\r\n if (data.PayAction) {\r\n btnPayVisible = data.PayAction.Visible;\r\n btnPayDisabled = !data.PayAction.Enabled;\r\n }\r\n\r\n if (data.EditAction) {\r\n btnEditVisible = data.EditAction.Visible;\r\n btnEditDisabled = !data.EditAction.Enabled;\r\n }\r\n\r\n if (data.DeleteAction) {\r\n btnDeleteVisible = data.DeleteAction.Visible;\r\n btnDeleteDisabled = !data.DeleteAction.Enabled;\r\n }\r\n\r\n if (isCompetition) {\r\n btnDeleteText = mg.translations.DeleteCompetitionSignup;\r\n\r\n btnPayOnClick = 'mg.calendar.openCompetitionSignup(\\'' + data.CompetitionID + '\\', true)';\r\n btnEditOnClick = 'mg.calendar.openCompetitionSignup(\\'' + data.CompetitionID + '\\', false)';\r\n btnDeleteOnClick = 'mg.calendar.deleteCompetitionSignup()';\r\n }\r\n\r\n if (data.IsTeenTour) {\r\n btnPayText = _.translations.Confirm;\r\n btnDeleteText = _.translations.TeenTourDelete;\r\n }\r\n\r\n return [\r\n btnPayVisible ? renderButton(btnPayText, 'pay-calendar-item ' + (!btnPayDisabled ? 'btn-primary' : 'btn-blacksqueeze'), btnPayOnClick, btnPayDisabled) : '',\r\n btnEditVisible ? renderButton(btnEditText, 'edit-calendar-item ' + (!btnEditDisabled ? 'btn-primary' : 'btn-blacksqueeze'), btnEditOnClick, btnEditDisabled) : '',\r\n btnDeleteVisible ? renderButton(btnDeleteText, 'btn-blacksqueeze delete-calendar-item', btnDeleteOnClick, btnDeleteDisabled) : ''\r\n ].join('');\r\n })(),\r\n '
',\r\n '',\r\n '
',\r\n '
'\r\n ].join('');\r\n\r\n setTimeout(() => {\r\n this._modalDetails = _.ui.actionmodal({\r\n title : title,\r\n titleInHeader : true,\r\n html : this._htmlDetailsView,\r\n hideStateIcon : true,\r\n hideFooter : true,\r\n modalBodyFull : true,\r\n\r\n _data : data,\r\n\r\n onOpen : function() {\r\n var that = this;\r\n\r\n var handleAction = function (action, btnClass, onErrorModalClose) {\r\n if (action && action.DisabledReasons && action.DisabledReasons.length > 0) {\r\n var $btn = $('.' + btnClass, '#' + that.id);\r\n var errors = [];\r\n\r\n $.each(action.DisabledReasons, function (k, v) {\r\n var err = mg.resolveError(v);\r\n\r\n if (err && err[err.length - 1] === '.')\r\n err = err.substr(0, err.length - 1); // Remove trailing dots from error texts as we are adding one here as well.\r\n\r\n errors.push(err);\r\n });\r\n\r\n $btn.off('click').on('click', function () {\r\n mg.ui.errormodal({ title: mg.translations.NotAllowed, html: '
' + errors.join('.
') + '.
', onClose: onErrorModalClose });\r\n }).removeAttr('disabled').addClass('allow-click'); // Removing the disabled attribute, and adding the allow-click class, in order for the new onclick to work\r\n }\r\n };\r\n\r\n handleAction(data.DeleteAction, 'delete-calendar-item', props.onDeleteErrorModalClose);\r\n handleAction(data.EditAction, 'edit-calendar-item');\r\n handleAction(data.PayAction, 'pay-calendar-item');\r\n\r\n $.isFunction(props.onOpen) && props.onOpen();\r\n }\r\n });\r\n\r\n var $expandable = $('.expandable', '#' + this._modalDetails.id);\r\n\r\n var setTitle = function (title) {\r\n $expandable.find('> a > span:first-child').html(title);\r\n };\r\n\r\n $expandable.on('show.bs.collapse', function () {\r\n setTitle(mg.translations.HideChoices);\r\n }).on('hide.bs.collapse', function () {\r\n setTitle(mg.translations.SeeYourChoices);\r\n });\r\n }, 800);\r\n\r\n };\r\n\r\n if (props.getDetailsFunc && $.isFunction(props.getDetailsFunc))\r\n props.getDetailsFunc().done(done);\r\n else\r\n getDetails(itemTime, slotID, compID, listType, maxExpand, filterType, filterPeriodFrom, filterPeriodTo).done(done);\r\n }\r\n\r\n showDeleteCompetitionSignup(compID) {\r\n this.showDetails(null, null, compID, null, null, null, null, null, {\r\n renderDetailsAsHidden: true, // We want the initital Details view to be rendered as hidden, as the user would otherwise see a flicker when we switch to the Delete view. We could have used an onBeforeShow on the modal isntead, but that would be fired before the modal initialization returns, which didn't work too well with the flow we needed here.\r\n getDetailsFunc: () => {\r\n const url = '/Site/Calendar/?handler=CompetitionDetails';\r\n\r\n const data = {\r\n compID\r\n };\r\n\r\n return _.ajax.get(url, data); // Returning the ajax.get should allow us to use a .done on the return type.\r\n }, onOpen: () => {\r\n $('.delete-calendar-item', '#' + this._modalDetails.id).trigger('click');\r\n\r\n if ($('.details-cancel', '#' + this._modalDetails.id).attr('data-step') == 1) {\r\n $('#btn-delcalendaritem-back').hide(); // Hide the button that goes back to the \"Who do you want to remove\" step.\r\n }\r\n else {\r\n $('#btn-delcalendaritem-cancel').hide(); // Hide the button that goes back to the details view.\r\n }\r\n },\r\n onDeleteErrorModalClose: () => {\r\n this._modalDetails.close();\r\n },\r\n onDeleteSuccess: () => {\r\n window.location && $.isFunction(window.location.reload) && window.location.reload();\r\n }\r\n });\r\n }\r\n\r\n preparePopovers(target, src) {\r\n let $wrapper;\r\n\r\n if (target === 'future') {\r\n $wrapper = $('.calendar-futurerounds-wrapper');\r\n } else if (target === 'previous') {\r\n $wrapper = $('.calendar-previousrounds-wrapper');\r\n }\r\n\r\n const $container = $wrapper;\r\n\r\n $('.avatars-wrapper', $wrapper).each((idx, elem) => {\r\n const $this = $(elem);\r\n const time = $this.parents('.calendar-round-item').attr('data-time');\r\n let item;\r\n\r\n $.each(src, (k, v) => {\r\n if (v.Time === time) {\r\n item = v;\r\n return false;\r\n }\r\n });\r\n\r\n item && _.ui.popover.create($this, {\r\n content: [\r\n '
',\r\n (() => {\r\n let res = '';\r\n\r\n $.each(item.Players, (k, v) => {\r\n res += [\r\n '
',\r\n '',\r\n '' + v.Name + (v.HCP ? ' ' + v.HCP : '') + '',\r\n '
'\r\n ].join('');\r\n });\r\n\r\n return res;\r\n })(),\r\n '
'\r\n ].join(''),\r\n\r\n container : $container,\r\n boundary : $container[0],\r\n placement : 'top' // We try to place this on top if possible\r\n });\r\n });\r\n }\r\n\r\n openBooking(slotId, showPaymentDirectly) {\r\n var that = this;\r\n\r\n _.ajax.post('/Site/Calendar/?handler=RefreshDetails', { slotID: slotId }).done(function (data) {\r\n if (data && !data.ErrorMessage) {\r\n _.actions.findTeeTime(slotId, showPaymentDirectly, () => {\r\n that._modalDetails.close();\r\n });\r\n }\r\n else {\r\n mg.ui.errormodal({ title: mg.translations.Error, html: data.ErrorMessage.replace('\\r\\n', '
').replace('\\n', '
') });\r\n }\r\n });\r\n }\r\n\r\n openCompetitionSignup(competitionID, showPaymentDirectly) {\r\n var method = 1;\r\n\r\n if (this._modalDetails._data.Teams && this._modalDetails._data.Teams.length) {\r\n method = 2; // TODO - We have to determine the method differently, the setup may not allow either of these values\r\n }\r\n\r\n mg.redirect('/Competition/Entry/' + competitionID + '/' + method + (showPaymentDirectly ? '/payment' : ''));\r\n }\r\n\r\n redirectToOMG() {\r\n window.mg.openTab('{oMG}/MyPage/Calendar/Calendar.aspx');\r\n }\r\n\r\n saveToCalendar(time, clubName, courseName) {\r\n clubName = encodeURIComponent(clubName || '').replace(/'/g, '\\\\\\'');\r\n courseName = encodeURIComponent(courseName || '').replace(/'/g, '\\\\\\'');\r\n\r\n var url_google = '/handlers/booking/SaveToCalendar/' + time + '/' + clubName + '/' + courseName + '/google';\r\n var url_iCal = '/handlers/booking/SaveToCalendar/' + time + '/' + clubName + '/' + courseName;\r\n\r\n var html = [\r\n '
',\r\n '
',\r\n '',\r\n '
',\r\n '
',\r\n '',\r\n '
',\r\n '
'\r\n ].join('');\r\n\r\n _.calendar._saveToCalendarModal = _.ui.confirmmodal({ html: html, title: mg.translations.SaveToCalendar, hideAllButtons: true });\r\n }\r\n\r\n deleteBooking() {\r\n var modalTitle = _.translations.CancelTeeTime;\r\n this.deleteCalendarItemShared(modalTitle);\r\n }\r\n\r\n deleteCompetitionSignup() {\r\n var modalTitle = _.translations.DeleteCompetitionSignup;\r\n this.deleteCalendarItemShared(modalTitle);\r\n }\r\n\r\n deleteCalendarItemShared(modalTitle) {\r\n const $modal = $('#' + this._modalDetails.id);\r\n const $modalTitle = $('.modal-title', $modal);\r\n const $modalBody = $('.modal-body', $modal);\r\n\r\n var data = this._modalDetails._data;\r\n var isCompetition = data.CompetitionID !== undefined && data.CompetitionID !== null;\r\n var that = this;\r\n\r\n this.deleteCalendarItem({\r\n $wrapper: $modalBody,\r\n data: data,\r\n allowDeleteAll: data.AllowDeleteAll,\r\n isCompetition: isCompetition,\r\n onShow: function () {\r\n $('> .details', $modalBody).hide();\r\n $modalTitle.html(modalTitle);\r\n },\r\n onCancel: function () {\r\n $('> .details', $modalBody).show();\r\n $modalTitle.html(that._modalDetails.title);\r\n },\r\n onSuccess: function () {\r\n var onDeleteSuccess = that._modalDetails._data ? that._modalDetails._data.onDeleteSuccess : null;\r\n that._modalDetails.close();\r\n _.calendar && $.isFunction(_.calendar.updateFutureRounds) && _.calendar.updateFutureRounds();\r\n\r\n onDeleteSuccess && $.isFunction(onDeleteSuccess) && onDeleteSuccess();\r\n }\r\n });\r\n }\r\n\r\n deleteCalendarItem(options) {\r\n var props = $.extend(true, {\r\n $wrapper: null,\r\n allowDeleteAll: false,\r\n preSelectView: undefined, // Can be set to 0 or 1 to force either of these views\r\n preSelectViewViewShowHeader: undefined,\r\n isDeleteSelf: false,\r\n render: function () {\r\n var cancelTitle = mg.translations.WhoDoYouWantToRemoveBooking;\r\n var rdoAllText = mg.translations.CancelTheEntireTeeTime;\r\n var rdoOnlyMeText = mg.translations.OnlyRemoveMeFromTheBall;\r\n var btnDeleteSaveText = mg.translations.CancelTeeTime;\r\n\r\n if (props.isCompetition) {\r\n cancelTitle = mg.translations.WhoDoYouWantToRemoveCompetition;\r\n rdoAllText = mg.translations.TheEntireTeam;\r\n rdoOnlyMeText = mg.translations.OnlyMyself;\r\n btnDeleteSaveText = mg.translations.DeleteCompetitionSignup;\r\n }\r\n\r\n var data = props.data;\r\n var isSoloBooking = false;\r\n\r\n if (props.isCompetition) {\r\n var teams = data ? data.Teams : null;\r\n isSoloBooking = !teams || teams.length === 0; // TODO - Can the entry be in a TeeTime with teams without being in a team themself?\r\n }\r\n else {\r\n isSoloBooking = data && data.Players && data.Players.length === 1 && data.Players[0].IsSelf;\r\n }\r\n\r\n if (isSoloBooking) {\r\n props.allowDeleteAll = true; // Regardless of what was set before, if you are alone in your booking you must be allowed to delete the entire thing. Otherwise you cannot delete a booking where you are the only one left if you were not the booker.\r\n }\r\n\r\n props.$wrapper.append([\r\n '
',\r\n '
',\r\n '

' + cancelTitle + '

',\r\n\r\n '
',\r\n (function () {\r\n return props.allowDeleteAll ? [\r\n '
',\r\n '',\r\n '',\r\n '
'\r\n ].join('') : '';\r\n })(),\r\n '
',\r\n '',\r\n '',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n '
',\r\n\r\n '
',\r\n\r\n '
',\r\n '',\r\n '',\r\n '
',\r\n '
',\r\n '',\r\n '',\r\n '
',\r\n '
',\r\n '
',\r\n '
'\r\n ].join(''));\r\n\r\n var that = this;\r\n\r\n $('#btn-delcalendaritem-next').off('change').on('click', function () {\r\n that.next();\r\n });\r\n\r\n $('#btn-delcalendaritem-cancel').off('change').on('click', function () {\r\n that.cancel();\r\n });\r\n\r\n $('#btn-delcalendaritem-save').off('change').on('click', function () {\r\n that.save();\r\n });\r\n\r\n \r\n\r\n var preSelectView = undefined;\r\n\r\n if (isSoloBooking) {\r\n preSelectView = 0; // This is a solo-booking, so there's no need to ask the user to select who they want to remove. Default to delete all\r\n }\r\n else if (!props.allowDeleteAll) {\r\n preSelectView = 1; // Force Delete Only Me\r\n\r\n if (props.preSelectViewShowHeader === undefined) {\r\n props.preSelectViewShowHeader = true; // Set this to true if it was not already set\r\n }\r\n }\r\n\r\n if (preSelectView === undefined && props.preSelectView !== undefined)\r\n preSelectView = props.preSelectView; // Only if preSelectView has not been resolved to anything so far, we allow using the specified value. This allows the resolved value to override any parameter\r\n //MGNY-864 Back button will bind to cancel, if we're going to call next() automatically below and skip the first step of the gui.\r\n var btnBackFuncPtr = preSelectView !== undefined ? that.cancel : that.back;\r\n $('#btn-delcalendaritem-back').off('change').on('click', function () {\r\n btnBackFuncPtr();\r\n });\r\n\r\n if (preSelectView !== undefined) {\r\n $('#rdo-delcalendaritem-' + preSelectView).prop('checked', true);\r\n that.next(!props.preSelectViewShowHeader);\r\n }\r\n\r\n $.isFunction(props.onShow) && props.onShow();\r\n },\r\n next: function (hideHeaderText) {\r\n const $detailsCancel = $('.details-cancel', props.$wrapper);\r\n const $body0 = $('.details-cancel-body[data-step=\"0\"]', $detailsCancel);\r\n const $body1 = $('.details-cancel-body[data-step=\"1\"]', $detailsCancel);\r\n const $rdo = $('input[name=\"rdo-delcalendaritem\"]:checked', $body0);\r\n\r\n const html = [];\r\n\r\n if (!$rdo.length)\r\n return;\r\n\r\n var data = props.data;\r\n var isCompetition = props.isCompetition;\r\n\r\n var headerText = '';\r\n var youAreNowRemovingText = isCompetition ? mg.translations.YouAreNowRemovingCompetition : mg.translations.YouAreNowRemovingBooking;\r\n var calendarItemHasAPaidFeeText = isCompetition ? mg.translations.TheSignupHasAPaidFee : mg.translations.TheBookingHasAPaidFee;\r\n var playerHasAPaidFeeText = mg.translations.ThePlayerHasAPaidFee;\r\n var paidWarning = '';\r\n var players = [];\r\n\r\n switch ($rdo.val()) {\r\n case '0':\r\n headerText = isCompetition ? mg.translations.TheEntireTeam : mg.translations.CancelTheEntireTeeTime;\r\n var showTeamName = isCompetition && data.Players.length < 2 && data.Teams && data.Teams.length > 0 ? true : false;\r\n\r\n if (showTeamName) // TODO - If we later reintroduce team members in the Details modal, we might want to revisit this, and perhaps show team members when possible, and fall back to team name or \"The entire team\".\r\n players.push('' + (data.Teams[0].Name || mg.translations.TheEntireTeam) + '');\r\n\r\n $.each(data.Players, function (k, v) {\r\n !showTeamName && players.push('' + v.Name + '');\r\n\r\n if (v.TotalPaid && v.TotalPaid > 0 && !paidWarning) {\r\n paidWarning = calendarItemHasAPaidFeeText;\r\n }\r\n });\r\n\r\n break;\r\n\r\n case '1':\r\n headerText = isCompetition ? mg.translations.OnlyMyself : mg.translations.OnlyRemoveMeFromTheBall;\r\n var player = data.Players.find((o) => _.user && o.GolfID === _.user.GolfId);\r\n\r\n if (player) {\r\n players.push('' + player.Name + '');\r\n\r\n if (player.TotalPaid && player.TotalPaid > 0) {\r\n paidWarning = playerHasAPaidFeeText;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (data.AllowRefundOnDelete) // We have three scenarios. 1: Nothing has been paid, we show nothing. 2: Something was paid, auto refund enabled, we inform the user. 3: Something was paid, auto refund is not enabled/not possible, we inform the user.\r\n paidWarning = mg.translations.AnyRefundOfPaidCompetitionFeesHappensAutomatically + '.';\r\n else if (paidWarning)\r\n paidWarning += '. ' + mg.translations.DependingOnTheClubsSettingsRefundMayHappenAutomatically + '.';\r\n\r\n html.push(\r\n hideHeaderText ? '' : '

' + headerText + '

',\r\n '

',\r\n youAreNowRemovingText + ':
',\r\n '' + players.join('
') + '
',\r\n '

'\r\n );\r\n\r\n $detailsCancel.attr('data-step', '1');\r\n $body1.empty().html(html.join(''));\r\n $('.paid-warning', $detailsCancel).find('.paid-warning-text').html(paidWarning).end().toggleClass('d-flex', paidWarning !== '');\r\n },\r\n back: function () {\r\n const $detailsCancel = $('.details-cancel', props.$wrapper);\r\n\r\n $detailsCancel.attr('data-step', '0');\r\n },\r\n save: function () {\r\n const $detailsCancel = $('.details-cancel', props.$wrapper);\r\n const $body0 = $('.details-cancel-body[data-step=\"0\"]', $detailsCancel);\r\n const $rdo = $('input[name=\"rdo-delcalendaritem\"]:checked', $body0);\r\n const $btns = $('.details-cancel-footer .btn', $detailsCancel);\r\n const $spinner = $('.details-cancel-footer .spinner', $detailsCancel);\r\n\r\n if (!$rdo.length)\r\n return;\r\n\r\n $btns.prop('disabled', true);\r\n $spinner.removeClass('invisible');\r\n\r\n var showError = function (errorMessage) {\r\n mg.ui.errormodal({ html: errorMessage, title: mg.translations.Error });\r\n };\r\n\r\n var data = props.data;\r\n var isCompetition = props.isCompetition;\r\n var bookingURLBase = '/handlers/Booking/';\r\n var url = null;\r\n var lilumTransactionName = null;\r\n var o = {};\r\n\r\n if (isCompetition) {\r\n url = '/handlers/Competition/DeleteCompetitionSignup';\r\n o.competitionID = data.CompetitionID;\r\n o.deleteEntireTeam = $rdo.val() === '0';\r\n o.allowRefundOnlinePayments = data.AllowRefundOnDelete;\r\n }\r\n else {\r\n switch ($rdo.val()) {\r\n case '0':\r\n url = bookingURLBase + 'DeleteBooking';\r\n lilumTransactionName = 'DeleteBooking';\r\n o.slotId = data.SlotID;\r\n\r\n break;\r\n\r\n case '1':\r\n const players = data.Players.filter((o) => _.user && o.GolfID === _.user.GolfId && o.ParticipantID);\r\n\r\n if (players) {\r\n url = bookingURLBase + 'DeletePlayerSelf';\r\n lilumTransactionName = 'DeletePlayerSelf';\r\n o.slotId = data.SlotID;\r\n o.participantId = players[0].ParticipantID;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n lilumTransactionName && mg.lilumStartTransaction(lilumTransactionName);\r\n\r\n _.ajax.post(url, o).done((data) => {\r\n if (data.Deleted) {\r\n if (data.ShowRefundWarning) {\r\n mg.ui.infomodal({ html: mg.translations.YourSignupWasDeletedButWeWereUnableToRefund, title: mg.translations.PleaseNote, hideButtonOK: false }); // TODO - Text and button?\r\n }\r\n\r\n $.isFunction(props.onSuccess) && props.onSuccess();\r\n return;\r\n }\r\n\r\n $btns.prop('disabled', false);\r\n $spinner.addClass('invisible');\r\n\r\n showError(data.ErrorMessage);\r\n }).always(() => {\r\n lilumTransactionName && mg.lilumStopTransaction(lilumTransactionName);\r\n });\r\n },\r\n cancel: function () {\r\n $('> .details-cancel', props.$wrapper).remove();\r\n\r\n $.isFunction(props.onCancel) && props.onCancel();\r\n }\r\n }, options);\r\n\r\n props.render();\r\n\r\n return props;\r\n }\r\n\r\n registerHCP(slot) {\r\n _.hcp.registerRound.open(slot, _.translations.HandicapRounds);\r\n }\r\n }\r\n\r\n _.calendar = new Calendar();\r\n})(jQuery, window);\r\n","(($, window, undefined) => {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n const _ = window.mg;\r\n\r\n const abstractView = (target, compEntry) => {\r\n target.compEntry = compEntry;\r\n };\r\n\r\n class _ViewPlayers {\r\n constructor(compEntry) {\r\n abstractView(this, compEntry);\r\n\r\n this.$wrapper = $('#comp-entry-view-players', this.compEntry.$target);\r\n }\r\n\r\n render() {\r\n const requestData = this.compEntry.data.requestData;\r\n\r\n $('.entry-list', this.$wrapper).empty();\r\n $('.team-details > .choices', this.$wrapper).remove();\r\n\r\n if (requestData) {\r\n if (this.compEntry.asTeam) {\r\n const team = requestData.Teams ? requestData.Teams[0] : null;\r\n\r\n if (team) {\r\n if (team.TeamEntries && team.TeamEntries.length) {\r\n team.TeamEntries.forEach((v) => {\r\n let entry = v.EntryID && requestData.Entries && requestData.Entries.find((vE) => vE.ID === v.EntryID);\r\n\r\n if (entry === null && team.ID === null && requestData.Entries && requestData.Entries.length === 1)\r\n entry = requestData.Entries[0]; // For the initial signup we may not be able to map TeamEntries to Entries, as we may not have an ID. Fallback to the first entry.\r\n\r\n entry && this._renderPlayer(entry);\r\n });\r\n } else {\r\n requestData.Entries && requestData.Entries.forEach((v) => {\r\n this._renderPlayer(v);\r\n });\r\n }\r\n\r\n this._renderTeam(team, requestData.Entries);\r\n }\r\n } else {\r\n requestData.Entries && requestData.Entries.forEach((v) => {\r\n this._renderPlayer(v);\r\n });\r\n }\r\n }\r\n\r\n // starting validation register\r\n const fvFields = this.compEntry.validation.fv.getFields();\r\n\r\n Object.keys(fvFields)\r\n .filter((v) => v.indexOf('{PARTICIPANT}') !== -1)\r\n .forEach((v) => {\r\n this.compEntry.validation.fv.removeField(v);\r\n });\r\n\r\n const playersFvFields = $('[name]', this.$wrapper)\r\n .filter((i, e) => Object.keys(e.dataset).some((v) => v.startsWith('fv')))\r\n .get();\r\n\r\n playersFvFields\r\n .forEach((v) => {\r\n this.compEntry.validation.fv.addField(\r\n v.name,\r\n this.compEntry.validation.fv.plugins.declarative.parseElement(v)\r\n );\r\n });\r\n }\r\n\r\n addPlayer(golfId, ...fields) {\r\n const funcAddPlayer = (golfId) => {\r\n golfId = golfId.trim();\r\n\r\n if (!golfId)\r\n return;\r\n\r\n const entries = this.compEntry.data.requestData.Entries;\r\n\r\n if (entries.some((v) => v.MemberID == golfId)) {\r\n _.ui.errormodal({\r\n html : '
' + _.translations.ThisPlayerAlreadyExists + '
',\r\n title : _.translations.Error\r\n });\r\n\r\n return;\r\n }\r\n\r\n const o = {\r\n competitionID : this.compEntry.data.requestData.ID,\r\n golfIDs : entries.map((v) => v.MemberID).concat([golfId]),\r\n asTeam : this.compEntry.asTeam\r\n };\r\n\r\n const pleaseWait = _.ui.showPleaseWaitModal();\r\n\r\n _.ajax.post('?handler=AddPlayer', o, true)\r\n .fail((jqXHR, textStatus, errorThrown) => {\r\n pleaseWait.close();\r\n\r\n _.ui.errormodal({\r\n html : '
' + errorThrown + '
',\r\n title : _.translations.Error\r\n });\r\n })\r\n .done((data) => {\r\n pleaseWait.close();\r\n\r\n data = this._checkRequestResponse(data);\r\n\r\n if (!data)\r\n return;\r\n\r\n this.compEntry.data.requestData = data;\r\n\r\n data.Entries\r\n .forEach((v) => {\r\n this._renderPlayer(v);\r\n });\r\n\r\n // Add player: Pre-select a class if the team only fits one class\r\n // Remove player: Remove the class selection if the team no longer fits the selected class\r\n\r\n var $ddlClass = $('#ddlClass');\r\n if ($ddlClass.length) { // Attempt to pre-select a class (also if the user has already selected a class. The class is only changed if they only fit in 1 class).\r\n var availableClasses = [];\r\n\r\n this.compEntry.data.requestData.Teams.forEach((v) => {\r\n var classes = this._getParticipantClasses(v, true); // This time we don't specify ignoreStatus, as we only want the classes the team is not invalid in\r\n\r\n classes && classes.forEach((vC) => {\r\n availableClasses.push(vC);\r\n });\r\n });\r\n\r\n if (availableClasses && availableClasses.length === 1) { // The team only fits in one class, auto-select this class\r\n $ddlClass.val(availableClasses[0].ID);\r\n }\r\n }\r\n\r\n // TODO - We might want to resolve team name here as well\r\n var team = this.compEntry.data.requestData.Teams ? this.compEntry.data.requestData.Teams[0] : null;\r\n this._renderTeamName(team);\r\n\r\n $ddlClass.trigger('change'); // Trigger change to recalculate any errors shown here\r\n $('#ddl-addplayer-favs, #txt-addplayer-golfid, #txt-addplayer-firstname, #txt-addplayer-lastname', this.$wrapper).val('');\r\n $(`.add-player-search-result-wrapper div[data-golfid=\"${golfId}\"]`, this.$wrapper).remove();\r\n\r\n _.ui.select.get($('#ddl-addplayer-favs', this.$wrapper)).sp.refresh();\r\n });\r\n };\r\n\r\n if (fields.length) {\r\n this.compEntry.validateFields(fields)\r\n .then((status) => {\r\n if (status === FormValidation.Status.Valid)\r\n funcAddPlayer(golfId);\r\n });\r\n } else {\r\n funcAddPlayer(golfId);\r\n }\r\n }\r\n\r\n removePlayer(golfId) {\r\n const newGolfIDs = this.compEntry.data.requestData.Entries.filter((v) => {\r\n return v.MemberID !== golfId || v.IsSelf;\r\n }).map((v) => v.MemberID);\r\n\r\n const o = {\r\n competitionID : this.compEntry.data.requestData.ID,\r\n golfIDs : newGolfIDs,\r\n asTeam : this.compEntry.asTeam\r\n };\r\n\r\n const pleaseWait = _.ui.showPleaseWaitModal();\r\n\r\n _.ajax.post('?handler=AddPlayer', o, true)\r\n .fail((jqXHR, textStatus, errorThrown) => {\r\n pleaseWait.close();\r\n\r\n _.ui.errormodal({\r\n html : '
' + errorThrown + '
',\r\n title : _.translations.Error\r\n });\r\n })\r\n .done((data) => {\r\n pleaseWait.close();\r\n\r\n data = this._checkRequestResponse(data);\r\n\r\n if (!data)\r\n return;\r\n\r\n this.compEntry.data.requestData = data;\r\n\r\n data.Entries\r\n .forEach((v) => {\r\n this._renderPlayer(v);\r\n });\r\n\r\n var $ddlClass = $('#ddlClass');\r\n var selectedClass = parseInt($('#ddlClass').val());\r\n if ($ddlClass.length && selectedClass) { // We want to clear the class selection if the user no longer fits in the selected class\r\n var availableClasses = [];\r\n var classFound = false;\r\n\r\n this.compEntry.data.requestData.Teams.forEach((v) => {\r\n var classes = this._getParticipantClasses(v, true); // This time we don't specify ignoreStatus, as we only want the classes the team is not invalid in\r\n\r\n classes && classes.forEach((vC) => {\r\n availableClasses.push(vC);\r\n });\r\n });\r\n\r\n availableClasses && $.each(availableClasses, function (k, v) {\r\n if (v.ID === selectedClass) {\r\n classFound = true;\r\n return false; // Break the v-loop\r\n }\r\n });\r\n\r\n if (!classFound) {\r\n $ddlClass.val(null); // Clear the selection\r\n }\r\n }\r\n\r\n // TODO - We might want to resolve team name here as well\r\n var team = this.compEntry.data.requestData.Teams ? this.compEntry.data.requestData.Teams[0] : null;\r\n this._renderTeamName(team);\r\n\r\n $ddlClass.trigger('change'); // Trigger change to recalculate any errors shown here\r\n $(`.entry[data-golfid=\"${golfId}\"]`, this.$wrapper).remove();\r\n });\r\n }\r\n\r\n searchPlayer(clubId, firstName, lastName, ...fields) {\r\n const funcSearchPlayer = (clubId, firstName, lastName) => {\r\n firstName = firstName.trim();\r\n lastName = lastName.trim();\r\n\r\n const pleaseWait = _.ui.showPleaseWaitModal();\r\n\r\n if (!clubId || firstName.length <= 1 || lastName.length <= 1) {\r\n pleaseWait.close();\r\n return;\r\n }\r\n\r\n $('.add-player-search-result-wrapper', this.$wrapper).empty();\r\n\r\n _.ajax.post('?handler=SearchPlayer', { clubId, firstName, lastName })\r\n .done((data) => {\r\n pleaseWait.close();\r\n\r\n if (data.Error) {\r\n _.ui.errormodal({\r\n html : '
' + data.Error + '
',\r\n title : _.translations.Error\r\n });\r\n\r\n return;\r\n }\r\n\r\n let html = data.Players.map((v, i) => {\r\n return `
` +\r\n `
${v.GolfID}
` +\r\n `
${v.FullName}
` +\r\n `
${v.ActualHCP}
` +\r\n `
` +\r\n `` +\r\n `
` +\r\n `
`;\r\n });\r\n\r\n $('.add-player-search-result-wrapper', this.$wrapper).empty().html(html);\r\n });\r\n };\r\n\r\n if (fields.length) {\r\n this.compEntry.validateFields(fields)\r\n .then((status) => {\r\n if (status === FormValidation.Status.Valid)\r\n funcSearchPlayer(clubId, firstName, lastName);\r\n });\r\n } else {\r\n funcSearchPlayer(clubId, firstName, lastName);\r\n }\r\n }\r\n\r\n toggleAddPlayer(id) {\r\n if (!id) {\r\n $('.add-player > .collapse', this.$wrapper).collapse('hide');\r\n return;\r\n }\r\n\r\n $(id, this.$wrapper).collapse('toggle');\r\n }\r\n\r\n _renderPlayer(player) {\r\n let classes = !this.compEntry.asTeam ? this._getParticipantClasses(player) : [];\r\n let tees = this._getPlayerTees(player);\r\n let html = this._getPlayerHTML(player, classes, tees);\r\n\r\n const idTeeTime = 'ddlTeeTimeWish'; // Same ID for entry and team, as the value is always stored on entries\r\n const idSelectTee = 'ddlTee_' + player.MemberID;\r\n const idMainClass = this.compEntry.data.competition.ClassSetup.EnableMultiClass ? 'ddlMainClass' : 'ddlClass'; // Same ID for entry and team (unless it's multiclass), as they use the same dropdown (in a team signup you cannot select class for entries, and vice versa)\r\n const idOtherClasses = 'ddlOtherClasses-wrapper';\r\n\r\n html += this._getChoicesHTML(\r\n !this.compEntry.asTeam ? this._getTeeTimeHTML(player, idTeeTime) : '',\r\n !this.compEntry.asTeam ? this._getMainClassHTML(player, idMainClass) : '',\r\n !this.compEntry.asTeam ? this._getOtherClassesHTML(player, idOtherClasses) : '',\r\n { html: this._getTeeHTML(player, idSelectTee) }\r\n );\r\n\r\n html = `
${html}
`;\r\n\r\n $('.entry-list', this.$wrapper).find('[data-golfid=\"' + player.MemberID + '\"]').remove().end().append(html); // Remove any existing elements for this player, and append a new\r\n\r\n if ($('#' + idMainClass).length) {\r\n $('#' + idMainClass).on('change', (e) => {\r\n this._ddlClassOnChange(e.target, player);\r\n });\r\n\r\n this._ddlClassOnChange($('#' + idMainClass)[0], player, true);\r\n }\r\n else if (this.compEntry.data.competition.Request.TeeWishesOpenFor === 2) {\r\n this._updateAvailableTees();\r\n }\r\n }\r\n\r\n _renderTeam(team, entries) {\r\n let html = '';\r\n\r\n const idTeeTime = 'ddlTeeTimeWish'; // Same ID for entry and team, as the value is always stored on entries\r\n const idClass = 'ddlClass'; // Same ID for entry and team, as they use the same dropdown (in a team signup you cannot select class for entries, and vice versa)\r\n\r\n html += this._getChoicesHTML(\r\n this._getTeeTimeHTML(team, idTeeTime, entries),\r\n this._getMainClassHTML(team, idClass, true)\r\n );\r\n\r\n $('.team-details .error-message', this.$wrapper).before(html); // Insert the HTML before the .error-message\r\n\r\n let $txtTeamName = $('#txtTeamName');\r\n let $lblTeamName = $('#lblTeamName');\r\n\r\n $txtTeamName.length && $txtTeamName.val(team.Name);\r\n $lblTeamName.length && this._renderTeamName(team, $lblTeamName);\r\n\r\n if ($('#' + idClass).length) {\r\n $('#' + idClass).on('change', (e) => {\r\n this._ddlTeamClassOnChange(e.target, team);\r\n });\r\n }\r\n else if (this.compEntry.data.competition.Request.TeeWishesOpenFor === 2) {\r\n this._updateAvailableTees();\r\n }\r\n }\r\n\r\n _renderTeamName(team, $lblTeamName) {\r\n if (!team)\r\n return;\r\n\r\n if ($lblTeamName === undefined)\r\n $lblTeamName = $('#lblTeamName');\r\n\r\n $lblTeamName.length && $lblTeamName.html(!team.ManualTeamNaming ? (_.translations.TeamName + ': ' + (team.Name || '-')) : '');\r\n }\r\n\r\n _getPlayerHTML(player, classes, tees) {\r\n let className = '';\r\n if (player.MainClassID && !this.compEntry.asTeam && (classes === null || classes.length < 2)) {\r\n classes.forEach((v) => {\r\n if (v.ID === player.MainClassID) {\r\n className = v.Name;\r\n return false; // Break the v-loop\r\n }\r\n });\r\n }\r\n\r\n var showHCPStatus = this.$wrapper.data().showhcpstatus === 1;\r\n var hcpStatusContent = showHCPStatus ? (player.HandicapStatus === 2 ? _.translations.Yes : _.translations.No) : '';\r\n var hcpStatusColInnerClass = 'd-flex h-100 justify-content-center' + (this.compEntry.asTeam ? ' align-items-center' : ''); // When we show the Remove Player content, it looks best when this content is aligned vertically like that. Otherwise, it looks best that it alins with the top row.\r\n\r\n return `
` +\r\n `
` +\r\n `
` +\r\n `
${player.FirstName} ${player.LastName}
` +\r\n `
${player.FormattedHCP}
` +\r\n `
${player.MemberID}
` +\r\n `
${player.ClubName}
` +\r\n (player.Tee && (tees === null || tees.length < 2) ? `
${_.translations.Tee}: ${player.Tee}
` : `
`) + // KJ 2023-03-06: Upon request from Mikaela we're reserving this space in desktop when no content is shown here, to keep the other columns in their place (e.g. GolfID underneath player name).\r\n (className ? `
${_.translations.Class}: ${className}
` : ``) +\r\n (showHCPStatus ? `
${_.translations.HandicapStatusActive_Short}: ${hcpStatusContent}
` : ``) +\r\n `
` +\r\n `
` +\r\n (showHCPStatus ? `
${hcpStatusContent}
` : ``) +\r\n `
${!player.IsSelf && !player.ID ? `` : ``}
` +\r\n `
`;\r\n }\r\n\r\n _getChoicesHTML(...choices) {\r\n if (!choices.length || !choices.some((v) => !!v))\r\n return '';\r\n\r\n choices = choices.filter((v) => !!v);\r\n\r\n return `
` +\r\n `
` +\r\n choices.map((v, i) => `
${v.html !== undefined ? v.html : v}
`).join('') + // The h-100 is to allow texts, i.e. team class text to align properly with the rest of the content\r\n `
` +\r\n `
`;\r\n }\r\n\r\n _getTeeTimeHTML(participant, id, entries) {\r\n if (!this.$wrapper.data().request || !this.$wrapper.data().request.AllowEarlyLateStart)\r\n return '';\r\n\r\n let selected = participant.Request ? participant.Request.TeeTime : entries && entries.length > 0 && entries[0].Request ? entries[0].Request.TeeTime : null; // TeeTime is stored on entries\r\n\r\n return `
${_.translations.TeeTimeWish}
`;\r\n }\r\n\r\n _getMainClassHTML(participant, id, isTeam) {\r\n if (this.compEntry.data.competition.ClassSetup && this.compEntry.data.competition.ClassSetup.SameSize)\r\n return '';\r\n\r\n let options = [];\r\n let classes = this._getParticipantClasses(participant, isTeam, isTeam); // We pass the isTeam variable as the ignoreStatus variable, as we want to allow users to select classes they are invalid in, in order to see a message why they cannot select that class\r\n const enableMultiClass = this.compEntry.data.competition.ClassSetup.EnableMultiClass;\r\n\r\n classes && classes.forEach((v) => {\r\n options.push('');\r\n });\r\n\r\n if (options.length > 1) {\r\n let title = '
' + (enableMultiClass ? _.translations.MainClass : _.translations.Class) + '
';\r\n\r\n return title + ``;\r\n }\r\n else if (classes.length === 1 && isTeam) { // We only want to display the class name here in team signup, as the class name should otherwise already be listed with the player info\r\n return `
${_.translations.Class}: ${classes[0].Name}
`;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n _getOtherClassesHTML(player, id) {\r\n return this.compEntry.data.competition.ClassSetup && this.compEntry.data.competition.ClassSetup.EnableMultiClass ? '
' + _.translations.OtherClasses + '
' : ''; // Empty placeholder\r\n }\r\n\r\n _getTeeHTML(player, idSelectTee) {\r\n if (!this.$wrapper.data().tees)\r\n return '';\r\n\r\n let $existing = $('#' + idSelectTee);\r\n let selected = $existing.length ? $existing.val() : (player.Request ? player.Request.TeeGUID : null);\r\n let title = `
${_.translations.Tee}
`;\r\n\r\n return title + ``;\r\n }\r\n\r\n _getParticipantClasses(participant, isTeam, ignoreStatus) {\r\n let classes = [];\r\n let comparisonType = isTeam ? 2 : 1;\r\n\r\n this.compEntry.data.requestData.Classes && this.compEntry.data.requestData.Classes.forEach((v) => {\r\n if (v.Type === comparisonType && ((isTeam && v.ExternalID === null) || (!isTeam && v.ExternalID === participant.MemberID)) && (ignoreStatus || v.Status === 0 || v.Status === 1 || v.Status === 3)) { // Status Entrant, Competitor or Available\r\n classes.push(v);\r\n }\r\n });\r\n\r\n if (!isTeam && classes.length > 1) {\r\n var filteredClasses = [];\r\n let competitionClasses = this.compEntry.data.competition ? this.compEntry.data.competition.Classes : null;\r\n\r\n classes.forEach((v) => {\r\n var addClass = true;\r\n var competitionClass = null;\r\n\r\n competitionClasses && $.each(competitionClasses, function (kC, vC) {\r\n if (vC.ID === v.ID) {\r\n competitionClass = vC;\r\n return false; // Break the vC-loop\r\n }\r\n });\r\n\r\n if (v.Status === 3 && competitionClass && competitionClass.Type === 2) {\r\n addClass = false; // We don't include Availble team classes for players, as the user shouldn't be allowed to select a team class as an individual\r\n }\r\n\r\n if (addClass) {\r\n filteredClasses.push(v);\r\n }\r\n });\r\n\r\n classes = filteredClasses;\r\n }\r\n\r\n return classes;\r\n }\r\n\r\n _getPlayerTees(player) {\r\n var tees = [];\r\n\r\n this.$wrapper.data().tees && this.$wrapper.data().tees.forEach((v) => {\r\n if ((player.Gender === 0 && v.AllowFemale) || (player.Gender === 1 && v.AllowMale)) {\r\n tees.push(v);\r\n }\r\n });\r\n\r\n return tees;\r\n }\r\n\r\n _ddlClassOnChange(element, participant, isInit) {\r\n if (this.compEntry.data.competition.ClassSetup.EnableMultiClass) {\r\n let html = '';\r\n let options = [];\r\n let classes = this._getParticipantClasses(participant, false, false); // TODO - Should we include invalid classes?\r\n\r\n const $classesWrapper = $(element).parents('.row').find('#ddlOtherClasses-wrapper');\r\n const idTokens = $classesWrapper.attr('id').split('-');\r\n const newID = 'ddlOtherClasses';\r\n const $select = $('#' + newID);\r\n const selected = $select.length ? $select.val() : [];\r\n\r\n classes && classes.forEach((v) => {\r\n var isMain = parseInt(element.value) === v.ID;\r\n\r\n var isSelected = selected.some((s) => parseInt(s) === v.ID) || (isInit && v.Participate);\r\n options.push('');\r\n });\r\n\r\n if (options.length > 1) {\r\n html = ``;\r\n }\r\n\r\n $(element).parents('.row').find('#ddlOtherClasses-wrapper').empty().html(html);\r\n\r\n $('option', '#' + newID).get().forEach((v) => {\r\n v.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n v.parentElement.focus();\r\n v.selected = !v.selected;\r\n return false;\r\n }, false);\r\n });\r\n }\r\n\r\n if (this.compEntry.data.competition.Request.TeeWishesOpenFor === 2) {\r\n this._updateAvailableTees();\r\n }\r\n }\r\n\r\n _ddlTeamClassOnChange(element, team) {\r\n let classID = parseInt(element.value);\r\n let classes = [];\r\n\r\n classID && this.compEntry.data.requestData.Classes.forEach((v) => {\r\n if (v.ID === classID) {\r\n classes.push(v);\r\n }\r\n });\r\n\r\n this._updateTeamClassErrorText(classes);\r\n\r\n if (this.compEntry.data.competition.Request.TeeWishesOpenFor === 2) {\r\n this._updateAvailableTees();\r\n }\r\n }\r\n\r\n _updateTeamClassErrorText(classes) {\r\n classes && classes.sort(function (a, b) { // Show team classes first\r\n return b.Type - a.Type;\r\n });\r\n\r\n const invalidClassHTML = this._getInvalidClassesText(classes, _.translations.Team);\r\n $('.teams-error-wrapper', this.$wrapper)\r\n .find('.error-message-main-content')\r\n .html(invalidClassHTML)\r\n .end()\r\n .toggleClass('d-none', invalidClassHTML === '');\r\n\r\n this.compEntry.setAllowNext(invalidClassHTML === '');\r\n }\r\n\r\n _updateAvailableTees() {\r\n var that = this;\r\n\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n var classID = null;\r\n var $ddlClass = $('#ddlClass');\r\n var $ddlMainClass = $('#ddlMainClass');\r\n\r\n if ($ddlClass.length) {\r\n classID = $ddlClass.val();\r\n }\r\n else if ($ddlMainClass.length) {\r\n classID = $ddlMainClass.val();\r\n }\r\n\r\n classID = classID ? parseInt(classID) : classID;\r\n var availableTees = null;\r\n\r\n $.each(that.compEntry.data.requestData.Classes, function (kC, vC) {\r\n var isSelectedClass = classID && classID === vC.ID;\r\n if (vC.ExternalID === v.ExternalID && vC.Status !== 4 && (!classID || isSelectedClass)) {\r\n if (isSelectedClass) { // Specific class selected, check whether the user can select TeeInHCPCompetitions for this class\r\n availableTees = vC.AvailableTees;\r\n return false; // Break the vC-loop\r\n }\r\n else if (!classID) { // No specific class selected, check whether the user can select TeeInHCPCompetitions for any class\r\n // Get the type of this class\r\n var type = -1;\r\n $.each(that.compEntry.data.competition.Classes, function (key, value) {\r\n if (value.ID === vC.ID) {\r\n type = value.Type;\r\n return false; // Break the value-loop\r\n }\r\n });\r\n\r\n if ((that.compEntry.asTeam && type === 2) || !that.compEntry.asTeam) {\r\n availableTees = vC.AvailableTees;\r\n }\r\n }\r\n }\r\n\r\n if (availableTees) {\r\n return false; // Break the vC-loop\r\n }\r\n });\r\n\r\n var $ddlTee = $('#ddlTee_' + v.MemberID);\r\n var currentValue = $ddlTee.val();\r\n var $options = $('option', $ddlTee);\r\n\r\n if (currentValue && availableTees && availableTees[currentValue] == undefined) {\r\n $ddlTee.val(''); // The selected tee is not available, reset the selection.\r\n }\r\n\r\n $options.each(function () {\r\n if (!this.value)\r\n return true; // Skip this element\r\n\r\n var $this = $(this);\r\n var text = $this.attr('data-text');\r\n var tee = availableTees ? availableTees[this.value] : undefined;\r\n var hideOption = tee == undefined;\r\n var isHidden = $this.parent().is('span');\r\n\r\n $this.toggle(!hideOption).html(text + (tee === 1 ? ' (' + _.translations.Default + ')' : ''));\r\n\r\n if (!hideOption && isHidden)\r\n $this.unwrap();\r\n else if (hideOption && !isHidden)\r\n $this.wrap(''); // KJ 2023-05-10: For some reason iOS doesn't appear to respect the display: none on options. The internet suggests wrapping the option in a span; Even though it's invalid HTML, it does the trick, so let's go with that for now (we could also disable the option, but for now the goal is to hide it, so let's see if we can make this work).\r\n });\r\n\r\n var teeIDs = availableTees ? Object.keys(availableTees) : [];\r\n var disable = teeIDs.length <= 1; \r\n $ddlTee.attr('disabled', disable).attr('data-disabled', disable ? 1 : 0); // If only one tee is available, show that one as selected and disable the dropdown (we set data-disabled as well to check for when saving, to make sure we don't save the selection when the user couldn't make a choice).\r\n\r\n if (disable) {\r\n $ddlTee.val(teeIDs.length ? teeIDs[0] : null);\r\n }\r\n });\r\n }\r\n\r\n _checkRequestResponse(data) {\r\n if (!data)\r\n return null;\r\n\r\n let errorMessages = [];\r\n\r\n if (data.ErrorMessage) {\r\n errorMessages.push(data.ErrorMessage);\r\n }\r\n else if (data.InvalidEntries) {\r\n data.InvalidEntries.forEach((v) => {\r\n let title = null;\r\n let msg = null;\r\n\r\n switch (v.EntryError) {\r\n case 1:\r\n title = _.translations.ExistingPlayer;\r\n msg = _.translations.ThisPersonAlreadyExistsInTheCompetition;\r\n break;\r\n case 2:\r\n title = _.translations.InactivePlayer;\r\n msg = _.translations.ThisPersonIsNotActiveInAnyClub;\r\n break;\r\n case 3:\r\n title = _.translations.SuspendedPlayer;\r\n msg = _.translations.ThisPlayerCannotBeAddedPlayerSuspended;\r\n break;\r\n case 4:\r\n title = _.translations.UnknownPlayer;\r\n msg = _.translations.ThePlayerWasNotFound;\r\n break;\r\n }\r\n\r\n if (msg)\r\n msg = `${title} (${v.GolfID}): ${msg}`;\r\n\r\n if (msg) {\r\n errorMessages.push(msg);\r\n }\r\n\r\n });\r\n }\r\n\r\n if (errorMessages.length) {\r\n _.ui.errormodal({\r\n html : `
${errorMessages.join('
')}
`,\r\n title : _.translations.Error\r\n });\r\n\r\n return null;\r\n }\r\n\r\n $('#ddlClass').length === 0 && this._updateTeamClassErrorText(data.Classes); // We only need to do this if the user cannot select a class, otherwise the error will be updated by the onchange on the class dropdown being triggered\r\n this.compEntry.setAllowAddPlayer(data);\r\n\r\n return data;\r\n }\r\n\r\n _getInvalidClassesText(classes, title) {\r\n const invalidClasses = classes.filter((v) => v.Status === 4);\r\n const that = this;\r\n\r\n var html = [];\r\n invalidClasses.forEach((v) => {\r\n v.InvalidCause.forEach((i) => {\r\n html.push(`
${v.Name} - ${v.Type === 2 ? _.translations.Team : v.ExternalID}: ${that._translateInvalidCause(i, v)}
`);\r\n });\r\n });\r\n\r\n return html.join('') || '';\r\n }\r\n\r\n _translateInvalidCause(invalidCause, classObj) {\r\n var translation = '';\r\n\r\n switch (invalidCause) {\r\n case 1:\r\n translation = _.translations.UnknownCause;\r\n break;\r\n case 2:\r\n translation = _.translations.NotCalculated;\r\n break;\r\n case 3:\r\n translation = _.translations.ThePlayersHCPIsTooLow;\r\n break;\r\n case 4:\r\n translation = _.translations.ThePlayersHCPIsTooHigh;\r\n break;\r\n case 5:\r\n translation = _.translations.ThePlayerIsTooYoung;\r\n break;\r\n case 6:\r\n translation = _.translations.ThePlayerIsTooOld;\r\n break;\r\n case 7:\r\n translation = _.translations.ThePlayersGenderIsNotAllowed;\r\n break;\r\n case 8:\r\n translation = _.translations.ThePlayersPlayerStatusIsNotAllowed;\r\n break;\r\n case 9:\r\n translation = _.translations.ThereAreNotEnoughTeamMembersOnTheTeam;\r\n break;\r\n case 10:\r\n translation = _.translations.ThereAreTooManyTeamMembersOnTheTeam;\r\n break;\r\n case 11:\r\n translation = _.translations.TheTotalTeamHCPIsTooLow;\r\n break;\r\n case 12:\r\n translation = _.translations.TheTotalTeamHCPIsTooHigh;\r\n break;\r\n case 13:\r\n translation = _.translations.BothAManAndAWomanMustBeOnTheTeam;\r\n break;\r\n case 14:\r\n translation = _.translations.OneOrMoreTeamMembersAreInvalid;\r\n // TODO - Retrieve alternative error text for player like in oMG, something about \"this competition requires EGA Handicap, this player does not..\"\r\n break;\r\n case 15:\r\n translation = _.translations.ThereAreNoTeamMembers;\r\n break;\r\n case 16:\r\n translation = _.translations.ThePlayersMembershipIsInvalid;\r\n break;\r\n case 17:\r\n var classHcpStatus = classObj.HcpStatus;\r\n\r\n if (classHcpStatus === 1 || classHcpStatus === 2)\r\n translation = _.translations.ThePlayerDoesNotHaveHandicapStatus.replace('%handicapstatus%', classHCPStatus === 1 ? _.translations.HandicapStatusActive : _.translations.HandicapStatusInactive);\r\n else\r\n translation = _.translations.ThePlayersHCPStatusIsNotAllowed;\r\n\r\n break;\r\n }\r\n\r\n return translation;\r\n }\r\n\r\n validate() {\r\n if (this.compEntry.asTeam && this.compEntry.data.requestData.Teams && this.compEntry.data.requestData.Teams.length) {\r\n var teamClasses = this._getParticipantClasses(this.compEntry.data.requestData.Teams[0], true, true);\r\n var hasValidClass = teamClasses.some((v) => v.Status !== 4);\r\n\r\n if (teamClasses.length > 0 && !hasValidClass) { // If there are any team classes, but the current team doesn't fit in any of them, show an error message\r\n this._updateTeamClassErrorText(this.compEntry.data.requestData.Classes);\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n onBeforeLeave() {\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n var hasEditRow = true; // TODO - Editing a signup as individual when you're on a team should show your team members, but only allow you to edit yourself\r\n\r\n if (hasEditRow) {\r\n var teeTime = $('#ddlTeeTimeWish').val();\r\n var $ddlTee = $('#ddlTee_' + v.MemberID);\r\n v.Request.TeeTime = teeTime ? parseInt(teeTime) : null;\r\n v.Request.TeeGUID = $ddlTee.attr('data-disabled') !== '1' ? $ddlTee.val() : null;\r\n v.Request.UseRule515 = $('#chkTee515_' + v.MemberID).prop('checked') === true;\r\n }\r\n });\r\n\r\n this.compEntry.data.requestData.Teams.forEach((v) => {\r\n var $txtTeamName = $('#txtTeamName');\r\n\r\n if ($txtTeamName.length) {\r\n v.Name = $.trim($txtTeamName.val());\r\n }\r\n });\r\n\r\n if (this.compEntry.data.requestData.Entries.length > 0) { // KJ 2019-03-03 - This bit is copied from oMG. I don't know what good the Entries.length check did, and if it was a problem that classes are always set regardless of whether the user can select anything. But hopefully it works for now\r\n var $ddlClass = $('#ddlClass');\r\n var selectedClass = parseInt($ddlClass.val());\r\n var primaryClass = parseInt($('#ddlMainClass').val());\r\n var otherClasses = $('#ddlOtherClasses').val();\r\n\r\n if (this.compEntry.data.competition.ClassSetup.EnableMultiClass) {\r\n !isNaN(primaryClass) && this.compEntry.data.requestData.Classes.forEach((v) => { // KJ 2021-08-27 - If a primary class could not be parsed, we don't make any changes to their classes. We just send everything \"as is\", i.e. how we received it. We assume the GolfBox API will take care of the reset\r\n if ((this.compEntry.asTeam && v.Type === 1) || (!this.compEntry.asTeam && v.Type === 2)) {\r\n return true; // Skip this\r\n }\r\n\r\n v.IsPrimary = primaryClass === v.ID;\r\n v.Participate = v.IsPrimary ? true : otherClasses && otherClasses.some((oc) => parseInt(oc) === v.ID);\r\n v.AssignType = 2; // Player\r\n v.Status = 0; // Entrant\r\n });\r\n }\r\n else {\r\n var canSelectClass = $ddlClass.length > 0;\r\n\r\n if (canSelectClass) { // KJ 2019-06-17 - If the user can't select a class, we don't make any changes to their classes. We just send everything \"as is\", i.e. how we received it. We assume the GolfBox API will take care of the rest\r\n this.compEntry.data.requestData.Classes.forEach((v) => {\r\n if ((this.compEntry.asTeam && v.Type === 1) || (!this.compEntry.asTeam && v.Type === 2)) {\r\n return true; // Skip this\r\n }\r\n\r\n v.IsPrimary = selectedClass === v.ID;\r\n v.Participate = v.IsPrimary;\r\n v.AssignType = v.IsPrimary ? 2 : 1; // 1: Auto, 2: Player\r\n\r\n if (v.Status !== 4 || v.Participate) { // If the entry is not invalid in this class, or they have somehow been allowed to select this class anyway, we set the status to Entrant.\r\n v.Status = 0; // Entrant\r\n }\r\n });\r\n }\r\n }\r\n\r\n var warnings = [];\r\n var warningType = 'info';\r\n var warningTitle = _.translations.PleaseNote;\r\n var enableMultiClass = this.compEntry.data.competition && this.compEntry.data.competition.ClassSetup && this.compEntry.data.competition.ClassSetup.EnableMultiClass;\r\n var includeClassName = enableMultiClass;\r\n var that = this;\r\n\r\n !this.compEntry.isEdit && this.compEntry.data.competition && this.compEntry.data.competition.Classes && this.compEntry.data.competition.Classes.forEach((v) => {\r\n var isSelected = !selectedClass || v.ID === selectedClass;\r\n\r\n if (enableMultiClass) {\r\n isSelected = primaryClass === v.ID || (otherClasses && otherClasses.some((oc) => parseInt(oc) === v.ID));\r\n }\r\n\r\n if (isSelected) {\r\n if (v.MaxParticipantsReached && v.ReserveListPrincipleText) {\r\n var className = '';\r\n\r\n if (includeClassName) {\r\n that.compEntry.data.requestData && that.compEntry.data.requestData.Classes && that.compEntry.data.requestData.Classes.forEach((vC) => {\r\n if (vC.ID === v.ID) {\r\n className = vC.Name;\r\n return false; // Break the vC-loop\r\n }\r\n });\r\n }\r\n\r\n warnings.push((className ? className + ': ' : '') + _.translations.SignupInTheClassIsPossibleButMaxParticipantsHasBeenReached.replace('%ReservelistPrinciple%', v.ReserveListPrincipleText));\r\n warningType = 'confirm';\r\n warningTitle = _.translations.MaximumParticipantsReached;\r\n }\r\n\r\n return false; // Break the v-loop\r\n }\r\n });\r\n\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n !v.ID && v.HandicapStatus === 1 && this.compEntry.data.requestData.Classes.forEach((vC) => { // If the player isn't signed up yet, run through all their classes to check their HCP Status compatibility (HCP Status 1 means Inactive)\r\n var participate = vC.Participate ||\r\n (this.compEntry.asTeam && this.compEntry.data.competition.Classes.filter((o) => o.Type === 2).length === 1) || // Special case for team signups when there is only one team class. In this case, it seems the class isn't marked with Participate\r\n (!this.compEntry.asTeam && this.compEntry.data.competition.Classes.length === 1); // Special case for individual signup in team competitions. In these, it seems the class isn't marked with Participate. We're comparing with the total number of classes, and not just team classes, as if there was a combination of the two, you would be able to choose, which would cause one of them to have Participate set, and we don't want any false positives\r\n\r\n if (((!this.compEntry.asTeam && vC.ExternalID === v.ExternalID) || (this.compEntry.asTeam && !vC.ExternalID)) && participate) {\r\n var currentClass = this.compEntry.data.competition.Classes && this.compEntry.data.competition.Classes.find((o) => o.ID === vC.ID);\r\n\r\n if (currentClass && currentClass.HCPStatus === 0 && currentClass.ExcludeInactiveHCPFromResult) {\r\n var prefix = '';\r\n\r\n if (this.compEntry.data.competition.ClassSetup.EnableMultiClass)\r\n prefix = vC.Name;\r\n else if (this.compEntry.asTeam)\r\n prefix = v.ExternalID;\r\n\r\n var party = this.compEntry.asTeam ? _.translations.ThePlayer : _.translations.You; // In a team signup we just say 'The player' instead of 'You', regardless of what player has the problem\r\n var doesntHave = this.compEntry.asTeam ? _.translations.DoesNotHave : _.translations.DoNotHave; // Should match the party above\r\n var themselves = this.compEntry.asTeam ? _.translations.Themselves : _.translations.Yourself;\r\n warnings.push((prefix ? prefix + ': ' : '') + _.translations.PartyDoesntHaveHCPStatusPartyCanParticipateButWillNotBeOnTheList.replace(/%Party%/g, party).replace(/%party%/g, party.toLowerCase()).replace('%doesNotHave%', doesntHave.toLowerCase()).replace('%themselves%', themselves.toLowerCase()).replace('%handicapstatus%', _.translations.HandicapStatusActive + ' (' + _.translations.HandicapStatusActive_Short + ')') + '.');\r\n }\r\n }\r\n });\r\n });\r\n\r\n if (warnings.length > 0) {\r\n var hideButtonOK = false;\r\n var continueOnClose = true;\r\n var useOKCancel = false;\r\n\r\n var continueFunc = function () {\r\n that.compEntry.next(true);\r\n };\r\n\r\n if (warningType === 'confirm') {\r\n hideButtonOK = true;\r\n continueOnClose = false;\r\n useOKCancel = true;\r\n }\r\n\r\n _.ui[warningType + 'modal']({\r\n html: '
' + warnings.join('
') + '
', title: warningTitle, className: 'competition-entry-warning-modal', hideButtonOK: hideButtonOK, onClose: continueOnClose ? continueFunc : undefined, btnYesOnClick: !continueOnClose ? continueFunc : undefined, useOKCancel: useOKCancel\r\n });\r\n\r\n return false; // Return false to indicate that the user needs to confirm something before we can continue\r\n }\r\n }\r\n }\r\n }\r\n\r\n class _ViewQuestions {\r\n constructor(compEntry) {\r\n abstractView(this, compEntry);\r\n\r\n this.$wrapper = $('#comp-entry-view-questions', this.compEntry.$target);\r\n }\r\n\r\n render() {\r\n this.renderPlayersSummary();\r\n\r\n const renderRow = (content, participantID) => {\r\n return '
' + content.replace(/{PARTICIPANT}/g, participantID) + '
';\r\n };\r\n\r\n const setValueRdo = ($tmp, value) => {\r\n $tmp.find('input[type=\"radio\"][value=\"' + value + '\"]').attr('checked', true);\r\n };\r\n\r\n const setValueTxt = ($tmp, value) => {\r\n $tmp.find('input').attr('value', value || '');\r\n };\r\n\r\n const setValueQuestion = ($tmp, participantQuestions, question) => {\r\n var participantQuestion = participantQuestions.find((v) => v.Info && v.Info.ID === question.ID);\r\n var answer = participantQuestion && participantQuestion.Answer ? participantQuestion.Answer.Answer : undefined;\r\n\r\n if (answer !== undefined && answer !== null) {\r\n switch (question.QuestionType) {\r\n case 1: // YesNo\r\n setValueRdo($tmp, answer === true ? 1 : 0);\r\n break;\r\n case 2: // Text\r\n setValueTxt($tmp, answer);\r\n break;\r\n case 3: // Date\r\n setValueTxt($tmp, moment(_.cc.textToDateTime(answer)).format('YYYY-MM-DD'));\r\n break;\r\n case 4: // Time\r\n let date = _.cc.textToDateTime(answer);\r\n setValueTxt($tmp, date.getHours() + '' + date.getMinutes());\r\n break;\r\n case 5: // Number\r\n setValueTxt($tmp, answer);\r\n break;\r\n case 6: // List\r\n $tmp.find('select > option[value=\"' + answer + '\"]').attr('selected', true);\r\n break;\r\n case 7: // AcceptRequired\r\n $tmp.find('input[type=\"checkbox\"]').attr('checked', true);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const renderRequestsPlayer = (player) => {\r\n const $templateGolfCart = $('#rt-rdo-golfcart');\r\n const $templateCaddie = $('#rt-rdo-caddie');\r\n const requests = [];\r\n\r\n const renderPlayerRow = function($tmp) {\r\n requests.push(renderRow($tmp.html(), player.MemberID));\r\n };\r\n\r\n if ($templateGolfCart.length) {\r\n const $tmp = $templateGolfCart.clone();\r\n\r\n if (player.ID && player.Request) {\r\n setValueRdo($tmp, player.Request.GolfCart ? 1 : 0);\r\n }\r\n\r\n renderPlayerRow($tmp);\r\n }\r\n\r\n if ($templateCaddie.length) {\r\n const $tmp = $templateCaddie.clone();\r\n\r\n if (player.ID && player.Request) {\r\n setValueRdo($tmp, player.Request.Caddie ? 1 : 0);\r\n }\r\n\r\n renderPlayerRow($tmp);\r\n }\r\n\r\n this.compEntry.data.competition.Questions && this.compEntry.data.competition.Questions.forEach((v) => {\r\n if (!v.IsTeamQuestion) {\r\n const $questionTemplate = $('#qt-' + v.ID);\r\n\r\n if ($questionTemplate.length) {\r\n const $tmp = $questionTemplate.clone();\r\n\r\n setValueQuestion($tmp, player.Questions, v);\r\n\r\n renderPlayerRow($tmp);\r\n }\r\n }\r\n });\r\n\r\n if (!this.compEntry.asTeam && this.compEntry.data.competition.Request && this.compEntry.data.competition.Request.AllowPlayersNote) {\r\n requests.push(this._getNoteHTML(player.Note));\r\n }\r\n\r\n if (requests.length) {\r\n this.compEntry.asTeam && requests.splice(0, 0, '
' + player.FirstName + ' ' + player.LastName + '
');\r\n $('.requests-list', this.$wrapper).append(requests.join(''));\r\n }\r\n };\r\n\r\n const renderRequestsTeam = (team, entries) => {\r\n const requests = ['
' + _.translations.Team + '
'];\r\n\r\n const renderTeamRow = function ($tmp) {\r\n requests.push(renderRow($tmp.html(), 'team'));\r\n };\r\n\r\n this.compEntry.data.competition.Questions && this.compEntry.data.competition.Questions.forEach((v) => {\r\n if (v.IsTeamQuestion) {\r\n const $questionTemplate = $('#qt-' + v.ID);\r\n\r\n if ($questionTemplate.length) {\r\n const $tmp = $questionTemplate.clone();\r\n\r\n setValueQuestion($tmp, team.Questions, v);\r\n\r\n renderTeamRow($tmp);\r\n }\r\n }\r\n });\r\n\r\n if (this.compEntry.data.competition.Request && this.compEntry.data.competition.Request.AllowPlayersNote) {\r\n requests.push(this._getNoteHTML(entries && entries.length ? entries[0].Note : ''));\r\n }\r\n\r\n requests.length && $('.requests-list', this.$wrapper).append(requests.join(''));\r\n };\r\n\r\n $('.requests-list', this.$wrapper).empty();\r\n\r\n if (this.compEntry.asTeam) {\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n renderRequestsPlayer(v);\r\n });\r\n\r\n renderRequestsTeam(this.compEntry.data.requestData.Teams[0], this.compEntry.data.requestData.Entries);\r\n } else {\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n renderRequestsPlayer(v);\r\n });\r\n }\r\n\r\n var $requests = $('.requests-list', this.$wrapper);\r\n var that = this;\r\n\r\n var onAnswerChange = function () {\r\n that.compEntry.updateNextText();\r\n };\r\n\r\n $('input[type=\"radio\"], input[type=\"checkbox\"]', $requests).on('click', onAnswerChange);\r\n $('select', $requests).on('change', onAnswerChange);\r\n onAnswerChange(); // Make sure to set the proper state\r\n\r\n var $dateElements = $('.icon-calendar', $requests);\r\n\r\n $dateElements.length && $.each($dateElements, function (k, v) {\r\n var $parent = $(v).parents('.input-group');\r\n\r\n flatpickr('#' + $parent.attr('id'), {\r\n wrap : true,\r\n dateFormat : 'Y-m-d'\r\n });\r\n });\r\n\r\n var $selectElements = $('.custom-select', $requests);\r\n\r\n $selectElements.length && $.each($selectElements, function (k, v) {\r\n $(v).trigger('change');\r\n });\r\n\r\n var $timeElements = $('.input-time', $requests);\r\n\r\n $timeElements.length && $.each($timeElements, function (k, v) {\r\n _.ui.time('#' + $(v).attr('id'));\r\n });\r\n\r\n // starting validation register\r\n const fvFields = this.compEntry.validation.fv.getFields();\r\n\r\n Object.keys(fvFields)\r\n .filter((v) => v.indexOf('{PARTICIPANT}') !== -1)\r\n .forEach((v) => {\r\n this.compEntry.validation.fv.removeField(v);\r\n });\r\n\r\n const requestsFvFields = $('[name]', $requests)\r\n .filter((i, e) => Object.keys(e.dataset).some((v) => v.startsWith('fv')))\r\n .get();\r\n\r\n requestsFvFields\r\n .forEach((v) => {\r\n this.compEntry.validation.fv.addField(\r\n v.name,\r\n this.compEntry.validation.fv.plugins.declarative.parseElement(v)\r\n );\r\n });\r\n }\r\n\r\n renderPlayersSummary() {\r\n let html;\r\n\r\n if (this.compEntry.asTeam) {\r\n html = `
` +\r\n this.compEntry.data.requestData.Entries.map((v) => `
${v.FirstName} ${v.LastName} ${v.FormattedHCP}
`).join('') +\r\n `
`;\r\n } else {\r\n const player = this.compEntry.data.requestData.Entries[0];\r\n\r\n html = `
` +\r\n `
${player.FirstName} ${player.LastName}
` +\r\n `
${player.MemberID}
` +\r\n `
${player.FormattedHCP}
` +\r\n `
${player.ClubName}
` +\r\n `
`;\r\n }\r\n\r\n $('.players-summary', this.compEntry.$target).html(html).removeClass('hide');\r\n }\r\n\r\n _getNoteHTML(value) {\r\n return [\r\n '
',\r\n '
' + _.translations.MessageForTheClubOrCompetitionLeader + '
',\r\n '
',\r\n '
',\r\n '', // Same ID for both entries and team as the value is stored on Entries\r\n '
',\r\n '
',\r\n '
'\r\n ].join('');\r\n }\r\n\r\n _getQuestionAnswer(questionID, typeOfQuestion, identifier) {\r\n if (questionID) {\r\n var value = null;\r\n\r\n const getSelector = (prefix) => {\r\n return '#' + prefix + '-question-' + questionID + '-' + identifier;\r\n };\r\n\r\n const getElement = (prefix) => {\r\n return $(getSelector(prefix));\r\n };\r\n\r\n switch (typeOfQuestion) {\r\n case 1: // YesNo\r\n value = $('[id^=\"rdo-question-' + questionID + '-' + identifier + '\"]:checked').val();\r\n return value !== undefined && value !== null ? value === '1' : value;\r\n case 2: // FreeText\r\n return getElement('txt').val();\r\n case 3: // Date\r\n var el = document.querySelector(getSelector('txt')); // For some reason we can only retrieve the ._flatpickr instance with document.querySelector\r\n var fp = el ? el.parentElement._flatpickr : null;\r\n\r\n if (fp && fp.selectedDates && fp.selectedDates.length) {\r\n return _.cc.dateTimeToText(fp.selectedDates[0]); // TODO - Is this how we want it done?\r\n }\r\n\r\n return null;\r\n case 4: // Time\r\n value = getElement('txt').val();\r\n\r\n if (value !== undefined && value !== null && value !== '') {\r\n var time = new Date();\r\n var hours = value.substr(0, 2);\r\n var minutes = value.substr(3, 5);\r\n\r\n time.setHours(hours);\r\n time.setMinutes(minutes);\r\n time.setSeconds(0);\r\n\r\n return _.cc.dateTimeToText(time); // TODO - Is this how we want it done?\r\n }\r\n\r\n return value;\r\n case 5: // Number\r\n value = getElement('txt').val();\r\n return value !== undefined && value !== null && value !== '' ? parseInt(value) : null;\r\n case 6: // List\r\n value = getElement('ddl').val();\r\n return value ? parseInt(value) : value;\r\n case 7: // AcceptRequired\r\n return getElement('chk').prop('checked');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _getProduct(question, answer, participantIdentifier) {\r\n var product = null;\r\n var productID = question.Info.ProductID;\r\n var price = question.Info.Price;\r\n var currency = question.Info.Currency;\r\n var vat = question.Info.VAT;\r\n\r\n if (!price && question.Info.TypeOf === 6) { // List question, find the selected option and retrieve its price (if any)\r\n var option = $('option[value=\"' + answer + '\"]', $('#ddl-question-' + question.Info.ID + '-' + participantIdentifier));\r\n var priceTokens = (option.attr('data-price') || '').split(';');\r\n productID = parseInt(option.attr('data-productid'));\r\n\r\n // TODO - productID may be incorrect on edit if a product for this question has already been added with a different option selected as answer\r\n\r\n if (priceTokens && priceTokens.length > 1) {\r\n price = parseInt(priceTokens[0]);\r\n currency = _.currencies.getGBTourCurrency(priceTokens[1], true).Value;\r\n }\r\n\r\n vat = 6; // TODO - Parse VAT\r\n }\r\n\r\n if (price && price > 0) {\r\n product = {\r\n ID: productID,\r\n Name: question.Info.ProductName,\r\n Type: 3, // Question\r\n Currency: currency,\r\n Price: price,\r\n VAT: vat,\r\n Paid: 0,\r\n Balance: price * -1,\r\n IsPaid: false,\r\n AccountNumber: question.Info.AccountNumber,\r\n CostCenter: question.Info.CostCenter\r\n };\r\n }\r\n\r\n return product;\r\n }\r\n\r\n onBeforeLeave() {\r\n var that = this;\r\n\r\n // TODO - Remove products we have added for questions that have had their answer changed\r\n\r\n const handleQuestions = (v, participantIdentifier) => {\r\n if (v.Questions && v.Questions.length) {\r\n // Step 1: Create a list of products from the current questions\r\n var currentProducts = [];\r\n\r\n v.Questions.forEach((vQ) => {\r\n var answer = that._getQuestionAnswer(vQ.Info.ID, vQ.Info.TypeOf, participantIdentifier);\r\n vQ.Answer.Answer = answer !== undefined && answer !== null && answer !== '' ? answer : null;\r\n\r\n if (answer) {\r\n var product = that._getProduct(vQ, answer, participantIdentifier);\r\n\r\n if (product && product.ID) {\r\n currentProducts.push(product);\r\n }\r\n }\r\n });\r\n\r\n // Step 2: Add any new products. TODO - Do we change the product details for List questions?\r\n currentProducts.forEach((cP) => {\r\n var productFound = false;\r\n\r\n v.Products && $.each(v.Products, function (k, vP) { // Using a $.each here as the .forEach does not allow us to continue or break the loop\r\n if (vP.Type !== 3)\r\n return true; // Skip the element, we only want to look at Question-related products\r\n\r\n if (vP.ID === cP.ID) {\r\n productFound = true;\r\n }\r\n\r\n if (that.compEntry.isEdit) {\r\n // TODO - Do any List questions point to this product?\r\n }\r\n\r\n if (productFound)\r\n return false; // Break the vP-loop\r\n });\r\n\r\n if (!productFound) {\r\n v.Products.push(cP);\r\n }\r\n });\r\n\r\n // Step 3 - Remove any questions no longer having any products. TODO - Do we want to remove a product that has already been paid?\r\n for (var i = 0; i < v.Products.length; i++) {\r\n var vP = v.Products[i];\r\n\r\n if (vP.Type === 3 && !vP.IsPaid && !currentProducts.some((cP) => cP.ID === vP.ID)) {\r\n v.Products.splice(i, 1); // Remove 1 elements at index i\r\n i--; // Go one back to make sure we're not accidentally skipping any elemnts\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n var hasEditRow = true; // TODO - Editing a signup as individual when you're on a team should show your team members, but only allow you to edit yourself\r\n\r\n if (hasEditRow) {\r\n v.Note = $.trim($('#txtNote').val());\r\n v.Request.GolfCart = $('[id^=\"rdo-golfcart-' + v.MemberID + '\"]:checked').val() === '1';\r\n v.Request.Caddie = $('[id^=\"rdo-caddie-' + v.MemberID + '\"]:checked').val() === '1';\r\n\r\n handleQuestions(v, v.MemberID);\r\n }\r\n });\r\n\r\n this.compEntry.data.requestData.Teams.forEach((v) => {\r\n var $txtTeamName = $('#txtTeamName');\r\n\r\n if ($txtTeamName.length) {\r\n v.Name = $.trim($txtTeamName.val());\r\n }\r\n\r\n handleQuestions(v, 'team');\r\n });\r\n }\r\n\r\n validateAcceptRequired(input) {\r\n return input.element.checked;\r\n }\r\n }\r\n\r\n class _ViewPayments {\r\n constructor(compEntry) {\r\n abstractView(this, compEntry);\r\n }\r\n\r\n render() {\r\n var paymentRows = [];\r\n\r\n const renderRow = (text, price, payNow = '') => {\r\n return [\r\n '
',\r\n '
' + text + '
',\r\n '
' + price + '
',\r\n '
' + payNow + '
',\r\n '
'\r\n ].join('');\r\n };\r\n\r\n const renderProducts = (participant, participantIdentifier) => {\r\n let that = this;\r\n let products = participant.Products;\r\n let paymentAllowed = this.compEntry.data.competition.OnlineEntryAndPayment;\r\n let paymentRequired = false;\r\n var oep = this.compEntry.data.competition.OnlineEntryAndPayment;\r\n\r\n if (oep) {\r\n paymentAllowed = oep.EnableOnlinePayment && oep.PaymentWindowOpen;\r\n paymentRequired = oep.PaymentRequired;\r\n\r\n if (oep.PaymentRequired && !oep.PaymentWindowOpen) { // KJ 2019-05-02 - This is a special exception that addresses a setup combination we consider invalid. Payment is required, but the payment window is not open yet. The user would either be unable to continue, or they would be able to pay even though they aren't supposed to yet. In this specific exception, we disregard the payment part and let users sign up without payment. (When we decide to remove this exception we may want to disable the payment button under these circumstances)\r\n paymentAllowed = false;\r\n paymentRequired = false;\r\n }\r\n }\r\n\r\n const renderPayNow = (product, participantIdentifier) => {\r\n const id = 'chkProductPayNow_' + product.ID + '_' + participantIdentifier;\r\n const checked = $('#' + id).prop('checked');\r\n const paid = product.IsPaid; // TODO - What do we do when an item is already paid?\r\n\r\n return [\r\n '
',\r\n '',\r\n '',\r\n '
'\r\n ].join('');\r\n };\r\n\r\n products.sort(function (a, b) {\r\n return a.Type - b.Type;\r\n });\r\n\r\n products && products.forEach((v) => {\r\n var text = v.Type === 1 ? _.translations.EntryFee : v.Type === 2 ? _.translations.CompetitionGreenFee : v.Name;\r\n\r\n if (v.Type === 3 && participant.Questions && that.compEntry.data.competition.Questions) {\r\n $.each(participant.Questions, function (kQ, vQ) {\r\n var matches = false;\r\n\r\n if (vQ.Info.ProductID === v.ID) {\r\n matches = true;\r\n }\r\n else if (vQ.Info.TypeOf === 6) {\r\n var question = null;\r\n\r\n $.each(that.compEntry.data.competition.Questions, function (kCQ, vCQ) {\r\n if (vCQ.ID === vQ.Info.ID) {\r\n question = vCQ;\r\n return false; // Break the vCQ-loop\r\n }\r\n });\r\n\r\n if (question && question.Options) {\r\n $.each(question.Options, function (kO, vO) {\r\n if (vO.ProductID === v.ID) {\r\n matches = true;\r\n return false; // Break the vO-loop\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (matches) {\r\n text = vQ.Info.ProductName;\r\n return false; // Break the vQ-loop\r\n }\r\n });\r\n }\r\n\r\n var rows = [];\r\n\r\n var renderProduct = function (product) {\r\n rows.push(renderRow(text, product.Price ? _.cc.formatAmount(product.Price, true) + ' ' + _.currencies.getGBTourCurrency(product.Currency).Text : '', renderPayNow(product, participantIdentifier)));\r\n };\r\n\r\n if (v.Paid > 0 && v.Paid !== v.Price) { // The user has made a payment for this product, but the price of the product has since been changed. Add a row for the original amount, and a row for the remaining amount\r\n var orgProduct = $.extend(true, {}, v);\r\n orgProduct.ID += '_original';\r\n orgProduct.Price = orgProduct.Paid;\r\n orgProduct.Balance = 0;\r\n orgProduct.IsPaid = true;\r\n\r\n renderProduct(orgProduct);\r\n\r\n var newProduct = $.extend(true, {}, v);\r\n newProduct.Price -= newProduct.Paid;\r\n newProduct.Paid = 0;\r\n newProduct.IsPaid = newProduct.Price < 0; // This will mostly be false, but in those rare cases where the user has paid more than the current price of the product, we need to mark this as paid\r\n\r\n renderProduct(newProduct);\r\n }\r\n else\r\n renderProduct(v);\r\n\r\n paymentRows.push('
' + rows.join('') + '
');\r\n });\r\n };\r\n\r\n if (this.compEntry.asTeam) {\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n paymentRows.push('
' + v.FirstName + ' ' + v.LastName + '
');\r\n renderProducts(v, v.MemberID);\r\n });\r\n\r\n paymentRows.push('
' + _.translations.Team + '
');\r\n renderProducts(this.compEntry.data.requestData.Teams[0], 'team');\r\n } else {\r\n this.compEntry.data.requestData.Entries.forEach((v) => {\r\n renderProducts(v, v.MemberID);\r\n });\r\n }\r\n\r\n var sumRows = [];\r\n sumRows.push(renderRow(_.translations.Sum, '
'));\r\n sumRows.push(renderRow(_.translations.PayNow, '
'));\r\n this.compEntry.isEdit && sumRows.push(renderRow(_.translations.AlreadyPaid, '
'));\r\n sumRows.push(renderRow(_.translations.StillToPay, '
'));\r\n\r\n var $paymentsList = $('.payments-list');\r\n var that = this;\r\n\r\n $paymentsList.html(paymentRows.join(''));\r\n $('.payment-summaries').html(sumRows.join(''));\r\n\r\n $('input[type=\"checkbox\"]', $paymentsList).off('change').on('change', function () {\r\n that.updateSums();\r\n that.compEntry.updateNextText();\r\n\r\n if (that.compEntry.isPaymentOnly) {\r\n that.compEntry.setAllowNext(that.getPayNowProducts().length > 0);\r\n }\r\n }).eq(0).trigger('change'); // Trigger change on the first one to set the proper state\r\n }\r\n\r\n getPayNowProducts() {\r\n return $('[id^=\"chkProductPayNow_\"]:checked:not([data-fulfilled=\"1\"])');\r\n }\r\n\r\n getSums() {\r\n var res = {\r\n total: 0,\r\n payNow: 0,\r\n alreadyPaid: 0,\r\n stillToPay: 0,\r\n currency: null\r\n };\r\n\r\n $('input[type=\"checkbox\"]', $('.payments-list')).each(function (k, v) {\r\n var $v = $(v);\r\n var price = $v.attr('data-price');\r\n var currency = $v.attr('data-currency');\r\n\r\n if (price) {\r\n price = parseFloat(price); // TODO - Decimals?\r\n currency = parseInt(currency);\r\n\r\n res.total += price;\r\n var addToStillToPay = price < 0; // Negative amounts are not added to alreadyPaid or payNow, only to stillToPay, as rows with negative amounts should only be used if the user has paid too much\r\n\r\n if (!addToStillToPay) {\r\n if ($v.attr('data-fulfilled') === '1')\r\n res.alreadyPaid += price;\r\n else if ($v.prop('checked'))\r\n res.payNow += price;\r\n else\r\n addToStillToPay = true;\r\n }\r\n\r\n if (addToStillToPay)\r\n res.stillToPay += price;\r\n\r\n if (res.currency === null && currency) {\r\n res.currency = currency; // We just use the first currency we find. We assume it cannot vary within the same competition\r\n }\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n updateSums() {\r\n var $summaries = $('.payment-summaries');\r\n\r\n const setSum = (selector, sum, currency) => {\r\n $(selector, $summaries).html(_.cc.formatAmount(sum, true) + ' ' + _.currencies.getGBTourCurrency(currency).Text);\r\n };\r\n\r\n var sums = this.getSums();\r\n var currency = 1;\r\n\r\n setSum('.lblSum', sums.total, currency);\r\n setSum('.lblPayNow', sums.payNow, currency);\r\n setSum('.lblAlreadyPaid', sums.alreadyPaid, currency);\r\n setSum('.lblStillToPay', sums.stillToPay, currency);\r\n }\r\n }\r\n\r\n class _ViewFinish {\r\n constructor(compEntry) {\r\n abstractView(this, compEntry);\r\n\r\n this.$wrapper = $('#comp-entry-view-finish', this.compEntry.$target);\r\n }\r\n\r\n render() {\r\n this.compEntry.$target.empty().html(this.$wrapper.html()).addClass('finish');\r\n }\r\n }\r\n\r\n class _ViewSelectTeeTime {\r\n constructor(compEntry) {\r\n abstractView(this, compEntry);\r\n this.$wrapper = $('#comp-entry-view-selectTeeTime', this.compEntry.$target);\r\n compEntry.data.requestData.SelectTeeTime = null;\r\n this.spinner = null;\r\n this.ignore_selected_match_saved_entries = false;\r\n this.initially_selected_match = null;\r\n this.ErrorCodeModulePrefix = \"003\";\r\n this.force_allow_progression_without_match_selection = false;\r\n this.saved_entries_part_of_team = false;\r\n this.saved_entries_not_all_on_same_match = false;\r\n this.is_editing = false;\r\n }\r\n\r\n render() {\r\n const that = this;\r\n let html = '';\r\n this.allow_progression_without_match_selection = false;\r\n this.found_open_slots = false;\r\n if (this.compEntry.playersCanSelectTeeTime) {\r\n let $startlists_wrapper = $('#comp-entry-view-selectTeeTime-matches', this.$wrapper);\r\n if (this.compEntry.data.startlists) {\r\n if ('Error' in this.compEntry.data.startlists) {\r\n html = that.renderInlineMessage(this.compEntry.data.startlists.Error, 'error');\r\n this.allow_progression_without_match_selection = false; \r\n } else {\r\n that.initEdit_ifRelevant(that.compEntry.asTeam, that);\r\n if ((!('Warning' in this.compEntry.data.startlists)) && that.foundNoCompatibleStartlist(this.compEntry.data.startlists, this.compEntry.asTeam)) {\r\n let include_link_in_warning_to_switch_signup_method = (this.compEntry.data.competition.OnlineEntryAndPayment?.OnlineEntryMethod == 3) && this.compEntry.data.startlists.length > 0; \r\n this.compEntry.data.startlists.Warning = this.renderWarning_noMatchSelectionPossible(this.compEntry.asTeam, include_link_in_warning_to_switch_signup_method, mg.pages.competition.entry.data.requestData.ID, this.is_editing, that);\r\n this.force_allow_progression_without_match_selection = include_link_in_warning_to_switch_signup_method;\r\n }\r\n \r\n this.force_allow_progression_without_match_selection = this.force_allow_progression_without_match_selection || this.is_editing;\r\n this.allow_progression_without_match_selection = this.force_allow_progression_without_match_selection;\r\n if ('Warning' in this.compEntry.data.startlists) {\r\n html = that.renderInlineMessage(this.compEntry.data.startlists.Warning, 'warning'); //Please notice, that warnings also block the startlist from being rendered and no tee time can be selected (for now).\r\n } else if (this.compEntry.data.startlists.length > 0) {\r\n let multiple_start_dates = that.hasMultipleMatchStartDates(this.compEntry.data.startlists);\r\n html = (this.compEntry.data.startlists.reduce((html, startlist) => {\r\n html += that.renderStartList(startlist, false, multiple_start_dates, that);\r\n return html;\r\n }, ''));\r\n }\r\n }\r\n }\r\n $startlists_wrapper.html(html);\r\n this.updateNextBtn(this);\r\n }\r\n }\r\n\r\n renderStartList(startList, disabled, multiple_start_dates, that) {\r\n if (startList && startList.StartList_Reference_ID && startList.StartList_Reference_ID > 0 && 'Matches' in startList && startList.Matches && startList.Matches.length > 0) {\r\n let not_available = (startList.GroupSizeType == 'Team' && !that.compEntry.asTeam) || (startList.GroupSizeType == 'Player' && that.compEntry.asTeam); \r\n if (not_available) {\r\n disabled = true;\r\n }\r\n startList.Matches.sort((a, b) => {\r\n return a != null && b != null && 'Match_Order' in a && 'Match_Order' in b ? a.Match_Order - b.Match_Order : 0;\r\n })\r\n let has_match_selection = that.hasMatchSelection(that);\r\n let selectedMatch = that.getSelectedMatch();\r\n let show_start_hole_number = ('StartList_Type' in startList && startList.StartList_Type ==2); //shotgun\r\n return `
\r\n ${ startList.Matches.reduce((html,match) => {html+=that.renderMatch(match, startList, disabled, not_available, has_match_selection, (has_match_selection && selectedMatch?.MatchRID===match.Match_RID), show_start_hole_number, multiple_start_dates, that);return html;},'') }\r\n
`;\r\n }\r\n return '';\r\n }\r\n\r\n hasMatchSelection(that) {\r\n let selectedMatch = that.getSelectedMatch();\r\n return selectedMatch != null && 'MatchRID' in selectedMatch && selectedMatch.MatchRID > 0;\r\n }\r\n\r\n getSelectedMatch() {\r\n let that = mg.pages.competition.entry.views.selectTeeTime;\r\n return that.compEntry.data.requestData.SelectTeeTime;\r\n }\r\n setSelectedMatch(obj) {\r\n let that = mg.pages.competition.entry.views.selectTeeTime;\r\n that.compEntry.data.requestData.SelectTeeTime = obj;\r\n }\r\n\r\n resetSelectedMatch() {\r\n let that = mg.pages.competition.entry.views.selectTeeTime;\r\n that.setSelectedMatch(null);\r\n }\r\n\r\n renderMatch(match, startlist, disabled, not_available, has_match_selection, is_selected, show_start_hole_number, multiple_start_dates, that) {\r\n if (startlist && match && match.Match_RID && match.Match_RID > 0) {\r\n const groupSize = startlist.GroupSize;\r\n\r\n //Prepare slots\r\n let slot_startlist_entries = that.prepareSlotEntries(match, startlist, groupSize);\r\n let number_of_entries = slot_startlist_entries.length;\r\n while (slot_startlist_entries.length < groupSize) {\r\n slot_startlist_entries.push({});\r\n }\r\n\r\n //Prepare slots locked / open status\r\n let slot_open_arr = new Array(groupSize);\r\n let number_of_locked_slots = match.Match_Locked_Slots;\r\n number_of_locked_slots = 'TryLockFoundOpenSlot' in match && match.TryLockFoundOpenSlot && number_of_locked_slots > 0 && number_of_locked_slots + number_of_entries == groupSize ? number_of_locked_slots - 1 : number_of_locked_slots; //Overrule number of locked slots in case try lock slot succeeded for match.\r\n let match_initially_selected = that.initially_selected_match != null && that.initially_selected_match.MatchRID == match.Match_RID;\r\n\r\n for (let slotNo = 0; slotNo < groupSize; slotNo++) {\r\n slot_open_arr[slotNo] = !startlist.StartList_Locked && !match.Match_Locked && (slotNo + 1 > (number_of_locked_slots + number_of_entries));\r\n }\r\n let all_slots_not_open = slot_open_arr.reduce((found_only_locked_slots, slot_open) => found_only_locked_slots && !slot_open, !match_initially_selected);\r\n let influenced_by_locks = all_slots_not_open && number_of_entries < groupSize;\r\n that.found_open_slots = that.found_open_slots || number_of_entries < groupSize\r\n\r\n //Handling player/team slotNo ( including the case if player / team currently has entry/entries on match)\r\n let render_player_prev_slot_as_abandoned = false;\r\n let player_self_slotNo = -1;\r\n if (match_initially_selected) {\r\n player_self_slotNo = that.findPlayerSlot_initiallySelectedMatch(startlist, slot_startlist_entries, that);\r\n render_player_prev_slot_as_abandoned = that.ignore_selected_match_saved_entries;\r\n } else {\r\n player_self_slotNo = is_selected ? slot_open_arr.reduce((first_open_slotNo, slot_open, slotNo) => {\r\n return first_open_slotNo == -1 && slot_open ? slotNo : first_open_slotNo\r\n }, -1) : -1;\r\n }\r\n\r\n //Disable btns if relevant\r\n let render_add_btn_as_disabled = disabled || not_available || all_slots_not_open || has_match_selection;\r\n let disable_add_btn = disabled || has_match_selection || not_available || (all_slots_not_open && !influenced_by_locks);\r\n\r\n\r\n return `
\r\n
\r\n ${(!is_selected ? that.renderBtn_AddMyself(startlist, match, disable_add_btn ,render_add_btn_as_disabled ,that):'')}\r\n ${(is_selected ? that.renderBtn_RemoveMyself(startlist, match, disabled, that):'')}\r\n ${(show_start_hole_number? `\r\n \r\n ${that.renderHoleTxt(match,disabled,that)}\r\n `:'')}\r\n \r\n ${that.renderMatchStartTimeTxt(match, multiple_start_dates, that) }\r\n \r\n
\r\n
    \r\n ${ slot_startlist_entries.reduce((html,startlist_entry,slotNo)=>{ html+=that.renderMatchSlot(match, startlist, startlist_entry, disabled, slot_open_arr[slotNo] ,not_available, slotNo==player_self_slotNo, render_player_prev_slot_as_abandoned, that);return html;},'') }\r\n
\r\n
`;\r\n }\r\n return '';\r\n }\r\n\r\n prepareSlotEntries(match, startlist, groupSize) {\r\n let slot_startlist_entries = new Array(0);\r\n if (startlist.GroupSizeType == 'Player') {\r\n slot_startlist_entries = 'Entries' in match ? match.Entries.filter(entry => 'Entry_Reference_ID' in entry && entry.Entry_Reference_ID > 0) : new Array(0)\r\n }\r\n if (startlist.GroupSizeType == 'Team') {\r\n let entries_team_rids_set = new Set();\r\n slot_startlist_entries = 'Entries' in match ? match.Entries.filter(entry => {\r\n if ('Entry_TeamRID' in entry && entry.Entry_TeamRID > 0 && !entries_team_rids_set.has(entry.Entry_TeamRID) && entries_team_rids_set.size < groupSize) {\r\n entries_team_rids_set.add(entry.Entry_TeamRID);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }) : new Array(0)\r\n }\r\n slot_startlist_entries.sort((a, b) => {\r\n return a != null && 'Entry_Order' in a && b != null && 'Entry_Order' in b ? a.Entry_Order - b.Entry_Order : 0\r\n });\r\n return slot_startlist_entries;\r\n }\r\n\r\n findPlayerSlot_initiallySelectedMatch(startlist, slot_startlist_entries, that) {\r\n let player_self_slotNo = -1;\r\n if (startlist.GroupSizeType == 'Team') {\r\n slot_startlist_entries.forEach((e, index) => {\r\n if ('EntryTeamRID' in that.initially_selected_match && that.initially_selected_match.EntryTeamRID == e.Entry_TeamRID) {\r\n player_self_slotNo = index;\r\n }\r\n });\r\n } else {\r\n slot_startlist_entries.forEach((e, index) => {\r\n if ('EntryRID' in that.initially_selected_match && that.initially_selected_match.EntryRID == e.Entry_Reference_ID) {\r\n player_self_slotNo = index;\r\n }\r\n });\r\n }\r\n return player_self_slotNo;\r\n }\r\n\r\n renderMatchSlot(match, startlist, startlist_entry, disabled, slot_open, not_available, player_self_slotNo, render_player_prev_slot_as_abandoned, that) {\r\n let default_entry_txt = (startlist_entry != null && !$.isEmptyObject(startlist_entry) && (('Entry_Reference_ID' in startlist_entry && startlist_entry.Entry_Reference_ID > 0) || ('Entry_TeamRID' in startlist_entry && startlist_entry.Entry_TeamRID > 0)) ? `${mg.translations.Occupied}` : (not_available ? `${mg.translations.NA}` : (!slot_open ? `${mg.translations.Locked}` : `${mg.translations.Unoccupied}`)));\r\n return `
  • \r\n ${that.renderEntryTxt(startlist_entry, startlist, default_entry_txt, player_self_slotNo, that.compEntry.asTeam, that)}\r\n
  • `;\r\n }\r\n\r\n renderEntryTxt(startlist_entry, startlist, default_txt, player_self_slotNo, asTeam, that) {\r\n let txtHtml = default_txt ?? '';\r\n let iconName = '';\r\n if(player_self_slotNo) {\r\n txtHtml = !asTeam ? mg.translations.I : mg.translations.MyTeam;\r\n iconName = that.getPlayerSelfIcon();\r\n } else if (startlist_entry != null && !$.isEmptyObject(startlist_entry)) {\r\n if (startlist.GroupSizeType == 'Player') {\r\n if ('Entry_Reference_ID' in startlist_entry && startlist_entry.Entry_Reference_ID > 0) {\r\n let entry_player = 'Player' in startlist_entry && startlist_entry.Player.length > 0 ? startlist_entry.Player[0] : null;\r\n if (entry_player != null && !$.isEmptyObject(entry_player)) {\r\n iconName = 'gender-unknown'; //default\r\n if ('Player_IsAnonymous' in entry_player && entry_player.Player_IsAnonymous) {\r\n txtHtml = `${mg.translations.Anonymous} ${mg.translations.Anonymous}`;\r\n } else if ('Player_Name' in entry_player && entry_player.Player_Name != null && entry_player.Player_Name != '') {\r\n txtHtml = entry_player.Player_Name;\r\n if ('Player_Gender' in entry_player) {\r\n switch (entry_player.Player_Gender) {\r\n case 0: iconName = 'woman'; break;\r\n case 1: iconName = 'man'; break;\r\n default: break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n } else if (startlist.GroupSizeType == 'Team') {\r\n if ('Entry_TeamRID' in startlist_entry && startlist_entry.Entry_TeamRID > 0 && 'Team_Name' in startlist_entry) {\r\n txtHtml = startlist_entry.Team_Name ?? default_txt;\r\n }\r\n }\r\n }\r\n return (iconName != '' ? `` : '') + txtHtml;\r\n }\r\n\r\n renderHoleTxt(match, disabled, that) {\r\n let hole_number_default_txt = '??';\r\n return `${mg.translations.Hole} ${( 'Match_StartHoleName' in match && (match.Match_StartHoleName?.trim()??\"\") !=\"\" ? match.Match_StartHoleName : ('Match_StartHole' in match ? (match.Match_StartHole ?? hole_number_default_txt) : hole_number_default_txt))}`;\r\n }\r\n\r\n renderMatchStartTimeTxt(match, multiple_start_dates, that) {\r\n let outputFormatStr = !multiple_start_dates ? 'HH.mm' : 'DD MMM HH.mm';\r\n var timeTxt = moment(match.Match_StartTime, 'YYYY-MM-DDTHH:mm:ss').format(outputFormatStr);\r\n return timeTxt;\r\n }\r\n\r\n\r\n renderBtn_AddMyself(startlist,match, disabled, style_as_disabled, that) {\r\n return match ? `\r\n
    \r\n \r\n
    \r\n ` : '';\r\n }\r\n renderBtn_RemoveMyself(startlist,match, disabled, that) {\r\n return match ? `\r\n
    \r\n \r\n
    \r\n ` : '';\r\n }\r\n\r\n renderInlineMessage(txt, type) {\r\n return `
    \r\n \r\n
    ${txt}
    \r\n
    `;\r\n }\r\n\r\n async tryLockSlot(startlist_rid, match_rid) {\r\n let that = mg.pages.competition.entry.views.selectTeeTime;\r\n let data = that.compEntry.data;\r\n \r\n if(that.initially_selected_match!=null && !$.isEmptyObject(that.initially_selected_match) && that.initially_selected_match.MatchRID==match_rid) {\r\n that.ignore_selected_match_saved_entries = false;\r\n that.setSelectedMatch(that.initially_selected_match);\r\n that.render();\r\n return;\r\n }\r\n\r\n var startlist = data.startlists.filter(s => s.StartList_Reference_ID == startlist_rid)?.[0];\r\n if (startlist != null) {\r\n let postData = {\r\n competitionID: startlist.StartList_CompetitionID,\r\n courseStartID: startlist.StartList_CourseStart_Reference_ID,\r\n matchID: match_rid,\r\n groupSizeType: startlist.GroupSizeType,\r\n groupSize: startlist.GroupSize,\r\n startList_rid : startlist.StartList_Reference_ID,\r\n checksum: startlist.checksum,\r\n };\r\n let errorTxt = null;\r\n try {\r\n that.displaySpinner();\r\n const resp_data = await window.mg.ajax.postAsync('/handlers/Competition/Competition_SelectTeeTime_TryLockSlot', postData);\r\n that.resetSelectedMatch(that);\r\n if ('TryLockSuccess' in resp_data) {\r\n let match = 'Matches' in startlist && startlist.Matches.length > 0 ? startlist.Matches.filter(m => m.Match_RID == match_rid)?.[0] : null;\r\n if (resp_data.TryLockSuccess) {\r\n let selected_match_obj = that.generateSelectedMatchBasisObj(match, startlist);\r\n selected_match_obj.PrevMatchRID = that.initially_selected_match != null && 'MatchRID' in that.initially_selected_match ? that.initially_selected_match.MatchRID : null;\r\n that.setSelectedMatch(selected_match_obj);\r\n that.ignore_selected_match_saved_entries = true;\r\n startlist.StartList_Locked = false;\r\n if (match != null) {\r\n match.Match_Locked = false;\r\n match.TryLockFoundOpenSlot = true; \r\n }\r\n } else {\r\n //lock failed\r\n switch (resp_data.TryLockFailCode) {\r\n case 1:\r\n errorTxt = mg.translations.TheSelectedTeeTimeIsNotAvailable;\r\n if (match != null) {\r\n match.Match_Locked = true;\r\n match.TryLockFoundOpenSlot = false; \r\n }\r\n startlist.StartList_Locked = false;\r\n break;\r\n case 2:\r\n errorTxt = mg.translations.AllTheTeeTimesOfTheStartListAreCurrentlyLocked;\r\n startlist.StartList_Locked = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n errorTxt = 'Error' in resp_data ? resp_data.Error : mg.translations.UnknownError;\r\n }\r\n } finally {\r\n that.displaySpinner(true);\r\n if (errorTxt != null && errorTxt != '') {\r\n let errorTitle = mg.translations.Error;\r\n that.displayError(errorTitle, errorTxt); \r\n }\r\n that.render();\r\n }\r\n }\r\n }\r\n async tryUnlockAnySlot(competitionID) {\r\n let that = mg.pages.competition.entry.views.selectTeeTime;\r\n\r\n let successFunc = () => {\r\n that.resetSelectedMatch();\r\n that.ignore_selected_match_saved_entries = true;\r\n that.render();\r\n };\r\n\r\n if (that.hasMatchSelection(that) && that.initially_selected_match != null && !$.isEmptyObject(that.initially_selected_match) && that.initially_selected_match.MatchRID == that.getSelectedMatch().MatchRID) {\r\n successFunc();\r\n return;\r\n }\r\n\r\n if (competitionID != null && competitionID > 0) {\r\n let postData = {\r\n competitionID: competitionID\r\n };\r\n try {\r\n that.displaySpinner();\r\n const resp_data = await window.mg.ajax.postAsync('/handlers/Competition/Competition_SelectTeeTime_TryUnLockAnySlot', postData);\r\n if ('TryUnLockAnySuccess' in resp_data && resp_data.TryUnLockAnySuccess) {\r\n successFunc();\r\n } else {\r\n that.displayError(mg.translations.UnknownError, mg.getUnknownErrorMsg('005', that.ErrorCodeModulePrefix)); //003-005\r\n }\r\n } finally {\r\n that.displaySpinner(true);\r\n }\r\n }\r\n }\r\n\r\n displaySpinner(hide) {\r\n let that = mg.pages.competition.entry.views.selectTeeTime;\r\n hide = typeof(hide) != 'undefined' ? hide : false;\r\n if(!hide){\r\n that.spinner = mg.ui.showPleaseWaitModal();\r\n } else {\r\n that.spinner.close();\r\n }\r\n }\r\n\r\n displayError(title,txt) {\r\n mg.ui.errormodal({\r\n html : `
    ${txt}
    `,\r\n title : title,\r\n });\r\n }\r\n\r\n foundNoCompatibleStartlist(startlists, asTeam) {\r\n return startlists == null || startlists.length == 0 || !startlists.reduce((found_compatible_startlist, startlist) => {\r\n if ('GroupSizeType' in startlist) {\r\n switch (startlist.GroupSizeType) {\r\n case 'Player':\r\n return found_compatible_startlist || !asTeam;\r\n break;\r\n case 'Team':\r\n return found_compatible_startlist || asTeam;\r\n break;\r\n }\r\n } else {\r\n return true; //Missing GroupSizeType\r\n }\r\n }, false);\r\n }\r\n\r\n initEdit_ifRelevant(asTeam, that) {\r\n that.is_editing = that.getSetOfSavedEntryIDs(that).size > 0;\r\n if (that.is_editing) {\r\n if ((!('Warning' in that.compEntry.data.startlists)) && !that.hasMatchSelection(that) && !that.ignore_selected_match_saved_entries) {\r\n if (that.initially_selected_match == null) {\r\n that.initInitiallySelectedMatch_savedEntries(that.compEntry.data.startlists, asTeam, that);\r\n }\r\n\r\n if (that.initially_selected_match != null) {\r\n if (asTeam && that.saved_entries_part_of_team && that.initially_selected_match.EntryTeamRID > 0) {\r\n that.setSelectedMatch(that.initially_selected_match);\r\n }\r\n if (!asTeam) {\r\n if (!that.saved_entries_part_of_team) {\r\n if (that.initially_selected_match.EntryRID > 0) {\r\n that.setSelectedMatch(that.initially_selected_match);\r\n }\r\n } else {\r\n let include_link_in_warning_to_switch_signup_method = (that.compEntry.data.competition.OnlineEntryAndPayment?.OnlineEntryMethod == 3) && that.compEntry.data.startlists.length > 0;\r\n that.compEntry.data.startlists.Warning = `

    ${mg.translations.TeeTimeSelectionNoAvaliableWhenEditAsPlayerPartOfTeam}

    `;\r\n if (include_link_in_warning_to_switch_signup_method) {\r\n that.compEntry.data.startlists.Warning += that.renderLinkToSwithSignupMethod(asTeam, mg.pages.competition.entry.data.requestData.ID, that.is_editing);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n getSetOfSavedEntryIDs(that) {\r\n if((that.compEntry.data.requestData.Entries?.length??0) > 0){\r\n return new Set(that.compEntry.data.requestData.Entries.filter(e => 'ID' in e && (e.ID ??0) > 0).map(e => e.ID));\r\n }\r\n return new Set();\r\n }\r\n\r\n initInitiallySelectedMatch_savedEntries(startlists, asTeam, that) {\r\n if ((that.compEntry.data.requestData.Entries?.length??0) > 0) {\r\n let savedEntriesId_set = that.getSetOfSavedEntryIDs(that);\r\n if (startlists != null && startlists.length > 0) {\r\n startlists.forEach((startlist) => {\r\n if ('Matches' in startlist && startlist.Matches.length > 0) {\r\n startlist.Matches.forEach((match) => {\r\n if ('Entries' in match && match.Entries.length > 0) {\r\n match.Entries.forEach((e, index) => {\r\n if ('Entry_Reference_ID' in e && savedEntriesId_set.has(e.Entry_Reference_ID)) {\r\n that.saved_entries_part_of_team = that.saved_entries_part_of_team || (('Entry_TeamRID' in e) && e.Entry_TeamRID > 0);\r\n let selected_match = that.generateSelectedMatchBasisObj(match, startlist);\r\n selected_match.EntryRID = !asTeam ? e.Entry_Reference_ID : null;\r\n selected_match.EntryTeamRID = asTeam && ('Entry_TeamRID' in e) ? e.Entry_TeamRID : null;\r\n selected_match.PrevMatchRID = match.Match_RID;\r\n if (that.initially_selected_match != null && (!(Object.entries(that.initially_selected_match).sort().toString() === (Object.entries(selected_match).sort().toString())))) { \r\n that.saved_entries_not_all_on_same_match = true;\r\n }\r\n that.initially_selected_match = selected_match;\r\n }\r\n })\r\n }\r\n })\r\n }\r\n })\r\n }\r\n }\r\n if(that.saved_entries_not_all_on_same_match) {\r\n that.compEntry.data.startlists.Warning = mg.translations.TheTeeTimeCannotBeEditedDueToInconsistenciesInTheTeeTimes;\r\n that.initially_selected_match = null; \r\n }\r\n }\r\n \r\n generateSelectedMatchBasisObj(match, startlist) {\r\n return {\r\n StartlistVersionID: startlist.StartList_Version_ID,\r\n MatchRID: match.Match_RID,\r\n CourseStartRID : startlist.StartList_CourseStart_Reference_ID,\r\n GroupSize: startlist.GroupSize,\r\n GroupSizeType : startlist.GroupSizeType,\r\n CompetitionID: startlist.StartList_CompetitionID,\r\n StartListRID : startlist.StartList_Reference_ID,\r\n Checksum: startlist.checksum,\r\n };\r\n }\r\n\r\n renderLinkToSwithSignupMethod(asTeam, competitionID, editing) {\r\n let asTeamInverse = (this.compEntry.asTeam ? mg.translations.AnIndividualPlayer : mg.translations.ATeam).toLowerCase();\r\n let signUpMethodNewLink = `${mg.translations.StartOverAs} ${asTeamInverse}`;\r\n let signUpMethodLinkHtml = `

    ${ editing ? mg.translations.ClickTheFollowingLinkIfYouWishToChangeEditMode : mg.translations.ClickTheFollowingLinkIfYouWishToRestartTheSignUpProcess}: ${signUpMethodNewLink}

    \r\n

    ${mg.translations.OtherwiseYouMayClickNextBelowToContinueTheProcessOf}

    \r\n `.replace('%Player_Or_Team_Inverse%', asTeamInverse).replace('%signing_up_or_editing_sign_up%', (editing ? mg.translations.EditingSignUp.toLowerCase() : mg.translations.SigningUp.toLowerCase()));\r\n return signUpMethodLinkHtml;\r\n }\r\n\r\n renderWarning_noMatchSelectionPossible(asTeam, includeLinkToSwithSignupMethod, competitionID, editing, that) {\r\n let signUpMethodLinkHtml = includeLinkToSwithSignupMethod ? that.renderLinkToSwithSignupMethod(asTeam, competitionID, editing) : '';\r\n return `

    ${mg.translations.FoundNoFirstRoundStartListOfTheCompetitionThatIsOpenForRegistration}

    \r\n

    ${signUpMethodLinkHtml}

    \r\n `.replace('%Player_Or_Team%', (this.compEntry.asTeam ? mg.translations.ATeam : mg.translations.AnIndividualPlayer).toLowerCase()); \r\n }\r\n\r\n onBeforeLeave() {\r\n var that = mg.pages.competition.entry.views.selectTeeTime;\r\n let allowNext = that.allowNext(that);\r\n if (!allowNext) {\r\n that.displayError(mg.translations.SelectTeeTime, mg.translations.PleaseSelectATeeTimeInTheListAboveBeforeContinuing); \r\n }\r\n if(allowNext) {\r\n $('#btnNext').attr('data-style-as-disabled', '0'); //remove data-attr that triggers styling of 'next' button as disabled.\r\n }\r\n return allowNext;\r\n }\r\n\r\n allowNext(that) {\r\n return that.hasMatchSelection(that) || that.allow_progression_without_match_selection;\r\n }\r\n\r\n updateNextBtn(that) {\r\n mg.pages.competition.entry.setAllowNext(true);\r\n let allowNext = that.allowNext(that);\r\n $('#btnNext').attr('data-style-as-disabled', allowNext ? '0' : '1');\r\n }\r\n\r\n hasMultipleMatchStartDates(startlists) {\r\n let setOfStartDates = new Set();\r\n if (startlists != null && startlists.length > 0) {\r\n startlists.forEach(startlist => {\r\n if ('Matches' in startlist && startlist.Matches != null) {\r\n startlist.Matches.forEach(match => {\r\n if ('Match_StartTime' in match && match.Match_StartTime != null && match.Match_StartTime.length == 19) {\r\n setOfStartDates.add(match.Match_StartTime.substr(0, 10));\r\n }\r\n })\r\n }\r\n })\r\n }\r\n return setOfStartDates.size > 1;\r\n }\r\n\r\n getPlayerSelfIcon() {\r\n let entry_player_self_arr = mg.pages.competition.entry.data.requestData.Entries?.filter(e => e.IsSelf === true);\r\n if (entry_player_self_arr != null && entry_player_self_arr.length == 1) {\r\n let entry_player_self = entry_player_self_arr[0];\r\n if ('Gender' in entry_player_self) {\r\n switch (entry_player_self.Gender) {\r\n case 0:\r\n return 'woman';\r\n case 1:\r\n return 'man';\r\n }\r\n }\r\n }\r\n return 'gender-unknown';\r\n }\r\n\r\n } \r\n\r\n\r\n class CompEntry {\r\n constructor(target, data, asTeam, capacity, isEdit, isPayment, isPaymentOnly, playersCanSelectTeeTime) {\r\n this.$target = $(target);\r\n this.data = data;\r\n this.asTeam = asTeam;\r\n this.capacity = capacity;\r\n this.isEdit = isEdit;\r\n this.isPayment = isPayment;\r\n this.isPaymentOnly = isPaymentOnly;\r\n this.playersCanSelectTeeTime = playersCanSelectTeeTime;\r\n this.activeView = null;\r\n this.isSigningup = false;\r\n\r\n this.views = {\r\n players : new _ViewPlayers(this),\r\n selectTeeTime : new _ViewSelectTeeTime(this),\r\n questions : new _ViewQuestions(this),\r\n payments : new _ViewPayments(this),\r\n finish : new _ViewFinish(this)\r\n };\r\n\r\n const $form = $('form', this.$target);\r\n\r\n this.validation = _.ui.validation($form)\r\n .removePlugin('AutoFocus')\r\n .removePlugin('SubmitButton')\r\n .updatePluginOptions('Excluded', {\r\n excluded: (field, element, elements) => {\r\n const isVisible = !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);\r\n const disabled = element.getAttribute('disabled');\r\n\r\n // flatpickr\r\n if (element.getAttribute('type') === 'hidden' && element.classList.contains('flatpickr-input')) {\r\n const parent = $(element).parent()[0];\r\n const parentIsVisible = !!(parent.offsetWidth || parent.offsetHeight || parent.getClientRects().length);\r\n\r\n return disabled === ''\r\n || disabled === 'disabled'\r\n || !parentIsVisible;\r\n }\r\n\r\n return disabled === ''\r\n || disabled === 'disabled'\r\n || element.getAttribute('type') === 'hidden'\r\n || !isVisible;\r\n }\r\n })\r\n .updatePluginOptions('Bootstrap', {\r\n rowSelector: (field, element) => {\r\n const rs = $(element).attr('data-row-selector');\r\n\r\n if (rs)\r\n return rs;\r\n\r\n return '.form-group';\r\n }\r\n })\r\n .addEvent('core.form.valid', () => {\r\n\r\n })\r\n .init();\r\n }\r\n\r\n init() {\r\n // TODO - Move these to server\r\n if (1 === 1) {\r\n const competitionData = this.data.competition;\r\n const requestData = this.data.requestData;\r\n\r\n this.setAllowAddPlayer(requestData);\r\n\r\n let clubName = null;\r\n let courseName = null;\r\n\r\n const selfPlayer = requestData.Entries ? requestData.Entries.find((v) => v.IsSelf) : null;\r\n const course = selfPlayer && competitionData.Courses && competitionData.Courses.find((v) => v.ID == selfPlayer.CourseID);\r\n this.isSignedUp = selfPlayer && selfPlayer.ID !== null && selfPlayer.ID !== undefined; // oMG used the EntrySignupStatus enum that is retrieved from GBTour to determine whether the user is already signed up, but something tells me this will do just fine\r\n }\r\n\r\n var initAction = 'players';\r\n\r\n if (this.isPayment) {\r\n initAction = 'payments';\r\n }\r\n\r\n this.show(initAction);\r\n }\r\n\r\n show(identifier, initRender = true) {\r\n const view = this.views[identifier];\r\n\r\n if (view) {\r\n $('.entry-view.active', this.$target).removeClass('active');\r\n\r\n this.activeView = view;\r\n\r\n if ((initRender || !view.rendered) && view.render) {\r\n view.render();\r\n view.rendered = true;\r\n }\r\n\r\n $('#comp-entry-view-' + identifier, this.$target).addClass('active');\r\n this.updateNextText();\r\n this.updatePrevState();\r\n\r\n if (identifier === 'finish') {\r\n $('#comp-entry-finish-ad-wrapper .advertising-content').html(mg.renderThankYouPageAd());\r\n }\r\n }\r\n }\r\n\r\n resolveNextStep() {\r\n return this.resolveStep('next');\r\n }\r\n\r\n resolvePrevStep() {\r\n return this.resolveStep('prev');\r\n }\r\n\r\n resolveStep(direction) {\r\n const steps = [\r\n 'players',\r\n 'selectTeeTime',\r\n 'questions',\r\n 'payments',\r\n 'paymentWindow',\r\n 'signup',\r\n 'finish'\r\n ];\r\n\r\n const currentStepIndex = this.activeView && steps.findIndex((v) => this.views.hasOwnProperty(v) && this.activeView === this.views[v]);\r\n\r\n const hasQuestions = this.data.requestData.Entries.some((v) => {\r\n var $rqTemplates = $('.request-templates').children();\r\n var hasTemplates = $rqTemplates.length > 0;\r\n\r\n if (hasTemplates && !this.asTeam && $rqTemplates.filter('[data-type!=\"team\"]').length === 0) // If everything is for team and we're not signing up as team, this step should be skipped.\r\n hasTemplates = false;\r\n\r\n return hasTemplates;\r\n });\r\n\r\n const that = this;\r\n const hasQuestionAnswerWithPrice = (v, participantIdentifier) => {\r\n var result = false;\r\n\r\n v.Questions && v.Questions.length && $.each(v.Questions, function (kQ, vQ) {\r\n var answer = that.views.questions._getQuestionAnswer(vQ.Info.ID, vQ.Info.TypeOf, participantIdentifier);\r\n\r\n if (answer) {\r\n var product = that.views.questions._getProduct(vQ, answer, participantIdentifier);\r\n\r\n if (product) {\r\n result = true;\r\n return false; // Break the loop\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const hasPayments = this.data.requestData.Entries.some((v) => {\r\n return v.Products.some((vP) => vP.Price > 0) || hasQuestionAnswerWithPrice(v, v.MemberID);\r\n }) || this.data.requestData.Teams.some((v) => {\r\n return v.Products.some((vP) => vP.Price > 0) || hasQuestionAnswerWithPrice(v, 'team');\r\n });\r\n\r\n for (let i = 0; i < steps.length; i++) {\r\n const step = steps[i];\r\n let isRelevant = false;\r\n\r\n switch (step) {\r\n case 'players':\r\n isRelevant = true;\r\n break;\r\n case 'selectTeeTime':\r\n isRelevant = this.playersCanSelectTeeTime;\r\n break;\r\n case 'questions':\r\n isRelevant = hasQuestions;\r\n break;\r\n case 'payments':\r\n isRelevant = hasPayments;\r\n break;\r\n case 'paymentWindow':\r\n isRelevant = hasPayments && that.views.payments.getPayNowProducts().length > 0;\r\n break;\r\n case 'signup':\r\n isRelevant = true;\r\n break;\r\n case 'finish':\r\n isRelevant = true;\r\n break;\r\n }\r\n\r\n steps[i] = { id: step, isRelevant: isRelevant };\r\n }\r\n\r\n if (direction === 'prev') {\r\n let prevStep = null;\r\n\r\n for (let i = currentStepIndex - 1; i >= 0; i--) {\r\n let step = steps[i];\r\n\r\n if (step.isRelevant) {\r\n prevStep = step.id;\r\n break;\r\n }\r\n }\r\n\r\n return prevStep;\r\n }\r\n\r\n let nextStep = null;\r\n\r\n for (let i = currentStepIndex + 1; i < steps.length; i++) {\r\n let step = steps[i];\r\n\r\n if (step.isRelevant) {\r\n nextStep = step.id;\r\n break;\r\n }\r\n }\r\n\r\n return nextStep;\r\n }\r\n\r\n prev() {\r\n const prevStep = this.resolvePrevStep();\r\n\r\n if (prevStep) {\r\n $('#btnNext').attr('data-style-as-disabled','0');\r\n this.validation.fv.resetForm();\r\n this.show(prevStep, false);\r\n }\r\n }\r\n\r\n next(onBeforeLeaveConfirmed) {\r\n const cloneFields = $.extend(true, {}, this.validation.fv.fields);\r\n const excludeFields = Object.keys(cloneFields)\r\n .filter((v) => {\r\n return [\r\n 'ddl-addplayer-favs',\r\n 'txt-addplayer-golfid',\r\n 'txt-addplayer-firstname',\r\n 'txt-addplayer-lastname'\r\n ].indexOf(v) === -1;\r\n });\r\n\r\n this.validation.fv.fields = Object.assign({}, ...excludeFields.map((v) => ({ [v]: cloneFields[v] })));\r\n\r\n this.validation.fv\r\n .validate()\r\n .then((status) => {\r\n this.validation.fv.fields = Object.assign(cloneFields, this.validation.fv.fields);\r\n\r\n if (status === FormValidation.Status.NotValidated || status === FormValidation.Status.Invalid)\r\n return;\r\n\r\n const nextStep = this.resolveNextStep();\r\n\r\n if (nextStep) {\r\n if (this.activeView && $.isFunction(this.activeView.validate) && this.activeView.validate() === false) {\r\n return;\r\n }\r\n\r\n if (!onBeforeLeaveConfirmed && this.activeView && $.isFunction(this.activeView.onBeforeLeave) && this.activeView.onBeforeLeave() === false) { // Views can return false here to indicate that the user needs to confirm something before we can continue\r\n return;\r\n }\r\n\r\n if (nextStep === 'paymentWindow' || nextStep === 'signup') {\r\n var that = this;\r\n\r\n (function (that, nextStep) {\r\n that.preSignup(function () {\r\n if (nextStep === 'paymentWindow') {\r\n that.showPaymentWindow();\r\n } else if (nextStep === 'signup') {\r\n that.signup();\r\n }\r\n });\r\n })(that, nextStep);\r\n } else {\r\n this.show(nextStep);\r\n }\r\n }\r\n });\r\n }\r\n\r\n cancel() {\r\n this.$target.parents('.overlay').find('.overlay-header-close').trigger('click');\r\n }\r\n\r\n updateNextText() {\r\n const nextStep = this.resolveNextStep();\r\n\r\n if (nextStep) {\r\n let btnNextText = _.translations.Next;\r\n\r\n if (nextStep === 'paymentWindow' || this.isPaymentOnly) {\r\n btnNextText = _.translations.Pay;\r\n } else if (nextStep === 'signup') {\r\n btnNextText = this.isEdit ? _.translations.EditSignUp : _.translations.SignUp;\r\n }\r\n\r\n $('#btnNext', this.$target).html(btnNextText);\r\n }\r\n }\r\n\r\n updatePrevState() {\r\n $('#btnPrev').toggle(this.activeView && (!this.activeView.$wrapper || this.activeView.$wrapper.attr('id') !== 'comp-entry-view-players')); // Not shown on the first step\r\n }\r\n\r\n setAllowNext(allowNext) {\r\n $('#btnNext').toggleClass('btn-primary', allowNext).toggleClass('disabled', !allowNext).prop('disabled', !allowNext);\r\n }\r\n\r\n getSignupData() {\r\n return { data: _.url.encode(JSON.stringify(this.data.requestData)), asTeam: this.asTeam };\r\n }\r\n\r\n preSignup(callback) {\r\n var warnings = [];\r\n\r\n // KJ 2019-09-27: Moved the \"max competitors reached\" check to the onBeforeLeave of the first view, in order for that warning to be shown as quickly as possible. I decided to keep this logic here, even though it doesn't show any warnings at the moment, just in case we ever want to add a warning before the signup again\r\n\r\n if (warnings.length > 0) {\r\n _.ui.confirmmodal({ title: _.translations.MaximumParticipantsReached, html: '
    ' + warnings.join('\\n') + '
    ', btnYesOnClick: callback, useOKCancel: true });\r\n }\r\n else {\r\n callback();\r\n }\r\n }\r\n\r\n signup() {\r\n const pleaseWaitModal = _.ui.showPleaseWaitModal({\r\n onClose: () => { }\r\n });\r\n\r\n if (this.isSigningup)\r\n return;\r\n this.isSigningup = true;\r\n\r\n _.ajax.post('?handler=Signup', this.getSignupData() ).done((data) => {\r\n var errorMessage = data ? data.ErrorMessage : _.translations.UnknownError;\r\n\r\n if (errorMessage) {\r\n this.isSigningup = false;\r\n pleaseWaitModal.close();\r\n mg.showErrorModal(mg.translations.Error, mg.resolveError(errorMessage));\r\n }\r\n else {\r\n pleaseWaitModal.close();\r\n this.show('finish');\r\n }\r\n });\r\n }\r\n\r\n showPaymentWindow() {\r\n var that = this;\r\n var paymentWindow = _.payment.open({\r\n id: '', callBackOnClose: function (paymentComplete) {\r\n if (paymentComplete) {\r\n that.show('finish');\r\n }\r\n }\r\n });\r\n\r\n let selectedProducts = this.views.payments.getPayNowProducts();\r\n let payNow = [];\r\n\r\n $.each(selectedProducts, (k, v) => {\r\n var ids = v.id.split('_');\r\n payNow.push(ids.slice(ids.length - 2).join('_'));\r\n });\r\n\r\n var signupData = this.getSignupData();\r\n let postData = $.extend({\r\n payNow: payNow\r\n }, signupData);\r\n\r\n _.ajax.post('?handler=CreatePayment', postData).done(function (data) {\r\n _.gaEvent('Payment_initiated', 'Payment', data.ErrorMessage ? data.ErrorMessage : data.PaymentID, function () {\r\n if (data.ErrorMessage) {\r\n var errorMessage = mg.resolveError(data.ErrorMessage, true); // We set requireMatch: true here, as we only want to show error messages we could identify.\r\n mg.showErrorModal(mg.translations.UnableToContinue, errorMessage || mg.translations.UnknownError);\r\n paymentWindow && paymentWindow.close();\r\n } else {\r\n _.payment.navigate('', data.PaymentID, paymentWindow);\r\n }\r\n });\r\n });\r\n }\r\n\r\n validateFields(fields) {\r\n return Promise\r\n .all(fields.map((v) => this.validation.fv.validateField(v)))\r\n .then((results) => {\r\n if (results.indexOf(FormValidation.Status.Invalid) !== -1)\r\n return Promise.resolve(FormValidation.Status.Invalid);\r\n\r\n if (results.indexOf(FormValidation.Status.NotValidated) !== -1)\r\n return Promise.resolve(FormValidation.Status.NotValidated);\r\n\r\n return Promise.resolve(FormValidation.Status.Valid);\r\n });\r\n }\r\n\r\n setAllowAddPlayer(data) {\r\n let allowAddPlayer = this.capacity > data.Entries.length;\r\n $('.add-player').toggle(allowAddPlayer);\r\n }\r\n\r\n static ddlQuestionOnChange(element) {\r\n var $element = $(element);\r\n var $option = $element.find('option[value=\"' + $element.val() + '\"]');\r\n var $parent = $element.parents('.row');\r\n\r\n if ($parent) {\r\n var price = $option.attr('data-price');\r\n var priceTokens = price ? price.split(';') : [];\r\n\r\n $parent.find('> div:nth-child(2)').html(priceTokens.length > 1 ? _.cc.formatAmount(priceTokens[0], true) + ' ' + priceTokens[1] : '');\r\n }\r\n }\r\n\r\n static onChkAcceptRequiredClick(element) {\r\n var $element = $(element);\r\n var disabledReason = $element.attr('data-disabled-reason');\r\n\r\n if (disabledReason) {\r\n var errorMessage = mg.resolveError(disabledReason);\r\n mg.showErrorModal(mg.translations.InsufficientRights, errorMessage);\r\n $element.prop('checked', false); // Make sure the user can't set this checkbox to checked (the preventDefault should cover it, so this is just an extra safeguard that may not be necessary).\r\n event && event.preventDefault(); // Make sure the user can't set this checkbox to checked.\r\n return;\r\n }\r\n }\r\n }\r\n\r\n _.competitionEntry = CompEntry;\r\n})(jQuery, window);\r\n","(function(window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n const _ = window.mg;\r\n\r\n class Converter {\r\n padZeroes(number) {\r\n return number < 10 ? '0' + number : '' + number;\r\n }\r\n\r\n dateTimeToText(date, format = 'YYYYMMDD[T]HHmmss') {\r\n return moment(date).format(format);\r\n }\r\n\r\n dateTimeToTimeText(date) {\r\n return moment(date).format('HH[' + _.dateTimeFormat.TimeSeparator + ']mm');\r\n }\r\n\r\n dateToText(date, includeHourMinute = true) {\r\n return moment(date).format('YYYYMMDD' + (includeHourMinute ? '[T000000]' : ''));\r\n }\r\n\r\n textToDate(value) {\r\n return moment(value, 'YYYYMMDD').toDate();\r\n }\r\n\r\n textToDateTime(value) {\r\n return moment(value, 'YYYYMMDD[T]HHmmss').toDate();\r\n }\r\n\r\n toNumeric(value, failValue) {\r\n return (isNaN(value) || value == '') ? (isNaN(failValue) || failValue == '') ? Number.MIN_VALUE : parseInt(failValue) : parseInt(value);\r\n }\r\n\r\n toDecimal(value) {\r\n return parseFloat(value.replace(',', '.'));\r\n }\r\n\r\n toHcp(value) {\r\n let hcp = this.toDecimal(value);\r\n\r\n if (value.indexOf('+') === 0)\r\n hcp = -hcp;\r\n\r\n return hcp;\r\n }\r\n\r\n hcpToText(value, culture = _.culture) {\r\n let tmpHcp = (typeof value === 'number') ? value : this.toHcp(value);\r\n let digits = tmpHcp >= 37 ? 0 : 1;\r\n\r\n if (tmpHcp < 0)\r\n return '+' + Math.abs(tmpHcp).toLocaleString(culture, { minimumFractionDigits: digits, maximumFractionDigits: digits });\r\n\r\n if (tmpHcp > 36 && /(,|\\.)[1-9]/ig.test(tmpHcp.toFixed(2)))\r\n digits = 1;\r\n\r\n return tmpHcp.toLocaleString(culture, { minimumFractionDigits: digits, maximumFractionDigits: digits });\r\n }\r\n\r\n formatDecimal(value, digits = 1, forceDigits = false, culture = _.culture) {\r\n if (value === '')\r\n return '';\r\n\r\n let tmpDec = (typeof value === 'number') ? value : this.toDecimal(value);\r\n\r\n if (forceDigits !== true && tmpDec % 1 === 0)\r\n return tmpDec.toLocaleString(culture, {\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0\r\n });\r\n\r\n return tmpDec.toLocaleString(culture, {\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits\r\n });\r\n }\r\n\r\n formatAmount(value, forceDecimals = false, includeCurrency = false) {\r\n // Returns a number formatted with 2 digits (depending on the forceDecimal value)\r\n return this.formatDecimal(value, 2, forceDecimals) + (includeCurrency ? ' kr' : '');\r\n }\r\n\r\n formatDate(value, includeYear) { // Expects a moment instance\r\n return value.format('DD MMM' + (includeYear ? ' YY' : '')); // TODO - Should dates always be formatted like this?\r\n }\r\n\r\n formatTime(value) { // Expects a moment instance\r\n return value.format('HH' + _.dateTimeFormat.TimeSeparator + 'mm');\r\n }\r\n\r\n timeUnitToMinutes(minutes, unit) {\r\n switch (unit) {\r\n case 0: return minutes; // minutes\r\n case 1: return minutes * 60; // hours\r\n case 2: return minutes * 1440; // days\r\n }\r\n }\r\n }\r\n\r\n _.cc = new Converter();\r\n})(window);\r\n","(function($, window) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n var _ = window.mg;\r\n _.pages = {};\r\n\r\n _.getScrollbarWidth = function() {\r\n var scrollDiv = document.createElement('div');\r\n scrollDiv.style.position = 'absolute';\r\n scrollDiv.style.top = '-9999px';\r\n scrollDiv.style.width = '50px';\r\n scrollDiv.style.height = '50px';\r\n scrollDiv.style.overflow = 'scroll';\r\n\r\n document.body.appendChild(scrollDiv);\r\n\r\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\r\n document.body.removeChild(scrollDiv);\r\n\r\n return scrollbarWidth;\r\n };\r\n\r\n _.scrollTo = function(target, speed, additionalOffset) {\r\n var $target = $(target);\r\n var $header = $('#header');\r\n var offset = $target.offset().top + (additionalOffset || 0);\r\n var currentScroll = window.scrollY;\r\n\r\n if (currentScroll > offset) { // When scrolling upwards the header bar will most likely come into view, we need to scroll past the part of the screen that would otherwise be overlapped by the header\r\n offset -= $('.header-bar', $header).height();\r\n }\r\n\r\n offset = Math.max(0, offset); // Make sure the offset isn't accidentally a negative value, as that would mess with the animation speed (because it thinks it needs to scroll further than it actually does)\r\n\r\n $('html, body').stop().animate({ 'scrollTop': offset }, speed || 400, 'swing');\r\n };\r\n _.scrollToTop = function() {\r\n _.scrollTo(document.documentElement);\r\n };\r\n\r\n _.getRandomNumber = function(minimum, maximum) { // Inspired by GolfBox.T2.WebUI.Admin\r\n return Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;\r\n };\r\n\r\n _.getUniqueNumber = function(length) { // Inspired by GolfBox.T2.WebUI.Admin\r\n var result = [];\r\n length = length ? length : 13;\r\n\r\n\r\n while (result.length < length) {\r\n var r = this.getRandomNumber(0, 9);\r\n\r\n if (result.length === 0 && r === 0)\r\n continue; // We don't want the beginning of the result to start with a 0\r\n\r\n result.push(r.toString());\r\n }\r\n\r\n return (+result.join(''));\r\n };\r\n\r\n _.redirect = function(url) {\r\n window.location = url;\r\n };\r\n\r\n _.resetErrorMessage = function(errorWrapper) {\r\n $(errorWrapper).removeClass('fade show').addClass('d-none');\r\n };\r\n\r\n _.showErrorMessage = function(errorMessage, errorWrapper, includeParagraph) {\r\n errorMessage = errorMessage.replace('\\r\\n', '
    ').replace('\\n', '
    ');\r\n\r\n $('.error-message-main-content', errorWrapper).html(includeParagraph !== false ? '

    ' + errorMessage + '

    ' : errorMessage);\r\n $(errorWrapper).addClass('fade show').removeClass('d-none');\r\n };\r\n\r\n _.renderErrors = function(errors) {\r\n var errorsHTML = [];\r\n\r\n for (var i = 0; i < errors.length; i++) {\r\n errorsHTML.push('

    ', errors[i].formatText, '

    '); // formatText comes from the validation at the moment, we may need to find a more general term\r\n }\r\n\r\n return errorsHTML.join('');\r\n };\r\n\r\n _.getUnknownErrorMsg = function(errorCode, errorCodeModulePrefix) {\r\n var errorCodeModulePrefixStr = errorCodeModulePrefix ? `${errorCodeModulePrefix}-` : '';\r\n var errorCodeStr = errorCode ? ` ${mg.translations.ErrorCode}: ${errorCodeModulePrefixStr}${errorCode}` : '';\r\n return `${mg.translations.UnknownError}.${errorCodeStr}`\r\n }\r\n\r\n\r\n _.logout = function() {\r\n _.ui.showPleaseWaitModal({ text: _.translations.PleaseWait, showTitle: false });\r\n\r\n _.ajax.get('/handlers/logout').done(function(data) {\r\n if (data) {\r\n _.redirect('/');\r\n }\r\n });\r\n };\r\n\r\n _.setTxtSearchBehavior = function(target, items, filterProp, ridProp, ridDataAttr) {\r\n // based on mingolf.ui.clearer.js - For now!\r\n var $input = $('input[type=\"text\"]', target);\r\n var $parent = $input.parents('.mg-input');\r\n var $itemHolder = $parent.parent();\r\n var $clearer = $('');\r\n\r\n if ($input.data('txtsearchbehavior'))\r\n return;\r\n\r\n var updateClearer = function(status) {\r\n $parent.attr('data-cleareractive', status ? '1' : '0');\r\n };\r\n\r\n var updateResult = function() {\r\n var val = $.trim($input.val());\r\n var results = [];\r\n\r\n if (val.length && items) {\r\n $.each(items, function(k, v) {\r\n var filterValue = v[filterProp].toLowerCase();\r\n var filterIndex = filterValue.indexOf(val.toLowerCase());\r\n\r\n if (filterIndex > -1) {\r\n v.filterIndex = filterIndex;\r\n results.push(v);\r\n }\r\n });\r\n }\r\n\r\n $('.filter-match', $itemHolder).each(function(idx, elem) {\r\n var $elem = $(elem);\r\n $elem.css('order', '');\r\n $elem.removeClass('filter-match');\r\n });\r\n\r\n if (val.length) {\r\n var dataAttr = ridDataAttr || ridProp.toLowerCase();\r\n\r\n results.sort(function(a, b) {\r\n var res = a.filterIndex - b.filterIndex;\r\n\r\n if (res === 0)\r\n res = a[filterProp] < b[filterProp] ? -1 : a[filterProp] > b[filterProp] ? 1 : 0;\r\n\r\n return res;\r\n });\r\n\r\n $itemHolder.addClass('filter-applied');\r\n\r\n $.each(results, function(i, v) {\r\n var $item = $('[data-' + dataAttr + '=\"' + v[ridProp] + '\"]', $itemHolder);\r\n\r\n $item.css('order', i + 1);\r\n $item.addClass('filter-match');\r\n });\r\n } else {\r\n $itemHolder.removeClass('filter-applied');\r\n }\r\n };\r\n\r\n $input.data('txtsearchbehavior', true);\r\n $input.before($clearer);\r\n\r\n $input.on('focus.clearer-txtsearchbehavior', (e) => {\r\n if ($input.val().length >= 1)\r\n updateClearer(true);\r\n });\r\n\r\n $input.on('keyup.clearer-txtsearchbehavior', (e) => {\r\n if (e.which === 27) {\r\n $input.val('');\r\n }\r\n\r\n updateClearer($input.val().length >= 1);\r\n updateResult();\r\n });\r\n\r\n $input.on('input.clearer-txtsearchbehavior change.clearer-txtsearchbehavior paste.clearer-txtsearchbehavior', (e) => {\r\n updateClearer($input.val().length >= 1);\r\n });\r\n\r\n $clearer.on('mousedown.clearer-txtsearchbehavior', (e) => {\r\n e.preventDefault();\r\n });\r\n\r\n $clearer.on('click.clearer-txtsearchbehavior', (e) => {\r\n $input.val('');\r\n\r\n updateClearer(false);\r\n updateResult();\r\n\r\n $input.focus();\r\n\r\n e.preventDefault();\r\n });\r\n\r\n updateClearer(false);\r\n };\r\n\r\n _.showTerms = function(mode) {\r\n var url = 'https://help.golf.se/ovrigt/regelverk-for-git-och-min-golf';\r\n\r\n switch (mode) {\r\n case 'teetime':\r\n case 'membercard':\r\n case 'tournament':\r\n case 'olympiagolfen':\r\n case 'greenfeecheckar':\r\n url += '/allmanna-kopvillkor-starttidsbokning-i-min-golf/';\r\n break;\r\n case 'skandiatour':\r\n url += '/kopinformation-skandia-tour/';\r\n break;\r\n case 'nordeatour':\r\n url += '/kopinformation-nordea-tour-dam/';\r\n break;\r\n case 'prizetournament':\r\n url += '/kopinformation-for-tavling-med-prispengar/';\r\n break;\r\n }\r\n\r\n window.open(url);\r\n };\r\n\r\n _.onBoxClicked = function (box) {\r\n var url = '';\r\n var performSSO = true; // Whether or not we should try to perform an SSO operation\r\n\r\n switch (box) {\r\n case 'competitioncalendar':\r\n url = 'Competition/Search';\r\n break;\r\n case 'beta':\r\n url = '{oMG}/Beta';\r\n break;\r\n case 'welcome':\r\n url = 'Welcome';\r\n break;\r\n case 'rulesandhcp':\r\n url = 'http://golf.se/regler-och-handicap/';\r\n break;\r\n case 'sgt':\r\n url = 'https://golf.se/for-spelaren/tavlingar/swedish-golf-tour/';\r\n break;\r\n case 'teentour':\r\n url = 'https://golf.se/for-spelaren/tavlingar/juniortavlingar/';\r\n break;\r\n case 'moregolf':\r\n url = 'https://moregolf.golf.se/';\r\n break;\r\n case 'readgolfa':\r\n url = 'https://golfa.golf.se/';\r\n break;\r\n case 'tournews':\r\n url = 'https://golf.se/for-spelaren/tavlingar/tournytt2/';\r\n break;\r\n case 'klubbtv':\r\n url = 'https://www.klubbtv.nu/';\r\n break;\r\n case 'hioclub':\r\n url = 'https://www.hioklubben.se/';\r\n break;\r\n case 'safegolf':\r\n url = 'https://golf.se/sakergolf';\r\n break;\r\n case 'formats':\r\n url = 'https://golf.se/for-spelaren/spela-golf/spel--och-tavlingsformer/';\r\n break;\r\n }\r\n\r\n _.openTab(url);\r\n };\r\n\r\n _.openTab = function(url, performSSO) {\r\n performSSO = performSSO || performSSO == undefined; // Default to true\r\n\r\n if (url.indexOf('{oMG}') > -1) {\r\n url = url.replace('{oMG}', performSSO ? '' : _.oldMinGolf);\r\n\r\n if (performSSO)\r\n url = '/handlers/login/performSSO?redirectURL=' + encodeURIComponent(url);\r\n }\r\n\r\n window.open(url, '_blank');\r\n };\r\n\r\n _.showErrorModal = function(title, content) {\r\n mg.ui.errormodal({ html: '
    ' + content + '
    ', title: title });\r\n }\r\n\r\n _.showInactiveMembershipInfo = function () {\r\n mg.ui.errormodal({ html: '
    ' + mg.translations.YouDoNotHaveAnActiveMembershipInAnyClub + '
    ', title: mg.translations.NoActiveMembership });\r\n };\r\n\r\n _.showVIGHCPDisabledInfo = function () {\r\n mg.ui.errormodal({ html: '
    ' + mg.translations.YouGetYourHandicapWhenYouHaveCompletedGreenCard.replace('%linebreak%', '
    ').replace('%href%', 'https://borjaspela.golf.se') + '
    ', title: mg.translations.NotAllowed });\r\n };\r\n\r\n _.showModal = function(id) {\r\n mg.ui.minimodal({ modal: $(id) });\r\n };\r\n\r\n _.showOverlay = function (id, defaultOnCloseURL, onClosePages, confirmTitle, confirmText, confirmOnClose, confirmBtnYesText, confirmBtnNoText) {\r\n return mg.ui.overlay({ overlay: $(id), defaultOnCloseURL: defaultOnCloseURL, onClosePages: onClosePages, confirmTitle: confirmTitle, confirmCloseText: confirmText, showConfirmOnClose: confirmOnClose, confirmBtnYesText: confirmBtnYesText, confirmBtnNoText: confirmBtnNoText });\r\n };\r\n\r\n _.resolveError = function(errorMessage, requireMatch) {\r\n if (!errorMessage)\r\n return errorMessage;\r\n\r\n var compareMsg = errorMessage.toLowerCase().trim();\r\n\r\n if (compareMsg === 'missingright_booking')\r\n return mg.translations.YouDoNotHavePermissionToCompleteTheBooking;\r\n\r\n if (compareMsg === 'missingright_bookingwithprice')\r\n return mg.translations.YouDoNotHavePermissionToCompleteABookingThatRequiresPayment;\r\n\r\n if (compareMsg === 'missingright_competition')\r\n return mg.translations.YouDoNotHavePermissionToSignUpForCompetitions;\r\n\r\n if (compareMsg === 'missingright_competitionwithprice')\r\n return mg.translations.YouDoNotHavePermissionToSignUpForCompetitionsWithFees;\r\n\r\n if (compareMsg === 'missingright_payment')\r\n return mg.translations.YouDoNotHavePermissionToPayFeesInMinGolf;\r\n\r\n if (compareMsg === 'missingright_golflessons')\r\n return mg.translations.YouDoNotHavePermissionToBookGolfLessons;\r\n\r\n if (compareMsg.startsWith('missingright_'))\r\n return mg.translations.YouDoNotHaveSufficientRightsToPerformThisAction; // Fallback for unmapped missingright_ errors.\r\n\r\n return requireMatch ? null : errorMessage; // We either return the errorMessage we received, or null if a match is required\r\n }\r\n\r\n function createFunctionWithTimeout(callback, opt_timeout) {\r\n var called = false;\r\n\r\n function fn() {\r\n if (!called) {\r\n called = true;\r\n callback();\r\n }\r\n }\r\n\r\n setTimeout(fn, opt_timeout || 1000);\r\n return fn;\r\n }\r\n\r\n _.gaEvent = function(action, category, label, callback) {\r\n if (!window.gtag) {\r\n if (callback && $.isFunction(callback))\r\n callback();\r\n return;\r\n }\r\n\r\n var o = {};\r\n\r\n if (category !== null)\r\n o['event_category'] = category;\r\n\r\n if (label !== null)\r\n o['event_label'] = label;\r\n\r\n if (callback && $.isFunction(callback))\r\n o['event_callback'] = createFunctionWithTimeout(callback);\r\n\r\n gtag('event', action, o);\r\n };\r\n\r\n _.getGenderIconClass = function(gender) {\r\n var g = parseInt(gender);\r\n\r\n if (!isNaN(g)) {\r\n var res = gender === 0 ? 'woman' : gender === 1 ? 'man' : 'gender-unknown';\r\n\r\n return 'avatar-' + res;\r\n }\r\n\r\n return '';\r\n };\r\n\r\n _.removeTrailingSlash = function(str) {\r\n if (str && str.substr(-1) === '/')\r\n str = str.substr(0, str.length - 1);\r\n\r\n return str;\r\n };\r\n\r\n _.children = {\r\n orphans: [],\r\n register: function(parentName, obj) {\r\n this.orphans.push($.extend({\r\n parentName: parentName\r\n }, obj));\r\n },\r\n adopt: function(parentName) {\r\n // Return all children waiting for this parent\r\n var children = [];\r\n\r\n for (var i = 0; i < this.orphans.length; i++) {\r\n var orphan = this.orphans[i];\r\n\r\n if (orphan.parentName == parentName) {\r\n $.isFunction(orphan.initCallback) && orphan.initCallback(); // Execute any callbacks\r\n children.push(orphan);\r\n this.orphans.splice(i, 1); // Remove this children from the orphans list\r\n i--; // Go back one step to make sure we don't accidentally skip a poor child\r\n }\r\n }\r\n\r\n return children; // The callbacks may not be finished yet. If we ever need this to happen only when they are all finished, we need to use a callback instead\r\n },\r\n findChild: function(childName, children) {\r\n var child = null;\r\n\r\n children && $.each(children, function(k, v) {\r\n if (v.identifier === childName) {\r\n child = v;\r\n return false; // Break the loop\r\n }\r\n });\r\n\r\n return child;\r\n }\r\n };\r\n\r\n function pad(n) {\r\n return n < 10 ? '0' + n : n + '';\r\n }\r\n\r\n _.actions = {\r\n onClick: function (target, onClick) {\r\n if (target.getAttribute('disabled') === 'disabled') {\r\n mg.showInactiveMembershipInfo();\r\n return; // Don't do anything further\r\n }\r\n\r\n if ($.isFunction(onClick))\r\n onClick();\r\n else if (typeof (onClick) == 'string')\r\n eval(onClick);\r\n },\r\n open: function (href, onOpen, onClose, onCloseURL, overlayUIExtraProps = {} ) { // Open an overlay with the specified href\r\n var overlay = mg.ui.overlay({\r\n ...overlayUIExtraProps,\r\n href: href,\r\n instantSpinner: true,\r\n onOpen: function () {\r\n $('.advertising-content').filter(':not(.allow-in-overlay)').find('> *').remove(); // Remove all ads (except any ads added specifically in the overlay), as they do not know they are not visible. This is a temporary solution until Booking is rebuilt (the only page with an actual overlay, the rest aren't including the ads).\r\n $('#esmg-full-page-ads').parents('[style*=\"z-index\"]').remove(); // Same goes for the splash ad (we can only recognize the splash parent by it having a z-index in its style attribute - I would have much preferred something more stable, but I didn't have any luck coordinating that with them the last time).\r\n $.isFunction(onOpen) && onOpen();\r\n },\r\n onClose: function () {\r\n $.isFunction(onClose) && onClose();\r\n\r\n var reloadOnClose = true; // Necessary until Booking is rebuilt\r\n\r\n if (reloadOnClose) { // Reload the page to get the ads back (wrapped in an if statement to have it easily grouped)\r\n if (onCloseURL) // Implementations can specify a specific URL to go to when closing the overlay (used for the quickbooking implementation for now, as it would otherwise be stuck in a loop where closing the overlay reloads the page, which automatically opens the overlay again)\r\n window.location = onCloseURL;\r\n else\r\n location.reload();\r\n }\r\n }\r\n // TODO - Custom footer, or can we just add the buttons we need?\r\n });\r\n },\r\n findTeeTime: function (slotID, showPaymentDirectly, onOpen) {\r\n _.actions.open('/Site/Booking' + (slotID ? '/' + slotID : '') + (showPaymentDirectly ? '/true': ''), onOpen, () => {\r\n if (_.pages && _.pages.booking && _.pages.booking.teetimes && _.pages.booking.teetimes.grid.activeCell && _.pages.booking.teetimes.grid.activeCell.src) {\r\n _.pages.booking.teetimes.grid.activeCell.src.Slot && _.pages.booking.slot.cancel(_.pages.booking.teetimes.grid.activeCell.src.Slot.SlotId);\r\n }\r\n });\r\n },\r\n searchCompetition: function () {\r\n _.action.open('/Site/Competition');\r\n }\r\n }\r\n\r\n _.url = {\r\n encode: function (string) { return escape(this._utf8_encode(string)); },\r\n decode: function (string) { return this._utf8_decode(unescape(string)); },\r\n _utf8_encode: function (string) { string = string.replace(/\\r\\n/g, '\\n'); var utftext = ''; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; },\r\n _utf8_decode: function (utftext) { var string = ''; var i = 0; var c = c1 = c2 = 0; while (i < utftext.length) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if ((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i + 1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i + 1); c3 = utftext.charCodeAt(i + 2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; }\r\n }\r\n\r\n // https://github.com/kaimallea/isMobile\r\n\r\n var IsMobileClass = function(userAgent) {\r\n var ua = userAgent || navigator.userAgent;\r\n\r\n var apple_phone = /iPhone/i,\r\n apple_ipod = /iPod/i,\r\n apple_tablet = /iPad/i,\r\n android_phone = /(?=.*\\bAndroid\\b)(?=.*\\bMobile\\b)/i, // Match 'Android' AND 'Mobile'\r\n android_tablet = /Android/i,\r\n amazon_phone = /(?=.*\\bAndroid\\b)(?=.*\\bSD4930UR\\b)/i,\r\n amazon_tablet = /(?=.*\\bAndroid\\b)(?=.*\\b(?:KFOT|KFTT|KFJWI|KFJWA|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|KFARWI|KFASWI|KFSAWI|KFSAWA)\\b)/i,\r\n windows_phone = /Windows Phone/i,\r\n windows_tablet = /(?=.*\\bWindows\\b)(?=.*\\bARM\\b)/i, // Match 'Windows' AND 'ARM'\r\n other_blackberry = /BlackBerry/i,\r\n other_blackberry_10 = /BB10/i,\r\n other_opera = /Opera Mini/i,\r\n other_chrome = /(CriOS|Chrome)(?=.*\\bMobile\\b)/i,\r\n other_firefox = /(?=.*\\bFirefox\\b)(?=.*\\bMobile\\b)/i, // Match 'Firefox' AND 'Mobile'\r\n seven_inch = new RegExp(\r\n '(?:' + // Non-capturing group\r\n 'Nexus 7' + // Nexus 7\r\n '|' + // OR\r\n 'BNTV250' + // B&N Nook Tablet 7 inch\r\n '|' + // OR\r\n 'Kindle Fire' + // Kindle Fire\r\n '|' + // OR\r\n 'Silk' + // Kindle Fire, Silk Accelerated\r\n '|' + // OR\r\n 'GT-P1000' + // Galaxy Tab 7 inch\r\n ')', // End non-capturing group\r\n 'i'); // Case-insensitive matching\r\n\r\n function match(regex, str) {\r\n return regex.test(str);\r\n }\r\n\r\n // Facebook mobile app's integrated browser adds a bunch of strings that\r\n // match everything. Strip it out if it exists.\r\n var tmp = ua.split('[FBAN');\r\n\r\n if (typeof tmp[1] !== 'undefined') {\r\n ua = tmp[0];\r\n }\r\n\r\n // Twitter mobile app's integrated browser on iPad adds a \"Twitter for\r\n // iPhone\" string. Same probable happens on other tablet platforms.\r\n // This will confuse detection so strip it out if it exists.\r\n tmp = ua.split('Twitter');\r\n\r\n if (typeof tmp[1] !== 'undefined') {\r\n ua = tmp[0];\r\n }\r\n\r\n this.apple = {\r\n phone : match(apple_phone, ua),\r\n ipod : match(apple_ipod, ua),\r\n tablet : !match(apple_phone, ua) && match(apple_tablet, ua),\r\n device : match(apple_phone, ua) || match(apple_ipod, ua) || match(apple_tablet, ua)\r\n };\r\n\r\n this.amazon = {\r\n phone : match(amazon_phone, ua),\r\n tablet : !match(amazon_phone, ua) && match(amazon_tablet, ua),\r\n device : match(amazon_phone, ua) || match(amazon_tablet, ua)\r\n };\r\n\r\n this.android = {\r\n phone : match(amazon_phone, ua) || match(android_phone, ua),\r\n tablet : !match(amazon_phone, ua) && !match(android_phone, ua) && (match(amazon_tablet, ua) || match(android_tablet, ua)),\r\n device : match(amazon_phone, ua) || match(amazon_tablet, ua) || match(android_phone, ua) || match(android_tablet, ua)\r\n };\r\n\r\n this.windows = {\r\n phone : match(windows_phone, ua),\r\n tablet : match(windows_tablet, ua),\r\n device : match(windows_phone, ua) || match(windows_tablet, ua)\r\n };\r\n\r\n this.other = {\r\n blackberry : match(other_blackberry, ua),\r\n blackberry10 : match(other_blackberry_10, ua),\r\n opera : match(other_opera, ua),\r\n firefox : match(other_firefox, ua),\r\n chrome : match(other_chrome, ua),\r\n device : match(other_blackberry, ua) || match(other_blackberry_10, ua) || match(other_opera, ua) || match(other_firefox, ua) || match(other_chrome, ua)\r\n };\r\n\r\n this.seven_inch = match(seven_inch, ua);\r\n this.any = this.apple.device || this.android.device || this.windows.device || this.other.device || this.seven_inch;\r\n\r\n // excludes 'other' devices and ipods, targeting touchscreen phones\r\n this.phone = this.apple.phone || this.android.phone || this.windows.phone;\r\n\r\n // excludes 7 inch devices, classifying as phone or tablet is left to the user\r\n this.tablet = this.apple.tablet || this.android.tablet || this.windows.tablet;\r\n\r\n return this;\r\n };\r\n\r\n _.isMobile = new IsMobileClass();\r\n\r\n _.isDesktopLayout = function() {\r\n return window.matchMedia && window.matchMedia('(min-width: 992px)').matches;\r\n };\r\n\r\n _.ping = function() {\r\n return _.ajax.get({\r\n url : '/Ping',\r\n cache : false\r\n });\r\n };\r\n\r\n _.countDown = function(secs, tick, callback) {\r\n var funcObj = function() {\r\n var that = this;\r\n var on = false;\r\n var timer;\r\n\r\n that.left = secs;\r\n\r\n that.count = function() {\r\n if (that.left <= 0) {\r\n $.isFunction(callback) && callback(that);\r\n return;\r\n }\r\n\r\n if ($.isFunction(tick)) {\r\n tick(that.left--);\r\n } else {\r\n that.left--;\r\n }\r\n\r\n if (timer)\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(that.count, 1000);\r\n };\r\n\r\n that.start = function() {\r\n if (!on) {\r\n on = true;\r\n that.count();\r\n }\r\n };\r\n\r\n that.stop = function() {\r\n on = false;\r\n clearTimeout(timer);\r\n };\r\n\r\n that.reset = function() {\r\n that.stop();\r\n that.resetTimer();\r\n that.start();\r\n };\r\n\r\n that.resetTimer = function() {\r\n that.left = secs;\r\n };\r\n };\r\n\r\n return new funcObj();\r\n };\r\n\r\n _.startsWith = function(str, starts) {\r\n if (starts === '') return true;\r\n if (str == null || starts == null) return false;\r\n str = String(str);\r\n starts = String(starts);\r\n return str.length >= starts.length && str.slice(0, starts.length) === starts;\r\n };\r\n\r\n _.endsWith = function(str, ends) {\r\n if (ends === '') return true;\r\n if (str == null || ends == null) return false;\r\n str = String(str);\r\n ends = String(ends);\r\n return str.length >= ends.length && str.slice(str.length - ends.length) === ends;\r\n };\r\n\r\n _.cookie = function (key, value, settings) { // Copied from oMG\r\n settings = $.extend({}, settings);\r\n\r\n var encode = encodeURIComponent;\r\n var decode = decodeURIComponent;\r\n var expires = settings.expires;\r\n var result = value;\r\n\r\n if (!key) {\r\n result = {};\r\n\r\n $.each(document.cookie.split('; '), function (i, cookie) {\r\n if (!cookie)\r\n return;\r\n var parts = cookie.split('=');\r\n result[decode(parts[0])] = JSON.parse(decode(parts[1]));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n key = encode(key);\r\n\r\n if (value === undefined) {\r\n result = new RegExp('(?:^|; )' + key + '=([^;]*)').exec(document.cookie);\r\n return result && JSON.parse(decode(result[1]));\r\n } else {\r\n if (value === null)\r\n expires = -1;\r\n\r\n if (typeof expires === 'number')\r\n expires = new Date((new Date()).getTime() + expires);\r\n\r\n document.cookie = [\r\n key, '=', encode(JSON.stringify(value)),\r\n expires ? '; expires=' + expires.toUTCString() : '',\r\n settings.path ? '; path=' + settings.path : '',\r\n settings.domain ? '; domain=' + settings.domain : '',\r\n settings.secure ? '; secure' : ''\r\n ].join('');\r\n }\r\n\r\n return result;\r\n };\r\n\r\n _.renderThankYouPageAd = function() {\r\n return _.adsRenderConceptX('cncpt-tack_mob1', 'cncpt-tack_lb1');\r\n };\r\n\r\n _.adsRenderConceptX = function (mobileTagId, desktopTagId) {\r\n var tagId = window.matchMedia ? window.matchMedia('(min-width: 992px)').matches ? desktopTagId : mobileTagId : null;\r\n return '
    ';\r\n };\r\n\r\n function extendObject(deep, target, obj) {\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n if (deep) {\r\n if (isObject(obj[key])) {\r\n target[key] = extendObject(true, [target[key], obj[key]]);\r\n } else if (Array.isArray(obj[key]) && Array.isArray(target[key])) {\r\n target[key] = target[key].concat(obj[key]);\r\n } else {\r\n target[key] = obj[key];\r\n }\r\n } else {\r\n target[key] = obj[key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function isObject(obj) {\r\n return Object.prototype.toString.call(obj) === '[object Object]';\r\n }\r\n\r\n _.namespace = _.ns = function(namespace, obj) {\r\n var namespaces = namespace.split('.');\r\n var index = 0;\r\n var lastIndex = namespaces.length - 1;\r\n var container = window;\r\n\r\n for (; index <= lastIndex; index++) {\r\n var current = namespaces[index];\r\n\r\n if (container[current] === undefined) {\r\n if ((index === lastIndex) && isObject(obj)) {\r\n container[current] = obj;\r\n } else {\r\n container[current] = {};\r\n }\r\n } else if (isObject(container[current])) {\r\n if ((index === lastIndex) && isObject(obj)) {\r\n extendObject(true, container[current], obj);\r\n }\r\n } else {\r\n throw ('Invalid namespace \"' + namespaces.slice(0, index + 1).join('.') + '\" is unavailable');\r\n }\r\n\r\n container = container[current];\r\n }\r\n\r\n return container;\r\n };\r\n\r\n _.lilumStartTransaction = function(id) {\r\n try {\r\n window.lilum_startTransaction && lilum_startTransaction('mg_' + id);\r\n } catch {\r\n // Do nothing for now, we just don't want this to cause any errors.\r\n }\r\n };\r\n\r\n _.lilumStopTransaction = function(id) {\r\n try {\r\n window.lilum_stopTransaction && lilum_stopTransaction('mg_' + id);\r\n } catch {\r\n // Do nothing for now, we just don't want this to cause any errors.\r\n }\r\n };\r\n})(jQuery, window);\r\n","(function ($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n const _ = window.mg;\r\n\r\n class RegisterRound {\r\n constructor() {\r\n this.modal = null;\r\n }\r\n\r\n go(slot) {\r\n if (_.user && _.user.HCP == 'N/A') {\r\n _.ui.confirmmodal({\r\n title : _.translations.ContactYourHomeClub,\r\n html : '
    ' + _.translations.PleaseContactYourHomeClubTheyWillRegisterYourFirstHandicapRound + '
    ',\r\n hideAllButtons : true\r\n });\r\n\r\n return;\r\n }\r\n\r\n _.redirect('/Site/HCP/Adjustment' + (slot ? '/?' + $.param(slot) : ''));\r\n }\r\n\r\n gotoEarlierRounds() {\r\n _.redirect('/Site/Calendar/?viewEarlierRounds=1');\r\n }\r\n\r\n open(slot, roundTermTxt, selectRoundTxt) {\r\n if (false) { // This small block can be used to prevent users from starting a HCP registration. It is hardcoded to false for now.\r\n mg.showHandicapRegistrationLockedModal(true);\r\n return;\r\n }\r\n\r\n const pleaseWait = _.ui.showPleaseWaitModal({ delayed: true });\r\n const selectedTeeTime = slot ? slot.time : undefined;\r\n\r\n _.ajax.get('/Site/HCP?Handler=UnregisteredRounds' + (selectedTeeTime ? '&selectedTeeTime=' + slot.time : '')).done((data) => {\r\n pleaseWait.close();\r\n\r\n var hasUncalculatedRound = data && data.HasUncalculatedRound;\r\n var unregisteredRounds = data ? data.Rounds : null;\r\n\r\n if (hasUncalculatedRound) {\r\n this.showRegistrationNotPossible();\r\n return;\r\n }\r\n\r\n if (unregisteredRounds && unregisteredRounds.length > 0) {\r\n let showModal = true;\r\n\r\n if (slot && !slot.slotId && _.cc.textToDateTime(slot.time) <= _.cc.textToDateTime(unregisteredRounds[0].DateTime))\r\n showModal = false;\r\n\r\n if (showModal) {\r\n const renderRow = (round, className, primary) => {\r\n const dateTime = moment(_.cc.textToDateTime(round.DateTime));\r\n\r\n return [\r\n '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    ' + _.cc.formatDate(dateTime) + '
    ',\r\n '
    ' + _.cc.formatTime(dateTime) + '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    ' + round.ClubName + '
    ',\r\n '
    ',\r\n '
    ' + round.CourseName + '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    ',\r\n '',\r\n '
    ',\r\n '
    ',\r\n '
    '\r\n ].join('');\r\n };\r\n\r\n const rows = () => {\r\n const html = [];\r\n const maxRows = 3;\r\n\r\n if (slot) {\r\n html.push(renderRow({ SlotID: slot.slotId, ClubID: slot.clubId, ClubName: slot.clubName, CourseID: slot.courseId, CourseName: slot.courseName, DateTime: slot.time }, 'border-full'));\r\n html.push('
    ' + mg.translations.OlderRounds + '
    ');\r\n }\r\n\r\n for (let i = 0; i < unregisteredRounds.length && i < maxRows; i++) {\r\n html.push(renderRow(unregisteredRounds[i], '', i === 0));\r\n }\r\n\r\n return html.join('');\r\n };\r\n\r\n const html = [\r\n '
    ',\r\n '
    ',\r\n (selectRoundTxt || '') + ' ' + _.translations.PleaseNoteAllRoundsMustBeEnteredInChronologicalOrder.replace('%rounds%', roundTermTxt.toLowerCase()) + '.',\r\n '
    ',\r\n\r\n '
    ',\r\n rows(),\r\n '
    ',\r\n\r\n !slot ? [\r\n '
    ',\r\n '',\r\n '',\r\n '
    '].join('') : '',\r\n '
    ',\r\n ].join('');\r\n\r\n setTimeout(() => {\r\n this.modal = _.ui.actionmodal({\r\n title : _.translations.RegisterHCP,\r\n titleInHeader : true,\r\n html : html,\r\n hideStateIcon : true,\r\n hideFooter : true,\r\n modalBodyFull : true,\r\n className : 'hcp-select-round'\r\n });\r\n }, 800);\r\n\r\n return;\r\n }\r\n }\r\n \r\n this.go(slot);\r\n });\r\n }\r\n\r\n showRegistrationNotPossible(asInfo) {\r\n var modalType = asInfo ? 'infomodal' : 'errormodal';\r\n\r\n $.isFunction(_.ui[modalType]) && _.ui[modalType]({\r\n title: _.translations.RegisterHCP,\r\n html: _.translations.ThereIsARoundThatIsStillBeingCalculatedItMustBeCalculated\r\n });\r\n }\r\n }\r\n\r\n class Scorecard {\r\n constructor() {\r\n\r\n }\r\n\r\n render(props) {\r\n var holes = props.holes;\r\n var scorecardColumns = [];\r\n\r\n var addCol = function (dataProp, title, className, showSums, highlightFunc, highlightCells, titleDesktop) {\r\n var propsCol = props.columns ? props.columns[dataProp] : null; // Columns are identified by their dataProp value\r\n\r\n if (propsCol && propsCol.showSums === false)\r\n showSums = false; // Only set this if it it specifically set to false\r\n\r\n scorecardColumns.push({\r\n dataProp: dataProp,\r\n title: title,\r\n className: className,\r\n showSums: showSums,\r\n highlightFunc: highlightFunc, // TODO - Remove this when we no longer need it\r\n highlightCells: propsCol ? propsCol.highlightCells : highlightCells, // Some columns are always highlighted, and some are only highlighted if the implementation specifies it\r\n renderCell: propsCol ? propsCol.renderCell : undefined,\r\n hideEmptySum: propsCol ? propsCol.hideEmptySum : undefined,\r\n titleDesktop: titleDesktop // In case the column has a different title on desktop\r\n });\r\n };\r\n\r\n addCol('Number', mg.translations.Hole, 'hole', false, function (hole) {\r\n return hole && hole.Strokes;\r\n }, true);\r\n\r\n addCol('Index', mg.translations.Index, 'index');\r\n addCol('Par', mg.translations.Par, 'par', true);\r\n addCol('Strokes', mg.translations.Strokes, 'strokes', true, function () { return true; });\r\n\r\n if (props.columns && props.columns.ExtraStrokes && props.columns.ExtraStrokes.visible) { // Not visible by default\r\n addCol('ExtraStrokes', mg.translations.PHCP, 'phcp', true);\r\n }\r\n \r\n if (!props.columns || !props.columns.AdjustedGross || props.columns.AdjustedGross.visible !== false) { // Visible by default\r\n addCol('AdjustedGross', mg.translations.AdjustedGrossShorter, 'adjusted-gross', true, undefined, undefined, mg.translations.AdjustedGrossShort);\r\n }\r\n\r\n if (!props.columns || !props.columns.Points || props.columns.Points.visible !== false) { // Visible by default\r\n addCol('Points', mg.translations.Points, 'points', true);\r\n }\r\n\r\n var scorecardHTML = [];\r\n var headerCells = [];\r\n\r\n $.each(scorecardColumns, function (k, v) {\r\n var title = v.title;\r\n\r\n if (v.titleDesktop) {\r\n title = [\r\n '
    ' + v.title + '
    ',\r\n '
    ' + v.titleDesktop + '
    '\r\n ].join('');\r\n }\r\n\r\n headerCells.push([\r\n '
    ',\r\n '
    ' + title + '
    ',\r\n '
    ',\r\n ].join(''));\r\n });\r\n\r\n scorecardHTML.push('
    ' + headerCells.join('') + '
    ');\r\n\r\n var scorecardRows = [];\r\n var totals = {};\r\n\r\n var renderColumn = function (col) {\r\n var dataProp = col.dataProp;\r\n var className = col.className;\r\n var showSums = col.showSums && props.showSums !== false;\r\n var hideEmptySum = col.hideEmptySum;\r\n var cells = [];\r\n\r\n var splitCells = mg.hcp.scorecard.shouldSplitCells(holes.length);\r\n\r\n var renderBlock = function (holes, sumIdentifier) {\r\n var sum = 0;\r\n\r\n $.each(holes, function (k, v) {\r\n var highlightClass = '';\r\n\r\n if (col.highlightCells) {\r\n highlightClass = 'highlight';\r\n\r\n if (v.IsPlayed === false) { // Using === false to make sure we don't accidentally hit this block if an implementation doesn't set this property\r\n highlightClass += ' not-in-play';\r\n } else if (!v.Strokes) {\r\n highlightClass += ' faded';\r\n }\r\n\r\n if (props.startHole > 0 && dataProp === 'Number' && v.Number === props.startHole) {\r\n highlightClass += ' active-starthole';\r\n }\r\n }\r\n\r\n cells.push([\r\n '
    ',\r\n '
    ',\r\n $.isFunction(col.renderCell) ? col.renderCell(v, dataProp) : (v[dataProp] !== undefined ? v[dataProp] : ' '),\r\n '
    ',\r\n '
    '\r\n ].join(''));\r\n\r\n sum += v[dataProp] || 0;\r\n });\r\n\r\n if (sumIdentifier) {\r\n renderSum(sum, dataProp + '-' + sumIdentifier);\r\n }\r\n };\r\n\r\n var renderSum = function (sum, sumIdentifier, sumClass, forceShow) {\r\n cells.push([\r\n '
    ',\r\n '
    ' + (sum === undefined || (sum === 0 && hideEmptySum) || (!showSums && !forceShow) ? ' ' : sum) + '
    ', // If we have no value to show, or if we shouldn't show sums for this property, we show an empty cell instead\r\n '
    '\r\n ].join(''));\r\n };\r\n\r\n if (splitCells) {\r\n var splitIndex = holes.length / 2;\r\n var front = holes.slice(0, splitIndex);\r\n var back = holes.slice(splitIndex);\r\n\r\n renderBlock(front, 'front');\r\n renderBlock(back, 'back');\r\n }\r\n else {\r\n renderBlock(holes);\r\n }\r\n\r\n var totalSum = '';\r\n var forceShowTotal = false;\r\n\r\n if (showSums) {\r\n totalSum = 0;\r\n\r\n $.each(holes, function (k, v) {\r\n totalSum += v[dataProp] || 0;\r\n });\r\n\r\n totals[dataProp] = totalSum;\r\n }\r\n else if (dataProp === 'Number') {\r\n totalSum = [\r\n '
    ' + mg.translations.TotalShort + '
    ',\r\n '
    ' + mg.translations.Total + '
    '\r\n ].join('');\r\n \r\n forceShowTotal = true; // Show this sum regardless of what the showSums value says\r\n }\r\n\r\n props.showSums !== false && renderSum(totalSum, dataProp + '-total', 'total2', forceShowTotal);\r\n\r\n scorecardRows.push([\r\n '
    ',\r\n cells.join(''),\r\n '
    '\r\n ].join(''));\r\n };\r\n\r\n $.each(scorecardColumns, function (k, v) {\r\n renderColumn(v);\r\n });\r\n\r\n scorecardHTML.push('
    ' + scorecardRows.join('') + '
    ');\r\n\r\n var scorecardTotals = props.showTotalsRow === false ? '' : this.renderTotalsRow({\r\n playedHoles: props.playedHoles,\r\n totals: totals,\r\n allowAdjustedPointsText: props.allowAdjustedPointsText,\r\n showAddedHolesText: props.playedHoles < props.holes.length\r\n });\r\n\r\n props.$target.append([\r\n '
    ',\r\n '
    ',\r\n scorecardHTML.join(''),\r\n '
    ',\r\n scorecardTotals,\r\n '
    '\r\n ].join(''));\r\n }\r\n\r\n renderTotalsRow(props) {\r\n var scorecardTotals = [];\r\n\r\n var renderTotal = function (title, value, className) {\r\n return [\r\n '
    ',\r\n '' + title + '',\r\n value !== undefined ? ('' + value + '') : '',\r\n '
    '\r\n ].join('');\r\n };\r\n\r\n var showPlayedHolesRow = false;\r\n var resultTitle = mg.translations.Result;\r\n var resultValue = props.playedHoles + ' hål';\r\n var expectedHoles = props.expectedHoles || 18; // This may change one day, but for now a scorecard is always 18 holes (lower than that is adjusted to 18)\r\n var calculateAdjustedPoints = false;\r\n var allowAdjustedPointsText = false;\r\n\r\n if (props.playedHoles < expectedHoles) {\r\n scorecardTotals.push([\r\n '
    ',\r\n renderTotal(mg.translations.PlayedHoles, props.playedHoles + ' hål', 'played-holes'),\r\n '
    '\r\n ].join(''));\r\n\r\n showPlayedHolesRow = true;\r\n resultTitle = '' + mg.translations.ResultXHoles.replace('%num%', 18) + ' (' + mg.translations.Enumerated.toLowerCase() + ')'; // The (uppräknat) part is only shown in desktop, as there is no room for it in mobile\r\n resultValue = '';\r\n calculateAdjustedPoints = props.allowCalculateAdjustedPoints;\r\n allowAdjustedPointsText = props.allowAdjustedPointsText;\r\n }\r\n else if (props.titleOverride) {\r\n resultTitle = props.titleOverride;\r\n resultValue = undefined;\r\n }\r\n\r\n var scorecardTotalRow = [];\r\n\r\n if (!props.minHoles || props.playedHoles >= props.minHoles) {\r\n scorecardTotalRow.push(renderTotal(resultTitle, resultValue, 'result'));\r\n props.showAdjustedGross !== false && scorecardTotalRow.push(renderTotal(mg.translations.AdjustedGrossShort, props.totals['AdjustedGross'], 'adjusted-gross')); // TODO - Maybe just use the pre-calculated value from item\r\n\r\n var points = props.totals['Points'];\r\n var pointsTitle = mg.translations.Points;\r\n\r\n if (calculateAdjustedPoints) {\r\n points += this.calculatePointsForNonPlayedHoles({ playedHoles: props.playedHoles, expectedHoles: expectedHoles }); // Add points for non-played holes, if any\r\n }\r\n\r\n if (calculateAdjustedPoints || allowAdjustedPointsText) {\r\n pointsTitle = mg.translations.AdjustedPointsShort;\r\n }\r\n\r\n points !== undefined && scorecardTotalRow.push(renderTotal(pointsTitle, points, 'points')); // TODO - Maybe just use the pre-calculated value from item\r\n }\r\n\r\n scorecardTotalRow.length && scorecardTotals.push('
    ' + scorecardTotalRow.join('') + '
    ');\r\n\r\n var scorecardAddedHolesText = props.showAddedHolesText ? '
    ' + mg.translations.theResultToGenerateTheHandicapHasBeenAdded + '
    ' : '';\r\n\r\n return [\r\n '
    ',\r\n '
    ' + scorecardTotals.join('') + '
    ',\r\n scorecardAddedHolesText || '',\r\n '
    '\r\n ].join('');\r\n }\r\n\r\n calculatePointsForNonPlayedHoles(props) {\r\n var expectedHoles = props.expectedHoles || 18; // This may change one day, but for now a scorecard is always 18 holes (lower than that is adjusted to 18)\r\n var missingHoles = expectedHoles - props.playedHoles;\r\n return missingHoles > 0 ? (missingHoles * 2) - (props.playedHoles >= 14 ? 0 : 1) : 0; // The formula: 9-13 holes = 2+1, 14-17 holes = 2+2. Assume it means you get a par for each missing hole, except the last one, unless you have played between 14 and 17 holes, in which case you also get a par for the last hole\r\n }\r\n\r\n shouldSplitCells(holeCount) {\r\n return holeCount > 9 && holeCount % 2 === 0;\r\n }\r\n }\r\n\r\n _.hcp = {\r\n registerRound: new RegisterRound(),\r\n scorecard: new Scorecard()\r\n };\r\n})(jQuery, window);\r\n","(function($, window) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n var _ = window.mg;\r\n var baseURL = '/Site/Payment';\r\n\r\n var payment = {\r\n winRef : null,\r\n paymentComplete : false,\r\n\r\n open: function(options) {\r\n var url = baseURL;\r\n\r\n this.paymentComplete = false;\r\n\r\n if (options.receiptOnly)\r\n url += '/Receipt';\r\n\r\n if (!this.winRef || this.winRef.closed) {\r\n var features = [];\r\n\r\n if (!_.isMobile.any && window.matchMedia) {\r\n var screenX = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft;\r\n var screenY = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop;\r\n var outerWidth = typeof window.outerWidth != 'undefined' ? window.outerWidth : document.documentElement.clientWidth;\r\n var outerHeight = typeof window.outerHeight != 'undefined' ? window.outerHeight : document.documentElement.clientHeight - 22;\r\n var width = null;\r\n var height = 500;\r\n\r\n if (window.matchMedia('(min-width: 992px)').matches)\r\n width = 992;\r\n if (window.matchMedia('(min-width: 1200px)').matches)\r\n width = 1200;\r\n\r\n if (width !== null) {\r\n var left = parseInt((screenX < 0 ? window.screen.width + screenX : screenX) + (outerWidth - width) / 2, 10);\r\n var top = parseInt(screenY + (outerHeight - height) / 2.5, 10);\r\n\r\n features.push('width=' + width);\r\n features.push('height=' + height);\r\n features.push('left=' + left);\r\n features.push('top=' + top);\r\n features.push('scrollbars=1');\r\n features.push('toolbar=0');\r\n features.push('location=0');\r\n }\r\n }\r\n\r\n this.winRef = window.open(url + '/' + options.id, 'paymentWindow', features.join(','));\r\n this.createBackOverlay();\r\n\r\n monitor(options.callBackOnClose);\r\n } else if (this.winRef.location.href.indexOf(url) == -1) {\r\n this.winRef.location.href = url;\r\n }\r\n\r\n return this.winRef;\r\n },\r\n\r\n cancel: function(paymentID, closeWindow) {\r\n if (closeWindow || !paymentID)\r\n this.close();\r\n else\r\n this.redirect('', paymentID);\r\n },\r\n\r\n close: function() {\r\n window.close();\r\n },\r\n\r\n navigate: function(page, id, window) {\r\n if (!window)\r\n window = this.winRef;\r\n\r\n window.location.href = baseURL + (page ? '/' + page : '') + '/' + id;\r\n },\r\n\r\n chkPaymentAcceptTermsOnChange: function(target) {\r\n var $target = $(target);\r\n $('#btnPay').prop('disabled', !$target.prop('checked'));\r\n },\r\n\r\n btnPayOnClick: function(paymentID) {\r\n var that = this;\r\n\r\n var o = {\r\n paymentID : paymentID,\r\n address : $('#txtPaymentAddr').val(),\r\n postNumber : $('#txtPaymentZip').val(),\r\n city : $('#txtPaymentCity').val(),\r\n country : $('#txtPaymentCountry').val(),\r\n email : $('#txtPaymentEmail').val()\r\n };\r\n\r\n _.ajax.post('/handlers/payment/UpdateBilling', o).done(function(data) {\r\n if (data) {\r\n that.startPayment(paymentID);\r\n } else {\r\n _.showErrorMessage('Unable to continue', '.payment-js-error', false);\r\n $('html, body').stop().animate({ 'scrollTop': 0 }, 400, 'swing');\r\n }\r\n }).fail(function(jqXHR, textStatus, errorThrown) {\r\n _.showErrorMessage(jqXHR.responseText || errorThrown, '.payment-js-error', false);\r\n $('html, body').stop().animate({ 'scrollTop': 0 }, 400, 'swing');\r\n });\r\n },\r\n\r\n btnCancelOnClick: function(paymentID, closeWindow) {\r\n this.removeBackOverlay();\r\n this.cancel(paymentID, closeWindow);\r\n },\r\n\r\n startPayment: function(paymentID) {\r\n this.redirect('Start', paymentID);\r\n },\r\n\r\n redirect: function(page, paymentID) {\r\n this.navigate(page, paymentID, window);\r\n },\r\n\r\n setPaymentComplete: function() {\r\n var context = getContext();\r\n context.mg.payment.paymentComplete = true;\r\n },\r\n\r\n showTerms: function(mode) {\r\n _.showTerms(mode)\r\n },\r\n\r\n createBackOverlay: function() {\r\n if ($('> #payment-overlay', 'body').length)\r\n return;\r\n\r\n $('body').append('
    ');\r\n\r\n var that = this;\r\n var $overlay = $('> #payment-overlay', 'body');\r\n\r\n $overlay.on('click', function() {\r\n that.winRef && !that.winRef.closed && that.winRef.focus();\r\n });\r\n },\r\n\r\n removeBackOverlay: function() {\r\n var $overlay = $('> #payment-overlay', 'body');\r\n\r\n if (!$overlay.length)\r\n return;\r\n\r\n $overlay.remove();\r\n }\r\n };\r\n\r\n function monitor(callBackOnClose) {\r\n if (!payment.winRef)\r\n return;\r\n\r\n if (payment.winRef.closed) {\r\n payment.winRef = null;\r\n payment.removeBackOverlay();\r\n window.focus();\r\n callBackOnClose && callBackOnClose(payment.paymentComplete);\r\n return;\r\n }\r\n\r\n setTimeout(function() {\r\n monitor(callBackOnClose);\r\n }, 100);\r\n }\r\n\r\n function getContext() {\r\n return window.opener || window;\r\n }\r\n\r\n _.payment = payment;\r\n})(jQuery, window);\r\n","(($, window, undefined) => {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n const _ = window.mg;\r\n\r\n const _iframe = {};\r\n\r\n class ProfileImg {\r\n constructor() {\r\n }\r\n\r\n modal() {\r\n return _.showModal('#modal-profile-img');\r\n }\r\n\r\n register(form) {\r\n _iframe.$form = $(form);\r\n _iframe.$file = $('input[type=\"file\"]', form);\r\n\r\n const $btnBrowse = $('button[data-browser=\"1\"]', '#modal-profile-img');\r\n\r\n _iframe.$file.on('change', () => {\r\n $btnBrowse.prop('disabled', true);\r\n\r\n this.updateImage(2, 'none');\r\n\r\n setTimeout(() => {\r\n const fileName = _iframe.$file.val().toLowerCase();\r\n\r\n if (_.endsWith(fileName, '.jpg') || _.endsWith(fileName, '.png')) {\r\n _iframe.$form.submit();\r\n } else {\r\n this.uploadError('filetypeerror');\r\n }\r\n }, 1000);\r\n });\r\n }\r\n\r\n browse() {\r\n _iframe.$file &&\r\n _iframe.$file.focus() &&\r\n _iframe.$file.click();\r\n }\r\n\r\n delete(confirmed) {\r\n if (!confirmed) {\r\n _.ui.confirmmodal({\r\n html : _.translations.AreYouSureYouWantToRemoveYourProfilePicture,\r\n btnYesOnClick : () => {\r\n this.delete(true);\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n _.ajax.post('/Site/Settings/ContactDetails/IframeProfileInfo?handler=Delete').done(() => {\r\n this.updateImage(0, 'none');\r\n });\r\n }\r\n\r\n uploadError(message) {\r\n const $modal = $('#modal-profile-img');\r\n const $btnBrowse = $('button[data-browser=\"1\"]', $modal);\r\n const $iframe = $('iframe', $modal);\r\n\r\n const html = `
    ` +\r\n message +\r\n `` +\r\n `
    `;\r\n\r\n $btnBrowse.before(html);\r\n $btnBrowse.prop('disabled', false);\r\n $iframe.attr('src', $iframe.attr('src'));\r\n\r\n this.updateImage(0, 'none');\r\n }\r\n\r\n uploadSuccess(message) {\r\n const $modal = $('#modal-profile-img');\r\n const $btnBrowse = $('button[data-browser=\"1\"]', $modal);\r\n const $iframe = $('iframe', $modal);\r\n\r\n $btnBrowse.prop('disabled', false);\r\n $iframe.attr('src', $iframe.attr('src'));\r\n\r\n this.updateImage(1, 'url(' + message + ')');\r\n }\r\n\r\n updateImage(state, image) {\r\n const $rowExists = $('.row[data-state]', '#modal-profile-img');\r\n const $imgExists = $('.profile-img-block[data-state]');\r\n const $img = $('.profile-img');\r\n\r\n $rowExists.attr('data-state', state);\r\n $imgExists.attr('data-state', state);\r\n $img.css('background-image', image);\r\n }\r\n }\r\n\r\n _.profileImg = new ProfileImg();\r\n})(jQuery, window);\r\n","(function ($, window) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n var _ = window.mg;\r\n\r\n _.queue = (function () {\r\n const _maxActive = 2;\r\n var items = [];\r\n\r\n var q = {\r\n activeItems: 0,\r\n addItem: function (item) {\r\n items.push(item);\r\n q.processNext();\r\n },\r\n insertItem: function (item, index) { // Insert an item at a given index (i.e., at the start of the queue)\r\n index = index || 0; // Default to index 0\r\n items.splice(index, 0, item); // Insert item at index, remove 0 items\r\n q.processNext();\r\n },\r\n processNext: function () {\r\n if (q.activeItems < _maxActive) {\r\n var item = items.splice(0, 1)[0];\r\n\r\n if (item) {\r\n q.activeItems++;\r\n if ($.isFunction(item.onBeforeProcess) && item.onBeforeProcess() === false) // Returning false in this method indicates that this item should not be processed further\r\n q.processNext();\r\n\r\n $.isFunction(item.onProcess) && item.onProcess(function () {\r\n q.activeItems--;\r\n q.processNext();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n return q;\r\n })();\r\n})(jQuery, window);","(function($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n const defaults = {\r\n returnFocus : true,\r\n onClear : null,\r\n hideOnBlur : true,\r\n clearOnEscape : true\r\n };\r\n\r\n class Clearer {\r\n constructor(input, options) {\r\n this._$input = $(input);\r\n this._options = $.extend({}, defaults, options);\r\n\r\n return this._$input.data('ui.clearer') || this.init();\r\n }\r\n\r\n init() {\r\n if (this._$input.data('ui.clearer'))\r\n return this;\r\n\r\n this._$clearer = $('');\r\n this._$input.wrap('
    ');\r\n this._$input.after(this._$clearer);\r\n this._$input.data('ui.clearer', this);\r\n\r\n this._$input.on('focus.clearer', (e) => {\r\n if (this._$input.val().length >= 1)\r\n this.update(true);\r\n });\r\n\r\n this._$input.on('blur.clearer', (e) => {\r\n if (this._options.hideOnBlur === true) {\r\n setTimeout(() => {\r\n this.update(false);\r\n }, 50);\r\n }\r\n });\r\n\r\n this._$input.on('keyup.clearer', (e) => {\r\n if (this._options.clearOnEscape === true && e.which === 27) {\r\n this._$input.val('');\r\n\r\n if (this._options.onClear)\r\n this._options.onClear(this._$input);\r\n }\r\n\r\n this.update(this._$input.val().length >= 1);\r\n });\r\n\r\n this._$input.on('input.clearer change.clearer paste.clearer', (e) => {\r\n this.update(this._$input.val().length >= 1);\r\n });\r\n\r\n this._$clearer.on('mousedown.clearer', (e) => {\r\n e.preventDefault();\r\n });\r\n\r\n this._$clearer.on('click.clearer', (e) => {\r\n this._$input.val('');\r\n this.update(false);\r\n\r\n if (this._options.returnFocus === true)\r\n this._$input.focus();\r\n\r\n if (this._options.onClear)\r\n this._options.onClear(this._$input);\r\n\r\n e.preventDefault();\r\n });\r\n\r\n return this;\r\n }\r\n\r\n update(status) {\r\n this._$clearer.attr('data-active', status ? '1' : '0');\r\n\r\n return this;\r\n }\r\n\r\n destroy() {\r\n return Clearer.destroy(this._$input);\r\n }\r\n\r\n static destroy(input) {\r\n const $input = $(input);\r\n const instance = $input.data('ui.clearer');\r\n\r\n if (!instance)\r\n console.warn('The clearer is not initialised');\r\n\r\n instance._$input.off('.clearer');\r\n instance._$input.unwrap('.form-control-clearer-wrapper');\r\n instance._$input.removeData('ui.clearer');\r\n\r\n instance._$clearer.off('.clearer');\r\n instance._$clearer.remove();\r\n\r\n return instance;\r\n }\r\n }\r\n\r\n _.ui.clearer = (input, options) => new Clearer(input, options);\r\n _.ui.clearer.destroy = (input) => Clearer.destroy(input);\r\n})(jQuery, window);\r\n","(function ($, window) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n var _ = window.mg;\r\n\r\n _.ui.favourites = {\r\n instances: {},\r\n set: function (itemHolder, properties) {\r\n var that = this;\r\n var inst = (function () {\r\n var props = $.extend({\r\n maxVisibleElements: 10\r\n }, properties, true);\r\n\r\n props.$itemHolder = $(itemHolder);\r\n props.$txtFilter = $('.templates .mg-input-search-wrapper .mg-input').clone().addClass('search-favorite hide');\r\n props.$btnShowMore = $('.templates .btn-show-more').clone().attr('data-item-holder-class', itemHolder).addClass('hide');\r\n\r\n props.$btnShowMore.on('click', function () {\r\n mg.ui.showMore.onClick(this, props.maxVisibleElements, null, null, props.$itemHolder);\r\n });\r\n\r\n props.$itemHolder.prepend(props.$txtFilter); // Insert first\r\n props.$btnShowMore.insertAfter($('> .favorite:last', props.$itemHolder)); // Insert last\r\n\r\n that.instances[itemHolder] = props;\r\n })();\r\n\r\n this.update(itemHolder); // Make sure to set the right states\r\n return inst;\r\n },\r\n setFilterListener: function (props) {\r\n mg.setTxtSearchBehavior(props.$txtFilter, props.filterElements, props.filterProp, props.filterRIDProp);\r\n },\r\n getInstance: function (itemHolder) {\r\n var $itemHolder = $(itemHolder); // This should allow implementations to specify itemHolder as either a selector or a jQuery element\r\n var id = $itemHolder.attr('id');\r\n return _.ui.favourites.instances['#' + id];\r\n },\r\n update: function (itemHolder) {\r\n var instance = this.getInstance(itemHolder);\r\n\r\n if (instance) {\r\n var props = instance;\r\n var $itemHolder = $(itemHolder);\r\n var $items = $('> .favorite', instance.$itemHolder);\r\n var $hiddenItems = $items.filter('.hide');\r\n var toggled = mg.ui.showMore.getToggled($itemHolder);\r\n\r\n if (!toggled && $items.length > props.maxVisibleElements) {\r\n if (props.$btnShowMore.hasClass('hide')) {\r\n // Show the Filter and Show More\r\n props.$txtFilter.removeClass('hide');\r\n props.$btnShowMore.removeClass('hide');\r\n }\r\n\r\n // Update the count\r\n mg.ui.showMore.setShowMore({ btnShowMore: props.$btnShowMore }, 'more', $hiddenItems.length);\r\n }\r\n else {\r\n // Make sure all items are shown\r\n $items.removeClass('hide');\r\n }\r\n\r\n this.setFilterListener(instance); // Make sure this is updated with any changes to the filterElements\r\n }\r\n }\r\n };\r\n})($, window);\r\n","(function($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n const defaults = {\r\n nextFocus : null\r\n };\r\n\r\n class GolfId {\r\n constructor(input, options) {\r\n this._$input = $(input);\r\n this._options = $.extend({}, defaults, options);\r\n\r\n return this._$input.data('ui.golfid') || this.init();\r\n }\r\n\r\n init() {\r\n if (this._$input.data('ui.golfid'))\r\n return this;\r\n\r\n let option = {\r\n blocks : [6, 3],\r\n delimiter : '-',\r\n numericOnly : true\r\n };\r\n\r\n if (this._options.nextFocus) {\r\n option.onValueChanged = (e) => {\r\n const $nextFocus = $(this._options.nextFocus);\r\n\r\n if ($nextFocus.length && /^\\d{6}-\\d{3}$/.test(e.target.value))\r\n $nextFocus.focus();\r\n };\r\n }\r\n\r\n this._cleave = new Cleave(this._$input, option);\r\n this._$input.data('ui.golfid', this);\r\n\r\n _.ui.clearer(this._$input);\r\n\r\n return this;\r\n }\r\n\r\n destroy() {\r\n return GolfId.destroy(this._$input);\r\n }\r\n\r\n static destroy(input) {\r\n const $input = $(input);\r\n const instance = $input.data('ui.golfid');\r\n\r\n if (!instance)\r\n console.warn('The golfid is not initialised');\r\n\r\n _.ui.clearer.destroy(instance._$input);\r\n\r\n instance._cleave.destroy();\r\n instance._$input.removeData('ui.golfid');\r\n\r\n return instance;\r\n }\r\n }\r\n\r\n _.ui.golfId = (input, options) => new GolfId(input, options);\r\n _.ui.golfId.destroy = (input) => GolfId.destroy(input);\r\n})(jQuery, window);","(($, window, undefined) => {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n class HeaderMomentShowHideObserver {\r\n constructor(element) {\r\n abstractObserver(this, element);\r\n\r\n this.direction = '';\r\n this.lastScrollTop = $(window).scrollTop();\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.delta = 5;\r\n this.defaultState = true;\r\n\r\n this.initOffset();\r\n\r\n return this;\r\n }\r\n\r\n initOffset() {\r\n const cb = () => {\r\n const $headerAds = $('.header-ads', this.element);\r\n const $headerBar = $('.header-main', this.element);\r\n\r\n this.heightAds = $headerAds.length ? $headerAds[0].getBoundingClientRect().height : 0;\r\n this.heightBar = $headerBar.length ? $headerBar[0].getBoundingClientRect().height : 0;\r\n this.offset = this.heightAds + this.heightBar;\r\n\r\n this.element.parent().css('padding-top', this.offset);\r\n\r\n if (!this._initOffsetCB && this.lastScrollTop > this.offset && this.heightAds > 0) {\r\n this._initOffsetCB = true;\r\n setTimeout(() => { this.element.removeClass('header-sticky-absolute'); }, 100);\r\n }\r\n };\r\n\r\n if (!this._adsObserver) {\r\n this._adsObserver = new MutationObserver((mutationsList, observer) => {\r\n cb();\r\n });\r\n\r\n this._adsObserver.observe($('.advertising-content', $('.header-ads', this.element))[0], { attributes: true, childList: true, subtree: true });\r\n }\r\n\r\n cb();\r\n }\r\n\r\n destroy() {\r\n this.element.removeClass('header-moved-up');\r\n this.element.addClass('header-sticky-absolute');\r\n\r\n return this;\r\n }\r\n\r\n checkDirection() {\r\n const nowScrollTop = $(window).scrollTop();\r\n\r\n if (Math.abs(this.lastScrollTop - nowScrollTop) >= this.delta) {\r\n if (nowScrollTop > this.lastScrollTop) {\r\n this.direction = 'down';\r\n } else {\r\n this.direction = 'up';\r\n }\r\n\r\n this.lastScrollTop = nowScrollTop;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n check() {\r\n const navigationOpen = $(document.body).hasClass('navigation-open');\r\n\r\n if (navigationOpen) {\r\n return this;\r\n }\r\n\r\n const scrollTop = $(window).scrollTop();\r\n this.checkDirection();\r\n\r\n const hasAbsolute = this.element.hasClass('header-sticky-absolute');\r\n const hasMovedUp = this.element.hasClass('header-moved-up');\r\n\r\n if (this.direction == 'down') {\r\n switch (true) {\r\n case (scrollTop >= this.offset && hasAbsolute && !hasMovedUp):\r\n this.element.addClass('header-moved-up');\r\n setTimeout(() => { this.element.removeClass('header-sticky-absolute'); }, 100);\r\n break;\r\n\r\n case (scrollTop >= this.offset && !hasAbsolute && !hasMovedUp):\r\n this.element.addClass('header-moved-up');\r\n break;\r\n }\r\n } else if (this.direction == 'up') {\r\n const isHigher = window.matchMedia('(min-height: 900px)').matches;\r\n\r\n switch (true) {\r\n case (scrollTop >= this.offset && hasMovedUp):\r\n this.element.removeClass('header-moved-up');\r\n break;\r\n\r\n case (scrollTop <= this.heightAds && !hasAbsolute && !isHigher):\r\n this.element.removeClass('header-moved-up');\r\n this.element.addClass('header-sticky-absolute');\r\n break;\r\n\r\n case (scrollTop <= this.heightAds && !hasAbsolute && isHigher):\r\n this.element.removeClass('header-moved-up');\r\n this.element.addClass('header-sticky-absolute');\r\n break;\r\n\r\n case (scrollTop == 0 && !hasAbsolute && isHigher):\r\n this.element.removeClass('header-moved-up');\r\n this.element.addClass('header-sticky-absolute');\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n }\r\n\r\n class Header {\r\n constructor(element, config, observers) {\r\n this.element = element;\r\n this.config = config;\r\n\r\n this.observers = observers && $.isPlainObject(observers) ? observers : {};\r\n\r\n this.viewport = 'xs';\r\n this.checkViewport();\r\n }\r\n\r\n checkViewport() {\r\n const width = $(window).width();\r\n\r\n if (width > this.config.breakpointsMap['sm'] && this.observers['sm'] && this.observers['sm'].length) {\r\n this.prevViewport = this.viewport;\r\n this.viewport = 'sm';\r\n return this;\r\n }\r\n\r\n if (width > this.config.breakpointsMap['md'] && this.observers['md'] && this.observers['md'].length) {\r\n this.prevViewport = this.viewport;\r\n this.viewport = 'md';\r\n return this;\r\n }\r\n\r\n if (width > this.config.breakpointsMap['lg'] && this.observers['lg'] && this.observers['lg'].length) {\r\n this.prevViewport = this.viewport;\r\n this.viewport = 'lg';\r\n return this;\r\n }\r\n\r\n if (width > this.config.breakpointsMap['xl'] && this.observers['xl'] && this.observers['xl'].length) {\r\n this.prevViewport = this.viewport;\r\n this.viewport = 'xl';\r\n return this;\r\n }\r\n\r\n this.prevViewport = this.prevViewport ? this.viewport : this.prevViewport;\r\n this.viewport = 'xs';\r\n return this;\r\n }\r\n\r\n notify() {\r\n if (this.prevViewport) {\r\n this.observers[this.prevViewport].forEach((observer) => {\r\n observer.destroy();\r\n });\r\n\r\n this.prevViewport = null;\r\n }\r\n\r\n this.observers[this.viewport].forEach((observer) => {\r\n observer.check();\r\n });\r\n\r\n return this;\r\n }\r\n\r\n update() {\r\n for (let viewport in this.observers) {\r\n this.observers[viewport].forEach((observer) => {\r\n observer.destroy();\r\n });\r\n }\r\n\r\n this.prevViewport = null;\r\n\r\n this.observers[this.viewport].forEach((observer) => {\r\n observer.reinit();\r\n });\r\n\r\n return this;\r\n }\r\n }\r\n\r\n const abstractObserver = (target, element) => {\r\n target.element = element;\r\n target.defaultState = true;\r\n\r\n target.reinit = () => {\r\n target\r\n .destroy()\r\n .init()\r\n .check();\r\n };\r\n };\r\n\r\n const detectObservers = (element) => {\r\n const observers = {\r\n xs: []\r\n };\r\n\r\n // ------------------------ xs -------------------------\r\n // Sticky top\r\n if (element.hasClass('header-sticky-top')) {\r\n if (element.hasClass('header-show-hide')) {\r\n observers['xs'].push(new HeaderMomentShowHideObserver(element));\r\n }\r\n }\r\n\r\n return observers;\r\n };\r\n\r\n const init = (target) => {\r\n const $target = $(target);\r\n\r\n if (!$target || $target.length !== 1 || $target.data('Header')) return;\r\n\r\n const baseConfig = {\r\n breakpointsMap: {\r\n md: 768,\r\n sm: 576,\r\n lg: 992,\r\n xl: 1200\r\n }\r\n };\r\n\r\n const config = $.extend(true, {}, baseConfig, $target.data());\r\n const observers = detectObservers($target);\r\n\r\n $target.data('Header', new Header($target, config, observers));\r\n\r\n let resizeTimeOutId;\r\n let windowW = window.innerWidth;\r\n\r\n const $window = $(window);\r\n\r\n $window\r\n .on('load.ui-header', () => {\r\n $window\r\n .on('scroll.ui-header', (e) => {\r\n $target\r\n .data('Header')\r\n .notify();\r\n })\r\n .on('resize.ui-header orientationchange.ui-header', (e) => {\r\n if (resizeTimeOutId) clearTimeout(resizeTimeOutId);\r\n\r\n resizeTimeOutId = setTimeout(() => {\r\n $target\r\n .data('Header')\r\n .checkViewport();\r\n }, 100);\r\n });\r\n\r\n $window\r\n .on('resize.ui-header orientationchange.ui-header', () => {\r\n if (window.innerWidth === windowW) return;\r\n\r\n windowW = window.innerWidth;\r\n\r\n if (resizeTimeOutId) clearTimeout(resizeTimeOutId);\r\n\r\n resizeTimeOutId = setTimeout(() => {\r\n $target\r\n .data('Header')\r\n .update();\r\n }, 100);\r\n });\r\n });\r\n };\r\n\r\n _.ui.header = {\r\n init\r\n };\r\n})(jQuery, window);\r\n","(function ($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n var disabledElements = [];\r\n\r\n _.ui.helpers = {\r\n renderPrice(price, paid, forceOneLine) {\r\n return [\r\n '
    ',\r\n '
    ' + price + '
    ',\r\n paid ? [\r\n '
    ',\r\n '',\r\n '' + mg.translations.Paid + '',\r\n '
    '\r\n ].join('') : '',\r\n '
    '\r\n ].join('');\r\n }\r\n\r\n , disableUI(view, restore) {\r\n\r\n if (restore) {\r\n $.each(disabledElements, function(k, v) {\r\n var $v = $(v);\r\n if ($v.hasClass('btn') && $v.hasClass('dropdown-toggle')) {\r\n $v.removeClass('disabled')\r\n } else {\r\n if ($v.hasClass('button')) {\r\n $v.removeClass('is-disabled');\r\n } else {\r\n $v.prop('disabled', false);\r\n }\r\n }\r\n });\r\n \r\n disabledElements = [];\r\n return;\r\n }\r\n $('input,select,.button,.btn', view).filter(':not(:disabled):not(.is-disabled):not(.disabled)').each(function(k, v) {\r\n disabledElements.push(v);\r\n \r\n var $v = $(v);\r\n if ($v.hasClass('btn') && $v.hasClass('dropdown-toggle')) {\r\n $v.addClass('disabled')\r\n } else {\r\n if ($v.hasClass('button')) {\r\n $v.addClass('is-disabled');\r\n } else {\r\n $v.prop('disabled', true);\r\n }\r\n }\r\n });\r\n }\r\n , isCharacterKeyPress(evt) {\r\n var tab_key_code = 9;\r\n const keycode = evt.keyCode ?? tab_key_code;\r\n //Notice: This is not a complete implementation.\r\n if (keycode<=46 && ((keycode >= 37 && keycode <= 40) || (keycode >= 16 && keycode <= 18 ) || keycode==8 || keycode==9 || (keycode >= 33 && keycode <= 36 ) || keycode==46 || keycode==45)) {\r\n return false;\r\n }\r\n return true;\r\n \r\n }\r\n\r\n }\r\n\r\n})(jQuery, window);\r\n","(function ($, window, undefined) { // Inspired by the old MinGolf\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n var _ = window.mg;\r\n\r\n function _modal(options) {\r\n var props = $.extend(true, {\r\n dismissOnEsc: false,\r\n dismissOnOverlayClick: true,\r\n id: (options.idPrefix || 'modal') + _.getUniqueNumber(10),\r\n inline: false,\r\n hideClose: false,\r\n hideCloseText: false,\r\n hideFooter: false,\r\n hideHeader: false,\r\n hideButtonOK: false,\r\n hideButtonCancel: true,\r\n hideStateIcon: false,\r\n href: undefined, // If inline, clone the href element. Else, the idea is that we can retrieve the content with a get request, but that is not necessary yet\r\n html: null,\r\n innerOnClose: null,\r\n innerOnOpen: null,\r\n modal: undefined, // We expect this to be a jQuery object. If this is set, we use that instead of genereting the modal on our own\r\n modalBodyFull: false, // If this is true, the modal body stretches to the edges\r\n onClose: null,\r\n onOpen: null,\r\n title: 'System',\r\n titleInHeader: false,\r\n type: undefined,\r\n state: 'info',\r\n style: '',\r\n width: undefined,\r\n wide: false\r\n }, options);\r\n\r\n var existingModal = props.modal !== undefined;\r\n\r\n if (!existingModal) {\r\n var $modal = $('.templates .mg-modal-wrapper > .modal').clone();\r\n $modal.attr('id', props.id);\r\n\r\n if (props.className)\r\n $modal.addClass(props.className);\r\n\r\n if (props.state) {\r\n $modal.removeClass('action info error');\r\n $modal.addClass(props.state);\r\n }\r\n\r\n if (props.modalBodyFull)\r\n $modal.addClass('modal-body-full');\r\n\r\n if (props.wide) {\r\n $modal.addClass('modal-wide');\r\n }\r\n\r\n if (props.hideStateIcon)\r\n $modal.find('.modal-body-title > .icon').remove();\r\n\r\n if (props.title)\r\n $modal.find(props.titleInHeader ? '.modal-header > .modal-title' : '.modal-body-title > span').html(props.title);\r\n\r\n if (!props.showSpinner)\r\n $modal.find('.spinner-holder').remove();\r\n\r\n var content = '';\r\n\r\n if (props.html) {\r\n content = props.html;\r\n }\r\n else if (props.inline && props.href) {\r\n var elem = $(props.href);\r\n content += elem.length > 0 ? elem[0].outerHTML : '';\r\n }\r\n\r\n if (content)\r\n $modal.find('.modal-body').append(content);\r\n\r\n if (props.hideFooter)\r\n $modal.find('.modal-footer').remove();\r\n\r\n if (props.hideButtonCancel)\r\n $modal.find('.modal-footer .btn-cancel').remove();\r\n\r\n if (props.hideButtonOK)\r\n $modal.find('.modal-footer .btn-ok').remove();\r\n\r\n $('body').append($modal);\r\n }\r\n else {\r\n if (!options.id)\r\n props.id = props.modal.attr('id'); // Circumvent the auto-generated id\r\n\r\n if (options.dismissOnOverlayClick === undefined)\r\n props.dismissOnOverlayClick = props.modal.attr('data-dismiss-on-overlay-click') === 'true';\r\n\r\n if (options.dismissOnEsc === undefined)\r\n props.dismissOnEsc = props.modal.attr('data-dismiss-on-esc') === 'true';\r\n }\r\n\r\n var $elem = $('#' + props.id);\r\n $elem.on('shown.bs.modal', function (event) {\r\n onModalShown(event);\r\n $.isFunction(props.innerOnOpen) && props.innerOnOpen(props);\r\n $.isFunction(props.onOpen) && props.onOpen(props);\r\n });\r\n\r\n $elem.modal({\r\n backdrop: props.dismissOnOverlayClick ? true : 'static', // Default to static. If it has been specified that the modal should close when you click outside it, we set backdrop to undefined\r\n keyboard: props.dismissOnEsc === true\r\n }).on('hidden.bs.modal', function (event) {\r\n onModalHidden(event);\r\n $.isFunction(props.innerOnClose) && props.innerOnClose();\r\n $.isFunction(props.onClose) && props.onClose();\r\n\r\n !existingModal && $('#' + props.id).remove();\r\n });\r\n\r\n return $.extend(true, props, { // Add functions\r\n addButton: function (id, text, onClick, className) {\r\n $('#' + props.id + ' .modal-footer').append('');\r\n },\r\n close: function () {\r\n closeModal(props);\r\n },\r\n disabledElements: [],\r\n lock: function (restore) {\r\n var that = this;\r\n var setDisabled = function ($elem, disabled) {\r\n $elem.attr('disabled', disabled);\r\n };\r\n\r\n if (restore === true) {\r\n $.each(this.disabledElements, function (k, v) {\r\n setDisabled($(v), false);\r\n });\r\n\r\n that.disabledElements = [];\r\n }\r\n else {\r\n var elementsSelector = '*'; // We may want to replace this with a proper selector at some point, but for now we want to hit all elements\r\n\r\n $(elementsSelector, '#' + props.id).each(function () { // Only do this if the element was not already disabled (otherwise it might be enabled on restore)\r\n var $elem = $(this);\r\n\r\n if (!$elem.attr('disabled')) {\r\n that.disabledElements.push(this);\r\n setDisabled($elem, true);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n function closeModal(props) {\r\n $('#' + props.id).modal('hide'); // Should trigger the hidden.bs.modal event\r\n }\r\n\r\n function getModalOpener(props) {\r\n return {\r\n close: function () {\r\n closeModal(props);\r\n }\r\n };\r\n }\r\n\r\n _.ui.systemmodalOpener = null;\r\n _.ui.systemmodal = function (options) {\r\n var props = $.extend(true, {\r\n idPrefix: 'systemModal',\r\n innerOnClose: function () {\r\n _.ui.systemmodalOpener = null;\r\n },\r\n innerOnOpen: function (props) {\r\n _.ui.systemmodalOpener = getModalOpener(props);\r\n },\r\n type: 'systemmodal'\r\n }, options);\r\n\r\n return _modal(props);\r\n }\r\n\r\n _.ui.minimodalOpener = null;\r\n _.ui.minimodal = function (options) {\r\n var props = $.extend(true, {\r\n hideButtonCancel: false, // Show this by default\r\n idPrefix: 'miniModal',\r\n innerOnClose: function () {\r\n _.minimodalOpener = null;\r\n },\r\n innerOnOpen: function (props) {\r\n _.ui.minimodalOpener = getModalOpener(props);\r\n },\r\n type: 'minimodal'\r\n }, options);\r\n\r\n return _modal(props);\r\n };\r\n\r\n _.ui.showPleaseWaitModal = function (options) { // The options object for this function is different from the other functions\r\n var props = $.extend(true, {\r\n delayed: false,\r\n dismissOnOverlayClick: false,\r\n text: '',\r\n title: _.translations.PleaseWait,\r\n showTitle: true,\r\n hideClose: true,\r\n onOpen: undefined,\r\n onClose: undefined\r\n }, options);\r\n\r\n var canCloseModal = false;\r\n var closeModal = false;\r\n var pleaseWaitModal = null;\r\n\r\n var pleaseWaitTimeout = setTimeout(function () {\r\n pleaseWaitModal = _.ui.systemmodal({ hideHeader: !props.showTitle, hideClose: props.hideClose, hideFooter: true, hideStateIcon: true, className: 'wait-modal', showSpinner: true, html: props.text ? '

    ' + props.text + '

    ' : '', title: props.title, dismissOnOverlayClick: props.dismissOnOverlayClick,\r\n onOpen: function () {\r\n canCloseModal = true;\r\n\r\n if (closeModal)\r\n pleaseWaitModal.close();\r\n },\r\n onClose: function () { // Reset state\r\n canCloseModal = false;\r\n closeModal = false;\r\n }\r\n });\r\n }, props.delayed ? 500 : 1);\r\n\r\n return {\r\n close: function () {\r\n clearTimeout(pleaseWaitTimeout);\r\n\r\n if (canCloseModal && pleaseWaitModal) // The pleaseWaitModal can't be closed until it's rendered (unless we make it in time to stop the timeout)\r\n pleaseWaitModal.close();\r\n else\r\n closeModal = true;\r\n },\r\n onReadyInterval: null,\r\n onReady: function (callback) { // Implementations can wait for the modal to be shown before they perform any actions\r\n if (pleaseWaitModal) {\r\n if (this.onReadyInterval)\r\n clearInterval(this.onReadyInterval);\r\n\r\n $.isFunction(callback) && callback(pleaseWaitModal);\r\n }\r\n else {\r\n this.onReadyInterval = setInterval(function () {\r\n this.onReady(callback);\r\n }, 25);\r\n }\r\n }\r\n };\r\n };\r\n\r\n _.ui.statemodal = function(options) {\r\n return _.ui.minimodal($.extend(true, {\r\n hideButtonCancel: true,\r\n html: '',\r\n title: '',\r\n titleInHeader: false\r\n }, options));\r\n };\r\n\r\n _.ui.errormodal = function (options) {\r\n return _.ui.statemodal($.extend(true, {\r\n dismissOnOverlayClick: false,\r\n hideFooter: true,\r\n state: 'error'\r\n }, options));\r\n };\r\n\r\n _.ui.actionmodal = function (options) {\r\n return _.ui.statemodal($.extend(true, {\r\n state: 'action'\r\n }, options));\r\n };\r\n\r\n _.ui.confirmmodal = function(options) {\r\n var modal = _.ui.actionmodal($.extend(true, {\r\n title: mg.translations.AreYouSure,\r\n hideButtonOK: true,\r\n hideButtonCancel: true,\r\n useOKCancel: false\r\n }, options));\r\n\r\n var btnClass = 'btn btn-primary btn-outline-white';\r\n var btnYesText = options.btnYesText ? options.btnYesText : (options.useOKCancel ? _.translations.OK : _.translations.Yes);\r\n var btnNoText = options.btnNoText ? options.btnNoText : (options.useOKCancel ? _.translations.Cancel : _.translations.No);\r\n var btnYesId = options.useOKCancel ? 'btnConfirmOK' : 'btnConfirmYes';\r\n var btnNoId = options.useOKCancel ? 'btnConfirmCancel' : 'btnConfirmNo';\r\n\r\n if (!options.hideAllButtons) {\r\n modal.addButton(modal.id + '_' + btnYesId, btnYesText, null, btnClass);\r\n modal.addButton(modal.id + '_' + btnNoId, btnNoText, null, btnClass);\r\n\r\n $('#' + modal.id + '_' + btnYesId).on('click', function () {\r\n $.isFunction(options.btnYesOnClick) && options.btnYesOnClick();\r\n\r\n modal && modal.close(); // Close the modal\r\n });\r\n\r\n $('#' + modal.id + '_' + btnNoId).on('click', function () {\r\n $.isFunction(options.btnNoOnClick) && options.btnNoOnClick();\r\n\r\n modal && modal.close(); // Close the modal\r\n });\r\n }\r\n\r\n return modal;\r\n };\r\n\r\n _.ui.infomodal = function(options) {\r\n var modal = _.ui.statemodal($.extend(true, {\r\n hideButtonOK: true,\r\n hideStateIcon: true,\r\n state: 'info'\r\n }, options));\r\n\r\n if (!modal.hideButtonOK)\r\n $('.btn-ok', '#' + modal.id).removeClass('btn-outline-white btn-primary');\r\n\r\n return modal;\r\n };\r\n\r\n // Generic modal events (Inspired by miles-by-motorcycle.com/static/bootstrap-modal/index.html) (Mostly copied from oMG)\r\n function onModalShown(event) {\r\n var $modal = $(event.target);\r\n\r\n // Keep track of the number of open modals\r\n var openModalsCount = $('body').data('fv_open_modals');\r\n\r\n if (typeof (openModalsCount) === 'undefined') {\r\n openModalsCount = 0;\r\n }\r\n\r\n // If the z-index of this modal has been set, ignore\r\n if ($modal.hasClass('fv-modal-stack'))\r\n return;\r\n\r\n $modal.addClass('fv-modal-stack');\r\n\r\n $('body').data('fv_open_modals', openModalsCount + 1);\r\n\r\n $modal.css('z-index', 3000 + (10 * openModalsCount));\r\n\r\n $('.modal-backdrop').not('.fv-modal-stack').css('z-index', 2995 + (10 * openModalsCount)).addClass('fv-modal-stack');\r\n }\r\n\r\n function onModalHidden(event) {\r\n var $modal = $(event.target);\r\n $modal.removeClass('fv-modal-stack');\r\n $('body').data('fv_open_modals', $('body').data('fv_open_modals') - 1);\r\n\r\n // Attempt to run enforeFocus on the previous modal, if any. We added a .off to enforceFocus, so the previous modal's focusin events were cleared to avoid overlaps. This will set that modals focusin events again after we close this modal\r\n var currentlyOpenModals = getCurrentlyOpenModals();\r\n\r\n if (currentlyOpenModals && currentlyOpenModals.length > 0) {\r\n var prevModal = $(currentlyOpenModals[currentlyOpenModals.length - 1]).data('bs.modal');\r\n\r\n prevModal._checkScrollbar();\r\n prevModal._setScrollbar();\r\n prevModal._adjustDialog();\r\n\r\n prevModal._enforceFocus();\r\n }\r\n }\r\n\r\n function getCurrentlyOpenModals() {\r\n return $('.modal:visible');\r\n }\r\n})(jQuery, window, undefined);\r\n","(($, window, undefined) => {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n const selector = {\r\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top, .header:not(.header-sticky-absolute)',\r\n STICKY_CONTENT : '.sticky-top'\r\n };\r\n\r\n class Navigation {\r\n constructor() {\r\n this._navigation = null;\r\n this._header = null;\r\n this._backdrop = null;\r\n this._isShown = false;\r\n this._isBodyOverflowing = false;\r\n this._scrollbarWidth = 0;\r\n }\r\n\r\n init(navigation, header) {\r\n this._navigation = $(navigation);\r\n this._header = $(header);\r\n\r\n let resizeTimeOutId;\r\n let windowW = window.innerWidth;\r\n\r\n $(window)\r\n .on('resize.ui-navigation orientationchange.ui-navigation', () => {\r\n if (!this._isShown || window.innerWidth === windowW) return;\r\n\r\n windowW = window.innerWidth;\r\n\r\n if (resizeTimeOutId) clearTimeout(resizeTimeOutId);\r\n\r\n resizeTimeOutId = setTimeout(() => {\r\n this._setTopPosition();\r\n }, 100);\r\n });\r\n }\r\n\r\n show() {\r\n this._isShown = true;\r\n\r\n this._checkScrollbar();\r\n this._setScrollbar();\r\n this._showBackdrop();\r\n this._setTopPosition();\r\n\r\n $(document.body).addClass('navigation-open');\r\n }\r\n\r\n hide() {\r\n this._isShown = false;\r\n\r\n this._resetScrollbar();\r\n this._removeBackdrop();\r\n\r\n $(document.body).removeClass('navigation-open');\r\n }\r\n\r\n toggle() {\r\n if (this._isShown)\r\n this.hide();\r\n else\r\n this.show();\r\n }\r\n\r\n itemClick(target, func) {\r\n if (target.getAttribute('disabled') === 'disabled') {\r\n _.showInactiveMembershipInfo();\r\n } else {\r\n if ($.isFunction(func))\r\n func();\r\n else if (typeof func === 'string')\r\n eval(func);\r\n }\r\n\r\n this.toggle();\r\n }\r\n\r\n _checkScrollbar() {\r\n const rect = document.body.getBoundingClientRect();\r\n\r\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\r\n this._scrollbarWidth = _.getScrollbarWidth();\r\n }\r\n\r\n _setScrollbar() {\r\n const $body = $(document.body);\r\n\r\n if (this._isBodyOverflowing) {\r\n const fixedContent = [].slice.call(document.querySelectorAll(selector.FIXED_CONTENT));\r\n const stickyContent = [].slice.call(document.querySelectorAll(selector.STICKY_CONTENT));\r\n\r\n $(fixedContent).each((index, element) => {\r\n const actualPadding = element.style.paddingRight;\r\n const calculatedPadding = $(element).css('padding-right');\r\n\r\n $(element)\r\n .data('padding-right', actualPadding)\r\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`);\r\n });\r\n\r\n $(stickyContent).each((index, element) => {\r\n const actualMargin = element.style.marginRight;\r\n const calculatedMargin = $(element).css('margin-right');\r\n\r\n $(element)\r\n .data('margin-right', actualMargin)\r\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`);\r\n });\r\n\r\n const bodyActualPadding = document.body.style.paddingRight;\r\n const bodyCalculatedPadding = $body.css('padding-right');\r\n\r\n $body\r\n .data('padding-right', bodyActualPadding)\r\n .css('padding-right', `${parseFloat(bodyCalculatedPadding) + this._scrollbarWidth}px`);\r\n }\r\n }\r\n\r\n _resetScrollbar() {\r\n const fixedContent = [].slice.call(document.querySelectorAll(selector.FIXED_CONTENT));\r\n const stickyContent = [].slice.call(document.querySelectorAll(selector.STICKY_CONTENT));\r\n\r\n $(fixedContent).each((index, element) => {\r\n const padding = $(element).data('padding-right');\r\n\r\n $(element).removeData('padding-right');\r\n element.style.paddingRight = padding ? padding : '';\r\n });\r\n\r\n $(stickyContent).each((index, element) => {\r\n const margin = $(element).data('margin-right');\r\n\r\n $(element).removeData('margin-right');\r\n element.style.marginRight = margin ? margin : '';\r\n });\r\n\r\n const $body = $(document.body);\r\n const bodyPadding = $body.data('padding-right');\r\n\r\n $body.removeData('padding-right');\r\n document.body.style.paddingRight = bodyPadding ? bodyPadding : '';\r\n }\r\n\r\n _showBackdrop() {\r\n this._backdrop = $('
    ');\r\n this._backdrop.on('click', () => {\r\n this.hide();\r\n });\r\n\r\n $(document.body).append(this._backdrop);\r\n }\r\n\r\n _removeBackdrop() {\r\n if (this._backdrop) {\r\n this._backdrop.remove();\r\n this._backdrop = null;\r\n }\r\n }\r\n\r\n _setTopPosition() {\r\n let top = this._header[0].getBoundingClientRect().height - $(window).scrollTop();\r\n\r\n if (!this._header.hasClass('header-sticky-absolute')) {\r\n top = $('.header-bar', this._header)[0].getBoundingClientRect().height;\r\n }\r\n\r\n this._navigation.css('top', top);\r\n this._backdrop.css('top', top);\r\n }\r\n }\r\n\r\n _.ui.navigation = new Navigation();\r\n})(jQuery, window);\r\n","(function($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n var _ = window.mg;\r\n\r\n _.ui.overlayOpener = null;\r\n\r\n _.ui.overlay = function(options) {\r\n var props = $.extend(true, {\r\n inline : false,\r\n hideButtonCancel : false,\r\n href : undefined, // If inline, clone the href element. Else, the idea is that we can retrieve the content with a get request, but that is not made yet (considered for the forgot-password feature)\r\n innerOnClose : null,\r\n innerOnOpen : null,\r\n instantSpinner : false,\r\n onClose : null,\r\n onOpen : null,\r\n overlay : undefined, // We expect this to a jQuery object. If this is set, we use that instead of generating the overlay on our own\r\n title : '',\r\n showConfirmOnClose : false,\r\n confirmTitle : _.translations.AreYouSure,\r\n confirmCloseText : _.translations.AreYouSure,\r\n confirmBtnYesText : undefined,\r\n confirmBtnNoText : undefined,\r\n footer : null\r\n }, options);\r\n\r\n var disabledElements = [];\r\n var spinnerModal = null;\r\n var confirmModal = null;\r\n\r\n var spinner = function (str, timeout) {\r\n if (str === 'show') {\r\n spinnerModal = _.ui.showPleaseWaitModal();\r\n } else if (str === 'hide') {\r\n spinnerModal.close();\r\n }\r\n };\r\n\r\n var $overlay = $('
    '); // Create an empty node to make use of jQuery's helper functions\r\n\r\n _.ui.overlayOpener = $.extend(true, props, {\r\n addButton: function(id, text, onClick) {\r\n $('.overlay-footer-inner', '#' + props.id).append('');\r\n },\r\n\r\n close: function(confirmed) { // This function is fairly generic for now, and one could argue that it could be placed on a more generic level. It is done this way, though, to mirror the modal implementation\r\n if (confirmed) {\r\n if (props.existingOverlay) { // Standalone page, go back one step\r\n _.gaEvent('Overlay_close', 'Overlay', null);\r\n\r\n var redirectURL = props.defaultOnCloseURL ? props.defaultOnCloseURL : '/';\r\n\r\n if (props.onClosePages && document.referrer) {\r\n var pages = props.onClosePages.split(';');\r\n var origin = location.origin;\r\n var ref = document.referrer;\r\n var prevPage = ref.substring(ref.indexOf(origin) + origin.length);\r\n\r\n $.each(pages, function (k, v) {\r\n var isMatch = false;\r\n\r\n if (v === '/')\r\n isMatch = prevPage === v; // When checking for the root, we need an exact match.\r\n else\r\n isMatch = prevPage.indexOf(v) > -1;\r\n\r\n if (isMatch) {\r\n redirectURL = v;\r\n return false; // Break the v-loop\r\n }\r\n });\r\n }\r\n\r\n mg.redirect(redirectURL);\r\n }\r\n else {\r\n confirmModal && confirmModal.close();\r\n var $overlay = $('#' + props.id);\r\n\r\n $('body').attr('data-overlay', 'overlay closing');\r\n $overlay.attr('data-active', '0');\r\n\r\n setTimeout(function() {\r\n $('body').removeAttr('data-overlay');\r\n $(window).off('.ui-overlay');\r\n\r\n $.isFunction(props.onClose) && props.onClose(props);\r\n $overlay.remove();\r\n\r\n _.ui.overlayOpener = null;\r\n\r\n _.gaEvent('Overlay_close', 'Overlay', null);\r\n }, 400);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (props.showConfirmOnClose) {\r\n var that = this;\r\n confirmModal = _.ui.confirmmodal({ title: props.confirmTitle, html: props.confirmCloseText, btnYesText: props.confirmBtnYesText, btnNoText: props.confirmBtnNoText, btnYesOnClick: function () {\r\n that.close(true); // Close the overlay\r\n }});\r\n } else {\r\n this.close(true);\r\n }\r\n },\r\n\r\n disableInnerContent: function(restore) {\r\n var setDisabled = function($elem, disabled) {\r\n $elem.attr('disabled', disabled);\r\n };\r\n\r\n if (restore === true) {\r\n $.each(disabledElements, function(k, v) {\r\n setDisabled($(v), false);\r\n });\r\n\r\n disabledElements = [];\r\n } else {\r\n var elementsSelector = '*'; // We may want to replace this with a proper selector at some point, but for now we want to hit all elements\r\n $(elementsSelector, '#' + props.id).each(function() {\r\n var $elem = $(this);\r\n\r\n if (!$elem.attr('disabled')) { // Only do this if the element was not already disabled (otherwise it might be enabled on restore)\r\n disabledElements.push(this);\r\n setDisabled($elem, true);\r\n }\r\n })\r\n }\r\n },\r\n\r\n spinner: spinner,\r\n\r\n setConfirmOnClose: function(val) {\r\n this.showConfirmOnClose = val !== undefined ? val : true;\r\n },\r\n\r\n setState: function(val) {\r\n $('#' + (props.id ? props.id : props.overlay && props.overlay.length ? props.overlay[0].id : '')).attr('data-state', val);\r\n },\r\n\r\n resetState: function() {\r\n $('#' + (props.id ? props.id : props.overlay && props.overlay.length ? props.overlay[0].id : '')).attr('data-state', 'default');\r\n }\r\n });\r\n\r\n var init = function() {\r\n props.id = props.overlay.attr('id'); // Pluck out the id from the overlay\r\n\r\n $('body').attr('data-overlay', 'overlay showing');\r\n $('#' + props.id).attr('data-active', '1');\r\n\r\n setTimeout(function() {\r\n $('body').attr('data-overlay', 'overlay shown');\r\n\r\n $.isFunction(props.innerOnOpen) && props.innerOnOpen(props);\r\n $.isFunction(props.onOpen) && props.onOpen(props);\r\n }, 400);\r\n\r\n _.ui.overlayOpener.target = $('#' + props.id)[0];\r\n };\r\n\r\n $('body').attr('data-overlay', 'overlay');\r\n\r\n if (props.overlay !== undefined) {\r\n props.existingOverlay = true;\r\n init();\r\n _.gaEvent('Overlay_open', 'Overlay', null);\r\n } else if (props.inline) {\r\n $overlay.empty();\r\n $(props.href).clone().appendTo($overlay); // Append a clone\r\n\r\n init();\r\n _.gaEvent('Overlay_open', 'Overlay', null);\r\n } else {\r\n spinner('show', props.instantSpinner ? 1 : undefined);\r\n\r\n const httpReqDefaults = {\r\n dataType: 'HTML',\r\n cache: false\r\n };\r\n const {\r\n httpMethod,\r\n href,\r\n reqData,\r\n httpReqDefaultsOveride\r\n } = props; \r\n\r\n const httpReqOptions = {\r\n url: href,\r\n ...httpReqDefaults,\r\n ...httpReqDefaultsOveride \r\n }; //httpReqOptions: url and combine httpReqDefaults and httpReqDefaultsOveride\r\n\r\n _.ajax.httpRequest(httpMethod ?? 'GET', httpReqOptions, reqData ?? null, false, false).done(function (data, textStatus, xhr) {\r\n spinner('hide');\r\n var responseText = xhr.responseText;\r\n\r\n if (xhr.state() == 'resolved') {\r\n xhr.done(function(r) {\r\n responseText = r;\r\n });\r\n\r\n props.overlay = $(responseText); // Create a jQuery element of the response. TODO - Would $.parseHTML be better?\r\n $('body').append(props.overlay);\r\n\r\n setTimeout(init, 800); // because of the spinner('hide')\r\n _.gaEvent('Overlay_open', 'Overlay', null);\r\n }\r\n });\r\n }\r\n\r\n return _.ui.overlayOpener;\r\n };\r\n\r\n $(window.document).on('keydown.overlay', 'main :tabbable', function(e) {\r\n if (_.ui.overlayOpener && e.keyCode === 9) {\r\n e.preventDefault();\r\n $('.overlay-body :focusable:first', '#' + _.ui.overlayOpener.id).focus();\r\n }\r\n });\r\n})(jQuery, window);\r\n","(function ($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n var _ = window.mg;\r\n\r\n function _popover($target, options) {\r\n var $container = $target.parents('.container'); // The nearest container ancestor\r\n var isMobile = mg.isMobile.any;\r\n\r\n var props = $.extend(true, {\r\n boundary: $container[0],\r\n container: $container,\r\n content: '',\r\n html: true, // Determines whether the content should be inserted as html or text\r\n sanitize: false,\r\n title: '',\r\n trigger: isMobile ? 'click' : 'hover'\r\n }, options);\r\n\r\n props.template = [\r\n '
    ',\r\n '
    ',\r\n '
    ',\r\n '
    '\r\n ].join('');\r\n\r\n var mainContent = props.content;\r\n props.content = [\r\n '
    ' + mainContent + '
    ',\r\n '
    ',\r\n '' + mg.translations.Close + '',\r\n '',\r\n '
    '\r\n ].join('');\r\n\r\n $target.popover(props);\r\n }\r\n\r\n _.ui.popover = {\r\n create: function ($target, options) {\r\n _popover($target, options);\r\n },\r\n close: function (element) {\r\n $(element).parents('.mg-popover').popover('hide');\r\n }\r\n };\r\n\r\n})(jQuery, window, undefined);\r\n","(function($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n const initClearer = (that) => {\r\n that._$ddl.on('loaded.bs.select', () => {\r\n const $parent = that._$ddl.parent();\r\n const $menu = $('> .dropdown-menu', $parent);\r\n const $input = $('input[type=\"text\"]', $menu);\r\n const instance = _.ui.clearer($input);\r\n\r\n instance._$input.on('keyup.clearer', (e) => {\r\n const downOnTab = e.which === 9 && !that.sp.options.selectOnTab;\r\n const isArrowKey = e.which === 38 || e.which === 40 || downOnTab;\r\n\r\n if (isArrowKey)\r\n e.stopPropagation();\r\n else\r\n instance._$input.trigger('input');\r\n });\r\n\r\n instance._$input.on('keydown.clearer', (e) => {\r\n if (instance._$input.val().length >= 1 && e.which === 27)\r\n e.stopPropagation();\r\n });\r\n\r\n instance._$clearer.on('click.clearer', (e) => {\r\n instance._$input.trigger('input');\r\n\r\n e.stopPropagation();\r\n });\r\n });\r\n };\r\n\r\n const destroyClearer = (that) => {\r\n const $parent = that._$ddl.parent();\r\n const $menu = $('> .dropdown-menu', $parent);\r\n const $input = $('input[type=\"text\"]', $menu);\r\n\r\n _.ui.clearer.destroy($input)\r\n };\r\n\r\n class Select {\r\n constructor(ddl, options) {\r\n this._$ddl = $(ddl);\r\n this._options = $.extend({}, this._$ddl.data(), options);\r\n\r\n return this._$ddl.data('ui.select') || this.init();\r\n }\r\n\r\n init() {\r\n if (this._$ddl.data('ui.select'))\r\n return this;\r\n\r\n const opts = $.extend(true, {}, this._options);\r\n\r\n if (opts.events)\r\n delete opts.events;\r\n\r\n const plugin = $.fn.selectpicker.call(this._$ddl, opts);\r\n\r\n this.sp = plugin.data('selectpicker');\r\n\r\n if (this._options.liveSearch)\r\n initClearer(this);\r\n\r\n this._options.events && $.each(this._options.events, (i, v) => {\r\n this._$ddl.on(v.name + '.bs.select', v.callback);\r\n });\r\n\r\n this._$ddl.data('ui.select', this);\r\n\r\n return this;\r\n }\r\n\r\n destroy() {\r\n return Select.destroy(this._$ddl);\r\n }\r\n\r\n static destroy(ddl) {\r\n const $ddl = $(ddl);\r\n const instance = $ddl.data('ui.select');\r\n\r\n if (!instance)\r\n console.warn('The select is not initialised');\r\n\r\n if (instance._options.liveSearch)\r\n destroyClearer(instance);\r\n\r\n instance.sp.destroy();\r\n instance._$ddl.removeData('ui.select');\r\n\r\n return instance;\r\n }\r\n }\r\n\r\n _.ui.select = (ddl, options) => new Select(ddl, options);\r\n _.ui.select.destroy = (ddl) => Select.destroy(ddl);\r\n _.ui.select.get = (ddl) => $(ddl).data('ui.select');\r\n\r\n $(window).off('load.bs.select.data-api');\r\n})(jQuery, window);\r\n","(function ($, window) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n var _ = window.mg;\r\n\r\n _.ui.showMore = {\r\n onClick: function (element, initialCount, onShowMore, onShowLess, $itemHolder, showLessType) {\r\n var $element = $(element);\r\n var itemHolderClass = $element.data('item-holder-class');\r\n var parentClass = $element.data('parent-class');\r\n\r\n if ($itemHolder === undefined)\r\n $itemHolder = parentClass ? $element.parents('.' + parentClass).find('.' + itemHolderClass) : $element.parents('.' + itemHolderClass); // If no specific parent is set, we assume the itemHolder is the parent\r\n\r\n var $hiddenItems = $itemHolder.find('.hide');\r\n var toggled = $itemHolder.attr('data-toggled');\r\n\r\n if (toggled !== undefined) {\r\n toggled = toggled == '1';\r\n }\r\n else {\r\n toggled = $hiddenItems.length == 0;\r\n }\r\n\r\n var props = {\r\n btnShowMore: $element,\r\n itemHolder: $itemHolder,\r\n hiddenItems: $hiddenItems,\r\n toggled: toggled,\r\n hideText: showLessType == 'less' ? mg.translations.ShowLess : mg.translations.HideTheList,\r\n additionalCount: 3000\r\n };\r\n\r\n if (!toggled) {\r\n // Show more\r\n if ($.isFunction(onShowMore)) {\r\n onShowMore(props);\r\n }\r\n else {\r\n var additionalCount = props.additionalCount; // Show the next batch of items\r\n var $hiddenItems = props.hiddenItems;\r\n var $revealItems = $hiddenItems.slice(0, additionalCount);\r\n $revealItems.length && $revealItems.removeClass('hide');\r\n var remainingCount = $hiddenItems.length - additionalCount;\r\n\r\n if (remainingCount > 0) {\r\n // Update the counter in the text\r\n mg.ui.showMore.setShowMore(props, 'more', remainingCount);\r\n }\r\n else {\r\n // Change to \"Hide the list\"\r\n mg.ui.showMore.setShowMore(props, 'hide');\r\n }\r\n }\r\n }\r\n else {\r\n // Show less\r\n if ($.isFunction(onShowLess)) {\r\n onShowLess(props);\r\n }\r\n else {\r\n var $allItems = props.itemHolder.find('> .favorite');\r\n $allItems.slice(initialCount).addClass('hide'); // Hide all items with an index higher than initialCount\r\n mg.ui.showMore.setShowMore(props, 'more', $allItems.length - initialCount);\r\n }\r\n }\r\n\r\n $itemHolder.attr('data-toggled', toggled ? 0 : 1); // Reverse the data-toggled attribute\r\n },\r\n setShowMore: function (props, identifier, count) {\r\n var $btnShowMore = props.btnShowMore;\r\n var text = props.hideText;\r\n var iconClassPlus = 'icon-plus';\r\n var iconClassMinus = 'icon-minus';\r\n var newClass = '';\r\n\r\n if (identifier === 'more') {\r\n text = mg.translations.ShowMore + (count !== undefined ? ' (' + count + ')' : '');\r\n newClass = iconClassPlus;\r\n }\r\n else\r\n newClass = iconClassMinus;\r\n\r\n $btnShowMore.find('.show-more-text').html(text);\r\n $btnShowMore.find('.show-more-icon .icon').removeClass(iconClassPlus + ' ' + iconClassMinus).addClass(newClass);\r\n },\r\n getToggled: function ($itemHolder) {\r\n var toggled = $itemHolder.attr('data-toggled');\r\n\r\n if (toggled !== undefined) {\r\n toggled = toggled == '1';\r\n }\r\n else {\r\n var $hiddenItems = this.getHiddenItems($itemHolder);\r\n toggled = $hiddenItems.length == 0;\r\n }\r\n\r\n return toggled;\r\n },\r\n getHiddenItems: function ($itemHolder) {\r\n return $itemHolder.find('.hide');\r\n }\r\n }\r\n})($, window);\r\n","(function ($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n const defaults = {};\r\n\r\n class Time {\r\n constructor(input, options) {\r\n this._$input = $(input);\r\n this._options = $.extend({}, defaults, options);\r\n\r\n return this._$input.data('ui.time') || this.init();\r\n }\r\n\r\n init() {\r\n if (this._$input.data('ui.time'))\r\n return this;\r\n\r\n let option = {\r\n time: true,\r\n timePattern: ['h', 'm'],\r\n delimiterLazyShow: true\r\n };\r\n\r\n this._cleave = new Cleave(this._$input, option);\r\n this._$input.data('ui.time', this).on('blur', this.onBlur);\r\n\r\n //_.ui.clearer(this._$input); // TODO - If we want to have the Clear button we may have to change the width of the element a bit\r\n\r\n return this;\r\n }\r\n\r\n onBlur(e) {\r\n Time.changeInputTime(e.target);\r\n }\r\n\r\n static changeInputTime(target) { // Mostly copied from oMG (which is in turn copied from T2 Admin)\r\n var value = $.trim(target.value);\r\n\r\n if (value === '')\r\n return;\r\n\r\n let parts = [],\r\n patternFound = false,\r\n patterns = [\r\n { k: 'd', v: /^\\d{1}$/ },\r\n { k: 'dd', v: /^\\d{2}$/ },\r\n { k: 'ddd', v: /^\\d{3}$/ },\r\n { k: 'dddd', v: /^\\d{4}$/ },\r\n { k: 'generic', v: /^\\d{1,2}(-|\\.|\\/|,|:)\\d{1,2}$/ }\r\n ];\r\n\r\n let getParts = (format) => {\r\n switch (format) {\r\n case 'd':\r\n return [\r\n parseInt(value, 10),\r\n 0\r\n ];\r\n case 'dd':\r\n return [\r\n parseInt(value, 10),\r\n 0\r\n ];\r\n case 'ddd':\r\n return [\r\n parseInt(value.substring(0, 1), 10),\r\n parseInt(value.substring(1, 3), 10)\r\n ];\r\n case 'dddd':\r\n return [\r\n parseInt(value.substring(0, 2), 10),\r\n parseInt(value.substring(2, 4), 10)\r\n ];\r\n case 'generic':\r\n let p = [0, 0],\r\n m = value.match(/^(\\d+)(-|\\.|\\/|,|:)(\\d+)$/);\r\n\r\n if (m === null)\r\n return p;\r\n\r\n p[0] = parseInt(m[1], 10);\r\n\r\n if (m[3].length === 1)\r\n m[3] = m[3] + '0';\r\n\r\n p[1] = (m[3] < 10) ? parseInt('0' + m[3], 10) : parseInt(m[3], 10);\r\n\r\n return p;\r\n }\r\n };\r\n\r\n let isValidHour = (val) => {\r\n return +val <= 23;\r\n };\r\n\r\n let isValidMinute = (val) => {\r\n return +val <= 59;\r\n };\r\n\r\n for (var i = 0; i < patterns.length; i++) {\r\n if (!patternFound && patterns[i].v.test(value)) {\r\n patternFound = true;\r\n parts = getParts(patterns[i].k);\r\n }\r\n }\r\n\r\n if (patternFound && isValidHour(parts[0]) && isValidMinute(parts[1])) {\r\n let result = 'hh:mm'.replace(/hh/, mg.cc.padZeroes(parts[0]));\r\n result = result.replace(/mm/, mg.cc.padZeroes(parts[1]));\r\n\r\n target.value = result;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n destroy() {\r\n return Time.destroy(this._$input);\r\n }\r\n\r\n static destroy(input) {\r\n const $input = $(input);\r\n const instance = $input.data('ui.time');\r\n\r\n if (!instance)\r\n console.warn('The time is not initialised');\r\n\r\n //_.ui.clearer.destroy(instance._$input);\r\n\r\n instance._cleave.destroy();\r\n instance._$input.removeData('ui.time').off('blur', this.onBlur);\r\n\r\n return instance;\r\n }\r\n }\r\n\r\n _.ui.time = (input, options) => new Time(input, options);\r\n _.ui.time.destroy = (input) => Time.destroy(input);\r\n})(jQuery, window);\r\n","(function($, window, undefined) {\r\n if (window.mg === undefined)\r\n window.mg = {};\r\n\r\n if (window.mg.ui === undefined)\r\n window.mg.ui = {};\r\n\r\n const _ = window.mg;\r\n\r\n const notEmpty = () => {\r\n // override default with trim\r\n return {\r\n validate(input) {\r\n const opts = $.extend({ trim: true }, input.options);\r\n const value = opts.trim === true || opts.trim === 'true' ? $.trim(input.value) : input.value;\r\n\r\n return {\r\n valid : value !== ''\r\n };\r\n }\r\n };\r\n };\r\n\r\n const golfId = () => {\r\n const regex = /^\\d{6}-\\d{3}$/;\r\n\r\n return {\r\n validate(input) {\r\n return {\r\n valid : input.value !== '' && regex.test(input.value),\r\n message : _.translations.GolfIdValidator\r\n };\r\n }\r\n };\r\n };\r\n\r\n if (window.hasOwnProperty('FormValidation')) {\r\n FormValidation.validators.notEmpty = notEmpty;\r\n FormValidation.validators.golfId = golfId;\r\n }\r\n\r\n const hideSuccess = (e) => {\r\n if (!e.valid)\r\n return;\r\n\r\n const elemRowSelector = e.elements.find((v) => {\r\n return 'rowSelector' in v.dataset && v.dataset.rowSelector != '';\r\n });\r\n\r\n const elemGroup = FormValidation.utils.closest(e.element, elemRowSelector ? elemRowSelector.dataset.rowSelector : '.form-group');\r\n\r\n elemGroup && FormValidation.utils.classSet(elemGroup, { 'has-success': false });\r\n\r\n e.elements.forEach((v) => {\r\n FormValidation.utils.classSet(v, { 'is-valid': false });\r\n });\r\n };\r\n\r\n const camelCase = (value) => {\r\n return value\r\n .replace(/\\s(.)/g, ($1) => $1.toUpperCase())\r\n .replace(/\\s/g, '')\r\n .replace(/^(.)/, ($1) => $1.toLowerCase());\r\n };\r\n\r\n\r\n const styleAsInvaild = (inputElement) => {\r\n const customAttrName = 'data-mg-validation-field-is-invalid-until-change';\r\n if (inputElement) {\r\n inputElement.setAttribute(customAttrName, '1');\r\n const evtHandler = (e) => {\r\n e.currentTarget.setAttribute(customAttrName, '0');\r\n }\r\n $(inputElement).off('focus', evtHandler).on('focus', evtHandler);\r\n }\r\n }\r\n\r\n const styleAsInvaild_resetAll = () => {\r\n const customAttrName = 'data-mg-validation-field-is-invalid-until-change';\r\n $(`[${customAttrName}]`).attr(customAttrName, '0');\r\n }\r\n\r\n class Validation {\r\n constructor(form) {\r\n this._$form = $(form);\r\n this._plugins = {};\r\n this._events = [];\r\n\r\n this.addPlugin('Aria');\r\n this.addPlugin('AutoFocus');\r\n this.addPlugin('Bootstrap');\r\n this.addPlugin('Declarative');\r\n this.addPlugin('SubmitButton');\r\n this.addPlugin('Excluded');\r\n\r\n this.addEvent('core.element.validated', hideSuccess);\r\n\r\n return this;\r\n }\r\n\r\n addPlugin(name, options) {\r\n const pluginName = camelCase(name);\r\n this._plugins[pluginName] = new FormValidation.plugins[name](options);\r\n\r\n return this;\r\n }\r\n\r\n removePlugin(name) {\r\n const pluginName = camelCase(name);\r\n delete this._plugins[pluginName];\r\n\r\n return this;\r\n }\r\n\r\n updatePluginOptions(name, options) {\r\n const pluginName = camelCase(name);\r\n\r\n if ('opts' in this._plugins[pluginName])\r\n $.extend(true, this._plugins[pluginName].opts, options);\r\n\r\n return this;\r\n }\r\n\r\n addEvent(name, callback) {\r\n this._events.push({\r\n name : name,\r\n callback : callback\r\n });\r\n\r\n return this;\r\n }\r\n\r\n removeEvent(name) {\r\n this._events = $.grep(this._events, (v) => v.name != name);\r\n\r\n return this;\r\n }\r\n\r\n init(options) {\r\n this.fv = FormValidation.formValidation(this._$form[0], $.extend(true, {\r\n locale : _.formValidationLang,\r\n localization : FormValidation.locales[_.formValidationLang],\r\n plugins : this._plugins\r\n }, options || {}));\r\n\r\n $.each(this._events, (i, v) => {\r\n this.fv.on(v.name, v.callback);\r\n });\r\n\r\n this._$form.data('ui.validation', this);\r\n\r\n return this;\r\n }\r\n\r\n destroy() {\r\n return Validation.destroy(this._$form);\r\n }\r\n\r\n static destroy(form) {\r\n const $form = $(form);\r\n const instance = $form.data('ui.validation');\r\n\r\n instance.fv.destroy();\r\n instance._$form.removeData('ui.validation');\r\n\r\n return instance;\r\n }\r\n }\r\n\r\n _.ui.validation = (form) => new Validation(form);\r\n _.ui.validation.destroy = (form) => Validation.destroy(form);\r\n _.ui.validation.get = (form) => $(form).data('ui.validation');\r\n _.ui.validation.styleAsInvalid = styleAsInvaild;\r\n _.ui.validation.styleAsInvalid_resetAll = styleAsInvaild_resetAll;\r\n})(jQuery, window);\r\n"]}