{"version":3,"sources":["app.js","app.input.js","app.grids.js","app.fileUploaders.js","app.pagecontent.js","app.utility.js","app.autocomplete.js","customValidators.js","app.ApplicantDashboard.js","app.ApplicantRegistration.js","app.UserProfile.js","app.DistrictBilling.js","app.PotentialDistrictNotes.js","app.Application.js","app.StandardApplication.js","app.ActiveVacancyLists.js","app.ApplicantList.js","app.ArchivedVacancyList.js","app.CertifiedCandidateSearch.js","app.EmployerPrePostInstructions.js","app.ApplicantSearch.js","app.ApplicantView.js","app.EmployerProfile.js","app.EmployerQuestions.js","app.EmployerReviewMatrix.js","app.EmployerTerms.js","app.EmployerSignup.js","app.EmployerUsers.js","app.ContactHr.js","app.EmployerVacancy.js","app.QuestionSet.js","app.RememberedCandidates.js","app.VacancyList.js","app.Duplicate.js","app.ContactUs.js","app.Home.js","app.report.js","app.Document.js","app.RatingCommentHistoryModal.js","app.Timeout.js","app.LicenseFilter.js","app.PersistentGrid.js","app.SavedVacancies.js","app.SearchVacancies.js","app.Assessments.js","app.UserDetails.js","app.AdminDocuments.js"],"names":["util","console","queue","token","customContent","value","format","push","content","fancyConsole","fn","formats","i","arguments","length","arg","o","shift","join","log","warn","error","trace","group","groupEnd","calloutContent","alertContent","warningContent","successContent","app","myApp","Page","applicationPath","this","appPath","id","loads","el","$","document","isDebugMode","components","componentActions","currentComponent","allComponents","storage","selectors","grandchildComponent","grandchildAction","datepicker","modals","confirmRemove","confirmRemoveOkButton","descriptiveError","descriptiveErrorMessage","loadError","removeConfirm","saveError","searchBar","initCheckboxLists","initModals","initTooltips","initComponents","initBackToTopButton","prototype","startLoad","loading","show","endLoad","hide","init","bindCheckboxLists","tooltip","html","page","not","each","initComponent","initPageAction","e","pc","subtype","closest","data","parent","undefined","obj","component","Component","findAllComponents","trigger","PageAction","type","on","event","proxy","triggerAction","code","target","is","preventDefault","action","attr","handleRemoveOkButton","Timeout","Init","func","wait","timeout","adjustButtonPositions","$backToTopButton","$checklistButton","$pageContainer","scrollTop","window","mainTop","offset","top","css","fadeIn","Math","max","fadeOut","checklistButtonHeight","outerHeight","additionalSpace","clearTimeout","setTimeout","animate","initToasts","toastr","options","closeButton","debug","newestOnTop","progressBar","positionClass","preventDuplicates","onclick","showDuration","hideDuration","timeOut","extendedTimeOut","showEasing","hideEasing","showMethod","hideMethod","change","context","containerName","prop","checked","selAll","getElementValue","valueType","text","val","getGuid","replace","c","r","random","toString","getIndexByPropertyValue","array","property","some","item","getPageSize","w","width","getFormattedNumber","prepend","abs","parseFloat","toLocaleString","getShortFriendlyNumber","numberFormats","s","v","d","toFixed","getFriendlyNumber","isPageSmall","isPageMedium","isPageLarge","isPageExtraLarge","showDescriptiveError","message","modal","handleJsonMessage","errorMessage","handleAjaxError","xmlHttpRequest","textStatus","status","location","encodeURIComponent","pathname","readyState","responseText","mergeSort","arr","middle","parseInt","left","slice","right","merge","result","isJsonString","JSON","parse","isPrintableCharacter","copyToClipboard","clipboardData","setData","queryCommandSupported","textarea","createElement","textContent","style","position","body","appendChild","select","execCommand","ex","removeChild","findComponents","key","myComponent","parentController","role","state","request","isCloning","isOrderble","orderHandle","controller","siblings","editComponent","viewComponent","buttons","cancel","clone","edit","remove","save","order","validationToken","controllerUrl","urls","base","view","noResultsElement","count","customRecordData","targetType","filterField","slideUp","startViewMode","bindViewMode","finishLoad","isEditing","startEditMode","sucessContent","removeComponent","index","indexOf","slideDown","splice","bindEditMode","editEl","stopPropagation","bindSubComponents","bindByElement","isRebind","off","startCloneMode","cancelEditMode","saveEditMode","startRemove","moveOrder","startLoading","addClass","endLoading","removeClass","$target","$currentComponent","direction","$componentList","$previousComponent","prev","$nextComponent","next","insertBefore","insertAfter","focus","scrollIntoView","behavior","block","find","map","get","ajax","url","method","controllerId","done","parseJSON","success","fail","always","isInit","filterCriteria","newRecordData","abort","form","validator","unobtrusive","valid","componentTop","serialize","dataId","NaN","firstError","__RequestVerificationToken","hasClass","pageComponentActionAdd","pageComponentActionFilter","pageComponentActionFilterServer","pageComponentActionRefresh","pageComponentActionUpdateSetOptions","pageComponentActionUpdateSetValue","pageComponentActionUpdateSetVisibility","pageComponentActionUpdateId","pageComponentActionUpdateSubtype","postAction","t","componentWrapper","newComponentSelector","wrapperType","append","after","before","rows","field","values","toUpperCase","split","keyCode","delay","that","name","appendTo","filters","serializeArray","param","targets","targetField","i2","e2","input","initInputComponents","initClearForm","initMasks","initTextEditor","initDatePicker","initSelectMany","initAutocomplete","initTextAreaWithLimit","initShowPassword","mask","reverse","selectManyContext","listSelectedSelectMany","toLowerCase","selMany","search","selAllChecked","ind","filterTargetFieldset","allSelects","showThis","curCheckbox","selectedOption","filteredField","filteredFieldValue","selectedCheckboxNames","fieldSet","innerText","resetSelectManys","assumeNearbyYear","ev","endDateElement","date","valueOf","Date","getTime","newDate","setDate","getDate","onRender","startDate","element","clearBtn","autoclose","templates","leftArrow","rightArrow","tinymce","selector","block_formats","themes","plugins","mode","branding","forced_root_block","menubar","relative_urls","toolbar","init_instance_callback","editor","triggerSave","settings","ignore","AutoComplete","Autocomplete","BindSetButtons","uniqueId","$tar","charactersAllowed","characterCount","substring","keyup","clearForm","sender","showPasswordEye","j","passwordBox","runFunc","children","first","grids","focusAfterDataLoad","myGrids","initGridComponents","initPageGridActions","initGridComponent","initPageGridAction","gridComponents","Array","gridElement","unique","componentType","forEach","grid","sortGrid","changeAllDropdown","changeAllTextbox","checkAll","keypress","click","pageGrid","gridComponent","table","filterForm","pageSize","showForResults","gridType","filterGrid","alert","sortDescending","removeAttr","row","refreshGrid","pageNumber","pageNum","forResults","eval","report","pageAction","theTarget","fileUploaders","myUploaders","initFileUploadComponents","fileUploadElement","initFileUploadComponent","requestEndpoint","deleteEndpoint","multiUpload","allowedExtensions","allowedExtensionArray","sizeLimit","uploader","qq","FineUploader","multiple","endpoint","params","TargetDocumentGuid","deleteFile","enabled","callbacks","onComplete","response","fileName","setName","UpdateFile","onStatusChange","oldStatus","newStatus","RemoveFile","thumbnails","placeholders","notAvailablePath","waitingPath","validation","template","addInitialFiles","uuid","thumbnailUrl","size","file","targetIdBase","_options","fileSet","fileElement","newTemplate","idVal","getUuid","getSize","getName","ready","pagecontent","BindContentEditor","mnemonic","isTooltip","jQuery","expr","icontains","a","m","AutocompleteObjects","lastCursorPos","x","y","searchIndex","myAutocomplete","Object","defineProperties","activeItem","resultList","resultItems","searchText","searchBox","generateId","cacheResults","endPoint","initialSelected","initialText","onSelect","selectedItem","outputField","placeholder","searchMinLength","replaceVal","filterType","label","extend","additionaldataselector","selected","outputText","displayText","cache","container","announcement","onFocus","onBlur","onKeyPress","onInput","keyID","selectItem","mousemove","mouseleave","screenX","screenY","populateTemplate","trim","emptyResultList","hideResultList","navigateUp","navigateDown","resetSearchList","populateList","clientSideDataOptions","getClientSideResults","filterClientSideResults","delayTimer","getResults","searchData","dataType","callback","filteredData","cleanSearch","keys","results","populatedTemplate","stringify","showResultList","personOption","re","RegExp","cleanupRe","itemData","setValue","call","clearSelectItem","empty","newActiveIndex","eq","inline","addMethod","adapters","add","rules","messages","idx","adapterName","methodName","parameters","dependentPropertyArray","dependentproperty","desiredValueArray","desiredvalue","elementIsPartOfList","includes","listPrefix","lastIndexOf","fieldIsRequired","dependentProperty","desiredDependentValue","actualDependentValue","filter","toLocaleLowerCase","isValid","methods","required","minimumDateRequiredString","maximumDateAllowedString","minDate","maxDate","valueDate","minimumdaterequired","maximumdateallowed","nameA","nameB","controlA","controlB","controlTypeA","controlTypeB","valA","valueB","comparepropertya","comparepropertyb","noParams","control","actualvalue","defaultRangeValidator","range","minNumber","minselections","maxNumber","maxselections","listName","controls","comparevalue","acceptNull","propertyDateYear","propertyDateMonth","propertyDate","valueDateYear","valueDateMonth","addBool","optional","dataset","fieldisvalid","minCount","maxCount","excludedCharacters","theString","replaceAll","mincount","maxcount","excludedcharacters","toggleFieldIsValid","ApplicantDashboard","Index","canWithdraw","colspan","canDelete","columnData","previousColumnData","updatedHtml","appId","ApplicationId","ApplicantRegistration","RegisterStep1","isRequestAlive","RegisterStep2","setInterval","CheckRegistrationKey","submit","CesaMapInit","UserProfile","DistrictEmailValidationInit","showLinks","currentlyFocusedCesa","cesaUniqueId","RegisterStep3","RegisterStep4","AccountRecoverySettingsInit","post","DistrictCheck","districtEmailValue","districtIdValue","CheckForDistrictByEmail","districtContainer","emailTextbox","email","IsSuccess","HasMultipleOptions","DistrictId","Message","removeData","ChangePassword","ChangeEmail","DistrictBilling","DistrictStatusUpdate","active","districtName","districtStatus","PotentialDistrictNotes","refreshRecords","showModal","ComponentLoadingComplete","rowId","postData","handleAjaxSuccess","createOrEditNote","cancelDelete","confirmDelete","formData","Application","Initialize","EvaluateAndHireCandidate","AppDataCopy","RatingCommentHistoryModal","RememberedCandidates","CandidateInfo","Document","replaceContentWithSpinner","replaceSpinnerWithContent","InitCriminalBackgroundFunctionality","hasDuplicates","questionId","applicationId","questionSetId","TargetApplicationId","SelectedApp","QuestionSetId","confirm","reload","showHideCriminalBackgroundDiv","originalCount","difference","loadingHtml","successUrl","href","isCertified","Success","history","pushState","title","addEventListener","Internal","inputs","querySelectorAll","querySelector","getElementById","validateCodeInputs","display","setCustomValidity","test","pasteData","getData","charAt","StandardApplication","CertifiedAndSupport","isSupport","setRequiredIfLabels","expire","expected","starString","checkEducationVals","degrees","major","minor","certification","gpa","majorStar","gpaStar","certificationStar","checkEducationWorkExperienceVals","endDate","currentlyWorkHere","endDateStar","reasonsForLeavingStar","checkLicenseVals","expiration","lifetime","expectedStar","expirationStar","lifetimeStar","checkLicenseAndCertificationVals","generalInformation","education","license","divNonRenewedReason","isNonRenewed","isChecked","dataObject","staffTypeId","ActiveVacancyLists","SavedVacancies","ApplicantList","InterviewCheckboxInit","emails","resultString","frm","appIds","WillInterview","ArchivedVacancyList","vacancyId","CertifiedCandidateSearch","EmployerPrePostInstructions","ApplicantSearch","IsMobile","userId","ChangeHideText","backdrop","keyboard","isHidden","ResetDistrictHideCheckboxes","ResetVacancyHideCheckboxes","CancelDistrictHide","CancelVacancyHide","ApplicantView","dirty","preventLeaving","leavingMessage","EmployerProfile","EmployerQuestions","EmployerReviewMatrix","interviewFilter","EmployerTerms","EmployerSignup","certifiedManagerSameAsMainUser","supportManagerSameAsMainUser","supportManagerSameAsCertifiedManager","updateFields","fields","condition","EmployerUsers","accordionIds","shouldEmailChangeModalFire","theUrl","theError","Id","theId","collapse","ContactHr","InitContactFlag","currentStatus","payload","isArray","$matchingFlags","$flagWrapper","$icon","$contactHrText","toggleClass","EmployerVacancy","Edit","SetVacancyFields","selectedOptionId","duplicateId","clearLicenseList","View","icon","shouldSave","QuestionSet","titleInUseInput","checkTitles","titleValue","existingTitle","$continueButton","forgetCandidate","VacancyList","SetStaffTypeDropDowns","BindStaffTypeDropdownFunctionality","InitGridButtons","thisId","selectedValue","certifiedPositionsDropDownDiv","supportPositionsDropDownDiv","certifiedPositionsDropDown","supportPositionsDropDown","allPositionsDropDownDiv","allPositionsDropDown","closeDateString","closeDate","now","closeDateCST","cstOffset","isNaN","BulkActionGrid","checkCheckboxes","buttonId","getAttribute","vacancyIds","Duplicate","fromAddPage","xhr","ContactUs","inputMessage","Home","Footer","navigator","userAgent","windowInnerWidth","innerWidth","windowInnerHeight","innerHeight","Report","Lockout","ids","AdminIndex","cesaNumber","SelectDistrictsByCesa","SetHiddenDistrictList","cesaId","distId","complete","markedCheckbox","checkbox","SkywardDataExport","SkywardDataExportDownloadButton","downloadButton","currentHtml","ValidRequest","Selected","commentsStarted","bypassWarning","remberedBypassWarning","SetCommentType","DimmerSwitch","modalTarget","modalBody","modalId","applicantId","currentApplicationId","Modal","HandleCommentTypeChange","rmModals","applicantComments","dropdown","affiliationDiv","commentDiv","typeId","commentId","validationFrequency","timeoutDurationDefault","timeoutDurationTrusted","trustedCookieName","timeoutDuration","cookie","timeoutWarningMinutes","warningTimerID","timeoutTimerID","warningTimeout","timoutNow","startTimer","warningInactive","IdleTimeout","intervalTimerID","StartCountdown","ClearCountdown","minutesIn","timer2","interval","timer","minutes","seconds","clearInterval","LicenseFilter","GetSchwifty","targetName","targetElement","optgroups","selectgroups","PersistentGrid","tableName","previousPageNumber","previousPageSize","previousSortField","previousIsSortAscending","selectedPageNumber","AssignFunctionality","SearchVacancies","EmployerCesaFilter","filterEmployerSelectMany","selectedCesas","cesa","cesaList","stringList","numberList","containsNumber","Assessments","Failed","tr","ReorderAssessment","UserDetails","checkboxList","mostRecentSelection","mostRecentSelectionDisplayName","selectedOptionDisplayName","AdminDocuments","SetCopyFunctionality"],"mappings":"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","file":"../site.js","sourcesContent":["//*************************************************************************************\r\n//* WaMS Component Framework - app.js\r\n//* Version 1.03f\r\n//* Author: Damian Koch\r\n//* Component framework essentials, plus utilities.\r\n//* Requires jQuery, foundation\r\n//* 10/3/17 DBK: Added error messaging support to delete functionality, return JSON with\r\n//* errorMessage set as the message to use.\r\n//* 10/5/17 DBK: Added isDebugMode flag. Console messages only show when isDebugMode = 1\r\n//* 10/10/17 BWH: Added subtype to allow for additional variables to be passed on creation of component\r\n//* 10/24/17 DBK: Added JSON support to save action\r\n//* 10/30/17 DBK: Added tooltip support\r\n//* 11/01/17 DBK: Fix bindEditMode race condition for bindCheckboxLists\r\n//* 11/09/17 DBK: Prevent save on [enter] keypress\r\n//* 11/21/17 DBK: Allow HTML tooltips\r\n//* 11/28/17 DBK: Added rich text editor support (jqte called on [data-role=richtext]\r\n//* 12/14/17 DBK: Added to robustness of action bound debug message\r\n//* 12/18/17 DBK: Allow page component updateId actions to work with non-int Ids\r\n//* 2/15/18 BWH: Hooked in foundation date picker\r\n//* 4/2/18 WMK: Added back to top functionality\r\n//* 4/16/18 WQP: Updated select/deselect many logic to only select visible (filtered) results\r\n//* 5/14/18 DBK: Added robust filtering and paging to component lists\r\n//* 5/14/18 DBK: Added isPrintableCharacter helper method\r\n//* 5/25/18 Hanson: Removed the cancel action if someone hits escape in text area text box\r\n//* 09/21/2018 BWH: Moved validation token definition from page to the component\r\n//* 12/18/18 BWH: Updates to component filter for timeout and update to printable charachters\r\n//*************************************************************************************\r\n\r\n//$(document).foundation();\r\n\r\nvar util = util || {};\r\nutil.console = (function () {\r\n var queue = [];\r\n var token = {};\r\n\r\n function calloutContent(value) {\r\n return customContent(value, \"display: inline-block; background-color: #0479a8; color: white; font-weight: bold; padding: 3px;\");\r\n }\r\n\r\n function successContent(value) {\r\n return customContent(value, \"display: inline-block; background-color: springgreen; color: black; font-weight: bold; padding: 3px;\");\r\n }\r\n\r\n function alertContent(value) {\r\n return customContent(value, \"display: inline-block; background-color: yellow; color: black; font-weight: bold; padding: 3px;\");\r\n }\r\n\r\n function warningContent(value) {\r\n return customContent(value, \"display: inline-block; background-color: #c5050c; color: white; font-weight: bold; padding: 3px;\");\r\n }\r\n\r\n function customContent(value, format) {\r\n queue.push({ content: value, format: format })\r\n return token;\r\n }\r\n\r\n function fancyConsole(fn) {\r\n function fancyConsoleProxy() {\r\n var content = [];\r\n var formats = [];\r\n\r\n for (var i = 0; i < arguments.length; i++) {\r\n var arg = arguments[i];\r\n\r\n if (arg == token) {\r\n var o = queue.shift();\r\n\r\n content.push(\"%c\" + o.content);\r\n formats.push(o.format);\r\n }\r\n else {\r\n if (typeof (arg) === \"object\" || typeof (arg) === \"function\") {\r\n content.push(\"%o\");\r\n formats.push(arg);\r\n }\r\n else {\r\n content.push(\"%c\" + arg);\r\n formats.push(\"\");\r\n }\r\n }\r\n\r\n content.push(\"%c \");\r\n formats.push(\"\");\r\n }\r\n\r\n fn(content.join(\"\"), ...formats);\r\n }\r\n\r\n return fancyConsoleProxy;\r\n }\r\n\r\n return {\r\n log: fancyConsole(console.log),\r\n warn: fancyConsole(console.warn),\r\n error: fancyConsole(console.error),\r\n trace: fancyConsole(console.trace),\r\n group: fancyConsole(console.group),\r\n groupEnd: fancyConsole(console.groupEnd),\r\n\r\n calloutContent: calloutContent,\r\n alertContent: alertContent,\r\n warningContent: warningContent,\r\n successContent: successContent,\r\n customContent: customContent\r\n };\r\n})();\r\n\r\nvar app = (function () {\r\n var myApp = {\r\n Page: function (applicationPath) {\r\n this.appPath = applicationPath || '';\r\n this.id = 0;\r\n this.loads = 0;\r\n this.el = $(document);\r\n this.isDebugMode = false;\r\n\r\n this.components = {};\r\n this.componentActions = {};\r\n this.currentComponent = {};\r\n this.allComponents = {};\r\n this.storage = {};\r\n\r\n this.selectors = {\r\n components: ':not([data-role~=\"component-template\"]) [data-role~=\"component\"], >[data-role~=\"component\"]',\r\n grandchildComponent: ':not([data-role~=\"component-template\"]) [data-role~=\"component\"] [data-role~=\"component\"], > [data-role~=\"component\"] [data-role~=\"component\"]',\r\n componentActions: '[data-role~=\"component-action\"]',\r\n grandchildAction: ':not([data-role~=\"component-template\"]) [data-role~=\"component\"] [data-role~=\"component-action\"], > [data-role~=\"component\"] [data-role~=\"component-action\"]',\r\n datepicker: '[data-role~=\"datepicker\"]',\r\n modals: {\r\n confirmRemove: '#removeConfirmModal',\r\n confirmRemoveOkButton: '#removeConfirmModal--ok',\r\n descriptiveError: '#descriptiveErrorModal',\r\n descriptiveErrorMessage: '[data-role~=\"descriptiveErrorMessage\"]',\r\n loadError: '#loadErrorModal',\r\n removeConfirm: '#removeConfirmModal',\r\n saveError: '#saveErrorModal'\r\n },\r\n searchBar: '[name=searchForm]'\r\n };\r\n\r\n this.initCheckboxLists();\r\n this.initModals();\r\n this.initTooltips();\r\n this.initComponents();\r\n this.initBackToTopButton();\r\n }\r\n };\r\n\r\n myApp.Page.prototype.startLoad = function () { if (++this.loads === 1 && this.selectors.loading) this.selectors.loading.show(); };\r\n myApp.Page.prototype.endLoad = function () { if (--this.loads === 0 && this.selectors.loading) this.selectors.loading.hide(); };\r\n\r\n myApp.Page.prototype.init = function () { if (this.isDebugMode) util.console.warn('init called on page, but not implemented'); };\r\n myApp.Page.prototype.initCheckboxLists = function () { this.bindCheckboxLists(this.el); };\r\n myApp.Page.prototype.initTooltips = function () { $('[data-toggle=\"tooltip\"]').tooltip({ html: true }); };\r\n myApp.Page.prototype.initComponents = function () {\r\n //for each component, set up the component\r\n var page = this;\r\n //exclude child components\r\n $(this.selectors.components).not(this.selectors.grandchildComponent).each(function () { page.initComponent(this, page); });\r\n $(this.selectors.componentActions).not(this.selectors.grandchildAction).each(function () { page.initPageAction(this, page); });\r\n };\r\n myApp.Page.prototype.initComponent = function (e, pc, subtype) {\r\n var type = $(e).closest('[data-component-type]').data('component-type');\r\n var group = type + ($(e).closest('[data-component-group]').data('component-group') || \"\");\r\n var parent = pc || this;\r\n\r\n if (parent.components[group] === undefined) {\r\n parent.components[group] = [];\r\n parent.components[group + '-noResults'] = $('[data-component-role=\"noResults\"][data-component-type=\"' + group + '\"]', parent.el);\r\n }\r\n\r\n var obj = new app.component.Component(e, pc, this, subtype);\r\n obj.init();\r\n parent.components[group].push(obj);\r\n\r\n this.findAllComponents();\r\n\r\n $(document).trigger(\"component-init-complete\", obj);\r\n };\r\n myApp.Page.prototype.initPageAction = function (e, pc) {\r\n var parent = pc || this;\r\n var obj = new app.component.PageAction(e, pc, this);\r\n\r\n if (parent.componentActions[obj.type] === undefined) {\r\n parent.componentActions[obj.type] = [];\r\n }\r\n\r\n $(e).on(obj.event, $.proxy(obj.triggerAction, obj));\r\n\r\n //watch for enter keypress on component action text boxes. this will prevent submits\r\n $(e).on(\"keypress keydown\",\r\n function (e) {\r\n if (e.code === \"Enter\" && $(event.target).is(\"input[type='text']\")) {\r\n e.preventDefault();\r\n return false;\r\n }\r\n });\r\n parent.componentActions[obj.type].push(obj);\r\n $(document).trigger(\"component-action-init-complete\", obj);\r\n if (this.isDebugMode) {\r\n util.console.log(obj.action, util.console.calloutContent(obj.type), obj.target + '(' + obj.event + ')', obj.el.attr('name'), ' action bound.');\r\n }\r\n };\r\n myApp.Page.prototype.initModals = function () {\r\n this.handleRemoveOkButton = function () {\r\n if (this.currentComponent) {\r\n if (typeof this.currentComponent.confirmRemove === 'function') this.currentComponent.confirmRemove();\r\n }\r\n };\r\n $(this.selectors.modals.confirmRemoveOkButton).on('click', $.proxy(this.handleRemoveOkButton, this));\r\n\r\n //timeout modal.\r\n app.Timeout.Init();\r\n };\r\n myApp.Page.prototype.initBackToTopButton = function () {\r\n var debounce = function (func, wait) {\r\n var timeout;\r\n return function () {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(func, wait);\r\n };\r\n };\r\n\r\n var adjustButtonPositions = debounce(function () {\r\n var $backToTopButton = $('.back-to-top');\r\n var $checklistButton = $('[data-target=\"#theChecklist\"]');\r\n var $pageContainer = $('#main-content');\r\n\r\n var scrollTop = $(window).scrollTop();\r\n var mainTop = $('main').offset().top;\r\n\r\n // Checklist Button Logic\r\n if ($checklistButton.length) {\r\n $checklistButton.closest('.fixed-bottom').css('bottom', '1rem').fadeIn();\r\n }\r\n\r\n // Back to Top Button Logic\r\n if ($backToTopButton.length) {\r\n if (scrollTop > Math.max(100, mainTop)) {\r\n if (!$backToTopButton.is(':visible')) {\r\n $backToTopButton.fadeIn();\r\n }\r\n } else {\r\n if ($backToTopButton.is(':visible')) {\r\n $backToTopButton.fadeOut();\r\n }\r\n }\r\n\r\n // Ensure the Back to Top button is positioned above the Checklist button\r\n if ($checklistButton.length && $checklistButton.is(':visible')) {\r\n var checklistButtonHeight = $checklistButton.outerHeight();\r\n $backToTopButton.css('bottom', checklistButtonHeight + 20 + 'px'); // Set 20px margin above the Checklist button\r\n } else {\r\n $backToTopButton.css('bottom', '1rem'); // Default position if Checklist button is not visible\r\n }\r\n }\r\n\r\n // Adjust the page container's padding to avoid overlap with content\r\n var additionalSpace = ($checklistButton.outerHeight() || 0) + ($backToTopButton.outerHeight() || 0) + 20;\r\n $pageContainer.css('padding-bottom', additionalSpace + 'px');\r\n }, 50); // debounce the function with a 50ms delay\r\n\r\n $(document).on('scroll', adjustButtonPositions);\r\n\r\n $(document).on('click', '.back-to-top', function () {\r\n $('html, body').animate({ scrollTop: 0 }, 600); // smooth scroll to the top\r\n $(this).fadeOut();\r\n });\r\n\r\n // Initial call to set up buttons correctly on page load\r\n adjustButtonPositions();\r\n };\r\n\r\n myApp.Page.prototype.initToasts = function () {\r\n window.toastr.options = {\r\n \"closeButton\": true,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": true,\r\n \"positionClass\": 'toast-top-right',\r\n \"preventDuplicates\": false,\r\n \"onclick\": null,\r\n \"showDuration\": '300',\r\n \"hideDuration\": '1000',\r\n \"timeOut\": '5000',\r\n \"extendedTimeOut\": '1000',\r\n \"showEasing\": 'swing',\r\n \"hideEasing\": 'linear',\r\n \"showMethod\": 'fadeIn',\r\n \"hideMethod\": 'fadeOut'\r\n };\r\n };\r\n\r\n myApp.Page.prototype.bindCheckboxLists = function (el) {\r\n $('[type=\"checkbox\"][data-role~=\"selectall\"]', el).each(function () {\r\n $('[type=\"checkbox\"][name=\"' + $(this).attr('name') + '\"]').change(function () {\r\n var context = $(document);\r\n // get the name of the container\r\n var containerName = $(this).attr('data-selectall-container');\r\n if (containerName != undefined) {\r\n context = $(\"[data-selectall-target='\" + containerName + \"']\");\r\n }\r\n if ($(this).attr('data-role') === 'selectall') {\r\n $('[type=\"checkbox\"][name=\"' + $(this).attr('name') + '\"]:visible', context).prop('checked', this.checked);\r\n\r\n } else {\r\n var selAll = $('[type=\"checkbox\"][data-role~=\"selectall\"][name=\"' + $(this).attr('name') + '\"]:visible', context);\r\n\r\n //check for all selected, or not all selected\r\n if (selAll.is(':checked')) {\r\n if (!this.checked) {\r\n selAll.prop('checked', this.checked);\r\n }\r\n } else {\r\n if ($('[type=\"checkbox\"][name=\"' + $(this).attr('name') + '\"]:not(:checked)').length === 1) {\r\n selAll.prop('checked', this.checked);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n myApp.Page.prototype.getElementValue = function (el, valueType) {\r\n switch (valueType) {\r\n case 'html':\r\n return el.html();\r\n case 'seltext':\r\n return $(':selected', el).text();\r\n case 'val':\r\n return el.val();\r\n default:\r\n return el.text();\r\n }\r\n };\r\n myApp.Page.prototype.getGuid = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0;\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n };\r\n myApp.Page.prototype.getIndexByPropertyValue = function (array, property, value) {\r\n var r = -1;\r\n array.some(function (item, i) {\r\n if (item[property] === value) {\r\n r = i;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return r;\r\n };\r\n myApp.Page.prototype.getPageSize = function () {\r\n var w = $(window).width();\r\n if (w < 768) {\r\n return 0;\r\n }\r\n else if (w <= 992) {\r\n return 1;\r\n }\r\n else if (w <= 1200) {\r\n return 3;\r\n }\r\n return 4;\r\n };\r\n myApp.Page.prototype.getFormattedNumber = function (value, prepend) {\r\n if (value < 0) {\r\n prepend = \"-\" + (prepend ? prepend : \"\");\r\n value = Math.abs(value);\r\n }\r\n return (prepend ? prepend : \"\") + parseFloat(value).toLocaleString();\r\n }\r\n myApp.Page.prototype.getShortFriendlyNumber = function (value, prepend) {\r\n var format;\r\n var numberFormats = [\r\n { s: \"T\", v: 1000000000000, d: 0 },\r\n { s: \"B\", v: 1000000000, d: 0 },\r\n { s: \"M\", v: 1000000, d: 0 },\r\n { s: \"k\", v: 1000, d: 0 }\r\n ];\r\n\r\n if (value < 0) {\r\n prepend = \"-\" + (prepend ? prepend : \"\");\r\n value = Math.abs(value);\r\n }\r\n\r\n for (var i = 0; i < numberFormats.length; i++) {\r\n if (value >= numberFormats[i].v) {\r\n format = numberFormats[i];\r\n value = (value / format.v).toFixed(format.d);\r\n break;\r\n }\r\n }\r\n\r\n if (format) { value = value + format.s; }\r\n value = (prepend ? prepend : \"\") + value;\r\n\r\n return value;\r\n };\r\n myApp.Page.prototype.getFriendlyNumber = function (value, prepend) {\r\n var format;\r\n var numberFormats = [\r\n { s: \"T\", v: 1000000000000, d: 2 },\r\n { s: \"B\", v: 1000000000, d: 2 },\r\n { s: \"M\", v: 1000000, d: 2 },\r\n { s: \"k\", v: 1000, d: 2 }\r\n ];\r\n\r\n if (value < 0) {\r\n prepend = \"-\" + (prepend ? prepend : \"\");\r\n value = Math.abs(value);\r\n }\r\n\r\n for (var i = 0; i < numberFormats.length; i++) {\r\n if (value >= numberFormats[i].v) {\r\n format = numberFormats[i];\r\n value = (value / format.v).toFixed(format.d);\r\n break;\r\n }\r\n }\r\n\r\n if (format) { value = value + format.s; }\r\n value = (prepend ? prepend : \"\") + value;\r\n\r\n return value;\r\n };\r\n myApp.Page.prototype.isPageSmall = function () { return this.getPageSize() === 0; };\r\n myApp.Page.prototype.isPageMedium = function () { return this.getPageSize() === 1; };\r\n myApp.Page.prototype.isPageLarge = function () { return this.getPageSize() === 2; };\r\n myApp.Page.prototype.isPageExtraLarge = function () { return this.getPageSize() === 3; };\r\n myApp.Page.prototype.showDescriptiveError = function (message) {\r\n $(app.page.selectors.modals.descriptiveErrorMessage, app.page.selectors.modals.descriptiveError).html(message);\r\n $(app.page.selectors.modals.descriptiveError).modal('show');\r\n };\r\n myApp.Page.prototype.handleJsonMessage = function (s) {\r\n if (s.errorMessage !== undefined) {\r\n app.page.showDescriptiveError(s.errorMessage);\r\n return true;\r\n }\r\n return false;\r\n };\r\n myApp.Page.prototype.handleAjaxError = function (xmlHttpRequest, textStatus, error) {\r\n if (xmlHttpRequest.status === 401 || xmlHttpRequest.status === 302) {\r\n window.location.replace(app.page.appPath + '?ReturnUrl=' + encodeURIComponent(window.location.pathname));\r\n } else if (textStatus !== 'abort' && xmlHttpRequest.readyState !== 0) {\r\n util.console.error;\r\n if (xmlHttpRequest.responseText !== '') {\r\n app.page.showDescriptiveError(xmlHttpRequest.responseText);\r\n } else {\r\n $(app.page.selectors.modals.loadError).modal('show');\r\n }\r\n }\r\n };\r\n myApp.Page.prototype.mergeSort = function (arr, target) {\r\n if (arr.length < 2) return arr;\r\n\r\n var middle = parseInt(arr.length / 2);\r\n var left = arr.slice(0, middle);\r\n var right = arr.slice(middle, arr.length);\r\n\r\n return this.merge(this.mergeSort(left, target), this.mergeSort(right, target), target);\r\n };\r\n myApp.Page.prototype.merge = function (left, right, target) {\r\n var result = [];\r\n\r\n while (left.length && right.length) {\r\n //if (left[0] <= right[0]) {\r\n if ($('[data-label=\"' + target + '\"]', left[0]).text() <=\r\n $('[data-label=\"' + target + '\"]', right[0]).text()) {\r\n result.push(left.shift());\r\n } else {\r\n result.push(right.shift());\r\n }\r\n }\r\n\r\n if (this.isDebugMode) {\r\n util.console.group(\"left: \" + left.length);\r\n util.console.groupEnd(\" right: \" + right.length);\r\n }\r\n\r\n while (left.length) result.push(left.shift());\r\n while (right.length) result.push(right.shift());\r\n\r\n return result;\r\n };\r\n myApp.Page.prototype.log = function (s) {\r\n if (this.isDebugMode) console.log(s);\r\n };\r\n myApp.Page.prototype.isJsonString = function (s) {\r\n try {\r\n JSON.parse(s);\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n myApp.Page.prototype.isPrintableCharacter = function (s) {\r\n //REMOVED s===13 (enter) from printable characters BWH\r\n return s === 8 || (s > 47 && s < 58) || (s > 64 && s < 91) || (s > 95 && s < 112) || (s > 185 && s < 193) || (s > 218 && s < 223);\r\n };\r\n myApp.Page.prototype.copyToClipboard = function (s) {\r\n if (window.clipboardData && window.clipboardData.setData) {\r\n // IE specific code path to prevent textarea being shown while dialog is visible.\r\n return clipboardData.setData(\"Text\", s);\r\n } else if (document.queryCommandSupported && document.queryCommandSupported(\"copy\")) {\r\n var textarea = document.createElement(\"textarea\");\r\n textarea.textContent = s;\r\n textarea.style.position = \"fixed\"; // Prevent scrolling to bottom of page in MS Edge.\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n try {\r\n return document.execCommand(\"copy\"); // Security exception may be thrown by some browsers.\r\n } catch (ex) {\r\n console.warn(\"Copy to clipboard failed.\", ex);\r\n return false;\r\n } finally {\r\n document.body.removeChild(textarea);\r\n }\r\n }\r\n };\r\n myApp.Page.prototype.findAllComponents = function () {\r\n this.allComponents = {};\r\n this.findComponents(this.components);\r\n };\r\n myApp.Page.prototype.findComponents = function (components) {\r\n for (var group in components) {\r\n if (this.allComponents[group] === undefined) {\r\n this.allComponents[group] = [];\r\n };\r\n $.merge(this.allComponents[group], components[group]);\r\n for (var key in components[group]) {\r\n this.findComponents(components[group][key].components);\r\n }\r\n }\r\n };\r\n\r\n return myApp;\r\n}());\r\n\r\napp.component = (function () {\r\n var myComponent = {\r\n Component: function (e, pc, page, subtype) {\r\n this.el = $(e);\r\n this.parentController = pc || {};\r\n this.page = page || app.page;\r\n this.subtype = subtype;\r\n this.id = this.el.data('component-id') || 0;\r\n this.role = this.el.closest('[data-component-role]').data('component-role');\r\n this.type = this.el.closest('[data-component-type]').data('component-type');\r\n this.group = this.type + (this.el.closest('[data-component-group]').data('component-group') || \"\");\r\n this.state = this.el.data('component-state');\r\n this.request = null;\r\n this.isCloning = false;\r\n\r\n this.isOrderble = $('[data-role~=\"clickable-handle\"]', this.el).length > 0;\r\n this.orderHandle = $('[data-role~=\"clickable-handle\"]', this.el);\r\n\r\n this.controller = this.el.closest('[data-component-controller]').data('component-controller');\r\n\r\n this.siblings = pc ? pc.components[this.group] || [] : [];\r\n\r\n this.selectors = {\r\n editComponent: '> .card > .component-edit > [data-component-role=\"EditComponent\"], > .card.component-edit > [data-component-role=\"EditComponent\"]',\r\n viewComponent: '> .card > .component-view > [data-component-role=\"ViewComponent\"], > .component-view[data-component-role=\"ViewComponent\"]',\r\n buttons: {\r\n cancel: '> .card > .component-edit > .component-buttons [data-component-role=\"CancelButton\"], > .card.component-edit > .component-buttons [data-component-role=\"CancelButton\"]',\r\n clone: '> .card > .component-view > [data-component-role=\"CloneButton\"]',\r\n edit: '> .card > .component-view > .component-buttons > [data-component-role=\"EditButton\"], > .component-view > .row > .component-buttons > [data-component-role=\"EditButton\"], > .card > .component-view > .card-body > .row > .component-buttons > [data-component-role=\"EditButton\"]',\r\n remove: '> .card > .component-edit > .component-buttons [data-component-role=\"RemoveButton\"], > .card.component-edit > .component-buttons [data-component-role=\"RemoveButton\"]',\r\n save: '> .card > .component-edit > .component-buttons [data-component-role=\"SaveButton\"], > .card.component-edit > .component-buttons [data-component-role=\"SaveButton\"]',\r\n order: '> .card > .component-view > .component-buttons > [data-role=\"clickable-handle\"], > .component-view > .row > .component-buttons > [data-role=\"clickable-handle\"], > .card > .component-view > .card-body > .row > .component-buttons > [data-role=\"clickable-handle\"]',\r\n },\r\n\r\n validationToken: 'input[name=\"__RequestVerificationToken\"]'\r\n };\r\n\r\n\r\n var controllerUrl = this.page.appPath + '/' + this.controller;\r\n\r\n this.urls = {\r\n base: controllerUrl,\r\n view: controllerUrl + '/Show' + this.type,\r\n clone: controllerUrl + '/Show' + this.type + 'CloneForm',\r\n edit: controllerUrl + '/Show' + this.type + 'Form',\r\n save: controllerUrl + '/Update' + this.type,\r\n remove: controllerUrl + '/Remove' + this.type,\r\n order: controllerUrl + '/Order' + this.type\r\n };\r\n\r\n this.components = {};\r\n this.componentActions = {};\r\n\r\n this.noResultsElement = (pc) ? pc.components[this.group + '-noResults'] || [] : [];\r\n this.viewComponent = '';\r\n this.editComponent = '';\r\n\r\n //add defined values\r\n if (this.el.data('component-key') && this.el.data('component-value') !== 'undefined') {\r\n var count = 2;\r\n this.customRecordData = {};\r\n\r\n this.customRecordData[this.el.data('component-key')] = this.el.data('component-value');\r\n\r\n while (this.el.data('component-key' + count) && this.el.data('component-value' + count)) {\r\n this.customRecordData[this.el.data('component-key' + count)] = this.el.data('component-value' + count);\r\n count++;\r\n }\r\n }\r\n },\r\n PageAction: function (e, pc, page) {\r\n this.el = $(e);\r\n this.parentController = pc || {};\r\n this.page = page || app.page;\r\n this.action = this.el.closest('[data-component-action]').data('component-action');\r\n this.event = this.el.closest('[data-component-action-event]').data('component-action-event') || 'click';\r\n this.type = this.el.closest('[data-component-type]').data('component-type');\r\n this.target = this.el.closest('[data-component-action-target]').data('component-action-target');\r\n this.targetType = this.el.closest('[data-component-action-target-type]').data('component-action-target-type');\r\n this.subtype = this.el.closest('[data-component-subtype]').data('component-subtype');\r\n\r\n switch (this.action) {\r\n case \"filter\":\r\n this.filterField = this.el.closest('[data-component-action-field]').data('component-action-field');\r\n break;\r\n case \"setvalue\":\r\n this.value = this.el.closest('[data-component-action-value]').data('component-action-value');\r\n break;\r\n }\r\n }\r\n };\r\n\r\n //component events\r\n myComponent.Component.prototype.init = function () {\r\n if (this.siblings.length === 0 && this.noResultsElement !== undefined) {\r\n $(this.noResultsElement).slideUp();\r\n }\r\n\r\n if (this.state !== 'active') {\r\n this.startViewMode(true);\r\n } else {\r\n this.bindViewMode();\r\n this.finishLoad();\r\n }\r\n };\r\n myComponent.Component.prototype.finishLoad = function () {\r\n if (this.role === 'accordion') { /*bootstrap init*/ }\r\n\r\n if (this.isEditing()) { this.startEditMode(); }\r\n if (this.isDebugMode) {\r\n util.console.log(util.console.sucessContent(this.type), this.id + ' loaded.');\r\n }\r\n };\r\n myComponent.Component.prototype.removeComponent = function () {\r\n var index = this.siblings.indexOf(this);\r\n if (this.siblings.length <= 1) {\r\n $(this.noResultsElement).slideDown();\r\n }\r\n\r\n this.siblings.splice(index, 1);\r\n if (this.role === 'accordion') {\r\n this.el.closest('li.accordion-item').remove();\r\n } else {\r\n this.el.remove();\r\n }\r\n };\r\n myComponent.Component.prototype.bindEditMode = function () {\r\n var editEl = $('.component-edit', this.el);\r\n this.page.bindCheckboxLists(editEl);\r\n $('[data-toggle=\"tooltip\"]', editEl).tooltip({ html: true });\r\n $(this.selectors.datepicker, editEl).datepicker();\r\n\r\n //handle enter keypress on a form\r\n $('form', editEl).on('keydown', $.proxy(function () {\r\n switch (event.code) {\r\n //WECAN Issue #791 - allow Return to submit forms\r\n //case 13:\r\n // // Stop default form submission on \"enter\" click in textbox\r\n // if ($(event.target).is(\"input[type='text']\")) {\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // }\r\n // break;\r\n case \"Escape\":\r\n event.preventDefault();\r\n event.stopPropagation();\r\n //this.cancelEditMode();\r\n break;\r\n }\r\n }, this));\r\n\r\n $(document).trigger(\"component-bind-edit-mode-complete\", this);\r\n $(document).trigger(\"component-bind-edit-mode-complete-\" + this.type, this);\r\n\r\n this.bindSubComponents();\r\n };\r\n myComponent.Component.prototype.bindViewMode = function () {\r\n this.editComponent = $(this.selectors.editComponent, this.el);\r\n this.viewComponent = $(this.selectors.viewComponent, this.el);\r\n\r\n this.bindByElement(this.el, false);\r\n\r\n $(document).trigger(\"component-bind-view-mode-complete\", this);\r\n $(document).trigger(\"component-bind-view-mode-complete-\" + this.type, this);\r\n\r\n this.bindSubComponents();\r\n };\r\n myComponent.Component.prototype.bindByElement = function (el, isRebind) {\r\n\r\n $(this.selectors.buttons.edit, this.el).off('click').on('click', $.proxy(this.startEditMode, this));\r\n $(this.selectors.buttons.clone, this.el).off('click').on('click', $.proxy(this.startCloneMode, this));\r\n\r\n $(this.selectors.buttons.cancel, this.el).off('click').on('click', $.proxy(this.cancelEditMode, this));\r\n $(this.selectors.buttons.save, this.el).off('click').on('click', $.proxy(this.saveEditMode, this));\r\n $(this.selectors.buttons.remove, this.el).off('click').on('click', $.proxy(this.startRemove, this));\r\n\r\n $(this.selectors.buttons.order, this.el)\r\n .off('click')\r\n .on('click', $.proxy(this.moveOrder, this))\r\n .off('keydown')\r\n .on('keydown', $.proxy(function (event) {\r\n if (event.key === \" \" || event.key === \"Enter\") {\r\n event.preventDefault();\r\n this.moveOrder(event);\r\n }\r\n }, this));\r\n\r\n $(this.el).closest('.component-list').attr('aria-live', 'polite');\r\n\r\n };\r\n myComponent.Component.prototype.bindSubComponents = function () {\r\n var controller = this;\r\n\r\n this.components = {};\r\n $(this.page.selectors.components, this.el).not($(this.page.selectors.grandchildComponent, this.el)).each(function () { controller.page.initComponent(this, controller); });\r\n $(this.page.selectors.componentActions, this.el).not($(this.page.selectors.grandchildAction, this.el)).each(function () { controller.page.initPageAction(this, controller); });\r\n };\r\n myComponent.Component.prototype.startLoading = function () {\r\n this.el.addClass('component-loading');\r\n $(document).trigger(\"component-loading-start\", this);\r\n };\r\n myComponent.Component.prototype.endLoading = function () {\r\n this.el.removeClass('component-loading');\r\n $(document).trigger(\"component-loading-complete\", this);\r\n };\r\n myComponent.Component.prototype.moveOrder = function (e) {\r\n e.stopPropagation();\r\n if (e.key === \"Enter\") { return; }\r\n\r\n var $target = $(e.target);\r\n var $currentComponent = $target.closest('[data-role=\"component\"]');\r\n var direction = $target.data('direction');\r\n var $componentList = $target.closest('.component-list');\r\n\r\n if ($componentList.length === 0) {\r\n $componentList = $target.closest('[data-component-type=\"DocumentList\"]');\r\n }\r\n\r\n // Set the component list to \"busy\" before starting the operation\r\n $componentList.attr('aria-busy', 'true');\r\n\r\n // Store the original position\r\n var $previousComponent = $currentComponent.prev('[data-role=\"component\"]');\r\n var $nextComponent = $currentComponent.next('[data-role=\"component\"]');\r\n\r\n // Move the component\r\n if (direction === 'up' && $previousComponent.length) {\r\n $currentComponent.insertBefore($previousComponent);\r\n } else if (direction === 'down' && $nextComponent.length) {\r\n $currentComponent.insertAfter($nextComponent);\r\n }\r\n\r\n // Keep the focus on the button that was clicked\r\n $target.focus();\r\n\r\n // Ensure the element is visible to the user\r\n $currentComponent[0].scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n\r\n // Send the results\r\n var data = $componentList.find('[data-role=\"component\"]').map(function () {\r\n return $(this).find('input[name=\"Id\"]').val();\r\n }).get().join(\", \");\r\n\r\n // AJAX call to update the order\r\n this.request = $.ajax({\r\n url: this.urls.order,\r\n method: \"post\",\r\n data: { id: this.id, controllerId: this.parentController.id, data: data },\r\n context: this,\r\n error: this.page.handleAjaxError\r\n }).done(function (data) {\r\n if (app.page.isJsonString(data)) {\r\n util.console.log(\"Order save error\");\r\n this.page.handleJsonMessage($.parseJSON(data));\r\n } else {\r\n util.console.log(\"Order save complete\");\r\n toastr.success(\"Order updated successfully.\");\r\n }\r\n }).fail(function () {\r\n // Restore the original position if the AJAX call fails\r\n if (direction === 'up' && $previousComponent.length) {\r\n $currentComponent.insertAfter($previousComponent);\r\n } else if (direction === 'down' && $nextComponent.length) {\r\n $currentComponent.insertBefore($nextComponent);\r\n }\r\n }).always(function () {\r\n // Reset the component list to \"not busy\" after completion\r\n $componentList.attr('aria-busy', 'false');\r\n });\r\n\r\n if (e.type === 'keydown' && (e.key === 'Enter' || e.key === ' ')) {\r\n $target.focus();\r\n }\r\n };\r\n myComponent.Component.prototype.startViewMode = function (isInit, filterCriteria) {\r\n this.startLoading();\r\n var data;\r\n\r\n if (filterCriteria) {\r\n data = filterCriteria;\r\n } else {\r\n data = { id: this.id, controllerId: this.parentController.id };\r\n }\r\n\r\n if (this.customRecordData) {\r\n data = { ...data, ...this.customRecordData }\r\n }\r\n\r\n if (this.parentController.newRecordData) {\r\n data = { ...data, ...this.parentController.newRecordData }\r\n }\r\n\r\n if (this.request != null) {\r\n this.request.abort();\r\n this.request = null;\r\n }\r\n\r\n this.request = $.ajax({ url: this.urls.view, data: data, context: this, error: this.page.handleAjaxError }).done(function (data) {\r\n this.el.html(data);\r\n this.endLoading();\r\n this.bindViewMode();\r\n if (isInit) {\r\n this.finishLoad();\r\n }\r\n });\r\n };\r\n myComponent.Component.prototype.startCloneMode = function () {\r\n this.isCloning = true;\r\n this.startEditMode();\r\n };\r\n\r\n myComponent.Component.prototype.startEditMode = function () {\r\n this.startLoading();\r\n\r\n\r\n\r\n var data = { id: this.id, controllerId: this.parentController.id, subtype: this.subtype };\r\n\r\n\r\n\r\n if (this.customRecordData) {\r\n data = { ...data, ...this.customRecordData }\r\n }\r\n\r\n\r\n\r\n if (this.id === 0 && this.parentController.newRecordData) {\r\n data = { ...data, ...this.parentController.newRecordData }\r\n }\r\n\r\n\r\n\r\n $.ajax({ url: this.urls.edit, data: data, context: this, error: this.page.handleAjaxError }).done(function (data) {\r\n this.editComponent.html(data);\r\n\r\n\r\n\r\n if (this.isCloning) {\r\n $('[name=\"Id\"]', this.editComponent).val(0);\r\n }\r\n\r\n\r\n\r\n this.el.addClass('edit');\r\n this.endLoading();\r\n this.bindEditMode();\r\n });\r\n };\r\n\r\n myComponent.Component.prototype.cancelEditMode = function () {\r\n if (this.isCloning) { this.isCloning = false; }\r\n\r\n if (this.id === 0) {\r\n this.removeComponent();\r\n } else {\r\n this.el.removeClass('edit');\r\n }\r\n\r\n $(document).trigger(\"component-edit-cancel\", this);\r\n $(document).trigger(\"component-edit-cancel-\" + this.type, this);\r\n };\r\n myComponent.Component.prototype.saveEditMode = function () {\r\n var form = $('form:not(.component-exclude)', this.editComponent);\r\n $.validator.unobtrusive.parse(form);\r\n\r\n if (this.isDebugMode) {\r\n util.console.log(\"form valid?\", form.valid());\r\n }\r\n\r\n if (form.valid()) {\r\n var componentTop = this.editComponent.offset().top - 50;\r\n //if the top of the component is off of the page, jump to it\r\n if ($(document).scrollTop() > componentTop) $('html, body').scrollTop(componentTop);\r\n this.startLoading();\r\n\r\n $.ajax({ url: this.urls.save, method: 'post', data: form.serialize(), context: this, error: this.page.handleAjaxError }).done(function (data) {\r\n this.endLoading();\r\n\r\n if (data) {\r\n //check if result is json, if so we have an issue\r\n if (this.page.isJsonString(data)) {\r\n this.page.handleJsonMessage($.parseJSON(data));\r\n } else {\r\n //it worked, replace the current view partial.\r\n this.viewComponent.html(data);\r\n let dataId = parseInt($('[name=\"Id\"]', this.viewComponent).val());\r\n if (this.id === 0 || this.isCloning || (dataId !== NaN && this.id !== dataId)) {\r\n this.id = dataId;\r\n if (this.isCloning) { this.isCloning = false; }\r\n this.bindByElement(this.viewComponent, false);\r\n }\r\n else {\r\n this.bindByElement(this.viewComponent, true);\r\n }\r\n\r\n this.bindSubComponents();\r\n $(document).trigger(\"component-save-complete\", this);\r\n $(document).trigger(\"component-save-complete-\" + this.type, this);\r\n this.cancelEditMode();\r\n }\r\n } else {\r\n $(app.page.selectors.modals.saveError).modal('show');\r\n }\r\n });\r\n }\r\n else {\r\n //Give focus to the first error\r\n var firstError = $('#' + $('.field-validation-error', form).data('valmsg-for'));\r\n if (firstError.length) {\r\n $('html, body').animate({\r\n scrollTop: firstError.offset().top - 50\r\n }, 500);\r\n }\r\n }\r\n };\r\n myComponent.Component.prototype.startRemove = function () {\r\n if (this.id === 0) {\r\n this.removeComponent();\r\n } else {\r\n if (this.urls.remove !== undefined && this.urls.remove !== '') {\r\n app.page.currentComponent = this;\r\n $(app.page.selectors.modals.removeConfirm).modal('show');\r\n }\r\n }\r\n };\r\n myComponent.Component.prototype.confirmRemove = function () {\r\n if (this.urls.remove !== undefined && this.urls.remove !== '') {\r\n this.el.removeClass('edit');\r\n this.startLoading();\r\n\r\n $.ajax(\r\n {\r\n url: this.urls.remove,\r\n method: 'post',\r\n data:\r\n {\r\n id: this.id,\r\n controllerId: this.parentController.id,\r\n __RequestVerificationToken: $(this.selectors.validationToken, this.editComponent).val()\r\n },\r\n context: this,\r\n error: this.page.handleAjaxError\r\n }).done(function (data) {\r\n if (data) {\r\n if (this.page.isJsonString(data)) {\r\n if (this.page.handleJsonMessage($.parseJSON(data))) {\r\n this.el.addClass('edit');\r\n this.endLoading();\r\n } else {\r\n this.removeComponent();\r\n $(document).trigger(\"component-remove-complete\", this);\r\n $(document).trigger(\"component-remove-complete-\" + this.type, this);\r\n }\r\n }\r\n } else {\r\n this.el.addClass('edit');\r\n this.endLoading();\r\n $('#saveErrorModal').modal('show');\r\n }\r\n });\r\n }\r\n };\r\n\r\n //component derived properties\r\n myComponent.Component.prototype.isEditing = function () {\r\n return this.el.hasClass('edit');\r\n };\r\n myComponent.PageAction.prototype.triggerAction = function (e) {\r\n if (this.isDebugMode) {\r\n util.console.log('component action', util.console.calloutContent(this.action), 'for', util.console.warningContent(this.target) + ' triggered.')\r\n }\r\n\r\n switch (this.action) {\r\n case \"add\":\r\n this.pageComponentActionAdd(this.el, this.parentController, this.target);\r\n break;\r\n case \"filter\":\r\n this.pageComponentActionFilter(this.el, this.target);\r\n break;\r\n case \"filterserver\":\r\n this.pageComponentActionFilterServer(this.el, this.target, e);\r\n break;\r\n case \"refresh\":\r\n this.pageComponentActionRefresh(this.el, this.target);\r\n break;\r\n case \"setoptions\":\r\n this.pageComponentActionUpdateSetOptions(this.el, this.target);\r\n break;\r\n case \"setvalue\":\r\n this.pageComponentActionUpdateSetValue(this.el, this.target);\r\n break;\r\n case \"setvisibility\":\r\n this.pageComponentActionUpdateSetVisibility(this.el, this.target);\r\n break;\r\n case \"updateid\":\r\n this.pageComponentActionUpdateId(this.el, this.target);\r\n break;\r\n case \"updatesubtype\":\r\n this.pageComponentActionUpdateSubtype(this.el, this.target);\r\n break;\r\n }\r\n\r\n this.postAction();\r\n };\r\n myComponent.PageAction.prototype.postAction = function () { };\r\n myComponent.PageAction.prototype.pageComponentActionAdd = function (el, pc, t) {\r\n var target = $('[data-role~=\"component-action-target\"][data-component-target=\"' + t + '\"]', pc.el);\r\n var componentWrapper;\r\n\r\n if (el.data('component-template') && $('[data-role~=\"component-template\"][data-template-name=\"' + el.data('component-template') + '\"]')) {\r\n componentWrapper = $('[data-role~=\"component-template\"][data-template-name=\"' + el.data('component-template') + '\"]').html();\r\n } else {\r\n var wrapperType = el.data('component-wrapper-type') ? el.data('component-wrapper-type') : 'div';\r\n componentWrapper = '<' + wrapperType + ' class=\"edit ' + (el.data('component-wrapper-class') ? el.data('component-wrapper-class') : \"\") + '\" data-role=\"component\" data-component-id=\"0\">';\r\n }\r\n\r\n if (el.data('parent-id')) {\r\n pc.id = el.data('parent-id');\r\n }\r\n var newComponentSelector;\r\n switch (target.data('component-insert-type')) {\r\n case 'append':\r\n target.append(componentWrapper);\r\n newComponentSelector = $('[data-role~=\"component\"]:last', target);\r\n break;\r\n case 'sibling-append':\r\n target.after(componentWrapper);\r\n newComponentSelector = target.next();\r\n break;\r\n case 'sibling-prepend':\r\n target.before(componentWrapper);\r\n newComponentSelector = target.prev();\r\n break;\r\n default:\r\n target.prepend(componentWrapper);\r\n newComponentSelector = $('[data-role~=\"component\"]:first', target);\r\n break;\r\n }\r\n\r\n this.subtype = this.el.closest('[data-component-subtype]').data('component-subtype');\r\n\r\n this.page.initComponent(newComponentSelector, pc, this.subtype);\r\n $(document).trigger(\"component-add-complete\", newComponentSelector);\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionFilter = function (el, t) {\r\n\r\n var context = $('[data-role~=\"component-action-target\"][data-component-target~=\"' + this.target + '\"]');\r\n var rows = $('[data-role~=\"component\"]', context);\r\n var form = $('form[data-role=\"filter-server-form\"][data-component-action-target-type~=\"' + this.targetType + '\"]');\r\n rows.show();\r\n\r\n $(':input', form).each(function (i, e) {\r\n var el = $(e);\r\n if (el.val() !== '') {\r\n var field;\r\n\r\n if (el.data('target')) {\r\n field = '[data-label=\"' + el.data('target') + '\"]';\r\n }\r\n else {\r\n field = '[data-label]';\r\n }\r\n\r\n var values = el.val().toUpperCase().split(/\\s+/);\r\n rows.each(function (i, e) {\r\n var hide = false;\r\n\r\n $.each(values, function (index, v) {\r\n if ($(field + ':icontains(\"' + v + '\")', e).length < 1) {\r\n hide = true;\r\n return;\r\n }\r\n });\r\n if (hide) {\r\n $(e).hide();\r\n }\r\n });\r\n }\r\n });\r\n\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionFilterServer = function (el, t, e) {\r\n\r\n if (e === undefined || e.type !== \"keyup\" || app.page.isPrintableCharacter(e.keyCode)) {\r\n //if keyup, add a delay\r\n var delay = 300;\r\n if (e !== undefined && e.type !== \"keyup\") {\r\n delay = 0;\r\n }\r\n\r\n if (this.timeout !== null) { clearTimeout(this.timeout); }\r\n var that = this;\r\n this.timeout = setTimeout(function () {\r\n\r\n var form = $('form[data-role=\"filter-server-form\"][data-component-action-target-type=\"' + that.targetType + '\"]');\r\n\r\n var dataRoles = el.data('role');\r\n if (dataRoles.indexOf('page-size') !== -1) {\r\n\r\n //append to form\r\n if (form.find('[name=\"pageSize\"]').length) {\r\n form.find('[name=\"pageSize\"]').val(el.val());\r\n } else {\r\n //add to form\r\n $('').attr({\r\n type: 'hidden',\r\n id: 'pageSize',\r\n name: 'pageSize',\r\n value: el.val()\r\n }).appendTo(form);\r\n }\r\n }\r\n\r\n var filters = form.serializeArray();\r\n\r\n if (el.data('page-value')) {\r\n filters.push({ name: \"pageNumber\", value: el.data('page-value') });\r\n }\r\n\r\n var target = that.page.components[that.targetType][0];\r\n target.startViewMode(false, $.param(filters));\r\n\r\n }, delay, el, that);\r\n }\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionRefresh = function (el, t) {\r\n var target = this.page.components[t][0];\r\n if (target) {\r\n target.startViewMode();\r\n }\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionUpdateId = function (el, t) {\r\n var target = this.page.components[t][0];\r\n var val;\r\n if (el.data('component-action-updateid-value')) {\r\n val = el.data('component-action-updateid-value');\r\n } else {\r\n val = el.val();\r\n }\r\n if (val.length > 0) {\r\n target.id = val;\r\n target.startViewMode();\r\n }\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionUpdateSubtype = function (e, t) {\r\n var target = $('[data-role~=\"component-action-target\"][data-component-target=\"' + t + '\"]');\r\n target.data('component-subtype', e.val());\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionUpdateSetOptions = function (el, t, e) {\r\n var targets = $('[data-component-target=\"' + t + '\"]');\r\n var values = $('input:checked', el);\r\n targets.each(function (i, e) {\r\n var targetField = $(e).data('component-action-setoptions-field');\r\n\r\n switch ($(e).data('component-action-setoptions-type')) {\r\n case \"showequal\":\r\n //remove all options\r\n if (values.length === 0 || values[0].value === '0') {\r\n $('.select-many-checkbox', e).show();\r\n } else {\r\n $('.select-many-checkbox', e).hide();\r\n $('.select-many-checkbox', e).prop('checked', false).trigger(\"change\");\r\n\r\n values.each(function (i2, e2) {\r\n var value = $(e2).val();\r\n //re add for thisv value\r\n $('.select-many-checkbox', e).each(function () {\r\n if ($('input', this).attr(targetField) === value) {\r\n $(this).show();\r\n }\r\n });\r\n });\r\n }\r\n break;\r\n }\r\n });\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionUpdateSetValue = function (el, t) {\r\n var target = $(t);\r\n target.val($(el).data(\"component-action-value\"));\r\n };\r\n myComponent.PageAction.prototype.pageComponentActionUpdateSetVisibility = function (el, t) {\r\n var targets = $('[data-component-target=\"' + t + '\"]');\r\n var val = el.val();\r\n targets.each(function (i, e) {\r\n switch ($(e).data('component-action-setvisibility-type')) {\r\n case \"showequal\":\r\n if (val === $(e).data('component-action-setvisibility-value').toString()) {\r\n $(e).slideDown();\r\n } else {\r\n $(e).slideUp();\r\n }\r\n break;\r\n case \"shownotequal\":\r\n if (val === $(e).data('component-action-setvisibility-value').toString()) {\r\n $(e).slideUp();\r\n } else {\r\n $(e).slideDown();\r\n }\r\n break;\r\n }\r\n });\r\n };\r\n\r\n return myComponent;\r\n}());\r\n\r\n$(function () {\r\n app.page = new app.Page(window.applicationPath);\r\n $(document).trigger('page-init-complete');\r\n});","//*******************************************************************************************\r\n//* WaMS Component Framework - app.input.js\r\n//* Version 0.1\r\n//* Author: Damian Koch\r\n//* Component framework input helpers plugin\r\n//* Requires jQuery, WaMS Component Framework\r\n//*\r\n//* This component adds some rich input features. When this file is loaded, certain\r\n//* fields/attributes will be looked for in forms on showEditMode complete.\r\n//*******************************************************************************************\r\n\r\napp.input = (function () {\r\n var myInput = {\r\n Init: function () {\r\n this.initInputComponents(document);\r\n //init page\r\n app.input.initClearForm();\r\n //init future components\r\n $(document).on('component-bind-edit-mode-complete', function (e, component) {\r\n if (component.page.isDebugMode) {\r\n util.console.log('component-bind-edit-mode-complete triggered:', util.console.calloutContent(component.type));\r\n }\r\n app.input.initInputComponents(component.editComponent);\r\n });\r\n },\r\n initInputComponents: function (el) {\r\n app.input.initMasks(el);\r\n app.input.initTextEditor(el);\r\n app.input.initDatePicker(el);\r\n app.input.initSelectMany(el);\r\n app.input.initAutocomplete(el);\r\n app.input.initTextAreaWithLimit(el);\r\n app.input.initShowPassword(el);\r\n },\r\n initMasks: function (editComponent) {\r\n $('[data-component-input-type=\"Phone\"]', editComponent).mask('(999)999-9999?, ext.9999999999');\r\n $('[data-component-input-type=\"date\"]', editComponent).mask('99/99/9999');\r\n $('[data-component-input-type=\"monthyeardate\"]', editComponent).mask('99/9999');\r\n $('[data-component-input-type=\"numeric\"]', editComponent).mask('##########.##', { reverse: true });\r\n $('[data-component-input-type=\"currency\"]', editComponent).mask('#,##0.00', { reverse: true });\r\n },\r\n initSelectMany: function (editComponent) {\r\n $('[data-role=\"select-many\"]', editComponent).each(function () {\r\n var selectManyContext = this;\r\n\r\n app.input.listSelectedSelectMany($('fieldset', selectManyContext));\r\n\r\n //on change update selection list label\r\n $('input[type=\"checkbox\"]', selectManyContext).on('change', function () { app.input.listSelectedSelectMany($('fieldset', selectManyContext)); });\r\n\r\n //filter event listener\r\n $(selectManyContext).on('keyup', '[data-role=\"select-many-filter\"]', function () {\r\n var value = $(this).val().toLowerCase();\r\n const selMany = $(this).closest('[data-role=\"select-many\"]');\r\n\r\n selMany.find('.select-many-checkbox').each(function () {\r\n if ($(this).find('label').text().toLowerCase().search(value) > -1) {\r\n $(this).show();\r\n //show group\r\n $(this).closest('[data-role=\"select-many-group\"]').show();\r\n }\r\n else {\r\n $(this).hide();\r\n if ($(this).closest('[data-role=\"select-many-group\"]').find('.select-many-checkbox:visible').length === 0) {\r\n //hide group\r\n $(this).closest('[data-role=\"select-many-group\"]').hide();\r\n }\r\n }\r\n });\r\n\r\n var selAll = selMany.find('[type=\"checkbox\"][data-role~=\"selectall\"]:visible');\r\n var selAllChecked = true;\r\n\r\n //loop through visible values, if any is false, then mark the box as not all selected\r\n selMany.find('.select-many-checkbox input[type=\"checkbox\"]:visible').each(function (ind, el) {\r\n if ($(el).prop('checked') !== true) {\r\n selAllChecked = false;\r\n // returning false breaks from loop\r\n return false;\r\n }\r\n });\r\n\r\n selAll.prop('checked', selAllChecked);\r\n });\r\n\r\n util.console.log(editComponent);\r\n\r\n //custom dropdown filter event listener\r\n $(editComponent).on('change', 'select[data-role=\"filter-select-many\"]', function () {\r\n //var filterField = $(this).data(\"filter-field\");\r\n var filterTargetFieldset = $(\"#fst\" + $(this).data(\"target\"), selectManyContext);\r\n //var selectedOption = $(this).val();\r\n\r\n var allSelects = $('select[data-role=\"filter-select-many\"][data-target=\"' + $(this).data(\"target\") + '\"]');\r\n\r\n filterTargetFieldset.find(\".select-many-checkbox\").each(function () {\r\n var showThis = true;\r\n var curCheckbox = $(this).find(\"input\");\r\n\r\n allSelects.each(function (el) {\r\n var selectedOption = $(this).val();\r\n var filteredField = $(this).data(\"filter-field\");\r\n var filteredFieldValue = curCheckbox.data(filteredField);\r\n\r\n showThis = showThis && (selectedOption == null || selectedOption === \"\" || filteredFieldValue == selectedOption);\r\n });\r\n\r\n if (showThis) {\r\n $(this).show();\r\n }\r\n else {\r\n $(this).hide();\r\n }\r\n });\r\n\r\n var selAll = $('[type=\"checkbox\"][data-role~=\"selectall\"][name=\"' + $(this).data(\"target\") + '\"]:visible', selectManyContext);\r\n var selAllChecked = true;\r\n $('.select-many-checkbox input[type=\"checkbox\"][name=\"' + $(this).data(\"target\") + '\"]:visible', selectManyContext).each(function (ind, el) {\r\n if ($(el).prop('checked') != true) {\r\n selAllChecked = false;\r\n // returning false breaks from loop\r\n return false;\r\n }\r\n });\r\n\r\n selAll.prop('checked', selAllChecked);\r\n });\r\n });\r\n },\r\n listSelectedSelectMany: function (el) {\r\n var selectedCheckboxNames;\r\n var context = $(el).closest('[data-role=\"select-many\"]');\r\n var fieldSet = $('fieldset', context);\r\n\r\n if ($('[type=\"checkbox\"]:not(:checked)', fieldSet).length === 0) {\r\n selectedCheckboxNames = \"All\";\r\n }\r\n else {\r\n if ($('[type=\"checkbox\"]:checked', fieldSet).length === 0) {\r\n selectedCheckboxNames = \"None\";\r\n } else {\r\n // NOTE: this is custom to WECAN! Be sure to check _WECANSelectMany.cshtml and _WECANSelectManyWithHeaders.cshtml before changing\r\n selectedCheckboxNames = $('[type=\"checkbox\"]:checked + span', fieldSet).map(function () {\r\n return this.innerText;\r\n }).get().join('; ');\r\n }\r\n }\r\n\r\n $('[data-role=\"selected-item-list\"]', context).text(selectedCheckboxNames);\r\n },\r\n resetSelectManys: function (editComponent) {\r\n $('[data-role=\"select-many\"]', editComponent).each(function () {\r\n //clear checkboxes\r\n $(\".select-many-checkbox > input\", this).prop(\"checked\", false);\r\n //reset selected list\r\n app.input.listSelectedSelectMany($(this).find('fieldset'));\r\n });\r\n },\r\n initDatePicker: function (editComponent) {\r\n $('[data-component-role=\"startdate\"]', editComponent).datepicker({ assumeNearbyYear: true }).on('changeDate', function (ev) {\r\n //When start date changes, check the end date\r\n //Find end date\r\n var endDateElement = $('#' + $(this).data('enddate-target'), $(this.form)).datepicker();\r\n\r\n if (ev.date.valueOf() > new Date(endDateElement.val()).getTime()) {\r\n //If the end date is too early, set to know and give focus\r\n var newDate = new Date(ev.date);\r\n newDate.setDate(newDate.getDate() + 1);\r\n endDateElement.datepicker('update', newDate);\r\n $(this).datepicker('hide');\r\n endDateElement[0].focus();\r\n }\r\n }).data('datepicker');\r\n\r\n $('[data-component-role=\"enddate\"]', editComponent).datepicker({\r\n onRender: function (date) {\r\n //get start date\r\n var startDate = $('[data-enddate-target=\"' + this.element.attr('id') + '\"').datepicker();\r\n //Only allow\r\n return date.valueOf() <= new Date(startDate.val()).getTime() ? 'disabled' : '';\r\n },\r\n assumeNearbyYear: true\r\n }).on('changeDate', function (ev) {\r\n $(this).datepicker('hide');\r\n }).data('datepicker');\r\n\r\n // options from: https://bootstrap-datepicker.readthedocs.io/en/stable/options.html\r\n $('[data-role~=\"datepicker\"]', editComponent).datepicker({\r\n assumeNearbyYear: true,\r\n clearBtn: true,\r\n autoclose: true,\r\n templates: {\r\n leftArrow: '',\r\n rightArrow: ''\r\n }\r\n });\r\n },\r\n // https://www.tiny.cloud/docs-4x/general-configuration-guide/basic-setup/\r\n initTextEditor: function (editComponent) {\r\n $('[data-role~=\"richtext\"]', editComponent).each(function (index) {\r\n tinymce.remove('#' + this.id);\r\n tinymce.init({\r\n selector: '#' + this.id, // change this value according to your HTML\r\n block_formats:\r\n 'Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre',\r\n themes: \"modern\",\r\n plugins: \"code lists link textcolor table\",\r\n mode: \"textareas\",\r\n branding: false,\r\n forced_root_block: \"div\",\r\n menubar: false,\r\n relative_urls: false,\r\n toolbar: [\r\n 'bold italic superscript subscript | formatselect | numlist bullist | forecolor backcolor | alignleft aligncenter alignright | link | indent outdent | removeformat code'\r\n ],\r\n init_instance_callback: function (editor) {\r\n editor.on('change', function (e) {\r\n tinymce.triggerSave();\r\n $('#' + e.target.id).valid();\r\n });\r\n }\r\n });\r\n\r\n //Hook hidden field into the validation\r\n //Tried setting this on the form on creation, on custom validators.... Would not bind correctly\r\n //This works the best out of kludge options\r\n var form = $(this.form);\r\n if (form != undefined) {\r\n //create the validator\r\n $.validator.unobtrusive.parse(form);\r\n //set validator options\r\n var validator = form.data('validator');\r\n if (validator !== undefined) {\r\n validator.settings.ignore =\r\n ':hidden:not([data-role~=\"richtext\"]),.mce-content-body';\r\n }\r\n }\r\n });\r\n\r\n // limited version of the WYSIWYG editor\r\n $('[data-role~=\"richtextlimited\"]', document).each(function (index) {\r\n // console.log(\"running richtextlimited\");\r\n tinymce.remove('#' + this.id);\r\n tinymce.init({\r\n selector: '#' + this.id, // change this value according to your HTML\r\n block_formats:\r\n 'Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre',\r\n themes: \"modern\",\r\n plugins: \"code lists link textcolor table\",\r\n mode: \"textareas\",\r\n branding: false,\r\n menubar: false,\r\n forced_root_block: \"div\",\r\n toolbar: [\r\n 'bold italic | formatselect | numlist bullist | forecolor | alignleft aligncenter alignright | link | indent outdent | removeformat'\r\n ],\r\n init_instance_callback: function (editor) {\r\n editor.on('change', function (e) {\r\n tinymce.triggerSave();\r\n $('#' + e.target.id).valid();\r\n });\r\n }\r\n });\r\n\r\n //Hook hidden field into the validation\r\n //Tried setting this on the form on creation, on custom validators.... Would not bind correctly\r\n //This works the best out of kludge options\r\n if (this.form !== null) {\r\n var form = $(this.form);\r\n //create the validator\r\n $.validator.unobtrusive.parse(form);\r\n //set validator options\r\n var validator = form.data('validator');\r\n if (validator !== undefined) {\r\n validator.settings.ignore =\r\n ':hidden:not([data-role~=\"richtextlimited\"]),.mce-content-body';\r\n }\r\n }\r\n });\r\n },\r\n initAutocomplete: function (editComponent) {\r\n $('[data-role~=\"autocomplete\"]', editComponent).each(function () {\r\n var ac = $(this).AutoComplete();\r\n });\r\n app.Autocomplete.BindSetButtons(editComponent);\r\n },\r\n initTextAreaWithLimit: function (editComponent) {\r\n //setup the UI by adding HTML below element.\r\n $(\"textarea[data-val-length-max]\", editComponent).each(function () {\r\n var uniqueId = app.Page.prototype.getGuid();\r\n $(this).data('char-count-target', uniqueId);\r\n $(this).after('
Character Count: 0
');\r\n });\r\n\r\n $(\"textarea[data-val-length-max]\", editComponent).on(\"keyup\", function (ev) {\r\n var $tar = $(ev.target);\r\n\r\n // grab data-charactercount-limit. Default to 500 if it is not defined\r\n var charactersAllowed = $tar.data(\"val-length-max\") || 500;\r\n var characterCount = this.value.length;\r\n\r\n if (characterCount > charactersAllowed) {\r\n $(this).val($(this).val().substring(0, charactersAllowed));\r\n $('#' + $tar.data(\"char-count-target\")).text(\"0 characters left\");\r\n }\r\n else {\r\n $('#' + $tar.data(\"char-count-target\")).text((charactersAllowed - characterCount) + \" characters left\");\r\n }\r\n }).keyup();\r\n },\r\n initClearForm: function () {\r\n $(\"[data-role='clear-filter']\").on('click', function () {\r\n app.input.clearForm($(this));\r\n app.input.initInputComponents();\r\n });\r\n },\r\n clearForm: function (sender) {\r\n // console.log($(sender).closest('form'));\r\n $(sender).closest('form').find(':input')\r\n .not(':button, :submit, :reset, :hidden, :checkbox, :radio')\r\n .val('')\r\n .prop('selected', false);\r\n\r\n $(sender).closest('form').find(':checkbox, :radio')\r\n .prop('checked', false);\r\n\r\n $(sender).closest('form').find('select')\r\n .prop('selectedIndex', 0);\r\n },\r\n initShowPassword: function (editComponent) {\r\n\r\n\r\n $(\"[data-role~='passwordview']\", editComponent).each(function (i, el) {\r\n // insert the show password eye after the password input\r\n var shouldBeVisible = $(el).is(\":visible\");\r\n var showPasswordEye = \"\";\r\n if (shouldBeVisible) {\r\n showPasswordEye =\r\n \"
\" +\r\n \"\" +\r\n \"
\";\r\n } else {\r\n // set display none for the password eye if the parent isn't visible\r\n showPasswordEye =\r\n \"\";\r\n }\r\n //console.log($(el));\r\n //console.log(`Is visible: ${shouldBeVisible}`);\r\n //console.log(\"----------------------\");\r\n\r\n $(showPasswordEye).insertAfter(this);\r\n });\r\n\r\n // create click event for password eyes\r\n $('[data-click~=\"showPassword\"]', editComponent).each(function (j) {\r\n var passwordBox = $(this).parent().prev();\r\n $(this).on(\"click keyup\",\r\n function (e) {\r\n var runFunc = false;\r\n if (e.type === \"keyup\" || e.type === \"click\") {\r\n if (e.type === \"click\" ||\r\n e.key === \" \" ||\r\n e.code === \"Space\" ||\r\n e.keyCode === 32) {\r\n runFunc = true;\r\n }\r\n }\r\n\r\n if (runFunc) {\r\n if (passwordBox.attr(\"type\") === \"password\") {\r\n $(this).attr(\"title\", \"Hide password\");\r\n $(this).attr(\"aria-label\", \"Password is shown\");\r\n $(this).children().first().removeClass(\"fa-eye\").addClass(\"fa-eye-slash\");\r\n passwordBox.attr(\"type\", \"text\");\r\n\r\n } else {\r\n $(this).attr(\"title\", \"Show password\");\r\n $(this).attr(\"aria-label\", \"Password is hidden\");\r\n $(this).children().first().removeClass(\"fa-eye-slash\").addClass(\"fa-eye\");\r\n passwordBox.attr(\"type\", \"password\");\r\n }\r\n\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n return myInput;\r\n}());\r\n\r\n$(function () {\r\n app.input.Init();\r\n});","//*************************************************************************************\r\n//* WaMS Component Framework - app.grid.js\r\n//* Version 0.2\r\n//* Author: Damian Koch\r\n//* Component framework grids plugin\r\n//* Requires jQuery, WaMS Component Framework\r\n//*\r\n//* This component adds some grid features. Any component with 'component-grid' in data-role\r\n//* will be checked for [data-role=\"sort-action\"] on sorting controls, and [data-role=\"filter-action\"]\r\n//* on filtering controls.\r\n//*\r\n//* 8/17 DBK Added server grid support.\r\n//* 3/12 WMK Added auto pull if active grid state and not client side filtering.\r\n//* 5/21/18 Huisenga [STUDYAB-828]: Fix active state, arrow key presses\r\n//* 12/18/18 BWH: Updates to filter grid timeouts\r\n//*************************************************************************************\r\n\r\napp.grids = (function () {\r\n\r\n var focusAfterDataLoad = false;\r\n var myGrids = {\r\n Init: function () {\r\n this.initGridComponents();\r\n this.initPageGridActions();\r\n $(document).on(\"component-init-complete\", function (e, component) { app.grids.initGridComponent(component); });\r\n $(document).on(\"component-action-init-complete\", function (e, component) { app.grids.initPageGridAction(component); });\r\n },\r\n initGridComponents: function () {\r\n\r\n //This entire mess can be cleaned up if components get identified by guid\r\n var gridComponents = new Array();\r\n $('[data-role~=\"component-grid\"]').each(function (i, gridElement) {\r\n gridComponents.push($(gridElement).data('component-type'));\r\n });\r\n gridComponents = $.unique(gridComponents);\r\n $.each(gridComponents, function (i, componentType) {\r\n var grids = app.page.allComponents[componentType];\r\n grids.forEach(function (grid) {\r\n app.grids.initGridComponent(grid);\r\n });\r\n });\r\n\r\n $(document).on(\"component-bind-view-mode-complete\", function (e, component) {\r\n if (component.page.isDebugMode) {\r\n util.console.log('component-bind-view-mode-complete triggered:', util.console.calloutContent(component.type));\r\n }\r\n if (component.el.data('role').indexOf('component-grid')) {\r\n $('[data-role=\"sort-action\"]', component.el).attr('tabindex', '0');\r\n $('[data-role=\"sort-action\"]', component.el).attr('role', 'button');\r\n $('[data-role=\"sort-action\"]', component.el).on('click', $.proxy(component.sortGrid, component));\r\n $('[data-role=\"sort-action-change\"]', component.el).on('change', $.proxy(component.sortGrid, component));\r\n $('[data-role=\"dropdown-all\"]', component.el).on('change', $.proxy(component.changeAllDropdown, component));\r\n $('[data-role=\"textbox-all\"]', component.el).on('keyup', $.proxy(component.changeAllTextbox, component));\r\n $('[data-role=\"check-all\"]', component.el).on('click', $.proxy(component.checkAll, component));\r\n $('[data-role=\"sort-action\"]', component.el).keypress(function (e) {\r\n var code = e.code;\r\n if (code === \"Enter\" || code === \"Space\") {\r\n $(this).click();\r\n }\r\n });\r\n $('[data-role=\"grid-page-action\"]', component.el).on('click', $.proxy(component.pageGrid, component));\r\n }\r\n });\r\n },\r\n initGridComponent: function (gridComponent) {\r\n gridComponent.selectors.table = 'table';\r\n gridComponent.selectors.gridComponent = '[data-role*=\"component-grid\"]';\r\n gridComponent.selectors.filterForm = 'form[data-role~=\"filter-grid\"][data-component-form-target~=\"' + gridComponent.type + '\"]';\r\n gridComponent.selectors.pageSize = '[data-role~=\"grid-page-size\"][data-component-form-target=\"' + gridComponent.type + '\"]';\r\n gridComponent.selectors.showForResults = '[data-role~=\"grid-show-for-results\"][data-component-form-target~=\"' + gridComponent.type + '\"]';\r\n\r\n if ($('[data-role~=\"component\"]', gridComponent.el).length) {\r\n gridComponent.selectors.rows = 'tbody:not([data-component-role=\"noResults\"])';\r\n }\r\n else {\r\n gridComponent.selectors.rows = 'tbody > tr:not([data-component-role=\"noResults\"])';\r\n }\r\n\r\n gridComponent.gridType = gridComponent.el.data('grid-type') || 'client';\r\n\r\n if (gridComponent.gridType === 'client') {\r\n gridComponent.filterGrid = function () {\r\n var context = $(this.selectors.table, this.el);\r\n var rows = $(this.selectors.rows, context);\r\n\r\n rows.show();\r\n\r\n $(':input', this.selectors.filterForm).each(function (i, e) {\r\n var el = $(e);\r\n if (el.val() !== '') {\r\n var field;\r\n\r\n if (el.data('target')) {\r\n field = '[data-label=\"' + el.data('target') + '\"]';\r\n }\r\n else {\r\n field = '';\r\n }\r\n\r\n var values = el.val().toUpperCase().split(/\\s+/);\r\n rows.each(function (i, e) {\r\n var hide = false;\r\n\r\n $.each(values, function (index, v) {\r\n if ($(field + ':icontains(\"' + v + '\")', e).length < 1) {\r\n hide = true;\r\n return;\r\n }\r\n });\r\n if (hide) {\r\n $(e).hide();\r\n }\r\n });\r\n }\r\n });\r\n\r\n //showhide noresults\r\n //TODO: move selectors to selector params\r\n if ($(this.selectors.rows + ':visible', context).length) {\r\n $('[data-component-role=\"noResults\"]', context).hide();\r\n } else {\r\n $('[data-component-role=\"noResults\"]', context).show();\r\n }\r\n };\r\n gridComponent.pageGrid = function () {\r\n alert('do this!');\r\n };\r\n gridComponent.sortGrid = function (e) {\r\n var el = $(e.target);\r\n var context = $(el).closest(gridComponent.selectors.gridComponent);\r\n var rows = $(this.selectors.rows, context).get();\r\n var sortDescending = el.hasClass('asc');\r\n var component = this;\r\n\r\n $('[data-role=\"sort-action\"]', context).removeClass('asc').removeClass('desc').removeAttr('aria-sort');\r\n\r\n rows = app.page.mergeSort(rows, el.data('target'));\r\n\r\n if (sortDescending) {\r\n el.addClass('desc');\r\n el.attr('aria-sort', 'descending');\r\n rows = rows.reverse();\r\n } else {\r\n\r\n el.addClass('asc');\r\n el.attr('aria-sort', 'ascending');\r\n\r\n }\r\n\r\n if (component.selectors.rows === 'tbody') {\r\n $.each(rows, function (index, row) {\r\n context.append(row);\r\n });\r\n }\r\n else {\r\n $.each(rows, function (index, row) {\r\n context.children('tbody').append(row);\r\n });\r\n }\r\n };\r\n //Change for WECAN #791 - wanted \"Return\" key to submit forms\r\n //$(gridComponent.selectors.filterForm).on('keydown', function () {\r\n // switch (event.keyCode) {\r\n // case 13:\r\n // event.preventDefault();\r\n // event.stopPropagation();\r\n // }\r\n //});\r\n } else {\r\n gridComponent.filterGrid = function () { this.refreshGrid(); };\r\n gridComponent.pageGrid = function (e) {\r\n var page = $(e.target).data('page-value');\r\n this.refreshGrid(page);\r\n };\r\n gridComponent.sortGrid = function (e) {\r\n var el = $(e.target);\r\n var context = el.closest(gridComponent.selectors.gridComponent);//$(this.selectors.table, this.el);\r\n var sortDescending = el.hasClass('asc');\r\n\r\n $('[data-role=\"sort-action\"], [data-role=\"sort-action-change\"]', context).removeClass('asc').removeClass('desc').removeAttr('aria-sort');\r\n\r\n if (el.data(\"role\") == \"sort-action-change\") {\r\n el.attr('data-target', $('[name=\"SortField\"]', context).val());\r\n sortDescending = $('[name=\"IsSortAscending\"]', context).val() != 'True';\r\n }\r\n\r\n if (sortDescending) {\r\n el.addClass('desc');\r\n el.attr('aria-sort', 'descending');\r\n } else {\r\n el.addClass('asc');\r\n el.attr('aria-sort', 'ascending');\r\n }\r\n\r\n this.refreshGrid();\r\n };\r\n gridComponent.checkAll = function (e) {\r\n if ($(e.target).prop('checked')) {\r\n $(\"[name*='\" + $(e.target).data('name') + \"']\").prop('checked', true);\r\n }\r\n else {\r\n $(\"[name*='\" + $(e.target).data('name') + \"']\").prop('checked', false);\r\n }\r\n };\r\n gridComponent.changeAllDropdown = function (e) {\r\n $(\"[name*='\" + $(e.target).data('name') + \"']\").val($(e.target).val());\r\n };\r\n gridComponent.changeAllTextbox = function (e) {\r\n $(\"[name*='\" + $(e.target).data('name') + \"']\").val($(e.target).val());\r\n };\r\n gridComponent.refreshGrid = function (pageNumber) {\r\n $(document).trigger(\"component-filter-grid-started\", this);\r\n\r\n var el = this.el;\r\n var context = el.closest(this.selectors.gridComponent);//$(this.selectors.table, this.el);\r\n var form = $(this.selectors.filterForm);\r\n\r\n //validate form\r\n $.validator.unobtrusive.parse(form);\r\n if (!form.valid()) {\r\n //Give focus to the first error\r\n var firstError = $('#' + $('.field-validation-error', form).data('valmsg-for'));\r\n if (firstError.length) {\r\n $('html, body').animate({\r\n scrollTop: firstError.offset().top - 50\r\n }, 500);\r\n }\r\n return;\r\n }\r\n\r\n var pageSize = $(this.selectors.pageSize, context).val();\r\n\r\n\r\n //get filters\r\n var filters = form.serializeArray();\r\n var pageNum = pageNumber || 1;\r\n filters.push({ name: \"pageNumber\", value: pageNum });\r\n filters.push({ name: \"pageSize\", value: pageSize });\r\n filters.push({ name: \"actionTarget\", value: $(this.selectors.pageSize, context).data('component-form-target') });\r\n filters.push({ name: \"sortField\", value: $('[aria-sort]', context).data('target') });\r\n filters.push({ name: \"isSortAscending\", value: $('[aria-sort]', context).attr('aria-sort') === 'ascending' });\r\n filters.push({ name: \"isMobile\", value: $(window).width() <= 768 });\r\n\r\n this.startLoading();\r\n if (this.request != null) {\r\n this.request.abort();\r\n this.request = null;\r\n }\r\n this.request = $.ajax({ url: this.urls.view, data: $.param(filters), context: this, error: this.page.handleAjaxError, type: 'POST' }).done(function (data) {\r\n el.html(data);\r\n this.endLoading();\r\n this.bindViewMode();\r\n var forResults = $(this.selectors.showForResults);\r\n\r\n if (forResults) {\r\n if ($('.no-results', this.el).length) {\r\n forResults.hide();\r\n eval();\r\n\r\n } else {\r\n forResults.show();\r\n eval();\r\n if (app.grids.focusAfterDataLoad)\r\n {\r\n $('html,body').animate({\r\n scrollTop: $(gridComponent.selectors.gridComponent).offset().top\r\n }, 500);\r\n }\r\n }\r\n }\r\n });\r\n\r\n $(document).trigger(\"component-filter-grid-completed\", this);\r\n\r\n };\r\n }\r\n\r\n\r\n $(gridComponent.componentActions.report).each(function () {\r\n app.grids.initPageGridAction(this);\r\n });\r\n\r\n if (gridComponent.state === \"active\") {\r\n $('[data-role=\"sort-action\"]', gridComponent.el).on('click', $.proxy(gridComponent.sortGrid, gridComponent));\r\n $('[data-role=\"grid-page-action\"]', gridComponent.el).on('click', $.proxy(gridComponent.pageGrid, gridComponent));\r\n }\r\n //Prevent enter key and escape to prevent unintended form posts\r\n $('form[data-component-action=\"filtergrid\"] input, form[data-component-action=\"filtergrid\"] select').on('keydown', $.proxy(function () {\r\n switch (event.code) {\r\n case \"Enter\":\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n case \"Escape\":\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n }, this));\r\n },\r\n initPageGridActions: function () {\r\n if (app.page.componentActions.report) {\r\n app.page.componentActions.report.forEach(function (pageAction) {\r\n app.grids.initPageGridAction(pageAction);\r\n });\r\n }\r\n },\r\n initPageGridAction: function (pageAction) {\r\n switch (pageAction.action) {\r\n case \"filtergrid\":\r\n pageAction.triggerAction = function (e) {\r\n if (e.type !== \"keyup\" || app.page.isPrintableCharacter(e.keyCode)) {\r\n var delay = 300;\r\n if (e.type !== \"keyup\") {\r\n delay = 0;\r\n }\r\n //if keyup, add a delay\r\n if (this.timeout !== null) { clearTimeout(this.timeout); }\r\n var that = this;\r\n this.timeout = setTimeout(function () {\r\n\r\n var theTargets = that.target.split(\" \");\r\n theTargets.forEach(function (theTarget) {\r\n var grids = this.app.page.allComponents[theTarget];\r\n grids.forEach(function (grid) {\r\n grid.filterGrid(e);\r\n });\r\n });\r\n\r\n }, delay, e, that);\r\n }\r\n };\r\n pageAction.el.off(pageAction.event).on(pageAction.event, $.proxy(pageAction.triggerAction, pageAction));\r\n break;\r\n case \"viewgridpage\":\r\n pageAction.triggerAction = function (e) {\r\n var target = this.page.components[this.target][0];\r\n target.filterGrid($(e.target).data('component-action-value'));\r\n };\r\n pageAction.el.off(pageAction.event).on(pageAction.event, $.proxy(pageAction.triggerAction, pageAction));\r\n break;\r\n }\r\n }\r\n };\r\n\r\n return myGrids;\r\n}());\r\n\r\n$(function () {\r\n app.grids.Init();\r\n});","//*************************************************************************************\r\n//* WaMS Component Framework - app.fileUpload.js\r\n//* Version 0.1\r\n//* Author: Huisenga\r\n//* Component framework file upload plugin\r\n//* Requires jQuery, WaMS Component Framework, fine uploader\r\n//*\r\n//* Component tags file upload elements and intiailizes them using fine uploader\r\n//*\r\n//*************************************************************************************\r\n//2/23/18 Huisenga [STUDYAB-339]: Added Binding for edit mode complete\r\n\r\napp.fileUploaders = (function () {\r\n var myUploaders = {\r\n Init: function (context) {\r\n this.initFileUploadComponents(context);\r\n },\r\n initFileUploadComponents: function (context) {\r\n $(document).on(\"component-bind-edit-mode-complete\", function (e, component) {\r\n $('[data-role~=\"file-Upload\"]', component.el).each(function (i, fileUploadElement) {\r\n app.fileUploaders.initFileUploadComponent(fileUploadElement);\r\n });\r\n });\r\n if (context === undefined) context = $(document);\r\n $('[data-role~=\"file-Upload\"]', context).each(function (i, fileUploadElement) {\r\n app.fileUploaders.initFileUploadComponent(fileUploadElement);\r\n });\r\n },\r\n initFileUploadComponent: function (fileUploadElement) {\r\n var requestEndpoint = $(fileUploadElement).data('requestendpoint') ? $(fileUploadElement).data('requestendpoint') : '/File/Upload';\r\n var deleteEndpoint = $(fileUploadElement).data('deleteendpoint') ? $(fileUploadElement).data('deleteendpoint') : '/File/Delete';\r\n var multiUpload = $(fileUploadElement).data('multiupload') === \"True\";\r\n var allowedExtensions = $(fileUploadElement).data('allowedextensions');\r\n var target = $(fileUploadElement).data('target-id').replace(\"_\",\"\");\r\n\r\n if (!allowedExtensions) {\r\n allowedExtensionArray = [];\r\n } else {\r\n allowedExtensionArray = allowedExtensions.split(',');\r\n }\r\n var sizeLimit = $(fileUploadElement).data('sizelimit');\r\n if (!sizeLimit) {\r\n sizeLimit = 0;\r\n }\r\n\r\n var uploader = new qq.FineUploader({\r\n debug: false,\r\n multiple: multiUpload,\r\n element: fileUploadElement,\r\n request: {\r\n endpoint: requestEndpoint,\r\n params: {\r\n TargetDocumentGuid: target\r\n }\r\n },\r\n deleteFile: {\r\n enabled: true,\r\n method: \"POST\",\r\n endpoint: deleteEndpoint\r\n },\r\n callbacks: {\r\n onComplete: function (id, name, response) {\r\n if (response.success === true) {\r\n\r\n //we have finished uploading. If you have any custom data returns, process them here\r\n if (typeof response.fileName !== 'undefined')\r\n this.setName(id, response.fileName);\r\n app.fileUploaders.UpdateFile(this, id);\r\n }\r\n },\r\n onStatusChange: function (id, oldStatus, newStatus) {\r\n if (newStatus === 'upload successful') {\r\n app.fileUploaders.UpdateFile(this, id);\r\n }\r\n else {\r\n app.fileUploaders.RemoveFile(this, id);\r\n }\r\n }\r\n },\r\n thumbnails: {\r\n placeholders: {\r\n notAvailablePath: \"/Content/placeholders/not_available-generic.png\",\r\n waitingPath: \"/Content/placeholders/waiting-generic.png\"\r\n }\r\n },\r\n validation: {\r\n allowedExtensions: allowedExtensionArray,\r\n sizeLimit: sizeLimit\r\n },\r\n template: 'qq-simple-thumbnails-template'\r\n });\r\n if ($(\".initfile\", $(fileUploadElement)).length && !multiUpload) {\r\n //has init file, but is single upload\r\n //hide button\r\n $('.qq-upload-button-selector', $(fileUploadElement)).hide();\r\n }\r\n $(\".initfile\", $(fileUploadElement)).each(function () {\r\n if ($(this).data('initialfile-uuid') !== \"\") {\r\n uploader.addInitialFiles([{\r\n name: $(this).data('initialfile-name'),\r\n uuid: $(this).data('initialfile-uuid'),\r\n thumbnailUrl: $(this).data('initialfile-thumbnailurl'),\r\n size: $(this).data('initialfile-size')\r\n }]);\r\n }\r\n });\r\n }\r\n\r\n };\r\n myUploaders.UpdateFile = function (file, id) {\r\n var targetIdBase = $(file._options.element).data('target-id');\r\n if ($(file._options.element).data('multiupload') === \"True\") {\r\n var fileSet = $('#' + targetIdBase + '_fileset');\r\n\r\n var fileElement = $('[data-index=\"' + id + '\"]', fileSet);\r\n if (!fileElement.length) {\r\n var newTemplate = $('.file-template .filespec', fileSet).clone();\r\n $('.templateField', newTemplate).each(function () {\r\n var name = $(this).attr('name');\r\n $(this).attr('name', name.replace('fileIndex', id));\r\n var idVal = $(this).attr('id');\r\n $(this).attr('id', idVal.replace('fileIndex', id));\r\n $(this).val('');\r\n });\r\n\r\n $('.file-index', newTemplate).val(id);\r\n //$('.templateValidation', newTemplate).each(function () {\r\n // var name = $(this).attr('data-valmsg-for');\r\n // $(this).attr('data-valmsg-for', name.replace('feeIndex', newIndex));\r\n //});\r\n\r\n newTemplate.attr('data-index', id);\r\n\r\n //enable the fields\r\n $('input', newTemplate).removeAttr('disabled');\r\n\r\n fileSet.append(newTemplate);\r\n fileElement = newTemplate;\r\n }\r\n\r\n //an item in the fileset should now exist. Go ahead and update the data within\r\n $('.file-guid', fileElement).val(file.getUuid(id));\r\n $('.file-size', fileElement).val(file.getSize(id));\r\n $('.file-name', fileElement).val(file.getName(id));\r\n\r\n } else {\r\n //if single file, update the single file variables\r\n $('#' + targetIdBase + '_Guid').val(file.getUuid(id));\r\n $('#' + targetIdBase + '_Size').val(file.getSize(id));\r\n $('#' + targetIdBase + '_FileName').val(file.getName(id));\r\n\r\n $('.qq-upload-button-selector', $(file._options.element)).hide();\r\n }\r\n //$(\"form\").data(\"unobtrusiveValidation\", null);\r\n //$(\"form\").data(\"validator\", null);\r\n //$.validator.unobtrusive.parse($(\"form\"));\r\n };\r\n\r\n myUploaders.RemoveFile = function (file, id) {\r\n var targetIdBase = $(file._options.element).data('target-id');\r\n if ($(file._options.element).data('multiupload') === \"True\") {\r\n //if multifile, find the dataset and remove this item. It will be readded if file completes\r\n var fileSet = $('#' + targetIdBase + '_fileset');\r\n $('[data-index=\"' + id + '\"]', fileSet).remove();\r\n } else {\r\n //if single file, just empty out the params\r\n $('#' + targetIdBase + '_Guid').val('');\r\n $('#' + targetIdBase + '_Size').val('');\r\n $('#' + targetIdBase + '_FileName').val('');\r\n $('.qq-upload-button-selector', $(file._options.element)).show();\r\n }\r\n };\r\n return myUploaders;\r\n}());\r\n$(document).ready(function () {\r\n app.fileUploaders.Init();\r\n});\r\n","app.pagecontent = (function () {\r\n var myPageContent = {\r\n Init: function () {\r\n this.BindContentEditor(document);\r\n $(document).on('component-bind-edit-mode-complete', function (e, component) {\r\n app.pagecontent.BindContentEditor(component.el);\r\n });\r\n },\r\n BindContentEditor: function (el) {\r\n $('.pagecontent-placeholder',$(el)).on('click', function () {\r\n $.ajax({\r\n url: '/Admin/Content/EditForm',\r\n data: {\r\n mnemonic: $(this).data('pagecontentmnemonic'),\r\n isTooltip: $(this).data('istooltip')\r\n },\r\n context: this, error: app.Page.handleAjaxError\r\n }).done(function (data) {\r\n $('#pageContentModal #pageContentForm').html(data);\r\n $('#pageContentModal').modal(\"show\");\r\n app.input.initTextEditor($('#pageContentModal'));\r\n });\r\n });\r\n }\r\n };\r\n return myPageContent;\r\n}());\r\n\r\n$(function () {\r\n app.pagecontent.Init();\r\n});","$(document).on('page-init-complete',\r\n function () {\r\n //Case insensitive contains\r\n jQuery.expr[':'].icontains = function (a, i, m) {\r\n return jQuery(a).text().toUpperCase()\r\n .indexOf(m[3].toUpperCase()) >= 0;\r\n };\r\n });","//Variable to hold autocomplete objects\r\nvar AutocompleteObjects = {};\r\n//variable to track mouse position. Used for tracking if mouse moves\r\nvar lastCursorPos = { x: 0, y: 0 };\r\n\r\njQuery.fn.AutoComplete = function () {\r\n var searchIndex = $(this[0]).data('searchindex');\r\n var autocompleteObject;\r\n if (searchIndex === undefined || searchIndex === '') {\r\n autocompleteObject = new app.Autocomplete($(this));\r\n }\r\n else {\r\n autocompleteObject = AutocompleteObjects[searchIndex];\r\n }\r\n\r\n return autocompleteObject;\r\n};\r\n\r\napp.Autocomplete = (function () {\r\n var myAutocomplete = function (e, options) {\r\n this.el = $(e);\r\n this.id = $(this.el).attr('id');\r\n\r\n //Define properties for the object\r\n Object.defineProperties(this,\r\n {\r\n //active item, find the element in the result list with the autocomplete-item and active classes\r\n \"activeItem\": {\r\n \"get\": function () { return this.resultList.find('.autocomplete-item.active'); }\r\n },\r\n //result items, find all of the elements in the result list with the autocomplete-item class\r\n \"resultItems\": {\r\n \"get\": function () { return this.resultList.find('.autocomplete-item'); }\r\n },\r\n //search text, get the value of the object's search box\r\n \"searchText\": {\r\n \"get\": function () { return this.searchBox.val(); }\r\n }\r\n });\r\n //generate a random id for the search\r\n this.searchIndex = this.generateId();\r\n\r\n //default options configuration\r\n this.options = {\r\n cacheResults: true,\r\n endPoint: '',\r\n initialSelected: null,\r\n initialText: '',\r\n onSelect: function (selectedItem) { },\r\n outputField: '',\r\n placeholder: 'Start typing a first/last name to search...',\r\n searchMinLength: 3,\r\n replaceVal: true,\r\n template: \"
#= FirstName # #= LastName #
#= NetID #
\",\r\n filterType: \"server\",\r\n label: ''\r\n };\r\n\r\n //merge the options with the user configured options\r\n this.options = $.extend({}, this.options, options);\r\n\r\n //populate data attribute options\r\n if (this.el.data('autocomplete-cacheresults') !== '' && this.el.data('autocomplete-cacheresults') !== undefined) {\r\n this.options.cacheResults = this.el.data('autocomplete-cacheresults');\r\n }\r\n if (this.el.data('autocomplete-endpoint')) {\r\n this.options.endPoint = this.el.data('autocomplete-endpoint');\r\n }\r\n if (this.el.data('autocomplete-initialtext')) {\r\n this.options.initialText = this.el.data('autocomplete-initialtext');\r\n }\r\n if (this.el.data('autocomplete-outputfield')) {\r\n this.options.outputField = this.el.data('autocomplete-outputfield');\r\n }\r\n if (this.el.data('autocomplete-placeholder')) {\r\n this.options.placeholder = this.el.data('autocomplete-placeholder');\r\n }\r\n if (this.el.data('autocomplete-searchminlength') !== '' && this.el.data('autocomplete-searchminlength') !== undefined) {\r\n this.options.searchMinLength = this.el.data('autocomplete-searchminlength');\r\n }\r\n if (this.el.data('autocomplete-replaceval') !== '' && this.el.data('autocomplete-replaceval') !== undefined) {\r\n this.options.replaceVal = this.el.data('autocomplete-replaceval');\r\n }\r\n if (this.el.data('autocomplete-template')) {\r\n this.options.template = this.el.data('autocomplete-template');\r\n }\r\n if (this.el.data('autocomplete-additionaldataselector')) {\r\n this.options.additionaldataselector = this.el.data('autocomplete-additionaldataselector');\r\n }\r\n if (this.el.data('autocomplete-filtertype')) {\r\n this.options.filterType = this.el.data('autocomplete-filtertype');\r\n }\r\n if (this.el.data('autocomplete-label')) {\r\n this.options.label = this.el.data('autocomplete-label');\r\n }\r\n\r\n // plugin implementation\r\n this.selected = null;\r\n this.outputText = null;\r\n this.displayText = null;\r\n this.cache = {};\r\n\r\n //init new object\r\n this.init();\r\n\r\n //Log item\r\n AutocompleteObjects[this.searchIndex] = this;\r\n };\r\n\r\n myAutocomplete.prototype.init = function () {\r\n // check if input and alert if not\r\n if (!this.el.is('input')) {\r\n util.console.log(\"Error: The auto complete feature can only be used on inputs with type set to text.\");\r\n return;\r\n }\r\n\r\n //Log the searchIndex\r\n this.el.attr('data-searchIndex', this.searchIndex);\r\n\r\n //init\r\n this.container = $(\"
\");\r\n this.container.addClass(\"autocomplete-container\");\r\n\r\n this.el.after(this.container);\r\n\r\n //create search box\r\n this.searchBox = $(\"\");\r\n // set accessibility tags\r\n this.searchBox.attr('type', 'text');\r\n this.searchBox.attr('placeholder', this.options.placeholder);\r\n this.searchBox.attr('role', \"combobox\");\r\n this.searchBox.attr('aria-autocomplete', \"list\");\r\n this.searchBox.attr('aria-haspopup', \"true\");\r\n this.searchBox.attr('aria-owns', \"search-\" + this.searchIndex + \"-results\");\r\n this.searchBox.attr('aria-expanded', \"false\");\r\n this.searchBox.attr('aria-label', this.options.label);\r\n //this.searchBox.removeAttr('aria-activedescendant');\r\n this.searchBox.attr('id', 'search-' + this.searchIndex);\r\n\r\n this.container.append(this.searchBox);\r\n\r\n //add announcement for notifying screen readers of changes\r\n this.announcement = $(\"
\");\r\n this.announcement.addClass(\"autocomplete-announcement\");\r\n this.announcement.attr('aria-live', \"assertive\");\r\n\r\n this.container.append(this.announcement);\r\n\r\n this.resultList = $('
');\r\n this.container.append(this.resultList);\r\n //this.el.attr('type', 'hidden');\r\n this.el.addClass('autocomplete-hide');\r\n this.el.attr('tabindex', -1);\r\n\r\n //Bind actions\r\n //Bind Focus\r\n this.searchBox.on('focus', $.proxy(this.onFocus, this));\r\n // close drop down when clicking away\r\n this.searchBox.on('blur', $.proxy(this.onBlur, this));\r\n // this is mostly navigation support\r\n this.searchBox.on('keyup', $.proxy(this.onKeyPress, this));\r\n // bind search\r\n this.searchBox.on('input propertychange paste', $.proxy(this.onInput, this));\r\n\r\n // stop all default behavior when the user hits enter, up arrow and down arrow\r\n this.searchBox.on('keydown keypress',\r\n function (event) {\r\n var keyID = event.key;\r\n //up arrow moves active up\r\n if (keyID === 'Enter' || keyID === 'ArrowUp' || keyID === 'ArrowDown') {\r\n event.preventDefault();\r\n }\r\n });\r\n\r\n\r\n // Bind click event to list elements in results\r\n this.resultList.on(\"mousedown\", \"div.autocomplete-item\", $.proxy(this.selectItem, this));\r\n this.resultList.on({\r\n\r\n mousemove: function () {\r\n $(this).siblings().removeClass(\"active\");\r\n $(this).addClass(\"active\");\r\n },\r\n mouseleave: function (e) {\r\n $(this).removeClass(\"active\");\r\n lastCursorPos = { x: e.screenX, y: e.screenY };\r\n }\r\n },\r\n \"div.autocomplete-item\");\r\n\r\n //init selected value\r\n if (this.options.initialSelected !== null) {\r\n var template = this.populateTemplate(this.initialSelected);\r\n this.searchBox.val(template.find('.display-text').text().trim());\r\n this.el.val(template.find('.output-text').text().trim());\r\n this.selected = this.initialSelected;\r\n } else if (this.options.initialText !== '') {\r\n this.searchBox.val(this.options.initialText);\r\n this.selected = { text: this.options.initialText };\r\n }\r\n };\r\n\r\n myAutocomplete.prototype.onBlur = function () {\r\n this.emptyResultList();\r\n if (this.selected === null) {\r\n if (this.options.replaceVal) {\r\n this.searchBox.val('');\r\n\r\n // trigger the change on the text box in case anyone is listening\r\n this.el.trigger('change');\r\n } else {\r\n this.el.val(this.searchText);\r\n }\r\n }\r\n };\r\n myAutocomplete.prototype.onFocus = function () {\r\n if (this.searchText.length === 0 && this.options.searchMinLength === 0) {\r\n this.search();\r\n }\r\n };\r\n myAutocomplete.prototype.onKeyPress = function (event) {\r\n var keyID = event.key;\r\n util.console.log(\"keypress:\" + keyID);\r\n // handle keyboard controls\r\n // ESC closes list\r\n if (keyID === 'Escape') {\r\n this.hideResultList();\r\n } else if (keyID === 'Enter') {\r\n // Enter selects active item\r\n if (this.activeItem.length)\r\n this.selectItem();\r\n }\r\n // up arrow moves active up\r\n else if (keyID === 'ArrowUp') {\r\n this.navigateUp();\r\n }\r\n // down arrow moves active down\r\n else if (keyID === 'ArrowDown') {\r\n this.navigateDown();\r\n }\r\n };\r\n myAutocomplete.prototype.onInput = function (event) {\r\n //reset selected\r\n this.selected = {};\r\n var keyID = event.key;\r\n util.console.log(\"change:\" + keyID);\r\n // Check if search should happen\r\n if (this.searchText.length >= this.options.searchMinLength) {\r\n this.search();\r\n }\r\n //Handle backspace/delete so results don't remain with less than specified characters\r\n else if (this.resultList.length > 0) {\r\n this.resetSearchList();\r\n }\r\n };\r\n\r\n myAutocomplete.prototype.search = function () {\r\n this.resetSearchList();\r\n\r\n // show loading image and notify users\r\n this.announcement.text(\"Loading results.\");\r\n this.searchBox.addClass('autocomplete-ajax-loading');\r\n\r\n //Check if we've searched for this term before\r\n if (this.options.cacheResults && this.searchText in this.cache) {\r\n this.populateList(this.cache[this.searchText]);\r\n }\r\n else {\r\n if (this.options.filterType === 'client') {\r\n if (this.clientSideDataOptions === undefined) {\r\n //get the values from somewhere\r\n this.getClientSideResults($.proxy(this.filterClientSideResults, this));\r\n } else {\r\n //filter\r\n //set\r\n this.filterClientSideResults();\r\n }\r\n }\r\n else {\r\n\r\n this.searchBox.addClass('autocomplete-ajax-loading');\r\n\r\n //Check if we've searched for this term before\r\n clearTimeout(this.delayTimer);\r\n this.delayTimer = setTimeout($.proxy(function () {\r\n this.getResults();\r\n },\r\n this),\r\n 500);\r\n }\r\n }\r\n };\r\n myAutocomplete.prototype.getResults = function () {\r\n\r\n var searchData = \"searchText=\" + this.searchText;\r\n if (this.options.additionaldataselector !== undefined && $(this.options.additionaldataselector).length)\r\n searchData += \"&\" + $(this.options.additionaldataselector).serialize();\r\n //searchData['searchText'] = this.searchText;\r\n //data.push({ name: \"searchText\", value: this.searchText });\r\n if (this.request != null) {\r\n this.request.abort();\r\n this.request = null;\r\n }\r\n this.request = $.ajax({ url: window.applicationPath + this.options.endPoint, data: searchData, dataType: \"json\", context: this, error: app.page.handleAjaxError }).done(function (data) {\r\n\r\n //Add results to cache\r\n this.cache[this.searchText] = data;\r\n\r\n //add results to shown list\r\n this.populateList(data);\r\n });\r\n };\r\n myAutocomplete.prototype.getClientSideResults = function (callback) {\r\n\r\n this.request = $\r\n .ajax({\r\n url: window.applicationPath + this.options.endPoint,\r\n dataType: \"json\",\r\n context: this,\r\n error: app.page.handleAjaxError\r\n }).done(function (data) {\r\n\r\n //Add results to cache\r\n this.clientSideDataOptions = data;\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n\r\n }\r\n myAutocomplete.prototype.filterClientSideResults = function () {\r\n var filteredData = [];\r\n var cleanSearch = this.searchText.trim().toLowerCase();\r\n\r\n if (this.clientSideDataOptions.length > 0) {\r\n var keys = Object.keys(this.clientSideDataOptions[0]);\r\n\r\n //For each client side option get the index\r\n for (var index in this.clientSideDataOptions) {\r\n //find the object\r\n var result = this.clientSideDataOptions[index];\r\n if (cleanSearch.length > 0) {\r\n //for each search key\r\n for (var i = 0; i < keys.length; i++) {\r\n //if the filtered data list does not have the object\r\n if (filteredData.indexOf(result) === -1) {\r\n var propName = keys[i];\r\n //if there is a search text\r\n //only add items that match \r\n if (result[propName].toString().trim().toLowerCase().indexOf(cleanSearch) !== -1) {\r\n filteredData.push(result);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n //add all item\r\n filteredData.push(result);\r\n }\r\n }\r\n }\r\n //Add results to cache\r\n this.cache[this.searchText] = filteredData;\r\n //add results to shown list\r\n this.populateList(filteredData);\r\n }\r\n myAutocomplete.prototype.populateList = function (results) {\r\n this.emptyResultList();\r\n //update accessibility announcement\r\n if (results.length > 0) {\r\n this.announcement.text(results.length + \" records found, use up and down arrows to review\");\r\n } else {\r\n this.announcement.text(results.length + \" records found.\");\r\n }\r\n\r\n //Add results to the list\r\n for (var i = 0; i < results.length; i++) {\r\n //populate template\r\n var populatedTemplate = this.populateTemplate(results[i]);\r\n this.resultList.append(\"
\" +\r\n populatedTemplate +\r\n \"
\");\r\n }\r\n if (results.length === 1) {\r\n this.resultList.append(\"
Showing top record.
\");\r\n } else if (results.length > 0) {\r\n this.resultList.append(\"
Showing top \" + results.length + \" records.
\");\r\n } else {\r\n this.resultList.append(\"
No records found.
\");\r\n }\r\n this.showResultList();\r\n\r\n this.searchBox.removeClass('autocomplete-ajax-loading');\r\n };\r\n\r\n //Populate the template with the data provided\r\n myAutocomplete.prototype.populateTemplate = function (result) {\r\n var personOption = this.options.template;\r\n //Loop through each key in the list, and replace with the identifier\r\n for (var key in result) {\r\n const re = new RegExp('#=[ ]*' + key + '[ ]*#', 'gi');\r\n personOption = personOption.replace(re, result[key]);\r\n }\r\n\r\n //Remove all missing identifiers\r\n const cleanupRe = new RegExp('#=.*?#', 'g');\r\n personOption = personOption.replace(cleanupRe, '');\r\n\r\n //Add the output field\r\n if (this.options.outputField !== '' && typeof result[this.options.outputField] !== 'undefined') {\r\n personOption += '';\r\n }\r\n return personOption;\r\n };\r\n\r\n myAutocomplete.prototype.selectItem = function () {\r\n var displayText = this.activeItem.find('.display-text').text().trim();\r\n\r\n //output selected value\r\n var outputText = this.activeItem.find('.output-text').val();\r\n\r\n var itemData = this.activeItem.data(\"item-data\");\r\n //Call the base set value\r\n this.setValue(displayText, outputText, itemData);\r\n };\r\n myAutocomplete.prototype.setValue = function (displayText, outputText, itemData) {\r\n this.searchBox.val(displayText);\r\n if (outputText) {\r\n //output selected value\r\n this.el.val(outputText);\r\n } else {\r\n //output display value\r\n this.el.val(displayText);\r\n }\r\n if (itemData) {\r\n this.selected = itemData;\r\n } else {\r\n this.selected = { displayText: displayText };\r\n }\r\n this.emptyResultList();\r\n this.options.onSelect.call(this.selected);\r\n\r\n $(document).trigger('component-autocomplete-selected', this);\r\n $(document).trigger('component-autocomplete-selected-' + this.id, this);\r\n\r\n //trigger the change on the text box in case anyone is listening\r\n this.el.trigger('change');\r\n };\r\n\r\n myAutocomplete.prototype.clearSelectItem = function () {\r\n if (this.options.replaceVal) {\r\n this.el.val('');\r\n }\r\n this.selected = null;\r\n this.emptyResultList();\r\n this.options.onSelect.call(this.selected);\r\n\r\n $(document).trigger('component-autocomplete-selectcleared', this);\r\n $(document).trigger('component-autocomplete-selectcleared-' + this.id, this);\r\n\r\n $(document).trigger('component-autocomplete-selected', this);\r\n $(document).trigger('component-autocomplete-selected-' + this.id, this);\r\n };\r\n\r\n myAutocomplete.prototype.resetSearchList = function () {\r\n this.emptyResultList();\r\n this.clearSelectItem();\r\n };\r\n\r\n myAutocomplete.prototype.showResultList = function () {\r\n this.resultList.addClass('active');\r\n this.resultList.scrollTop(0);\r\n this.searchBox.attr('aria-expanded', \"true\");\r\n //Using the result list to display the record count/ no record message\r\n //if (this.resultList.find('div.autocomplete-item').length > 0) {\r\n // this.resultList.addClass('active');\r\n //} else {\r\n // this.hideResultList();\r\n //}\r\n };\r\n myAutocomplete.prototype.hideResultList = function () {\r\n this.resultList.removeClass('active');\r\n this.searchBox.attr('aria-expanded', \"false\");\r\n };\r\n myAutocomplete.prototype.emptyResultList = function () {\r\n this.hideResultList();\r\n this.resultList.empty();\r\n };\r\n\r\n myAutocomplete.prototype.navigateUp = function () {\r\n if (this.activeItem.length) {\r\n var index = this.resultItems.index(this.activeItem);\r\n this.activeItem.removeClass('active');\r\n this.activeItem.removeAttr('aria-selected');\r\n var newActiveIndex = index - 1;\r\n if (index > -1) {\r\n this.resultItems.eq(newActiveIndex).addClass('active');\r\n this.resultItems.eq(newActiveIndex).attr('aria-selected', 'true');\r\n this.searchBox.attr('aria-activedescendant', this.resultItems.eq(newActiveIndex).attr('id'));\r\n this.resultItems.eq(newActiveIndex)[0].scrollIntoView({ block: 'nearest', inline: 'start' });\r\n\r\n }\r\n } else {\r\n // set the first element active\r\n this.resultItems.first().addClass('active');\r\n this.resultItems.first().attr('aria-selected', 'true');\r\n this.searchBox.attr('aria-activedescendant', this.resultItems.first().attr('id'));\r\n this.resultList.scrollTop(0);\r\n }\r\n };\r\n myAutocomplete.prototype.navigateDown = function () {\r\n if (this.activeItem.length && this.resultItems.index(this.activeItem) < this.resultItems.length - 1) {\r\n var index = this.resultItems.index(this.activeItem);\r\n this.activeItem.removeClass('active');\r\n this.activeItem.removeAttr('aria-selected');\r\n var newActiveIndex = index + 1;\r\n if (index < this.resultItems.length) {\r\n this.resultItems.eq(newActiveIndex).addClass('active');\r\n this.resultItems.eq(newActiveIndex).attr('aria-selected', 'true');\r\n this.searchBox.attr('aria-activedescendant', this.resultItems.eq(newActiveIndex).attr('id'));\r\n this.resultItems.eq(newActiveIndex)[0].scrollIntoView({ block: 'nearest', inline: 'start' });\r\n\r\n }\r\n } else {\r\n //set the first element active\r\n this.resultItems.first().addClass('active');\r\n this.resultItems.first().siblings().removeClass('active');\r\n this.resultItems.first().attr('aria-selected', 'true');\r\n this.searchBox.attr('aria-activedescendant', this.resultItems.first().attr('id'));\r\n this.resultList.scrollTop(0);\r\n }\r\n };\r\n\r\n myAutocomplete.prototype.generateId = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,\r\n function (c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n };\r\n return myAutocomplete;\r\n}());\r\n\r\napp.Autocomplete.BindSetButtons = function (el) {\r\n $('[data-autocomplete-action=\"set\"]', el).on('click',\r\n function () {\r\n var action = $(this);\r\n $('#' + action.data('autocomplete-target')).AutoComplete().setValue(action.data('autocomplete-set-text'), action.data('autocomplete-set-value'));\r\n });\r\n};\r\n","//*************************************************************************************\r\n//* WaMS Custom Validators\r\n//* Version 1.0\r\n//* Author: Damian Koch\r\n//* JavaScript component of custom ComponentModel.DataAnnotations.ValidationAttribute\r\n//* Adds client-side support of RequiredIf, and ValidYearDuration\r\n//* Requires jQuery, jQuery.validate, jQuery.validate.unobtrusive\r\n//*************************************************************************************\r\njQuery(function () {\r\n jQuery.validator.addMethod('validyearduration', function (value, element, params) {\r\n if (value < 0) {\r\n return false;\r\n }\r\n return true;\r\n }, '');\r\n\r\n jQuery.validator.unobtrusive.adapters.add('validyearduration', function (options) {\r\n options.rules['validyearduration'] = {};\r\n options.messages['validyearduration'] = options.message;\r\n });\r\n\r\n // The each('abcd..') loop is required to enable client-side validation for RequiredIf because RequiredIf can be\r\n // applied to a property multiple time and each use of RequiredIf returns a unique ValidationType/Name\r\n\r\n $.each('abcdefghijklmnopqrstuvwxyz'.split(''), function (idx, val) {\r\n const adapterName = `requiredif${val}`;\r\n\r\n $.validator.unobtrusive.adapters.add(adapterName, ['dependentproperty', 'desiredvalue'], function (options) {\r\n options.rules[adapterName] = options.params;\r\n options.messages[adapterName] = options.message;\r\n });\r\n });\r\n\r\n $.each('abcdefghijklmnopqrstuvwxyz'.split(''), function (idx, val) {\r\n const methodName = `requiredif${val}`;\r\n\r\n $.validator.addMethod(methodName, function (value, element, parameters) {\r\n const dependentPropertyArray = parameters.dependentproperty.split(',');\r\n const desiredValueArray = parameters.desiredvalue.split(',');\r\n const elementIsPartOfList = element.name.includes('[') && element.name.includes(']');\r\n const listPrefix = element.name.substring(0, element.name.lastIndexOf('.'));\r\n\r\n let fieldIsRequired = true;\r\n for (let i = 0; i < dependentPropertyArray.length; i++) {\r\n // Find the that we're inspecting; only look in the [Attribute] decorated property's form\r\n let dependentProperty;\r\n if (elementIsPartOfList) {\r\n dependentProperty = $(element.form).find(`[name='${listPrefix}.${dependentPropertyArray[i]}']`);\r\n }\r\n else {\r\n dependentProperty = $(element.form).find(`[name='${dependentPropertyArray[i]}']`);\r\n }\r\n const desiredDependentValue = desiredValueArray[i] || '';\r\n let actualDependentValue;\r\n\r\n switch (dependentProperty.attr('type')) {\r\n case 'checkbox':\r\n actualDependentValue = dependentProperty.is(':checked')\r\n ? 'true'\r\n : 'false';\r\n break;\r\n\r\n case 'radio':\r\n actualDependentValue = dependentProperty.filter(':checked').val() || '';\r\n break;\r\n\r\n default:\r\n actualDependentValue = dependentProperty.val() || '';\r\n break;\r\n }\r\n\r\n fieldIsRequired = fieldIsRequired && $.trim(desiredDependentValue).toLowerCase() === $.trim(actualDependentValue).toLocaleLowerCase();\r\n }\r\n\r\n let isValid = true;\r\n if (fieldIsRequired) {\r\n // Check if the required field passes validation\r\n isValid = $.validator.methods.required.call(this, value, element, parameters);\r\n }\r\n\r\n return isValid;\r\n });\r\n });\r\n\r\n //jQuery.validator.addMethod('date',\r\n // function (value, element, params) {\r\n // if (this.optional(element)) {\r\n // return true;\r\n // }\r\n\r\n // var ok = true;\r\n // try {\r\n // var test = new Date(Date.parse(value));\r\n // util.console.log(test);\r\n // }\r\n // catch (err) {\r\n // ok = false;\r\n // }\r\n // return ok;\r\n // });\r\n\r\n jQuery.validator.addMethod('daterange', function (value, element, parameters) {\r\n if (value == '' || value == undefined) {\r\n return true;\r\n }\r\n\r\n var minimumDateRequiredString = parameters['minimumdaterequired'];\r\n var maximumDateAllowedString = parameters['maximumdateallowed'];\r\n\r\n //get min date if exists\r\n var minDate = new Date(-8640000000000000);\r\n if (minimumDateRequiredString) {\r\n minDate = new Date(Date.parse(minimumDateRequiredString));\r\n }\r\n\r\n //get max date if exists\r\n var maxDate = new Date(8640000000000000);\r\n if (maximumDateAllowedString) {\r\n maxDate = new Date(Date.parse(maximumDateAllowedString));\r\n }\r\n\r\n var valueDate = new Date(Date.parse(value));\r\n\r\n return valueDate >= minDate && valueDate <= maxDate;\r\n });\r\n jQuery.validator.unobtrusive.adapters.add('daterange', ['minimumdaterequired', 'maximumdateallowed'], function (options) {\r\n options.rules['daterange'] = { minimumdaterequired: options.params['minimumdaterequired'], maximumdateallowed: options.params['maximumdateallowed'] };\r\n options.messages['daterange'] = options.message;\r\n });\r\n\r\n jQuery.validator.addMethod('requiredifdifferent', function (value, element, parameters) {\r\n var nameA = '[name=\"' + parameters['comparepropertya'] + '\"]';\r\n var nameB = '[name=\"' + parameters['comparepropertyb'] + '\"]';\r\n\r\n // get the actual value of the target controls - note - this probably needs to cater for more control types, e.g. radios\r\n var controlA = $(nameA, element.closest('form'));\r\n var controlB = $(nameB, element.closest('form'));\r\n\r\n //Assumption is that they are the same type of control\r\n var controlTypeA = controlA.attr('type');\r\n var controlTypeB = controlB.attr('type');\r\n\r\n var valA = '';\r\n if (controlTypeA === 'checkbox') {\r\n valA = controlA.attr('checked').toString();\r\n }\r\n else if (controlA.length > 1 && $(controlA[0]).attr('type') === 'radio') {\r\n valA = $(nameA + \":checked\", element.closest('form')).val();\r\n }\r\n else {\r\n valA = controlA.val();\r\n }\r\n\r\n var valueB = '';\r\n if (controlTypeB === 'checkbox') {\r\n valueB = controlB.attr('checked').toString();\r\n }\r\n else if (controlB.length > 1 && $(controlB[0]).attr('type') === 'radio') {\r\n valueB = $(nameB + \":checked\", element.closest('form')).val();\r\n }\r\n else {\r\n valueB = controlB.val();\r\n }\r\n\r\n valA = (valA === null ? '' : valA).toString();\r\n valueB = (valueB === null ? '' : valueB).toString();\r\n // if the condition is true, reuse the existing required field validator functionality\r\n if (valA.toLowerCase() !== valueB.toLowerCase()) {\r\n return $.validator.methods.required.call(this, value, element, parameters);\r\n }\r\n return true;\r\n });\r\n\r\n jQuery.validator.unobtrusive.adapters.add('requiredifdifferent', ['comparepropertya', 'comparepropertyb'], function (options) {\r\n options.rules['requiredifdifferent'] = { comparepropertya: options.params['comparepropertya'], comparepropertyb: options.params['comparepropertyb'] };\r\n options.messages['requiredifdifferent'] = options.message;\r\n });\r\n\r\n jQuery.validator.addMethod('requiredtrue', function (value, element, params) {\r\n return value === true || value === 'true';\r\n }, '');\r\n\r\n jQuery.validator.unobtrusive.adapters.add('requiredtrue', function (options) {\r\n options.rules['requiredtrue'] = {};\r\n options.messages['requiredtrue'] = options.message;\r\n });\r\n\r\n jQuery.validator.addMethod('requiredatleastone', function (value, element, parameters) {\r\n //get the name of the list of elements\r\n var name = '[name^=\"' + element.name + '\"]:checked';\r\n var controls = $(name, element.closest('form'));\r\n return controls.length > 0;\r\n });\r\n\r\n jQuery.validator.unobtrusive.adapters.add('requiredatleastone', function (options) {\r\n options.rules['requiredatleastone'] = {};\r\n options.messages['requiredatleastone'] = options.message;\r\n });\r\n\r\n jQuery.validator.addMethod('requirednotnull', function (value, element, params) {\r\n return !(value === null);\r\n }, '');\r\n\r\n jQuery.validator.addMethod('requirednotnull', function (value, element, parameters) {\r\n var noParams = true;\r\n\r\n if (typeof parameters['dependentproperty'] !== 'undefined') {\r\n noParams = parameters['dependentproperty'] === '';\r\n }\r\n\r\n if (noParams) {\r\n return value !== null;\r\n } else {\r\n var name = \"[name='\" + parameters['dependentproperty'] + \"']\";\r\n var control = $(name, element.closest('form'));\r\n var controltype = control.attr('type');\r\n\r\n var actualvalue = '';\r\n if (controltype === 'checkbox') {\r\n if (control.is(':checked')) {\r\n actualvalue = 'True';\r\n } else {\r\n actualvalue = 'False';\r\n }\r\n }\r\n else if (control.length > 1 && $(control[0]).attr('type') === 'radio') {\r\n return $(name + \":checked\", element.closest('form')).length === 1;\r\n }\r\n else {\r\n actualvalue = control.val();\r\n }\r\n\r\n if (actualvalue === '') {\r\n return value === null;\r\n }\r\n }\r\n return true;\r\n });\r\n //}, \"\");\r\n\r\n jQuery.validator.unobtrusive.adapters.add('requirednotnull', ['dependentproperty'], function (options) {\r\n options.rules['requirednotnull'] = { dependentproperty: options.params['dependentproperty'] };\r\n options.messages['requirednotnull'] = options.message;\r\n });\r\n\r\n jQuery.validator.unobtrusive.adapters.add('requirednotnull', ['dependentproperty'], function (options) {\r\n options.rules['requirednotnull'] = { dependentproperty: options.params['dependentproperty'] };\r\n options.messages['requirednotnull'] = options.message;\r\n });\r\n\r\n // extend jquery range validator to work for required checkboxes\r\n var defaultRangeValidator = $.validator.methods.range;\r\n $.validator.methods.range = function (value, element, param) {\r\n if (element.type === 'checkbox') {\r\n // if it's a checkbox return true if it is checked\r\n return element.checked;\r\n } else {\r\n // otherwise run the default validation function\r\n return defaultRangeValidator.call(this, value, element, param);\r\n }\r\n };\r\n\r\n $.validator.unobtrusive.adapters.add('requirelist', ['minselections', 'maxselections'], function (options) {\r\n options.rules['requirelist'] = options.params;\r\n options.messages['requirelist'] = options.message;\r\n });\r\n\r\n $.validator.addMethod('requirelist', function (value, element, parameters) {\r\n var minNumber = parameters.minselections;\r\n var maxNumber = parameters.maxselections;\r\n\r\n var listName = element.name; // 'name' for the list of selected options\r\n var selector = `[name^=\"${listName}\"]:checked`; // jQuery selector for checked items\r\n var controls = $(selector, element.closest('form')); // all checked items in this form\r\n\r\n // if maxNumber != \"\", null, undefined, etc.\r\n if (maxNumber) {\r\n return controls.length >= minNumber && controls.length <= maxNumber;\r\n }\r\n else {\r\n return controls.length >= minNumber;\r\n }\r\n });\r\n\r\n $.validator.unobtrusive.adapters.add('requirednotequalto', ['comparevalue'], function (options) {\r\n options.rules['requirednotequalto'] = options.params;\r\n options.messages['requirednotequalto'] = options.message;\r\n });\r\n\r\n $.validator.addMethod('requirednotequalto', function (value, element, parameters) {\r\n if (value == '') {\r\n return true;\r\n }\r\n return value != parameters.comparevalue;\r\n });\r\n\r\n jQuery.validator.addMethod(\"datemustbebeforeotherdate\", function (value, element, params) {\r\n const acceptNull = params[\"acceptnull\"];\r\n\r\n const name = \"[name='\" + params[\"propertyname\"] + \"']\";\r\n const control = $(name, element.closest('form'));\r\n\r\n if ((value === \"\" || value == undefined) && acceptNull) {\r\n return true;\r\n } else if ((value === \"\" || value == undefined) && !acceptNull) {\r\n return false;\r\n }\r\n\r\n // if second date is empty, return true because there is nothing to compare to\r\n // requirement of that field is handled by a different validator\r\n if (control.val() === undefined || control.val() === \"\") return true;\r\n\r\n const propertyDateYear = control.val().substring(3, 7);\r\n const propertyDateMonth = control.val().substring(0, 2);\r\n const propertyDate = new Date(propertyDateYear, propertyDateMonth - 1);\r\n\r\n const valueDateYear = value.substring(3, 7);\r\n const valueDateMonth = value.substring(0, 2);\r\n const valueDate = new Date(valueDateYear, valueDateMonth - 1);\r\n\r\n //check values\r\n return valueDate < propertyDate;\r\n }, \"\");\r\n\r\n jQuery.validator.unobtrusive.adapters.add(\"datemustbebeforeotherdate\", [\"propertyname\", \"acceptnull\"], function (options) {\r\n options.rules[\"datemustbebeforeotherdate\"] = options.params;\r\n options.messages[\"datemustbebeforeotherdate\"] = options.message;\r\n });\r\n\r\n //This is a new custom validator that let's you tell unobtrusive whether a field is valid or invalid based on your custom js logic. Typically used when valid is only true after an ajax request.\r\n $.validator.unobtrusive.adapters.addBool(\"fieldisvalid\");\r\n\r\n $.validator.addMethod(\"fieldisvalid\", function (value, element) {\r\n return this.optional(element) || $(element)[0].dataset.fieldisvalid === \"true\";\r\n });\r\n\r\n jQuery.validator.addMethod('stringlengthignorecharacters', function (value, element, parameters) {\r\n\r\n var minCount = parseInt(parameters['mincount'],10);\r\n var maxCount = parseInt(parameters['maxcount'],10);\r\n var excludedCharacters = parameters['excludedcharacters'].split(\",\");\r\n var theString = value;\r\n\r\n for (var i = 0; i < excludedCharacters.length; i++) {\r\n theString = theString.replaceAll(excludedCharacters[i], \"\");\r\n }\r\n\r\n var length = theString.length;\r\n\r\n if (minCount && maxCount) {\r\n return minCount <= length <= maxCount;\r\n }\r\n\r\n if (minCount) {\r\n return minCount <= length;\r\n }\r\n\r\n if (maxCount) {\r\n return length <= maxCount;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n jQuery.validator.unobtrusive.adapters.add('stringlengthignorecharacters', ['mincount', 'maxcount', 'excludedcharacters'], function (options) {\r\n options.rules['stringlengthignorecharacters'] = { mincount: options.params['mincount'], maxcount: options.params['maxcount'], excludedcharacters: options.params['excludedcharacters']};\r\n options.messages['stringlengthignorecharacters'] = options.message;\r\n });\r\n\r\n //helper function for the new fieldisvalid ubobtrusive validation.\r\n $.fn.extend({\r\n toggleFieldIsValid: function (value) {\r\n this[0].dataset.fieldisvalid = value;\r\n $.validator.unobtrusive.parse($(this).closest('form'));\r\n $(this).closest('form').data('validator').element('#' + $(this).attr('id'));\r\n $(this).valid();\r\n }\r\n });\r\n}(jQuery));","//Javascript for the WECAN Applicant Dashboard functionality\r\napp.ApplicantDashboard = (\r\n function () {\r\n var dashboard = {\r\n //Index Page\r\n Index: function () {\r\n $(\"#resetFiltersButton\").on(\"click\",\r\n function () {\r\n $(\"#SelectedDistrictId\").val(null);\r\n $(\"#SelectedTimespan\").val(null);\r\n $(\"#SearchText\").val(null);\r\n app.page.components[\"MyApplicationsGrid\"][0].refreshGrid();\r\n });\r\n\r\n $(document).on(\"component-bind-view-mode-complete-DashboardPositions component-save-complete-DashboardPositions\",\r\n function (e, component) {\r\n //attach the edit button event listener\r\n $('[data-component-role=\"EditButton\"]', component.el).off('click').on('click', $.proxy(component.startEditMode, component));\r\n });\r\n\r\n $(document).on(\"component-bind-view-mode-complete-MyApplicationsGrid\",\r\n function () {\r\n\r\n // once grid is bound, go through rows and remove the\r\n // Withdraw button if the application has not been submitted\r\n var table = $(this).find(\"[data-component-type='MyApplicationsGrid']\").find(\"table\");\r\n var trs = table.find(\"tr\").not(\"thead tr\");\r\n\r\n trs.each(function () {\r\n var canWithdraw = $(this).find(\"input[name='CanWithdrawString']\").first().val().trim() === \"True\";\r\n var colspan = 0;\r\n\r\n var canDelete = $(this).find(\"input[name='CanDeleteString']\").first().val().trim() === \"True\";\r\n\r\n if (!canDelete) {\r\n colspan++;\r\n var columnData = $(this).find(\"td[data-label='DeleteLinkButton']\");\r\n var previousColumnData = $(columnData).prev();\r\n $(previousColumnData).attr('colspan', colspan);\r\n $(columnData).remove();\r\n\r\n }\r\n\r\n if (!canWithdraw) {\r\n colspan++;\r\n var columnData = $(this).find(\"td[data-label='WithdrawLinkButton']\");\r\n var previousColumnData = $(columnData).prev();\r\n $(previousColumnData).attr('colspan', colspan);\r\n $(columnData).remove();\r\n }\r\n\r\n if (!canWithdraw && !canDelete) {\r\n var columnData = $(this).find(\"td[data-label='ApplicationLinkButton']\");\r\n $(columnData).attr('colspan', 2);\r\n } \r\n\r\n // Check each td for the \"Vacancy Closed\" text\r\n if ($(this).text().trim().includes(\"Vacancy Closed\")) {\r\n var html = $(this).html();\r\n var updatedHtml = html.replace(\"Vacancy Closed\", 'Vacancy Closed');\r\n $(this).html(updatedHtml);\r\n }\r\n\r\n });\r\n\r\n $(\".withdrawButton\").on(\"click\",\r\n function () {\r\n // have to set these in js due to limitations of the Grid\r\n $(this).attr(\"data-toggle\", \"modal\");\r\n $(this).attr(\"data-target\", \"#confirmWithdraw\");\r\n\r\n var appId = $(this).parent().siblings(\"[data-label='ApplicationId']\").first().children().first().val();\r\n $(\"#confirmWithdrawButton\").attr(\"data-application-id\", appId);\r\n }\r\n );\r\n\r\n $(\".deleteButton\").on(\"click\",\r\n function () {\r\n // have to set these in js due to limitations of the Grid\r\n $(this).attr(\"data-toggle\", \"modal\");\r\n $(this).attr(\"data-target\", \"#confirmDelete\");\r\n\r\n var appId = $(this).parent().siblings(\"[data-label='ApplicationId']\").first().children().first().val();\r\n $(\"#confirmDeleteButton\").attr(\"data-application-id\", appId);\r\n }\r\n );\r\n });\r\n $(\"#confirmWithdrawButton\").on(\"click\",\r\n function () {\r\n var id = $(this).attr(\"data-application-id\");\r\n var form = $(\"#__AjaxAntiForgeryForm\");\r\n var token = $('input[name=\"__RequestVerificationToken\"]', form).val();\r\n $.ajax({\r\n type: \"POST\",\r\n data: { ApplicationId: id, __RequestVerificationToken: token },\r\n url: \"/Application/Withdraw\",\r\n success: function (data) {\r\n if (data) { //close modal\r\n $(\"#confirmWithdraw\").modal(\"hide\");\r\n //filter grid again for new html\r\n app.page.components[\"MyApplicationsGrid\"][0].refreshGrid();\r\n toastr.success(\"You have successfully withdrawn your application.\");\r\n } else {\r\n toastr.error(\r\n \"Something went wrong, please try again. If the problem persist please contact support.\");\r\n }\r\n },\r\n error: function () {\r\n toastr.error(\"Something went wrong.\");\r\n }\r\n });\r\n }\r\n );\r\n $(\"#confirmDeleteButton\").on(\"click\",\r\n function () {\r\n var id = $(this).attr(\"data-application-id\");\r\n var form = $(\"#__AjaxAntiForgeryForm\");\r\n var token = $('input[name=\"__RequestVerificationToken\"]', form).val();\r\n $.ajax({\r\n type: \"POST\",\r\n data: { ApplicationId: id, __RequestVerificationToken: token },\r\n url: \"/Application/Delete\",\r\n success: function (data) {\r\n if (data) { //close modal\r\n $(\"#confirmDelete\").modal(\"hide\");\r\n //filter grid again for new html\r\n app.page.components[\"MyApplicationsGrid\"][0].refreshGrid();\r\n toastr.success(\"You have successfully deleted your application.\");\r\n } else {\r\n toastr.error(\r\n \"Something went wrong, please try again. If the problem persist please contact support.\");\r\n }\r\n },\r\n error: function () {\r\n toastr.error(\"Something went wrong.\");\r\n }\r\n });\r\n }\r\n );\r\n }\r\n };\r\n return dashboard;\r\n }()\r\n);","//Javascript for WECAN applicant registration functionality\r\napp.ApplicantRegistration = (\r\n function () {\r\n var register = {\r\n // RegisterStep1 page\r\n RegisterStep1: function () {\r\n var isRequestAlive = false;\r\n $(document).on(\"submit\",\r\n \"form\",\r\n function (e) {\r\n if (isRequestAlive) {\r\n e.preventDefault();\r\n } else {\r\n isRequestAlive = true;\r\n }\r\n });\r\n },\r\n\r\n // RegisterStep2 page\r\n RegisterStep2: function () {\r\n $(\"#CurrentlyWorkForDistrict\").change(function () {\r\n util.console.log($(\"#CurrentlyWorkForDistrict\"));\r\n if (this.checked) {\r\n $(\"#CurrentDistrict\").attr(\"hidden\", false);\r\n $(\"#CurrentDistrict\").show();\r\n } else {\r\n $(\"#CurrentDistrict\").attr(\"hidden\", true);\r\n $(\"#CurrentDistrict\").hide();\r\n }\r\n });\r\n // check the key every 30 minutes\r\n setInterval(() => app.ApplicantRegistration.CheckRegistrationKey(), 1800000);\r\n\r\n // close logout modal listener\r\n $(\"#LogoutModal\").on(\"hidden.bs.modal\", function () {\r\n $(\"#logoutForm\").submit();\r\n });\r\n app.ApplicantRegistration.CesaMapInit();\r\n\r\n app.UserProfile.DistrictEmailValidationInit();\r\n },\r\n CesaMapInit: function (showLinks) {\r\n var currentlyFocusedCesa;\r\n\r\n $(\".cesa-group-item\").on(\"click keyup\", function () {\r\n // check if the user pressed spacebar or enter\r\n // if they don't, then don't show the modal\r\n if (event.code !== \"Space\" && event.code !== \"Enter\" && event.type === \"keyup\") {\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n // set the currently focused cesa so that we can set the\r\n // focus to the correct element when the modal is closed\r\n currentlyFocusedCesa = $(this).attr(\"id\");\r\n\r\n var cesaUniqueId = {\r\n \"cesaUniqueId\": $(this).data(\"cesa-unique-id\"),\r\n \"showLinks\": showLinks\r\n };\r\n\r\n var url = \"/Account/ViewDistrictsForCesa\";\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: cesaUniqueId,\r\n success: function (data) {\r\n $(\"#districtList\").html(data);\r\n $(\"#districtList\").modal(\"show\");\r\n },\r\n error: function (data) {\r\n }\r\n });\r\n });\r\n\r\n // handler for closing the cesa districts modal\r\n $(\"#districtList\").on(\"hidden.bs.modal\",\r\n function () {\r\n // focus the currently focused cesa on modal close\r\n // this is to allow keyboard navigation through the cesa map svg\r\n $(\"#\" + currentlyFocusedCesa).focus();\r\n });\r\n },\r\n // RegisterStep3 page\r\n RegisterStep3: function () {\r\n // check the key every 30 minutes\r\n setInterval(() => app.ApplicantRegistration.CheckRegistrationKey(), 1800000);\r\n\r\n // close logout modal listener\r\n $(document).on(\"hidden.bs.modal\", function () {\r\n $(\"#logoutForm\").submit();\r\n });\r\n },\r\n\r\n RegisterStep4: function () {\r\n app.UserProfile.AccountRecoverySettingsInit();\r\n\r\n // check the key every 30 minutes\r\n setInterval(() => app.ApplicantRegistration.CheckRegistrationKey(), 1800000);\r\n\r\n // close logout modal listener\r\n $(document).on(\"hidden.bs.modal\", function () {\r\n $(\"#logoutForm\").submit();\r\n });\r\n },\r\n\r\n CheckRegistrationKey: function () {\r\n // call controller method to check if the token is still valid\r\n // if yes, don't do anything\r\n // if no, log the user out and redirect to a \"logged out\" page\r\n var key = $(\"#Key\").val();\r\n\r\n $.post(\"/Account/IsTokenValid\", { \"key\": key }, function (data) {\r\n if (data === \"False\") {\r\n $(\"#LogoutModal\").modal(\"show\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n return register;\r\n }()\r\n);","//Javascript for the WECAN Employer Area Signup functionality\r\napp.UserProfile = (\r\n function () {\r\n var userProfile = {\r\n Init: function () {\r\n //initialize the map when the edit card is shown.\r\n $(document).on(\"component-bind-edit-mode-complete-ApplicantUserDetails\", function () {\r\n app.ApplicantRegistration.CesaMapInit();\r\n app.UserProfile.DistrictCheck();\r\n \r\n });\r\n //initialize the district email validation\r\n app.UserProfile.DistrictEmailValidationInit();\r\n\r\n $(document).on(\"component-bind-edit-mode-complete-RecoverySettings\", function () {\r\n app.UserProfile.AccountRecoverySettingsInit();\r\n });\r\n },\r\n DistrictCheck: function () {\r\n var districtEmailValue = $(\"[name='DistrictEmail']\").val();\r\n var districtIdValue = $(\"[name='DistrictId']\").val();\r\n if (districtEmailValue && !districtIdValue) {\r\n app.UserProfile.CheckForDistrictByEmail();\r\n }\r\n if ($(\"[data-role='currently-work-for-district']\").is(\":checked\")) {\r\n $(\"[name='DistrictEmail']\").attr(\"disabled\", false);\r\n }\r\n },\r\n DistrictEmailValidationInit: function () {\r\n $(document).on(\"change\", \"[data-role='currently-work-for-district']\", function () {\r\n if (this.checked) {\r\n $(\"[name='DistrictEmail']\").attr(\"disabled\", false);\r\n } else {\r\n $(\"[name='DistrictEmail']\").attr(\"disabled\", true);\r\n //clear the district fields if they uncheck the checkbox\r\n $(\"#CurrentDistrict\").find(\"[data-role='validate-district-email']\").val(\"\");\r\n $(\"#CurrentDistrict\").find('[data-role=\"district-id\"]').val(\"\");\r\n }\r\n });\r\n $(document).on(\"focusout\", \"[data-role='validate-district-email']\", function () {\r\n app.UserProfile.CheckForDistrictByEmail();\r\n });\r\n },\r\n CheckForDistrictByEmail: function () {\r\n var districtContainer = $(\"#CurrentDistrict\");\r\n //show loading and clear district fields to be populated after successful lookup.\r\n $(\"img\", districtContainer).show();\r\n $('[data-role=\"district-id\"]', districtContainer).val(\"\");\r\n $('[data-role=\"validate-district-success\"]', districtContainer).html(\"\");\r\n //find district\r\n var emailTextbox = $(\"[data-role='validate-district-email']\");\r\n $.post($(emailTextbox).data(\"url\"), { email = $(emailTextbox).val() })\r\n .done(function (data) {\r\n if (data.IsSuccess) {\r\n //success! Set both the text to display district name and set the hidden input with district Id.\r\n $(emailTextbox).toggleFieldIsValid(true);\r\n ////We have district(s)\r\n if (!data.HasMultipleOptions) {\r\n $('[data-role=\"district-id\"]', districtContainer).val(data.DistrictId);\r\n }\r\n\r\n $('[data-role=\"multiple-district-bool\"]', districtContainer).val(data.HasMultipleOptions);\r\n $('[data-role=\"validate-district-success\"]', districtContainer).html(data.Message);\r\n if (data.HasMultipleOptions && $('[data-role=\"district-id\"]')) {\r\n $(\"#SelectedDistrictId\").val($('[data-role=\"district-id\"]').val());\r\n }\r\n\r\n }\r\n else {\r\n //error! Notify the user.\r\n $(emailTextbox).attr(\"data-val-fieldisvalid\", data.Message);\r\n $(emailTextbox).toggleFieldIsValid(false);\r\n }\r\n })\r\n .fail(function () {\r\n //the request failed, tell the user.\r\n toastr.error(\"There was an error looking up your district. Please try entering your district email again.\");\r\n $(emailTextbox).toggleFieldIsValid(false);\r\n })\r\n .always(function () {\r\n //turn off loading\r\n $(\"img\", districtContainer).hide();\r\n var form = $(emailTextbox).closest('form')\r\n .removeData(\"validator\") /* added by the raw jquery.validate plugin */\r\n .removeData(\"unobtrusiveValidation\"); /* added by the jquery unobtrusive plugin*/\r\n\r\n $.validator.unobtrusive.parse(form);\r\n });\r\n },\r\n //Change Password Page\r\n ChangePassword: function () {\r\n $(\"#formSubmitButton\").on(\"click\", function () {\r\n $(\"#confirmModal\").modal(\"hide\");\r\n $(\"#changeForm\").submit();\r\n });\r\n },\r\n //Change Email Page\r\n ChangeEmail: function () {\r\n $(\"#formSubmitButton\").on(\"click\", function () {\r\n $(\"#confirmModal\").modal(\"hide\");\r\n $(\"#changeForm\").submit();\r\n });\r\n },\r\n AccountRecoverySettingsInit: function () {\r\n $(document).on(\"click\", '[data-role=\"security-question-container\"] button:not(.input-group-text)', function () {\r\n //show textbox to enter new answer\r\n $(this).closest('[data-role=\"security-question-container\"]').find('input[type=\"password\"]').show();\r\n $(this).closest('[data-role=\"security-question-container\"]').find('[data-role=\"password-eye-prepend\"]').show();\r\n $(this).hide();\r\n });\r\n\r\n $(document).on(\"change\", '[data-role=\"security-question-container\"] select', function () {\r\n //show textbox to enter new answer\r\n $(this).closest('[data-role=\"security-question-container\"]').find('input[type=\"password\"]').show();\r\n $(this).closest('[data-role=\"security-question-container\"]').find(\"button\").hide();\r\n //Adding this line becuae showPassword button is disapearing with current logic, but when I shoed the button there was\r\n //a whole other button \"Edit Answer\". \r\n $(this).closest('[data-role=\"security-question-container\"]').find('[data-click=\"showPassword\"]').show();\r\n $(this).closest('[data-role=\"security-question-container\"]').find('[data-role=\"password-eye-prepend\"]').show();\r\n });\r\n\r\n $(document).on(\"change\", \"[data-original-email]\", function () {\r\n //show confirm textbox if different than original\r\n if ($(this).data(\"original-email\") != $(this).val()) {\r\n //show confirm\r\n $(this).closest(\"form\").find(\"[data-confirm-email]\").show();\r\n }\r\n else {\r\n //hide confirm\r\n $(this).closest(\"form\").find(\"[data-confirm-email]\").hide();\r\n $(this).closest(\"form\").find(\"[data-confirm-email] input\").val(\"\");\r\n }\r\n });\r\n }\r\n };\r\n\r\n return userProfile;\r\n }()\r\n);","//Javascript for the WECAN Admin Report\r\napp.DistrictBilling = (\r\n function () {\r\n var districtBilling = {\r\n DistrictStatusUpdate: function () {\r\n $(document).on(\"change\", \"input[name*='DistrictStatusCheckbox']\",\r\n function (e) {\r\n var id = $(e.target).attr(\"name\").split(\".\")[0].replace(\"[\", \"\").replace(\"]\", \"\");\r\n var active = $(e.target).prop(\"checked\");\r\n\r\n // now we have the id, so call the function to update the district's status\r\n var form = $(\"#__AjaxAntiForgeryForm\");\r\n var token = $('input[name=\"__RequestVerificationToken\"]', form).val();\r\n $.ajax({\r\n type: \"POST\",\r\n data: { id: id, active: active, __RequestVerificationToken: token },\r\n url: \"/Admin/DistrictBilling/UpdateDistrictStatus\",\r\n success: function (data) {\r\n if (data) {\r\n toastr.success(\"You have successfully updated the district status for \" + data.districtName + \" to \" + data.districtStatus + \".\");\r\n } else {\r\n toastr.error(\r\n \"Something went wrong, please try again. If the problem persist please contact support.\");\r\n }\r\n },\r\n error: function () {\r\n toastr.error(\"Something went wrong.\");\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n return districtBilling;\r\n }()\r\n);","app.PotentialDistrictNotes = (\r\n function () {\r\n var districtNotes = {\r\n\r\n Init: function () {\r\n app.PotentialDistrictNotes.refreshRecords();\r\n $(\"#addPotentialDistrictNote\").click(function () {\r\n app.PotentialDistrictNotes.showModal(null);\r\n });\r\n $(document).on(\"component-loading-complete\",\r\n function (e, component) {\r\n app.PotentialDistrictNotes.ComponentLoadingComplete();\r\n });\r\n },\r\n\r\n ComponentLoadingComplete: function () {\r\n $(\".btn-edit\").click(function () {\r\n var rowId = $(this).closest('tr').find(':input').val();\r\n app.PotentialDistrictNotes.showModal(rowId);\r\n });\r\n },\r\n\r\n refreshRecords: function () {\r\n app.page.components[\"PotentialDistrictNoteGrid\"][0].refreshGrid();\r\n },\r\n\r\n showModal: function (rowId) {\r\n var url = \"/Admin/District/EditPotentialDistrictNote\";\r\n var postData = { id: rowId };\r\n $.ajax({\r\n type: \"GET\",\r\n url: url,\r\n data: postData,\r\n success: function (data) {\r\n app.PotentialDistrictNotes.handleAjaxSuccess(data);\r\n },\r\n error: function (data) {\r\n toastr.error(\"There was an error retrieving that note. Please try again.\");\r\n }\r\n });\r\n },\r\n\r\n\r\n handleAjaxSuccess: function (data) {\r\n $(\"#editModal\").find(\".modal-content\").html(data);\r\n $(\"#btnSubmitEditModal\").click(function () { app.PotentialDistrictNotes.createOrEditNote(event) });\r\n app.input.initTextAreaWithLimit(document);\r\n\r\n $(\"#btnDeletePotentialDistrictNote\").click(function () {\r\n event.preventDefault();\r\n $(\"#confirmDeleteModal\").modal('show');\r\n });\r\n $(\"#editModal\").modal('show');\r\n app.input.initDatePicker();\r\n\r\n app.PotentialDistrictNotes.refreshRecords();\r\n },\r\n\r\n cancelDelete: function () {\r\n $(\"#confirmDeleteModal\").modal('hide');\r\n },\r\n\r\n confirmDelete: function () {\r\n var rowId = $(\".editItemId\").val();\r\n var form = $('#edit-form');\r\n var url = \"/Admin/District/DeletePotentialDistrictNote\";\r\n var token = $('input[name=\"__RequestVerificationToken\"]', form).val();\r\n\r\n var postData = { __RequestVerificationToken: token, id: rowId };\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: postData,\r\n success: function (data) {\r\n toastr.success(\"Deletion complete.\");\r\n $(\"#confirmDeleteModal\").modal('hide');\r\n $(\"#editModal\").modal('hide');\r\n app.PotentialDistrictNotes.refreshRecords();\r\n },\r\n error: function (data) {\r\n toastr.error(\"There was an error deleting the potential district note. Please try again.\");\r\n }\r\n });\r\n },\r\n\r\n createOrEditNote: function (e) {\r\n\r\n\r\n var form = $('#edit-form');\r\n var formData = form.serialize();\r\n e.preventDefault();\r\n var url = \"/District/EditPotentialDistrictNote\";\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: formData,\r\n success: function (data) {\r\n if (data === 'success') {\r\n toastr.success(\"Save complete.\");\r\n $(\"#editModal\").modal('hide');\r\n app.PotentialDistrictNotes.refreshRecords();\r\n } else {\r\n toastr.error(\"An error occurred while saving the note. Please check your entries and try again.\");\r\n app.PotentialDistrictNotes.handleAjaxSuccess(data);\r\n }\r\n },\r\n error: function (data) {\r\n toastr.error(\"There was an error saving the note. Please try again.\");\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n return districtNotes;\r\n }()\r\n);","app.Application = (\r\n function () {\r\n var application = {\r\n Initialize: function () {\r\n app.Application.Index();\r\n app.Application.EvaluateAndHireCandidate();\r\n app.Application.AppDataCopy();\r\n app.RatingCommentHistoryModal.Init();\r\n app.RememberedCandidates.CandidateInfo();\r\n app.Document.Application();\r\n },\r\n Index: function () {\r\n app.RememberedCandidates.Index();\r\n app.Application.InitCriminalBackgroundFunctionality();\r\n $(document).on(\"component-bind-edit-mode-complete\",\r\n function () {\r\n app.Application.InitCriminalBackgroundFunctionality();\r\n app.Application.initTextAreaWithLimit();\r\n\r\n });\r\n\r\n $(document).on(\"component-bind-edit-mode-complete-Documents\",\r\n function () {\r\n $(\"[data-button-role='clear-documents']\").on(\"click\",\r\n function () {\r\n $(\"[data-button-role='document']\").prop(\"checked\", false);\r\n });\r\n });\r\n\r\n $(document).on(\"component-remove-complete-QuestionSetQuestion\",\r\n function (e, i) {\r\n // when a question answer is removed, refresh the questions component\r\n var appQuestionAnswerId = i.id;\r\n\r\n var data = {\r\n \"id\": appQuestionAnswerId\r\n };\r\n\r\n var url = \"/Application/QuestionAnswerHasDuplicates\";\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: data,\r\n success: function (d) {\r\n if (!d.hasDuplicates) {\r\n //only remove alerts for duplicates if there aren't any\r\n var questionId = d.questionId;\r\n $(\"[data-questionid='\" + questionId + \"']\").each(function () {\r\n $(this).attr(\"hidden\", true);\r\n });\r\n\r\n }\r\n },\r\n error: function (d) {\r\n toastr.error(\"Something went wrong. Please refresh the page and try again.\");\r\n }\r\n });\r\n });\r\n\r\n $(document).on(\"component-save-complete component-bind-edit-mode-complete document-selected component-remove-complete\",\r\n function () {\r\n //Refresh the checklist\r\n var appId = {\r\n \"applicationId\": $(\"#ApplicationId\").val()\r\n };\r\n var url = \"/Application/ChecklistViewForApplication\";\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: appId,\r\n success: function (data) {\r\n $(\"#theChecklistHtml\").html(data);\r\n\r\n if ($('#IsComplete').val() === 'True') {\r\n //Enable apply button\r\n $('#applyButton').prop(\"disabled\", false);\r\n $('#applyButton').removeClass(\"disabled\");\r\n $('#submitNotice').hide();\r\n }\r\n else {\r\n //disable apply button\r\n $('#applyButton').prop(\"disabled\", true);\r\n $('#applyButton').addClass(\"disabled\");\r\n $('#submitNotice').show();\r\n\r\n }\r\n },\r\n error: function (data) {\r\n }\r\n });\r\n });\r\n\r\n $(\"[data-question-set-id]\").on(\"click\", function () {\r\n replaceSpinnerWithContent(\"#answerLookupResultsDiv\", \"\")\r\n\r\n var data = { questionSetId: $(this).data(\"question-set-id\"), TargetApplicationId: $(\"#Id\").val() };\r\n //AJAX Call\r\n\r\n replaceContentWithSpinner(\"#applicationSelectionDiv\");\r\n $.post(\"/Application/GetApplicationsForQuestionSetId\", data, function (html) {\r\n //put html in the div\r\n replaceSpinnerWithContent(\"#applicationSelectionDiv\", html);\r\n //reassign on change fucnitonality to dropdown\r\n assignOnChangeToAppDropdown();\r\n\r\n })\r\n .fail(function () {\r\n toastr.error(\"Something went wrong, please try again.\");\r\n });\r\n\r\n $('#questionCopyModal').modal();\r\n });\r\n\r\n function assignOnChangeToAppDropdown() {\r\n $(\"[name='SelectedAnswersApplicationId']\").on(\"change\", function () {\r\n\r\n if ($(this).val() !== null && $(this).val() != 'undefined' && $(this).val() != '') {\r\n\r\n var data = {\r\n SelectedApp: $(this).val(),\r\n TargetApplicationId: $(\"#Id\").val(),\r\n QuestionSetId: $(this).data(\"question-set-id\")\r\n };\r\n\r\n replaceContentWithSpinner(\"#answerLookupResultsDiv\");\r\n\r\n $.post(\"/Application/GetAnswersForApplication\", data, function (html) {\r\n\r\n //put html in the div\r\n replaceSpinnerWithContent(\"#answerLookupResultsDiv\", html);\r\n\r\n //assign copy button functinality when view drops\r\n $(\"[data-copy-answers-button]\").on(\"click\", function () {\r\n\r\n if (confirm(\"Copying questions will reload this page. Please make sure to save any unsaved work before proceeding. Click \\\"Ok\\\" to conitnue. \") == true) {\r\n var data = $(this).closest(\"form\").serialize();\r\n\r\n replaceContentWithSpinner(\"#answerLookupResultsDiv\");\r\n\r\n $.post(\"/Application/CopyAnswersToApplication\", data, function (data) {\r\n\r\n //refresh component\r\n location.reload();\r\n\r\n toastr.success(\"Successfully copied questions to this applicaiton.\");\r\n })\r\n .fail(function () {\r\n toastr.error(\"Something went wrong, please try again.\");\r\n });\r\n }\r\n\r\n });\r\n\r\n })\r\n .fail(function () {\r\n toastr.error(\"Something went wrong, please try again.\");\r\n });\r\n }\r\n else {\r\n replaceSpinnerWithContent(\"#answerLookupResultsDiv\", \"\")\r\n }\r\n });\r\n }\r\n\r\n function replaceContentWithSpinner(id) {\r\n $(id).html(null);\r\n $(id).addClass(\"loading-placeholder\");\r\n }\r\n\r\n function replaceSpinnerWithContent(id, html) {\r\n $(id).removeClass(\"loading-placeholder\");\r\n $(id).html(html);\r\n }\r\n\r\n },\r\n EvaluateAndHireCandidate: function () {\r\n $(\"form\").on(\"submit\", function () {\r\n $(this).find(\":submit\").prop(\"disabled\", true);\r\n });\r\n },\r\n InitCriminalBackgroundFunctionality: function () {\r\n showHideCriminalBackgroundDiv();\r\n //Assign functionality to show/hide criminal charges stuff\r\n $(\"input[name='HasPleadGuilty'], input[name='HasPendingCharges']\").on(\"change\",\r\n function () {\r\n showHideCriminalBackgroundDiv();\r\n });\r\n\r\n function showHideCriminalBackgroundDiv() {\r\n if ($(\"input[name='HasPendingCharges']:checked\").val() === \"True\" ||\r\n $(\"input[name='HasPleadGuilty']:checked\").val() === \"True\") {\r\n $(\"#ExplanationDiv\").show();\r\n } else {\r\n $(\"#ExplanationDiv\").hide();\r\n }\r\n }\r\n },\r\n initTextAreaWithLimit: function (editComponent) {\r\n //This was modeled after the app.input.js string length character counter named the same. It was customized to handle the excluded characters\r\n //From the custom string length attribute\r\n //setup the UI by adding HTML below element.\r\n $(\"textarea[data-val-stringlengthignorecharacters-maxcount]\", editComponent).each(function () {\r\n var uniqueId = app.Page.prototype.getGuid();\r\n $(this).data('char-count-target', uniqueId);\r\n $(this).after('
Character Count: 0
');\r\n });\r\n\r\n $(\"textarea[data-val-stringlengthignorecharacters-maxcount]\", editComponent).on(\"keyup change input paste\",\r\n function (ev) {\r\n var $tar = $(ev.target);\r\n\r\n //grab data-charactercount-limit. Default to 500 if it is not defined\r\n var charactersAllowed = parseInt($tar.data(\"val-stringlengthignorecharacters-maxcount\") || 500, 10);\r\n var theString = this.value;\r\n var originalCount = theString.length;\r\n //Get the excluded characters\r\n var excludedCharacters = $tar.data(\"val-stringlengthignorecharacters-excludedcharacters\").split(\",\");\r\n\r\n //clean the characters out of the string\r\n for (var i = 0; i < excludedCharacters.length; i++) {\r\n theString = theString.replaceAll(excludedCharacters[i], \"\");\r\n\r\n }\r\n var characterCount = theString.length;\r\n\r\n var difference = originalCount - characterCount;\r\n\r\n if (characterCount > charactersAllowed) {\r\n $(this).val($(this).val().substring(0, charactersAllowed + difference));\r\n $('#' + $tar.data(\"char-count-target\")).text(\"0 characters left\");\r\n } else {\r\n $('#' + $tar.data(\"char-count-target\"))\r\n .text((charactersAllowed - characterCount) + \" characters left\");\r\n }\r\n }).keyup();\r\n },\r\n AppDataCopy: function () {\r\n var loadingHtml =\r\n '
' +\r\n 'Do not exit page!' +\r\n '
' +\r\n '
' +\r\n '

' +\r\n '' +\r\n '' +\r\n ' WARNING ' +\r\n '' +\r\n '' +\r\n '

' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '

Copying your application data... do not exit this page until the process is complete!

' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
';\r\n\r\n $(\"#confirmCopyModal\").on(\"show.bs.modal\",\r\n function () {\r\n $(window).on(\"beforeunload\", function () {\r\n return \"Are you absolutely sure you want to leave this page?\";\r\n });\r\n var returnUrl = $(\"#returnUrl\").val();\r\n var successUrl = \"/Application/CopyDataSuccess?ReturnUrl=\" + returnUrl\r\n $(\"#btnCopyApplicationData\").on(\"click\",\r\n function () {\r\n\r\n var appId = $(\"#Id\").val();\r\n\r\n if (appId === null || appId === 0) {\r\n toastr.error(\"There was an error with your application id. Please refresh the page and try again.\");\r\n return;\r\n }\r\n\r\n var url = \"/Application/CopyApplicationData/\" + appId;\r\n\r\n //util.console.log(\"url: \" + url);\r\n\r\n //replace the modal with a spinner to show that it's loading\r\n $(\".modal-content\").html(loadingHtml);\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: null,\r\n success: function (data) {\r\n\r\n $(window).off(\"beforeunload\"); //remove beforeunload handler\r\n window.location.href = successUrl;\r\n },\r\n error: function (data) {\r\n //util.console.log(data);\r\n toastr.error(\"Failure\");\r\n }\r\n });\r\n });\r\n\r\n $(\"#btnCopyStandardApplicationData\").on(\"click\",\r\n function () {\r\n\r\n var appType = $(\"#ApplicationType\").val();\r\n var isCertified = appType.indexOf(\"Certified\") >= 0;\r\n var url = \"/Application/CopyStandardApplicationData\";\r\n\r\n //util.console.log(\"url: \" + url);\r\n\r\n //replace the modal with a spinner to show that it's loading\r\n $(\".modal-content\").html(loadingHtml);\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: { isCertified: isCertified },\r\n success: function (data) {\r\n\r\n $(window).off(\"beforeunload\"); //remove beforeunload handler\r\n window.location.href = successUrl;\r\n },\r\n error: function (data) {\r\n //util.console.log(data);\r\n toastr.error(\"Failure\");\r\n }\r\n });\r\n });\r\n\r\n $(\"#btnCopyExistingStandardApplicationData\").on(\"click\",\r\n function () {\r\n\r\n var appType = $(\"#ApplicationType\").val();\r\n var isCertified = appType.indexOf(\"Certified\") >= 0;\r\n var url = \"/Application/CopyExistingStandardApplicationData\";\r\n\r\n //util.console.log(\"url: \" + url);\r\n\r\n //replace the modal with a spinner to show that it's loading\r\n $(\".modal-content\").html(loadingHtml);\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: { isCertified: isCertified },\r\n success: function (data) {\r\n\r\n $(window).off(\"beforeunload\"); //remove beforeunload handler\r\n window.location.href = successUrl;\r\n },\r\n error: function (data) {\r\n //util.console.log(data);\r\n toastr.error(\"Failure\");\r\n }\r\n });\r\n });\r\n });\r\n\r\n $(\"#confirmCopyModal\").on(\"hide.bs.modal\", function () {\r\n $(window).off(\"beforeunload\");\r\n $(\"#btnCopyApplicationData\").off();\r\n $(\"#btnCopyStandardApplicationData\").off();\r\n });\r\n\r\n },\r\n Success: function () {\r\n history.pushState(null, document.title, location.href);\r\n window.addEventListener(\"popstate\", function (event) {\r\n history.pushState(null, document.title, location.href);\r\n });\r\n },\r\n Internal: function () {\r\n //Select all input elements with class 'code-input'\r\n const inputs = document.querySelectorAll('.code-input');\r\n const form = document.querySelector(\"form[name='code-form']\");\r\n const errorMessage = document.getElementById('consolidated-error-message');\r\n\r\n //Function to validate only the code inputs\r\n function validateCodeInputs() {\r\n let isValid = true;\r\n\r\n //Check each input field to ensure they are not empty\r\n inputs.forEach(input => {\r\n if (input.value.trim() === '') {\r\n isValid = false;\r\n }\r\n });\r\n\r\n return isValid;\r\n }\r\n\r\n //Form submit handler for client-side validation only\r\n form.addEventListener('submit', function (event) {\r\n const isFormValid = validateCodeInputs();\r\n\r\n if (!isFormValid) {\r\n //Prevent form submission if any code input is empty and show a single error message\r\n event.preventDefault();\r\n //Show consolidated error message\r\n errorMessage.style.display = 'block';\r\n //Clear individual validation messages\r\n inputs.forEach(input => input.setCustomValidity(''));\r\n } else {\r\n //Hide error message if all inputs are valid\r\n errorMessage.style.display = 'none';\r\n }\r\n });\r\n\r\n //Hide the error message when user starts typing in any of the code inputs\r\n inputs.forEach(input => {\r\n input.addEventListener('input', function () {\r\n //Hide consolidated error message\r\n errorMessage.style.display = 'none';\r\n //Clear custom validity for each input\r\n input.setCustomValidity('');\r\n });\r\n });\r\n\r\n //Add event listeners for each input element\r\n inputs.forEach((input, index) => {\r\n //On input event\r\n input.addEventListener('input', (event) => {\r\n //Allow only digits (0-9)\r\n event.target.value = event.target.value.replace(/[^0-9]/g, '');\r\n\r\n //Automatically move to the next input field\r\n if (event.target.value.length === 1 && index < inputs.length - 1) {\r\n inputs[index + 1].focus();\r\n }\r\n });\r\n\r\n //On keydown event\r\n input.addEventListener('keydown', (event) => {\r\n //Check if the Enter key is pressed\r\n if (event.key === 'Enter') {\r\n return; //Allow form submission\r\n }\r\n //Move to the previous input if backspace is pressed on an empty field\r\n if (event.key === 'Backspace' && input.value.length === 0 && index > 0) {\r\n inputs[index - 1].focus();\r\n }\r\n });\r\n\r\n //On keypress event to restrict invalid characters\r\n input.addEventListener('keypress', (event) => {\r\n if (event.key === 'Enter') {\r\n return; //Allow form submission\r\n }\r\n //Prevent any character that is not a digit (0-9)\r\n if (!/[0-9]/.test(event.key)) {\r\n event.preventDefault();\r\n }\r\n });\r\n\r\n //On paste event\r\n input.addEventListener('paste', (event) => {\r\n //Get the pasted data\r\n const pasteData = event.clipboardData.getData('text').replace(/[^0-9]/g, '');\r\n\r\n //If the pasted data length matches the number of inputs, split and distribute the values\r\n if (pasteData.length === inputs.length) {\r\n for (let i = 0; i < inputs.length; i++) {\r\n inputs[i].value = pasteData.charAt(i);\r\n }\r\n //Prevent the default paste action\r\n event.preventDefault();\r\n //Focus the last input to complete the paste action\r\n inputs[inputs.length - 1].focus();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n return application;\r\n }()\r\n);","app.StandardApplication = (\r\n function () {\r\n var application = {\r\n //Index Page\r\n CertifiedAndSupport: function (isSupport) {\r\n \r\n // fire a toastr when components get removed\r\n $(document).on(\"component-remove-complete\", function () {\r\n toastr.success(\"Success!\");\r\n });\r\n\r\n // use this event to disable jQuery date validation\r\n // only required for components with DateTime fields that are MM/yyyy\r\n $(document).on(\"disable-date-validation\",\r\n function () {\r\n //util.console.log(\"Triggered disable-date-validation\");\r\n\r\n // disable jQuery date validation\r\n // this is only required for datepicker fields\r\n // with a MM/yyyy format,because the jQuery\r\n // validator doesn't know how to handle that\r\n $.validator.addMethod(\"date\",\r\n function (value, element) {\r\n return true;\r\n });\r\n });\r\n\r\n // add required star to Positions Seeking select many control\r\n $(document).on(\"component-bind-edit-mode-complete-CertifiedGeneralInformation component-bind-edit-mode-complete-SupportGeneralInformation\",\r\n function (e, generalInformation) {\r\n var starString = \"*\";\r\n $(generalInformation.el).find(\"label[for=SelectedPositionsSeekingIds]\").append(starString);\r\n\r\n $(\"[name='RequiresEmploymentSponsorship']\").on(\"change\", function () {\r\n var value = $(this).val();\r\n if (value === \"True\") {\r\n $(\"[data-visa-question]\").show();\r\n }\r\n else {\r\n $(\"[data-visa-question]\").hide();\r\n $(\"[data-visa-question]\").find('input[type=radio]').prop(\"checked\", false);\r\n }\r\n });\r\n\r\n });\r\n\r\n // add required star to Liftime licenses select many control\r\n $(document).on(\"component-bind-edit-mode-complete-License\", function () {\r\n setRequiredIfLabels();\r\n\r\n $(\"select[name='IsLifetime']\").on(\"change\",\r\n function () {\r\n setRequiredIfLabels();\r\n });\r\n });\r\n function setRequiredIfLabels() {\r\n var editComponent = $(\"select[name='IsLifetime']\").closest(\"div.component-edit\");\r\n var expire = $(editComponent).find(\"#lblExpirationDate\")\r\n var expected = $(editComponent).find(\"#lblExpectedDate\")\r\n if ($(\"select[name='IsLifetime']\").find(\":selected\").val() !== \"true\") {\r\n var starString = \"*\";\r\n $(expire).append(starString);\r\n $(expected).append(starString);\r\n }\r\n else {\r\n $(expire).find(\"span.text-danger\").remove();\r\n $(expected).find(\"span.text-danger\").remove();\r\n }\r\n }\r\n // when the education edit card is loaded\r\n $(document).on(\"component-bind-edit-mode-complete-Education\",\r\n function (e, education) {\r\n // trigger event to disable date validation\r\n $(document).trigger(\"disable-date-validation\");\r\n\r\n // get the correct fields\r\n var degrees = $(\"[data-component-role='degree']\", education.el);\r\n var major = $(\"[data-component-role='major']\", education.el);\r\n var minor = $(\"[data-component-role='minor']\", education.el);\r\n var gpa = $(\"[data-component-role='gpa']\", education.el);\r\n var certification = $(\"[data-component-role='certification']\", education.el);\r\n\r\n // hide the extra label that's added to the Degree field by the WamsDropDownListFor\r\n degrees.siblings(\"label:not(:has(span))\").hide();\r\n $(\"[data-component-role='degree']\").attr(\"data-val-number\", \"Education Level is required.\");\r\n\r\n checkEducationVals(degrees, major, minor, certification, gpa);\r\n\r\n // check values when the degrees dropdown is changed\r\n degrees.on(\"change\",\r\n function () {\r\n checkEducationVals(degrees, major, minor, certification, gpa);\r\n });\r\n });\r\n\r\n function checkEducationVals(degrees, major, minor, certification, gpa) {\r\n // if High School Education or GED is selected in the degrees dropdown, then:\r\n // - Remove major, minor, certification\r\n // - Make GPA optional\r\n\r\n // add required stars\r\n var majorStar = major.siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n var gpaStar = gpa.siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n var certificationStar = certification.siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n\r\n var selected = degrees.find(\"option:selected\");\r\n\r\n if (selected &&\r\n (selected.data(\"unique-id\") === \"degree-ged\" || selected.data(\"unique-id\") === \"degree-high-school-education-diploma\")) {\r\n // if Alternative Pathway or High School is selected\r\n\r\n major.parent().hide();\r\n major.data(\"val-required\", null);\r\n\r\n minor.parent().hide();\r\n\r\n certification.parent().hide();\r\n\r\n gpaStar.hide();\r\n gpa.data(\"val-required\", null);\r\n } else {\r\n if (!majorStar.length) {\r\n major.siblings(\"label\").first()\r\n .append(\"*\");\r\n }\r\n if (!certificationStar.length) {\r\n certification.siblings(\"label\").first()\r\n .append(\"*\");\r\n }\r\n if (!gpaStar.length) {\r\n gpa.siblings(\"label\").first()\r\n .append(\"*\");\r\n }\r\n\r\n major.data(\"val\", true);\r\n major.attr(\"data-val-required\", \"The Major field is required.\");\r\n\r\n gpa.data(\"val\", true);\r\n gpa.attr(\"data-val-required\", \"The GPA field is required.\");\r\n\r\n major.parent().show();\r\n minor.parent().show();\r\n certification.parent().show();\r\n gpaStar.show();\r\n }\r\n }\r\n\r\n // when either work experience edit card is loaded\r\n $(document).on(\"component-bind-edit-mode-complete-CertifiedEducationWorkExperience component-bind-edit-mode-complete-WorkExperience\",\r\n function (e, el) {\r\n // trigger event to disable date validation\r\n $(document).trigger(\"disable-date-validation\");\r\n\r\n var endDate = $(\"[data-component-role='enddate']\", el.el);\r\n var currentlyWorkHere = $(\"[data-component-role='currentlyworkhere']\", el.el);\r\n\r\n checkEducationWorkExperienceVals(endDate, currentlyWorkHere);\r\n\r\n // if any of the three date inputs\r\n // (Start Date, End Date, Currently Work Here)\r\n // is changed, run the following logic\r\n $(\"[data-component-group='dates']\").on(\"change\",\r\n function () {\r\n checkEducationWorkExperienceVals(endDate, currentlyWorkHere);\r\n });\r\n });\r\n\r\n function checkEducationWorkExperienceVals(endDate, currentlyWorkHere) {\r\n // if Currently Work Here is true, don't require the Date To (or End Date) field\r\n\r\n var endDateStar = endDate.siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n var reasonsForLeavingStar = $(\"textarea[name='ReasonForLeaving']\").siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n\r\n if (currentlyWorkHere.val() === \"true\") {\r\n endDate.prop(\"disabled\", true);\r\n endDate.val(null);\r\n endDateStar.hide();\r\n reasonsForLeavingStar.hide();\r\n } else {\r\n endDate.prop(\"disabled\", false);\r\n\r\n // if end date star exists, show it, otherwise append one\r\n if (endDateStar.length) {\r\n endDateStar.show();\r\n reasonsForLeavingStar.show();\r\n } else {\r\n endDate.siblings(\"label\").first()\r\n .append(\"*\");\r\n\r\n $(\"textarea[name='ReasonForLeaving']\").siblings(\"label\").first()\r\n .append(\"*\");\r\n }\r\n }\r\n }\r\n\r\n $(document).on(\"component-bind-edit-mode-complete-CertifiedLicenseDetails\",\r\n function (e, license) {\r\n $(document).on(\"change\",\r\n \"[name='SelectedLicenseQuestionAnswer']\",\r\n function () {\r\n switch ($(this).val()) {\r\n case \"False\":\r\n //If it is 0 then do show/hide\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='some']\").hide();\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='explanation']\").hide();\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='none']\").show();\r\n\r\n //clear license values if they filled anything out\r\n $(this).closest(\"form\").find(\"[name='DpiNumber']\").val(null);\r\n break;\r\n default:\r\n //if not 0, go back to default state\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='none']\").hide();\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='explanation']\").hide();\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='some']\").show();\r\n\r\n //clear no license values if they filled anything out\r\n $(this).closest(\"form\").find(\"[name='LicenseExplanation']\").val(null);\r\n $(this).closest(\"form\").find(\"[name='SelectedNoLicenseReasonLicenseId']\").val(null);\r\n\r\n break;\r\n }\r\n });\r\n\r\n $(document).on(\"change\",\r\n \"[name='SelectedNoLicenseReasonLicenseId']\",\r\n function () {\r\n switch ($(\"option:selected\", this).data(\"unique-id\")) {\r\n case \"license-dropdown-options-other\":\r\n //If it is 0 then do show/hide\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='explanation']\").show();\r\n break;\r\n default:\r\n //if not 0, go back to default state\r\n $(this).closest(\"form\").find(\"div[data-show-hide-div='explanation']\").hide();\r\n $(this).closest(\"form\").find(\"[name='LicenseExplanation']\").val(null);\r\n\r\n break;\r\n }\r\n });\r\n });\r\n\r\n // Licenses\r\n $(document).on(\"component-bind-edit-mode-complete-License\",\r\n function (e, license) {\r\n\r\n // trigger event to disable date validation\r\n $(document).trigger(\"disable-date-validation\");\r\n\r\n // append required stars to date and lifetime field labels - need to do this\r\n // here because there is no way to add them automatically in the WecanLabel\r\n // without having the fields marked as required in the model\r\n\r\n // get the correct fields\r\n var expected = $(\"[data-component-role='expected']\", license.el);\r\n var expiration = $(\"[data-component-role='expiration']\", license.el);\r\n var lifetime = $(\"[data-component-role='lifetime']\", license.el);\r\n\r\n checkLicenseVals(expected, expiration, lifetime);\r\n\r\n // Expected Date: Required if Lifetime is NOT checked AND there is NO Expiration value\r\n // Expiration Date: Required if Lifetime is NOT checked AND there is NO Expected value\r\n // Lifetime: Required if there is NO Expiration OR Expected value\r\n\r\n $(\"[data-component-group='dates']\").on(\"change\",\r\n function (e) {\r\n checkLicenseVals(expected, expiration, lifetime);\r\n });\r\n \r\n });\r\n\r\n // checks the passed-in values and set the required stars for each field\r\n function checkLicenseVals(expected, expiration, lifetime) {\r\n\r\n //$(expected).on(\"change\", function () {\r\n // if ($(\"select[name='IsLifetime']\").find(\":selected\").val() !== \"false\" && ($(expected).val() != null || $(expected).val() != \"\" || $(expected).val() != \"undefined\")) {\r\n // $(expire).find(\"span.text-danger\").remove();\r\n // $(expected).append(starString);\r\n // }\r\n //});\r\n //$(expire).on(\"change\", function () {\r\n // if ($(\"select[name='IsLifetime']\").find(\":selected\").val() !== \"false\" && ($(expire).val() != null || $(expire).val() != \"\" || $(expire).val() != \"undefined\")) {\r\n // $(expected).find(\"span.text-danger\").remove();\r\n // $(expire).append(starString);\r\n // }\r\n //});\r\n\r\n\r\n // add required stars\r\n var expectedStar = expected.parent().siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n var expirationStar = expiration.parent().siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n var lifetimeStar = lifetime.siblings(\"label\").children(\"[data-component-role='requiredstar']\");\r\n\r\n // if lifetime is false AND there is no expiration value\r\n // then expected is required\r\n if (lifetime.val() === \"false\" && (!expiration.val() || expiration.val() === \"\")) {\r\n if (expectedStar.length) {\r\n expectedStar.show();\r\n } else {\r\n expected.parent().siblings(\"label\").first()\r\n .append(\"*\");\r\n }\r\n } else {\r\n if (expectedStar.length) {\r\n expected.parent().siblings(\"label\").children(\"[data-component-role='requiredstar']\").hide();\r\n }\r\n }\r\n\r\n // if lifetime is false AND there is no expected value\r\n // then expiration is required\r\n if (lifetime.val() === \"false\" && (!expected.val() || expected.val() === \"\")) {\r\n if (expirationStar.length) {\r\n expirationStar.show();\r\n } else {\r\n expiration.parent().siblings(\"label\").first()\r\n .append(\"*\");\r\n }\r\n } else {\r\n if (expirationStar.length) {\r\n expiration.parent().siblings(\"label\").children(\"[data-component-role='requiredstar']\").hide();\r\n }\r\n }\r\n\r\n // if there is no expected or expiration value\r\n // then lifetime is required\r\n if ((!expected.val() || expected.val() === \"\") && (!expiration.val() || expiration.val() === \"\")) {\r\n if (lifetimeStar.length) {\r\n lifetimeStar.show();\r\n } else {\r\n lifetime.siblings(\"label\").first()\r\n .append(\"*\");\r\n }\r\n } else {\r\n if (lifetimeStar.length) {\r\n lifetimeStar.hide();\r\n }\r\n }\r\n }\r\n\r\n // Non-Renewed\r\n $(document).on(\"component-bind-edit-mode-complete-NonRenewed\",\r\n function () {\r\n var divNonRenewedReason = $(\"#divNonRenewedReason\");\r\n var nonRenewedReason = $(\"#nonRenewedReason\");\r\n var nonRenewedDropdown = $(\"#nonRenewedDropdown\");\r\n\r\n var isNonRenewed = nonRenewedDropdown.val();\r\n\r\n if (isNonRenewed === \"false\") {\r\n divNonRenewedReason.hide();\r\n }\r\n });\r\n\r\n $(document).on(\"change\", \"#nonRenewedDropdown\", function () {\r\n var divNonRenewedReason = $(\"#divNonRenewedReason\");\r\n var nonRenewedDropdown = $(\"#nonRenewedDropdown\");\r\n\r\n var isNonRenewed = nonRenewedDropdown.val();\r\n\r\n if (isNonRenewed === \"true\") {\r\n divNonRenewedReason.show();\r\n } else if (isNonRenewed === \"false\") {\r\n divNonRenewedReason.hide();\r\n }\r\n });\r\n\r\n // Support Licenses and Certifications\r\n $(document).on(\"component-bind-edit-mode-complete-SupportLicensesAndCertifications\",\r\n function (e, element) {\r\n checkLicenseAndCertificationVals();\r\n\r\n $(\"[data-component-role='LicenseCertificationCheckbox']\").on(\"change\",\r\n function () {\r\n checkLicenseAndCertificationVals();\r\n });\r\n });\r\n\r\n function checkLicenseAndCertificationVals() {\r\n // check the checkboxes for each item and enable/disable elements as needed\r\n\r\n if ($(\"#DriversLicenseChecked\").is(\":checked\")) {\r\n $(\"#DriversLicenseExpiration\").prop(\"disabled\", false);\r\n } else {\r\n $(\"#DriversLicenseExpiration\").val(null);\r\n $(\"#DriversLicenseExpiration\").prop(\"disabled\", true);\r\n }\r\n\r\n if ($(\"#CommercialDriversLicenseChecked\").is(\":checked\")) {\r\n $(\"#CommercialDriversLicenseExpiration\").prop(\"disabled\", false);\r\n } else {\r\n $(\"#CommercialDriversLicenseExpiration\").val(null);\r\n $(\"#CommercialDriversLicenseExpiration\").prop(\"disabled\", true);\r\n }\r\n\r\n if ($(\"#AedChecked\").is(\":checked\")) {\r\n $(\"#AedExpiration\").prop(\"disabled\", false);\r\n $(\"#AedCertificationGrantorId\").prop(\"disabled\", false);\r\n } else {\r\n $(\"#AedExpiration\").val(null);\r\n $(\"#AedExpiration\").prop(\"disabled\", true);\r\n\r\n $(\"#AedCertificationGrantorId\").val(null);\r\n $(\"#AedCertificationGrantorId\").prop(\"disabled\", true);\r\n }\r\n\r\n if ($(\"#CprChecked\").is(\":checked\")) {\r\n $(\"#CprExpiration\").prop(\"disabled\", false);\r\n $(\"#CprCertificationGrantorId\").prop(\"disabled\", false);\r\n } else {\r\n $(\"#CprExpiration\").val(null);\r\n $(\"#CprExpiration\").prop(\"disabled\", true);\r\n\r\n $(\"#CprCertificationGrantorId\").val(null);\r\n $(\"#CprCertificationGrantorId\").prop(\"disabled\", true);\r\n }\r\n\r\n if ($(\"#FirstAidChecked\").is(\":checked\")) {\r\n $(\"#FirstAidExpiration\").prop(\"disabled\", false);\r\n $(\"#FirstAidCertificationGrantorId\").prop(\"disabled\", false);\r\n } else {\r\n $(\"#FirstAidExpiration\").val(null);\r\n $(\"#FirstAidExpiration\").prop(\"disabled\", true);\r\n\r\n $(\"#FirstAidCertificationGrantorId\").val(null);\r\n $(\"#FirstAidCertificationGrantorId\").prop(\"disabled\", true);\r\n }\r\n }\r\n\r\n // Include in Search\r\n // update the user's include in search flag in the db when they check or uncheck it\r\n $(document).on(\"change\",\r\n \"#cbxIncludeInSearch\",\r\n function () {\r\n var isChecked = $(\"#cbxIncludeInSearch\").is(\":checked\");\r\n var token = $(\"input[name ='__RequestVerificationToken']\").val();\r\n var url = \"/StandardApplication/UpdateIncludeInSearch\";\r\n\r\n var dataObject = {\r\n __RequestVerificationToken: token,\r\n val: isChecked,\r\n staffTypeId: app.page.id\r\n };\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: dataObject,\r\n success: function () {\r\n toastr.success(\"Success!\");\r\n },\r\n error: function () {\r\n toastr.error(\"Error.\");\r\n }\r\n });\r\n });\r\n\r\n // Authorization, Certification, and Release\r\n // update the user's authorization flag in the db when they check or uncheck it\r\n $(document).on(\"change\",\r\n \"#cbxAuthorization\",\r\n function () {\r\n var isChecked = $(\"#cbxAuthorization\").is(\":checked\");\r\n var token = $(\"input[name ='__RequestVerificationToken']\").val();\r\n var url = \"/Application/UpdateAuthorization\";\r\n var dataObject = {\r\n __RequestVerificationToken: token,\r\n val: isChecked,\r\n appId: app.page.id\r\n };\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: dataObject,\r\n success: function () {\r\n //Fire the trigger for component so the apply button can be disabled/enabled if this action satisfies a condition\r\n $(document).trigger(\"component-save-complete\");\r\n toastr.success(\"Success!\");\r\n },\r\n error: function () {\r\n toastr.error(\"Error.\");\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n return application;\r\n }()\r\n);","app.ActiveVacancyLists = (\r\n function () {\r\n var activeVacancyLists = {\r\n //Index Page\r\n Index: function () {\r\n app.SavedVacancies.Init();\r\n $(document).ready(function () {\r\n app.page.components[\"ActiveVacancyListGrid\"][0].refreshGrid();\r\n\r\n $(\"#txtUrlText\").val(window.location.href);\r\n\r\n // for URL copying\r\n $(\"#btnCopyUrl\").on(\"click\",\r\n function () {\r\n $(\"#txtUrlText\").focus().select();\r\n document.execCommand(\"copy\");\r\n toastr.success(\"URL has been copied to clipboard.\");\r\n });\r\n });\r\n }\r\n };\r\n return activeVacancyLists;\r\n }()\r\n);","app.ApplicantList = (\r\n function () {\r\n var appList = {\r\n\r\n Index: function () {\r\n\r\n //load the grid when the doc is ready Since this is mobile it needs to be triggered for the IsMobile\r\n app.page.components[\"ApplicantList\"][0].refreshGrid();\r\n\r\n //also make sure to assign interview checkbox functionality every time the grid is done loading again\r\n $(document).on(\"component-bind-view-mode-complete-ApplicantList\",\r\n function () {\r\n\r\n app.ApplicantList.InterviewCheckboxInit();\r\n\r\n //Assign the mobile view select all button functionality\r\n $(\".selectAllCheckbox, #gridSelectAllGroupSelect\").on(\"change\",\r\n function () {\r\n if ($(this).is(\":checked\")) {\r\n $(\"input[name='SelectCheckbox']\").prop('checked', true);\r\n $(\".selectAllCheckbox\").prop('checked', true);\r\n $(\"#gridSelectAllGroupSelect\").prop('checked', true);\r\n } else {\r\n $(\"input[name='SelectCheckbox']\").prop('checked', false);\r\n $(\".selectAllCheckbox\").prop('checked', false);\r\n $(\"#gridSelectAllGroupSelect\").prop('checked', false);\r\n }\r\n });\r\n\r\n //Every time the email checkbox changes run this check to determine if \"select all\" needs to be unchecked\r\n $(\".SelectCheckbox\").on(\"change\", function () {\r\n //If unchecking and the select all is selected.\r\n if ($(\".SelectCheckbox\").not(':checked').length !== 0) {\r\n //turn off select all\r\n $(\"#gridSelectAllGroupSelect\").prop('checked', false);\r\n $(\".selectAllCheckbox\").prop('checked', false);\r\n } else\r\n {\r\n $(\"#gridSelectAllGroupSelect\").prop('checked', true);\r\n $(\".selectAllCheckbox\").prop('checked', true);\r\n }\r\n });\r\n\r\n //Every time a sort is clicked, make sure that we clear out any value in the assessment score\r\n //drop down so that custom logic doe not override the sorting\r\n $(\"a[data-role='sort-action']\").on(\"click\", function (ev) {\r\n ev.preventDefault();\r\n $(\"select[Name='SelectedAssessmentScoreType']\").val(null);\r\n app.page.components[\"ApplicantList\"][0].refreshGrid();\r\n });\r\n\r\n //We need to tell the comments code that the data has loaded in order fo the comment modal to work on this page\r\n $(document).trigger(\"bind-comments-modal\");\r\n });\r\n\r\n $(\"#GetEmailButton\").on(\"click\",\r\n function () {\r\n //When user clicks the group email button\r\n var emails = [];\r\n var resultString = \"\";\r\n $(\"#EmailTextArea\").val(\"\");\r\n //Get all of the selected group emails\r\n $(\".SelectCheckbox:checked\").each(\r\n function () {\r\n //Get email address (grid)\r\n var email = $(this).closest('tr').find(\"input[name='EmailAddress']\").val();\r\n\r\n //if mobile...\r\n if (!email) {\r\n email = $(this).val();\r\n }\r\n\r\n //add selected email to the array\r\n emails.push(email);\r\n });\r\n\r\n //Now that we have all of the emails, build the string\r\n $(emails).each(function (index) {\r\n\r\n if (index === 0) {\r\n resultString += emails[index];\r\n }\r\n else\r\n {\r\n resultString += \"; \" + emails[index];\r\n }\r\n });\r\n\r\n //Set modal text area with new string\r\n $(\"#EmailTextArea\").val(resultString);\r\n //open modal for user\r\n $(\"#CopyEmailModal\").modal(\"show\");\r\n });\r\n\r\n $(\"#GetCsvButton\").on(\"click\", function (e) {\r\n var frm = $(\"#csvForm\");\r\n //Get all selected application Ids\r\n var appIds = [];\r\n $(\".SelectCheckbox:checked\").each(\r\n function (index, element) {\r\n //Get email address (grid)\r\n var id = $(element).closest('tr').find(\"input[name='Application.Index']\").val();\r\n\r\n //if mobile...\r\n if (!id) {\r\n id = $(element).data(\"application-id\");\r\n }\r\n\r\n //add selected id to the array\r\n appIds.push(id);\r\n });\r\n\r\n $(frm).find(\"[name='ApplicationIds']\").val(appIds);\r\n $(frm).find(\"[name='VacancyId']\").val($(\"input[name='Id']\").val());\r\n });\r\n\r\n //Modal Copy email to clipboard functionality\r\n $(\"#CopyEmailsButton\").on(\"click\", function() {\r\n var copyText = $(\"#EmailTextArea\");\r\n\r\n copyText.select();\r\n document.execCommand(\"copy\");\r\n toastr[\"success\"](\"Copied to clipboard.\");\r\n });\r\n //Clear button functionality. Needs to override component framework stuff because of special logic with years experience fields\r\n $(\"button[data-role='clear-filter']\").on(\"click\", function (ev) {\r\n\r\n ev.preventDefault();\r\n\r\n //Do the component framework stuff (not working?)\r\n app.input.clearForm();\r\n\r\n //Now set int values\r\n $(\"input[Name='MinTeacherExperience']\").val(0);\r\n $(\"input[Name='MaxTeacherExperience']\").val(10);\r\n $(\"input[Name='MinAdminExperience']\").val(0);\r\n $(\"input[Name='MaxAdminExperience']\").val(10);\r\n\r\n $(\"select[Name='SelectedAssessmentScoreType']\").val(null);\r\n $(\"select[Name='SelectedSelectedSortDirection']\").val(\"False\");\r\n\r\n $(\"input[Name='SelectedLicenseOptions']\").prop('checked', false);\r\n $(\"select[Name='SelectedFilterItem']\").val(\"All\");\r\n\r\n $(\"input[Name='SearchText']\").val(null);\r\n //Clear last sort field so that the sort doesnt persist when resetting filters\r\n $(\"input[Name='LastSortField']\").val(null);\r\n //Remove all sort stuff before the post\r\n $(\"a[data-role='sort-action']\").removeClass(\"desc\");\r\n $(\"a[data-role='sort-action']\").removeClass(\"asc\");\r\n $(\"a[data-role='sort-action']\").removeAttr(\"aria-sort\");\r\n $(\"a[data-role='sort-action']\").removeData(\"role\");\r\n\r\n //Refresh the grid after reset\r\n app.page.components[\"ApplicantList\"][0].refreshGrid();\r\n });\r\n },\r\n\r\n InterviewCheckboxInit: function () {\r\n $(\".Interview\").on(\"change\",\r\n function () {\r\n //Grab the row's application id (grid)\r\n var applicationId = $(this).closest('tr').find(\"input[name='Application.Index']\").val();\r\n\r\n //if mobile...\r\n if (!applicationId) {\r\n applicationId = $(this).data(\"application-id\");\r\n }\r\n\r\n //ajax post to the interview update endpoint\r\n var postData = { ApplicationId: applicationId, WillInterview: $(this).is(':checked') };\r\n\r\n $.ajax({\r\n url: '/Employer/Vacancy/UpdateApplicantInterviewStatus',\r\n data: postData,\r\n type: \"POST\",\r\n success: function (data) {\r\n //Toast success\r\n toastr[\"success\"](\"Applicant interview status changed\");\r\n },\r\n error: function () {\r\n //Toast error\r\n toastr[\"error\"](\"Applicant interview status change failed. Please try again.\");\r\n }\r\n });\r\n }\r\n );\r\n }\r\n };\r\n\r\n return appList;\r\n }()\r\n);","app.ArchivedVacancyList = (\r\n function () {\r\n var vacancies = {\r\n Index: function () {\r\n\r\n $(document).on(\"component-bind-view-mode-complete-ArchivedVacanciesGrid\",\r\n function () {\r\n $(\".duplicateVacancyButton\").on(\"click\",\r\n function () {\r\n var vacancyId = $(this).data(\"vacancy-id\");\r\n util.console.log(vacancyId);\r\n //get the duplicate modal and set the vacancy Id\r\n $(\"#duplicateVacancyButton\").attr(\"data-vacancy-id\", vacancyId);\r\n $(\"#confirmDuplicateVacancy\").modal(\"show\");\r\n });\r\n });\r\n }\r\n };\r\n return vacancies;\r\n }()\r\n);","app.CertifiedCandidateSearch = (\r\n function () {\r\n var search = {\r\n Index: function () {\r\n $(\"#btnResetForm\").on(\"click\", function () {\r\n // reset all form fields\r\n $(\"#SelectedPositionType\").val(\"\");\r\n $(\"#HighestDegree_Any\").prop(\"checked\", true);\r\n $(\"#DateFilter\").val(\"\");\r\n $(\".autocomplete-container > input\").val(\"\");\r\n $(\"#LastModified_All\").prop(\"checked\", true);\r\n $(\"#MyCesaRegionOnly\").prop(\"checked\", false);\r\n $(\"#MinimumYearsTeachingExperience\").val(\"\");\r\n $(\"#MinimumYearsAdministratorExperience\").val(\"\");\r\n $(\"#FirstNameFilter\").val(\"\");\r\n $(\"#LastNameFilter\").val(\"\");\r\n app.input.resetSelectManys($(\"#btnResetForm\").closest('form'));\r\n\r\n // Clear last sort field so that the sort doesnt persist when resetting filters\r\n $(\"input[Name='LastSortField']\").val(null);\r\n // Remove all sort stuff before the post\r\n $(\"a[data-role='sort-action']\").removeClass(\"desc\");\r\n $(\"a[data-role='sort-action']\").removeClass(\"asc\");\r\n $(\"a[data-role='sort-action']\").removeAttr(\"aria-sort\");\r\n $(\"a[data-role='sort-action']\").removeData(\"role\");\r\n\r\n app.page.components[\"CertifiedCandidateGrid\"][0].refreshGrid();\r\n });\r\n }\r\n };\r\n\r\n return search;\r\n }()\r\n);","app.EmployerPrePostInstructions = (\r\n function () {\r\n var prePostInstructions = {\r\n // All pages - used for initializing\r\n Index: function () {\r\n // when one of the edit components on this page is loaded,\r\n // set the cols on all textareas so they're a little larger\r\n\r\n // event that's fired when an edit component has loaded\r\n $(document).on(\"component-bind-edit-mode-complete\", function () {\r\n $(\"textarea\").each(function () {\r\n this.rows = 10;\r\n });\r\n });\r\n }\r\n };\r\n\r\n return prePostInstructions;\r\n }()\r\n);","app.ApplicantSearch = (\r\n function () {\r\n var search = {\r\n //Global to page to remember if it was a mobile view to start, since in theory someone can make a screen smaller/larger\r\n IsMobile: false,\r\n //Index Page\r\n Index: function () {\r\n $(document).on(\"component-bind-view-mode-complete\", function () {\r\n app.ApplicantSearch.Init();\r\n //We need to tell the comments code that the data has loaded in order fo the comment modal to work on this page\r\n $(document).trigger(\"bind-comments-modal\");\r\n\r\n });\r\n },\r\n Init: function () {\r\n app.ApplicantSearch.IsMobile = $(window).width() <= 768;\r\n //when clicking a checkbox\r\n $(\"[name='HideApplicantDistrict']\").on(\"change\",\r\n function () {\r\n var isChecked = $(this).is(\":checked\");\r\n\r\n app.ApplicantSearch.ChangeHideText(isChecked);\r\n\r\n var userId;\r\n //ifMobile\r\n if (app.ApplicantSearch.IsMobile) {\r\n userId = $(this).data(\"user-id\");\r\n }\r\n //if not Mobile\r\n else {\r\n userId = $(this).closest(\"[data-label='HideApplicantDistrict']\").siblings(\"[data-label='Id']\").find(\"[name='Id']\").val();\r\n }\r\n\r\n $(\"#UserId\").val(userId);\r\n $(\"#OriginalStateDistrict\").val(!isChecked);\r\n $(\"#confirmDistrict\").modal({show:true, backdrop: 'static', keyboard: false });\r\n });\r\n\r\n //When submitting from the modal\r\n $(\"[data-submit-action='district']\").off().on(\"click\",\r\n function () {\r\n\r\n //build object\r\n var data = {\r\n userId: $(\"#UserId\").val(),\r\n isHidden: $(\"#OriginalStateDistrict\").val() != \"true\"\r\n };\r\n\r\n //submit to endpoint\r\n $.post(\"/Employer/ApplicantSearch/ChangeDistrictApplicantHideForView\", data,\r\n function () {\r\n //on successful district hide, mark all of the user's apps as user district hidden\r\n if (app.ApplicantSearch.IsMobile) {\r\n $(\"input[data-user-id='\" + $(\"#UserId\").val() + \"']\").each(function (i, e) {\r\n $(e).prop(\"checked\", $(\"#OriginalStateDistrict\").val() !== \"true\");\r\n });\r\n } else {\r\n $(\"input[name='Id']\").each(function (i, e) {\r\n if ($(e).val() == $(\"#UserId\").val()) {\r\n $(e).closest(\"[data-label='Id']\")\r\n .siblings(\"[data-label='HideApplicantDistrict']\")\r\n .find(\"[type='checkbox']\").prop(\"checked\",\r\n $(\"#OriginalStateDistrict\").val() !== \"true\");\r\n }\r\n });\r\n }\r\n toastr.success(\"You successfully updated the applicant visibility status for the district.\", \"Success\");\r\n })\r\n .fail(function () {\r\n app.ApplicantSearch.ResetDistrictHideCheckboxes();\r\n toastr.error(\"There was an error and the update was not made.\", \"Error\");\r\n })\r\n .always(function () {\r\n $(\"#confirmDistrict\").modal(\"hide\");\r\n });\r\n });\r\n\r\n\r\n //when clicking a checkbox\r\n $(\"[name='HideApplicantVacancy']\").on(\"change\",\r\n function () {\r\n\r\n var isChecked = $(this).is(\":checked\");\r\n\r\n app.ApplicantSearch.ChangeHideText(isChecked);\r\n\r\n var appId;\r\n if (app.ApplicantSearch.IsMobile) {\r\n appId = $(this).data(\"app-id\");\r\n } else {\r\n\r\n appId = $(this).closest(\"[data-label='HideApplicantVacancy']\")\r\n .siblings(\"[data-label='ApplicationId']\").find(\"[name='ApplicationId']\").val();\r\n }\r\n\r\n $(\"#ApplicationId\").val(appId);\r\n $(\"#OriginalStateVacancy\").val(!isChecked);\r\n\r\n $(\"#confirmVacancy\").modal({ show: true, backdrop: 'static', keyboard: false });\r\n });\r\n\r\n $(\"[data-submit-action='vacancy']\").off().on(\"click\",\r\n function () {\r\n\r\n var data = {\r\n applicationId: $(\"#ApplicationId\").val(),\r\n isHidden: $(\"#OriginalStateVacancy\").val() != \"true\"\r\n };\r\n\r\n $.post(\"/Employer/ApplicantSearch/ChangeApplicationHideForView\", data, function () {\r\n toastr.success(\"You successfully updated the applicant visibility status for the vacancy.\", \"Success\");\r\n })\r\n .fail(function () {\r\n app.ApplicantSearch.ResetVacancyHideCheckboxes();\r\n toastr.error(\"There was an error and the update was not made.\", \"Error\");\r\n })\r\n .always(function () {\r\n $(\"#confirmVacancy\").modal(\"hide\");\r\n });\r\n });\r\n },\r\n CancelDistrictHide: function () {\r\n app.ApplicantSearch.ResetDistrictHideCheckboxes();\r\n toastr.error(\"You successfully canceled the change.\", \"Action Canceled\");\r\n },\r\n CancelVacancyHide: function () {\r\n app.ApplicantSearch.ResetVacancyHideCheckboxes();\r\n toastr.error(\"You successfully canceled the change.\", \"Action Canceled\");\r\n },\r\n ChangeHideText: function (isChecked) {\r\n if (isChecked) {\r\n $(\".hideText\").text(\"hide\");\r\n } else {\r\n $(\".hideText\").text(\"unhide\");\r\n }\r\n },\r\n ResetVacancyHideCheckboxes: function () {\r\n\r\n if (app.ApplicantSearch.IsMobile) {\r\n $(\"input[data-app-id='\" + $(\"#ApplicationId\").val() + \"']\").each(function (i, e) {\r\n $(e).prop(\"checked\", $(\"#OriginalStateVacancy\").val() === \"true\");\r\n });\r\n } else {\r\n\r\n $(\"input[name='ApplicationId']\").each(function (i, e) {\r\n if ($(e).val() == $(\"#ApplicationId\").val()) {\r\n $(e).closest(\"[data-label='ApplicationId']\").siblings(\"[data-label='HideApplicantVacancy']\")\r\n .find(\"[type='checkbox']\").prop(\"checked\", $(\"#OriginalStateVacancy\").val() === \"true\");\r\n }\r\n });\r\n }\r\n },\r\n ResetDistrictHideCheckboxes: function () {\r\n if (app.ApplicantSearch.IsMobile) {\r\n $(\"input[data-user-id='\" + $(\"#UserId\").val() + \"']\").each(function (i, e) {\r\n $(e).prop(\"checked\", $(\"#OriginalStateDistrict\").val() === \"true\");\r\n });\r\n } else {\r\n\r\n $(\"input[name='Id']\").each(function (i, e) {\r\n if ($(e).val() == $(\"#UserId\").val()) {\r\n $(e).closest(\"[data-label='Id']\").siblings(\"[data-label='HideApplicantDistrict']\")\r\n .find(\"[type='checkbox']\")\r\n .prop(\"checked\", $(\"#OriginalStateDistrict\").val() === \"true\");\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return search;\r\n\r\n }()\r\n);","app.ApplicantView = (\r\n function () {\r\n var view = {\r\n\r\n //Index Page\r\n Initialize: function () {\r\n\r\n //Functionality that does not need to be reset every duplicate\r\n $('#update-evaluate-and-hire-candidate').dirty({\r\n preventLeaving: true,\r\n leavingMessage: 'There are unsaved changes on this page which will be discarded if you do not save.'\r\n });\r\n\r\n //when clicking a checkbox\r\n $(\"[name='HideCandidateDistrict']\").on(\"change\",\r\n function () {\r\n app.ApplicantSearch.ChangeHideText($(this).is(\":checked\"));\r\n\r\n $(\"#OriginalStateDistrict\").val(!$(this).is(\":checked\"));\r\n\r\n $(\"#confirmDistrict\").modal({ show: true, backdrop: 'static', keyboard: false });\r\n });\r\n\r\n //when clicking a checkbox\r\n $(\"[name='HideCandidate']\").on(\"change\",\r\n function () {\r\n app.ApplicantSearch.ChangeHideText($(this).is(\":checked\"));\r\n\r\n $(\"#OriginalStateVacancy\").val(!$(this).is(\":checked\"));\r\n\r\n $(\"#confirmVacancy\").modal({ show: true, backdrop: 'static', keyboard: false });\r\n });\r\n },\r\n CancelDistrictHide: function () {\r\n $(\"[name='HideCandidateDistrict']\").prop(\"checked\", $(\"#OriginalStateDistrict\").val() == \"true\");\r\n\r\n },\r\n CancelVacancyHide: function () {\r\n $(\"[name='HideCandidate']\").prop(\"checked\", $(\"#OriginalStateVacancy\").val() == \"true\");\r\n },\r\n ChangeHideText: function(isChecked) {\r\n if (isChecked) {\r\n $(\".hideText\").text(\"hide\");\r\n } else {\r\n $(\".hideText\").text(\"unhide\");\r\n }\r\n },\r\n };\r\n\r\n return view;\r\n\r\n }()\r\n);","//Javascript for the WECAN Employer Area Profile functionality\r\napp.EmployerProfile = (\r\n function () {\r\n\r\n var profile = {\r\n\r\n //Index Page\r\n Index: function () {\r\n\r\n //When the main user is updated, refresh the access details component to make sure only the main user can get to it\r\n $(document).on(\"component-save-complete-MainUserDetails\",\r\n function () {\r\n app.page.components[\"AccessDetails\"][0].startViewMode();\r\n });\r\n //when the school system access details is updated, refresh the lockout component\r\n $(document).on(\"component-save-complete-AccessDetails\",\r\n function () {\r\n var component = app.page.components[\"LoginExplanation\"];\r\n if (component.length > 0) {\r\n app.page.components[\"LoginExplanation\"][0].startViewMode();\r\n }\r\n });\r\n }\r\n };\r\n\r\n return profile;\r\n\r\n }()\r\n);","//Javascript for the WECAN Employer Questions functionality\r\napp.EmployerQuestions = (\r\n function () {\r\n var questions = {\r\n //Index Page\r\n Index: function () {\r\n $(\"#resetFiltersButton\").on(\"click\", function () {\r\n $(\"#SelectedPositionTypeId\").val(null);\r\n $(\"#SelectedStatusId\").val(null);\r\n $(\"#SearchText\").val(null);\r\n app.page.components[\"QuestionSetsGrid\"][0].refreshGrid();\r\n });\r\n }\r\n };\r\n return questions;\r\n }()\r\n);","app.EmployerReviewMatrix = (\r\n function () {\r\n var reviewMatrix = {\r\n Init: function () {\r\n //this is an \"active grid\" that needs to loaded after page load sincethere is a race conditon that happens \r\n //When the page loads with persistent grid and the sort isn't applied\r\n //load the grid when the doc is ready Since this is mobile it needs to be triggered for the IsMobile\r\n //app.page.components[\"ReviewMatrix\"][0].refreshGrid();\r\n\r\n const interviewFilter = $('#show-interview-only');\r\n interviewFilter.prop('checked', false); // reset on init\r\n\r\n interviewFilter.change((el) => {\r\n if (interviewFilter.is(':checked')) {\r\n $('tr').filter('[data-interview=\"false\"]').hide();\r\n }\r\n else {\r\n $('tr').show();\r\n }\r\n });\r\n }\r\n };\r\n\r\n return reviewMatrix;\r\n }()\r\n);","app.EmployerTerms = (\r\n function () {\r\n\r\n var terms = {\r\n\r\n //Index Page\r\n Index: function () {\r\n if (window.location.href.indexOf(\"#warn\") > -1) {\r\n\r\n $(\"#termsModal\").modal(\"show\");\r\n }\r\n }\r\n };\r\n\r\n return terms;\r\n }()\r\n);","//Javascript for the WECAN Employer Area Signup functionality\r\napp.EmployerSignup = (\r\n function () {\r\n var signup = {\r\n //Index Page\r\n Index: function () {\r\n\r\n // See https://git.doit.wisc.edu/wams-dotnet/wecan3/-/issues/786\r\n //if ($(\"#IsBillingContactSameAsMainUser\").is(\":checked\")) {\r\n // $(\"#BillingContactDiv\").hide();\r\n //} else {\r\n // $(\"#BillingContactDiv\").show();\r\n //}\r\n\r\n if ($(\"#IsCertifiedManagerSameAsMainUser\").is(\":checked\")) {\r\n $(\"#CertifiedManagerDiv\").hide();\r\n } else {\r\n $(\"#CertifiedManagerDiv\").show();\r\n }\r\n\r\n if ($(\"#IsSupportManagerSameAsMainUser\").is(\":checked\") ||\r\n $(\"#IsSupportManagerSameAsCertifiedManager\").is(\":checked\")) {\r\n $(\"#SupportManagerDiv\").hide();\r\n } else {\r\n $(\"#SupportManagerDiv\").show();\r\n }\r\n\r\n // See https://git.doit.wisc.edu/wams-dotnet/wecan3/-/issues/786\r\n //Hide the Billing contact if it is the same as the main user\r\n //$(\"#IsBillingContactSameAsMainUser\").on(\"change\",\r\n // function () {\r\n // if ($(\"#IsBillingContactSameAsMainUser\").is(\":checked\")) {\r\n // $(\"#BillingContactDiv\").hide();\r\n // }\r\n // else {\r\n // $(\"#BillingContactDiv\").show();\r\n // }\r\n // });\r\n\r\n //Hide the Certified Manager Details if it is the same as the main user\r\n $(\"#IsCertifiedManagerSameAsMainUser\").on(\"change\",\r\n function () {\r\n if ($(\"#IsCertifiedManagerSameAsMainUser\").is(\":checked\")) {\r\n $(\"#CertifiedManagerDiv\").hide();\r\n }\r\n else {\r\n $(\"#CertifiedManagerDiv\").show();\r\n }\r\n });\r\n\r\n //Hide the support manager details if it is the same as the main user\r\n $(\"#IsSupportManagerSameAsMainUser\").on(\"change\",\r\n function () {\r\n if ($(\"#IsSupportManagerSameAsMainUser\").is(\":checked\")) {\r\n $(\"#IsSupportManagerSameAsCertifiedManager\").prop(\"checked\", false);\r\n $(\"#SupportManagerDiv\").hide();\r\n }\r\n else {\r\n $(\"#SupportManagerDiv\").show();\r\n }\r\n }\r\n );\r\n //Hide the support manager details if it is the same as the cert manager\r\n $(\"#IsSupportManagerSameAsCertifiedManager\").on(\"change\",\r\n function () {\r\n if ($(\"#IsSupportManagerSameAsCertifiedManager\").is(\":checked\")) {\r\n $(\"#IsSupportManagerSameAsMainUser\").prop(\"checked\", false);\r\n $(\"#SupportManagerDiv\").hide();\r\n }\r\n else {\r\n $(\"#SupportManagerDiv\").show();\r\n }\r\n }\r\n );\r\n function setRequiredIfLabels() {\r\n var certifiedManagerSameAsMainUser = $(\"#IsCertifiedManagerSameAsMainUser\").is(\":checked\");\r\n var supportManagerSameAsMainUser = $(\"#IsSupportManagerSameAsMainUser\").is(\":checked\");\r\n var supportManagerSameAsCertifiedManager = $(\"#IsSupportManagerSameAsCertifiedManager\").is(\":checked\");\r\n\r\n var certifiedManagerFields = [\r\n \"#CertifiedVacancyContactFirstName\",\r\n \"#CertifiedVacancyContactLastName\",\r\n \"#CertifiedVacancyContactEmail\",\r\n \"#CertifiedVacancyContactEmailConfirm\",\r\n \"#CertifiedVacancyContactPhoneNumber\"\r\n ];\r\n\r\n var supportManagerFields = [\r\n \"#SupportVacancyContactFirstName\",\r\n \"#SupportVacancyContactLastName\",\r\n \"#SupportVacancyContactEmail\",\r\n \"#SupportVacancyContactEmailConfirm\",\r\n \"#SupportVacancyContactPhoneNumber\"\r\n ];\r\n\r\n function updateFields(fields, condition) {\r\n fields.forEach(function (field) {\r\n var label = $(field).closest(\"div\").find(\"label\");\r\n var starString = \"*\";\r\n if (condition) {\r\n $(label).find(\"span.text-danger\").remove();\r\n } else {\r\n if (!$(label).find(\"span.text-danger\").length) {\r\n $(label).append(starString);\r\n }\r\n }\r\n });\r\n }\r\n\r\n updateFields(certifiedManagerFields, certifiedManagerSameAsMainUser);\r\n updateFields(supportManagerFields, supportManagerSameAsMainUser || supportManagerSameAsCertifiedManager);\r\n }\r\n\r\n // Initial check\r\n setRequiredIfLabels();\r\n var starString = \"*\";\r\n $(document).find(\"label[for=SelectedCESAIds]\").append(starString);\r\n // Event listeners\r\n $(\"#IsCertifiedManagerSameAsMainUser, #IsSupportManagerSameAsMainUser, #IsSupportManagerSameAsCertifiedManager\").change(function () {\r\n setRequiredIfLabels();\r\n });\r\n }\r\n };\r\n\r\n return signup;\r\n }()\r\n);","//Javascript for the WECAN Employer Area Signup functionality\r\napp.EmployerUsers = (\r\n function () {\r\n var users = {\r\n Index: function () {\r\n // global list of accordion ids for knowing which accordions to open back up when actions are complete\r\n var accordionIds = new Array();\r\n\r\n // global bool to display email change warning on an email change for an employer\r\n var shouldEmailChangeModalFire = true;\r\n\r\n // function to refresh the master list component, but to resubmit the form for filtering\r\n function refreshMasterListComponent() {\r\n app.page.components[\"MasterEmployerUserList\"][0].startViewMode(false,\r\n $(\"#filterForm\").serializeArray());\r\n };\r\n\r\n // Always refresh the filter after reactivate/remove/save in order to update the lists\r\n $(document).on(\"component-remove-complete component-reactivate-complete component-save-complete\",\r\n function () {\r\n refreshMasterListComponent();\r\n });\r\n\r\n // On cancel remove and save go ahead and flip the flag for the email warning back to tru to catch next potential user email change\r\n $(document).on(\"component-edit-cancel component-remove-complete component-save-complete\",\r\n function () {\r\n shouldEmailChangeModalFire = true;\r\n });\r\n\r\n $(document).on(\"component-bind-edit-mode-complete\",\r\n function (e, component) {\r\n // make sure we're not adding a new user\r\n // if we are, we don't want to show the email change modal\r\n if (component.id !== 0) {\r\n $(\"input[name='Email']\").on(\"change\",\r\n function () {\r\n if (shouldEmailChangeModalFire) {\r\n //open the warning modal and set the flag to false to avoid showing again for the same user\r\n $(\"#confirmModal\").modal(\"show\");\r\n shouldEmailChangeModalFire = false;\r\n }\r\n });\r\n }\r\n\r\n // event listener for vacancy select many filter\r\n $('[data-role-name=\"VacancyAssignmentOptions\"]').on(\"click\", '[data-filter=\"vacancy-status\"]', function () {\r\n var value = parseInt($(this).val());\r\n var selMany = $(this).siblings('[data-role=\"select-many\"]').first();\r\n\r\n selMany.find(\".select-many-checkbox\").each(function () {\r\n app.page.log(\"data: \" + $(this).find(\"input\").data(\"vacancy-status-id\"));\r\n if (value === 0 || $(this).find(\"input\").data(\"vacancy-status-id\") === value) {\r\n $(this).show();\r\n //show group\r\n $(this).closest('[data-role=\"select-many-group\"]').show();\r\n }\r\n else {\r\n $(this).hide();\r\n if ($(this).closest('[data-role=\"select-many-group\"]').find(\".select-many-checkbox:visible\").length === 0) {\r\n //hide group\r\n $(this).closest('[data-role=\"select-many-group\"]').hide();\r\n }\r\n }\r\n });\r\n\r\n var selAll = selMany.find('[type=\"checkbox\"][data-role~=\"selectall\"]:visible');\r\n var selAllChecked = true;\r\n\r\n //loop through visible values, if any is false, then mark the box as not all selected\r\n selMany.find('.select-many-checkbox input[type=\"checkbox\"]:visible').each(function (ind, el) {\r\n if ($(el).prop(\"checked\") !== true) {\r\n selAllChecked = false;\r\n // returning false breaks from loop\r\n return false;\r\n }\r\n });\r\n\r\n selAll.prop(\"checked\", selAllChecked);\r\n });\r\n\r\n // create event listener for affiliation type dropdown\r\n // if user is HR Admin or HR Assistant, do not show the vacancy assignment options\r\n $(\"[data-role-name='VacancyAssignmentList']\", component.el).on(\"change\",\r\n function () {\r\n app.page.log($(\"[data-role-name='VacancyAssignmentList']\", component.el));\r\n if ($(this).val() === \"1\" || $(this).val() === \"2\") {\r\n // hide vacancy assignment options\r\n $(\"[data-role-name='VacancyAssignmentOptions']\", component.el).hide();\r\n $(\"[data-role-name='VacancyAssignmentAll']\", component.el).show();\r\n } else {\r\n // show vacancy assignment options\r\n $(\"[data-role-name='VacancyAssignmentOptions']\", component.el).show();\r\n $(\"[data-role-name='VacancyAssignmentAll']\", component.el).hide();\r\n }\r\n });\r\n });\r\n\r\n // When the accordions expand:\r\n // - load the data to the accordion based on the component id\r\n // - add the component id to the list to remember to expand if the component refreshes\r\n $(document).on(\"show.bs.collapse\",\r\n function (event) {\r\n\r\n var element = event.target;\r\n var userId = $(element).data(\"accordion-id\");\r\n\r\n // loading spinner\r\n $(\"#assignedVacancies_\" + userId).html('
');\r\n\r\n app.page.log(\"Fired accordion show event: \");\r\n app.page.log(event);\r\n app.page.log(\"On element: \");\r\n app.page.log(element);\r\n\r\n // first, load the data into the accordion\r\n //build the post object\r\n var postData = { userId };\r\n var theUrl = app.page.appPath + \"/Employer/User/GetEmployerUserData\";\r\n //Make ajax request\r\n $.ajax({\r\n url: theUrl,\r\n type: \"POST\",\r\n data: postData,\r\n success: function (data) {\r\n app.page.log(\"successfully loaded assigned vacancies\");\r\n app.page.log(data);\r\n $(\"#assignedVacancies_\" + userId).html(data);\r\n },\r\n error: function (theError) {\r\n //display toast on error\r\n toastr.error(\"There was an error loading the assigned vacancies for this user.\");\r\n }\r\n });\r\n\r\n app.page.log(\"Accordion IDs: \");\r\n app.page.log(accordionIds);\r\n\r\n // finally, add the element to the list of IDs if needed\r\n var index = accordionIds.indexOf(userId);\r\n if (index === -1) {\r\n accordionIds.push(userId);\r\n //app.page.log(accordionIds);\r\n }\r\n });\r\n\r\n // when the accordions hide:\r\n // - clear the data from the accordion\r\n // - remove the ID from the list\r\n $(document).on(\"hide.bs.collapse\",\r\n function (event) {\r\n var element = event.target;\r\n var userId = $(element).data(\"accordion-id\");\r\n\r\n // clear assigned vacancies section from view\r\n $(\"#assignedVacancies_\" + userId).html(\"\");\r\n\r\n app.page.log(\"Fired accordion hide event: \");\r\n app.page.log(event);\r\n app.page.log(\"On element: \");\r\n app.page.log(element);\r\n app.page.log(accordionIds);\r\n\r\n var index = accordionIds.indexOf(userId);\r\n if (index > -1) {\r\n accordionIds.splice(index, 1);\r\n }\r\n app.page.log(accordionIds);\r\n });\r\n\r\n // On remove display a success message\r\n $(document).on(\"component-remove-complete\",\r\n function () {\r\n toastr.success(\"User successfully deleted.\");\r\n });\r\n\r\n // When the component master list loads, assign functionality\r\n $(document).on(\"component-bind-view-mode-complete-MasterEmployerUserList\",\r\n function () {\r\n $(\".activeUserButton\").off(\"click\").on(\"click\",\r\n function () {\r\n //Get the Id value from the button\r\n var id = $(this).data(\"value\");\r\n\r\n //build the post object\r\n var postData = { Id: id };\r\n var theUrl = app.page.appPath + \"/Employer/User/ReactivateDeletedUsers\";\r\n //Make ajax request\r\n $.ajax({\r\n url: theUrl,\r\n type: \"POST\",\r\n data: postData,\r\n success: function () {\r\n //make sure to close the modal\r\n $(\"#reactivateUser_\" + id).modal(\"hide\");\r\n toastr.success(\"User successfully reactivated.\");\r\n $(document).trigger(\"component-reactivate-complete\");\r\n },\r\n error: function (theError) {\r\n //display toast on error\r\n toastr.error(\"There was an error reactivating this user, please try again and contact support if the problem persists.\");\r\n }\r\n });\r\n });\r\n\r\n $(\".resendEmailButton\").off(\"click\").on(\"click\",\r\n function () {\r\n //Get the Id value from the button\r\n var id = $(this).data(\"value\");\r\n\r\n //build the post object\r\n var postData = { Id: id };\r\n var theUrl = app.page.appPath + \"/Employer/User/ResendNewAccountEmailAsync\";\r\n //Make ajax request\r\n $.ajax({\r\n url: theUrl,\r\n type: \"POST\",\r\n data: postData,\r\n success: function () {\r\n $(\"#resendEmail_\" + id).modal(\"hide\");\r\n toastr.success(\"Email successfully resent.\");\r\n },\r\n error: function (theError) {\r\n //display toast on error\r\n toastr.error(\"There was an error resending the email, please try again and contact support if the problem persists.\");\r\n }\r\n });\r\n });\r\n\r\n var i;\r\n app.page.log(\"Starting accordion ID check\");\r\n app.page.log(accordionIds);\r\n for (i = 0; i < accordionIds.length; i++) {\r\n var theId = accordionIds[i];\r\n $(\"[data-accordion-id='\" + theId + \"']\").collapse(\"show\");\r\n }\r\n });\r\n }\r\n };\r\n\r\n return users;\r\n }()\r\n);","app.ContactHr = (\r\n function () {\r\n var contact = {\r\n Init: function () {\r\n app.ContactHr.InitContactFlag();\r\n\r\n // Reinitialize on grid reload\r\n $(document).on(\"component-filter-grid-complete\", function () {\r\n app.ContactHr.InitContactFlag();\r\n });\r\n },\r\n InitContactFlag: function () {\r\n // Bind click and keyboard interaction to the flag\r\n $(document).on('click keydown', '.fa-flag', function (e) {\r\n // Allow interaction via \"Enter\" or \"Space\" keys (in addition to clicks)\r\n if (e.type === 'keydown' && !(e.key === 'Enter' || e.key === ' ')) {\r\n return;\r\n }\r\n\r\n e.preventDefault(); // Prevent default behavior for space/enter keys\r\n\r\n const $icon = $(this);\r\n const applicationId = $icon.data('application-id');\r\n\r\n if (!applicationId) {\r\n console.error(\"No applicationId found for Contact HR toggle.\");\r\n toastr.error(\"Could not update Contact HR status. No valid application identifier found.\");\r\n return;\r\n }\r\n\r\n // Find all elements on the page with the same application ID\r\n const $allMatchingFlags = $(`[data-application-id='${applicationId}']`);\r\n const currentStatus = $allMatchingFlags.closest('.red-flag, .default-flag').hasClass('red-flag');\r\n\r\n // Prepare the data payload\r\n const payload = { applicationId: applicationId };\r\n\r\n // Send the request to the server\r\n $.post('/Employer/Home/ContactHr', payload)\r\n .done(function (data) {\r\n if (!Array.isArray(data) || data.length === 0) {\r\n toastr.error(\"Failed to update Contact HR status. Please try again.\");\r\n }\r\n\r\n // Iterate over all returned application IDs and update the flags\r\n data.forEach(function (appId) {\r\n const $matchingFlags = $(`[data-application-id='${appId}']`);\r\n\r\n if ($matchingFlags.length) {\r\n $matchingFlags.each(function () {\r\n const $flagWrapper = $(this).closest('.red-flag, .default-flag');\r\n const $icon = $(this);\r\n const $contactHrText = $flagWrapper.siblings('.contact-hr-text');\r\n\r\n // Toggle the class\r\n $flagWrapper\r\n .toggleClass('red-flag', !currentStatus)\r\n .toggleClass('default-flag', currentStatus);\r\n\r\n // Update ARIA label\r\n $icon.attr('aria-label', !currentStatus ? 'No Need to Contact HR' : 'Contact HR button');\r\n\r\n // Show/hide the \"Contact HR\" text\r\n if (!currentStatus) {\r\n $contactHrText.show();\r\n } else {\r\n $contactHrText.hide();\r\n }\r\n });\r\n }\r\n });\r\n\r\n toastr.success(\"Contact HR status updated successfully.\");\r\n })\r\n .fail(function () {\r\n toastr.error(\"Failed to update Contact HR status. Please try again.\");\r\n });\r\n });\r\n }\r\n };\r\n\r\n return contact;\r\n }()\r\n);","//Javascript for the WECAN Employer Area Signup functionality\r\napp.EmployerVacancy = (\r\n function () {\r\n var vacancy = {\r\n Edit: function () {\r\n $(\"#duplicateVacancyWarningButton\").on(\"click\", function () {\r\n \r\n $(\"#confirmExtendCloseDateDuplicate\").modal(\"hide\");\r\n $(\"#confirmDuplicateVacancy\").modal(\"show\");\r\n\r\n });\r\n\r\n $(\"[data-clear-licenses]\").on(\"click keyup\", function () {\r\n //Get the target\r\n clearLicenseList(\"[data-clear-licenses]\");\r\n \r\n });\r\n\r\n //listen for is license exempt checkbox and disable fields as necessary\r\n $(\"[name='IsExceptLicenseRequirement'\").on(\"change\", function () {\r\n if ($(this).prop(\"checked\")) {\r\n $(\"#license-row\").hide();\r\n clearLicenseList(\"[data-clear-licenses]\");\r\n } else {\r\n $(\"#license-row\").show();\r\n }\r\n });\r\n $('[data-role=\"toggle-title-options\"]').on('click', function () {\r\n $('[data-role=\"option-containter\"]').hide();\r\n $('[data-target=\"' + $(this).data('target') + '\"]').show();\r\n });\r\n\r\n $('[data-role~=\"close-date\"], input[type=\"checkbox\"][data-role~=\"apply-after-end\"]').on('change', function () {\r\n if ($(this).data('extend-protection').toString().toLowerCase() === \"true\") {\r\n $('#confirmExtendCloseDateDuplicate').modal(\"show\");\r\n }\r\n });\r\n\r\n $('[data-role~=\"datepicker\"]').on('change blur', function () {\r\n $(this).valid();\r\n });\r\n\r\n $('[data-role~=\"title-options\"]').on('change', function () {\r\n //update all the fields\r\n app.Page.selectedOptionId = $(this).val();\r\n if (($('[Name=\"Title\"]').val() != null && $('[Name=\"Title\"]').val().trim().length)\r\n || ($('[Name=\"Location\"]').val() != null && $('[Name=\"Location\"]').val().trim().length)\r\n || ($('[Name=\"Url\"]').val() != null && $('[Name=\"Url\"]').val().trim().length)\r\n || ($('[Name=\"AdditionalQuestionSetId\"]').val() != null && $('[Name=\"AdditionalQuestionSetId\"]').val().trim().length)) {\r\n //show modal popup if there is a valid selected option\r\n if (app.Page.selectedOptionId !== null && app.Page.selectedOptionId !== \"\") {\r\n $('#confirmTitleOption').modal(\"show\");\r\n }\r\n }\r\n else {\r\n SetVacancyFields();\r\n }\r\n });\r\n\r\n $('[data-role=\"other-toggle\"]').on('change', function () {\r\n //if the option selected is the same as the other option, show toggle target, otherwise hide\r\n if ($(this).data(\"other-option-unique-id\") === $('option:selected', this).data('unique-id')) {\r\n $('[data-target=\"' + $(this).data('other-toggle-target') + '\"]').show();\r\n }\r\n else {\r\n $('[data-target=\"' + $(this).data('other-toggle-target') + '\"]').hide();\r\n $('input[type=\"text\"]', '[data-target=\"' + $(this).data('other-toggle-target') + '\"]').val('');\r\n }\r\n });\r\n\r\n // events for save and return/save and preview buttons\r\n $(\"#btnSaveAndStay\").on(\"click\",\r\n function () {\r\n var form = $(\"#vacancyForm\");\r\n $(\"#SubmitType\").val(1);\r\n form.submit();\r\n });\r\n\r\n $(\"#btnSaveAndReturn\").on(\"click\",\r\n function () {\r\n var form = $(\"#vacancyForm\");\r\n $(\"#SubmitType\").val(2);\r\n form.submit();\r\n });\r\n\r\n $(\"#btnSaveAndPreview\").on(\"click\",\r\n function () {\r\n var form = $(\"#vacancyForm\");\r\n $(\"#SubmitType\").val(3);\r\n form.submit();\r\n });\r\n $('input[name=\"VacancyCloseDate\"], input[name=\"CanApplyAfterEndDate\"]').change(function () {\r\n if ($('input[name=\"IsClosedStatus\"]').val().toLowerCase() === 'true') {\r\n //// Show the modal\r\n //$('#closedVacancyMessage').modal('show');\r\n }\r\n });\r\n\r\n //////\r\n //Functionality that does not need to be reset every duplicate\r\n $('#vacancyForm').dirty({\r\n preventLeaving: true,\r\n leavingMessage: 'There are unsaved changes on this page which will be discarded if you continue.'\r\n });\r\n\r\n $('[data-role=\"confirm-title-option\"]').on('click', function () {\r\n SetVacancyFields();\r\n $('#confirmTitleOption').modal(\"hide\");\r\n //REINIT JS\r\n app.Page.selectedOptionId = null;\r\n });\r\n\r\n\r\n function SetVacancyFields() {\r\n // make sure the selected option is valid (not blank)\r\n if (app.Page.selectedOptionId !== null && app.Page.selectedOptionId !== \"\") {\r\n $('[data-role=\"edit-form-container\"]').closest('form').hide();\r\n $('[data-role=\"edit-form-container\"]').closest('.card').addClass('loading-placeholder');\r\n //ajax to get the new view returned by\r\n $.post($('[data-role=\"confirm-title-option\"]').data('url'), { id: app.page.id, duplicateId: app.Page.selectedOptionId })\r\n .done(function (view) {\r\n //replace form with new one\r\n $('[data-role=\"edit-form-container\"]').html(view);\r\n }).always(function () {\r\n $('[data-role=\"edit-form-container\"]').closest('.card').removeClass('loading-placeholder');\r\n $('[data-role=\"edit-form-container\"]').closest('form').show();\r\n //re-init the controls\r\n app.page.initCheckboxLists();\r\n app.input.initSelectMany(document);\r\n app.input.initTextEditor(document);\r\n $(\"[data-clear-licenses]\").on(\"click keyup\", function () {\r\n //Get the target\r\n clearLicenseList(\"[data-clear-licenses]\");\r\n\r\n });\r\n $('[data-role~=\"datepicker\"]').datepicker();\r\n });\r\n }\r\n }\r\n\r\n function clearLicenseList(name) {\r\n var target = $(name).data(\"clear-licenses\");\r\n //uncheck all checkboxes \r\n $(\"[name='\" + target + \"']\").prop(\"checked\", false);\r\n //trigger change to reset selected list on select many\r\n $(\"[name='\" + target + \"']\").change();\r\n }\r\n\r\n \r\n },\r\n View: function () {\r\n $('[data-role=\"applicant-save-vacancy\"]').on('click', function () {\r\n //have the icon determine the state\r\n var icon = $(this).find('i');\r\n var shouldSave = false;\r\n if ($(icon).hasClass('fa-star-o')) {\r\n //clicked with empty star means we need to save it!\r\n shouldSave = true;\r\n }\r\n //udpate database\r\n $.post($(this).data('url'), { id = app.page.id, save = shouldSave })\r\n .done(function () {\r\n //update the ui\r\n if ($(icon).hasClass('fa-star')) {\r\n //clicked with a filled in star means we need to unsave it!\r\n $(icon).removeClass('fa-star');\r\n $(icon).addClass('fa-star-o');\r\n }\r\n else {\r\n //clicked with empty star means we need to save it!\r\n shouldSave = true;\r\n $(icon).addClass('fa-star');\r\n $(icon).removeClass('fa-star-o');\r\n }\r\n //notify user\r\n toastr.success(\"Vacancy saved successfully.\");\r\n })\r\n .fail(function () { toastr.error(\"Vacancy did not save correctly. Please try again.\"); });\r\n });\r\n }\r\n };\r\n\r\n return vacancy;\r\n }()\r\n);","//Javascript for the WECAN Employer Vacancy List\r\napp.QuestionSet = (\r\n function () {\r\n var questionSets = {\r\n //Index Page\r\n Index: function () {\r\n\r\n var titleInUseInput = $('#TitleInUse');\r\n if (titleInUseInput.length > 0) {\r\n // Check if the title is in use\r\n var titleInUse = titleInUseInput.val() == 'True'; // Adjust the comparison value based on your actual value\r\n if (titleInUse) {\r\n // Check for the existence of each modal and display the appropriate one\r\n if ($('#duplicateQuestionSet').length > 0) {\r\n $('#duplicateQuestionSet').modal('show');\r\n } else if ($('#addQuestionSet').length > 0) {\r\n $('#addQuestionSet').modal('show');\r\n }\r\n }\r\n }\r\n\r\n checkTitles($('input[name=\"Title\"]'));\r\n $(document).on(\"component-remove-complete-QuestionSets\",\r\n function() {\r\n window.location.replace(\"/Employer/Question\");\r\n });\r\n $('input[name=\"Title\"]').on('input', function () {\r\n checkTitles(this);\r\n });\r\n\r\n function checkTitles(element) {\r\n var titleValue = $(element).val().trim(); // Trim whitespace from the input value\r\n // Get the existing title, trim it, and remove newline and carriage return characters\r\n var existingTitle = $('#set-title').text().trim().replace(/[\\n\\r]/g, '');\r\n var $continueButton = $('#continue-button');\r\n\r\n // Enable the button if the titles do not match; otherwise, disable it\r\n if (titleValue === existingTitle) {\r\n $continueButton.prop('disabled', true);\r\n } else {\r\n $continueButton.prop('disabled', false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n return questionSets;\r\n }()\r\n);","//Javascript for the WECAN Employer Remembered Candidate functionality\r\napp.RememberedCandidates = (\r\n function () {\r\n var rememberedCandidates = {\r\n //Index Page\r\n Index: function () {\r\n $(document).on(\"click\", '[data-role=\"employer-save-candidate\"]', function () {\r\n var forgetCandidate = true;\r\n\r\n //text and button updates\r\n if ($(this).hasClass('btn')) {\r\n if ($(this).hasClass(\"btn-secondary\")) {\r\n //clicking to re-add candidate as remembered\r\n $(this).removeClass(\"btn-secondary\");\r\n $(this).addClass(\"btn-primary\");\r\n $(this).text(\"Forget Candidate\");\r\n forgetCandidate = false;\r\n }\r\n else {\r\n $(this).addClass(\"btn-secondary\");\r\n $(this).removeClass(\"btn-primary\");\r\n $(this).text(\"Undo\");\r\n }\r\n }\r\n else {\r\n if ($(this).find('i').hasClass(\"fa-star-o\")) {\r\n //clicking to re-add candidate as remembered\r\n $(this).find('i').removeClass(\"fa-star-o\");\r\n $(this).find('i').addClass(\"fa-star\");\r\n forgetCandidate = false;\r\n }\r\n else {\r\n $(this).find('i').addClass(\"fa-star-o\");\r\n $(this).find('i').removeClass(\"fa-star\");\r\n }\r\n }\r\n\r\n //get row id which is application id\r\n var id = $(this).closest('tr').find('input[type=\"hidden\"]').val();\r\n var url = forgetCandidate ? $(this).data('unsave-url') : $(this).data('save-url')\r\n //ajax to update db\r\n $.ajax({\r\n type: \"POST\",\r\n data: { Id: id },\r\n url: url,\r\n success: function (data) {\r\n if (data) { //close modal\r\n if (forgetCandidate) {\r\n toastr.success(\"The candidate has been removed from your remembered list.\");\r\n }\r\n else {\r\n toastr.success(\"The candidate has been re-added to your remembered list.\");\r\n }\r\n }\r\n else {\r\n toastr.error(\"Something went wrong. Please try again.\");\r\n }\r\n },\r\n error: function () {\r\n toastr.error(\"Something went wrong. Please try again.\");\r\n }\r\n });\r\n });\r\n },\r\n CandidateInfo: function () {\r\n $(document).on('click', '[data-open-all-accordions]', function () {\r\n $('.collapse', $(this).closest('[data-role=\"applicant-history-container\"]')).collapse('show');\r\n });\r\n }\r\n };\r\n return rememberedCandidates;\r\n }()\r\n);","//Javascript for the WECAN Employer Vacancy List\r\napp.VacancyList = (\r\n function () {\r\n var vacancies = {\r\n //Index Page\r\n Index: function () {\r\n toastr.options = {\r\n \"preventDuplicates\": true\r\n };\r\n app.VacancyList.SetStaffTypeDropDowns();\r\n app.VacancyList.BindStaffTypeDropdownFunctionality();\r\n app.VacancyList.InitGridButtons();\r\n $(\"#archiveVacancyButton\").on(\"click\", function () {\r\n var id = $(this).attr(\"data-vacancy-id\");\r\n $.ajax({\r\n type: \"POST\",\r\n data: { Id: id },\r\n url: \"/Employer/Vacancy/ArchiveVacancy\",\r\n success: function (data) {\r\n if (data) { //close modal\r\n $(\"#archiveVacancy\").modal(\"hide\");\r\n //filter grid again for new html\r\n app.page.components[\"VacancyList\"][0].refreshGrid();\r\n toastr.success(\"The vacancy status has been archived\");\r\n }\r\n else {\r\n toastr.error(\"Something went wrong\");\r\n }\r\n },\r\n error: function () {\r\n toastr.error(\"Something went wrong\");\r\n }\r\n });\r\n });\r\n\r\n $(\"#closeVacancyButton, #openVacancyButton, #closeDateModalButton\").on(\"click\", function () {\r\n var id = $(this).attr(\"data-vacancy-id\");\r\n var thisId = $(this).attr(\"id\");\r\n $.ajax({\r\n type: \"POST\",\r\n data: { Id: id },\r\n url: \"/Employer/Vacancy/ToggleVacancyStatus\",\r\n success: function (data) {\r\n if (data) {\r\n if (thisId === \"closeVacancyButton\") {\r\n $(\"#closeVacancy\").modal(\"hide\");\r\n } else if (thisId === \"openVacancyButton\") {\r\n $(\"#openVacancy\").modal(\"hide\");\r\n } else if (\"#closeDateModalButton\") {\r\n $(\"#closeDateModal\").modal(\"hide\");\r\n }\r\n //filter grid again for new html\r\n app.page.components[\"VacancyList\"][0].refreshGrid();\r\n toastr.success(\"The vacancy status has changed\");\r\n }\r\n else {\r\n toastr.error(\"Something went wrong\");\r\n }\r\n },\r\n error: function () {\r\n toastr.error(\"Something went wrong\");\r\n }\r\n });\r\n\r\n });\r\n\r\n $(document).on(\"component-bind-view-mode-complete-VacancyList\",\r\n function () {\r\n app.VacancyList.InitGridButtons();\r\n });\r\n\r\n $(\"#resetFiltersButton\").on(\"click\", function () {\r\n $(\"#SelectedVacancyStatusId\").val(\"0\");\r\n $(\"#SelectedStaffTypeUniqueId\").val(\"staff-types-certified-staff\");\r\n $(\"#SelectedPositionTypeId\").val(null);\r\n $(\"#SelectedCertifiedPositionTypeId\").val(null);\r\n $(\"#SelectedSupportPositionTypeId\").val(null);\r\n $(\"#SelectedVisibility\").val(null);\r\n $(\"#SearchText\").val(null);\r\n $(\"[aria-sort]\").removeAttr(\"aria-sort\");\r\n $(\"[data-target='Id']\").attr(\"aria-sort\", \"descending\");\r\n\r\n // Clear last sort field so that the sort doesn't persist when resetting filters\r\n $(\"input[Name='LastSortField']\").val(null);\r\n // Remove all sort stuff before the post\r\n $(\"a[data-role='sort-action']\").removeClass(\"desc\");\r\n $(\"a[data-role='sort-action']\").removeClass(\"asc\");\r\n $(\"a[data-role='sort-action']\").removeAttr(\"aria-sort\");\r\n $(\"a[data-role='sort-action']\").removeData(\"role\");\r\n $(\"select[name='PageSize']\").val(\"50\");\r\n\r\n // refresh grid\r\n app.page.components[\"VacancyList\"][0].refreshGrid();\r\n });\r\n },\r\n SetStaffTypeDropDowns: function () {\r\n // util.console.log(\"inside SetStaffTypeDropDowns\");\r\n\r\n var selectedValue = $(\"#SelectedStaffTypeUniqueId :selected\").val();\r\n var certifiedPositionsDropDownDiv = $(\"#certifiedPositionsDropDownDiv\");\r\n var supportPositionsDropDownDiv = $(\"#supportPositionsDropDownDiv\");\r\n var certifiedPositionsDropDown = $(\"#SelectedCertifiedPositionTypeId\");\r\n var supportPositionsDropDown = $(\"#SelectedSupportPositionTypeId\");\r\n var allPositionsDropDownDiv = $(\"#allPositionsDropDownDiv\");\r\n var allPositionsDropDown = $(\"#SelectedPositionTypeId\");\r\n\r\n // util.console.log(\"selectedValue: \" + selectedValue);\r\n\r\n switch (selectedValue) {\r\n case \"staff-types-certified-staff\":\r\n supportPositionsDropDownDiv.hide();\r\n $(supportPositionsDropDown).val(null);\r\n allPositionsDropDownDiv.hide();\r\n $(allPositionsDropDown).val(null);\r\n certifiedPositionsDropDownDiv.show();\r\n break;\r\n case \"staff-types-support-staff\":\r\n supportPositionsDropDownDiv.show();\r\n certifiedPositionsDropDownDiv.hide();\r\n $(certifiedPositionsDropDown).val(null);\r\n allPositionsDropDownDiv.hide();\r\n $(allPositionsDropDown).val(null);\r\n break;\r\n default:\r\n supportPositionsDropDownDiv.hide();\r\n $(supportPositionsDropDown).val(null);\r\n certifiedPositionsDropDownDiv.hide();\r\n $(certifiedPositionsDropDown).val(null);\r\n allPositionsDropDownDiv.show();\r\n break;\r\n }\r\n },\r\n InitGridButtons: function () {\r\n $(\".openVacancy\").on(\"click\",\r\n function () {\r\n\r\n var vacancyId = $(this).data(\"vacancy-id\");\r\n var closeDateString = $(this).closest('tr').find('td[data-label=\"CloseDateString\"]').text().trim();\r\n\r\n // Check if closeDateString is a valid date\r\n\r\n\r\n var closeDate = new Date(closeDateString);\r\n var now = new Date();\r\n var cstOffset = -6 * 60; // CST timezone offset in minutes\r\n var closeDateCST = new Date(closeDate.getTime() + cstOffset * 60000);\r\n if (isNaN(closeDateCST.getTime()) || ((now.getTime() <= closeDateCST.getTime()))) {\r\n $(\"#openVacancyButton\").attr(\"data-vacancy-id\", vacancyId);\r\n $(\"#openVacancy\").modal(\"show\");\r\n }\r\n else if (now.getTime() > closeDateCST.getTime()) {\r\n $(\"#closeDateModalButton\").attr(\"data-vacancy-id\", vacancyId);\r\n $(\"#closeDateModal\").modal(\"show\");\r\n }\r\n\r\n\r\n\r\n //get the archive modal and set the vacancy Id\r\n\r\n });\r\n\r\n $(\".closeVacancy\").on(\"click\",\r\n function () {\r\n var vacancyId = $(this).data(\"vacancy-id\");\r\n //get the archive modal and set the vacancy Id\r\n $(\"#closeVacancyButton\").attr(\"data-vacancy-id\", vacancyId);\r\n $(\"#closeVacancy\").modal(\"show\");\r\n });\r\n\r\n $(\".archiveVacancy\").on(\"click\",\r\n function () {\r\n var vacancyId = $(this).data(\"vacancy-id\");\r\n //get the archive modal and set the vacancy Id\r\n $(\"#archiveVacancyButton\").attr(\"data-vacancy-id\", vacancyId);\r\n $(\"#archiveVacancy\").modal(\"show\");\r\n });\r\n\r\n $(\".duplicateVacancy\").on(\"click\",\r\n function () {\r\n var vacancyId = $(this).data(\"vacancy-id\");\r\n //get the duplicate modal and set the vacancy Id\r\n $(\"#duplicateVacancyButton\").attr(\"data-vacancy-id\", vacancyId);\r\n $(\"#confirmDuplicateVacancy\").modal(\"show\");\r\n });\r\n },\r\n BindStaffTypeDropdownFunctionality: function () {\r\n //If the vacancy is not closed do not allow them to click archive\r\n $(\"#SelectedStaffTypeUniqueId\").on(\"change\",\r\n function (index, value) {\r\n app.VacancyList.SetStaffTypeDropDowns();\r\n });\r\n },\r\n BulkActionGrid: function () {\r\n\r\n function checkCheckboxes() {\r\n if ($(\"input:checkbox:checked\").length > 0) {\r\n\r\n $(\"#btnBulkReOpen\").prop(\"disabled\", false);\r\n $(\"#btnBulkClose\").prop(\"disabled\", false);\r\n $(\"#btnBulkArchive\").prop(\"disabled\", false);\r\n }\r\n else {\r\n $(\"#btnBulkReOpen\").prop(\"disabled\", true);\r\n $(\"#btnBulkClose\").prop(\"disabled\", true);\r\n $(\"#btnBulkArchive\").prop(\"disabled\", true);\r\n }\r\n }\r\n\r\n $(document).on(\"component-bind-view-mode-complete-BulkActionGrid\",\r\n function () {\r\n $(\".BulkUpdateCheckbox, #gridSelectAllBulkUpdate\").on(\"change\",\r\n function () {\r\n checkCheckboxes();\r\n });\r\n\r\n checkCheckboxes();\r\n\r\n // show/hide the proper bulk action buttons based on the selected vacancy status\r\n\r\n // open: show close button\r\n // closed: show re-open and archive buttons\r\n // archived: do not show either button\r\n\r\n var status = $(\"#SelectedVacancyStatus option:selected\").text();\r\n\r\n if (status === \"Open\") {\r\n $(\"#btnBulkReOpen\").hide();\r\n $(\"#btnBulkClose\").show();\r\n $(\"#btnBulkArchive\").hide();\r\n } else if (status === \"Closed\") {\r\n $(\"#btnBulkReOpen\").show();\r\n $(\"#btnBulkClose\").hide();\r\n $(\"#btnBulkArchive\").show();\r\n } else if (status === \"Archived\") {\r\n $(\"#btnBulkReOpen\").hide();\r\n $(\"#btnBulkClose\").hide();\r\n $(\"#btnBulkArchive\").hide();\r\n }\r\n });\r\n\r\n app.page.components[\"BulkActionGrid\"][0].refreshGrid();\r\n\r\n $(\"#btnBulkReOpen, #btnBulkClose, #btnBulkArchive\").on(\"click\",\r\n function (e) {\r\n\r\n var buttonId = e.target.getAttribute(\"id\");\r\n $(\"#confirmBulkActionButton\").attr(\"data-action\", buttonId);\r\n\r\n // show the modal\r\n $(\"#confirmBulkActionModal\").modal(\"show\");\r\n\r\n\r\n $(\"#confirmBulkActionButton\").on(\"click\",\r\n function () {\r\n var action = $(\"#confirmBulkActionButton\").attr(\"data-action\");\r\n // util.console.log(\"action: \" + action);\r\n\r\n var vacancyIds = $(\"input:checked:not(#gridSelectAllBulkUpdate)\").map(function () {\r\n return this.value;\r\n }).get();\r\n\r\n // util.console.log(vacancyIds);\r\n\r\n var url = \"\";\r\n\r\n if (action === \"btnBulkReOpen\") {\r\n url = \"/Employer/Vacancy/BulkActionReOpen\";\r\n } else if (action === \"btnBulkClose\") {\r\n url = \"/Employer/Vacancy/BulkActionClose\";\r\n } else if (action === \"btnBulkArchive\") {\r\n url = \"/Employer/Vacancy/BulkActionArchive\";\r\n }\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: { vacancyIds: vacancyIds },\r\n success: function (data) {\r\n toastr.success(\"Success!\");\r\n app.page.components[\"BulkActionGrid\"][0].refreshGrid();\r\n $(\"#confirmBulkActionModal\").modal(\"hide\");\r\n\r\n // remove button event handler to prevent duplicate handlers being created\r\n $(\"#confirmBulkActionButton\").off(\"click\");\r\n },\r\n error: function (data) {\r\n toastr.error(\"There was an error with the bulk update. Please try again.\");\r\n $(\"#confirmBulkActionButton\").off(\"click\");\r\n }\r\n });\r\n });\r\n });\r\n }\r\n };\r\n\r\n return vacancies;\r\n }()\r\n);","app.Duplicate = (\r\n function () {\r\n var dupe = {\r\n //Index Page\r\n Init: function () {\r\n $(\"#duplicateVacancyButton\").on(\"click\", function () {\r\n var id = $(this).attr(\"data-vacancy-id\");\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/Employer/Vacancy/Duplicate\",\r\n data: {\r\n id: 0,\r\n duplicateId: id,\r\n fromAddPage: false\r\n },\r\n success: function (response) {\r\n if (response.success) {\r\n var url = \"/Employer/Vacancy/EditDuplicate\";\r\n window.location.href = url;\r\n } else {\r\n console.error(\"Error duplicating vacancy:\", response.message);\r\n }\r\n },\r\n error: function (xhr, status, error) {\r\n // Handle error\r\n console.error(\"Error duplicating vacancy:\", status, error);\r\n }\r\n });\r\n });\r\n }\r\n };\r\n return dupe;\r\n }()\r\n);","app.ContactUs = (\r\n function () {\r\n var contactUs = {\r\n Init: function(inputMessage) {\r\n\r\n // app.ContactUs.ReCaptcha();\r\n\r\n // var followUpMessage = \"\";\r\n // if (inputMessage != null && inputMessage.length > 0) {\r\n // followUpMessage = inputMessage;\r\n // }\r\n\r\n // if (followUpMessage.length > 0) {\r\n // $(\".form-row\").removeClass(\"hidden\").addClass(\"hidden\");\r\n // }\r\n\r\n // $(\"#selected-issue\").change(function() {\r\n // if ($(\"#selected-issue option:selected\").text() === \"Feature Request - Employer User\") {\r\n // $(\"#feature-message\").removeClass(\"hidden\");\r\n // } else {\r\n // $(\"#feature-message\").removeClass(\"hidden\").addClass(\"hidden\");\r\n // }\r\n // });\r\n\r\n // var encodedMailto = \"\";\r\n // $(\"#txtFirstName, #txtLastName, #txtEmail, #selected-issue, #issue-description\").on(\"keyup change\",\r\n // function () {\r\n // var firstName = $(\"#txtFirstName\").val();\r\n // var lastName = $(\"#txtLastName\").val();\r\n // var subject = \"[\" + $(\"#selected-issue option:selected\").text() + \"] \" + firstName;\r\n // if (lastName != null && lastName !== \"\") {\r\n // subject = subject + \" \" + lastName;\r\n // }\r\n // var userEmail = $(\"#txtEmail\").val();\r\n // var issueDescription = $(\"#issue-description\").val();\r\n\r\n // // generate mailto link\r\n // var mailto = \"mailto:\" + $(\"#hdnSupportEmail\").val() + \"?subject=\" + subject + \"&body=\";\r\n // if (userEmail != null && userEmail !== \"\") {\r\n // mailto = mailto + \"WECAN Email: \" + userEmail + \"\\r\\n\\r\\n\";\r\n // }\r\n // mailto = mailto + issueDescription;\r\n\r\n // encodedMailto = encodeURI(mailto);\r\n // });\r\n\r\n // $(\"#btnContinue\").on(\"click\",\r\n // function () {\r\n // var form = $(\"#frmEmail\");\r\n\r\n // //validate form\r\n // $.validator.unobtrusive.parse(form);\r\n // if (form.valid()) {\r\n // $(\"#lnkMailto\").attr(\"href\", encodedMailto);\r\n\r\n // // trigger with a click() instead of changing the href\r\n // // because we want to stay on the same page\r\n // $(\"#lnkMailto\")[0].click();\r\n // toastr.success(\"Success! Please continue in your email client.\");\r\n // } else {\r\n // toastr.error(\"Please fix errors before continuing.\");\r\n // }\r\n // });\r\n\r\n\r\n }\r\n\r\n //ReCaptcha: function() {\r\n // var reCaptchaSiteKey = $(\"#GoogleCaptchaToken\").data(\"recaptcha-site-key\");\r\n // grecaptcha.ready(function() {\r\n // grecaptcha.execute(reCaptchaSiteKey, { action: \"submit\" }).then(function(token) {\r\n // $(\"#GoogleCaptchaToken\").val(token);\r\n // });\r\n // });\r\n //}\r\n };\r\n\r\n return contactUs;\r\n }()\r\n);","app.Home = (\r\n function () {\r\n var home = {\r\n // All pages - used for initializing\r\n Footer: function () {\r\n $(\"#btnSubmitFeedback\").click(function (e) {\r\n // prevent default form submit\r\n e.preventDefault();\r\n\r\n $(\"#divFeedbackLoadingIcon\").show();\r\n\r\n // get other data from browser\r\n $(\"#hdnFeedbackUserAgent\").val(window.navigator.userAgent);\r\n\r\n const windowInnerWidth = window.innerWidth;\r\n const windowInnerHeight = window.innerHeight;\r\n $(\"#hdnFeedbackScreenSize\").val(windowInnerWidth + \" x \" + windowInnerHeight);\r\n\r\n $(\"#hdnFeedbackUrl\").val(window.location.href);\r\n\r\n var context = $(this);\r\n\r\n // submit form\r\n const url = \"/Home/SubmitFeedback\";\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: $(this).closest(\"form\").serialize(),\r\n success: function (data) {\r\n if (data.success) {\r\n // hide loading gif\r\n $(\"#divFeedbackLoadingIcon\").hide();\r\n // clear form fields\r\n $(\"#frmFeedback\").find(\"input[type=text], textarea\").val(\"\");\r\n $(\"#cbxFeedbackIsBug\").prop(\"checked\", false);\r\n //$(\"[data-role='feedback-form']\").html(data.view);\r\n //$(\"#uploader\").reset();\r\n $(\"#uploader\").empty();\r\n app.fileUploaders.Init(context.closest(\"form\"));\r\n $(\"#divFeedback\").modal(\"hide\");\r\n // show success message\r\n toastr.success(\"Feedback successfully sent. Thank you!\");\r\n } else {\r\n $(\"#divFeedbackLoadingIcon\").hide();\r\n toastr.error(\"There was an error while submitting your feedback: \" + data.responseText);\r\n }\r\n },\r\n error: function (data) {\r\n $(\"#divFeedbackLoadingIcon\").hide();\r\n toastr.error(\"There was an error sending your feedback. Please try again.\");\r\n }\r\n });\r\n\r\n // TODO: maybe implement this someday - apetz2\r\n // I had a lot of issues rendering pages that were a little more complex\r\n // not worth the time at the moment, but might be neat to finish up another time\r\n\r\n //const file = $(\"#uplScreenshot\").prop(\"files\")[0];\r\n\r\n //var screenshot;\r\n //getImageData(file);\r\n\r\n //function getImageData(inputFile) {\r\n // if (inputFile) {\r\n // var reader = new FileReader();\r\n // reader.readAsDataURL(inputFile);\r\n // reader.onload = function (evt) {\r\n // screenshot = evt.target.result;\r\n // }\r\n // reader.onerror = function (evt) {\r\n // $(\"#divFeedbackLoadingIcon\").hide();\r\n // toastr.error(\"There was an error reading your screenshot. Please try again.\");\r\n // return null;\r\n // }\r\n // }\r\n //}\r\n\r\n //util.console.log(screenshot);\r\n\r\n //html2canvas(document.body, {\r\n // ignoreElements: function (element) {\r\n // // remove all elements with a loading icon from the screenshot\r\n // if (element.classList.contains(\"feedback-form-loading-icon\") ||\r\n // element.classList.contains(\"loading\") ||\r\n // element.classList.contains(\"component-loading\") ||\r\n // element.classList.contains(\"autocomplete-ajax-loading\") ||\r\n // element.classList.contains(\"vis-loading\") ||\r\n // element.classList.contains(\"accordion\") ||\r\n // element.classList.contains(\"reveal-overlay\")) {\r\n // return true;\r\n // }\r\n // }\r\n //}).then(function (canvas) {\r\n // var screenshot = canvas.toDataURL();\r\n // screenshot = screenshot.replace(\"data:image/png;base64,\", \"\");\r\n //});\r\n });\r\n }\r\n };\r\n\r\n return home;\r\n }()\r\n);","//Javascript for the WECAN Admin Report\r\napp.Report = (\r\n function () {\r\n var report = {\r\n Index: function () {\r\n //unlock account button\r\n $(document).on('click', '[data-role=\"run-report\"]', function () {\r\n var form = $(this).closest('form');\r\n //validate form\r\n $.validator.unobtrusive.parse(form);\r\n if (!form.valid()) {\r\n //Give focus to the first error\r\n var firstError = $('#' + $('.field-validation-error', form).data('valmsg-for'));\r\n if (firstError.length) {\r\n $('html, body').animate({\r\n scrollTop: firstError.offset().top - 50\r\n }, 500);\r\n }\r\n return;\r\n }\r\n\r\n var url = $(form).attr('action');\r\n $.post(url, $(form).serialize())\r\n .done(function (results) {\r\n //refresh grid\r\n $(form).closest('.row').find('[data-role=\"report-result\"]').html(results.data);\r\n })\r\n .fail(function () {\r\n toastr.error(\"Error!\", \"There was an error with your request. Please try again.\");\r\n });\r\n });\r\n },\r\n Lockout: function () {\r\n //unlock account button\r\n $(document).on('click keyup', \"[data-label='Unlock'] button\", function () {\r\n var userId = $(this).closest('tr').find(\"input[type='hidden']\").val();\r\n $.post(\"/Account/UnlockAccount/\" + userId)\r\n .done(function () {\r\n //refresh grid\r\n app.page.componentActions.report[0].triggerAction(\"filtergrid\");\r\n })\r\n .fail(function () {\r\n toastr.error(\"Error!\", \"There was an error with your request. Please try again.\");\r\n });\r\n });\r\n\r\n //reset attempts button\r\n $(document).on('click keyup', \"[data-label='ResetAttempts'] button\", function () {\r\n var userId = $(this).closest('tr').find(\"input[type='hidden']\").val();\r\n $.post(\"/Account/ResetAttempts/\" + userId)\r\n .done(function () {\r\n //refresh grid\r\n app.page.componentActions.report[0].triggerAction(\"filtergrid\");\r\n })\r\n .fail(function () {\r\n toastr.error(\"Error!\", \"There was an error with your request. Please try again.\");\r\n });\r\n });\r\n\r\n //bulk unlock\r\n $(document).on('click keyup', \"#bulkUnlockButton\", function () {\r\n var ids = [];\r\n //Get all checked checkboxes\r\n var checked = $(\".BulkUpdate:checked\");\r\n //get ids for those rows and put in array\r\n checked.each(function(index, element) {\r\n var userId = $(element).closest('tr').find(\"input[type='hidden']\").val();\r\n ids.push(userId);\r\n });\r\n\r\n $.post(\"/Account/BulkUnlock/\", { ids: ids })\r\n .done(function () {\r\n //refresh grid\r\n app.page.componentActions.report[0].triggerAction(\"filtergrid\");\r\n })\r\n .fail(function () {\r\n toastr.error(\"Error!\", \"There was an error with your request. Please try again.\");\r\n });\r\n });\r\n },\r\n AdminIndex: function () {\r\n app.Report.Index();\r\n\r\n $(\"path\").click(function () {\r\n var cesaNumber = $(this).closest(\"g.cesa-group-item\").data(\"cesa-unique-id\");\r\n app.Report.SelectDistrictsByCesa(cesaNumber);\r\n });\r\n\r\n $(\"#fstSelectedDistrictIds\").find(\"input\").click(function () {\r\n app.Report.SetHiddenDistrictList();\r\n\r\n });\r\n $(\"#SelectedDistrictIds-all\").click(function() {\r\n $(\".selected-district-ids\").val(\"\");\r\n });\r\n },\r\n SelectDistrictsByCesa: function (cesaId) {\r\n $(\"#district-selector\").removeClass(\"hidden\").addClass(\"hidden\");\r\n $(\"#district-selector-spinner\").removeClass(\"hidden\");\r\n\r\n var postData = { id: cesaId };\r\n var theUrl = app.page.appPath + \"/Admin/Report/GetDistrictsByCesa\";\r\n var districtIdArray = \"\";\r\n\r\n // Uncheck all district checkboxes.\r\n $(\"#fstSelectedDistrictIds\").find(\"input:checked\").click();\r\n\r\n $.ajax({\r\n url: theUrl,\r\n type: \"POST\",\r\n data: postData,\r\n success: function (response) {\r\n for (var distId of response.split(\",\")) {\r\n $(\"#SelectedDistrictIds-\" + distId).click();\r\n }\r\n },\r\n error: function (theError) {\r\n //display toast on error\r\n toastr.error(\"There was an error retrieving districts for CESA \" + cesaId + \". Please try again and contact support if the problem persists.\");\r\n },\r\n complete: function () {\r\n $(\"#district-selector-spinner\").removeClass(\"hidden\").addClass(\"hidden\");\r\n $(\"#district-selector\").removeClass(\"hidden\");\r\n }\r\n });\r\n },\r\n SetHiddenDistrictList: function() {\r\n $(\".selected-district-ids\").val(\"\");\r\n\r\n var markedCheckbox = $(\"#fstSelectedDistrictIds :input:checked\");\r\n for (var checkbox of markedCheckbox) {\r\n $(\".selected-district-ids\").val($(\".selected-district-ids\").val() + checkbox.value + \",\");\r\n }\r\n },\r\n SkywardDataExport: function () {\r\n $(document).on('component-filter-grid-completed', function () { app.Report.SkywardDataExportDownloadButton(); });\r\n $(document).on('change', '[name=\"ApplicationId\"]', function () { app.Report.SkywardDataExportDownloadButton(); });\r\n },\r\n SkywardDataExportDownloadButton: function () {\r\n var downloadButton = $('[data-role=\"download-csv\"]');\r\n if ($('[name=\"ApplicationId\"]:checked').length > 0) {\r\n $(downloadButton).prop('disabled', false);\r\n }\r\n else {\r\n $(downloadButton).prop('disabled', true);\r\n }\r\n }\r\n };\r\n\r\n return report;\r\n }()\r\n);","app.Document = (\r\n function () {\r\n var doc = {\r\n Index: function () {\r\n $(document).on('click', '[data-button-type=\"document-add-button\"]', function () {\r\n var buttonId = $(this).attr('id');\r\n var target = $(this).data('component-action-target');\r\n\r\n $.ajax(\"/document/VerifyCanUploadDocument\")\r\n .done(function (results) {\r\n // If result is true, there is room for more documents, if false, max documents uploaded\r\n if (results == true) {\r\n return true;\r\n } else {\r\n $('[data-component-target=\"' + target + '\"]').find(':first-child').first().remove();\r\n toastr.error(\"Too many documents added. Please delete one before continuing\");\r\n return false;\r\n }\r\n })\r\n .fail(function () { toastr.error(\"Unable to add document\"); });\r\n });\r\n $(document).on('component-save-complete-Document', function () {\r\n window.location.reload();\r\n });\r\n //hide the text box instructions that are specific to the application but exist in the shared view here\r\n $(\".document-instruction\").hide();\r\n },\r\n Application: function () {\r\n $(\"*[data-document-selected = 'true' i]\").each(function () {\r\n $(this).closest(\".component-view\").addClass(\"border border-primary\");\r\n });\r\n\r\n $(document).on('click', '[data-button-type=\"document-add-button\"]', function () {\r\n var buttonId = $(this).attr('id');\r\n var target = $(this).data('component-action-target');\r\n\r\n $.ajax(\"/document/VerifyCanUploadDocument\")\r\n .done(function (results) {\r\n // If result is true, there is room for more documents, if false, max documents uploaded\r\n if (results == true) {\r\n return true;\r\n } else {\r\n $('[data-component-target=\"' + target + '\"]').find(':first-child').first().remove();\r\n toastr.error(\"Too many documents added. Please delete one before continuing\");\r\n return false;\r\n }\r\n })\r\n .fail(function () { toastr.error(\"Unable to add document\"); });\r\n });\r\n\r\n // variable to help prevent multiple clicks on select document\r\n var active = true;\r\n $(document).on('click', '[data-role=\"select-document\"]', function () {\r\n\r\n // if active is false, we are currently running the function, so return\r\n if (!active) {\r\n return;\r\n }\r\n\r\n active = false;\r\n\r\n //update database\r\n var target = $(this).data('target');\r\n var buttonId = $(this).attr('id');\r\n var that = $(this);\r\n\r\n var currentHtml = that.html();\r\n that.html('
');\r\n\r\n var applicationId = app.page.id;\r\n $.post(\"/document/SelectApplicationDocument\", { id: $(this).data('document-id'), applicationId: applicationId })\r\n .done(function (results) {\r\n if (results.ValidRequest) {\r\n if (results.Selected) {\r\n $(\"#\" + target).closest(\".component-view\").addClass(\"border border-primary\");\r\n $(\"#\" + buttonId).html('');\r\n $(\"#\" + buttonId).attr(\"aria-label\", \"Checkbox to remove document from application\");\r\n // notify user and trigger event\r\n toastr.success(\"Document selected\");\r\n $(document).trigger(\"document-selected\", this);\r\n } else {\r\n $(\"#\" + target).closest(\".component-view\").removeClass(\"border border-primary\");\r\n $(\"#\" + buttonId).html('');\r\n $(\"#\" + buttonId).attr(\"aria-label\", \"Checkbox to select document for application\");\r\n\r\n // notify user and trigger event\r\n toastr.success(\"Document unselected\");\r\n $(document).trigger(\"document-selected\", this);\r\n }\r\n } else {\r\n that.html(currentHtml);\r\n toastr.error(\"Unable to select this document. Please reload the page and try again or contact support.\");\r\n }\r\n active = true;\r\n })\r\n .fail(function () {\r\n that.html(currentHtml);\r\n toastr.error(\"Unable to select this document. Please contact support.\");\r\n active = true;\r\n });\r\n });\r\n }\r\n }\r\n return doc;\r\n }()\r\n);","app.RatingCommentHistoryModal = (function () {\r\n // Tracks whether the user has started typing a comment\r\n var commentsStarted = false;\r\n // Temporarily disables the close warning when necessary\r\n var bypassWarning = true;\r\n var remberedBypassWarning = false;\r\n\r\n var modal = {\r\n Init: function () {\r\n // Run initial setup, including setting up dropdown behavior\r\n app.RatingCommentHistoryModal.SetCommentType();\r\n\r\n // When new dropdowns are dynamically added, reinitialize comment type handling\r\n $(document).on('component-bind-edit-mode-complete-Comments', function () {\r\n app.RatingCommentHistoryModal.SetCommentType();\r\n });\r\n $(document).on('component-bind-view-mode-complete-ReviewMatrix', function () {\r\n app.RatingCommentHistoryModal.DimmerSwitch();\r\n });\r\n\r\n // Handles opening the rating/comment history modal\r\n // Supports both click and keyboard interaction (Enter/Space)\r\n $(document).on(\"click keydown\", \"[data-rating-comment-history]\", function (e) {\r\n if (e.type === 'keydown' && !(e.key === 'Enter' || e.key === ' ')) {\r\n return;\r\n }\r\n app.RatingCommentHistoryModal.DimmerSwitch();\r\n\r\n var appId = $(this).data(\"rating-comment-history-application-id\");\r\n var userId = $(this).data(\"rating-comment-history-user-id\");\r\n var url = $(this).data(\"rating-comment-history-url\");\r\n var modalTarget = $(this).data(\"modal-body-target\");\r\n var modalBody = $(\"[data-modal-body='\" + modalTarget + \"']\");\r\n var modalId = $(this).data(\"open\");\r\n\r\n // Show loading indicator while fetching data\r\n $(modalBody).html('
');\r\n $(\"#\" + modalId).modal(\"show\");\r\n\r\n // Fetch comment history via AJAX request\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: { applicationId: appId, userId: userId },\r\n success: function (data) {\r\n // Load the comment history content\r\n $(modalBody).html(data);\r\n },\r\n error: function () {\r\n $(\"#\" + modalId).modal(\"hide\");\r\n toastr.error(\"An error occurred accessing your rating/comment history. Please try again.\");\r\n }\r\n });\r\n });\r\n\r\n // Handles opening the \"All Rating Comment History\" modal\r\n // Same keyboard accessibility support as above (Enter/Space)\r\n $(document).on(\"click keydown\", \"[data-all-rating-comment-history]\", function (e) {\r\n if (e.type === 'keydown' && !(e.key === 'Enter' || e.key === ' ')) {\r\n return;\r\n }\r\n app.RatingCommentHistoryModal.DimmerSwitch();\r\n\r\n var applicantId = $(this).data(\"all-rating-comment-history-applicant-id\");\r\n var currentApplicationId = $(this).data(\"all-rating-comment-history-application-id\");\r\n var url = $(this).data(\"all-rating-comment-history-url\");\r\n var modalTarget = $(this).data(\"modal-body-target\");\r\n var modalBody = $(\"[data-modal-body='\" + modalTarget + \"']\");\r\n var modalId = $(this).data(\"open\");\r\n\r\n // Reset modal content and show loading indicator\r\n $(modalBody).html(null);\r\n $(modalBody).html('
');\r\n $(\"#\" + modalId).modal(\"show\");\r\n\r\n // Fetch all comments history via AJAX\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: { applicantId: applicantId, currentApplicationId: currentApplicationId },\r\n success: function (data) {\r\n // Load the content\r\n $(modalBody).html(data);\r\n },\r\n error: function () {\r\n $(\"#\" + modalId).modal(\"hide\");\r\n toastr.error(\"An error occurred accessing comment history. Please try again.\");\r\n }\r\n });\r\n });\r\n\r\n app.RatingCommentHistoryModal.Modal();\r\n },\r\n\r\n // Handles comment type dropdown interactions\r\n SetCommentType: function () {\r\n $(\"select[name='SelectedCommentType']\").on(\"change\", function () {\r\n app.RatingCommentHistoryModal.HandleCommentTypeChange(this);\r\n });\r\n // Allow certain buttons to close the modal without triggering the warning\r\n // Track if a user starts typing in a comment field\r\n $(\"#applicant-comments button[data-component-role='RemoveButton'], \" +\r\n \"#applicant-comments button[data-component-role='CancelButton'], \" +\r\n \"#applicant-comments button[data-component-role='SaveButton']\").on(\"click keydown\", function () {\r\n bypassWarning = true;\r\n });\r\n },\r\n\r\n // Handles the modal interactions for applicant comments\r\n Modal: function () {\r\n $(document).on('bind-comments-modal', function () {\r\n $(\"button[data-application-id]\").off(\"click keyup\").on(\"click keyup\", function () {\r\n var button = $(this);\r\n var applicationId = button.data(\"application-id\");\r\n\r\n var $employerCommentsDiv = $(\"div[data-component-type='EmployerComments']\");\r\n\r\n // Set the application ID for the comments section\r\n $employerCommentsDiv\r\n .data(\"component-id\", applicationId)\r\n .attr(\"data-component-id\", applicationId);\r\n\r\n // Load the employer comments into the view\r\n app.page.components[\"EmployerComments\"][0].startViewMode(true, { id: applicationId });\r\n\r\n $(\"#applicant-comments\").modal();\r\n });\r\n });\r\n\r\n // Track if a user starts typing in a comment field\r\n $(document).on(\"input\", \"textarea[name='Comment']\", function () {\r\n commentsStarted = true;\r\n bypassWarning = false;\r\n })\r\n\r\n // Prevent modal from closing if user started typing\r\n $(\"#applicant-comments\").on(\"hide.bs.modal\", function (event) {\r\n if (commentsStarted && !bypassWarning) {\r\n if (!window.confirm(\"Any unsaved comments may be lost. Are you sure you want to leave?\")) {\r\n // Stop modal from closing\r\n event.preventDefault();\r\n }\r\n }\r\n commentsStarted = false;\r\n bypassWarning = true;\r\n });\r\n },\r\n\r\n // Temporarily hides one modal and restores it after the second modal closes\r\n DimmerSwitch: function () {\r\n const modal = $(\"#allRatingCommentHistory\");\r\n const rmModals = $(\".reviewMatrixGrid\");\r\n const applicantComments = $(\"#applicant-comments\");\r\n\r\n modal.on(\"show.bs.modal\", function () {\r\n // Avoid close warning when hiding\r\n remberedBypassWarning = bypassWarning;\r\n if (commentsStarted) {\r\n bypassWarning = true;\r\n }\r\n applicantComments.modal(\"hide\");\r\n });\r\n\r\n modal.on(\"hidden.bs.modal\", function () {\r\n bypassWarning = remberedBypassWarning;\r\n remberedBypassWarning = false;\r\n applicantComments.modal(\"show\");\r\n });\r\n\r\n if (rmModals.length > 0) {\r\n\r\n for (var i = 0; i < rmModals.length; i++) {\r\n var id = \"#\" + rmModals[i].id;\r\n; modal.on(\"show.bs.modal\", function () {\r\n // Avoid close warning when hiding\r\n remberedBypassWarning = bypassWarning;\r\n if (commentsStarted) {\r\n bypassWarning = true;\r\n }\r\n $(id).modal(\"hide\");\r\n });\r\n\r\n modal.on(\"hidden.bs.modal\", function () {\r\n bypassWarning = remberedBypassWarning;\r\n remberedBypassWarning = false;\r\n $(id).modal(\"show\");\r\n });\r\n }\r\n }\r\n },\r\n\r\n // Handles logic for changing comment type dropdown\r\n HandleCommentTypeChange: function (dropdown) {\r\n\r\n const form = $(dropdown).closest(\"form\");\r\n const affiliationDiv = $(form).find(\".affiliationDiv\");\r\n const commentDiv = $(form).find(\".commentDiv\");\r\n const selectedOption = $(dropdown).find(\":selected\");\r\n const typeId = $(selectedOption).val();\r\n\r\n // Always show commentDiv when creating a new comment\r\n const commentId = $(form).find(\"input[name='Id']\").val();\r\n if (!commentId || commentId === \"0\") {\r\n $(commentDiv).show();\r\n }\r\n\r\n // Show or hide affiliationDiv based on the selected comment type\r\n if (typeId === \"district-comment\") {\r\n $(affiliationDiv).show();\r\n } else {\r\n $(affiliationDiv).hide();\r\n }\r\n\r\n // If \"application-comment\" is selected, clear all checkboxes in affiliationDiv\r\n if (typeId === \"application-comment\") {\r\n $(affiliationDiv).find(\"input[type='checkbox']\").prop(\"checked\", false);\r\n }\r\n }\r\n };\r\n\r\n return modal;\r\n})();","app.Timeout = (\r\n function () {\r\n var timeout = {\r\n //Init is used to start the timer modal popup.\r\n Init: function () {\r\n $('#modalAutoLogout').each(function () {\r\n var validationFrequency = $(this).data('timeout-frequency') * 1000;\r\n var timeoutDurationDefault = ($(this).data('timeout-duration-default') * 60000) - validationFrequency;//subtract time to remove mistimed identity validation and convert to milliseconds\r\n var timeoutDurationTrusted = ($(this).data('timeout-duration-trusted') * 60000) - validationFrequency;//subtract time to remove mistimed identity validation and convert to milliseconds\r\n var trustedCookieName = $(this).data('timeout-trusted-cookie-name');\r\n var timeoutDuration = !$.cookie(trustedCookieName) ? timeoutDurationDefault : timeoutDurationTrusted;\r\n app.Page.timeoutWarningMinutes = $(this).data('timeout-warning');\r\n var timeoutWarning = app.Page.timeoutWarningMinutes * 60000;//convert to milliseconds\r\n var warningTimeout = timeoutWarning;\r\n var timoutNow = timeoutDuration - warningTimeout;\r\n var warningTimerID, timeoutTimerID;\r\n app.Page.intervalTimerID = null;\r\n\r\n function startTimer() {\r\n // window.setTimeout returns an Id that can be used to start and stop a timer\r\n warningTimerID = window.setTimeout(warningInactive, timoutNow);\r\n }\r\n\r\n function warningInactive() {\r\n window.clearTimeout(warningTimerID);\r\n timeoutTimerID = window.setTimeout(IdleTimeout, warningTimeout);\r\n if (app.Page.intervalTimerID) {\r\n clearTimeout(app.Page.intervalTimerID);\r\n }\r\n app.Page.intervalTimerID = app.Timeout.StartCountdown(app.Page.timeoutWarningMinutes);\r\n $('#modalAutoLogout').modal('show');\r\n }\r\n\r\n function resetTimer() {\r\n window.clearTimeout(timeoutTimerID);\r\n window.clearTimeout(warningTimerID);\r\n window.clearTimeout(app.Page.intervalTimerID);\r\n app.Timeout.ClearCountdown();\r\n startTimer();\r\n }\r\n\r\n // Logout the user.\r\n function IdleTimeout() {\r\n $('.modal-body', '#modalAutoLogout').html('

If this is your only tab you are working in, you have been automatically logged out and any unsaved data is lost.

');\r\n $('#btnStayLoggedIn').text(\"Close\");\r\n }\r\n\r\n function setupTimers() {\r\n startTimer();\r\n }\r\n\r\n $(document).on('click', '#btnStayLoggedIn', function () {\r\n $('#modalAutoLogout').modal('hide');\r\n //send ajax post to stay logged in\r\n $.post(\"/Account/StayLoggedIn\")\r\n .fail(function () {\r\n window.location = \"/?ReturnUrl=\" + encodeURIComponent(window.location.pathname);\r\n })\r\n .done(function ()\r\n {\r\n if ($('#btnStayLoggedIn').text() === \"Close\")\r\n {\r\n //Since the timing isn't 100% it is possible that \"Close\" button and the cookie werent in sync\r\n //and the cookie was still valid, resulting in a successful update of the cookie from the StayLoggedIn call. \r\n //If this is the case we we want to make sure to change the language of the modal back to default. \r\n $('.modal-body', '#modalAutoLogout').html(\"

If this is your only tab, you will be logged out automatically soon: \" + app.Page.timeoutWarningMinutes + \":00.

\");\r\n $('#btnStayLoggedIn').text(\"Stay Logged In\");\r\n }\r\n resetTimer();\r\n toastr.success(\"Success: you are still logged in.\");\r\n });\r\n });\r\n\r\n setupTimers();\r\n });\r\n },\r\n StartCountdown: function (minutesIn) {\r\n var timer2 = minutesIn + \":00\";\r\n var interval = setInterval(function () {\r\n var timer = timer2.split(':');\r\n //by parsing integer, I avoid all extra string processing\r\n var minutes = parseInt(timer[0], 10);\r\n var seconds = parseInt(timer[1], 10);\r\n --seconds;\r\n minutes = (seconds < 0) ? --minutes : minutes;\r\n seconds = (seconds < 0) ? 59 : seconds;\r\n seconds = (seconds < 10) ? '0' + seconds : seconds;\r\n //minutes = (minutes < 10) ? minutes : minutes;\r\n $('#divAutoLogoutCountdown').html(minutes + ':' + seconds);\r\n if (minutes < 0) clearInterval(interval);\r\n //check if both minutes and seconds are 0\r\n if ((seconds <= 0) && (minutes <= 0)) clearInterval(interval);\r\n timer2 = minutes + ':' + seconds;\r\n }, 1000);\r\n return interval;\r\n },\r\n ClearCountdown: function () {\r\n $('#divAutoLogoutCountdown').html(app.Page.timeoutWarningMinutes + \":00\");\r\n }\r\n }\r\n return timeout;\r\n }()\r\n);","//Javascript for WECAN license filter\r\napp.LicenseFilter = (\r\n function () {\r\n var filter = {\r\n Init: function () {\r\n app.LicenseFilter.GetSchwifty();\r\n $(document).on(\"component-bind-edit-mode-complete\", function () {\r\n app.LicenseFilter.GetSchwifty();\r\n });\r\n },\r\n GetSchwifty: function () {\r\n $(\"[data-license-classification-filter]\").on(\"change\", function () {\r\n //Get selected classification from filter dropdown\r\n var selected = $(this).find(\":selected\").attr(\"value\");\r\n //Get the target\r\n var targetName = $(this).data(\"license-classification-filter\");\r\n //Check for dropdown target\r\n var targetElement = $(\"[Name='\" + targetName + \"']\");\r\n var optgroups = $(targetElement).find(\"optgroup\");\r\n\r\n //If dropdown then...\r\n if (optgroups.length) {\r\n for (var i = 0; i < optgroups.length; i++) {\r\n if (selected != null && selected != \"undefined\" && selected != \"\") {\r\n $(targetElement).prop('selectedIndex', 0);\r\n if ($(optgroups[i]).attr(\"label\") === selected) {\r\n $(optgroups[i]).show();\r\n }\r\n else {\r\n $(optgroups[i]).hide();\r\n }\r\n }\r\n else {\r\n $(optgroups[i]).show();\r\n }\r\n }\r\n }\r\n //If select many then...\r\n else {\r\n targetElement = $(\"fieldset#fst\" + targetName);\r\n var selectgroups = $(targetElement).find(\".select-many-group-header\");\r\n for (var i = 0; i < selectgroups.length; i++) {\r\n if (selected != null && selected != \"undefined\" && selected != \"\") {\r\n\r\n if ($(selectgroups[i]).text() === selected) {\r\n $(selectgroups[i]).closest(\"[data-role='select-many-group']\").show();\r\n }\r\n else {\r\n $(selectgroups[i]).closest(\"[data-role='select-many-group']\").hide();\r\n }\r\n }\r\n else {\r\n $(selectgroups[i]).closest(\"[data-role='select-many-group']\").show();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n return filter;\r\n }()\r\n);","app.PersistentGrid = (\r\n function () {\r\n var member = {\r\n Init: function (tableName) {\r\n\r\n //We must run this line of code to make sure that\r\n //filters persist when they push the back button \r\n var grids = app.page.components[tableName];\r\n var previousPageNumber = $(\"#LastPageNumber\").val();\r\n var previousPageSize = $(\"#LastPageSize\").val();\r\n var previousSortField = $(\"#LastSortField\").val();\r\n var previousIsSortAscending = $(\"#LastIsSortAscending\").val();\r\n\r\n $(grids).each(function () {\r\n this.refreshGrid(previousPageNumber, previousPageSize, previousSortField, previousIsSortAscending);\r\n });\r\n\r\n $(document).on(\"component-bind-view-mode-complete\", function (e) {\r\n //If this is less than one, than we know that there is only one page\r\n //of results, so make sure to change any remebered page numbers since\r\n //depending on the order there could be one stored in this scenario\r\n\r\n if ($(\"ul.pagination\").length < 1) {\r\n $(\"#LastPageNumber\").val(1);\r\n }\r\n\r\n //Rememeber Page Number\r\n $(\"div[data-component-type='\" + tableName + \"'] li > a[data-role='grid-page-action']\").on(\"click\", function (e) {\r\n var selectedPageNumber = $(this).data(\"page-value\");\r\n $(\"#LastPageNumber\").val(selectedPageNumber);\r\n });\r\n\r\n //Remember Page Size\r\n $(\"div[data-component-type='\" + tableName + \"'] select[name='PageSize']\").on(\"click\", function (e) {\r\n $(\"#LastPageSize\").val($(\"select[name='PageSize'] > option:selected\").val());\r\n });\r\n\r\n $(\"div[data-component-type='\" + tableName + \"'] a[data-role='sort-action']\").on(\"click\", function (e) {\r\n $(\"#LastIsSortAscending\").val($(this).hasClass(\"asc\"));\r\n $(\"#LastSortField\").val($(this).data(\"target\"));\r\n });\r\n });\r\n }\r\n };\r\n return member;\r\n}());","//Javascript for the WECAN Employer Area Signup functionality\r\napp.SavedVacancies = (\r\n function () {\r\n var vacancy = {\r\n Init: function () {\r\n app.SavedVacancies.AssignFunctionality();\r\n $(document).on('component-bind-view-mode-complete', function () { app.SavedVacancies.AssignFunctionality() });\r\n },\r\n AssignFunctionality: function () {\r\n $('[data-role=\"applicant-save-vacancy\"]').on('click', function () {\r\n //have the icon determine the state\r\n var icon = $(this).find('i');\r\n var shouldSave = false;\r\n if ($(icon).hasClass('fa-star-o')) {\r\n //clicked with empty star means we need to save it!\r\n shouldSave = true;\r\n }\r\n //udpate database\r\n $.post($(this).data('url'), { id: $(this).data('vacancy-id'), save: shouldSave })\r\n .done(function () {\r\n //update the ui\r\n if ($(icon).hasClass('fa-star')) {\r\n //clicked with a filled in star means we need to unsave it!\r\n $(icon).removeClass('fa-star');\r\n $(icon).addClass('fa-star-o');\r\n }\r\n else {\r\n //clicked with empty star means we need to save it!\r\n shouldSave = true;\r\n $(icon).addClass('fa-star');\r\n $(icon).removeClass('fa-star-o');\r\n }\r\n //notify user\r\n toastr.success(\"Vacancy saved successfully.\");\r\n })\r\n .fail(function () { toastr.error(\"Vacancy did not save correctly. Please try again.\"); });\r\n });\r\n }\r\n };\r\n\r\n return vacancy;\r\n }()\r\n);","app.SearchVacancies = (\r\n function () {\r\n var vacancy = {\r\n Init: function () {\r\n app.SavedVacancies.Init();\r\n app.ApplicantRegistration.CesaMapInit(true);\r\n },\r\n EmployerCesaFilter: function () {\r\n\r\n function containsNumber(stringList, numberList) {\r\n console.log('stringList:', stringList); \r\n var array = stringList.toString().split(',');\r\n\r\n for (var i = 0; i < numberList.length; i++) {\r\n if (array.indexOf(numberList[i]) !== -1) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n function filterEmployerSelectMany() {\r\n var selectedCesas = [];\r\n $(\"input[name='SelectedCESAIds']:checked\").each(function () {\r\n selectedCesas.push($(this).attr(\"value\"));\r\n });\r\n\r\n // don't run the following if there are no values in the array\r\n if (selectedCesas.length > 0) {\r\n $(\"input[name='SelectedEmployers']\").each(function () {\r\n\r\n var cesa = $(this).data(\"cesa\");\r\n var cesaList = \"\";\r\n if (cesa !== null && cesa != undefined) {\r\n var cesaString = cesa.toString();\r\n cesaList = cesaString.split(\",\");\r\n }\r\n\r\n if ($(this).attr(\"data-role\") !== \"selectall\") { // check this to make sure we don't hide the select all checkbox\r\n if (!containsNumber(cesaList, selectedCesas)) {\r\n $(this).prop(\"checked\", false);\r\n $(this).parent().css(\"display\", \"none\");\r\n\r\n // call the function to list out the selected options\r\n app.input.listSelectedSelectMany($(this).parent());\r\n } else {\r\n $(this).parent().css(\"display\", \"block\");\r\n\r\n }\r\n }\r\n });\r\n } else {\r\n // if the array is empty, then make sure that all of the employers are showing\r\n $(\"input[name='SelectedEmployers']:hidden\").each(function () {\r\n {\r\n $(this).parent().show();\r\n }\r\n });\r\n }\r\n }\r\n\r\n filterEmployerSelectMany();\r\n\r\n $(\"input[name='SelectedCESAIds']\").on(\"change\",\r\n function () {\r\n filterEmployerSelectMany();\r\n });\r\n }\r\n };\r\n\r\n return vacancy;\r\n }()\r\n);","app.Assessments = (\r\n function() {\r\n var assessments = {\r\n Failed: function () {\r\n //on document load refresh grid (mobile js requires this paradigm)\r\n app.page.components[\"FailedAssessmentsGrid\"][0].refreshGrid();\r\n\r\n $(document).on(\"component-bind-view-mode-complete-FailedAssessmentsGrid\", function()\r\n {\r\n $(\".reorderButton\").on(\"click\",\r\n function () {\r\n //Get the closest app id\r\n\r\n //get the tr\r\n var tr = $(this).closest(\"tr\");\r\n\r\n var id = $(tr).find('[name=\"Application.Index\"]').val();\r\n //submit the order\r\n app.Assessments.ReorderAssessment(id);\r\n });\r\n });\r\n\r\n },\r\n ReorderAssessment: function(appId) {\r\n var url = \"/Admin/Assessment/ReOrder\";\r\n var postData = { applicationId: appId };\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n data: postData,\r\n success: function(data) {\r\n toastr.success(\"Successfully ordered assessment.\");\r\n app.page.components[\"FailedAssessmentsGrid\"][0].refreshGrid();\r\n },\r\n error: function(data) {\r\n toastr.error(\r\n \"There was an error ordering the assessment. Please try again. Contact the WECAN technical team if the issue persists.\");\r\n }\r\n });\r\n }\r\n };\r\n return assessments;\r\n }()\r\n);","app.UserDetails =\r\n (function () {\r\n var details = {\r\n Init: function () {\r\n $(\"[data-role='copy-link']\").on(\"click keyup\",\r\n function () {\r\n $(this).closest(\".input-group\").find(\"input[type='text']\").select();\r\n document.execCommand(\"copy\");\r\n toastr.success(\"Successfully copied to clipboard.\");\r\n });\r\n\r\n var data = { id: $('input[data-reset-filter]').data('reset-filter') };\r\n\r\n $('input[data-reset-filter]').on(\"click\", function () {\r\n //submit to endpoint\r\n $.post(\"/Admin/User/ResetPersistentGridFilters\", data,\r\n function () {\r\n\r\n toastr.success(\"You successfully reset all of the user's remembered filters.\", \"Success\");\r\n })\r\n .fail(function () {\r\n app.ApplicantSearch.ResetDistrictHideCheckboxes();\r\n toastr.error(\"There was an error and the update was not made.\", \"Error\");\r\n\r\n });\r\n });\r\n $(document).on(\"component-bind-edit-mode-complete\", function (e, component) {\r\n $(\"input[name='RoleIds']\").on(\"change\", function () {\r\n var checkboxList = $(\"input[name='RoleIds']\");\r\n var mostRecentSelection = $(this);\r\n var mostRecentSelectionDisplayName = mostRecentSelection.parent().text().trim(); // Get the display name of the most recent selection\r\n\r\n checkboxList.filter(\":checked\").each(function () {\r\n if ($(this).val() === mostRecentSelection.val()) {\r\n return;\r\n }\r\n\r\n var selectedOptionDisplayName = $(this).parent().text().trim(); // Get the display name of the selected option\r\n\r\n // Check if the most recent selection has the display name \"Admin\" and the selected option has the display name \"SuperAdmin\"\r\n if (mostRecentSelectionDisplayName === \"Admin\" && selectedOptionDisplayName === \"SuperAdmin\") {\r\n $(this).prop(\"checked\", false); // Uncheck the selected option\r\n }\r\n\r\n // Check if the most recent selection has the display name \"SuperAdmin\" and the selected option has the display name \"Admin\"\r\n if (mostRecentSelectionDisplayName === \"SuperAdmin\" && selectedOptionDisplayName === \"Admin\") {\r\n $(this).prop(\"checked\", false); // Uncheck the selected option\r\n }\r\n });\r\n });\r\n\r\n });\r\n }\r\n };\r\n return details;\r\n }()\r\n );\r\n","app.AdminDocuments =\r\n (function () {\r\n var docs = {\r\n Init: function () {\r\n app.AdminDocuments.SetCopyFunctionality();\r\n $(document).on(\"component-bind-save-mode-complete, component-save-complete\",\r\n function () {\r\n app.AdminDocuments.SetCopyFunctionality();\r\n });\r\n },\r\n SetCopyFunctionality: function () {\r\n $(\"[data-role='copy-link']\").off(\"click keyup\").on(\"click keyup\",\r\n function () {\r\n $(this).closest(\".input-group\").find(\"input[type='text']\").select();\r\n document.execCommand(\"copy\");\r\n toastr.success(\"Successfully copied to clipboard.\");\r\n });\r\n }\r\n };\r\n return docs;\r\n }()\r\n );"]}