var environmentSettingsConfig = this.environmentSettingsConfig || {}; environmentSettingsConfig.AdminJavaScriptShortDateFormat = 'dd/MM/yyyy'; environmentSettingsConfig.AdminDateFormat = 'dd/MM/yyyy'; environmentSettingsConfig.PublicJavaScriptShortDateFormat = "dd/MM/yyyy"; environmentSettingsConfig.CurrentVenueIanaTimeZone = 'Europe/London'; environmentSettingsConfig.CurrentLocale = 'en-GB'; environmentSettingsConfig.CurrentVenueUrlSegment = 'GaryMarkhamCoaching'; environmentSettingsConfig.ErrorsVerboseConsole = false; environmentSettingsConfig.ErrorsVerboseHtml = false; environmentSettingsConfig.FacebookAppID = '202686279900900'; environmentSettingsConfig.Genders = [{"Text":"Male","Value":0},{"Text":"Female","Value":1}]; environmentSettingsConfig.GlobalDomain = 'clubspark.lta.org.uk'; environmentSettingsConfig.GlobalFeatures = { "Version": 638608916897740576, "DefaultModules": { "Venues": true, "CoachingOrganisations": true, "Regions": false, "Authorities": true }, "Account": { "UserPhoneNumberIsRequired": false, "PasswordlessSignInEnabled": false, "HideGlobalRegistrationLink": false, "AccountMerge": false, "SocialAccountMerge": true, "HideClubSparkRegistration": true, "AccountMergeEnabled": true, "EnableStripeExpressOnboarding": false }, "Booking": { "AdminOnlyBookingSheetColours": false, "AppPromo": true, "CheckInContacts": false, "NewDayBookingAvailabilityTime": true, "NoShowCharges": false, "ResourceFormat": false, "ResponsibilityCategory": false, "SessionMaxBookingSlots": false, "CourtProperties": true, "CalendarEntry": false, "MembershipRequired": false, "ResourceCategories": true, "HideResourceLighting": false, "HideResourceSurface": false, "BookingEngineV2": false, "EnableGroupBooking": true }, "Membership": { "DisableInstallments": false, "DirectDebitPayment": true, "CreditCardPayment": true, "DisableGiftAidOption": false, "GuardianMandatory": true, "AutoPaymentDateOfPurchasePackages": true, "AutoPaymentFixedDatePackages": true, "NewMembershipRegistrationProcess": false, "GetGoCardlessVerificationStatus": false, "RestrictMemberImport": false, "MembershipAddons": true, "PauseMembership": true, "ChangeInstalmentCost": true }, "Coaching": { "OptimisedSearch": true, "RunningFields": false, "CoachingTeam": true, "CoursePaymentRequests": true, "CoachingReports": true, "SessionPaymentRequests": false, "TennisForKidsLive": true, "DelayParticipantOrders": false, "DelayCoachOrders": false, "RecurringSessions": true, "MembershipRequired": false, "EnqueueBookings": false, "EnableSchemeSearchFilter": false, "EnableThemeSearchFilter": false, "EnableBookingOpeningTimeRestrictedSchemeFeature": true, "OfflineCoachingPayments": true, "JuniorSafePlay": false, "AdultSafePlay": false, "Lessons": false, "EnableBookingCourtInProgramming": false, "DisableHolidayCamps": false, "DisableAddCategory": false, "EnableResources": false, "OneOffCourseFeatures": { "BulkDiscountsEnabled": false, "MultipleSessionsEnabled": false, "CreateSessionsAutomatically": true, "PublishToPlayTennisAu": false }, "SeriesFeatures": { "BulkDiscountsEnabled": true, "MultipleSessionsEnabled": true, "CreateSessionsAutomatically": true, "PublishToPlayTennisAu": true }, "OpenCourtSessionsLive": false, "EnableThemeForCustomCourses": false, "EnableCancellationWindowForCourses": true, "CoachingRegisterAdministrator": true, "ArchiveCategories": true, "EnableElasticSearchCoaching": false, "EnableAdministratorSchemeSessionsV2": true }, "Competition": { "SocialLeagues": false }, "Contacts": { "Bios": false, "Photos": false, "Social": false, "Mentors": false, "Delete": true, "Unsubscribe": true, "RestrictUnregistered": false, "EmailAttachments": true, "VenueContactRelationships": true, "BulkDeleteContacts": true, "ContactLookupsV2": true, "ContactLookupsV3": true, "ContactLookupsV3_VenueAdminContacts_Print": true, "ContactLookupsV3_VenueAdminContacts_Export": true, "ContactLookupsV3_VenueAdminContacts_Lookup": true, "ContactLookupsV3_VenueAdminContacts_Delete": false, "ContactLookupsV3_VenueAdminContacts_Recipients": false, "ContactLookupsV3_VenueAdminMembership_Lookup": false, "ContactLookupsV3_VenueAdminMembership_Export": false, "ContactLookupsV3_VenueAdminMembership_Print": false, "ContactLookupsV3_VenueAdminMembership_Move": false, "ContactLookupsV3_VenueAdminMembership_Recipients": false, "ContactLookupsV3_VenueAdminMembership_ChangeCosts": false, "ContactLookupsV3_VenueAdminMembership_RequestPayment": false, "ContactLookupsV3_Api_SendEmails": false, "ContactLookupsV3_Api_VenueContacts_Lookup": true, "ContactLookupsV3_Handler_MembershipPackage": false, "ContactLookupsV3_Handler_MembershipRenewalRequests": false, "ContactLookupsV3_Handler_AddTagsToVenueContacts": false, "ContactLookupsV3_Handler_DeleteTagsFromVenueContacts": false, "ContactLookupsV3_Compare": false, "ContactForm": true, "LockPersonalDetailsWhenUserConnected": false, "ContactNotes": true }, "Venue": { "DeliveryAddress": false, "PrivacyPolicy": true, "SocialAccountsDisabled": false, "CanEditJuniorAge": true, "SubDomainCreation": false, "Facilities": true, "AddTraditionalLocation": false, "AddNonTraditionalLocation": false, "LinkedLocations": false, "Waiver": true }, "Website": { "Multilingual": false, "NoCoachingCourseSearch": false, "NoSubPages": false, "SectionHeros": true, "ConsentsOptOutByDefault": true, "VenueConsentsOptOutByDefault": true, "GuardianMandatory": true, "Activation": false, "NationalCourtBookingLive": false, "EnableClassificationLogoImages": false, "PasswordConfirmation": false, "AcceptPrivacyPolicyOnRegister": true, "NewLocationsLookup": false, "Appcues": true, "FooterNavigation": false, "Affiliations": false, "DisableVenues": false, "ActivityVideosWebpage": false, "MoreCustomPages": true, "MembersOnlyPages": true, "GoogleAnalytics": true, "Favicons": true, "MorePartnerLogos": true, "Calendar": false, "FontSelection": true, "NavigationSelection": false }, "Events": { "GBTWAccess": true, "CustomEventName": false }, "DiscountsAndCredits": { "CoachingCredits": true, "BookingCredits": true }, "Payments": { "PaymentReports": false, "MultipleStripeAccounts": false } }; environmentSettingsConfig.Partner = 'lta'; environmentSettingsConfig.PortalUrlSegment = ''; environmentSettingsConfig.ShortDateFormat = 'dd/MM/yyyy'; environmentSettingsConfig.ShortTimeFormat = 'HH:mm'; environmentSettingsConfig.StripeKey = ''; environmentSettingsConfig.SubCategorySessions = [{"sessionId":2010,"name":"Adult"},{"sessionId":2020,"name":"Junior"},{"sessionId":2030,"name":"Mini"},{"sessionId":2040,"name":"Individual"},{"sessionId":2050,"name":"Disability"},{"sessionId":2060,"name":"Holiday Camps"},{"sessionId":2990,"name":"Other"},{"sessionId":3010,"name":"Sanctioned Tournament"},{"sessionId":3020,"name":"Event"},{"sessionId":3030,"name":"League Fixture"},{"sessionId":3040,"name":"Fun Tournament"},{"sessionId":3990,"name":"Other"},{"sessionId":4010,"name":"Team Practice"},{"sessionId":4020,"name":"Club Night"},{"sessionId":4990,"name":"Other"},{"sessionId":5010,"name":"LTA Event"},{"sessionId":5020,"name":"LTA Coaching Qualification"},{"sessionId":5030,"name":"Non-venue Event/Tournament"},{"sessionId":5990,"name":"Other"}]; environmentSettingsConfig.TenantID = '00000001-0011-0000-0000-000000000000'; environmentSettingsConfig.VenueMode = window.location.hostname == environmentSettingsConfig.GlobalDomain ? 'subdirectory' : 'domain'; environmentSettingsConfig.ResourceItems = { Booking : { CourtLower : "court", CourtUpper : "Court", CourtsLower : "courts", CourtsUpper : "Courts", BookingLower : "booking", BookingUpper : "Booking", BookingsLower : "bookings", BookingsUpper : "Bookings", BookedLower : "booked", BookedUpper : "Booked", BookLower : "book", BookUpper : "Book", CourtBookingsLower : "court bookings", CourtBookingsUpper : "Court bookings" }, Classification : { Level1 : "National administrator", Level2 : "Regional", Level3 : "County" }, Coaching : { BookingLower : "booking", ClassesLower : "sessions", ClassesUpper : "Sessions", ClassLower : "session", ClassUpper : "Session", CoachLower : "coach", CoachUpper : "Coach", CoachesUpper : "Coaching team", ActivatorsUpper : "Activator team", CoachingLower : "coaching", CoachingUpper : "Coaching", CostUnit : "", CourseCodeShort : "reference", CourseCodeLong : "Your reference", CourseLower : "course", CoursesLower : "courses", CoursesUpper : "Courses", CourseUpper : "Course", HolidayCamp : "Holiday camp", HolidayCamps : "Holiday camps", Interval : "Interval", PlayerLower : "player", PlayersLower : "players", PlayersUpper : "Players", PlayerUpper : "Player", SessionsLower : "sessions", ProgrammeLower : "programme", ProgrammesLower : "programmes", ProgrammesUpper : "Programmes", ProgrammeUpper : "Programme", SessionName : "course", SessionVenue : "Venue", TeamName : "Coaching team", TitleRoot : "Coaching / Programmes / ", PageDefaultView : "List", UtrRatingMin : "1", UtrRatingMax : "16.5", BasketCourseName : "course", BasketSessionName : "session", AddNewBooking : "Add new booking", AddNewCampBooking : "Add new camp booking", ThemeUpper : "Theme", SchemeContactSourceOrganiser : "Organiser site", LeadCoach : "Lead coach", LeadActivator : "Lead activator", StartDate : "Start date", SessionThemeUpper : "Theme", SkillLevelUpper : "Level", CapacityUpper : "Capacity", CostUpper : "Cost", NameUpper : "Name", EndDate : "End date", DefaultSessionTags : "Suitable For", PublicCourseDescriptionHeader : "Notes from the coach", ValidateAgeMinMaxErrorMessage : "[MinimumAge]-[MaximumAge] year olds only", ValidateAgeMinErrorMessage : "[MinimumAge] year olds and over only", ValidateAgeMaxErrorMessage : "[MaximumAge] year olds and under only", CourseDateLabelUpper : "Date", DefaultDescriptionLabel : "Default Description", DefaultConfirmationLabel : "Default Confirmation", DefaultReminderEmailsLabel : "Reminder Email Information", DescriptionLabel : "Description", ConfirmationLabel : "Confirmation", PriceSuffix : "", DefaultThemesLabel : "Default ball colour", CoachingPaymentMethod_Cash : "Offline", AddCoachModalExternalCode : "LTA Coach Code", AddActivatorRoleExternalCode : "LTA Activator Code", AddActivatorRoleExternalCodeNotRecognisedMessage : "The LTA Activator Code entered was not recognised", AddCoachModalExternalCodeTooltip : "Enter the LTA Activator Code here to link this activator with their LTA record", AddCoachModalExternalCodeNotRecognisedMessage : "The LTA Coach Code entered was not recognised", RegistrationUpper : "Booking", RegistrationsUpper : "Bookings", RegistrationLower : "booking", RegistrationsLower : "bookings", RegistrationWindow : "Booking Window", RegistrationOpens : "Booking Opens", RegistrationCloses : "Booking Closes", WaiverUpper : "Policies", WaiverLower : "policies", WaiverDescription : "Upload a PDF or DOC file." }, Common : { ChequeLabel : "Cheque", ColourLabel : "Colour", DocumentRegion : "uk", PlatformName : "ClubSpark", PlatformLat : "53.5500", PlatformLng : "-2.36967", PlatformZoom : "5", PlatformCountryRestriction : "uk", TownLabel : "Town", PostcodeLabel : "Postcode", DistanceUnit : "miles", CurrencySymbol : "£", CurrencyCode : "GBP", PublicJavaScriptShortDateFormat : "dd/mm/yy", AdminJavaScriptShortDateFormat : "dd/mm/yyyy", MomentJsLongDateFormat : "ddd, DD MMM YYYY", MomentJsShortDateFormat : "DD/MM/YYYY", JavaScriptTimeFormat : "HH:mm:ss", SmsName : "SMS", MembershipName : "Membership", MemberName : "Member", PartnerLocale : "en-GB", CountyLabel : "County", GDPRGuardianConsentLabel : "I confirm I am the Parent or Guardian of this player, or have the permission of the Parent or Guardian to book on behalf of this player.", GDPRGuardianConsentToolTip : "In order to make a booking you must be ?0? years old; be the parent or guardian of the player under ?0? years old, or have permission from the parent or guardian of the player.", GDPRGuardianConsentValidation : "Consent required - edit details", ProgrammeLower : "programme", ProgrammeUpper : "Programme", ProgrammesLower : "programmes", ProgrammesUpper : "Programmes", FloodlitLabel : "Floodlit", StripeCosts : "Stripe will deduct 25p per transaction + 2.9% for UK cards and 4.3% for international cards. This covers support costs, transactional costs, as well as Stripe\u0027s additional fees.", StripeCountry : "GB", GoCardlessCosts : "We have a special arrangement with GoCardless who will only charge 1.0% + 20p and capped to a maximum of £4.00 per transaction (minimum of 20p). In addition ClubSpark charge 0.8% (uncapped) per transaction in order to provide and support this service. If the payment card is an international payment, Gocardless will charge 2% +20p (no cap) and ClubSpark will charge 0.8% (uncapped). Prices may be subject to change.", GoCardlessIntro : "It only takes a few minutes to complete the form on the GoCardless site. Once registered you\u0027ll be asked to connect your account to ClubSpark and as soon as you\u0027ve done this we\u0027ll be able to help you to automatically keep track of payments made via GoCardless (for one-off payments and monthly Direct Debits).", OperatorNameLong : "Sportlabs Technology Ltd", OperatorName : "ClubSpark", OperatorLogoDark : "~/Content/Public/ClubSpark/Common/Shared/img/core/CS_logo@1x.png", OperatorWebsite : "http://www.clubspark.com", OperatorWebsiteText : "ClubSpark.com", OperatorPoweredText : "Site powered by", RegisterLinkText : "Register", OptimisationLower : "optimisation", AdminDateFormat : "dd/MM/yyyy", CancelledLower : "cancelled", CancelledUpper : "Cancelled", CancellingLower : "canceling", SchemeCategoryThemeValidation : "Theme preference required", TermsAndConditionsPrefix : "Please tick this box to confirm you agree to our", FreeUpper : "Free" }, Contacts : { CoachingRole : "Coaching administrator", GoverningBodyNumber : "British Tennis Number", ResponsibleLower : "contact", ResponsibleUpper : "Contact", ResponsiblesLower : "contacts", ResponsiblesUpper : "Contacts", RolesDescription : "Organisation", MentalHealthChampionUpper : "" }, Emails : { Salutation : "Hi" }, Home : { Heading : "Inspired by Emma?" }, RegularExpressions : { PersonName : "^[a-zA-Z\\-\\'\\&\\ \\.]+$", Postcode : "^(GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4})$", PhoneNumber : "^0(\\d ?){9,10}$" }, Terms : { MinimumUserAge : "13", AssociationScope : "The LTA and its national, county and island associations", InvolvementScope : "British tennis", UseOfPersonalInformationScope : "Sportlabs Technology Ltd" }, Venue : { CoachingOrganisationLower : "coaching organisation", CoachingOrganisationUpper : "Coaching organisation", CoachingOrganisationModuleStatusName : "coaching organisation", OrganisationUpper : "Organisation", OrganisationLower : "organisation", OrganisationsLower : "organisations", OrganisationsUpper : "Organisations", VenueLower : "venue", VenueUpper : "Venue", VenuesLower : "venues", VenuesUpper : "Venues", LocationsLower : "locations", LocationsUpper : "Locations", LocationLower : "location", LocationUpper : "Location", VenueClassification : "Classification", VenueEventDefaltName : "Course details", AcceptInvitationAgreeTermsAndConditionsPrefix : "Please tick this box to confirm you agree to the", PrivacyPolicyConsentPrefix : "Please tick this box to confirm you have read and accepted", VenueExternalConsentsHeader : "External consents" }, Region : { RegionLower : "region", RegionUpper : "Region", RegionsLower : "regions", RegionsUpper : "Regions" }, Events : { EventLower : "open day event", EventUpper : "Open day event", EventsLower : "open days event", EventsUpper : "Open day event", ChangeLabel : "Change" }, MembershipEmails : { LoginTextForAccount : "\u003cbr /\u003e\u003cbr /\u003e\u003cspan style=\"width: 19px; display: inline-block;\"\u003e\u003cimg align=\"center\" src=\"https://clubspark.zone/Content/Public/ClubSpark/Common/Global/img/account/{0}.png\"\u003e\u003c/span\u003e\u0026nbsp;\u0026nbsp;You will need to login with your existing ClubSpark account ({1})." }, AdminWebsite : { HeroPhotoGuidance : "For best viewing of this photo we recommend uploading a photo with dimensions of 1400px x 650px", GalleryGuidance : "For best viewing of this photo we recommend uploading a photo with dimensions of 600px by 400px", NewsArticleGuidance : "For best viewing of this photo we recommend uploading a photo with dimensions of 1180px by 600px", SubSectionPhotoGuidance : "For best viewing of this photo we recommend uploading a photo with dimensions of 1400px x 450px", NewsArticleTextGuidance : "For best viewing please upload images that are 1180px wide. Height can be variable" }, SchemesEmails : { SchemeSessionsBookingUserSubject : "[#scheme#] / Booking Confirmation", SchemeSessionsBookingAdminSubject : "[#scheme#] / Booking Confirmation", SchemeSessionFullNotificationSubject : "[#scheme#] / [#course-type#] Full" } }; environmentSettingsConfig.AppSettings = { "Account" : { "List" : { }, "Content" : { }, "Setting" : { } }, "Booking" : { "Content" : { "BookingLower" : "", "BookingUpper" : "", "BookingsLower" : "", "BookingsUpper" : "", "CourtUpper" : "", "CourtsLower" : "", }, "Setting" : { } }, "Coaching" : { "Content" : { "CoachingUpper" : "Coaching", }, "Enum" : { }, "List" : { }, "Setting" : { "UtrRatingMax" : "", "UtrRatingMin" : "", } }, "Contacts" : { "Content" : { }, "List" : { }, "Setting" : { } }, "Events" : { "Content" : { }, "Setting" : { } }, "Global" : { "Content" : { "ChequeLabel" : "", "ColourLabel" : "", "DocumentRegion" : "", "GuardianUpper" : "", "OrganisationLower" : "", "PlatformCountryRestriction" : "", "PlatformLat" : "", "PlatformLng" : "", "PlatformName" : "", "PlatformZoom" : "", "PostcodeLabel" : "", }, "Dictionary" : { }, "Enum" : { }, "List" : { }, "Regex" : { "PersonName" : "", "PhoneNumber" : "", "Postcode" : "" }, "Setting" : { "AdminJavaScriptDateZebraDatePickerFormat" : "", "JavaScriptTimeFormat" : "", "MinimumUserAge" : "", "MomentJsLongDateFormat" : "", "MomentJsMediumDateFormat" : "", "MomentJsShortDateFormat" : "", } }, "Membership" : { "Content" : { } }, "Localisation" : { }, "Payments" : { "Content" : { }, "Setting" : { "CurrencyCode" : "GBP", "CurrencySymbol" : "£", } }, "Reporting" : { "Setting" : { } }, "Tournaments" : { "Content" : { }, "Setting" : { } }, "WebsiteManager" : { "Content" : { } }, "GlobalFeatures" : { "DefaultModules" : { }, "Account" : { }, "Competition" : { }, "Booking" : { }, "Coaching" : { }, "Membership" : { }, "Events" : { }, "Contacts" : { }, "Venue" : { }, "Website" : { } }, "Content" : { "Booking" : { }, "Classification" : { }, "Coaching" : { }, "Common" : { }, "Emails" : { }, "GlobalFeatures" : { }, "Home" : { }, "RegularExpressions" : { }, "Terms" : { }, "Venue" : { }, "Region" : { }, "Events" : { }, "MembershipEmails" : { }, "AdminWebsite" : { }, "SchemesEmails" : { }, "Tournaments" : { }, "AddPlayer" : { } } }; var AuthHandler = function(config) { var cache; var redirectUrl = config.zoneRoot + 'oauth2-redirect.html'; var authorizeUrl = config.authRoot + 'issue/oauth2/authorize'; this.withToken = function (args) { args = args || {}; if (typeof args === "function") args = { success: args }; args.success = args.success || function() {}; args.error = args.error || function() {}; args.scope = args.scope || "token"; /* Attempt to load the current oauth token from localStorage */ /* var tokenCache = localStorage.getItem('oauth2.token'); */ var tokenCache = cache; var adminToken = null; if (tokenCache != null) adminToken = JSON.parse(tokenCache); var now = Math.floor(Date.now() / 1000); /* If token expires within next 60 seconds, we'll request a new one anyways */ if (adminToken != null && adminToken.expires_after < now + 60) adminToken = null; if (adminToken == null) { window.addEventListener('message', function (event) { if (event.data.action == 'oauth2.callback') { if (event.data.isValid) { var token = { expires_after: now + event.data.expires_in, access_token: event.data.access_token }; /* Store the token in cache */ /* localStorage.setItem('oauth2.token', JSON.stringify(token)); */ cache = JSON.stringify(token); args.success(token.access_token); } else { args.error(event.data); } } }, { once: true, capture: false }); var nonce = btoa(Date.now()); var authorizePayload = { tokenType: 'csa', response_type: 'token', client_id: 'clubspark-ui', redirect_uri: redirectUrl, scope: config.scopeRoot + args.scope, state: nonce, realm: config.webRoot, }; var implicitUrl = authorizeUrl + '?' + $.param(authorizePayload); /* Get iframe for sso */ var iframe = $('iframe[name="oauth2"]'); if (iframe.length == 0) { iframe = $('