WSVL SAMPLE SHIPPING

HeaderTfalseGuest Access LoginContinueJfalseContinue as GuestLoginTitleTfalse0Login PageLoginTitleGuestTfalse0Guest Access Log InLoginTitleARTfalse0Authorized Returns Log InLoginHeaderTfalse0Login HeaderLoginHeaderGuestTfalse0Guest HeaderLoginHeaderARTfalse0Authorized Returns HeaderLoginIDSfalse0Always RequiredLogin IDLoginIDGuestSfalse0Always RequiredGuest Access Login IDLoginIDARSfalse0Always RequiredAuthorized Returns Login IDPasswordSfalse0Always RequiredPasswordForgotPasswordTfalse0ChangePasswordTfalse0RegisterTfalse0ChangePasswordTitleTfalse0Change Password TitleOldPasswordSfalse0Always RequiredOld PasswordNewPasswordSfalse0Always RequiredNew PasswordConfirmPasswordSfalse0Always RequiredConfirm PasswordExpireMessageTfalse0Password ExpireForgotPasswordTitleTfalse0Forgot Password TitleForgotMessageTfalse0Your Password is sent by E-Mail to youCompanyNameSfalse0Company NameCompanyNameGuestSfalse0WSVL SAMPLE SHIPPINGCompanyNameARSfalse0Authorized Returns Company NameB2CDirectLoginCfalse0B2CSelfInviteCfalse0B2CRemoveLinkCfalse0ShippingHeaderHeaderTfalse0Intelligent Reverse LogisticsHeaderAdminstrationLinkSectionAfalse0AdministrationHeaderAdminTransactionsLinkSectionAfalse0TransactionsHeaderAdminVoidShipmentsLinkZfalse0Void ShipmentsHeaderAdminLabelRetrievalZfalse0Label RetrievalHeaderAdminPackageHistoryLinkZfalse0Package HistoryHeaderAdminManageLinkSectionAfalse0ManageHeaderAdminUsersLinkZfalse0UsersHeaderAdminAddressesLinkZfalse0AddressesHeaderAdminAccountsLinkZfalse0AccountsHeaderAdminAnnouncementsLinkZfalse0AnnouncementHeaderAdminImportExportLinkSectionAfalse0Import/ExportHeaderAdminImportLinkZfalse0ImportHeaderAdminExportLinkZfalse0ExportHeaderAdminExportConfigLinkZfalse0Export ConfigHeaderAdminShipSettingsSectionLinkAfalse0Ship SettingsHeaderAdminCompanyKeysLinkZfalse0Company KeysHeaderAdminReferencesLinkZfalse0ReferencesHeaderAdminProductsLinkZfalse0ProductsHeaderAdminWeightsLinkZfalse0WeightsHeaderAdminThermalPrintSetupLinkZfalse0Thermal Printer SetupHeaderHistoryLinkZfalse0HistoryHeaderShippingZfalse0ShippingUserMenuChangePasswordLinkZfalse0Change PasswordUserMenuEnvironmentLinkZfalse0EnvironmentUserMenuLogOffLinkZfalse0Log OffUserMenuDiagnosticsLinkZfalse0DiagnosticsUserMenuCompanyListLinkZfalse0Company ListSupportMenuContactLinkZfalse0Contact PSI SupportHeaderAdminBranchesLinkZfalse0BranchesHeaderAdminOrdersLinkSectionZfalse0OrdersHeaderAdminOrdersLinkZfalse0OrdersHeaderAdminOrderReasonsLInkZfalse0ReasonsFooterCopyrightAfalse0Copyright © 2011 - 2025, United Parcel Service of America, Inc. All rights reserved.FooterWebSiteTermsLinkZfalse0Web Site Terms of UseFooterPolicyLinkZfalse0Privacy PolicyFooterCookieDisclosureLinkZfalse0Cookie DisclosureFooterTermsConditionsLinkZfalse0Service Terms and ConditionsSFTitleTfalse0Ship FromShipmentFormHeaderTfalse0Shipment InformationSFAddressBookKfalse0SFNameSfalse0RequiredCompany NameSFAttnSfalse0AttentionSFAddr1Sfalse0RequiredAddress Line 1SFAddr2Sfalse0Address Line 2SFAddr3Sfalse0SFCitySfalse0RequiredCitySFStateXfalse0RequiredStateSFZipSfalse0RequiredPostal CodeSFPhoneSfalse0RequiredPhone NumberSFEmailSfalse0RequiredE-Mail AddressSFQVLabelNotCfalse0SFQVInTranNotCfalse0SFQVExcNotCfalse0SFQVDelNotCfalse0SFCust01Xfalse0SFCust02Xfalse0SFCust03Xfalse0SFCust04Xfalse0SFCust05Xfalse0SFCust06Xfalse0SFCust07Xfalse0SFCust08Xfalse0SFCust09Xfalse0SFCust10Xfalse0SFManualValidateXfalse0STTitleTfalse0Ship ToSTAddrBookKfalse0Address Book928175734STBranchKfalse0STNameSfalse0RequiredCompany NameSTAttnSfalse0AttentionSTAddr1Sfalse0RequiredAddress Line 1STAddr2Sfalse0Address Line 2STAddr3Sfalse0STCitySfalse0RequiredCitySTStateXfalse0RequiredStateSTZipSfalse0RequiredPostal CodeSTPhoneSfalse0STEmailSfalse0STAddEmail1Sfalse0STAddEmail2Sfalse0STAddEmail3Sfalse0STQVLabelNotCfalse0STQVInTranNotCfalse0STQVExcNotCfalse0STQVDelNotCfalse0STResidentialCfalse0STCust01Xfalse0STCust02Xfalse0STCust03Xfalse0STCust04Xfalse0STCust05Xfalse0STCust06Xfalse0STCust07Xfalse0STCust08Xfalse0STCust09Xfalse0STCust10Xfalse0STManualValidateXfalse0STLocationIDSfalse0ShipTitleTfalse0ShipmentDescriptionXfalse0Diagnostic SamplesCarbonNeutralCfalse0SatDeliveryCfalse0AdultSignatureCfalse0PrePaidAccountKfalse0ThirdPartyAccountKfalse0AdvancedPaymentOptionsTfalse0DutyVATPrePaidAccountKfalse0DutyVATThirdPartyAccountKfalse0SplitDutyVATCfalse0AreGoodsNotInFreeCirculationCfalse0InvoiceCfalse0International Special CommoditiesQfalse0UploadDocumentsCfalse0UseDifferentSoldToCfalse0DocOnlyCfalse0MonValueMfalse0PackTitleTfalse0Package(s)PackageHeaderTfalse0PackageNumPkgsNfalse01|20|Number of Packages must be between 1 and 20|WeightNfalse0WeightLengthNfalse0HeightNfalse0WidthNfalse0InsuredValMfalse0Proactive ResponseCfalse0DryIceCfalse0DryIceWeightNfalse0DataTitleTfalse0Check01Cfalse0Check02Cfalse0CommentSfalse0Ref01Rfalse0Reference 1Ref02Rfalse0Ref03Rfalse0Ref04Rfalse0Ref05Rfalse0Ref06Rfalse0Ref07Rfalse0Ref08Rfalse0Ref09Rfalse0Ref10Rfalse0PackageAddBtnJfalse0AddPackageRemoveBtnJfalse0RemovePackageSelectTxtAfalse0PackagePaymentMethodPfalse0RequiredBill pickup charges to:MYUPSCCHolderNameSfalse0RequiredCredit Card Holder NameCardNumberSfalse0RequiredCredit Card NumberSecurityCodeSfalse0RequiredSecurity CodeExpirationMonthSfalse0RequiredExpiration MonthExpirationYearSfalse0RequiredExpiration YearCCAddressLine1Sfalse0RequiredAddress Line 1CCAddressLine2Sfalse0Address Line 2CCAddressLine3Sfalse0Address Line 3CCCitySfalse0RequiredCityCCStateXfalse0RequiredStateCCPostalcodeSfalse0RequiredPostal codePackageIdSfalse0CostCenterSfalse0OrderNumberKfalse0OrderItemSkuKfalse0ShipProcessButtonTfalse0Process ShipmentShipClearButtonTfalse0ClearShipHistoryButtonTfalse0Package HistoryShipRateButtonTfalse0RateShipBackButtonTfalse0BackShipAddItemsButtonTfalse0Add ItemsCancelButtonTfalse0CancelPickupLinkTfalse0Create PickupCreatePickupCfalse0PickupTitleTfalse0Pickup InformationPickupDateHfalse0Pickup Date2026-02-05PickupEarliestTimeIfalse0Earliest Pickup Time01:16PickupLatestTimeIfalse0Latest Pickup Time01:16PickupContactNameSfalse0Contact NamePickupPhoneXfalse0Phone NumberPickupRoomXfalse0Room NumberPickupFloorSfalse0Floor NumberPickupInstructionsSfalse0InstructionsPickupPointXfalse0PickupTomorrowCfalse0PurchaseOrderSfalse0RequiredPurchase Order NumberCommentsSfalse0CommentsCommoditiesSfalse0CommoditiesAutoFinishCfalse0InvoiceTitleTfalse0Commercial InvoiceAdditionalDocumentCfalse0SignatureWfalse0ShowInvoiceCfalse0Show Invoice (Override Paperless)ProductTitleTfalse0Invoice ItemsProductPartNumberKfalse0RequiredPart NumberProductDescriptionXfalse0RequiredDescriptionProductDescSecondaryXfalse0Description SecondaryProductDescOtherXfalse0Description OtherProductHarmCodeXfalse0Harmonized CodeProductPriceMfalse0RequiredPriceProductCountNfalse0RequiredCountProductCustom01Xfalse0ProductCustom02Xfalse0ProductCustom03Xfalse0ProductCustom04Xfalse0ProductCustom05Xfalse0ProductCustom06Xfalse0ProductCustom07Xfalse0ProductCustom08Xfalse0ProductCustom09Xfalse0ProductCustom10Xfalse0InvoiceHeaderTfalse0Commercial InvoiceInvoiceSubHeaderAfalse0Create International InvoiceInvoiceDetailsTxtAfalse0Invoice DetailsInvoiceLineHeaderTxtAfalse0LineInvoiceTotalHeaderTxtAfalse0TotalInvoiceItemAddBtnJfalse0AddInvoiceItemEditBtnJfalse0EditInvoiceItemDeleteBtnJfalse0DeleteInvoiceItemFinishBtnJfalse0FinishInvoiceItemSearchBtnJfalse0SearchInvoiceItemSaveBtnJfalse0SaveInvoiceItemCancelBtnJfalse0CancelInvoiceItemClearBtnJfalse0ClearInvoiceItemFilterBtnJfalse0FilterInvoiceProductSelectBtnJfalse0SelectInvoiceProductSearchTitleJfalse0Search Results (Max of 50)InvoiceProductSearchRequiredInfoJfalse0The id field is required.DocumentHeaderTfalse0DocumentsLoginCSSGuestSfalse0CSS Guest AccessLoginCSSARSfalse0CSS Authorized ReturnsDocumentINoPackageFromEmailAfalse0This link has expired. Please contact the company that sent you the return email.DocumentNoPackageNotFromEmailAfalse0There are no labels to displayDocumentFoldHereAfalse0FOLD HEREPrintPageSuccessHeaderAfalse0Shipment successfulPrintPageDeliveryMethod1MInstructionsAfalse0UPS will print and mail your return label.PrintPageDeliveryMethod11-15InstructionsAAfalse0Once UPS arrives to collect the return, the UPS driver will package the item.PrintPageDeliveryMethod16-20InstructionsAAfalse0Once UPS arrives to collect the return, the UPS driver will package the item.PrintPageDeliveryMethod4Eor6AAfalse0Return label has been e-mailed.PrintPageDefaultSchedulePickupTextAfalse0Click here to Schedule a pickupARPrintPageNoLabelsAfalse0No Labels AvailableDocumentLabelInstructionsHeaderTfalse0InstructionsDocumentLabelDefaultInstructionsYfalse0UPS Electronic Return Label: View/Print LabelDocumentLabelFlexibleAccessInstructionsYfalse0UPS Electronic Return Label: View/Print LabelTender your package to either UPS or the United States Postal Service. UPS locations include The UPS Store®, UPS Drop Box, UPS Customer Centers, authorized retail outlets and UPS drivers. Find your closest UPS location at {UPSDropOffLocator}DocumentLabelFlexibleAccessPostalLocationsEfalse0Postal LocationsPostal Service locations include your own mailbox, your local Post Office™ or postal collection boxes. You may also schedule a free postal carrier pick up at: {USPSCarrierPickup}DocumentLabelMailInnovationsInstructionsYfalse0MI Electronic Return Label: View/Print LabelPackages can be given to your mail carrier, left in your mail box or dropped off at your local U.S. Post Office or blue collection box. You can also schedule a U.S. Postal Service pick-up of the Return package at {UPSPWebPage}. For more information call UPS Mail Innovations® at 1-800-500-2224. Your return package will be viewable on ups.com within 24-48 hours.DocumentLabelDirectToMobileInstuctionsYfalse0UPS® Direct to MobileUPSWebPageZfalse0www.ups.com/content/us/en/index.jsxhttps://www.ups.com/content/us/en/index.jsxUPSDropOffLocatorZfalse0Drop Off Locatorhttp://www.ups.com/dropoff?autosubmit=1&lang=engUSPSCarrierPickupZfalse0https://carrierpickup.usps.comhttps://carrierpickup.usps.comUSPSWebPageZfalse0www.usps.comwww.usps.comDocumentInvoiceHeaderTfalse0InvoiceDocumentInvoiceFromSectionHeaderAfalse0FromDocumentInvoiceFromContactNameAfalse0Contact NameDocumentInvoiceFromCompanyNameAfalse0Company NameDocumentInvoiceFromWaybillNumberAfalse0Waybill NumberDocumentInvoiceFromAddressAfalse0AddressDocumentInvoiceFromCityAfalse0City/State-ProvinceDocumentInvoiceFromdateAfalse0DateDocumentInvoiceFromPostalCodeAfalse0Postal CodeDocumentInvoiceFromInvoiceNumberAfalse0Invoice NumberDocumentInvoiceFromPhoneAfalse0PhoneDocumentInvoiceFromPurchaseOrderNumberAfalse0Purchase Order NumberDocumentInvoiceFromFaxAfalse0FaxDocumentInvoiceFromTermsofSaleAfalse0Terms of sale (Incoterm)DocumentInvoiceFromEmailAfalse0E-Mail AddressDocumentInvoiceFromReasonForExportAfalse0Reason For ExportDocumentInvoiceshipToAfalse0Ship ToDocumentInvoicesoldToAfalse0Sold ToDocumentInvoicesUnitAfalse0UnitsDocumentInvoicesUnitofMeasureAfalse0Unit of MeasurementDocumentInvoiceDescriptionOfGoodsAfalse0Description of GoodsDocumentInvoicePartNumberAfalse0Part NumberDocumentInvoiceCommodityCodeAfalse0Commodity CodeDocumentInvoiceCOAfalse0C/ODocumentInvoiceValueAfalse0ValueDocumentInvoiceTotalAfalse0TotalDocumentInvoiceCurrencyAfalse0CurrencyDocumentInvoiceAddCommentsAfalse0Additional CommentsDocumentInvoiceLineTotalAfalse0Invoice Line TotalDocumentInvoiceDiscountAfalse0Discount/RebateDocumentInvoiceInvSubTotalAfalse0Invoice Sub-TotalDocumentInvoiceFreightAfalse0FreightDocumentInvoiceInsuranceAfalse0InsuranceDocumentInvoiceOtherAfalse0OtherDocumentInvoiceTotalInvoiceAmountAfalse0Total Invoice AmountDocumentInvoiceDecstatementAfalse0Declaration StatementDocumentInvoiceShipperSignAfalse0Shipper's Signature/ TitleDocumentInvoicePackCountAfalse0Package CountDocumentInvoiceTotalWeightAfalse0Total WeightProductUnitDfalse0RequiredUnit of MeasureEAProductOriginCountryDfalse0RequiredOrigin CountryUSTermsOfShipmentDfalse0RequiredTerms of ShipmentCurrencyCodeDfalse0RequiredCurrency CodeReasonForExportDfalse0RequiredReasonForExportOrderItemDfalse0StaticCCCountryDfalse0RequiredCountry or TerritoryUSCCCardTypeDfalse0RequiredCredit Card Type00DropOffTypeIdDfalse00DryIcePurposeDfalse0DryIceUOMDfalse0International LanguageDfalse0InsuredCurDfalse0MeasureUnitDfalse0INWeightUnitDfalse01LPackTypeDfalse01CDutyVATPayInfoDfalse0PayInfoDfalse0DelMethodDfalse0Label Delivery Method6AServiceDfalse0ServiceGNDServiceIntlDfalse0UPS Service InternationalServiceCodeDfalse0UPS Service1GRSTypeDfalse02RDirectionDfalse00LabelFormatDfalse01GSTCountryDfalse0USSFCountryDfalse0US3661UnivOfWY24001963926D4004895B100University of Wyoming// Starter Custom Shipping Portal - Mobile Friendly // With Pkg Summary + Comment Row + CSP Box Size (NBNL) - 01.29.2026v1 // ----- Detect login type (StandardShip vs Guest) ----- let vLoginType_Text = ""; (function initLoginType() { const form = document.getElementById("shipForm"); if (!form) return; const action = form.getAttribute("action") || ""; const parts = action.split("/"); vLoginType_Text = parts[3] || ""; })(); // ----- Feature toggles ----- const PACKAGE_SUMMARY_ENABLED = false; // true = show pkg summary const CUSTOM_BRANDING_ENABLED = true; // true = hide UPS header + show custom logo // CSP toggle (only affects Reference2 -> Reference3 logic) const CSP_ENABLED = false; // false = no CSP behavior at all // ----- Reference default select toggles & labels ----- // ONLY enable when the Reference Field is a dropdown const REFERENCE_DEFAULTS_CONFIG = { Reference1: { enabled: false, label: "Please select Ref1" }, Reference2: { enabled: !CSP_ENABLED, // CSP owns it when true label: "Please select", }, Reference3: { enabled: false, label: "Please select" }, Reference4: { enabled: false, label: "Please select" }, Reference5: { enabled: false, label: "Please select" }, }; // ----- Package summary globals ----- const packageSummary = {}; let packageSummaryTableBody = null; let packageSummaryWrapper = null; let pendingRemovedPackageNo = null; // ----- CSP (NBNL) select defaults ----- const REFERENCE2_DEFAULT_LABEL = "Please select box size"; const selectDefaults = [{ id: "Reference2", label: REFERENCE2_DEFAULT_LABEL }]; // ================================ // Extra bottom row (checks + comments) // ================================ function updateExtraRowVisibility() { const extraRow = document.querySelector("#shippingLayout > div.row.extra-row"); if (!extraRow) return; const idsToCheck = ["boxCheck01", "boxCheck02", "boxComment"]; const shouldShow = idsToCheck.some((id) => { const el = document.getElementById(id); return el && !el.classList.contains("d-none"); }); if (shouldShow) { extraRow.classList.remove("d-none"); } else { extraRow.classList.add("d-none"); } } function addExtraBottomRow(layout) { if (!layout) return; const row3 = document.getElementById("row3"); const row4 = document.getElementById("row4"); if (!row3 && !row4) return; const extraRow = document.createElement("div"); extraRow.className = "row d-none extra-row"; const extraCol = document.createElement("div"); extraCol.className = "col-12"; extraRow.appendChild(extraCol); function moveCellContent(tr) { if (!tr || !tr.cells || tr.cells.length === 0) return; const cell = tr.cells[0]; while (cell.firstChild) { extraCol.appendChild(cell.firstChild); } } moveCellContent(row3); moveCellContent(row4); if (extraCol.children.length === 0) return; layout.appendChild(extraRow); } // ================================ // Branding helpers // ================================ function hideUpsBranding() { const selectors = ["body > div.page-layout > header", "header", ".banner"]; selectors.forEach((sel) => { const el = document.querySelector(sel); if (el) el.classList.add("d-none"); }); } function insertLogos() { const targetElement = document.querySelector(".ColorGroup-YellowGreen"); if (!targetElement) return; // Blue bar container (styled via CSS) //const topBar = document.createElement("div"); //topBar.className = "custom-top-bar"; //targetElement.parentNode.insertBefore(topBar, targetElement); const imgData = [ { src: "/Home/GetImage?id=eaf85cb3-3747-40d7-b6f5-64599f579aeb", className: "img1", divClass: "img1Container", }, ]; imgData.forEach((data) => { const wrapper = document.createElement("div"); wrapper.className = data.divClass; if (data.src) { const img = document.createElement("img"); img.src = data.src; if (data.className) img.className = data.className; wrapper.appendChild(img); } targetElement.parentNode.insertBefore(wrapper, targetElement); }); } function initReferenceDefaults() { Object.entries(REFERENCE_DEFAULTS_CONFIG).forEach(([fieldId, config]) => { addSelectReferenceDefaults(fieldId, config); }); } function addSelectReferenceDefaults(fieldId, config) { if (!config?.enabled) return; const select = document.getElementById(fieldId); if (!select || select.tagName !== "SELECT") return; // Track whether a placeholder already existed const hadPlaceholder = !!select.querySelector('option[value=""]'); let opt = select.querySelector('option[value=""]'); if (!opt) { opt = document.createElement("option"); opt.value = ""; opt.text = config.label; opt.hidden = true; select.insertBefore(opt, select.firstChild); } // - UPS already selects the first real option // - We want to show the placeholder ON FIRST LOAD ONLY if (!hadPlaceholder && select.selectedIndex === 1) { select.selectedIndex = 0; } } // Add in addDefaultOption and attachReference2Handler function if CSP is enabled // Add function blocks here function addDefaultOption(selectId, defaultText) { const select = document.getElementById(selectId); if (!select) return; let opt = select.querySelector('option[value=""]'); if (!opt) { opt = document.createElement("option"); opt.value = ""; opt.text = defaultText; opt.hidden = true; // optional but recommended select.insertBefore(opt, select.firstChild); } // Only set default if nothing is selected yet if (select.selectedIndex === -1 || select.value === "") { select.value = ""; } } // Add in attachReference2Handler function if CSP is enabled function attachReference2Handler() { const reference2 = document.getElementById("Reference2"); const reference3 = document.getElementById("Reference3"); // CSP only applies when Reference2 is a dropdown if (!reference2 || !reference3 || reference2.tagName !== "SELECT") return; const sizeMap = { small: "SM", medium: "MD", large: "LG", "extra large": "XL", "extra extra large": "XXL", }; if (reference2 && reference3) { // Reset existing handlers by cloning reference2.replaceWith(reference2.cloneNode(true)); const newReference2 = document.getElementById("Reference2"); newReference2.addEventListener("change", function () { const opt = newReference2.options[newReference2.selectedIndex]; const selectedText = opt ? opt.text.trim().toLowerCase() : ""; const code = sizeMap[selectedText]; console.log("Box Size Selected Text:", selectedText, "Code:", code || "None"); reference3.value = code ? "CSP" + code + "P000000" : ""; console.log("DTM Workflow: " + reference3.value); // Tell Package Summary to re-read the current package if (typeof updateCurrentPackageSummary === "function") { updateCurrentPackageSummary(); } }); } } function moveHeaderIntoShippingLayout() { const header = document.querySelector(".Header"); const layout = document.getElementById("shippingLayout"); if (!header || !layout) return; if (header.closest("#shippingLayout")) return; const row = document.createElement("div"); row.className = "row"; const col = document.createElement("div"); col.className = "col-12 col-lg-12 shipping-banner"; const content = document.createElement("div"); content.className = "shipping-banner-content"; const curve = document.createElement("div"); curve.className = "shipping-banner-curve"; const icon = document.createElement("img"); icon.src = "/Home/GetImage?id=1163fba7-de1e-4885-9b30-97804585c542"; icon.alt = ""; icon.className = "shipping-banner-icon"; col.appendChild(icon); const inner = header.querySelector(".float-start"); if (inner) inner.classList.remove("float-start"); // Add class to title if needed let titleDiv = header.querySelector("div"); if (titleDiv) { titleDiv.classList.add("shipping-banner-title"); // Move title out and remove Header wrapper header.removeChild(titleDiv); content.appendChild(titleDiv); } header.remove(); // remove Header entirely col.appendChild(content); col.appendChild(curve); row.appendChild(col); layout.insertBefore(row, layout.firstChild); } // Place Pacakge Summary in Mobile View function movePackageSummaryForMobile() { if (!packageSummaryWrapper) return; const isMobile = window.matchMedia("(max-width: 991.98px)").matches; if (!isMobile) return; // Preferred target (normal layout) const mastMain = document.querySelector(".MastMain"); if (mastMain) { if (!packageSummaryWrapper.closest(".MastMain")) { mastMain.appendChild(packageSummaryWrapper); } return; } // Fallback: insert directly AFTER the main ship form const shipForm = document.getElementById("main_ship_form"); if (!shipForm || !shipForm.parentNode) return; const next = shipForm.nextSibling; if (next !== packageSummaryWrapper) { shipForm.parentNode.insertBefore(packageSummaryWrapper, next); } } // ================================ // Main DOMContentLoaded // ================================ document.addEventListener("DOMContentLoaded", function () { // Branding toggle if (CUSTOM_BRANDING_ENABLED) { hideUpsBranding(); insertLogos(); } // Build responsive layout from legacy table const legacyTable = document.getElementById("mainTable"); if (legacyTable && !document.getElementById("shippingLayout")) { const tbody = legacyTable.tBodies[0]; if (tbody && tbody.rows.length >= 2) { const headerRow = tbody.rows[0]; const dataRow = tbody.rows[1]; const fallbackHeaders = ["Ship From", "Ship To", "Shipment"]; const headerTexts = []; for (let i = 0; i < 3; i++) { const th = headerRow.cells[i]; const txt = th ? th.textContent.trim() : ""; headerTexts.push(txt || fallbackHeaders[i]); } const shipFromTd = dataRow.cells[0]; const shipToTd = dataRow.cells[1]; const shipmentTd = dataRow.cells[2]; const layout = document.createElement("div"); layout.id = "shippingLayout"; layout.className = "container-fluid p-0"; const row = document.createElement("div"); row.className = "row"; [shipFromTd, shipToTd, shipmentTd].forEach(function (td, idx) { if (!td) return; const col = document.createElement("div"); col.className = "col-12 col-lg-4"; const h4 = document.createElement("h4"); h4.className = "text-center mb-3"; h4.textContent = headerTexts[idx] || ""; col.appendChild(h4); while (td.firstChild) { col.appendChild(td.firstChild); } row.appendChild(col); }); layout.appendChild(row); // Comments / checkboxes row addExtraBottomRow(layout); legacyTable.parentNode.insertBefore(layout, legacyTable); // Now that content is moved, decide if extra row should be visible updateExtraRowVisibility(); } } // Bootstrap-like styling enhanceShippingLayout(); // Package dropdown + Add/Remove alignment adjustPackageControls(); // Package summary if (PACKAGE_SUMMARY_ENABLED) { initPackageSummary(); movePackageSummaryForMobile(); window.addEventListener("resize", movePackageSummaryForMobile); } // Mast layout tweaks const mastLeftExists = !!document.querySelector(".MastLeft"); if (PACKAGE_SUMMARY_ENABLED) { // We need MastLeft for placement — real or synthetic ensureMastLeftExists(); applyBrowserLayout(); // browser IDs still needed } else if (!mastLeftExists) { // Only case where centering is allowed centerForm(); } else { // MastLeft exists, no Package Summary ? normal UPS layout applyBrowserLayout(); } // Address book icon const img = document.getElementById("SFAddressBookButton"); if (img) { img.src = "https://row.ups.com/lib/customersolutions.uikit/dist/img/icon-search-brown.svg"; } // Disable Enter key on Ship From Address Book input const sfInput = document.getElementById("SFAddressBook"); if (sfInput) { sfInput.addEventListener("keydown", function (e) { if (e.key === "Enter") { e.preventDefault(); this.blur(); // optional, but nice on mobile } }); } // Hide legacy table if (legacyTable) { legacyTable.style.display = "none"; } // Hamburger menu const toggleBtn = document.querySelector(".appbar-toggle"); const appbar = document.querySelector(".appbar"); if (toggleBtn && appbar) { toggleBtn.addEventListener("click", function () { appbar.classList.toggle("appbar-open"); }); } // CSP (NBNL) select defaults + box size handler (CSP only) if (CSP_ENABLED) { selectDefaults.forEach(({ id, label }) => addDefaultOption(id, label)); attachReference2Handler(); } // Reference defaults initReferenceDefaults(); // if (vLoginType_Text === "StandardShipGuest") { // runGuestLogic(); // } /* Adjust form header */ moveHeaderIntoShippingLayout(); }); //<-- End DOMContentLoaded // ---------------------------------------- // Center the form using classes (no inline styles) // ---------------------------------------- function centerForm() { const element = document.querySelector(".ColorGroup-YellowGreen"); if (!element) return; // If Bootstrap is on the page, these classes will center the form element.classList.add("d-flex", "justify-content-center"); } // ================================ // Browser-specific layout (Edge / Chrome) // ================================ function applyBrowserLayout() { const ua = navigator.userAgent; if (ua.indexOf("Edge") > -1 || ua.indexOf("Edg") > -1) { setEdgeLayout(); } else if (ua.indexOf("Chrome") > -1) { setChromeLayout(); } } function setEdgeLayout() { const left = document.querySelector("body > div.page-layout > main > div.MastLeft"); const main = document.querySelector("body > div.page-layout > main > div.MastMain"); if (!left) return; left.id = "mastleftEdge"; if (vLoginType_Text !== "StandardShip" && main) { main.id = "mastmainEdge"; } } function setChromeLayout() { const left = document.querySelector("body > div.page-layout > main > div.MastLeft"); const main = document.querySelector("body > div.page-layout > main > div.MastMain"); if (!left) return; left.id = "mastleftChrome"; if (vLoginType_Text !== "StandardShip" && main) { main.id = "mastmainChrome"; } } // Guest-only behavior here function runGuestLogic() { // Hide ShipTo section const target = document.querySelector("#shippingLayout > div:nth-child(1) > div:nth-child(2)"); if (!target) return; target.classList.add("d-none"); collapseToTwoColumns(); } function adjustHeaderForGuest() { const headerCol = document.querySelector("#shippingLayout > div:nth-child(1) > div"); if (!headerCol) return; headerCol.classList.remove("col-lg-12"); headerCol.classList.add("col-lg-8"); // Ship From + Shipment } function collapseToTwoColumns() { const layout = document.getElementById("shippingLayout"); if (!layout) return; const row = layout.querySelector(".row"); if (!row) return; const cols = row.children; Array.from(cols).forEach((col) => { if (col.classList.contains("d-none")) return; col.classList.remove("col-lg-4"); col.classList.add("col-lg-6"); }); } // ================================ // Bootstrap-like control styling // ================================ function enhanceShippingLayout() { const layout = document.getElementById("shippingLayout"); if (!layout) return; const controls = layout.querySelectorAll('input[type="text"], ' + 'input[type="email"], ' + 'input[type="tel"], ' + 'input[type="number"], ' + "textarea"); controls.forEach(function (el) { if (!el.classList.contains("form-control")) { el.classList.add("form-control"); } }); const selects = layout.querySelectorAll("select"); selects.forEach(function (sel) { if (!sel.classList.contains("form-select")) { sel.classList.add("form-select"); } }); } // ================================ // Package controls layout // ================================ function adjustPackageControls() { const addBtn = document.getElementById("AddPackage"); const removeBtn = document.getElementById("RemovePackage"); const select = document.getElementById("SelectedPackage"); if (!addBtn || !select) return; const wrapper = addBtn.closest(".marginTopTenpX") || select.closest(".marginTopTenpX"); if (!wrapper) return; const pkgDiv = select.parentElement; const addDiv = addBtn.parentElement; const removeDiv = removeBtn ? removeBtn.parentElement : null; if (!pkgDiv || !addDiv) return; pkgDiv.classList.remove("float-start", "float-end"); addDiv.classList.remove("float-start", "float-end"); if (removeDiv) { removeDiv.classList.remove("float-start", "float-end"); } wrapper.style.display = "block"; if (wrapper.firstChild !== pkgDiv) { wrapper.insertBefore(pkgDiv, wrapper.firstChild); } let btnRow = document.getElementById("packageButtonRow"); if (!btnRow) { btnRow = document.createElement("div"); btnRow.id = "packageButtonRow"; } btnRow.style.display = "flex"; btnRow.style.justifyContent = "space-between"; btnRow.style.alignItems = "center"; btnRow.style.marginTop = "0.25rem"; addDiv.style.display = "inline-block"; if (removeDiv) { removeDiv.style.display = "inline-block"; } btnRow.appendChild(addDiv); if (removeDiv) { btnRow.appendChild(removeDiv); } if (btnRow.parentNode !== wrapper) { wrapper.appendChild(btnRow); } else if (btnRow.previousSibling !== pkgDiv) { wrapper.insertBefore(btnRow, pkgDiv.nextSibling); } pkgDiv.classList.add("mb-1"); } // Make sure MastLeft exists - Added 01.29.2026 function ensureMastLeftExists() { let mastLeft = document.querySelector(".MastLeft"); if (mastLeft) return mastLeft; const main = document.querySelector("main.ColorGroup-YellowGreen"); if (!main) return null; const mastMain = main.querySelector(".MastMain"); mastLeft = document.createElement("div"); mastLeft.className = "MastLeft"; if (mastMain) { main.insertBefore(mastLeft, mastMain); } else { main.prepend(mastLeft); } // Placeholder for announcement slot mastLeft.appendChild(document.createElement("div")); return mastLeft; } // ================================ // Package summary // ================================ function initPackageSummary() { const mastLeft = ensureMastLeftExists(); if (!mastLeft) return; const announcementModule = mastLeft.querySelector(".FirstColumnModule") || mastLeft.firstElementChild; packageSummaryWrapper = document.createElement("div"); packageSummaryWrapper.id = "packageSummaryWrapper"; const DEFAULT_MODULE_CLASS = "FirstColumnModule FirstColumnModuleAddins mast-left-first-col"; if (announcementModule && announcementModule.className && announcementModule.className.trim()) { packageSummaryWrapper.className = announcementModule.className; } else { packageSummaryWrapper.className = DEFAULT_MODULE_CLASS; } packageSummaryWrapper.style.marginTop = "1.25rem"; const inner = document.createElement("div"); inner.style.padding = "5px"; const title = document.createElement("h4"); title.textContent = "Package Summary"; title.style.margin = "0 0 0.5rem 0"; title.style.padding = ".5rem"; inner.appendChild(title); const table = document.createElement("table"); table.id = "packageSummaryTable"; table.className = "table table-sm table-bordered"; const thead = document.createElement("thead"); const headRow = document.createElement("tr"); ["Pkg #", "Weight", "Reference 1", "Reference 2"].forEach(function (label) { const th = document.createElement("th"); th.textContent = label; headRow.appendChild(th); }); thead.appendChild(headRow); table.appendChild(thead); const tbody = document.createElement("tbody"); table.appendChild(tbody); packageSummaryTableBody = tbody; inner.appendChild(table); packageSummaryWrapper.appendChild(inner); // Comment out for new MastLeft Code if (announcementModule && announcementModule.nextSibling) { mastLeft.insertBefore(packageSummaryWrapper, announcementModule.nextSibling); } else { mastLeft.appendChild(packageSummaryWrapper); } packageSummaryWrapper.style.display = "none"; setPackageSummaryListeners(); setRemovePackageButton(); updateCurrentPackageSummary(); } function setPackageSummaryListeners() { const weight = document.getElementById("Weight"); const ref1 = document.getElementById("Reference1"); const ref2 = document.getElementById("Reference2"); const pkgSelect = document.getElementById("SelectedPackage"); function set(el) { if (!el) return; el.removeEventListener("input", handlePackageInputChange); el.removeEventListener("change", handlePackageInputChange); el.addEventListener("input", handlePackageInputChange); el.addEventListener("change", handlePackageInputChange); } set(weight); set(ref1); set(ref2); set(pkgSelect); } function setRemovePackageButton() { const removeBtn = document.getElementById("RemovePackage"); if (!removeBtn) return; removeBtn.removeEventListener("click", handleRemovePackageClick); removeBtn.addEventListener("click", handleRemovePackageClick); } function handleRemovePackageClick() { const pkgSelect = document.getElementById("SelectedPackage"); if (!pkgSelect) { pendingRemovedPackageNo = null; return; } pendingRemovedPackageNo = pkgSelect.value || null; } function handlePackageInputChange() { updateCurrentPackageSummary(); } function updateCurrentPackageSummary() { if (!PACKAGE_SUMMARY_ENABLED) return; const pkgSelect = document.getElementById("SelectedPackage"); const pkgNo = pkgSelect ? pkgSelect.value || "1" : "1"; const weightEl = document.getElementById("Weight"); const ref1El = document.getElementById("Reference1"); const ref2El = document.getElementById("Reference2"); const weight = weightEl ? weightEl.value : ""; const ref1 = ref1El ? ref1El.value : ""; let ref2 = ""; if (ref2El) { if (ref2El.tagName === "SELECT") { const idx = ref2El.selectedIndex; // Treat index 0 as "no selection" ALWAYS if (idx > 0) { const opt = ref2El.options[idx]; ref2 = opt ? opt.text : ""; } } else { ref2 = ref2El.value; } } const anyValue = Boolean(weight || ref1 || ref2); if (anyValue) { packageSummary[pkgNo] = { weight: weight, ref1: ref1, ref2: ref2, }; } else { delete packageSummary[pkgNo]; } renderPackageSummaryTable(); } function renderPackageSummaryTable() { if (!packageSummaryTableBody || !packageSummaryWrapper) return; while (packageSummaryTableBody.firstChild) { packageSummaryTableBody.removeChild(packageSummaryTableBody.firstChild); } const pkgNos = Object.keys(packageSummary) .map(Number) .sort((a, b) => a - b); if (pkgNos.length === 0) { packageSummaryWrapper.style.display = "none"; return; } pkgNos.forEach(function (pkgNo) { const data = packageSummary[pkgNo]; if (!data || (!data.weight && !data.ref1 && !data.ref2)) return; const tr = document.createElement("tr"); const tdPkg = document.createElement("td"); tdPkg.textContent = String(pkgNo); tr.appendChild(tdPkg); const tdWeight = document.createElement("td"); tdWeight.textContent = data.weight || ""; tr.appendChild(tdWeight); const tdRef1 = document.createElement("td"); tdRef1.textContent = data.ref1 || ""; tr.appendChild(tdRef1); const tdRef2 = document.createElement("td"); tdRef2.textContent = data.ref2 || ""; tr.appendChild(tdRef2); packageSummaryTableBody.appendChild(tr); }); packageSummaryWrapper.style.display = "block"; } function renumberPackageSummary(removedNo) { if (!packageSummary) return; // Always remove the deleted package explicitly delete packageSummary[removedNo]; const nums = Object.keys(packageSummary) .map(Number) .sort((a, b) => a - b); nums.forEach(function (n) { if (n > removedNo) { packageSummary[n - 1] = packageSummary[n]; delete packageSummary[n]; } }); } // Call function only if it exists const callIfFn = (fn) => typeof fn === "function" && fn(); // ================================ // XHR intercept for package actions // ================================ const { open: origOpen, send: origSend } = XMLHttpRequest.prototype; XMLHttpRequest.prototype.open = function (...args) { this._url = args[1]; return origOpen.apply(this, args); }; XMLHttpRequest.prototype.send = function (...args) { if (this.onreadystatechange) this._onreadystatechange = this.onreadystatechange; this.onreadystatechange = onReadyStateChangeReplacement; return origSend.apply(this, args); }; function onReadyStateChangeReplacement() { const { _url, readyState, status } = this; const isRelevant = _url === "AddPackage" || _url === "SelectPackage" || _url === "RemovePackage"; if (isRelevant && readyState === 4 && status === 200) { setTimeout(() => { callIfFn(enhanceShippingLayout); callIfFn(adjustPackageControls); if (PACKAGE_SUMMARY_ENABLED) { callIfFn(setPackageSummaryListeners); callIfFn(setRemovePackageButton); if (_url === "RemovePackage" && pendingRemovedPackageNo != null) { renumberPackageSummary(Number(pendingRemovedPackageNo)); pendingRemovedPackageNo = null; callIfFn(renderPackageSummaryTable); } else { callIfFn(updateCurrentPackageSummary); } // Package summary movePackageSummaryForMobile(); } // Re-apply CSP wiring after UPS re-renders package UI (CSP only) if (CSP_ENABLED) { addDefaultOption("Reference2", REFERENCE2_DEFAULT_LABEL); attachReference2Handler(); } }, 100); setTimeout(() => { initReferenceDefaults(); }, 100); } return this._onreadystatechange?.apply(this, arguments); } /* Starter Custom Shipping Portal - Mobile Friendly - 01.29.2026v1 */ /* .Header { background-color: unset !important; } */ /* UPS Banner above form */ .shipping-banner { position: relative; background-color: #f2efe9; height: 110px; /* smaller banner */ overflow: hidden; margin-top: -4px; } /* Banner verbiage "Shipping Information" */ .shipping-banner-content { position: relative; z-index: 2; padding: 1.25rem 1.25rem 0.5rem; /* less bottom padding */ } /* Banner background curve */ .shipping-banner-curve { position: absolute; left: -10%; width: 120%; height: 120px; /* smaller curve */ bottom: -85px; /* push curve DOWN so it doesn't eat the next row */ background-color: #ffffff; border-top-left-radius: 100% 70px; border-top-right-radius: 100% 70px; z-index: 1; } /* Banner verbiage styling */ .shipping-banner-title { font-family: Segoe UI; font-style: italic; font-size: 22px; font-weight: 600; color: #330000; padding: 0 !important; } /* Banner shipping box */ .shipping-banner-icon { position: absolute; top: 1rem; right: 2rem; width: 90px; height: auto; z-index: 3; pointer-events: none; } #shippingLayout > .row:nth-child(2) { /*padding-top: 0.5rem;*/ /* small, safe tighten */ margin-top: -15px; /* keep normal flow */ } .MastLeft { min-height: 0 !important; } .buttonBarStyle { margin-top: 0 !important; } #ButtonBarDiv { background-color: unset; text-align: -webkit-center; margin-top: 2% !important; } .ButtonPrime, .ButtonStandard { align-items: center; justify-content: center; background: none !important; background-color: #ffc400 !important; border-color: transparent; border-radius: 22px; padding: 3px 10px 8px 25px; color: #121212; text-decoration: none; transition: all 0.35s ease-in-out; font-size: 0.875rem; font-weight: 500; line-height: 1; position: relative; padding-right: 40px; text-align: center; text-transform: uppercase; white-space: nowrap; } input.ButtonPrime:hover, input.ButtonStandard:hover, #packageHistoryBtn:hover { background-image: none !important; color: #000; background-color: #ffd64c !important; box-shadow: 0 4px 10px rgba(128, 128, 128, 0.5); } /* ============================================ Main logo styling ============================================ */ .custom-top-bar { min-height: 25px; width: 100%; background-color: #1B2A33; /* adjust as needed */ } .img1 { padding-top: 1%; width: 100%; //padding-left: 10%; } /* ============================================ Announcement section layout ============================================ */ .FirstColumnModule { background-color: #fff!important; border: 1px solid #000!important; /*padding: 2% !important;*/ /*margin-right: 0;*/ } /* ================================ 1. Form module & header alignment ================================ */ /* Page background */ body > div.page-layout > main { background: #F1F1F2; } /* Let the beige form card fill the center panel, but control inner padding ourselves */ .MastMain .FormModule { /*padding: 1rem 0 1.5rem;*/ /* top | left/right | bottom */ box-sizing: border-box; } /* Main ship form uses full width of the module */ #main_ship_form { width: 100%; /* margin: 0 auto; */ background-color: #fff; margin-bottom: 10px; border: 1px solid #000 } /* Remove spacing */ /*#main_ship_form .Header { margin: 0; }*/ /* Set headers background */ .FormModule h4, #shippingLayout > div > div:nth-child(3) > h4:nth-child(35) > label { background-color: #fff; margin-bottom: 0 !important; font-family: Segoe UI; font-style: italic; font-size: 22px; font-weight: 600; /* text-align: left; */ color: #300000; } /* Header and body share the same horizontal padding, so the columns start right under "Shipping Information." */ /*#main_ship_form .Header, #shippingLayout { padding-left: 1.5rem; padding-right: 1.5rem; }*/ /* Header sits tight to the top of the module, with a bit of space below */ /*#main_ship_form .Header { margin: 0 0 1rem 0; }*/ #boxSFAddressBook input { display: inline-block; } #boxSFAddressBook img { display: inline-block; margin-left: 1%; vertical-align: middle; } #SFAddressBookButton { width: 30px !important; height: 30px !important; fill: #666 !important; transition: fill 0.2s ease; background: url("icon-search-hover.svg") no-repeat center; background-size: contain; } #SFAddressBookButton:hover { fill: #0d6efd; /* hover color */ filter: brightness(0) saturate(100%) invert(35%) sepia(85%) saturate(300%) hue-rotate(200deg); } #boxSTAddressBook { margin-bottom: 2.25%; } .widthoneEighty { width: 81% !important; } /* .form-control { line-height: 0 !important; } */ /* .form-select { line-height: 1.25 !important; padding: 0.175rem 2.25rem 0.175rem 0.75rem !important; } */ .form-control, .form-select { line-height: 1em !important; /*padding: 0.175rem 2.25rem 0.175rem 0.75rem !important;*/ font-size: 0.875rem !important; } /* ================================ 2. Shipping layout container ================================ */ #shippingLayout { width: 100%; margin: 0; /* margin-top: 0.25rem; */ /* small gap under header bar */ } /* Remove extra negative margins from the Bootstrap row inside */ #shippingLayout .row { margin-left: 0; margin-right: 0; } /* Give each column some horizontal gutter */ #shippingLayout .col-12.col-lg-4 { padding-left: 0.75rem; padding-right: 0.75rem; } /* Remove spacing below headers */ /*h4.mb-3 { margin-bottom: 0 !important; }*/ /* Remove line above the Additional Data */ .FormModule hr { display: none; } /* Make Comment Text Area writable */ #boxComment textarea { line-height: 1.2 !important; min-height: 2.5rem; } /* Remove line above Pkgs wording */ #shippingLayout > div > div:nth-child(3) > hr { display: none; } /* Desktop: exactly three equal-width columns */ @media (min-width: 992px) { #shippingLayout .col-12.col-lg-4 { flex: 0 0 33.3333%; max-width: 33.3333%; } } /* Optional: vertical separators between columns on desktop */ @media (min-width: 992px) { #shippingLayout .col-12.col-lg-4 { border-right: 1px solid #e5ddd0; } #shippingLayout .col-12.col-lg-4:last-child { border-right: none; } } /* ================================ 3. Legacy width helpers & controls ================================ */ /* Make legacy width classes behave like full-width inputs inside columns */ #shippingLayout .w-220, #shippingLayout .w-225, #shippingLayout .widthTwoThirty, #shippingLayout .widthTwentyFive { width: 100% !important; max-width: 100% !important; } /* Label spacing */ #shippingLayout label { display: inline-block; /* margin-bottom: 0.15rem; */ background-color: transparent; font-family: Segoe UI; font-size: 13px; font-weight: 400; text-align: left; color: #330000; margin: 0px; } /* Slightly tighter input look */ #shippingLayout .form-control { font-size: 0.9rem; padding: 0.25rem 0.5rem; } /* ================================ 4. Outer container helper ================================ */ /* If the outer .container is fixed width, let it stretch */ .MastMain > .container { max-width: 100%; } /* ================================ 5. Appbar / hamburger behaviour ================================ */ /* .appbar { */ /* keep your existing desktop styles here */ /* } */ @media (max-width: 991.98px) { .appbar { display: none; } .appbar.appbar-open { display: block; } } /* Put MastLeft + MastMain on a flex row */ .ColorGroup-YellowGreen { display: flex; flex-wrap: wrap; /* lets them stack on small screens */ } /* Make sure old float widths don't fight us */ .MastLeft, .MastMain { float: none !important; box-sizing: border-box; } /* Desktop and up: left Ëœ35%, right Ëœ65% */ @media (min-width: 992px) { .MastLeft { flex: 0 0 35%; max-width: 35%; /*padding-right: 1.5rem;*/ /* space between announcement + form */ } .MastMain { flex: 0 0 65%; max-width: 65%; margin-left: 0 !important; margin-right: 0 !important; } } /* Mobile / tablet: stack full-width */ @media (max-width: 991.98px) { .MastLeft, .MastMain { flex: 0 0 100%; max-width: 100%; padding-right: 0; margin-left: 0 !important; } } @media (min-width: 768px) { .container, .container-md, .container-sm { max-width: 100%; } } /* Make SFAddressBookButton smaller on very small screens */ /*@media (max-width: 950px) { #SFAddressBookButton { width: 5% !important; } }*/ @media (min-width: 576px) { .container, .container-sm { max-width: 100%; } } /* Fix tall even row in Package Summary table only */ #packageSummaryTable tbody tr:nth-child(even) { height: auto; /* cancel the global 46px */ /* keep the zebra color if you like */ background: #f2f1ef; /* or remove this line if you don't want striping */ color: #330000; /* optional: keep text color consistent */ } @media (max-width: 991.98px) { #packageSummaryWrapper { margin-left: 10px; } } /* ============================================ Footer tweaks ============================================ */ body > div.page-layout > footer { background: #492F24; /* color: #000; */ font-size: small; min-height: 45px !important; } /* body > div.page-layout > footer > div:nth-child(2) > a:nth-child(1), body > div.page-layout > footer > div:nth-child(2) > a:nth-child(3), body > div.page-layout > footer > div:nth-child(2) > a:nth-child(5), body > div.page-layout > footer > div:nth-child(2) > a:nth-child(7) { color: #000; } */ /* Mobile-only footer height adjustment */ @media (max-width: 991.98px) { body > div.page-layout > footer { min-height: 75px !important; } } /* ============================================ Browser-specific masthead offsets (IDs are assigned by the JS Edge()/Chrome() helpers) ============================================ */ /* Used with User View - Edge */ #mastleftEdge { margin-top: -0.90%; } /* Used with GA View - Edge */ #mastmainEdge { margin-top: 0px; } /* Used with User View - Chrome */ #mastleftChrome { margin-top: -0.75%; } /* Used with GA View - Chrome */ #mastmainChrome { margin-top: 3px; } <b>Welcome to our new UPS interface!</b> This improved site continues to offer the same discounted shipping rates for sending samples to WSVL.<br><br> A copy of your shipping label will automatically be emailed to the address you provide, making it easier to track your shipment.<br><br> WSVL personnel will also have the ability to track your packages.<br><br> You can use the <b>Compare Cost</b> option in the <b>UPS Service</b> dropdown in order to estimate your shipping costs based on the entered package information.<br><br> If you are shipping multiple packages, simply click <b>“Add”</b> in the package section.<br> Once you select <b>“Process Shipment,”</b> your shipping label will appear with an option to print.<br><br> You will also see an option to <b>“Click here to schedule a pickup.”</b><br> 90truefalsefalsefalsefalsefalsefalsetruetrue0falsefalse0falsefalse1753-01-01T00:00:00truefalsefalsefalsefalsefalsefalsefalse0truefalsefalsefalsefalsetruefalsefalsefalsetrueVW5pdk9mV1k=falseP281395falsefalseeee4e282-7246-4ba8-8aa1-624a29721988falsefalsefalsefalsefalse0P281572US902026-02-02T12:31:39cplotts@uwyo.edudJsWwGpiPRD_UnivOfWY_000000_RefreshToken01226c4755-e1b6-4dc5-81ac-d79ff5c4e2625196a6ed-54d7-44f1-9707-d059998df57efalsefalse1falseUnivOfWY36611Guest Accesstrue03b592f97-369a-4a4f-9f3d-a0336c7c4cfaGuest Access2026-02-02T00:00:0010000