{"id":23460,"date":"2025-10-24T14:10:32","date_gmt":"2025-10-24T18:10:32","guid":{"rendered":"https:\/\/www.arboretum.purdue.edu\/explorer\/?page_id=23460"},"modified":"2026-06-25T11:49:01","modified_gmt":"2026-06-25T15:49:01","slug":"visit-planner","status":"publish","type":"page","link":"https:\/\/www.arboretum.purdue.edu\/explorer\/visit-planner\/","title":{"rendered":"What&#8217;s in Bloom &#8211; Visit Planner"},"content":{"rendered":"\n<figure>\n\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-content\/uploads\/sites\/2\/2023\/01\/NAME-21203-14-400x600.jpg\" alt=\"&lt;i&gt;Cornus officinalis&lt;\/i&gt; - Flowers\" height=\"600\" width=\"400\" title=\"21203-NAME-IMAGE-15\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 400px; --smush-placeholder-aspect-ratio: 400\/600;\" \/>\n\t<\/figure>\n<figure>\n\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-content\/uploads\/sites\/2\/2023\/01\/NAME-21174-6-400x600.jpg\" alt=\"&lt;i&gt;Symphoricarpos&lt;\/i&gt; &amp;times;&lt;i&gt; chenaultii&lt;\/i&gt; - Fruits\" height=\"600\" width=\"400\" title=\"21174-NAME-IMAGE-7\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 400px; --smush-placeholder-aspect-ratio: 400\/600;\" \/>\n\t<\/figure>\n<figure>\n\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-content\/uploads\/sites\/2\/2023\/01\/NAME-564-400x600.jpg\" alt=\"&lt;i&gt;Rhododendron catawbiense&lt;\/i&gt; - Flowers\" height=\"600\" width=\"400\" title=\"564-NAME-IMAGE-1\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 400px; --smush-placeholder-aspect-ratio: 400\/600;\" \/>\n\t<\/figure>\n<figure>\n\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-content\/uploads\/sites\/2\/2023\/01\/NAME-272-8-400x600.jpg\" alt=\"&lt;i&gt;Hamamelis vernalis&lt;\/i&gt; - Flowers\" height=\"600\" width=\"400\" title=\"272-NAME-IMAGE-9\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 400px; --smush-placeholder-aspect-ratio: 400\/600;\" \/>\n\t<\/figure>\n<figure>\n\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-content\/uploads\/sites\/2\/2023\/01\/NAME-734-3-400x600.jpg\" alt=\"&lt;i&gt;Viburnum trilobum&lt;\/i&gt; - Fruits\" height=\"600\" width=\"400\" title=\"734-NAME-IMAGE-4\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 400px; --smush-placeholder-aspect-ratio: 400\/600;\" \/>\n\t<\/figure>\n\t\r\n<style>\r\n    \/*\r\n     * Visit Planner styling \u2014 scoped to .pu-visit-planner so it never leaks into\r\n     * the rest of the page. Palette follows the Purdue Arboretum identity:\r\n     * Boilermaker Gold \/ Rush gold \/ Aged gold \/ Coal ink, on warm parchment,\r\n     * with one restrained botanical green as a \"seasonal\" accent.\r\n     *\/\r\n    .pu-visit-planner {\r\n        --pu-gold: #ceb888;\r\n        --pu-rush: #daaa00;\r\n        --pu-aged: #8e6f3e;\r\n        --pu-ink: #1c1c1c;\r\n        --pu-steel: #6f727b;\r\n        --pu-parchment: #faf8f2;\r\n        --pu-edge: #e9e2d2;\r\n        --pu-leaf: #3a6b4a;\r\n        max-width: 60rem;\r\n        margin: 0 0 2.5rem;\r\n        color: var(--pu-ink);\r\n    }\r\n\r\n    \/* --- Intro: explains the tool in plain language --- *\/\r\n    .pu-visit-planner__intro {\r\n        margin-bottom: 1.5rem;\r\n    }\r\n\r\n    .pu-visit-planner__eyebrow {\r\n        margin: 0 0 .35rem;\r\n        font-size: .72rem;\r\n        font-weight: 700;\r\n        letter-spacing: .18em;\r\n        text-transform: uppercase;\r\n        color: var(--pu-aged);\r\n    }\r\n\r\n    .pu-visit-planner__title {\r\n        margin: 0 0 .5rem;\r\n        font-size: clamp(1.6rem, 1.1rem + 1.8vw, 2.3rem);\r\n        line-height: 1.12;\r\n        font-weight: 800;\r\n        color: var(--pu-ink);\r\n    }\r\n\r\n    .pu-visit-planner__leaf {\r\n        display: inline-block;\r\n        width: .85em;\r\n        height: .85em;\r\n        margin-left: .35em;\r\n        color: var(--pu-leaf);\r\n        vertical-align: baseline;\r\n    }\r\n\r\n    .pu-visit-planner__lead {\r\n        max-width: 46rem;\r\n        margin: 0 0 1.1rem;\r\n        font-size: 1.05rem;\r\n        line-height: 1.55;\r\n        color: #3a3a36;\r\n    }\r\n\r\n    \/* \"How it works\" \u2014 a true 3-step sequence, so numbering carries meaning. *\/\r\n    .pu-visit-planner__how {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: .35rem 1.5rem;\r\n        margin: 0;\r\n        padding: 0;\r\n        list-style: none;\r\n        counter-reset: pu-step;\r\n    }\r\n\r\n    .pu-visit-planner__how li {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: .55rem;\r\n        font-size: .92rem;\r\n        font-weight: 600;\r\n        color: var(--pu-steel);\r\n    }\r\n\r\n    .pu-visit-planner__how li::before {\r\n        counter-increment: pu-step;\r\n        content: counter(pu-step);\r\n        display: grid;\r\n        place-items: center;\r\n        width: 1.5rem;\r\n        height: 1.5rem;\r\n        border-radius: 50%;\r\n        background: var(--pu-gold);\r\n        color: var(--pu-ink);\r\n        font-size: .8rem;\r\n        font-weight: 800;\r\n    }\r\n\r\n    \/* Seasonal accent rule: gold easing into green \u2014 \"what's happening now\". *\/\r\n    .pu-visit-planner__rule {\r\n        height: 3px;\r\n        margin: 1.25rem 0 0;\r\n        border: 0;\r\n        border-radius: 3px;\r\n        background: linear-gradient(90deg, var(--pu-rush), var(--pu-gold) 45%, var(--pu-leaf));\r\n        opacity: .9;\r\n    }\r\n\r\n    \/* Compact summary shown in place of the planner once a search has run. *\/\r\n    .pu-visit-planner__summary {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: .5rem 1rem;\r\n        margin: 0;\r\n        padding: .85rem 1.1rem;\r\n        background: var(--pu-parchment);\r\n        border: 1px solid var(--pu-edge);\r\n        border-left: 4px solid var(--pu-gold);\r\n        border-radius: 8px;\r\n    }\r\n\r\n    .pu-visit-planner__summary-text {\r\n        margin: 0;\r\n        font-size: 1rem;\r\n        color: var(--pu-ink);\r\n    }\r\n\r\n    .pu-visit-planner__summary-eyebrow {\r\n        display: block;\r\n        font-size: .72rem;\r\n        font-weight: 700;\r\n        letter-spacing: .12em;\r\n        text-transform: uppercase;\r\n        color: var(--pu-aged);\r\n    }\r\n\r\n    \/* --- The form card --- *\/\r\n    .pu-visit-planner__form {\r\n        margin: 0;\r\n        padding: 1.5rem;\r\n        background: var(--pu-parchment);\r\n        border: 1px solid var(--pu-edge);\r\n        border-top: 3px solid var(--pu-gold);\r\n        border-radius: 10px;\r\n    }\r\n\r\n    .pu-visit-planner__step {\r\n        padding: 1.1rem 0;\r\n        border-top: 1px solid var(--pu-edge);\r\n    }\r\n\r\n    .pu-visit-planner__step:first-of-type {\r\n        padding-top: .25rem;\r\n        border-top: 0;\r\n    }\r\n\r\n    .pu-visit-planner__legend {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: .6rem;\r\n        margin-bottom: .8rem;\r\n        font-size: 1.08rem;\r\n        font-weight: 700;\r\n        color: var(--pu-ink);\r\n    }\r\n\r\n    .pu-visit-planner__legend-num {\r\n        display: grid;\r\n        place-items: center;\r\n        flex: 0 0 auto;\r\n        width: 1.7rem;\r\n        height: 1.7rem;\r\n        border-radius: 50%;\r\n        background: var(--pu-ink);\r\n        color: var(--pu-gold);\r\n        font-size: .85rem;\r\n        font-weight: 800;\r\n    }\r\n\r\n    .pu-visit-planner__hint {\r\n        margin: .5rem 0 0;\r\n        font-size: .85rem;\r\n        color: var(--pu-steel);\r\n    }\r\n\r\n    \/* Date range: start \u2192 end with a connecting arrow on wider screens. *\/\r\n    .pu-visit-planner__dates {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        align-items: end;\r\n        gap: .75rem 1rem;\r\n    }\r\n\r\n    .pu-visit-planner__date {\r\n        flex: 1 1 13rem;\r\n        min-width: 11rem;\r\n    }\r\n\r\n    .pu-visit-planner__arrow {\r\n        align-self: center;\r\n        margin-top: 1.2rem;\r\n        color: var(--pu-aged);\r\n        font-size: 1.2rem;\r\n        line-height: 1;\r\n    }\r\n\r\n    .pu-visit-planner__mode {\r\n        max-width: 22rem;\r\n    }\r\n\r\n    .pu-visit-planner .form-label {\r\n        font-weight: 600;\r\n        color: var(--pu-ink);\r\n    }\r\n\r\n    \/* Brand the native controls without fighting Bootstrap elsewhere. *\/\r\n    .pu-visit-planner .form-control,\r\n    .pu-visit-planner .form-select {\r\n        border-color: #cfc8b6;\r\n        background-color: #fff;\r\n    }\r\n\r\n    .pu-visit-planner .form-control:focus,\r\n    .pu-visit-planner .form-select:focus {\r\n        border-color: var(--pu-aged);\r\n        box-shadow: 0 0 0 .2rem rgba(206, 184, 136, .45);\r\n    }\r\n\r\n    \/*\r\n     * Plant-type chooser. This menu uses the site's standard control:\r\n     *   <label class=\"genericCheckbox\"><input><div>Name<\/div><span class=\"genericCheckmark\"><\/span><\/label>\r\n     * The global styles hide the native input and show the .genericCheckmark\r\n     * circle, reserving 22px of left padding for it (same as other pages). So we\r\n     * ONLY lay the items out in a tidy wrapped row and tint the checked circle to\r\n     * Purdue gold. We must NOT re-show the input or alter the label padding, or\r\n     * the custom checkmark and the text collide.\r\n     *\/\r\n    .pu-visit-planner__plants > div > label[for] {\r\n        display: block;\r\n        margin-bottom: .6rem;\r\n        font-weight: 700;\r\n        color: var(--pu-ink);\r\n    }\r\n\r\n    #searchFormPlant ul {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: .4rem 1.75rem;\r\n        margin: 0;\r\n        padding: 0;\r\n        list-style: none;\r\n    }\r\n\r\n    #searchFormPlant li {\r\n        display: flex;\r\n        align-items: center;\r\n    }\r\n\r\n    \/* Brand the checked indicator (the theme's default circle is blue). *\/\r\n    #searchFormPlant .genericCheckbox input:checked ~ .genericCheckmark {\r\n        background-color: var(--pu-aged);\r\n        border-color: var(--pu-aged);\r\n    }\r\n\r\n    .pu-visit-planner__quick {\r\n        margin-top: 1rem;\r\n    }\r\n\r\n    \/* --- Actions --- *\/\r\n    .pu-visit-planner__actions {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        align-items: center;\r\n        gap: .5rem 1rem;\r\n        margin-top: 1.4rem;\r\n        padding-top: 1.2rem;\r\n        border-top: 1px solid var(--pu-edge);\r\n    }\r\n\r\n    \/* Button polish \u2014 verified against the live arb-2020 theme with DevTools.\r\n       The theme squares regular buttons but leaves .btn-sm rounded; unify to\r\n       squared corners so every action matches. *\/\r\n    .pu-visit-planner .btn {\r\n        border-radius: 0;\r\n    }\r\n\r\n    \/* Primary CTA: keep the theme's gold-on-black .btn-primary, a touch larger. *\/\r\n    .pu-visit-planner #visit-planner-submit {\r\n        padding: .55rem 1.4rem;\r\n        font-weight: 700;\r\n    }\r\n\r\n    \/* The theme's disabled .btn-primary is an illegible washed gray; use a\r\n       readable, intentionally-muted parchment state instead. *\/\r\n    .pu-visit-planner #visit-planner-submit:disabled {\r\n        --bs-btn-disabled-bg: #e7e2d4;\r\n        --bs-btn-disabled-border-color: #c7bda3;\r\n        --bs-btn-disabled-color: #5f5a49;\r\n        opacity: 1;\r\n    }\r\n\r\n    \/* Secondary actions (Select all \/ Deselect all \/ Reset): darken the pale-gold\r\n       outline text to aged gold so labels read clearly on the parchment card. *\/\r\n    .pu-visit-planner__quick .btn,\r\n    .pu-visit-planner__actions a.btn,\r\n    .pu-visit-planner__summary .btn {\r\n        --bs-btn-color: #6f5526;\r\n        --bs-btn-border-color: #c2b596;\r\n    }\r\n\r\n    .pu-visit-planner__helper {\r\n        flex-basis: 100%;\r\n        margin: 0;\r\n        font-size: .85rem;\r\n        color: var(--pu-aged);\r\n    }\r\n\r\n    .pu-visit-planner :focus-visible {\r\n        outline: 2px solid var(--pu-rush);\r\n        outline-offset: 2px;\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n        #searchFormPlant .genericCheckmark,\r\n        #searchFormPlant .genericCheckmark::after {\r\n            transition: none;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 575.98px) {\r\n        .pu-visit-planner__form {\r\n            padding: 1.15rem;\r\n        }\r\n\r\n        .pu-visit-planner__arrow {\r\n            display: none;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<section class=\"pu-visit-planner d-print-none\" aria-labelledby=\"pu-visit-planner-title\">\r\n    \r\n    <div id=\"vp-collapse\" class=\"collapse show\">\r\n        <header class=\"pu-visit-planner__intro\">\r\n        <p class=\"pu-visit-planner__eyebrow\">Purdue Arboretum &middot; Visit Planner<\/p>\r\n        <h2 id=\"pu-visit-planner-title\" class=\"pu-visit-planner__title\">\r\n            See what will be in season for your visit\r\n            <svg class=\"pu-visit-planner__leaf\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\r\n                <path d=\"M21 3s-9-1-14 4C3 10 3 16 5 19c3-2 3-8 9-11-4 4-6 8-6 12 0 0 6 1 11-4 4-4 2-13 2-13z\" \/>\r\n            <\/svg>\r\n        <\/h2>\r\n        <p class=\"pu-visit-planner__lead\">\r\n            Tell us when you will be on campus and which kinds of plants you would like to see.\r\n            We will show the plants that have been observed flowering or fruiting during that part\r\n            of the year, so you know what to look for while you are here.\r\n        <\/p>\r\n        <ol class=\"pu-visit-planner__how\">\r\n            <li>Pick your visit dates<\/li>\r\n            <li>Choose what to look for<\/li>\r\n            <li>Get your plant list<\/li>\r\n        <\/ol>\r\n        <hr class=\"pu-visit-planner__rule\" aria-hidden=\"true\">\r\n    <\/header>\r\n\r\n    <form method=\"get\" action=\"\" class=\"pu-visit-planner__form\" id=\"visit-planner-form\">\r\n        <div class=\"pu-visit-planner__step\">\r\n            <span class=\"pu-visit-planner__legend\"><span class=\"pu-visit-planner__legend-num\" aria-hidden=\"true\">1<\/span> When are you visiting?<\/span>\r\n            <div class=\"pu-visit-planner__dates\">\r\n                <div class=\"pu-visit-planner__date\">\r\n                    <label for=\"visit_start_iso\" class=\"form-label\">Arrival date<\/label>\r\n                    <input type=\"date\" class=\"form-control\" id=\"visit_start_iso\" name=\"visit_start_iso\" value=\"\">\r\n                <\/div>\r\n                <span class=\"pu-visit-planner__arrow\" aria-hidden=\"true\">&rarr;<\/span>\r\n                <div class=\"pu-visit-planner__date\">\r\n                    <label for=\"visit_end_iso\" class=\"form-label\">Departure date<\/label>\r\n                    <input type=\"date\" class=\"form-control\" id=\"visit_end_iso\" name=\"visit_end_iso\" value=\"\">\r\n                <\/div>\r\n            <\/div>\r\n            <p class=\"pu-visit-planner__hint\">Only the month and day are used to match plants &mdash; the year you pick does not matter.<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"pu-visit-planner__step\">\r\n            <span class=\"pu-visit-planner__legend\"><span class=\"pu-visit-planner__legend-num\" aria-hidden=\"true\">2<\/span> What should the plants be doing?<\/span>\r\n            <div class=\"pu-visit-planner__mode\">\r\n                <label for=\"visit_mode\" class=\"form-label\">Show plants that are<\/label>\r\n                <select id=\"visit_mode\" name=\"visit_mode\" class=\"form-select\">\r\n                                        <option value=\"both\"  selected='selected'>Flowering or fruiting<\/option>\r\n                    <option value=\"flower\" >Flowering only<\/option>\r\n                    <option value=\"fruit\" >Fruiting only<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"pu-visit-planner__step\">\r\n            <span class=\"pu-visit-planner__legend\"><span class=\"pu-visit-planner__legend-num\" aria-hidden=\"true\">3<\/span> Which plant types?<\/span>\r\n            <div id=\"searchFormPlant\" class=\"pu-visit-planner__plants\">\r\n                <div class=\" mb-1\">       <label for = plant_habit>Plant Type       <\/label>       <ul class = \"mb-1 search-feature-select\"><li><label class = \"genericCheckbox d-inline-block\"><input type = \"checkbox\" value = \"fern\" name = \"plant_habit[]\"><div>Fern<\/div><span class=\"genericCheckmark\"><\/span><\/label><sup><span class=\"ms-n1\"><a tabindex=\"0\" type=\"button\" class=\"fa-regular fa-circle-info text-secondary text-decoration-none\" data-bs-title=\"Fern\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-html=\"true\" data-bs-content=\"Flowerless plant which has feathery or leafy fronds\"><\/a><\/span><sup><\/li><li><label class = \"genericCheckbox d-inline-block\"><input type = \"checkbox\" value = \"herbaceous\" name = \"plant_habit[]\"><div>Herbaceous<\/div><span class=\"genericCheckmark\"><\/span><\/label><sup><span class=\"ms-n1\"><a tabindex=\"0\" type=\"button\" class=\"fa-regular fa-circle-info text-secondary text-decoration-none\" data-bs-title=\"Herbaceous\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-html=\"true\" data-bs-content=\"Vascular plants that have no persistent woody stems above ground\"><\/a><\/span><sup><\/li><li><label class = \"genericCheckbox d-inline-block\"><input type = \"checkbox\" value = \"liana\" name = \"plant_habit[]\"><div>Liana (Climbing Vine)<\/div><span class=\"genericCheckmark\"><\/span><\/label><sup><span class=\"ms-n1\"><a tabindex=\"0\" type=\"button\" class=\"fa-regular fa-circle-info text-secondary text-decoration-none\" data-bs-title=\"Liana (Climbing Vine)\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-html=\"true\" data-bs-content=\"Long-stemmed climbing woody vine\"><\/a><\/span><sup><\/li><li><label class = \"genericCheckbox d-inline-block\"><input type = \"checkbox\" value = \"shrub\" name = \"plant_habit[]\"><div>Shrub<\/div><span class=\"genericCheckmark\"><\/span><\/label><sup><span class=\"ms-n1\"><a tabindex=\"0\" type=\"button\" class=\"fa-regular fa-circle-info text-secondary text-decoration-none\" data-bs-title=\"Shrub\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-html=\"true\" data-bs-content=\"Small-to-medium-sized perennial woody plant usually with multiple stems \"><\/a><\/span><sup><\/li><li><label class = \"genericCheckbox d-inline-block\"><input type = \"checkbox\" value = \"shrub-tree\" name = \"plant_habit[]\"><div>Shrub\/Tree<\/div><span class=\"genericCheckmark\"><\/span><\/label><sup><span class=\"ms-n1\"><a tabindex=\"0\" type=\"button\" class=\"fa-regular fa-circle-info text-secondary text-decoration-none\" data-bs-title=\"Shrub\/Tree\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-html=\"true\" data-bs-content=\"Small-to-medium-sized perennial woody plant that can be either classified as a tree or a shrub\"><\/a><\/span><sup><\/li><li><label class = \"genericCheckbox d-inline-block\"><input type = \"checkbox\" value = \"t\" name = \"plant_habit[]\"><div>Tree<\/div><span class=\"genericCheckmark\"><\/span><\/label><sup><span class=\"ms-n1\"><a tabindex=\"0\" type=\"button\" class=\"fa-regular fa-circle-info text-secondary text-decoration-none\" data-bs-title=\"Tree\" data-bs-toggle=\"popover\" data-bs-trigger=\"hover focus\" data-bs-html=\"true\" data-bs-content=\"Woody perennial plant with an elongated stem or trunk\"><\/a><\/span><sup><\/li><\/ul><\/div>                <div class=\"pu-visit-planner__quick d-flex gap-2\" role=\"group\" aria-label=\"Plant habit quick actions\">\r\n                    <button type=\"button\" id=\"plant-select-all\" class=\"btn btn-outline-secondary btn-sm\">Select all<\/button>\r\n                    <button type=\"button\" id=\"plant-deselect-all\" class=\"btn btn-outline-secondary btn-sm\">Deselect all<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"pu-visit-planner__actions\">\r\n            <button id=\"visit-planner-submit\" type=\"submit\" class=\"btn btn-primary\" disabled aria-disabled=\"true\">Show plants for these dates<\/button>\r\n            <a href=\"\/explorer\/wp-json\/wp\/v2\/pages\/23460\" class=\"btn btn-outline-secondary\">Reset<\/a>\r\n            <small id=\"visit-planner-helper\" class=\"pu-visit-planner__helper\">Pick an arrival date, a departure date, and at least one plant type to continue.<\/small>\r\n        <\/div>\r\n    <\/form>\r\n    <\/div>\r\n<\/section>\r\n<input type=\"hidden\" id=\"visit_auto_set\" name=\"visit_auto_set\" value=\"0\">\r\n<script>\r\n    (function() {\r\n        function emitChange(el) {\r\n            if (!el) return;\r\n            var ev;\r\n            try {\r\n                ev = new Event('change', {\r\n                    bubbles: true\r\n                });\r\n            } catch (e) {\r\n                ev = document.createEvent('HTMLEvents');\r\n                ev.initEvent('change', true, false);\r\n            }\r\n            el.dispatchEvent(ev);\r\n        }\r\n\r\n        function selectAllWithin(container) {\r\n            var checks = container.querySelectorAll('input[name=\"plant_habit[]\"]');\r\n            if (checks && checks.length) {\r\n                checks.forEach(function(cb) {\r\n                    cb.checked = true;\r\n                    emitChange(cb);\r\n                });\r\n                if (checks[0]) checks[0].focus();\r\n                return;\r\n            }\r\n            var sel = container.querySelector('select[name=\"plant_habit\"]');\r\n            if (sel) {\r\n                if (sel.multiple) {\r\n                    Array.prototype.forEach.call(sel.options, function(opt) {\r\n                        opt.selected = true;\r\n                    });\r\n                } else {\r\n                    \/\/ choose first non-empty option for single selects\r\n                    for (var i = 0; i < sel.options.length; i++) {\r\n                        if (sel.options[i].value !== '') {\r\n                            sel.value = sel.options[i].value;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                emitChange(sel);\r\n                sel.focus();\r\n            }\r\n        }\r\n\r\n        function deselectAllWithin(container) {\r\n            var checks = container.querySelectorAll('input[name=\"plant_habit[]\"]');\r\n            if (checks && checks.length) {\r\n                checks.forEach(function(cb) {\r\n                    cb.checked = false;\r\n                    emitChange(cb);\r\n                });\r\n                if (checks[0]) checks[0].focus();\r\n                return;\r\n            }\r\n            var sel = container.querySelector('select[name=\"plant_habit\"]');\r\n            if (sel) {\r\n                if (sel.multiple) {\r\n                    Array.prototype.forEach.call(sel.options, function(opt) {\r\n                        opt.selected = false;\r\n                    });\r\n                } else {\r\n                    sel.value = '';\r\n                }\r\n                emitChange(sel);\r\n                sel.focus();\r\n            }\r\n        }\r\n\r\n        var container = document.getElementById('searchFormPlant');\r\n        var btnAll = document.getElementById('plant-select-all');\r\n        var btnNone = document.getElementById('plant-deselect-all');\r\n\r\n        if (btnAll) {\r\n            btnAll.addEventListener('click', function(e) {\r\n                e.preventDefault();\r\n                selectAllWithin(container || document);\r\n            });\r\n        }\r\n        if (btnNone) {\r\n            btnNone.addEventListener('click', function(e) {\r\n                e.preventDefault();\r\n                deselectAllWithin(container || document);\r\n            });\r\n        }\r\n    })();\r\n\r\n    (function() {\r\n        var start = document.getElementById('visit_start_iso');\r\n        var end = document.getElementById('visit_end_iso');\r\n        var autoFlag = document.getElementById('visit_auto_set');\r\n        var form = document.getElementById('visit-planner-form');\r\n\r\n        \/\/ When the user picks a start date, auto-fill end = start + 1 day once if end is empty.\r\n        if (start) start.addEventListener('change', function() {\r\n            try {\r\n                if (!end || !autoFlag) return;\r\n                if (autoFlag.value === '1') return;\r\n                if (end.value) return; \/\/ user already set an end date\r\n                var parts = start.value ? start.value.split('-') : null;\r\n                if (!parts || parts.length !== 3) return;\r\n                var d = new Date(parts[0], parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));\r\n                d.setDate(d.getDate() + 1);\r\n                var y = d.getFullYear();\r\n                var m = (d.getMonth() + 1).toString().padStart(2, '0');\r\n                var dd = d.getDate().toString().padStart(2, '0');\r\n                end.value = y + '-' + m + '-' + dd;\r\n                autoFlag.value = '1';\r\n                \/\/ Re-run validation now that the end date was auto-filled, so the\r\n                \/\/ submit button enables even when the start date is chosen last\r\n                \/\/ (the change-capture handler above ran before this fill).\r\n                try {\r\n                    end.dispatchEvent(new Event('change', {\r\n                        bubbles: true\r\n                    }));\r\n                } catch (e2) {\r\n                    var ev2 = document.createEvent('HTMLEvents');\r\n                    ev2.initEvent('change', true, false);\r\n                    end.dispatchEvent(ev2);\r\n                }\r\n            } catch (e) {\r\n                \/\/ ignore\r\n            }\r\n        });\r\n\r\n        \/\/ Persist visit_mode on submit\r\n        if (form) form.addEventListener('submit', function() {\r\n            try {\r\n                var sel = document.getElementById('visit_mode');\r\n                if (sel && sel.value) localStorage.setItem('pu_visit_mode', sel.value);\r\n            } catch (e) {}\r\n        });\r\n\r\n        \/\/ Prefill visit_mode from localStorage if present\r\n        try {\r\n            var stored = localStorage.getItem('pu_visit_mode');\r\n            if (stored) {\r\n                var sel = document.getElementById('visit_mode');\r\n                if (sel) sel.value = stored;\r\n            }\r\n        } catch (e) {}\r\n\r\n        \/\/ Disable submit until dates and at least one plant type selected\r\n        try {\r\n            var submitBtn = document.getElementById('visit-planner-submit');\r\n            var plantInputsSelector = 'input[name=\"plant_habit[]\"]';\r\n            var plantSelect = document.querySelector('select[name=\"plant_habit\"]');\r\n            \/\/ Preselected plant habits from server (keeps checkboxes\/select in sync on load)\r\n            var pu_selected_plant_habits = [] || [];\r\n\r\n            function anyPlantSelected() {\r\n                var checks = document.querySelectorAll(plantInputsSelector);\r\n                if (checks && checks.length) {\r\n                    for (var i = 0; i < checks.length; i++) {\r\n                        if (checks[i].checked) return true;\r\n                    }\r\n                    return false;\r\n                }\r\n                if (plantSelect) {\r\n                    return plantSelect.value && plantSelect.value !== '';\r\n                }\r\n                \/\/ fallback: look for any input[name=\"plant_habit\"]\r\n                var single = document.querySelector('input[name=\"plant_habit\"]');\r\n                if (single) return !!single.value;\r\n                return false;\r\n            }\r\n\r\n            function checkEnable() {\r\n                try {\r\n                    var s = document.getElementById('visit_start_iso');\r\n                    var e = document.getElementById('visit_end_iso');\r\n                    var ok = s && s.value && e && e.value && anyPlantSelected();\r\n                    var helper = document.getElementById('visit-planner-helper');\r\n                    if (submitBtn) {\r\n                        if (ok) {\r\n                            submitBtn.removeAttribute('disabled');\r\n                            submitBtn.setAttribute('aria-disabled', 'false');\r\n                            if (helper) helper.style.display = 'none';\r\n                        } else {\r\n                            submitBtn.setAttribute('disabled', 'disabled');\r\n                            submitBtn.setAttribute('aria-disabled', 'true');\r\n                            if (helper) helper.style.display = '';\r\n                        }\r\n                    }\r\n                    return !!ok;\r\n                } catch (err) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            document.addEventListener('change', function(evt) {\r\n                var t = evt.target;\r\n                if (!t) return;\r\n                if (t.id === 'visit_start_iso' || t.id === 'visit_end_iso' || t.name === 'plant_habit[]' || t.name === 'plant_habit') {\r\n                    checkEnable();\r\n                }\r\n            }, true);\r\n\r\n            \/\/ pre-check any checkboxes or select options from server-provided values\r\n            try {\r\n                if (pu_selected_plant_habits && pu_selected_plant_habits.length) {\r\n                    pu_selected_plant_habits.forEach(function(val) {\r\n                        try {\r\n                            \/\/ match checkboxes\r\n                            var cb = document.querySelectorAll('input[name=\"plant_habit[]\"][value=\"' + CSS.escape(val) + '\"]');\r\n                            if (cb && cb.length) {\r\n                                for (var ii = 0; ii < cb.length; ii++) cb[ii].checked = true;\r\n                            }\r\n                            \/\/ match select\r\n                            var sel = document.querySelector('select[name=\"plant_habit\"]');\r\n                            if (sel) sel.value = val;\r\n                        } catch (ex) {}\r\n                    });\r\n                }\r\n            } catch (ex) {}\r\n\r\n            \/\/ initial check\r\n            checkEnable();\r\n\r\n            \/\/ prevent form submit if form not ready (enter key or other submits)\r\n            if (form) {\r\n                form.addEventListener('submit', function(evt) {\r\n                    try {\r\n                        if (!checkEnable()) {\r\n                            evt.preventDefault();\r\n                            evt.stopPropagation();\r\n                            \/\/ briefly focus the first missing field\r\n                            var s = document.getElementById('visit_start_iso');\r\n                            var e = document.getElementById('visit_end_iso');\r\n                            if (!s || !s.value) {\r\n                                if (s) s.focus();\r\n                            } else if (!e || !e.value) {\r\n                                if (e) e.focus();\r\n                            }\r\n                            return false;\r\n                        }\r\n                    } catch (err) {}\r\n                }, true);\r\n            }\r\n        } catch (e) {}\r\n    })();\r\n<\/script>\n\t\n\n","protected":false},"excerpt":{"rendered":"<p> [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"https:\/\/www.arboretum.purdue.edu\/explorer\/visit-planner\/\">Read More&#8230;<span class=\"screen-reader-text\"> from What&#8217;s in Bloom &#8211; Visit Planner<\/span><\/a><\/p>\n","protected":false},"author":8,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/fullwidthpage.php","meta":{"_acf_changed":false,"footnotes":""},"coauthors":[1612],"class_list":["post-23460","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/pages\/23460","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/comments?post=23460"}],"version-history":[{"count":50,"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/pages\/23460\/revisions"}],"predecessor-version":[{"id":24114,"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/pages\/23460\/revisions\/24114"}],"wp:attachment":[{"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/media?parent=23460"}],"wp:term":[{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.arboretum.purdue.edu\/explorer\/wp-json\/wp\/v2\/coauthors?post=23460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}