{"version":3,"sources":["app.js","authentication/authentication-modals.controller.js","authentication/authentication.service.js","authentication/refresh-token.service.js","common/forms.js","common/scrolllock.js","common/session-storage.js","common/spinner-functions.js","common/videoplayer.js","components/cache-control.service.js","components/control-directives.js","components/dashed-currency.filter.js","components/downloads-popup.controller.js","components/fileModel.directive.js","components/fileUpload.directive.js","components/friendlyDate.filter.js","components/friendlyDateNoTime.filter.js","components/friendlyFromNow.filter.js","components/friendlyFullDate.filter.js","components/friendlyMonthYear.filter.js","components/multi-email-validator.directive.js","components/ng-anchor.directive.js","components/notification.factory.js","components/password-entropy.component.js","components/range.filter.js","components/st-compare-to-if-required.directive.js","components/st-compare-to.directive.js","components/st-enter-key.js","components/st-loading.directive.js","components/st-login-required-notice.controller.js","components/st-login-required-notice.directive.js","components/st-no-items.directive.js","components/st-only-numeric.js","components/st-payment-form.directive.js","components/ui-autofocus.js","site/beta-signup.controller.js","site/email-unsubscribe.controller.js","site/hosting.service.js","site/password-reset.controller.js","site/ticket.service.js","site/user-access.controller.js","site/user-access.service.js","site/user-partner.factory.js"],"names":["httpRequestAuthenticationInterceptor","$injector","$window","$rootScope","$q","request","$config","authenticationService","token","sessionStorage","getItem","headers","responseError","rejection","status","config","url","indexOf","apiRootUrl","console","log","get","clearSession","location","href","when","reject","angular","$httpProvider","interceptors","push","$locationProvider","hashPrefix","$scope","$timeout","vm","this","doLogout","document","querySelector","value","logout","RefreshLoginTopArea","modalResetErrors","newUserForm","$setPristine","$setUntouched","forgotPasswordForm","loginModalForm","resetErrors","querySelectorAll","forEach","element","textContent","style","display","classList","remove","showLoginOverlay","overlayCallback","loginOverlayCallback","getElementById","x","innerHTML","bootstrap","Modal","getOrCreateInstance","show","defaultElement","focus","select","attemptedSubmit","emailPattern","login","emailAddress","password","rememberMe","user","FirstName","LastName","Company","PhoneNumber","EmailAddress","Password","agreement","subject","body","type","isAccepted","cancelAndRedirect","closeWindow","window","hide","createUser","$invalid","createAccount","err","RenderErrors","$applyAsync","doAgreementAccepted","sendAccepted","data","doLogin","ModelState","loginPassword","forgotPasswordGoButtonClick","mySpinner","setElement","resetPassword","forgotPasswordEmail","modalPageForgotPassword","hideForgotPasswordAndShowLogin","showCreateAccountModal","isLoggedIn","modalPageCreateAccount","newUserFirstName","showForgotPasswordModal","showTermsAgreementOverlay","getAgreement","Body","Subject","Type","showAccountCreation","ShowCreateAccountModal","$http","$log","refreshToken","validatePromise","nextValidate","Date","fireLoggedIn","clearCached","$broadcast","fireLoggedOut","getAuthFlags","localStorage","getRefreshToken","setAuthToken","newToken","setItem","setAuthFlags","setLoggedInEmail","newEmail","setRefreshToken","longTerm","callback","refresh","params","JSON","stringify","RefreshToken","post","clear","getAuthToken","inputs","result","Success","AccessToken","Flags","defer","resolve","promise","resp","IsValid","onLogoutComplete","getTime","logoutIfRefreshTokenInvalid","isReseller","flags","getLoggedInEmail","email","showTermsCondition","response","ShouldShow","error","TermCondID","refreshTokenPromise","urlBase","nextRefresh","existingRefreshToken","debug","refreshToken2","method","successResponse","onRefreshFailed","removeItem","divCtrlInit","el","add","label","addEventListener","event","previousInput","previousElementSibling","tagName","preventDefault","inputElement","divCtrlFocus","target","divCtrlBlur","divCtrlChange","divCtrlCheckState","ev","parentNode","placeholderText","getAttribute","nextElementSibling","toLowerCase","setAttribute","hasAttribute","divCtrlEndsWith","str","suffix","length","divCtrlRecalculateSliderBoxes","sliderCheckbox","inputHeight","offsetHeight","labelHeight","max","Math","height","RecalculateAllFloatLabelControls","CopyCode","codeFrame","closest","codeElement","codeText","childNodes","node","nodeType","Node","TEXT_NODE","ELEMENT_NODE","processedText","line","trim","navigator","clipboard","writeText","then","button","setTimeout","collapseTopMenu","collapseElement","Collapse","toggle","toggler","item","SessionStorageWithFallback","sessionStoreSupport","set","name","del","cookie","ret","nameEquals","ca","split","i","c","charAt","substring","e","LocalStorageWithFallback","localStoreSupport","timerWaitingToShow","theSpinner","Spinner","lines","width","radius","corners","rotate","direction","color","speed","trail","shadow","hwaccel","className","zIndex","top","left","depth","setDefaultElement","newId","defaultElementId","elementId","self","spin","clearTimeout","stop","changeVideo","vId","iframe","src","myModal","iframeYoutube","cacheFactory","clearAllCaches","destroyAll","getCache","cf","createCache","deleteOnExpire","maxAge","storageMode","storagePrefix","restrict","link","scope","elem","attrs","selector","stOnEnter","on","keyCode","$apply","numberWithCommas","toString","replace","number","precision","isNaN","parseFloat","isFinite","toFixed","parseUrl","page","getManualUrl","Items","Name","DownloadLink","showManual","showDownloads","dlText","dlJson","Title","date","toLocal","m","moment","utc","local","format","fromNow","emailRegexp","require","elm","ctrl","$validators","modelValue","isValidEmails","isDefined","$isEmpty","every","test","$setValidity","ngAnchorDirective","$location","$anchorScroll","attributes","configureHref","fragment","ngAnchor","slice","routeValue","shift","fragmentValue","$set","$observe","$on","toastr","success","text","passwordEntropy","entropy","lastPassword","debouncedCheckPassword","_","debounce","async","passwordChecking","undefined","Entropy","calculatedEntropy","Feedback","Score","$onInit","$doCheck","$onChanges","changesObj","template","controller","bindings","input","min","parseInt","otherModelValue","ngModel","stCompareTo","attr","$watch","$validate","bind","which","$eval","stEnterKey","getLoginMessage","retVal","$$path","getLoginButtonText","showHeader","getHeroImage","getHeadingText","templateUrl","restrictNumeric","metaKey","ctrlKey","String","fromCharCode","paymentService","methods","selectedMethod","disableInvoicing","shorterDuePolicy","alwaysSave","disableCvc","formCtrl","form","_DirectiveName","countryList","geographicLocations","countries","stateList","statesByCountry","getPaymentMethods","result2","PaymentType","SaveCard","invoiceLaterText","selectedPaymentMethodId","UniqueId","selectedPaymentMethodIdChanged","onLoggedIn","mode","onLoggedOut","product","productOptions","productOptionSelection","keySentTo","keyExpires","showLogin","ShowLoginOverlay","getBetaKey","refreshTokenPassThrough","Authorization","ProductId","ExpirationDateUtc","errorResponse","productTypeDiv","activate","notificationFactory","setEmail","doUnsubscribe","Email","cacheControl","getAllPromise","getServices","getAdminUsers","siteId","Admins","resetAdminPassword","userId","newPassword","UserId","NewPassword","endTrial","subscribeExistingCard","serviceId","agentCount","paymentMethod","AgentCount","PaymentMethodId","SecurityCode","subscribeNewCard","CardNumber","NameOnCard","ExpirationMonth","ExpirationYear","Country","Address1","Address2","City","State","ZipCode","clearServiceCache","saveAdvancedOptions","options","cancelSite","setBindings","Bindings","savePaymentMethodExistingCard","savePaymentMethodNewCard","savePaymentMethodNoCard","calculatePriceChangeForUpgrade","agents","NewUserCount","changePlan","resubscribeBeforeCancel","notify","resetGuid","setResetGuid","newGuid","doChange","passwordform","ResetGuid","statusText","settingsPromise","attsPromise","refreshPromise","replyPromise","bodyPromise","msgsPromise","getAccountSettings","getMessageAttachments","ticketMessageId","getMessageBody","getMessages","ticketNumber","ticketId","refreshTicket","sendReply","details","submitTicket","sendTicketAttachment","fileData","FormData","append","FileSize","TicketNumber","File","transformRequest","identity","userAccessService","userPartnerService","$state","isLoading","monogram","toUpperCase","getAreaPermissions","getPartnershipDetails","arr","areaPermissions","Sections","notifications","Notifications","partnerInfo","calculatePartnershipVars","loadingError","canAssignResellerLicenses","canStartLeases","hasAcceptedAgreement","clearCacheAndReloadPage","reload","pi","isActiveReseller","Reseller","IsActive","isInactiveReseller","PartnerReseller","isSuspendedReseller","IsSuspended","isActiveLeaseProvider","LeaseProvider","isInactiveLeaseProvider","PartnerLeases","isSuspendedLeaseProvider","isActiveHighAvailabilityPartner","HighAvailabilityPartner","isInactiveHighAvailabilityPartner","isSuspendedHighAvailabilityPartner","gotoUpgradeLicensePage","gotoRenewLicensePage","processLoginChangeEvent","cache","ShowTermsAgreementOverlay","clearCachedItems"],"mappings":"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","file":"global.min.js","sourcesContent":["(function () {\n\n angular\n .module('smartertoolsApp',\n [\n 'angular-cache',\n 'ngAnimate',\n 'ngCsv',\n 'ngMessages',\n 'ngRoute',\n 'ngSanitize',\n 'ngFileUpload',\n 'payment',\n 'stControls',\n 'toastr',\n 'ui.autofocus',\n 'ui.bootstrap',\n 'ui.router',\n 'angularSpinner'\n ])\n .config(['$httpProvider', httpProvider])\n .config(['$locationProvider', locationProvider])\n .factory('httpRequestAuthenticationInterceptor', httpRequestAuthenticationInterceptor);\n\n function httpProvider($httpProvider) {\n $httpProvider.interceptors.push('httpRequestAuthenticationInterceptor');\n }\n\n function locationProvider($locationProvider) {\n $locationProvider.hashPrefix('');\n }\n\n function httpRequestAuthenticationInterceptor($injector, $window, $rootScope, $q) {\n return {\n request: function ($config, authenticationService) {\n const token = sessionStorage.getItem('stAuthToken');\n if (token) {\n $config.headers['Authorization'] = 'BEARER ' + token;\n }\n return $config;\n },\n responseError: function (rejection) {\n if (rejection.status == 401 && rejection.config.url.indexOf(apiRootUrl) > -1) {\n console.log(`Forward to login page: Status${rejection.status} URL: ${rejection.config.url}`);\n\n const authService = $injector.get('authenticationService');\n authService.clearSession();\n\n $window.location.href = '/';\n return $q.when();\n } else return $q.reject(rejection);\n }\n };\n }\n\n})();","(function () {\n\n // ReSharper disable once UseOfImplicitGlobalInFunctionScope\n angular\n .module('smartertoolsApp')\n .controller('authenticationModalsController', ['$scope', '$timeout', 'authenticationService', authenticationModalsController]);\n\n function authenticationModalsController($scope, $timeout, authenticationService) {\n const vm = this;\n vm.attemptedSubmit = false;\n vm.emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n vm.login = { emailAddress: '', password: '', rememberMe: true };\n vm.user = {\n FirstName: '',\n LastName: '',\n Company: '',\n PhoneNumber: '',\n EmailAddress: '',\n Password: ''\n };\n vm.agreement = { subject: '', body: '', type: '', isAccepted: false };\n\n // Functions\n vm.cancelAndRedirect = cancelAndRedirect;\n vm.closeWindow = closeWindow;\n vm.createUser = createUser;\n vm.doAgreementAccepted = doAgreementAccepted;\n vm.doLogin = doLogin;\n vm.doLogout = doLogout;\n vm.forgotPasswordGoButtonClick = forgotPasswordGoButtonClick;\n vm.hideForgotPasswordAndShowLogin = hideForgotPasswordAndShowLogin;\n vm.modalResetErrors = modalResetErrors;\n vm.resetErrors = resetErrors;\n vm.showCreateAccountModal = showCreateAccountModal;\n vm.showForgotPasswordModal = showForgotPasswordModal;\n vm.showLoginOverlay = showLoginOverlay;\n vm.showTermsAgreementOverlay = showTermsAgreementOverlay;\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n if (window.showAccountCreation) {\n $timeout(ShowCreateAccountModal, 250);\n }\n }\n\n function createUser() {\n if (vm.newUserForm.$invalid)\n return false;\n vm.status = 'submitting';\n\n // Validation for phone number will not pass for empty strings. Must be null if not present\n vm.user.PhoneNumber = vm.user.PhoneNumber != '' ? vm.user.PhoneNumber : null;\n authenticationService.createAccount(vm.user,\n true,\n function (err) {\n vm.status = 'done';\n if (err) {\n window.RenderErrors(err, '#create-account-modal', '#NewUser');\n window.RefreshLoginTopArea();\n } else {\n window.RefreshLoginTopArea();\n bootstrap.Modal.getOrCreateInstance(document.getElementById('create-account-modal')).hide();\n //vm.modalPageCreateAccount = 'step2';\n }\n $scope.$applyAsync();\n });\n return false;\n }\n\n function closeWindow() {\n window.RefreshLoginTopArea();\n bootstrap.Modal.getOrCreateInstance(document.getElementById('create-account-modal')).hide();\n }\n\n function doLogin() {\n if (vm.loginModalForm.$invalid)\n return;\n\n vm.resetErrors();\n vm.status = 'submitting';\n authenticationService.login(vm.login.emailAddress,\n vm.login.password,\n vm.login.rememberMe,\n function (err) {\n vm.status = '';\n if (err) {\n window.RenderErrors(err, '#login-modal', '#Login');\n if (!err.ModelState) {\n vm.login.password = '';\n $scope.$applyAsync();\n\n const loginPassword = document.getElementById('LoginPassword');\n loginPassword.focus();\n loginPassword.select();\n }\n } else {\n vm.login.emailAddress = '';\n vm.login.password = '';\n $scope.$applyAsync();\n bootstrap.Modal.getOrCreateInstance(document.getElementById('login-modal')).hide();\n if (window.loginOverlayCallback)\n window.loginOverlayCallback();\n }\n window.RefreshLoginTopArea();\n });\n }\n\n function doAgreementAccepted() {\n authenticationService.sendAccepted((data) => {\n bootstrap.Modal.getOrCreateInstance(document.getElementById('partner-agreement')).hide();\n if (window.loginOverlayCallback)\n window.loginOverlayCallback();\n window.RefreshLoginTopArea();\n });\n }\n\n function cancelAndRedirect() {\n doLogout();\n }\n\n function doLogout() {\n document.querySelector('#LoginEmailAddress').value = '';\n document.querySelector('#LoginPassword').value = '';\n authenticationService.logout(() => { RefreshLoginTopArea(); });\n }\n\n function forgotPasswordGoButtonClick() {\n if (vm.forgotPasswordForm.$invalid)\n return;\n\n modalResetErrors();\n mySpinner.setElement('forgot-password-modal');\n authenticationService.resetPassword(vm.user.EmailAddress,\n function (err) {\n if (err) {\n document.querySelector('#forgot-password-modal .error-message').textContent = 'Please enter a valid email address';\n const forgotPasswordEmail = document.querySelector('#ForgotPasswordEmailAddress');\n forgotPasswordEmail.value = '';\n forgotPasswordEmail.focus();\n forgotPasswordEmail.select();\n } else {\n mySpinner.setElement();\n vm.modalPageForgotPassword = 'step2';\n }\n $scope.$applyAsync();\n });\n };\n\n function hideForgotPasswordAndShowLogin() {\n bootstrap.Modal.getOrCreateInstance(document.getElementById('forgot-password-modal')).hide();\n showLoginOverlay();\n };\n\n function modalResetErrors() {\n vm.newUserForm.$setPristine();\n vm.newUserForm.$setUntouched();\n vm.forgotPasswordForm.$setPristine();\n vm.forgotPasswordForm.$setUntouched();\n vm.loginModalForm.$setPristine();\n vm.loginModalForm.$setUntouched();\n resetErrors();\n };\n\n function resetErrors() {\n document.querySelectorAll('.error-message').forEach(element => {\n element.textContent = '';\n element.style.display = 'none';\n });\n\n document.querySelectorAll('.server-side-error').forEach(element => {\n element.classList.remove('server-side-error');\n });\n }\n\n function showCreateAccountModal(overlayCallback) {\n if (authenticationService.isLoggedIn())\n return;\n\n modalResetErrors();\n loginOverlayCallback = overlayCallback;\n vm.modalPageCreateAccount = 'step1';\n bootstrap.Modal.getOrCreateInstance(document.getElementById('login-modal')).hide();\n bootstrap.Modal.getOrCreateInstance(document.getElementById('create-account-modal')).show();\n $timeout(() => {\n var newUserFirstName = document.getElementById('NewUserFirstName');\n newUserFirstName.focus();\n newUserFirstName.select();\n }, 250);\n }\n\n function showForgotPasswordModal() {\n modalResetErrors();\n vm.user.EmailAddress = vm.login.emailAddress;\n vm.modalPageForgotPassword = 'step1';\n bootstrap.Modal.getOrCreateInstance(document.getElementById('login-modal')).hide();\n bootstrap.Modal.getOrCreateInstance(document.getElementById('forgot-password-modal')).show();\n $timeout(() => {\n const defaultElement = document.getElementById('ForgotPasswordEmailAddress');\n defaultElement.focus();\n defaultElement.select();\n }, 250);\n }\n\n function showLoginOverlay(overlayCallback) {\n modalResetErrors();\n loginOverlayCallback = overlayCallback;\n\n document.getElementById('LoginEmailAddress').value = '';\n document.getElementById('LoginPassword').value = '';\n document.querySelectorAll('.error-message').forEach(x => x.innerHTML = '');\n\n bootstrap.Modal.getOrCreateInstance(document.getElementById('login-modal')).show();\n $timeout(() => {\n const defaultElement = document.getElementById('LoginEmailAddress');\n defaultElement.focus();\n defaultElement.select();\n }, 250);\n }\n\n function showTermsAgreementOverlay() {\n authenticationService.getAgreement(function (data) {\n vm.agreement.body = data.Body;\n vm.agreement.subject = data.Subject;\n vm.agreement.type = data.Type;\n bootstrap.Modal.getOrCreateInstance(document.getElementById('partner-agreement')).show();\n });\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .service('authenticationService', ['$http', '$q', '$log', '$rootScope', 'refreshToken', authenticationService]);\n\n function authenticationService($http, $q, $log, $rootScope, refreshToken) {\n const vm = this;\n var validatePromise = null;\n var nextValidate = new Date();\n\n // Functions\n vm.setAuthFlags = setAuthFlags;\n vm.getAuthFlags = getAuthFlags;\n vm.setAuthToken = setAuthToken;\n vm.getAuthToken = getAuthToken;\n vm.createAccount = createAccount;\n vm.isLoggedIn = isLoggedIn;\n vm.isReseller = isReseller;\n vm.setLoggedInEmail = setLoggedInEmail;\n vm.getLoggedInEmail = getLoggedInEmail;\n vm.login = login;\n vm.logout = logout;\n vm.setRefreshToken = setRefreshToken;\n vm.getRefreshToken = getRefreshToken;\n vm.resetPassword = resetPassword;\n vm.clearSession = clearSession;\n vm.showTermsCondition = showTermsCondition;\n vm.sendAccepted = sendAccepted;\n vm.getAgreement = getAgreement;\n\n // -----------------------------------------------\n\n function fireLoggedIn() {\n refreshToken.clearCached();\n $rootScope.$broadcast('authentication:logged-in', {});\n $rootScope.$applyAsync();\n }\n\n function fireLoggedOut() {\n refreshToken.clearCached();\n $rootScope.$broadcast('authentication:logged-out', {});\n $rootScope.$applyAsync();\n }\n\n function isLoggedIn() {\n logoutIfRefreshTokenInvalid();\n return !!getRefreshToken();\n }\n\n function isReseller() {\n const flags = getAuthFlags();\n return flags && flags.indexOf('reseller') >= 0;\n }\n\n // Gets\n\n function getAuthToken() {\n return sessionStorage.getItem('stAuthToken');\n }\n\n function getAuthFlags() {\n return localStorage.getItem('stAuthFlags');\n }\n\n function getLoggedInEmail() {\n return localStorage.getItem('stEmail');\n }\n\n function getRefreshToken() {\n return localStorage.getItem('stRefreshToken') || sessionStorage.getItem('stRefreshToken');\n }\n\n function getAgreement(callback) {\n const termId = 1;\n $http.post(apiRootUrl + `v1/account/partner/getPartnerAgreement`, JSON.stringify({ TermCondID: termId }))\n .then((response) => { callback(response.data); });\n }\n\n // Sets\n\n function setAuthToken(newToken) {\n sessionStorage.setItem('stAuthToken', newToken);\n return newToken;\n }\n\n function setAuthFlags(newToken) {\n localStorage.setItem('stAuthFlags', newToken);\n return newToken;\n }\n\n function setLoggedInEmail(newEmail) {\n localStorage.setItem('stEmail', newEmail);\n return newEmail;\n }\n\n function setRefreshToken(newToken, longTerm) {\n if (longTerm === void 0) {\n longTerm = false;\n }\n if (longTerm) {\n sessionStorage.setItem('stRefreshToken', ''); // wipe out session level one\n localStorage.setItem('stRefreshToken', newToken);\n } else {\n localStorage.setItem('stRefreshToken', ''); // wipe out long term one\n sessionStorage.setItem('stRefreshToken', newToken);\n }\n return newToken;\n }\n\n function login(email, password, rememberMe, callback) {\n const params = {\n EmailAddress: email,\n Password: password\n };\n $http.post(apiRootUrl + `v1/auth/authenticate-user`, JSON.stringify(params))\n .then((result) => {\n var data = result.data;\n setAuthToken(data.AccessToken);\n setAuthFlags(data.Flags);\n setRefreshToken(data.RefreshToken, rememberMe);\n setLoggedInEmail(data.EmailAddress);\n fireLoggedIn();\n if (callback) {\n callback();\n }\n }, (result) => {\n clearSession();\n if (callback) {\n const data = result && result.data;\n callback(data);\n }\n });\n }\n\n\n function showTermsCondition(callback) {\n $http.get(apiRootUrl + `v1/account/partner/checkAgreement`)\n .then(\n (response) => { callback(response.data.ShouldShow); },\n (error) => { callback(false); }\n );\n }\n\n function sendAccepted(callback) {\n $http.post(apiRootUrl + `v1/account/partner/setAccepted`)\n .then((response) => { callback(response.data); });\n }\n\n function logout(callback) {\n const refresh = getRefreshToken();\n if (!refresh) {\n clearSession();\n if (callback) {\n callback();\n }\n fireLoggedOut();\n return;\n }\n\n const params = JSON.stringify({ RefreshToken: refresh });\n $http.post(apiRootUrl + 'v1/auth/revoke-refresh-token', params)\n .then(() => {\n clearSession();\n if (callback) {\n callback();\n }\n fireLoggedOut();\n }, () => {\n clearSession();\n if (callback) {\n callback();\n }\n fireLoggedOut();\n });\n }\n\n function resetPassword(email, callback) {\n const params = JSON.stringify({ EmailAddress: email });\n $http.post(apiRootUrl + 'v1/auth/password-reset-email', params)\n .then(() => {\n if (callback) {\n callback();\n }\n });\n }\n\n function createAccount(inputs, rememberMe, callback) {\n $http.post(apiRootUrl + 'v1/auth/create-account', JSON.stringify(inputs))\n .then((result) => {\n var data = result.data;\n if (data.Success) {\n setAuthToken(data.AccessToken);\n setAuthFlags(data.Flags);\n setRefreshToken(data.RefreshToken, rememberMe);\n setLoggedInEmail(data.EmailAddress);\n fireLoggedIn();\n if (callback) {\n callback();\n }\n } else {\n clearSession();\n if (callback) {\n callback(data);\n }\n }\n }, (result) => {\n clearSession();\n if (callback) {\n var data = result && result.data;\n callback(data);\n }\n });\n }\n\n function clearSession() {\n setAuthToken('');\n setAuthFlags([]);\n setRefreshToken('');\n setLoggedInEmail('');\n sessionStorage.setItem('smartertoolsCartItemCount', 0);\n sessionStorage.setItem('smartertoolsCartGuid', '');\n if (sessionStorage)\n sessionStorage.clear();\n if (localStorage)\n localStorage.clear();\n }\n\n function logoutIfRefreshTokenInvalid() {\n var defer = $q.defer();\n\n if (validatePromise) {\n return validatePromise;\n }\n\n if (!getRefreshToken() || nextValidate > new Date()) {\n defer.resolve('OK');\n return defer.promise;\n }\n\n const params = { RefreshToken: getRefreshToken() };\n\n validatePromise = defer.promise;\n\n $http.post(apiRootUrl + 'v1/auth/validate-refresh-token', JSON.stringify(params))\n .then((resp) => {\n if (resp && resp.data && resp.data.Success && resp.data.IsValid)\n return;\n logout(onLogoutComplete);\n }, () => { logout(onLogoutComplete); });\n\n return defer.promise;\n\n function onLogoutComplete() {\n window.RefreshLoginTopArea();\n location.href = '/';\n defer.resolve('OK');\n validatePromise = null;\n nextValidate = new Date((new Date()).getTime() + 30000);\n }\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .service('refreshToken', ['$http', '$q', '$log', refreshTokenService]);\n\n function refreshTokenService($http, $q, $log) {\n const vm = this;\n vm.urlBase = apiRootUrl;\n vm.nextRefresh = 0;\n vm.existingRefreshToken = localStorage.getItem('stRefreshToken') || sessionStorage.getItem('stRefreshToken');\n\n var refreshTokenPromise;\n\n // Functions\n vm.refreshToken = refreshToken;\n vm.clearCached = clearCached;\n\n // -----------------------------------------------\n\n function clearCached() {\n refreshTokenPromise = null;\n vm.nextRefresh = 0;\n }\n\n function refreshToken() {\n // Is there already a promise underway? If so, return that\n var tokenPromise = refreshTokenPromise;\n if (tokenPromise) {\n return tokenPromise;\n }\n\n var defer = $q.defer();\n refreshTokenPromise = defer.promise;\n\n if (vm.nextRefresh > new Date() && vm.refreshToken) {\n defer.resolve('OK');\n refreshTokenPromise = null;\n return defer.promise;\n }\n\n $log.debug('refreshing token');\n\n const refreshToken2 = localStorage.getItem('stRefreshToken') || sessionStorage.getItem('stRefreshToken');\n if (!refreshToken2)\n onRefreshFailed('No Refresh Token');\n else {\n const request = {\n method: 'POST',\n url: vm.urlBase + 'v1/auth/refresh-access-token',\n data: { RefreshToken: refreshToken2 }\n };\n $http(request)\n .then(onRefreshSuccessful)\n .catch(onRefreshFailed);\n }\n return defer.promise;\n\n function onRefreshSuccessful(successResponse) {\n localStorage.setItem('stEmail', successResponse.data.EmailAddress);\n sessionStorage.setItem('stAuthToken', successResponse.data.AccessToken);\n vm.nextRefresh = new Date((new Date()).getTime() + 5 * 60000);\n $log.debug(`refresh ok - next at ${vm.nextRefresh}`);\n defer.resolve('OK');\n refreshTokenPromise = null;\n }\n\n function onRefreshFailed(error) {\n $log.debug(`refresh failed ${error}`);\n defer.reject(error);\n refreshTokenPromise = null;\n if (document.location.href.indexOf('/account') >= 0) {\n localStorage.removeItem('stEmail');\n sessionStorage.removeItem('stAuthToken');\n if (error !== 'No Refresh Token') {\n document.location = '/';\n }\n }\n }\n }\n\n }\n\n})();","function divCtrlInit(el) {\n if (el.querySelector('select')) {\n el.classList.add('contains-select');\n }\n\n const labelElements = el.querySelectorAll('label');\n labelElements.forEach(function(label) {\n label.addEventListener('click', function(event) {\n var previousInput = label.previousElementSibling;\n if (previousInput && (previousInput.tagName === 'INPUT' || previousInput.tagName === 'SELECT')) {\n previousInput.focus();\n }\n event.preventDefault();\n });\n });\n\n const inputElements = el.querySelectorAll('input, select');\n inputElements.forEach((inputElement) => {\n inputElement.addEventListener('focus', (event) => divCtrlFocus(event.target));\n inputElement.addEventListener('blur', (event) => divCtrlBlur(event.target));\n inputElement.addEventListener('keyup', (event) => divCtrlChange(event.target));\n divCtrlCheckState(inputElement);\n });\n}\n\nfunction divCtrlFocus(ev) {\n ev.parentNode.classList.add('focused');\n divCtrlCheckState(ev);\n}\n\nfunction divCtrlBlur(ev) {\n ev.parentNode.classList.remove('focused');\n divCtrlCheckState(ev);\n}\n\nfunction divCtrlChange(ev) {\n divCtrlCheckState(ev);\n}\n\nfunction divCtrlCheckState(ev) {\n var placeholderText = ev.getAttribute('placeholder');\n if (!placeholderText) {\n const label = ev.nextElementSibling;\n if (label && label.tagName.toLowerCase() === 'label') {\n placeholderText = label.textContent;\n if (placeholderText) ev.setAttribute('placeholder', placeholderText);\n }\n }\n\n if (ev.hasAttribute('required') && (!placeholderText || !divCtrlEndsWith(placeholderText, ' *'))) {\n placeholderText += ' *';\n ev.setAttribute('placeholder', placeholderText);\n }\n\n if (ev.value || ev.tagName.toLowerCase() === 'select') {\n ev.parentNode.classList.add('filled');\n ev.parentNode.classList.remove('empty');\n } else {\n ev.parentNode.classList.remove('filled');\n ev.parentNode.classList.add('empty');\n }\n}\n\nfunction divCtrlEndsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\n\nfunction divCtrlRecalculateSliderBoxes() {\n document.querySelectorAll('.slider-checkbox').forEach(function (sliderCheckbox) {\n var inputHeight = sliderCheckbox.querySelector('input').offsetHeight;\n if (inputHeight < 20) inputHeight = 20;\n\n const labelHeight = sliderCheckbox.querySelector('label:nth-of-type(2)').offsetHeight;\n const max = Math.max(inputHeight, labelHeight);\n sliderCheckbox.style.height = max + 'px';\n });\n}\n\nfunction RecalculateAllFloatLabelControls() {\n document.querySelectorAll('div.float-label').forEach(divCtrlInit);\n divCtrlRecalculateSliderBoxes();\n}\n\nfunction CopyCode(event) {\n const codeFrame = event.target.closest('.code-frame');\n if (codeFrame) {\n // Get the code text\n const codeElement = codeFrame.querySelector('.code');\n let codeText = '';\n\n codeElement.childNodes.forEach(node => {\n if (node.nodeType === Node.TEXT_NODE) {\n codeText += node.textContent;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n if (node.tagName === 'BR') {\n codeText += '\\n';\n } else {\n codeText += node.textContent;\n }\n }\n });\n\n const processedText = codeText\n .split('\\n') // Split by newlines\n .map(line => line.trim()) // Trim each line\n .filter(line => line.length > 0) // Remove blank lines\n .join('\\n'); // Join lines back together\n\n navigator.clipboard.writeText(processedText).then(() => {\n const button = event.target;\n button.classList.add('copied');\n button.textContent = 'Copied';\n\n // Remove the 'copied' class after 1.5 seconds\n setTimeout(() => {\n button.classList.remove('copied');\n button.textContent = 'Copy';\n }, 1500);\n\n }).catch(err => {\n console.error('Could not copy text: ', err);\n });\n }\n}\n\n\ndocument.addEventListener('DOMContentLoaded', function() {\n RecalculateAllFloatLabelControls();\n});\n\n\nwindow.addEventListener('resize', divCtrlRecalculateSliderBoxes);\n","document.querySelectorAll('.navbar-toggler').forEach(toggler => {\n toggler.addEventListener('click', () => document.body.classList.toggle('st-no-scroll'));\n});\n\nfunction collapseTopMenu() {\n document.querySelectorAll('.navbar-collapse').forEach(collapseElement => {\n new bootstrap.Collapse(collapseElement, { toggle: false }).hide();\n });\n document.body.classList.remove('st-no-scroll');\n}\n\ndocument.querySelectorAll('.dropdown-item').forEach(item => {\n item.addEventListener('click', collapseTopMenu);\n});","const SessionStorageWithFallback = (function () {\n return {\n sessionStoreSupport: sessionStoreSupport,\n set: set,\n get: get,\n del: del\n };\n\n function sessionStoreSupport() {\n try {\n return 'sessionStorage' in window && window['sessionStorage'] !== null;\n } catch (e) {\n return false;\n }\n }\n function set(name, value) {\n if (value === undefined || value === null || value === '') {\n del(name);\n } else if (sessionStoreSupport()) {\n sessionStorage.setItem(name, value);\n } else {\n document.cookie = `${name}=${value}; path=/`;\n }\n }\n function get(name) {\n let ret;\n if (sessionStoreSupport()) {\n ret = sessionStorage.getItem(name);\n switch (ret) {\n case 'true':\n return true;\n case 'false':\n return false;\n default:\n return ret;\n }\n } else {\n const nameEquals = `${name}=`;\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEquals) === 0) {\n ret = c.substring(nameEquals.length, c.length);\n switch (ret) {\n case 'true':\n return true;\n case 'false':\n return false;\n default:\n return ret;\n }\n }\n }\n return null;\n }\n }\n\n function del(name) {\n if (sessionStoreSupport()) {\n sessionStorage.removeItem(name);\n } else {\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n }\n }\n})();\n\nconst LocalStorageWithFallback = (function () {\n return {\n localStoreSupport: localStoreSupport,\n set: set,\n get: get,\n del: del\n };\n\n function localStoreSupport() {\n try {\n return 'localStorage' in window && window['localStorage'] !== null;\n } catch (e) {\n return false;\n }\n }\n\n function set(name, value) {\n if (value === undefined || value === null || value === '') {\n LocalStorageWithFallback.del(name);\n } else if (LocalStorageWithFallback.localStoreSupport()) {\n localStorage.setItem(name, value);\n } else {\n document.cookie = name + '=' + value + '; expires=Thu, 31 Dec 2099 00:00:00 UTC; path=/';\n }\n }\n\n function get(name) {\n var ret;\n if (LocalStorageWithFallback.localStoreSupport()) {\n ret = localStorage.getItem(name);\n switch (ret) {\n case 'true':\n return true;\n case 'false':\n return false;\n default:\n return ret;\n }\n } else {\n const nameEquals = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEquals) === 0) {\n ret = c.substring(nameEquals.length, c.length);\n switch (ret) {\n case 'true':\n return true;\n case 'false':\n return false;\n default:\n return ret;\n }\n }\n }\n return null;\n }\n }\n\n function del(name) {\n if (LocalStorageWithFallback.localStoreSupport()) {\n localStorage.removeItem(name);\n } else {\n document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/';\n }\n }\n})();\n","var mySpinner;\n(function (mySpinner) {\n var theSpinner = new Spinner({\n lines: 13,\n length: 20,\n width: 10,\n radius: 30,\n corners: 1,\n rotate: 0,\n direction: 1,\n color: '#000',\n speed: 2,\n trail: 60,\n shadow: true,\n hwaccel: false,\n className: 'spinner',\n zIndex: 2e9,\n top: '200px',\n left: '50%' // Left position relative to parent\n });\n var depth = 0;\n var timerWaitingToShow;\n var elementId;\n var defaultElementId = 'rootDiv';\n var minimumMsToShow = 250;\n var delayMsBeforeShow = 250;\n\n mySpinner.setDefaultElement = setDefaultElement;\n mySpinner.setElement = setElement;\n mySpinner.show = show;\n mySpinner.hide = hide;\n\n function setDefaultElement(newId) {\n this.defaultElementId = newId;\n }\n\n function setElement(newId) {\n this.elementId = newId;\n }\n\n function show() {\n var self = this;\n depth++;\n if (depth === 1) {\n timerWaitingToShow = setTimeout(function () {\n timerWaitingToShow = null;\n theSpinner.spin(document.getElementById(self.elementId || defaultElementId));\n }, delayMsBeforeShow);\n }\n }\n\n function hide() {\n if (timerWaitingToShow) {\n depth--;\n if (depth <= 0) {\n clearTimeout(timerWaitingToShow);\n depth = 0;\n }\n } else {\n setTimeout(function () {\n depth--;\n if (depth <= 0) {\n theSpinner.stop();\n depth = 0;\n }\n }, minimumMsToShow);\n }\n }\n})(mySpinner || (mySpinner = {}));\n","document.addEventListener('DOMContentLoaded', function () {\n const myModal = document.getElementById('myModal');\n if (myModal) {\n myModal.addEventListener('hidden.bs.modal', () => {\n const iframeYoutube = document.getElementById('iframeYoutube');\n if (iframeYoutube) {\n iframeYoutube.setAttribute('src', '#');\n }\n });\n }\n});\n\nfunction changeVideo(vId) {\n const iframe = document.getElementById('iframeYoutube');\n if (iframe)\n iframe.src = `https://www.youtube.com/embed/${vId}?autoplay=1`;\n bootstrap.Modal.getOrCreateInstance(document.getElementById('myModal')).show();\n}","(function () {\n\n angular\n .module('smartertoolsApp')\n .factory('cacheControl', ['CacheFactory', cacheControl]);\n\n function cacheControl(cacheFactory) {\n return {\n clearAllCaches: clearAllCaches,\n getCache: getCache\n };\n\n // -----------------------------------------------\n\n function clearAllCaches() {\n cacheFactory.destroyAll();\n }\n\n function getCache(name) {\n const cf = cacheFactory.get(name);\n if (cf) return cf;\n\n cacheFactory.createCache(name,\n {\n deleteOnExpire: 'aggressive',\n maxAge: 1 * 60 * 1000,\n storageMode: 'sessionStorage',\n storagePrefix: 'c.'\n });\n return cacheFactory.get(name);\n }\n }\n\n})();","(function () {\n\n angular\n .module('stControls', [])\n .directive('stOnEnter', stOnEnter);\n\n function stOnEnter() {\n return {\n restrict: 'A',\n link: function (scope, elem, attrs) {\n var selector = attrs.stOnEnter;\n elem.on('keydown',\n function (event) {\n if (event.keyCode !== 13)\n return true;\n scope.$apply(selector);\n return false;\n });\n }\n };\n }\n\n})();","(function() {\n\n angular\n .module('smartertoolsApp')\n .filter('dashedCurrency', dashedCurrency);\n\n function dashedCurrency() {\n return function (number, precision) {\n if (!number || isNaN(parseFloat(number)) || !isFinite(number))\n return '-';\n precision = precision || 2;\n if (number < 0) {\n return '-$' + numberWithCommas((number*-1).toFixed(precision));\n } else {\n return '$' + numberWithCommas(number.toFixed(precision));\n }\n }\n }\n\n function numberWithCommas(x) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n})();","(function () {\n angular\n .module('smartertoolsApp')\n .controller('downloadsModalController', ['$scope', downloadsModalController]);\n\n function downloadsModalController($scope) {\n const vm = this;\n vm.page = 'downloads';\n\n // Functions\n vm.getManualUrl = getManualUrl;\n vm.parseUrl = parseUrl;\n vm.showManual = showManual;\n vm.showDownloads = showDownloads;\n\n // -----------------------------------------------\n\n function getManualUrl() {\n if (!vm.Items)\n return '';\n\n for (let i = 0; i < vm.Items.length; i++) {\n if (vm.Items[i].Name.indexOf('Manual') >= 0)\n return parseUrl(vm.Items[i].DownloadLink);\n }\n\n return '';\n }\n\n function parseUrl(url) {\n if (!url) return url;\n return url.indexOf('http') === 0\n ? url\n : url.indexOf('/') === 0\n ? `https://downloads.smartertools.com${url}`\n : `https://downloads.smartertools.com/${url}`;\n }\n\n function showManual() {\n vm.page = 'manual';\n $scope.$applyAsync();\n }\n\n function showDownloads(dlText, dlJson) {\n if (dlText) {\n vm.Title = ` - ${dlText}`;\n vm.Items = dlJson;\n bootstrap.Modal.getOrCreateInstance(document.getElementById('downloads-modal')).show();\n }\n\n vm.page = 'downloads';\n $scope.$applyAsync();\n }\n }\n\n})();","//(function () {\n\n// angular\n// .module('smartertoolsApp')\n// .directive('fileModel', ['$parse', fileModelDirective]);\n\n// function fileModelDirective($parse) {\n// return {\n// restrict: 'A',\n// link: function (scope, element, attrs) {\n// const model = $parse(attrs.fileModel);\n// var modelSetter = model.assign;\n\n// element.bind('change',\n// function () {\n// scope.$apply(function () {\n// modelSetter(scope, element[0].files[0]);\n// });\n// });\n// }\n// };\n// }\n\n//})();","//(function () {\n\n// angular\n// .module('smartertoolsApp')\n// .service('fileUpload', ['$http', fileUploadService]);\n\n// function fileUploadService($http) {\n// const vm = this;\n\n// // functions\n// vm.uploadFileToUrl = uploadFileToUrl;\n\n// // -----------------------------------------------\n\n// function uploadFileToUrl(file, uploadUrl, callbackSuccess, callbackFail) {\n// const fd = new FormData();\n// fd.append('file', file);\n// $http\n// .post(uploadUrl, fd, {\n// transformRequest: angular.identity,\n// headers: {'Content-Type': undefined}\n// })\n// .then(\n// () => {\n// if (callbackSuccess) callbackSuccess();\n// },\n// (err) => {\n// if (callbackFail) callbackFail(err);\n// });\n// }\n// }\n\n//})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .filter('friendlyDate', friendlyDate);\n\n function friendlyDate() {\n return function (date, toLocal) {\n if (date === null)\n return '-';\n\n let m = moment.utc(date, 'YYYY-MM-DD H:mm');\n if (toLocal == 'true' || toLocal == true) {\n m = m.local();\n }\n return m.format('M/D/YYYY h:mm A');\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .filter('friendlyDateNoTime', friendlyDateNoTime);\n\n function friendlyDateNoTime() {\n return function (date, toLocal) {\n if (date === null)\n return '-';\n\n let m = moment.utc(date, 'YYYY-MM-DD H:mm');\n if (toLocal == 'true' || toLocal == true) {\n m = m.local();\n }\n return m.format('M/D/YYYY');\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .filter('friendlyFromNow', friendlyFromNow);\n\n function friendlyFromNow() {\n return function (date) {\n if (date === 'N/A' || date === null)\n return 'N/A';\n else if (date >= 0)\n return date;\n else\n return 'Exp ' + moment(new Date()).add(date, 'days').fromNow();\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .filter('friendlyFullDate', friendlyFullDate);\n\n function friendlyFullDate() {\n return function (date, toLocal) {\n if (date === null)\n return '-';\n\n let m = moment.utc(date, 'YYYY-MM-DD H:mm');\n if (toLocal == 'true' || toLocal == true) {\n m = m.local();\n }\n return m.format('MMMM Do, YYYY h:mm:ss A');\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .filter('friendlyMonthYear', friendlyMonthYear);\n\n function friendlyMonthYear() {\n return function (date, toLocal) {\n if (date === null)\n return '-';\n\n let m = moment.utc(date, 'YYYY-MM-DD H:mm');\n if (toLocal == 'true' || toLocal == true) {\n m = m.local();\n }\n return m.format('MMM YYYY');\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('multiEmailValidator', multiEmailValidator);\n\n function multiEmailValidator() {\n const emailRegexp =\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n\n return {\n require: 'ngModel',\n restrict: 'A',\n link: function (scope, elm, attrs, ctrl) {\n if (ctrl && ctrl.$validators.email) {\n ctrl.$validators.email = function (modelValue) {\n\n let isValidEmails;\n if (angular.isDefined(modelValue)) {\n isValidEmails = ctrl.$isEmpty(modelValue) ||\n modelValue.split(',').every((email) => emailRegexp.test(email.trim())) ||\n modelValue.split(';').every((email) => emailRegexp.test(email.trim()));\n }\n\n ctrl.$setValidity('multi-email', isValidEmails);\n\n return isValidEmails;\n };\n }\n }\n };\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('ngAnchor', ngAnchorDirective);\n\n function ngAnchorDirective($location, $anchorScroll) {\n return ({\n link: link,\n restrict: 'A'\n });\n\n function link(scope, element, attributes) {\n // Whenever the attribute changes, we have to update our HREF state\n // to incorporate the new ngAnchor value as the embedded fragment.\n attributes.$observe('ngAnchor', configureHref);\n\n // Whenever the location changes, we want to update the HREF value\n // of this link to incorporate the current URL plus the URL-fragment\n // that we are watching in the ngAnchor attribute.\n scope.$on('$locationChangeSuccess', configureHref);\n\n // I update the HREF attribute to incorporate both the current top-level \n // fragment plus our in -page URL - fragment intent.\n function configureHref() {\n let fragment = (attributes.ngAnchor || '');\n // Strip off the leading # to make the string concatenation\n // handle variable-state inputs (ie, ones that may or may not\n // include the leading pound sign).\n if (fragment.charAt(0) === '#') {\n fragment = fragment.slice(1);\n }\n // Since the anchor is really the fragment INSIDE the fragment,\n // we have to build two levels of fragment.\n const routeValue = '#' + $location.url().split('#').shift();\n const fragmentValue = '#' + fragment;\n attributes.$set('href', routeValue + fragmentValue);\n }\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .factory('notificationFactory', ['toastr', notificationFactory]);\n\n function notificationFactory(toastr) {\n return {\n success: (text) => toastr.success(text),\n error: (text) => toastr.error(text)\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('smartertoolsApp')\n .component('passwordEntropy', {\n template: `\n
\n
Password is Too Weak
\n
Password is Too Weak
\n
Password is Acceptable
\n
Password is Strong
\n
Password is Very Strong
\n
\n
{{$ctrl.Feedback.Warning}}
\n
\n
`,\n controller: passwordEntropy,\n bindings: {\n password: '=',\n calculatedEntropy: '='\n }\n });\n\n /* @ngInject */\n function passwordEntropy($rootScope, $scope, $http) {\n const vm = this;\n vm.entropy = 0;\n vm.lastPassword = null;\n const debouncedCheckPassword = _.debounce(checkPassword, 100);\n\n // -----------------------------------------------\n\n vm.$onInit = function () {\n };\n\n vm.$doCheck = function() {\n if (vm.password != vm.lastPassword) {\n vm.lastPassword = vm.password;\n debouncedCheckPassword();\n }\n };\n\n vm.$onChanges = function (changesObj) {\n };\n\n async function checkPassword() {\n try {\n const passwordChecking = vm.password;\n if (vm.password === null || vm.password === undefined || vm.password === '') {\n $scope.$applyAsync(() => {\n vm.Entropy = -1;\n vm.calculatedEntropy = -1;\n vm.Feedback = null;\n });\n return;\n }\n const result = await $http.post(`${apiRootUrl}v1/password-strength/calculate`, JSON.stringify({password: passwordChecking}));\n if (passwordChecking == vm.password) {\n $scope.$applyAsync(() => {\n vm.Entropy = result.data.Score;\n vm.calculatedEntropy = vm.Entropy;\n vm.Feedback = result.data.Feedback;\n });\n }\n } catch (err) {\n // -2 is allowed and will not show any message. If the backend requires it, it will throw a backend error\n console.log(err);\n vm.Entropy = -2;\n vm.calculatedEntropy = -2;\n vm.Feedback = null;\n }\n }\n }\n\n})();\n","(function () {\n\n angular\n .module('smartertoolsApp')\n .filter('range', rangeFilter);\n\n function rangeFilter() {\n return function (input, min, max) {\n min = parseInt(min);\n max = parseInt(max);\n for (let i = min; i < max; i++)\n input.push(i);\n return input;\n };\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('stCompareToIfRequired', stCompareToIfRequired);\n\n function stCompareToIfRequired() {\n return {\n require: 'ngModel',\n scope: {otherModelValue: '=stCompareToIfRequired'},\n link: function (scope, element, attributes, ngModel) {\n ngModel.$validators.stCompareTo = function (modelValue) {\n if (!modelValue && !element.attr('required'))\n return true;\n return modelValue == scope.otherModelValue;\n };\n scope.$watch('otherModelValue', () => {\n ngModel.$validate();\n });\n }\n };\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('stCompareTo', stCompareTo);\n\n function stCompareTo() {\n return {\n require: 'ngModel',\n scope: {otherModelValue: '=stCompareTo'},\n link: function (scope, element, attributes, ngModel) {\n ngModel.$validators.stCompareTo = (modelValue) => modelValue == scope.otherModelValue;\n scope.$watch('otherModelValue', () => {\n ngModel.$validate();\n });\n }\n };\n }\n\n})();","(function () {\n 'use strict';\n\n // Processes Enter Key commands on input controls. \n\n // Usage Example:\n // \n\n angular\n .module('smartertoolsApp')\n .directive('stEnterKey', stEnterKeyDirective);\n\n function stEnterKeyDirective() {\n return function (scope, element, attrs) {\n element.bind('keydown keypress', onKeyDown);\n\n function onKeyDown(event) {\n const keyCode = event.which || event.keyCode;\n\n // If enter key is pressed\n if (keyCode === 13) {\n scope.$apply(function () {\n // Evaluate the expression\n scope.$eval(attrs.stEnterKey);\n });\n event.preventDefault();\n }\n }\n };\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('stLoading', [stLoading]);\n\n function stLoading() {\n return {\n template:\n \"
\" +\n \"
\" +\n \"
\" +\n '
' +\n '
'\n };\n }\n\n})();\n","(function () {\n angular\n .module('smartertoolsApp')\n .controller('stLoginRequiredController', ['$scope', '$location', stLoginRequiredController]);\n\n function stLoginRequiredController($scope, $location) {\n const vm = this;\n\n // Functions\n vm.getLoginMessage = getLoginMessage;\n vm.getLoginButtonText = getLoginButtonText;\n vm.showHeader = showHeader;\n vm.getHeroImage = getHeroImage;\n vm.getHeadingText = getHeadingText;\n\n // -----------------------------------------------\n\n function getHeroImage() {\n switch ($location.$$path) {\n case '/support':\n return 'sales-hero.jpg';\n default:\n return 'landing-hero.jpg';\n }\n }\n\n function getLoginMessage() {\n let retVal = '

';\n\n switch ($location.$$path) {\n case '/support':\n retVal += 'Licenses covered by Maintenance and Support receive unlimited technical support and access to all new features, fixes, and improvements to the software. Product installation assistance, product training, and 24x7x365 emergency support options are also available for purchase.';\n break;\n default:\n retVal += 'In order to access your account, you must first login.';\n break;\n }\n\n retVal += '

';\n\n return retVal;\n }\n\n function getLoginButtonText() {\n return 'Login';\n }\n\n function getHeadingText() {\n switch ($location.$$path) {\n case '/support':\n return 'Technical Support';\n default:\n return 'My Account';\n }\n }\n\n function showHeader() {\n switch ($location.$$path) {\n case '/support':\n return false;\n default:\n return true;\n }\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('stLoginRequiredNotice', [stLoginRequiredNotice]);\n\n function stLoginRequiredNotice() {\n return {\n templateUrl: '/app/global/components/st-login-required-notice.html'\n };\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('stNoItems', [stNoItems]);\n\n function stNoItems() {\n return {\n template: \"
There are no items to show in this list
\"\n };\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('stOnlyNumeric', stOnlyNumeric);\n\n function stOnlyNumeric() {\n return {\n restrict: 'A',\n link: function postLink(scope, element) {\n element.bind('keypress', restrictNumeric);\n }\n };\n\n function restrictNumeric(e) {\n if (e.metaKey || e.ctrlKey || e.which === 0 || e.which < 33) {\n return;\n }\n if (e.which === 32 || !!/[\\d\\s]/.test(String.fromCharCode(e.which)) === false) {\n e.preventDefault();\n }\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('stPaymentForm', ['payments', '$timeout', stPaymentForm]);\n\n function stPaymentForm(paymentService, $timeout) {\n return {\n require: '^form',\n scope: {\n methods: '=stMethods',\n selectedMethod: '=stSelectedMethod',\n disableInvoicing: '=stDisableInvoicing',\n shorterDuePolicy: '=?stShorterDuePolicy',\n alwaysSave: '=stAlwaysSave',\n disableCvc: '=stDisableCvc'\n },\n templateUrl: '/app/global/components/st-payment-form.html',\n link: {\n post: function (scope, element, attrs, formCtrl) {\n scope.form = formCtrl;\n scope._DirectiveName = 'stPaymentForm';\n scope.countryList = geographicLocations.countries;\n scope.stateList = geographicLocations.statesByCountry;\n scope.shorterDuePolicy = !!scope.shorterDuePolicy;\n\n paymentService.getPaymentMethods()\n .then(function (result) {\n const result2 = [];\n for (let i = 0; i < result.length; i++) {\n let item = result[i];\n if (scope.disableInvoicing && item.PaymentType === 'invoice')\n continue;\n if (scope.alwaysSave)\n item.SaveCard = true;\n result2.push(item);\n }\n scope.methods = result2;\n scope.invoiceLaterText = paymentService.invoiceLaterText;\n scope.selectedMethod = scope.methods && scope.methods.length > 0\n ? scope.methods[0]\n : null;\n scope.selectedPaymentMethodId = scope.selectedMethod == null ? null : scope.selectedMethod.UniqueId;\n });\n\n scope.selectedPaymentMethodIdChanged = function () {\n scope.selectedMethod = null;\n if (scope.methods == null)\n return;\n for (let i = 0; i < scope.methods.length; i++) {\n const item = scope.methods[i];\n if (item.UniqueId == scope.selectedPaymentMethodId) {\n scope.selectedMethod = item;\n break;\n }\n }\n };\n $timeout(function () {\n // this code will execute after the render phase\n RecalculateAllFloatLabelControls();\n });\n }\n }\n };\n }\n})();","/*\n* Autofocus directive. \n* \n* Apply to an input or select element using syntax like this:\n* \n* \n*/\n\n(function () {\n\n angular\n .module('ui.autofocus', [])\n .directive('autofocus', ['$timeout', autofocusDirective]);\n\n function autofocusDirective($timeout) {\n return {\n restrict: 'A',\n link: function (scope, element, attr) {\n $timeout(() => element[0].focus(), 0, false);\n }\n };\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .controller('betaSignupController', ['$scope', '$http', 'authenticationService', betaSignupController]);\n\n function betaSignupController($scope, $http, authenticationService) {\n const vm = this;\n vm.emailAddress = authenticationService.getLoggedInEmail();\n vm.mode = authenticationService.isLoggedIn() ? 'form' : 'login'; // requesting, completed and error are other possible results\n vm.product = 'smartermail';\n vm.productOptions = null;\n vm.productOptionSelection = null;\n vm.keySentTo = null;\n vm.keyExpires = null;\n\n // Functions\n vm.showLogin = showLogin;\n vm.getBetaKey = getBetaKey;\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n $scope.$on('authentication:logged-in', onLoggedIn);\n $scope.$on('authentication:logged-out', onLoggedOut);\n\n const productTypeDiv = document.getElementById('productType');\n if (productTypeDiv)\n vm.product = productTypeDiv.getAttribute('data-product-type');\n\n queryAvailableProducts();\n }\n\n function onLoggedIn(event, data) {\n if (vm.mode === 'form' || vm.mode === 'login')\n vm.mode = authenticationService.isLoggedIn() ? 'form' : 'login';\n vm.emailAddress = authenticationService.getLoggedInEmail();\n\n $scope.$applyAsync();\n RecalculateAllFloatLabelControls();\n }\n\n function onLoggedOut(event, data) {\n if (vm.mode === 'form' || vm.mode === 'login')\n vm.mode = authenticationService.isLoggedIn() ? 'form' : 'login';\n }\n\n function showLogin() {\n ShowLoginOverlay();\n }\n\n function queryAvailableProducts() {\n $http\n .get(`${apiRootUrl}v1/${vm.product}/beta-license-types`)\n .then(\n function (successResponse) {\n if (successResponse.data.Items.length)\n vm.productOptionSelection = successResponse.data.Items[0];\n vm.productOptions = successResponse.data.Items;\n },\n function (errorResponse) {\n vm.mode = 'error';\n }\n );\n }\n\n function getBetaKey() {\n vm.mode = 'requesting';\n refreshTokenPassThrough(function () {\n $http({\n method: 'POST',\n url: `${apiRootUrl}v1/products/start-beta`,\n headers: {\"Authorization\": 'BEARER ' + authenticationService.getAuthToken()},\n data: {ProductId: vm.productOptionSelection.ProductId}\n }).then(\n function (successResponse) {\n vm.mode = 'completed';\n vm.keySentTo = successResponse.data.EmailAddress;\n vm.keyExpires = successResponse.data.ExpirationDateUtc;\n },\n function (errorResponse) {\n vm.mode = 'error';\n }\n );\n });\n }\n\n function refreshTokenPassThrough(callback) {\n const refreshToken = authenticationService.getRefreshToken();\n if (!refreshToken) {\n callback();\n return;\n }\n\n $http({\n method: 'POST',\n url: `${apiRootUrl}v1/auth/refresh-access-token`,\n data: {RefreshToken: refreshToken}\n }).then(function (successResponse) {\n authenticationService.setLoggedInEmail(successResponse.data.EmailAddress);\n authenticationService.setAuthToken(successResponse.data.AccessToken);\n callback();\n });\n }\n }\n\n})();","(function () {\n\n // ReSharper disable FunctionsUsedBeforeDeclared\n angular\n .module('smartertoolsApp')\n .controller('emailUnsubscribeController', ['$scope', '$http', 'notificationFactory', emailUnsubscribeController]);\n\n function emailUnsubscribeController($scope, $http, notificationFactory) {\n const vm = this;\n vm.mode = 'form';\n vm.emailAddress = null;\n\n // Functions\n vm.setEmail = setEmail;\n vm.doUnsubscribe = doUnsubscribe;\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n }\n\n function setEmail(newEmail) {\n vm.emailAddress = newEmail;\n }\n\n function doUnsubscribe() {\n $http.post(apiRootUrl + 'v1/email/unsubscribe', JSON.stringify({Email: vm.emailAddress}))\n .then(\n () => vm.mode = 'done',\n (err) => notificationFactory.error('There was a problem removing this email address. Please contact us directly for assistance.'));\n }\n }\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .service('hostingService', ['$http', 'refreshToken', '$log', 'cacheControl', '$q', hostingService]);\n\n function hostingService($http, refreshToken, $log, cacheControl, $q) {\n let getAllPromise;\n const vm = this;\n vm.urlBase = apiRootUrl;\n\n // Functions\n vm.getServices = getServices;\n vm.getAdminUsers = getAdminUsers;\n vm.resetAdminPassword = resetAdminPassword;\n vm.endTrial = endTrial;\n vm.subscribeExistingCard = subscribeExistingCard;\n vm.subscribeNewCard = subscribeNewCard;\n vm.clearServiceCache = clearServiceCache;\n vm.saveAdvancedOptions = saveAdvancedOptions;\n vm.cancelSite = cancelSite;\n vm.setBindings = setBindings;\n vm.savePaymentMethodExistingCard = savePaymentMethodExistingCard;\n vm.savePaymentMethodNewCard = savePaymentMethodNewCard;\n vm.savePaymentMethodNoCard = savePaymentMethodNoCard;\n vm.calculatePriceChangeForUpgrade = calculatePriceChangeForUpgrade;\n vm.changePlan = changePlan;\n vm.resubscribeBeforeCancel = resubscribeBeforeCancel;\n\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n }\n\n function getServices() {\n //if (getAllPromise)\n // return getAllPromise;\n getAllPromise = refreshToken.refreshToken()\n .then(() => $http.get(vm.urlBase + 'v1/account/hosted-services/all'))\n .then(function (response) {\n getAllPromise = null;\n return response.data;\n })\n .catch(function (err) {\n getAllPromise = null;\n $q.reject(err);\n });\n return getAllPromise;\n }\n\n function clearServiceCache() {\n cacheControl.getCache('invoiceCache')\n .remove(vm.urlBase + 'v1/account/hosted-services/all');\n }\n\n function getAdminUsers(siteId) {\n return refreshToken.refreshToken()\n .then(() => $http.get(`${vm.urlBase}v1/account/hosted-services/${siteId}/site-admins`))\n .then((response) => response.data.Admins);\n }\n\n function calculatePriceChangeForUpgrade(siteId, agents) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/calculate-upgrade-cost`, JSON.stringify({NewUserCount: agents})))\n .then((response) => response.data);\n }\n\n function changePlan(siteId, agents) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/change-plan`, JSON.stringify({NewUserCount: agents})))\n .then((response) => response.data);\n }\n\n function resubscribeBeforeCancel(siteId) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/resubscribe-before-cancel`))\n .then((response) => response.data);\n }\n\n function resetAdminPassword(siteId, userId, newPassword) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/reset-admin-pw`, JSON.stringify({\n UserId: userId,\n NewPassword: newPassword\n })))\n .then((response) => response.data);\n }\n\n function saveAdvancedOptions(siteId, options) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/advanced-options`, JSON.stringify(options)))\n .then((response) => response.data);\n }\n\n function setBindings(siteId, options) {\n const bindings = options.split('\\n');\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/bindings`, JSON.stringify({Bindings: bindings})))\n .then((response) => response.data);\n }\n\n\n function endTrial(siteId) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/end-trial`))\n .then((response) => response.data);\n }\n\n function cancelSite(siteId) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${siteId}/cancel-site`))\n .then((response) => response.data);\n }\n\n function subscribeExistingCard(serviceId, agentCount, paymentMethod) {\n return refreshToken.refreshToken()\n .then(function () {\n return $http.post(`${vm.urlBase}v1/account/hosted-services/${serviceId}/subscribe-existing-card`,\n JSON.stringify({\n AgentCount: agentCount,\n PaymentMethodId: paymentMethod.PaymentMethodId,\n SecurityCode: paymentMethod.SecurityCode\n }));\n })\n .then((response) => response.data);\n }\n\n function subscribeNewCard(serviceId, agentCount, paymentMethod) {\n return refreshToken.refreshToken()\n .then(function () {\n return $http.post(`${vm.urlBase}v1/account/hosted-services/${serviceId}/subscribe-new-card`,\n JSON.stringify({\n AgentCount: agentCount,\n CardNumber: paymentMethod.CardNumber,\n NameOnCard: paymentMethod.NameOnCard,\n ExpirationMonth: paymentMethod.ExpirationMonth,\n ExpirationYear: paymentMethod.ExpirationYear,\n SecurityCode: paymentMethod.SecurityCode,\n Country: paymentMethod.Country,\n Address1: paymentMethod.Address1,\n Address2: paymentMethod.Address2,\n City: paymentMethod.City,\n State: paymentMethod.State,\n ZipCode: paymentMethod.ZipCode,\n SaveCard: true\n }));\n })\n .then((response) => response.data);\n }\n\n function savePaymentMethodExistingCard(serviceId, paymentMethod) {\n return refreshToken.refreshToken()\n .then(function () {\n return $http.post(`${vm.urlBase}v1/account/hosted-services/${serviceId}/payment-method-existing-card`,\n JSON.stringify({\n PaymentMethodId: paymentMethod.PaymentMethodId,\n SecurityCode: paymentMethod.SecurityCode\n }));\n })\n .then((response) => response.data);\n }\n\n function savePaymentMethodNoCard(serviceId) {\n return refreshToken.refreshToken()\n .then(() => $http.post(`${vm.urlBase}v1/account/hosted-services/${serviceId}/payment-method-no-card`, JSON.stringify({})))\n .then((response) => response.data);\n }\n\n function savePaymentMethodNewCard(serviceId, paymentMethod) {\n return refreshToken.refreshToken()\n .then(function () {\n return $http.post(`${vm.urlBase}v1/account/hosted-services/${serviceId}/payment-method-new-card`,\n JSON.stringify({\n CardNumber: paymentMethod.CardNumber,\n NameOnCard: paymentMethod.NameOnCard,\n ExpirationMonth: paymentMethod.ExpirationMonth,\n ExpirationYear: paymentMethod.ExpirationYear,\n Country: paymentMethod.Country,\n Address1: paymentMethod.Address1,\n Address2: paymentMethod.Address2,\n City: paymentMethod.City,\n State: paymentMethod.State,\n ZipCode: paymentMethod.ZipCode\n }));\n })\n .then((response) => response.data);\n }\n }\n})();\n","(function () {\n angular\n .module('smartertoolsApp')\n .controller('passwordResetController', ['$scope', '$http', 'notificationFactory', passwordResetController]);\n\n function passwordResetController($scope, $http, notify) {\n const vm = this;\n vm.mode = 'form';\n vm.resetGuid = null;\n\n // Functions\n vm.setResetGuid = setResetGuid;\n vm.doChange = doChange;\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n }\n\n function setResetGuid(newGuid) {\n vm.resetGuid = newGuid;\n }\n\n function doChange() {\n if (vm.passwordform.$invalid)\n return;\n $http.post(apiRootUrl + 'v1/account/reset-password', JSON.stringify({\n ResetGuid: vm.resetGuid,\n Password: vm.Password\n }))\n .then(function () {\n vm.mode = 'done';\n }, function (err) {\n notify.error(err.statusText || 'There was a problem changing your password. Please contact us directly for assistance.');\n });\n }\n }\n})();","(function () {\n angular\n .module('smartertoolsApp')\n .service('ticketService', ['$http', 'refreshToken', '$q', ticketService]);\n\n function ticketService($http, refreshToken, $q) {\n let settingsPromise;\n let attsPromise;\n let refreshPromise;\n let replyPromise;\n let bodyPromise;\n let msgsPromise;\n const vm = this;\n vm.urlBase = apiRootUrl;\n\n // Functions\n vm.getAccountSettings = getAccountSettings;\n vm.getMessageAttachments = getMessageAttachments;\n vm.getMessageBody = getMessageBody;\n vm.getMessages = getMessages;\n vm.refreshTicket = refreshTicket;\n vm.sendReply = sendReply;\n vm.submitTicket = submitTicket;\n vm.sendTicketAttachment = sendTicketAttachment;\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n }\n\n function getAccountSettings() {\n //if (settingsPromise)\n //\treturn settingsPromise;\n\n settingsPromise = refreshToken.refreshToken()\n .then(function () {\n return $http.get(vm.urlBase + 'v1/account/details');\n })\n .then(function (response) {\n settingsPromise = null;\n return response.data;\n })\n .catch(function (err) {\n settingsPromise = null;\n $q.reject(err);\n });\n\n return settingsPromise;\n }\n\n function getMessageAttachments(ticketMessageId) {\n if (attsPromise)\n return attsPromise;\n\n attsPromise = refreshToken.refreshToken()\n .then(function () {\n return $http.post(vm.urlBase +\n 'v2/account/support/ticket/get-message-attachments/' +\n ticketMessageId);\n })\n .then(function (response) {\n attsPromise = null;\n return response.data;\n })\n .catch(function (err) {\n attsPromise = null;\n $q.reject(err);\n });\n\n return attsPromise;\n }\n\n function getMessageBody(ticketMessageId) {\n if (bodyPromise)\n return bodyPromise;\n\n bodyPromise = refreshToken.refreshToken()\n .then(function () {\n return $http.post(vm.urlBase + 'v2/account/support/ticket/get-message/' + ticketMessageId);\n })\n .then(function (response) {\n bodyPromise = null;\n return response.data;\n })\n .catch(function (err) {\n bodyPromise = null;\n $q.reject(err);\n });\n\n return bodyPromise;\n }\n\n function getMessages(ticketNumber, ticketId) {\n if (msgsPromise)\n return msgsPromise;\n\n msgsPromise = refreshToken.refreshToken()\n .then(function () {\n return $http.post(vm.urlBase + 'v2/account/support/ticket/messages/' + ticketNumber + '/' + ticketId);\n })\n .then(function (response) {\n msgsPromise = null;\n return response.data;\n })\n .catch(function (err) {\n msgsPromise = null;\n $q.reject(err);\n });\n\n return msgsPromise;\n }\n\n function refreshTicket(ticketId) {\n if (refreshPromise)\n return refreshPromise;\n\n refreshPromise = refreshToken.refreshToken()\n .then(function () {\n return $http.post(vm.urlBase + 'v2/account/support/ticket-refresh/' + ticketId);\n })\n .then(function (response) {\n refreshPromise = null;\n return response.data;\n })\n .catch(function (err) {\n refreshPromise = null;\n $q.reject(err);\n });\n\n return refreshPromise;\n }\n\n function sendReply(details) {\n if (replyPromise)\n return replyPromise;\n\n replyPromise = refreshToken.refreshToken()\n .then(function () {\n return $http.post(vm.urlBase + 'v2/account/support/ticket/send-customer-message', JSON.stringify(details));\n })\n .then(function (response) {\n replyPromise = null;\n return response.data;\n })\n .catch(function (err) {\n replyPromise = null;\n $q.reject(err);\n });\n\n return replyPromise;\n }\n\n function submitTicket(details) {\n if (replyPromise)\n return replyPromise;\n\n replyPromise = refreshToken.refreshToken()\n .then(function () {\n return $http.post(vm.urlBase + 'v2/account/support/new-ticket', JSON.stringify(details));\n })\n .then(function (response) {\n replyPromise = null;\n return response.data;\n })\n .catch(function (err) {\n replyPromise = null;\n $q.reject(err);\n });\n\n return replyPromise;\n }\n\n function sendTicketAttachment(details) {\n return refreshToken.refreshToken()\n .then(function () {\n const fileData = new FormData();\n fileData.append('FileSize', details.FileSize);\n fileData.append('TicketNumber', details.TicketNumber);\n fileData.append('File', details.File);\n\n return $http.post(vm.urlBase + 'v2/account/support/ticket/add-attachment', fileData, {\n headers: { 'Content-Type': undefined },\n transformRequest: angular.identity\n });\n })\n .then(function (response) {\n return response.data;\n })\n .catch(function (err) {\n $q.reject(err);\n });\n }\n }\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .controller('userAccessController', ['$q', '$scope', '$log', '$timeout', 'userAccessService', 'userPartnerService', 'cacheControl', '$window', '$state', 'authenticationService', '$rootScope', userAccessController]);\n\n function userAccessController($q, $scope, $log, $timeout, userAccessService, userPartnerService, cacheControl, $window, $state, authenticationService, $rootScope) {\n const vm = this;\n vm.isLoading = 0;\n vm.isLoggedIn = authenticationService.isLoggedIn;\n vm.email = authenticationService.getLoggedInEmail();\n vm.areaPermissions = {};\n vm.notifications = {};\n vm.partnerInfo = null;\n vm.canAssignResellerLicenses = false;\n vm.canStartLeases = false;\n vm.hasAcceptedAgreement = false;\n vm.monogram = vm.email && vm.email.charAt(0).toUpperCase();\n\n // Functions\n vm.clearCacheAndReloadPage = clearCacheAndReloadPage;\n vm.showLoginOverlay = showLoginOverlay;\n vm.calculatePartnershipVars = calculatePartnershipVars;\n vm.refresh = refresh;\n vm.gotoUpgradeLicensePage = gotoUpgradeLicensePage;\n vm.gotoRenewLicensePage = gotoRenewLicensePage;\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n vm.$state = $state;\n refresh();\n $rootScope.$on('userAccessService:changed', function (event, data) {\n refresh();\n });\n }\n\n // TODO: Hook to global login/logout signals and update all\n // TODO: isLoggedIn need to be updated when it changes\n\n function clearCacheAndReloadPage() {\n cacheControl.clearAllCaches();\n $window.location.reload();\n }\n\n function gotoUpgradeLicensePage() {\n if (authenticationService.isLoggedIn())\n location.href = '/purchase/#/modify-license';\n else\n ShowLoginOverlay(function () {\n location.href = '/purchase/#/modify-license';\n });\n }\n\n function gotoRenewLicensePage() {\n if (authenticationService.isLoggedIn())\n location.href = '/purchase/#/renew-license';\n else\n ShowLoginOverlay(function () {\n location.href = '/purchase/#/renew-license';\n });\n }\n\n function showLoginOverlay() {\n ShowLoginOverlay(function () {\n });\n }\n\n function calculatePartnershipVars() {\n const pi = vm.partnerInfo;\n\n vm.isActiveReseller = pi.Reseller && pi.Reseller.IsActive;\n vm.isInactiveReseller = pi.Reseller && !pi.Reseller.IsActive;\n vm.canAssignResellerLicenses = (vm.isActiveReseller || vm.isInactiveReseller) && vm.areaPermissions.PartnerReseller;\n vm.isSuspendedReseller = pi.Reseller && pi.Reseller.IsSuspended;\n\n vm.isActiveLeaseProvider = pi.LeaseProvider && pi.LeaseProvider.IsActive;\n vm.isInactiveLeaseProvider = pi.LeaseProvider && !pi.LeaseProvider.IsActive;\n vm.canStartLeases = vm.isActiveLeaseProvider && vm.areaPermissions.PartnerLeases;\n vm.isSuspendedLeaseProvider = pi.LeaseProvider && pi.LeaseProvider.IsSuspended;\n\n vm.isActiveHighAvailabilityPartner = pi.HighAvailabilityPartner && pi.HighAvailabilityPartner.IsActive;\n vm.isInactiveHighAvailabilityPartner = pi.HighAvailabilityPartner && !pi.HighAvailabilityPartner.IsActive;\n vm.isSuspendedHighAvailabilityPartner = pi.HighAvailabilityPartner && pi.HighAvailabilityPartner.IsSuspended;\n }\n\n function refresh() {\n vm.isLoading++;\n vm.email = authenticationService.getLoggedInEmail();\n vm.monogram = vm.email && vm.email.charAt(0).toUpperCase();\n vm.isLoggedIn();\n\n $q\n .all([\n userAccessService.getAreaPermissions(),\n userPartnerService.getPartnershipDetails()\n ])\n .then(function (arr) {\n let data = arr[0];\n vm.areaPermissions = data.Sections;\n vm.notifications = data.Notifications;\n\n data = arr[1];\n vm.partnerInfo = data;\n vm.calculatePartnershipVars();\n\n vm.isLoading--;\n })\n .catch(function (err) {\n if (err !== 'No Refresh Token')\n vm.loadingError = 'There was a problem loading this information. Please try again later.';\n vm.isLoading--;\n });\n }\n }\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .service('userAccessService', ['cacheControl', 'refreshToken', '$http', 'authenticationService', '$rootScope', userAccessService]);\n\n function userAccessService(cacheControl, refreshToken, $http, authenticationService, $rootScope) {\n const vm = this;\n vm.urlBase = apiRootUrl;\n vm.isLoggedIn = authenticationService.isLoggedIn();\n\n // Functions\n vm.getAreaPermissions = getAreaPermissions;\n vm.showLoginOverlay = showLoginOverlay;\n vm.showTermsAgreementOverlay = showTermsAgreementOverlay;\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n $rootScope.$on('authentication:logged-in', function (event, data) {\n processLoginChangeEvent();\n });\n $rootScope.$on('authentication:logged-out', function (event, data) {\n processLoginChangeEvent();\n });\n }\n\n function getAreaPermissions() {\n return refreshToken.refreshToken()\n .then(function () {\n return $http.get(vm.urlBase + 'v1/account/area-permissions', {cache: cacheControl.getCache('userAccessCache')});\n })\n .then(function (response) {\n return response.data;\n });\n }\n\n function showLoginOverlay() {\n ShowLoginOverlay(function () {\n });\n }\n\n function showTermsAgreementOverlay() {\n ShowTermsAgreementOverlay();\n }\n\n function processLoginChangeEvent() {\n cacheControl.getCache('userAccessCache').remove(vm.urlBase + 'v1/account/area-permissions');\n refreshToken.clearCached();\n vm.isLoggedIn = authenticationService.isLoggedIn();\n $rootScope.$broadcast('userAccessService:changed', {});\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .factory('userPartnerService', ['$http', 'refreshToken', '$log', 'cacheControl', userPartnerService]);\n\n function userPartnerService($http, refreshToken, $log, cacheControl) {\n const urlBase = apiRootUrl;\n\n return {\n clearCachedItems: clearCachedItems,\n getPartnershipDetails:getPartnershipDetails\n };\n\n // -----------------------------------------------\n\n function clearCachedItems() {\n cacheControl.getCache('myAccountCache').remove('v1/account/partnership-details');\n }\n\n function getPartnershipDetails() {\n return refreshToken.refreshToken()\n .then(function () {\n return $http.get(`${urlBase}v1/account/partnership-details`, {cache: cacheControl.getCache('myAccountCache')});\n })\n .then(function (response) {\n return response.data;\n });\n }\n }\n\n})();"]}