{"id":54,"date":"2026-08-18T18:12:05","date_gmt":"2026-08-18T18:12:05","guid":{"rendered":"https:\/\/darkseagreen-antelope-561225.hostingersite.com\/?page_id=54"},"modified":"2026-10-29T16:39:55","modified_gmt":"2026-10-29T16:39:55","slug":"correctional-facilities","status":"publish","type":"page","link":"https:\/\/sendbookstomissouriprison.com\/?page_id=54","title":{"rendered":"Correctional Facilities"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"54\" class=\"elementor elementor-54\">\n\t\t\t\t<div class=\"elementor-element elementor-element-436db9e e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"436db9e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-345ddd7 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"345ddd7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Correctional Facilities<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-634d205 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"634d205\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p dir=\"auto\">Find the location first, then read its mail rules before you order. Cards below show the name, address, phone, and policy link when one is available.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1570c4c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"1570c4c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d2e477c elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"d2e477c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">missouri Facilities Directory<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d9be73 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"1d9be73\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Find and verify specific mailroom policies and delivery guidelines for institutions across the state.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-233f45e elementor-widget elementor-widget-html\" data-id=\"233f45e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n<!-- =========================================\r\n MISSOURI FACILITY & SHERIFF DIRECTORY\r\n COMPLETE ELEMENTOR HTML WIDGET\r\n UPDATED SHERIFF LOGO: missouri-9-1-1.png\r\n ========================================= -->\r\n\r\n<div id=\"mo-directory\" class=\"mo-directory\">\r\n\r\n  <div class=\"mo-tabs\" role=\"tablist\" aria-label=\"Missouri directory type\">\r\n\r\n    <button\r\n      class=\"mo-tab is-active\"\r\n      type=\"button\"\r\n      role=\"tab\"\r\n      aria-selected=\"true\"\r\n      data-tab=\"facilities\">\r\n      Facility Directory\r\n    <\/button>\r\n\r\n    <button\r\n      class=\"mo-tab\"\r\n      type=\"button\"\r\n      role=\"tab\"\r\n      aria-selected=\"false\"\r\n      data-tab=\"sheriffs\">\r\n      Sheriff's Office\r\n    <\/button>\r\n\r\n  <\/div>\r\n\r\n  <div class=\"mo-search-wrap\">\r\n\r\n    <label class=\"mo-sr-only\" for=\"mo-directory-search\">\r\n      Search directory\r\n    <\/label>\r\n\r\n    <span class=\"mo-search-icon\" aria-hidden=\"true\">\u2315<\/span>\r\n\r\n    <input\r\n      id=\"mo-directory-search\"\r\n      type=\"search\"\r\n      autocomplete=\"off\"\r\n      placeholder=\"Search facilities by name, city, address, or phone...\">\r\n\r\n    <button\r\n      id=\"mo-clear-search\"\r\n      type=\"button\"\r\n      aria-label=\"Clear search\"\r\n      hidden>\u00d7<\/button>\r\n\r\n  <\/div>\r\n\r\n  <div\r\n    id=\"mo-result-count\"\r\n    class=\"mo-result-count\"\r\n    aria-live=\"polite\"><\/div>\r\n\r\n  <div\r\n    id=\"mo-card-grid\"\r\n    class=\"mo-card-grid\"\r\n    role=\"tabpanel\"><\/div>\r\n\r\n  <div\r\n    id=\"mo-empty-state\"\r\n    class=\"mo-empty-state\"\r\n    hidden>\r\n    <strong>No matches found.<\/strong>\r\n    <span>Try a facility, county, city, address, or phone number.<\/span>\r\n  <\/div>\r\n\r\n  <div\r\n    id=\"mo-pagination\"\r\n    class=\"mo-pagination\"\r\n    hidden>\r\n\r\n    <button\r\n      id=\"mo-toggle-more\"\r\n      type=\"button\"\r\n      aria-expanded=\"false\"\r\n      aria-controls=\"mo-card-grid\">\r\n      View More\r\n    <\/button>\r\n\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<style>\r\n\r\n\/* =========================================\r\n GENERAL\r\n ========================================= *\/\r\n\r\n#mo-directory,\r\n#mo-directory * {\r\n  box-sizing: border-box;\r\n}\r\n\r\n#mo-directory {\r\n\r\n  --mo-blue: #173f83;\r\n  --mo-blue-dark: #102f67;\r\n  --mo-green: #5bd272;\r\n  --mo-muted: #53657b;\r\n\r\n  width: 100%;\r\n  max-width: 1180px;\r\n  margin: 0 auto;\r\n  padding: 38px 24px 52px;\r\n\r\n  font-family: inherit;\r\n  color: #101827;\r\n  line-height: 1.65;\r\n\r\n}\r\n\r\n\/* =========================================\r\n DIRECTORY TABS\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-tabs {\r\n  display: flex;\r\n  justify-content: center;\r\n  gap: 12px;\r\n  margin-bottom: 22px;\r\n}\r\n\r\n\r\n\r\n#mo-directory button.mo-tab {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  min-width: 180px;\r\n  min-height: 52px;\r\n  margin: 0;\r\n  padding: 13px 24px;\r\n  border: 1px solid #000;\r\n  border-radius: 9px;\r\n  background: #fff;\r\n  color: #203C7B;\r\n  font-family: inherit;\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  text-align: center;\r\n  text-transform: none;\r\n  cursor: pointer;\r\n  transition: all .2s ease;\r\n}\r\n\r\n\r\n#mo-directory button.mo-tab:hover {\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 8px 22px rgba(16,47,103,.1);\r\n}\r\n\r\n\r\n\r\n#mo-directory button.mo-tab.is-active {\r\n  background: #203C7B !important;\r\n  border-color: #000 !important;\r\n  color: #fff !important;\r\n}\r\n\r\n#mo-directory button.mo-tab:hover {\r\n\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 8px 22px rgba(16,47,103,.1);\r\n\r\n}\r\n\r\n#mo-directory button.mo-tab.is-active {\r\n\r\n  background: #203C7B !important;\r\n  border-color: #5bd272 !important;\r\n  color: #fff !important;\r\n\r\n}\r\n\r\n\/* =========================================\r\n SEARCH BAR\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-search-wrap {\r\n\r\n  position: relative;\r\n  width: min(100%,720px);\r\n  margin: 0 auto 9px;\r\n\r\n}\r\n\r\n#mo-directory #mo-directory-search {\r\n\r\n  display: block;\r\n\r\n  width: 100%;\r\n  height: 52px;\r\n  min-height: 52px;\r\n\r\n  margin: 0;\r\n  padding: 0 50px 0 48px;\r\n\r\n  border: 1px solid #d8dee7;\r\n  border-radius: 9px;\r\n\r\n  background: #fff;\r\n  color: #101827;\r\n\r\n  font-family: inherit;\r\n  font-size: 16px;\r\n\r\n  box-shadow: 0 5px 18px rgba(23,63,131,.06);\r\n\r\n}\r\n\r\n#mo-directory #mo-directory-search:focus {\r\n\r\n  border-color: #173f83;\r\n  outline: 3px solid rgba(23,63,131,.12);\r\n\r\n}\r\n\r\n#mo-directory .mo-search-icon {\r\n\r\n  position: absolute;\r\n\r\n  left: 18px;\r\n  top: 50%;\r\n\r\n  transform: translateY(-52%);\r\n\r\n  color: #173f83;\r\n  font-size: 27px;\r\n  line-height: 1;\r\n\r\n  pointer-events: none;\r\n\r\n}\r\n\r\n#mo-directory #mo-clear-search {\r\n\r\n  position: absolute;\r\n\r\n  right: 10px;\r\n  top: 50%;\r\n\r\n  transform: translateY(-50%);\r\n\r\n  width: 34px;\r\n  height: 34px;\r\n  min-height: 34px;\r\n\r\n  margin: 0;\r\n  padding: 0;\r\n\r\n  border: 0;\r\n  border-radius: 50%;\r\n\r\n  background: #eef2f7;\r\n  color: #173f83;\r\n\r\n  font-size: 24px;\r\n\r\n  cursor: pointer;\r\n\r\n}\r\n\r\n#mo-directory .mo-result-count {\r\n\r\n  min-height: 28px;\r\n\r\n  margin: 0 auto 19px;\r\n\r\n  color: #53657b;\r\n  font-size: 14px;\r\n\r\n  text-align: center;\r\n\r\n}\r\n\r\n\/* =========================================\r\n CARD GRID\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-card-grid {\r\n\r\n  display: grid;\r\n\r\n  grid-template-columns: repeat(3,minmax(0,1fr));\r\n\r\n  gap: 26px;\r\n  width: 100%;\r\n\r\n}\r\n\r\n#mo-directory article.mo-card {\r\n\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  min-width: 0;\r\n  width: 100%;\r\n\r\n  margin: 0;\r\n  padding: 0;\r\n\r\n  overflow: hidden;\r\n\r\n  border: 1px solid #e7e9ed;\r\n  border-radius: 14px;\r\n\r\n  background: #fff;\r\n\r\n  box-shadow: 0 10px 26px rgba(20,42,76,.09);\r\n\r\n  transition: all .2s ease;\r\n\r\n}\r\n\r\n#mo-directory article.mo-card:hover {\r\n\r\n  transform: translateY(-4px);\r\n\r\n  box-shadow: 0 16px 34px rgba(20,42,76,.14);\r\n\r\n}\r\n\r\n\/* =========================================\r\n FACILITY DIRECTORY IMAGES\r\n FULL COVER - CENTER CENTER\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-thumb.mo-facility-photo {\r\n\r\n  position: relative;\r\n\r\n  display: block;\r\n\r\n  width: 100%;\r\n  height: 190px;\r\n  min-height: 190px;\r\n\r\n  padding: 0 !important;\r\n  margin: 0;\r\n\r\n  overflow: hidden;\r\n\r\n  background: #e8edf4;\r\n\r\n}\r\n\r\n#mo-directory .mo-thumb.mo-facility-photo img {\r\n\r\n  display: block !important;\r\n\r\n  width: 100% !important;\r\n  max-width: 100% !important;\r\n\r\n  height: 100% !important;\r\n  max-height: none !important;\r\n\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n\r\n  border: 0 !important;\r\n  border-radius: 0 !important;\r\n\r\n  object-fit: cover !important;\r\n  object-position: center center !important;\r\n\r\n  box-shadow: none !important;\r\n\r\n}\r\n\r\n\/* =========================================\r\n SHERIFF'S OFFICE LOGOS ONLY\r\n CENTERED WITHOUT CROPPING\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-thumb.mo-sheriff-logo {\r\n\r\n  display: flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  width: 100%;\r\n  height: 190px;\r\n  min-height: 190px;\r\n\r\n  padding: 22px;\r\n  margin: 0;\r\n\r\n  background: linear-gradient(\r\n    135deg,\r\n    #eef3f9 0%,\r\n    #dce5ef 100%\r\n  );\r\n\r\n  overflow: hidden;\r\n\r\n}\r\n\r\n#mo-directory .mo-thumb.mo-sheriff-logo img {\r\n\r\n  display: block !important;\r\n\r\n  width: 140px !important;\r\n  max-width: 72% !important;\r\n\r\n  height: auto !important;\r\n  max-height: 145px !important;\r\n\r\n  margin: 0 auto !important;\r\n  padding: 0 !important;\r\n\r\n  border: 0 !important;\r\n  border-radius: 0 !important;\r\n\r\n  object-fit: contain !important;\r\n  object-position: center center !important;\r\n\r\n  box-shadow: none !important;\r\n\r\n}\r\n\r\n\/* =========================================\r\n MISSING FACILITY IMAGE\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-no-image {\r\n\r\n  display: flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  width: 100%;\r\n  height: 100%;\r\n\r\n  padding: 15px;\r\n\r\n  background: #e8edf4;\r\n\r\n  color: #64748b;\r\n  font-size: 13px;\r\n\r\n  text-align: center;\r\n\r\n}\r\n\r\n\/* =========================================\r\n CARD CONTENT\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-card-body {\r\n\r\n  display: flex;\r\n  flex: 1;\r\n  flex-direction: column;\r\n\r\n  width: 100%;\r\n\r\n  padding: 21px 20px 18px;\r\n\r\n}\r\n\r\n#mo-directory .mo-card h3 {\r\n\r\n  min-height: 56px;\r\n\r\n  margin: 0 0 15px;\r\n  padding: 0;\r\n\r\n  color: #090f1b;\r\n\r\n  font-family: inherit;\r\n  font-size: 25px;\r\n  font-weight: 600;\r\n\r\n  line-height: 1.3;\r\n\r\n  text-align: left;\r\n  text-transform: none;\r\n\r\n}\r\n\r\n#mo-directory p.mo-detail {\r\n\r\n  display: grid;\r\n\r\n  grid-template-columns: 18px minmax(0,1fr);\r\n\r\n  gap: 9px;\r\n  align-items: start;\r\n\r\n  margin: 0 0 10px;\r\n  padding: 0;\r\n\r\n  color: #53657b;\r\n\r\n  font-size: 13px;\r\n  line-height: 1.7;\r\n\r\n}\r\n\r\n#mo-directory .mo-detail svg {\r\n\r\n  display: block;\r\n\r\n  width: 16px;\r\n  height: 16px;\r\n\r\n  margin-top: 1px;\r\n\r\n  color: #173f83;\r\n  fill: currentColor;\r\n\r\n}\r\n\r\n#mo-directory .mo-detail a,\r\n#mo-directory .mo-detail span {\r\n\r\n  color: #53657b;\r\n\r\n  font-size: 13px;\r\n  text-decoration: none;\r\n\r\n}\r\n\r\n#mo-directory .mo-detail a:hover {\r\n\r\n  color: #173f83;\r\n  text-decoration: underline;\r\n\r\n}\r\n\r\n\/* =========================================\r\n POLICY BUTTONS\r\n ========================================= *\/\r\n\r\n#mo-directory a.mo-policy-button {\r\n\r\n  display: block;\r\n\r\n  width: 100%;\r\n  min-height: 43px;\r\n\r\n  margin: auto 0 0;\r\n  padding: 12px 15px;\r\n\r\n  border-radius: 5px;\r\n\r\n  background: #173f83 !important;\r\n  color: #fff !important;\r\n\r\n  font-family: inherit;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n\r\n  line-height: 1.45;\r\n\r\n  text-align: center;\r\n  text-decoration: none !important;\r\n\r\n}\r\n\r\n#mo-directory a.mo-policy-button:hover {\r\n\r\n  background: #102f67 !important;\r\n\r\n}\r\n\r\n\/* =========================================\r\n VIEW MORE \/ VIEW LESS\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-pagination {\r\n\r\n  display: flex;\r\n\r\n  justify-content: center;\r\n\r\n  width: 100%;\r\n\r\n  margin: 30px auto 0;\r\n\r\n}\r\n\r\n#mo-directory #mo-toggle-more {\r\n\r\n  display: inline-flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  min-width: 170px;\r\n  min-height: 48px;\r\n\r\n  margin: 0;\r\n  padding: 13px 34px;\r\n\r\n  border: 0;\r\n  border-radius: 8px;\r\n\r\n  background: #173f83 !important;\r\n  color: #fff !important;\r\n\r\n  font-family: inherit;\r\n  font-size: 15px;\r\n  font-weight: 600;\r\n\r\n  cursor: pointer;\r\n  text-transform: none;\r\n\r\n}\r\n\r\n#mo-directory #mo-toggle-more:hover {\r\n\r\n  background: #102f67 !important;\r\n\r\n}\r\n\r\n\/* =========================================\r\n EMPTY STATE\r\n ========================================= *\/\r\n\r\n#mo-directory .mo-empty-state {\r\n\r\n  margin: 22px auto 0;\r\n\r\n  padding: 38px 20px;\r\n\r\n  border: 1px dashed #cbd4df;\r\n  border-radius: 12px;\r\n\r\n  background: #fff;\r\n\r\n  text-align: center;\r\n  color: #53657b;\r\n\r\n}\r\n\r\n#mo-directory .mo-empty-state strong,\r\n#mo-directory .mo-empty-state span {\r\n\r\n  display: block;\r\n\r\n}\r\n\r\n#mo-directory .mo-empty-state strong {\r\n\r\n  margin-bottom: 5px;\r\n\r\n  color: #173f83;\r\n  font-size: 20px;\r\n\r\n}\r\n\r\n#mo-directory .mo-sr-only {\r\n\r\n  position: absolute !important;\r\n\r\n  width: 1px;\r\n  height: 1px;\r\n\r\n  overflow: hidden;\r\n\r\n  clip: rect(0,0,0,0);\r\n\r\n}\r\n\r\n#mo-directory [hidden] {\r\n\r\n  display: none !important;\r\n\r\n}\r\n\r\n\/* =========================================\r\n RESPONSIVE\r\n ========================================= *\/\r\n\r\n@media(max-width:900px) {\r\n\r\n  #mo-directory .mo-card-grid {\r\n\r\n    grid-template-columns: repeat(2,minmax(0,1fr));\r\n\r\n  }\r\n\r\n}\r\n\r\n@media(max-width:600px) {\r\n\r\n  #mo-directory {\r\n\r\n    padding: 26px 12px 38px;\r\n\r\n  }\r\n\r\n  #mo-directory .mo-tabs {\r\n\r\n    gap: 8px;\r\n\r\n  }\r\n\r\n  #mo-directory button.mo-tab {\r\n\r\n    min-width: 0;\r\n    flex: 1;\r\n\r\n    padding: 11px 10px;\r\n\r\n    font-size: 14px;\r\n\r\n  }\r\n\r\n  #mo-directory .mo-card-grid {\r\n\r\n    grid-template-columns: 1fr;\r\n    gap: 18px;\r\n\r\n  }\r\n\r\n  #mo-directory .mo-thumb.mo-facility-photo,\r\n  #mo-directory .mo-thumb.mo-sheriff-logo {\r\n\r\n    height: 165px;\r\n    min-height: 165px;\r\n\r\n  }\r\n\r\n  #mo-directory .mo-card h3 {\r\n\r\n    min-height: 0;\r\n    font-size: 22px;\r\n\r\n  }\r\n\r\n}\r\n\r\n\/* =========================================\r\n ELEMENTOR THEME OVERRIDE\r\n ========================================= *\/\r\n\r\nhtml body #mo-directory.mo-directory {\r\n\r\n  display: block !important;\r\n\r\n  max-width: 1180px !important;\r\n\r\n  margin-left: auto !important;\r\n  margin-right: auto !important;\r\n\r\n}\r\n\r\nhtml body #mo-directory.mo-directory .mo-card-grid {\r\n\r\n  display: grid !important;\r\n  grid-template-columns: repeat(3,minmax(0,1fr)) !important;\r\n\r\n}\r\n\r\n@media(max-width:900px) {\r\n\r\n  html body #mo-directory.mo-directory .mo-card-grid {\r\n\r\n    grid-template-columns: repeat(2,minmax(0,1fr)) !important;\r\n\r\n  }\r\n\r\n}\r\n\r\n@media(max-width:600px) {\r\n\r\n  html body #mo-directory.mo-directory .mo-card-grid {\r\n\r\n    grid-template-columns: 1fr !important;\r\n\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n<script>\r\n(function() {\r\n  \"use strict\";\r\n\r\n  const root = document.getElementById(\"mo-directory\");\r\n\r\n  if (!root || root.dataset.ready === \"true\") return;\r\n\r\n  root.dataset.ready = \"true\";\r\n\r\n  \/* =========================================\r\n   WORDPRESS FACILITY IMAGE FOLDER\r\n   ========================================= *\/\r\n\r\n  const IMAGE_BASE =\r\n    \"https:\/\/sendbookstomissouriprison.com\/wp-content\/uploads\/2026\/10\/\";\r\n\r\n  \/* =========================================\r\n   UPDATED SHERIFF'S OFFICE LOGO\r\n\r\n   NEW IMAGE: missouri-9-1-1.png\r\n\r\n   This logo appears ONLY on the\r\n   Sheriff's Office directory tab.\r\n   ========================================= *\/\r\n\r\n  const SHERIFF_LOGO =\r\n    \"https:\/\/sendbookstomissouriprison.com\/wp-content\/uploads\/2026\/10\/missouri-9-1-1.png\";\r\n\r\n  \/* =========================================\r\n   FACILITY DIRECTORY DATA\r\n   ========================================= *\/\r\n\r\n  const facilities = [\r\n\r\n    [\"Women's Eastern Reception, Diagnostic and Correctional Center\",\r\n    \"1101 East Highway 54, Vandalia, MO 63382\",\r\n    \"(573) 594-6686\",\r\n    \"https:\/\/prisonbookpolicies.com\/womens-eastern-reception-diagnostic-and-correctional-center\"],\r\n\r\n    [\"Algoa Correctional Center\",\r\n    \"8501 No More Victims Road, Jefferson City, MO 65101\",\r\n    \"(573) 751-3911\",\r\n    \"https:\/\/prisonbookpolicies.com\/algoa-correctional-center\"],\r\n\r\n    [\"Boonville Correctional Center\",\r\n    \"1216 East Morgan Street, Boonville, MO 65233-1300\",\r\n    \"(660) 882-6521\",\r\n    \"https:\/\/prisonbookpolicies.com\/boonville-correctional-center\"],\r\n\r\n    [\"Chillicothe Correctional Center\",\r\n    \"3151 Litton Road, Chillicothe, MO 64601\",\r\n    \"(660) 646-4032\",\r\n    \"https:\/\/prisonbookpolicies.com\/chillicothe-correctional-center\"],\r\n\r\n    [\"Crossroads Correctional Center\",\r\n    \"1115 East Pence Road, Cameron, MO 64429\",\r\n    \"(816) 632-2727\",\r\n    \"https:\/\/prisonbookpolicies.com\/crossroads-correctional-center\"],\r\n\r\n    [\"Eastern Reception, Diagnostic and Correctional Center\",\r\n    \"2727 Highway K, Bonne Terre, MO 63628\",\r\n    \"(573) 358-5516\",\r\n    \"https:\/\/prisonbookpolicies.com\/eastern-reception-diagnostic-and-correctional-center\"],\r\n\r\n    [\"Farmington Correctional Center\",\r\n    \"1012 West Columbia Street, Farmington, MO 63640\",\r\n    \"(573) 218-7100\",\r\n    \"https:\/\/prisonbookpolicies.com\/farmington-correctional-center\"],\r\n\r\n    [\"Fulton Reception and Diagnostic Center\",\r\n    \"1393 Highway O, Fulton, MO 65251\",\r\n    \"(573) 592-4040\",\r\n    \"https:\/\/prisonbookpolicies.com\/fulton-reception-and-diagnostic-center\"],\r\n\r\n    [\"Jefferson City Correctional Center\",\r\n    \"8200 No More Victims Road, Jefferson City, MO 65101\",\r\n    \"(573) 751-3224\",\r\n    \"https:\/\/prisonbookpolicies.com\/jefferson-city-correctional-center\"],\r\n\r\n    [\"Maryville Treatment Center\",\r\n    \"30227 US Highway 136, Maryville, MO 64468\",\r\n    \"(660) 582-6542\",\r\n    \"https:\/\/prisonbookpolicies.com\/maryville-treatment-center\"],\r\n\r\n    [\"Missouri Eastern Correctional Center\",\r\n    \"18701 US Highway 66, Pacific, MO 63069\",\r\n    \"(636) 257-3322\",\r\n    \"https:\/\/prisonbookpolicies.com\/missouri-eastern-correctional-center\"],\r\n\r\n    [\"Moberly Correctional Center\",\r\n    \"5201 South Morley, Moberly, MO 65270\",\r\n    \"(660) 263-3778\",\r\n    \"https:\/\/prisonbookpolicies.com\/moberly-correctional-center\"],\r\n\r\n    [\"Northeast Correctional Center\",\r\n    \"13698 Airport Road, Bowling Green, MO 63334\",\r\n    \"(573) 324-9975\",\r\n    \"https:\/\/prisonbookpolicies.com\/northeast-correctional-center\"],\r\n\r\n    [\"Ozark Correctional Center\",\r\n    \"929 Honor Camp Lane, Fordland, MO 65652\",\r\n    \"(417) 767-4491\",\r\n    \"https:\/\/prisonbookpolicies.com\/ozark-correctional-center\"],\r\n\r\n    [\"Potosi Correctional Center\",\r\n    \"11593 State Highway O, Mineral Point, MO 63660\",\r\n    \"(573) 438-6000\",\r\n    \"https:\/\/prisonbookpolicies.com\/potosi-correctional-center\"],\r\n\r\n    [\"South Central Correctional Center\",\r\n    \"255 West Highway 32, Licking, MO 65542\",\r\n    \"(573) 674-4470\",\r\n    \"https:\/\/prisonbookpolicies.com\/south-central-correctional-center\"],\r\n\r\n    [\"Southeast Correctional Center\",\r\n    \"300 East Pedro Simmons Drive, Charleston, MO 63834\",\r\n    \"(573) 683-4409\",\r\n    \"https:\/\/prisonbookpolicies.com\/southeast-correctional-center\"],\r\n\r\n    [\"Southeast Correctional Center\",\r\n    \"300 East Pedro Simmons Drive, Charleston, MO 63834\",\r\n    \"(573) 683-4409\",\r\n    \"https:\/\/prisonbookpolicies.com\/southeast-correctional-center-2\"],\r\n\r\n    [\"Tipton Correctional Center\",\r\n    \"619 North Osage Avenue, Tipton, MO 65081\",\r\n    \"(660) 433-2031\",\r\n    \"https:\/\/prisonbookpolicies.com\/tipton-correctional-center\"],\r\n\r\n    [\"Western Missouri Correctional Center\",\r\n    \"609 East Pence Road, Cameron, MO 64429\",\r\n    \"(816) 632-1390\",\r\n    \"https:\/\/prisonbookpolicies.com\/western-missouri-correctional-center\"],\r\n\r\n    [\"Western Reception, Diagnostic and Correctional Center\",\r\n    \"3401 Faraon, St. Joseph, MO 64506\",\r\n    \"(816) 387-2158\",\r\n    \"https:\/\/prisonbookpolicies.com\/western-reception-diagnostic-and-correctional-center\"]\r\n\r\n  ];\r\n\r\n  \/* =========================================\r\n   SHERIFF DIRECTORY DATA\r\n   ========================================= *\/\r\n\r\n  const sheriffs = [\r\n\r\n    [\"Algoa Correctional Center\",\"8501 No More Victims Road Jefferson City, MO 65101\",\"(573)-751-3911\",\"https:\/\/prisonbookpolicies.com\/algoa-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Boonville Correctional Center\",\"1216 East Morgan Street Boonville, MO 65233-1300\",\"(660)-882-6521\",\"https:\/\/prisonbookpolicies.com\/boonville-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Chillicothe Correctional Center\",\"3151 Litton Road Chillicothe, MO 64601\",\"(660)-646-4032\",\"https:\/\/prisonbookpolicies.com\/chillicothe-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Crossroads Correctional Center\",\"1115 East Pence Road Cameron, MO 64429\",\"(816)-632-2727\",\"https:\/\/prisonbookpolicies.com\/crossroads-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Eastern Reception, Diagnostic and Correctional Center\",\"Eastern Reception, Diagnostic and Correctional Center 2727 Highway K Bonne Terre, MO 63628\",\"(573)-358-5516\",\"https:\/\/prisonbookpolicies.com\/eastern-reception-diagnostic-and-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Farmington Correctional Center\",\"Farmington Correctional Center 1012 West Columbia Street Farmington, MO 63640\",\"(573)-218-7100\",\"https:\/\/prisonbookpolicies.com\/farmington-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Fulton Reception and Diagnostic Center\",\"Fulton Reception and Diagnostic Center 1393 Highway O Fulton, MO 65251\",\"(573)-592-4040\",\"https:\/\/prisonbookpolicies.com\/fulton-reception-and-diagnostic-center\",\"Review facility policies\"],\r\n\r\n    [\"Jefferson City Correctional Center\",\"8200 No More Victims Road Jefferson City, MO 65101\",\"(573)-751-3224\",\"https:\/\/prisonbookpolicies.com\/jefferson-city-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Maryville Treatment Center\",\"Maryville Treatment Center 30227 US Highway 136 Maryville, MO 64468\",\"(660)-582-6542\",\"https:\/\/prisonbookpolicies.com\/maryville-treatment-center\",\"Review facility policies\"],\r\n\r\n    [\"Missouri Eastern Correctional Center\",\"Missouri Eastern Correctional Center 18701 US Highway 66 Pacific, MO 63069\",\"(636)-257-3322\",\"https:\/\/prisonbookpolicies.com\/missouri-eastern-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Moberly Correctional Center\",\"Moberly Correctional Center 5201 South Morley Moberly, MO 65270\",\"(660)-263-3778\",\"https:\/\/prisonbookpolicies.com\/moberly-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Northeast Correctional Center\",\"Northeast Correctional Center 13698 Airport Road Bowling Green, MO 63334\",\"(573)-324-9975\",\"https:\/\/prisonbookpolicies.com\/northeast-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Ozark Correctional Center\",\"Ozark Correctional Center 929 Honor Camp Lane Fordland, MO 65652\",\"(417)-767-4491\",\"https:\/\/prisonbookpolicies.com\/ozark-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Potosi Correctional Center\",\"Potosi Correctional Center 11593 State Highway O Mineral Point, MO 63660\",\"(573)-438-6000\",\"https:\/\/prisonbookpolicies.com\/potosi-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"South Central Correctional Center\",\"Potosi Correctional Center 255 West Highway 32 Licking, MO 65542\",\"(573)-438-6000\",\"https:\/\/prisonbookpolicies.com\/south-central-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Southeast Correctional Center\",\"Southeast Correctional Center 300 East Pedro Simmons Drive Charleston, MO 63834\",\"(573)-683-4409\",\"https:\/\/prisonbookpolicies.com\/southeast-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Tipton Correctional Center\",\"Tipton Correctional Center 619 North Osage Avenue Tipton, MO 65081\",\"(660)-433-2031\",\"https:\/\/prisonbookpolicies.com\/tipton-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Western Missouri Correctional Center\",\"609 East Pence Road Cameron, MO 64429\",\"(816)-632-1390\",\"https:\/\/prisonbookpolicies.com\/western-missouri-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Western Reception, Diagnostic and Correctional Center\",\"Western Reception, Diagnostic and Correctional Center 3401 Faraon St. Joseph, MO 64506\",\"(816)-387-2158\",\"https:\/\/prisonbookpolicies.com\/western-reception-diagnostic-and-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Women's Eastern Reception, Diagnostic and Correctional Center\",\"1101 East Highway 54 Vandalia, MO 63382\",\"(573)-594-6686\",\"https:\/\/prisonbookpolicies.com\/womens-eastern-reception-diagnostic-and-correctional-center\",\"Review facility policies\"],\r\n\r\n    [\"Ste Genevieve County Jail\",\"5 Basler Dr, Ste. Genevieve, MO 63670\",\"(573) 883-9896\",\"https:\/\/prisonbookpolicies.com\/ste-genevieve-county-jail\",\"Review facility policies\"],\r\n\r\n    [\"Texas County Sheriff's Office\",\"519 N Grand Ave #101, Houston, MO 65483\",\"(417) 967-4165\",\"#\",\"Review facility policies\"],\r\n\r\n    [\"Taney County Sheriffs Office\",\"266 Main St, Forsyth, MO 65653\",\"(417) 546-7250\",\"https:\/\/prisonbookpolicies.com\/taney-county-sheriffs-office\",\"Review facility policies\"],\r\n\r\n    [\"Christian County Sheriff's Office\",\"110 W. Elm Street, Suite 70 Ozark, MO 65721\",\"(417) 582-5330\",\"https:\/\/prisonbookpolicies.com\/christian-county-sheriffs-office-3\",\"Review facility policies\"],\r\n\r\n    [\"Jefferson County Sheriff's Office\",\"400 1st Street Hillsboro, MO 63050\",\"(636) 797-5000\",\"https:\/\/prisonbookpolicies.com\/jefferson-county-sheriffs-office-6\",\"Review facility policies\"],\r\n\r\n    [\"Platte County Sheriff\",\"11724 NW Plaza Cir., Kansas City, MO 64153\",\"816-858-2424\",\"https:\/\/prisonbookpolicies.com\/platte-county-sheriffs-office\",\"Review facility policies\"],\r\n\r\n    [\"Veron County Sheriff\",\"2040 East Hunter,Nevada,MO 64772\",\"417-283-4400\",\"https:\/\/prisonbookpolicies.com\/vernon-county-sheriffs-office\",\"Review facility policies\"],\r\n\r\n    [\"Lane County Sheriff's Office\",\"108 N High St, Linneus, MO 64653\",\"(660) 895-5312\",\"https:\/\/prisonbookpolicies.com\/lane-county-sheriffs-office\",\"Review facility policies\"],\r\n\r\n    [\"Dallas County Sheriff's Office\",\"204 Poplar St, Buffalo, MO 65656\",\"417-345-2441\",\"https:\/\/prisonbookpolicies.com\/dallas-county-sheriffs-department-3\",\"Review facility policies\"],\r\n\r\n    [\"Boone County Sheriff\",\"2121 County Dr. Columbia, MO 65202\",\"(573) 875-1111\",\"https:\/\/prisonbookpolicies.com\/boone-county-jail-2\",\"Review facility policies\"],\r\n\r\n    [\"Laclede County Sheriff's Office\",\"240 N Adams Ave, Lebanon, MO 65536\",\"(417) 532-2311\",\"#\",\"Review facility policies\"],\r\n\r\n    [\"Cass County Sheriff's Office\",\"2501 West Mechanic Street, Suite 100, Harrisonville, MO 64701\",\"(816) 380-5200\",\"https:\/\/prisonbookpolicies.com\/cass-county-sheriffs-office\",\"Review facility policies\"],\r\n\r\n    [\"St.Louis County Sheriff Department\",\"105 South Central Avenue, Clayton, MO 63105\",\"314-615-8029\",\"https:\/\/prisonbookpolicies.com\/st-louis-county-sheriff-department\",\"Review facility policies\"],\r\n\r\n    [\"Shannon County MO Sheriff's Office\",\"18078 2nd St, Eminence, MO 65466\",\"(573) 226-3615\",\"https:\/\/prisonbookpolicies.com\/shannon-county-mo-sheriffs-office\",\"Review facility policies\"],\r\n\r\n    [\"Audrain County Sheriff\",\"1100 Littleby Road Mexico,Missouri 65265\",\"(573)473-5800\",\"https:\/\/prisonbookpolicies.com\/audrain-county-sheriff\",\"Review facility policies\"],\r\n\r\n    [\"Camden County Sheriff\",\"1 Ct Cir NW Camdenton, MO 65020\",\"573-346-2243\",\"https:\/\/prisonbookpolicies.com\/camden-county-sheriff-3\",\"Review facility policies\"],\r\n\r\n    [\"Adair County Sheriff\",\"215 N. Franklin St Kirksville, MO 63501\",\"(660) 665-4644\",\"https:\/\/prisonbookpolicies.com\/adair-county-sheriff\",\"Review facility policies\"],\r\n\r\n    [\"Andrew County Sheriff's Office\",\"400 E Main St, Savannah, MO 64485\",\"(816) 324-4114\",\"https:\/\/prisonbookpolicies.com\/andrew-county-sheriffs-office\",\"Review facility policies\"],\r\n\r\n    [\"Bates County Sheriff's Office\",\"6 W Fort Scott St, Butler, MO 64730\",\"(660) 679-3232\",\"https:\/\/prisonbookpolicies.com\/bates-county-sheriffs-office\",\"Review facility policies\"]\r\n\r\n  ];\r\n\r\n  \/* =========================================\r\n   ELEMENT REFERENCES\r\n   ========================================= *\/\r\n\r\n  const tabs = [\r\n    ...root.querySelectorAll(\".mo-tab\")\r\n  ];\r\n\r\n  const input = root.querySelector(\r\n    \"#mo-directory-search\"\r\n  );\r\n\r\n  const clear = root.querySelector(\r\n    \"#mo-clear-search\"\r\n  );\r\n\r\n  const grid = root.querySelector(\r\n    \"#mo-card-grid\"\r\n  );\r\n\r\n  const count = root.querySelector(\r\n    \"#mo-result-count\"\r\n  );\r\n\r\n  const empty = root.querySelector(\r\n    \"#mo-empty-state\"\r\n  );\r\n\r\n  const pagination = root.querySelector(\r\n    \"#mo-pagination\"\r\n  );\r\n\r\n  const toggle = root.querySelector(\r\n    \"#mo-toggle-more\"\r\n  );\r\n\r\n  let active = \"facilities\";\r\n  let expanded = false;\r\n\r\n  \/* =========================================\r\n   GENERATE FACILITY IMAGE FILENAMES\r\n   ========================================= *\/\r\n\r\n  function filenameFromName(name) {\r\n\r\n    return String(name)\r\n\r\n      .normalize(\"NFKD\")\r\n\r\n      .replace(\/[\\u0300-\\u036f]\/g, \"\")\r\n\r\n      .replace(\/['\u2019]\/g, \"\")\r\n\r\n      .replace(\/&\/g, \"and\")\r\n\r\n      .replace(\/[^a-zA-Z0-9]+\/g, \"-\")\r\n\r\n      .replace(\/^-|-$\/g, \"\");\r\n\r\n  }\r\n\r\n  const imageCache = new Map();\r\n\r\n  function buildCandidates(name) {\r\n\r\n    const base = filenameFromName(name);\r\n\r\n    const lowercase = base.toLowerCase();\r\n\r\n    const filenames = [\r\n\r\n      base + \".png\",\r\n      base + \".jpg\",\r\n      base + \".webp\",\r\n\r\n      lowercase + \".png\",\r\n      lowercase + \".jpg\"\r\n\r\n    ];\r\n\r\n    return [...new Set(filenames)].map(\r\n      file => IMAGE_BASE + encodeURIComponent(file)\r\n    );\r\n\r\n  }\r\n\r\n  \/* =========================================\r\n   LOAD FACILITY PHOTOS ONLY\r\n   ========================================= *\/\r\n\r\n  function loadFacilityImage(img) {\r\n\r\n    const name = img.dataset.facility;\r\n\r\n    if (!name) return;\r\n\r\n    const key = name.toLowerCase();\r\n\r\n    let urls = imageCache.get(key);\r\n\r\n    if (!urls) {\r\n\r\n      urls = buildCandidates(name);\r\n\r\n      imageCache.set(key, urls);\r\n\r\n    }\r\n\r\n    let index = 0;\r\n\r\n    function tryNext() {\r\n\r\n      if (!img.isConnected) return;\r\n\r\n      if (index >= urls.length) {\r\n\r\n        const placeholder = document.createElement(\"div\");\r\n\r\n        placeholder.className = \"mo-no-image\";\r\n\r\n        placeholder.textContent = \"Image unavailable\";\r\n\r\n        img.replaceWith(placeholder);\r\n\r\n        return;\r\n\r\n      }\r\n\r\n      img.src = urls[index++];\r\n\r\n    }\r\n\r\n    img.onerror = tryNext;\r\n\r\n    img.onload = function() {\r\n\r\n      img.onerror = null;\r\n\r\n    };\r\n\r\n    tryNext();\r\n\r\n  }\r\n\r\n  \/* =========================================\r\n   LAZY LOAD ONLY FACILITY PHOTOGRAPHS\r\n   ========================================= *\/\r\n\r\n  const observer = \"IntersectionObserver\" in window\r\n\r\n    ? new IntersectionObserver(entries => {\r\n\r\n        entries.forEach(entry => {\r\n\r\n          if (!entry.isIntersecting) return;\r\n\r\n          observer.unobserve(entry.target);\r\n\r\n          loadFacilityImage(entry.target);\r\n\r\n        });\r\n\r\n      }, {\r\n\r\n        rootMargin: \"200px 0px\"\r\n\r\n      })\r\n\r\n    : null;\r\n\r\n  function initializeFacilityImages() {\r\n\r\n    if (observer) observer.disconnect();\r\n\r\n    \/*\r\n     * Sheriff's Office cards use the\r\n     * new static logo URL.\r\n     *\r\n     * Only Facility Directory cards use\r\n     * automatic facility image loading.\r\n     *\/\r\n\r\n    grid.querySelectorAll(\r\n\r\n      \".mo-facility-photo img[data-facility]\"\r\n\r\n    ).forEach(img => {\r\n\r\n      if (observer) {\r\n\r\n        observer.observe(img);\r\n\r\n      } else {\r\n\r\n        loadFacilityImage(img);\r\n\r\n      }\r\n\r\n    });\r\n\r\n  }\r\n\r\n  \/* =========================================\r\n   HELPER FUNCTIONS\r\n   ========================================= *\/\r\n\r\n  function escapeHTML(value) {\r\n\r\n    return String(value == null ? \"\" : value)\r\n\r\n      .replace(\/[&<>'\"]\/g, char => ({\r\n\r\n        \"&\": \"&amp;\",\r\n\r\n        \"<\": \"&lt;\",\r\n\r\n        \">\": \"&gt;\",\r\n\r\n        \"'\": \"&#39;\",\r\n\r\n        '\"': \"&quot;\"\r\n\r\n      }[char]));\r\n\r\n  }\r\n\r\n  function normalize(value) {\r\n\r\n    return String(value || \"\")\r\n\r\n      .toLowerCase()\r\n\r\n      .normalize(\"NFKD\")\r\n\r\n      .replace(\/[\\u0300-\\u036f]\/g, \"\")\r\n\r\n      .replace(\/[^a-z0-9]+\/g, \" \")\r\n\r\n      .trim();\r\n\r\n  }\r\n\r\n  function phoneURL(phone) {\r\n\r\n    return String(phone).replace(\/[^+\\d]\/g, \"\");\r\n\r\n  }\r\n\r\n  const icons = {\r\n\r\n    pin:\r\n      '<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">' +\r\n      '<path d=\"M12 2a8 8 0 0 0-8 8c0 5.6 8 12 8 12s8-6.4 8-12a8 8 0 0 0-8-8Zm0 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6Z\"\/>' +\r\n      '<\/svg>',\r\n\r\n    phone:\r\n      '<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">' +\r\n      '<path d=\"m6.6 10.8 2.5-2.5-3-6.3H2.3C1.6 2 1 2.6 1 3.3A19.7 19.7 0 0 0 20.7 23c.7 0 1.3-.6 1.3-1.3v-3.8l-6.3-3-2.5 2.5a15 15 0 0 1-6.6-6.6Z\"\/>' +\r\n      '<\/svg>'\r\n\r\n  };\r\n\r\n  \/* =========================================\r\n   BUILD DIRECTORY CARD\r\n   ========================================= *\/\r\n\r\n  function card(item) {\r\n\r\n    const name = escapeHTML(item[0]);\r\n\r\n    const address = escapeHTML(item[1]);\r\n\r\n    const phone = escapeHTML(item[2]);\r\n\r\n    const url = escapeHTML(item[3]);\r\n\r\n    const buttonText = escapeHTML(\r\n\r\n      item[4] || \"Review Facility Policies\"\r\n\r\n    );\r\n\r\n    const linkAttributes = url === \"#\"\r\n\r\n      ? ' aria-disabled=\"true\"'\r\n\r\n      : ' target=\"_blank\" rel=\"noopener noreferrer\"';\r\n\r\n    \/*\r\n     * FACILITY DIRECTORY:\r\n     * Facility photo, cover center center.\r\n     *\r\n     * SHERIFF'S OFFICE:\r\n     * Updated missouri-9-1-1.png logo.\r\n     *\/\r\n\r\n    let imageHTML = \"\";\r\n\r\n    if (active === \"facilities\") {\r\n\r\n      imageHTML =\r\n\r\n        '<div class=\"mo-thumb mo-facility-photo\">' +\r\n\r\n          '<img ' +\r\n\r\n            'alt=\"' + name + '\" ' +\r\n\r\n            'data-facility=\"' + name + '\" ' +\r\n\r\n            'loading=\"lazy\" ' +\r\n\r\n            'decoding=\"async\">' +\r\n\r\n        '<\/div>';\r\n\r\n    } else {\r\n\r\n      imageHTML =\r\n\r\n        '<div class=\"mo-thumb mo-sheriff-logo\">' +\r\n\r\n          '<img ' +\r\n\r\n            'src=\"' + escapeHTML(SHERIFF_LOGO) + '\" ' +\r\n\r\n            'alt=\"Missouri Sheriff Office Directory Logo\" ' +\r\n\r\n            'loading=\"lazy\" ' +\r\n\r\n            'decoding=\"async\">' +\r\n\r\n        '<\/div>';\r\n\r\n    }\r\n\r\n    return (\r\n\r\n      '<article class=\"mo-card\">' +\r\n\r\n        imageHTML +\r\n\r\n        '<div class=\"mo-card-body\">' +\r\n\r\n          '<h3>' + name + '<\/h3>' +\r\n\r\n          '<p class=\"mo-detail\">' +\r\n\r\n            icons.pin +\r\n\r\n            '<span>' + address + '<\/span>' +\r\n\r\n          '<\/p>' +\r\n\r\n          '<p class=\"mo-detail\">' +\r\n\r\n            icons.phone +\r\n\r\n            '<a href=\"tel:' + phoneURL(item[2]) + '\">' +\r\n\r\n              phone +\r\n\r\n            '<\/a>' +\r\n\r\n          '<\/p>' +\r\n\r\n          '<a class=\"mo-policy-button\" href=\"' +\r\n\r\n            url + '\"' + linkAttributes + '>' +\r\n\r\n            buttonText +\r\n\r\n          '<\/a>' +\r\n\r\n        '<\/div>' +\r\n\r\n      '<\/article>'\r\n\r\n    );\r\n\r\n  }\r\n\r\n  \/* =========================================\r\n   SHOW FIRST TWO ROWS\r\n   ========================================= *\/\r\n\r\n  function initialLimit() {\r\n\r\n    if (window.innerWidth <= 600) return 2;\r\n\r\n    if (window.innerWidth <= 900) return 4;\r\n\r\n    return 6;\r\n\r\n  }\r\n\r\n  \/* =========================================\r\n   RENDER CARDS\r\n   ========================================= *\/\r\n\r\n  function render() {\r\n\r\n    const source = active === \"facilities\"\r\n\r\n      ? facilities\r\n\r\n      : sheriffs;\r\n\r\n    const query = normalize(input.value);\r\n\r\n    const searching = query.length > 0;\r\n\r\n    \/*\r\n     * Search every directory entry,\r\n     * including hidden cards.\r\n     *\/\r\n\r\n    const matches = source.filter(item =>\r\n\r\n      normalize(item.slice(0,3).join(\" \")).includes(query)\r\n\r\n    );\r\n\r\n    const limit = initialLimit();\r\n\r\n    const visible = searching || expanded\r\n\r\n      ? matches\r\n\r\n      : matches.slice(0,limit);\r\n\r\n    if (observer) observer.disconnect();\r\n\r\n    grid.innerHTML = visible.map(card).join(\"\");\r\n\r\n    grid.hidden = matches.length === 0;\r\n\r\n    empty.hidden = matches.length !== 0;\r\n\r\n    \/*\r\n     * Hide View More \/ View Less\r\n     * while the search bar is in use.\r\n     *\/\r\n\r\n    pagination.hidden =\r\n\r\n      searching || matches.length <= limit;\r\n\r\n    toggle.textContent =\r\n\r\n      expanded ? \"View Less\" : \"View More\";\r\n\r\n    toggle.setAttribute(\r\n\r\n      \"aria-expanded\",\r\n\r\n      String(expanded)\r\n\r\n    );\r\n\r\n    clear.hidden = !searching;\r\n\r\n    if (searching) {\r\n\r\n      count.textContent =\r\n\r\n        matches.length +\r\n\r\n        (matches.length === 1\r\n\r\n          ? \" result found\"\r\n\r\n          : \" results found\");\r\n\r\n    } else {\r\n\r\n      count.textContent =\r\n\r\n        \"Showing \" + visible.length +\r\n\r\n        \" of \" + source.length + \" listings\";\r\n\r\n    }\r\n\r\n    \/*\r\n     * Individual facility photographs\r\n     * load ONLY in Facility Directory.\r\n     *\r\n     * Sheriff's Office uses the new logo.\r\n     *\/\r\n\r\n    if (active === \"facilities\") {\r\n\r\n      initializeFacilityImages();\r\n\r\n    }\r\n\r\n  }\r\n\r\n  \/* =========================================\r\n   TAB SWITCHING\r\n   ========================================= *\/\r\n\r\n  tabs.forEach(tab => {\r\n\r\n    tab.addEventListener(\"click\", function() {\r\n\r\n      active = this.dataset.tab;\r\n\r\n      expanded = false;\r\n\r\n      input.value = \"\";\r\n\r\n      tabs.forEach(button => {\r\n\r\n        const selected = button === this;\r\n\r\n        button.classList.toggle(\r\n\r\n          \"is-active\",\r\n\r\n          selected\r\n\r\n        );\r\n\r\n        button.setAttribute(\r\n\r\n          \"aria-selected\",\r\n\r\n          String(selected)\r\n\r\n        );\r\n\r\n      });\r\n\r\n      input.placeholder = active === \"facilities\"\r\n\r\n        ? \"Search facilities by name, city, address, or phone...\"\r\n\r\n        : \"Search sheriff offices by county, city, address, or phone...\";\r\n\r\n      render();\r\n\r\n    });\r\n\r\n  });\r\n\r\n  \/* =========================================\r\n   SEARCH ALL LISTINGS\r\n   ========================================= *\/\r\n\r\n  input.addEventListener(\"input\", function() {\r\n\r\n    expanded = false;\r\n\r\n    render();\r\n\r\n  });\r\n\r\n  \/* =========================================\r\n   CLEAR SEARCH\r\n   ========================================= *\/\r\n\r\n  clear.addEventListener(\"click\", function() {\r\n\r\n    input.value = \"\";\r\n\r\n    expanded = false;\r\n\r\n    input.focus();\r\n\r\n    render();\r\n\r\n  });\r\n\r\n  \/* =========================================\r\n   VIEW MORE \/ VIEW LESS\r\n   ========================================= *\/\r\n\r\n  toggle.addEventListener(\"click\", function() {\r\n\r\n    expanded = !expanded;\r\n\r\n    render();\r\n\r\n    if (!expanded) {\r\n\r\n      root.scrollIntoView({\r\n\r\n        behavior: \"smooth\",\r\n\r\n        block: \"start\"\r\n\r\n      });\r\n\r\n    }\r\n\r\n  });\r\n\r\n  \/* =========================================\r\n   RESPONSIVE ROW COUNT\r\n   ========================================= *\/\r\n\r\n  let previousLimit = initialLimit();\r\n\r\n  window.addEventListener(\"resize\", function() {\r\n\r\n    const currentLimit = initialLimit();\r\n\r\n    if (currentLimit !== previousLimit) {\r\n\r\n      previousLimit = currentLimit;\r\n\r\n      render();\r\n\r\n    }\r\n\r\n  });\r\n\r\n  \/* =========================================\r\n   PREVENT PLACEHOLDER LINKS JUMPING\r\n   ========================================= *\/\r\n\r\n  root.addEventListener(\"click\", function(event) {\r\n\r\n    const link = event.target.closest(\r\n\r\n      'a.mo-policy-button[href=\"#\"]'\r\n\r\n    );\r\n\r\n    if (link) {\r\n\r\n      event.preventDefault();\r\n\r\n    }\r\n\r\n  });\r\n\r\n  \/* =========================================\r\n   INITIAL DISPLAY\r\n   ========================================= *\/\r\n\r\n  render();\r\n\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Correctional Facilities Find the location first, then read its mail rules before you order. Cards below show the name, address, phone, and policy link when one is available. missouri Facilities Directory Find and verify specific mailroom policies and delivery guidelines for institutions across the state. Facility Directory Sheriff&#8217;s Office Search directory \u2315 \u00d7 No matches found. Try a facility, county, city, address, or phone number. View More<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-54","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=\/wp\/v2\/pages\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=54"}],"version-history":[{"count":316,"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=\/wp\/v2\/pages\/54\/revisions"}],"predecessor-version":[{"id":2134,"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=\/wp\/v2\/pages\/54\/revisions\/2134"}],"wp:attachment":[{"href":"https:\/\/sendbookstomissouriprison.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}