(function () { if (window.vettingStatusGateLoaded) { return; } window.vettingStatusGateLoaded = true; var DEFAULTS = { vettingStatusUrl: "/vettingstatus/", eligibilityMode: "skip-if-missing", financialMode: "skip-if-missing", rememberDismiss: true, dismissStorage: "session", dismissKey: "vettingStatusGateDismissed", allowLatestOpportunity: true, allowContactQuoteFallback: true, requireOpportunity: true, autoRun: true, checks: { requiredDetails: true, idNumber: true, eligibility: true, vetting: true, quote: true, contract: true, finance: true, passport: true }, modalTitle: "Outstanding enrollment items", modalLead: "You still have required items to complete before enrollment can proceed.", modalHint: "Would you like to complete them now?", primaryLabel: "Complete now", secondaryLabel: "Later" }; function mergeSettings(base, override) { var out = {}; var keys = Object.keys(base || {}); keys.forEach(function (key) { var baseVal = base[key]; var hasOverride = override && Object.prototype.hasOwnProperty.call(override, key); var overrideVal = hasOverride ? override[key] : undefined; if (baseVal && typeof baseVal === "object" && !Array.isArray(baseVal)) { out[key] = mergeSettings(baseVal, overrideVal && typeof overrideVal === "object" ? overrideVal : {}); } else if (hasOverride) { out[key] = overrideVal; } else { out[key] = baseVal; } }); if (override) { Object.keys(override).forEach(function (key) { if (!Object.prototype.hasOwnProperty.call(out, key)) { out[key] = override[key]; } }); } return out; } var settings = mergeSettings(DEFAULTS, window.vettingStatusGate || {}); function onReady(fn) { if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", fn); } else { fn(); } } function normalizeGuid(value) { return String(value || "").replace(/[{}]/g, "").trim().toLowerCase(); } function isGuid(value) { return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(normalizeGuid(value)); } function hasValue(value) { return String(value || "").trim() !== ""; } function isLikelyEmail(value) { var s = String(value || "").trim().toLowerCase(); if (!s || s === "null" || s === "undefined" || s === "n/a") { return false; } return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(s); } function formattedValue(obj, key) { return obj ? obj[key + "@OData.Community.Display.V1.FormattedValue"] : ""; } function normalizeIdNumber(value) { return String(value || "").replace(/\D/g, ""); } function resolveIdNumber(contact, opportunity) { var oppId = opportunity ? String(opportunity.btfh_governmentid || "").trim() : ""; if (oppId) { return oppId; } var contactId = contact ? String(contact.msdyn_identificationnumber || "").trim() : ""; if (contactId) { return contactId; } var contactGov = contact ? String(contact.btfh_governmentid || "").trim() : ""; if (contactGov) { return contactGov; } var contactStd = contact ? String(contact.governmentid || "").trim() : ""; if (contactStd) { return contactStd; } return ""; } function parseOppVettingStatus(opp) { var status = opp ? opp.btfh_academicvettedstatus : null; var vetted = opp ? opp.btfh_academicallyvetted : null; var code = status == null ? null : Number(status); var label = opp ? opp["btfh_academicvettedstatus@OData.Community.Display.V1.FormattedValue"] : ""; var isApproved = code === 948780007 || vetted === true; var isNotApproved = code === 948780001 || code === 948780005 || vetted === false; return { code: code, label: label || "", isApproved: isApproved, isNotApproved: isNotApproved }; } function isQuoteSigned(quote, signature) { return !!(signature || (quote && (quote.edv_studentquoteaccepted === true || quote.bt_studentenrolled === true))); } function formatMoney(amount) { var n = Number(amount); if (!Number.isFinite(n)) { return "R 0.00"; } try { return new Intl.NumberFormat("en-ZA", { style: "currency", currency: "ZAR", minimumFractionDigits: 2 }).format(n); } catch (e) { return "R " + n.toFixed(2); } } function getGenderInfo(contact) { var code = contact ? contact.gendercode : null; var codeText = String(code == null ? "" : code); var isUnknown = codeText === "192350001"; var label = formattedValue(contact, "gendercode"); return { value: isUnknown ? "" : (code == null ? "" : code), label: label || "" }; } function getRaceInfo(contact) { var fields = ["btfh_populationgroup", "btfh_race", "edv_race"]; for (var i = 0; i < fields.length; i += 1) { var key = fields[i]; var raw = contact ? contact[key] : null; if (raw != null && String(raw).trim() !== "") { var label = formattedValue(contact, key); return { value: raw, label: label || String(raw || ""), field: key }; } } return { value: "", label: "", field: "" }; } function getContextIds() { var params = new URLSearchParams(window.location.search); var contactId = normalizeGuid(settings.contactId || params.get("contactid") || params.get("studentid") || ""); var opportunityId = normalizeGuid(settings.opportunityId || params.get("opportunityid") || ""); return { contactId: contactId, opportunityId: opportunityId }; } function buildVettingUrl(contactId, opportunityId) { var base = String(settings.vettingStatusUrl || "/vettingstatus/").trim(); if (!base) { base = "/vettingstatus/"; } if (base.indexOf("?") >= 0) { return base; } var params = []; if (isGuid(contactId)) { params.push("contactid=" + encodeURIComponent(contactId)); } if (isGuid(opportunityId)) { params.push("opportunityid=" + encodeURIComponent(opportunityId)); } return params.length ? base + "?" + params.join("&") : base; } function getStorage() { if (!settings.rememberDismiss) { return null; } if (settings.dismissStorage === "local") { return window.localStorage || null; } return window.sessionStorage || null; } function hasDismissed() { var storage = getStorage(); if (!storage) { return false; } try { return storage.getItem(settings.dismissKey) === "1"; } catch (e) { return false; } } function setDismissed() { var storage = getStorage(); if (!storage) { return; } try { storage.setItem(settings.dismissKey, "1"); } catch (e) { } } function getToken() { if (window.shell && typeof window.shell.getTokenDeferred === "function") { return new Promise(function (resolve, reject) { window.shell.getTokenDeferred().done(resolve).fail(reject); }); } var el = document.querySelector('input[name="__RequestVerificationToken"]'); if (el && el.value) { return Promise.resolve(el.value); } return Promise.reject(new Error("Request verification token not found.")); } async function apiFetch(url, options) { var opts = options || {}; var headers = opts.headers || {}; headers["Accept"] = "application/json"; headers["Content-Type"] = "application/json"; headers["OData-MaxVersion"] = "4.0"; headers["OData-Version"] = "4.0"; headers["Prefer"] = 'odata.include-annotations="OData.Community.Display.V1.FormattedValue"'; var token = await getToken(); headers["__RequestVerificationToken"] = token; headers["X-Requested-With"] = "XMLHttpRequest"; var resp = await fetch(url, { method: opts.method || "GET", headers: headers, body: opts.body, credentials: "same-origin" }); if (!resp.ok) { var txt = await resp.text(); throw new Error("Web API error " + resp.status + ": " + txt); } if (resp.status === 204) { return null; } var text = await resp.text(); if (!text) { return null; } return JSON.parse(text); } function apiGet(url) { return apiFetch(url, { method: "GET" }); } async function loadContact(contactId) { if (!isGuid(contactId)) { return null; } var fields = [ "contactid", "firstname", "lastname", "emailaddress1", "emailaddress2", "mobilephone", "btfh_studentnumber", "bt_collectionbalance", "btfh_internationalstudent", "msdyn_identificationnumber", "governmentid", "btfh_governmentid", "btfh_passportnumber", "gendercode", "btfh_sponsor1email", "btfh_sponsor2email", "btfh_sponsor1mobilephone" ]; var select = "$select=" + fields.join(","); return apiGet("/_api/contacts(" + contactId + ")?" + select); } async function loadContactOptionalFields(contactId) { if (!isGuid(contactId)) { return {}; } var fields = ["btfh_populationgroup", "btfh_race", "edv_race"]; var extra = {}; await Promise.all(fields.map(function (field) { var url = "/_api/contacts(" + contactId + ")?$select=" + field; return apiGet(url).then(function (data) { if (!data) { return; } Object.keys(data).forEach(function (key) { if (key === field || key.indexOf(field + "@") === 0) { extra[key] = data[key]; } }); }).catch(function () { }); })); return extra; } async function loadLatestOpportunityForContact(contactId) { if (!isGuid(contactId)) { return null; } var url = "/_api/opportunities?$select=opportunityid,name,createdon,_bt_program_value,_bt_programversion_value,_bt_gradelevel_value,_btfh_preferredcampus_value,_btfh_intake_value,btfh_academicvettedstatus,btfh_academicallyvetted,btfh_academicallyvetteddate,_parentcontactid_value,btfh_governmentid" + "&$filter=_parentcontactid_value eq " + contactId + " and statecode eq 0&$orderby=createdon desc&$top=1"; var resp = await apiGet(url).catch(function () { return null; }); var row = resp && resp.value && resp.value[0] ? resp.value[0] : null; return row || null; } async function loadOpportunity(opportunityId) { if (!isGuid(opportunityId)) { return null; } var url = "/_api/opportunities(" + opportunityId + ")?$select=opportunityid,name,createdon,_bt_program_value,_bt_programversion_value,_bt_gradelevel_value,_btfh_preferredcampus_value,_btfh_intake_value,btfh_academicvettedstatus,btfh_academicallyvetted,btfh_academicallyvetteddate,_parentcontactid_value,btfh_governmentid"; return apiGet(url).catch(function () { return null; }); } async function loadQuoteForOpportunity(opportunityId) { if (!isGuid(opportunityId)) { return null; } var url = "/_api/quotes?$select=quoteid,quotenumber,createdon,edv_studentquoteaccepted,bt_studentenrolled,totalamount" + "&$filter=_opportunityid_value eq " + opportunityId + "&$orderby=createdon desc&$top=1"; var resp = await apiGet(url).catch(function () { return null; }); return resp && resp.value && resp.value[0] ? resp.value[0] : null; } async function loadQuoteForContact(contactId) { if (!isGuid(contactId)) { return null; } var url = "/_api/quotes?$select=quoteid,quotenumber,createdon,edv_studentquoteaccepted,bt_studentenrolled,totalamount" + "&$filter=_customerid_value eq " + contactId + "&$orderby=createdon desc&$top=1"; var resp = await apiGet(url).catch(function () { return null; }); return resp && resp.value && resp.value[0] ? resp.value[0] : null; } async function loadSignatureLogByQuoteNumber(quotenumber) { var qn = String(quotenumber || "").trim(); if (!qn) { return null; } var safe = qn.replace(/'/g, "''"); var filter = encodeURIComponent("edv_quotenumber eq '" + safe + "'"); var url = "/_api/edv_signaturelogs?$select=edv_signaturelogid,edv_dateofacceptance" + "&$filter=" + filter + "&$top=1"; var resp = await apiGet(url).catch(function () { return null; }); return resp && resp.value && resp.value[0] ? resp.value[0] : null; } async function loadBalances(studentNumber) { var sn = String(studentNumber || "").trim(); if (!sn) { return null; } var wsUrl = "https://47908eaddc494c60a0715c5a43a520.fe.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/b154f3d854294995b492022b63ecb4ed/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=fixHTmXVXmyxpBEmWZEHtEqsWsbkpQ7B05Rd8rNl08k"; try { var resp = await fetch(wsUrl, { method: "POST", body: JSON.stringify({ custAccount: sn }), headers: { "Content-Type": "application/json" } }); if (!resp.ok) { throw new Error("Balance request failed"); } var payload = await resp.json(); if (payload && payload.body) { payload = payload.body; } function pick(obj, keys) { for (var i = 0; i < keys.length; i += 1) { var k = keys[i]; if (obj && obj[k] != null) { return obj[k]; } } return null; } function toMoney(value, allowNeg) { if (value == null) { return 0; } var s = String(value).trim(); if (!s) { return 0; } s = s.replace(/R/gi, "").replace(/\s+/g, ""); if (s.indexOf(",") >= 0 && s.indexOf(".") < 0) { s = s.replace(",", "."); } else if (s.indexOf(",") >= 0 && s.indexOf(".") >= 0) { s = s.replace(/,/g, ""); } var n = Number(s); if (!Number.isFinite(n)) { return 0; } return allowNeg ? n : Math.max(0, n); } var cbRaw = pick(payload, ["collectionBalance", "collectionbalance", "colletionBalance", "colletionbalance"]); var sbRaw = pick(payload, ["settlementBalance", "settlementbalance"]); var fbRaw = pick(payload, ["futureBalance", "futurebalance"]); var hasCb = cbRaw != null; return { collectionBalance: hasCb ? toMoney(cbRaw, true) : null, settlementBalance: toMoney(sbRaw, false), futureBalance: toMoney(fbRaw, false), hasCollection: hasCb }; } catch (e) { return null; } } function getEligibilityEngine() { try { if (typeof EdvEligibility !== "undefined" && EdvEligibility && typeof EdvEligibility.checkEligibilityForOpportunity === "function") { return EdvEligibility; } } catch (e) { } if (window.EdvEligibility && typeof window.EdvEligibility.checkEligibilityForOpportunity === "function") { return window.EdvEligibility; } return null; } async function computeEligibility(opportunityId) { if (!isGuid(opportunityId)) { return null; } var eng = getEligibilityEngine(); if (!eng) { return null; } try { return await eng.checkEligibilityForOpportunity(opportunityId); } catch (e) { return null; } } function getRequiredItems(contact, opportunity) { var items = []; function add(title, ok, desc) { items.push({ title: title, ok: !!ok, desc: desc || "" }); } var programLabel = formattedValue(opportunity, "_bt_program_value"); var gradeLabel = formattedValue(opportunity, "_bt_gradelevel_value"); var versionLabel = formattedValue(opportunity, "_bt_programversion_value"); var campusLabel = formattedValue(opportunity, "_btfh_preferredcampus_value"); var intakeLabel = formattedValue(opportunity, "_btfh_intake_value"); add("Program (qualification)", !!(opportunity && opportunity._bt_program_value), programLabel ? "Selected: " + programLabel : "Select a qualification in Qualification Enrolment."); add("Degree type (grade level)", !!(opportunity && opportunity._bt_gradelevel_value), gradeLabel ? "Selected: " + gradeLabel : "Select your degree type."); add("Program version (year of study)", !!(opportunity && opportunity._bt_programversion_value), versionLabel ? "Selected: " + versionLabel : "Select your program version."); add("Campus", !!(opportunity && opportunity._btfh_preferredcampus_value), campusLabel ? "Selected: " + campusLabel : "Select your preferred campus."); add("Intake", !!(opportunity && opportunity._btfh_intake_value), intakeLabel ? "Selected: " + intakeLabel : "Select your intake."); var emailValue = String(contact.emailaddress1 || contact.emailaddress2 || "").trim(); var emailOk = !!emailValue; add("Email address", emailOk, emailOk ? "Email: " + emailValue : "Add your primary email address."); var mobileValue = String(contact.mobilephone || "").trim(); var mobileOk = !!mobileValue; add("Contact number", mobileOk, mobileOk ? "Contact number captured." : "Add your primary contact number."); var sponsorEmailValue = ""; var sponsorEmailOk = false; var sponsorEmailCandidates = [contact.btfh_sponsor1email, contact.btfh_sponsor2email]; for (var i = 0; i < sponsorEmailCandidates.length; i += 1) { var candidate = sponsorEmailCandidates[i]; if (isLikelyEmail(candidate)) { sponsorEmailValue = String(candidate).trim(); sponsorEmailOk = true; break; } } add("Sponsor email", sponsorEmailOk, sponsorEmailOk ? "Sponsor email: " + sponsorEmailValue : "Add sponsor email details."); var sponsorPhoneValue = String(contact.btfh_sponsor1mobilephone || "").trim(); var sponsorPhoneOk = !!sponsorPhoneValue; add("Sponsor contact number", sponsorPhoneOk, sponsorPhoneOk ? "Sponsor contact number captured." : "Add sponsor contact number."); var genderInfo = getGenderInfo(contact); var genderOk = hasValue(genderInfo.value); add("Gender", genderOk, genderOk ? "Gender: " + genderInfo.label : "Select your gender."); var raceInfo = getRaceInfo(contact); var raceOk = hasValue(raceInfo.value); add("Race", raceOk, raceOk ? "Race: " + raceInfo.label : "Select your race."); return items; } function computeFinancialStatus(contact, balances) { var balanceVal = null; if (balances && balances.hasCollection) { balanceVal = balances.collectionBalance; } else if (contact && contact.bt_collectionbalance != null) { balanceVal = Number(contact.bt_collectionbalance); } if (balanceVal == null || !Number.isFinite(balanceVal)) { return { due: null, ok: settings.financialMode !== "require" }; } var due = Math.max(0, balanceVal); return { due: due, ok: due <= 0 }; } function buildChecklist(context) { var missing = []; function addMissing(label, desc) { missing.push({ label: label, desc: desc || "" }); } var contact = context.contact || {}; var opportunity = context.opportunity || {}; var oppVet = parseOppVettingStatus(opportunity); var eligibility = context.eligibility; var eligibilityOk = true; var eligibilityAvailable = !!eligibility; if (settings.checks.eligibility) { if (oppVet.isApproved) { eligibilityOk = true; } else if (eligibilityAvailable) { eligibilityOk = eligibility.passed === true; } else { eligibilityOk = settings.eligibilityMode !== "require"; } } if (settings.checks.requiredDetails) { var requiredItems = getRequiredItems(contact, opportunity); requiredItems.forEach(function (req) { if (!req.ok) { addMissing(req.title, req.desc); } }); } if (settings.checks.idNumber) { var idNumber = resolveIdNumber(contact, opportunity); var idDigits = normalizeIdNumber(idNumber); var idOk = idDigits.length === 13; if (!idOk) { addMissing("ID number", "Provide your South African ID number to continue vetting."); } } if (settings.checks.eligibility && !eligibilityOk) { var eligDesc = eligibilityAvailable ? "Entry requirements are not met." : "Eligibility check unavailable right now."; addMissing("Eligibility", eligDesc); } if (settings.checks.vetting && !oppVet.isApproved) { addMissing("Vetting status", "Your application must be academically vetted."); } if (settings.checks.quote && !context.quote) { addMissing("Quote", "Your quote must be created for contract and payment."); } if (settings.checks.contract) { var signed = isQuoteSigned(context.quote, context.signature); if (!signed) { addMissing("Contract signed", "Sign the academic contract on the quote page."); } } if (settings.checks.finance) { var fin = computeFinancialStatus(contact, context.balances); if (!fin.ok) { var finDesc = fin.due == null ? "Balance unavailable." : "Outstanding balance: " + formatMoney(fin.due); addMissing("Financial status", finDesc); } } if (settings.checks.passport && contact.btfh_internationalstudent) { var passportOk = !!String(contact.btfh_passportnumber || "").trim(); if (!passportOk) { addMissing("Passport number", "International students must provide passport details."); } } return missing; } function ensureStyles() { if (document.getElementById("vsGateStyle")) { return; } var style = document.createElement("style"); style.id = "vsGateStyle"; style.type = "text/css"; style.textContent = ".vs-gate-overlay{position:fixed;inset:0;background:rgba(15,15,15,0.55);display:flex;align-items:center;justify-content:center;z-index:100000;}" + ".vs-gate-card{background:#ffffff;color:#1f1f1f;max-width:520px;width:90%;box-shadow:0 18px 40px rgba(0,0,0,0.25);border-radius:16px;padding:24px;font-family:inherit;}" + ".vs-gate-card h2{margin:0 0 8px;font-size:22px;}" + ".vs-gate-card p{margin:0 0 12px;font-size:15px;line-height:1.4;}" + ".vs-gate-list{margin:0 0 16px;padding-left:18px;}" + ".vs-gate-list li{margin-bottom:8px;}" + ".vs-gate-item-title{font-weight:600;font-size:14px;}" + ".vs-gate-item-desc{font-size:13px;color:#4a4a4a;}" + ".vs-gate-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px;}" + ".vs-gate-btn{border-radius:999px;border:1px solid #b7b7b7;padding:10px 18px;background:#ffffff;color:#1f1f1f;cursor:pointer;font-size:14px;}" + ".vs-gate-btn-primary{background:#1f5f83;color:#ffffff;border-color:#1f5f83;}" + ".vs-gate-btn:focus{outline:2px solid #1f5f83;outline-offset:2px;}"; document.head.appendChild(style); } function removeModal() { var overlay = document.getElementById("vsGateModal"); if (overlay && overlay.parentNode) { overlay.parentNode.removeChild(overlay); } } function showModal(result) { if (document.getElementById("vsGateModal")) { return; } ensureStyles(); var overlay = document.createElement("div"); overlay.className = "vs-gate-overlay"; overlay.id = "vsGateModal"; overlay.setAttribute("role", "dialog"); overlay.setAttribute("aria-modal", "true"); var card = document.createElement("div"); card.className = "vs-gate-card"; var title = document.createElement("h2"); title.textContent = settings.modalTitle; card.appendChild(title); var lead = document.createElement("p"); lead.textContent = settings.modalLead; card.appendChild(lead); var list = document.createElement("ul"); list.className = "vs-gate-list"; result.outstanding.forEach(function (item) { var li = document.createElement("li"); var label = document.createElement("div"); label.className = "vs-gate-item-title"; label.textContent = item.label; li.appendChild(label); if (item.desc) { var desc = document.createElement("div"); desc.className = "vs-gate-item-desc"; desc.textContent = item.desc; li.appendChild(desc); } list.appendChild(li); }); card.appendChild(list); var hint = document.createElement("p"); hint.textContent = settings.modalHint; card.appendChild(hint); var actions = document.createElement("div"); actions.className = "vs-gate-actions"; var primary = document.createElement("button"); primary.type = "button"; primary.className = "vs-gate-btn vs-gate-btn-primary"; primary.textContent = settings.primaryLabel; var secondary = document.createElement("button"); secondary.type = "button"; secondary.className = "vs-gate-btn"; secondary.textContent = settings.secondaryLabel; actions.appendChild(primary); actions.appendChild(secondary); card.appendChild(actions); overlay.appendChild(card); document.body.appendChild(overlay); function dismiss(remember) { removeModal(); if (remember) { setDismissed(); } if (typeof settings.onLater === "function") { settings.onLater(result); } } primary.addEventListener("click", function () { removeModal(); if (typeof settings.onAccept === "function") { settings.onAccept(result); } window.location.href = result.vettingUrl; }); secondary.addEventListener("click", function () { dismiss(true); }); overlay.addEventListener("click", function (event) { if (event.target === overlay) { dismiss(true); } }); document.addEventListener("keydown", function onKey(event) { if (event.key === "Escape") { document.removeEventListener("keydown", onKey); dismiss(true); } }); setTimeout(function () { primary.focus(); }, 0); } async function evaluateAndPrompt() { if (hasDismissed() && !settings.force) { return; } var ids = getContextIds(); if (!isGuid(ids.contactId)) { return; } var contact = await loadContact(ids.contactId).catch(function () { return null; }); if (!contact) { return; } var extra = await loadContactOptionalFields(ids.contactId); Object.keys(extra || {}).forEach(function (key) { contact[key] = extra[key]; }); var opportunity = null; if (isGuid(ids.opportunityId)) { opportunity = await loadOpportunity(ids.opportunityId); } else if (settings.allowLatestOpportunity) { opportunity = await loadLatestOpportunityForContact(ids.contactId); if (opportunity && opportunity.opportunityid) { ids.opportunityId = normalizeGuid(opportunity.opportunityid); } } if (!opportunity && settings.requireOpportunity) { return; } var eligibility = null; if (settings.checks.eligibility) { eligibility = await computeEligibility(ids.opportunityId); } var quote = null; if (settings.checks.quote || settings.checks.contract) { quote = await loadQuoteForOpportunity(ids.opportunityId); if (!quote && settings.allowContactQuoteFallback) { quote = await loadQuoteForContact(ids.contactId); } } var signature = null; if (quote && settings.checks.contract) { signature = await loadSignatureLogByQuoteNumber(quote.quotenumber); } var balances = null; if (settings.checks.finance && contact.btfh_studentnumber) { balances = await loadBalances(contact.btfh_studentnumber); } var result = { contact: contact, opportunity: opportunity, eligibility: eligibility, quote: quote, signature: signature, balances: balances, vettingUrl: buildVettingUrl(ids.contactId, ids.opportunityId) }; result.outstanding = buildChecklist(result); if (result.outstanding.length) { showModal(result); } else if (typeof settings.onClear === "function") { settings.onClear(result); } } window.runVettingStatusGate = function () { evaluateAndPrompt().catch(function () { }); }; onReady(function () { if (settings.autoRun !== false) { window.runVettingStatusGate(); } }); })();