1<!DOCTYPE html> 2<!--[if lt IE 8]> <html lang="en" class="no-js lt-ie10 lt-ie9 lt-ie8"><![endif]--><!--[if IE 8]> <html lang="en" class="no-js lt-ie10 lt-ie9"> <![endif]--><!--[if IE 9]> <html lang="en" class="no-js lt-ie10"> <![endif]--><!--[if gt IE 9]><!--><html class="no-js" lang="en"><!--<![endif]--><head> 3 <meta charset="utf-8"/> 4 <meta content="width=device-width, initial-scale=1" name="viewport"/> 5 <meta content="IE=edge" http-equiv="X-UA-Compatible"/> 6 <title>Contact Information | Chief Architect</title> 7 <meta content="Contact information for Chief Architect Software. Phone, e-mail, social media, and more." name="description"/> 8 <link href="contact.html" rel="canonical"/> 9 <link href="png/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/> 10<link href="png/favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/> 11<link href="png/android-chrome-192x192.png" rel="icon" sizes="192x192" type="image/png"/> 12<link href="png/favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/> 13<link href="site.html" rel="manifest"/> 14<link color="#9fc43e" href="svg/safari-pinned-tab.svg" rel="mask-icon"/> 15<meta content="#ffffff" name="theme-color"/> 16<link href="css/root.css" rel="stylesheet"/> 17<style type="text/css"> 18 html.js .lazy { 19 background-image: none; 20 } 21 .site-header { 22 border-bottom: 2px solid #9fc43e; 23 } 24 .site-header .site-search { 25 width: 425px!important; 26 display: flex!important; 27 } 28 .site-header .site-search-filter { 29 width: 140px; 30 border-radius: 3px 0 0 3px; 31 background-color: #f5f5f5; 32 margin-right: -1px; 33 } 34 .site-header .site-search-term { 35 flex: 1; 36 border-radius: 0 3px 3px 0!important; 37 min-width: 0; 38 } 39 @media screen and (max-width: 47.9375em) { 40 .site-header .site-search { 41 width: auto!important; /* IE doesn't understand width: initial */ 42 width: initial!important; 43 } 44 } 45 .site-header .site-quick-links>li:first-of-type { 46 margin-left: 15px!important; 47 } 48 .site-header .site-quick-links a { 49 border-bottom: 2px solid transparent; 50 } 51 .site-header .site-quick-links a:hover { 52 border-bottom-color: #6e8a29; 53 } 54 #top-menu { 55 background-color: transparent; 56 } 57 .row-wide { 58 max-width: 1600px; 59 } 60 .wide { 61 max-width: 1270px; 62 } 63 .text-red { 64 color: #ff470f; 65 font-weight: bold; 66 } 67 .u-strike { 68 text-decoration: line-through; 69 } 70 .dark-link { 71 color: #000; 72 text-decoration: none; 73 border-bottom: 1px solid #000; 74 } 75 .dark-link:hover, 76 .dark-link:focus { 77 border-bottom: 1px solid #6e6e6e; 78 color: #6e6e6e; 79 } 80 .gray-link { 81 border-bottom: 1px solid #545454; 82 color: #545454; 83 } 84 .gray-link:hover, 85 .gray-link:focus { 86 border-bottom: 2px solid #000; 87 color: #000; 88 font-weight: 500; 89 } 90 .social-icon-container { 91 float: none; 92 margin: 0 auto; 93 max-width: 320px; 94 } 95 .social-icon-container .social-icon { 96 border-bottom: none; 97 font-size: 1.25rem; 98 padding: 0; 99 margin: 0; 100 color: inherit; 101 } 102 .social-icon:hover, 103 .social-icon:focus { 104 border-bottom: none; 105 } 106 .embed-container { 107 position: relative; 108 padding-bottom: 56.25%; 109 height: 0; 110 overflow: hidden; 111 max-width: 100%; 112 } 113 .embed-container iframe, 114 .embed-container object, 115 .embed-container embed { 116 position: absolute; 117 top: 0; 118 left: 0; 119 width: 100%; 120 height: 100%; 121 } 122 .no-bullet-list { 123 list-style: none; 124 } 125 .spacer-10 { 126 height: 10px; 127 } 128 .spacer-15 { 129 height: 15px; 130 } 131 .spacer-20 { 132 height: 20px; 133 } 134 .spacer-30 { 135 height: 30px; 136 } 137 .spacer-35 { 138 height: 35px; 139 } 140 .spacer-50 { 141 height: 50px; 142 } 143 .spacer-100 { 144 height: 100px; 145 } 146 .spacer-150 { 147 height: 150px; 148 } 149 .spacer-164 {
150 height: 164px; 151 } 152 .spacer-205 { 153 height: 205px; 154 } 155 div[class^="spacer"] { 156 line-height: 0; 157 margin: 0; 158 padding: 0; 159 } 160 @media only screen and (max-width: 64em) { 161 .wide { 162 padding: 0 80px; 163 } 164 } 165 @media only screen and (max-width: 40em) { 166 .wide { 167 padding: inherit; 168 } 169 } 170</style> 171 <style> 172 /* 173 * General 174 */ 175 header { 176 border: none !important; 177 } 178 .no-margin { 179 margin: 0; 180 } 181 .extra-padding { 182 padding: 1.5em 0; 183 } 184 .extra-padding h1, 185 .extra-padding h3 { 186 margin-top: 0; 187 } 188 .indented { 189 margin-left: 1rem; 190 } 191 /* 192 * Contact information 193 */ 194 .company-name { 195 color: #fff; 196 line-height: 1.4; 197 font-size: 1.6875rem; 198 font-weight: 300; 199 } 200 abbr { 201 text-decoration: none; 202 cursor: auto; 203 } 204 abbr[title] { 205 border-bottom: none !important; 206 } 207 #chief-clock { 208 display: none; /* will toggle to inline-block */ 209 outline: 1px solid #939393; 210 padding: 0.5rem 1rem; 211 background-color: rgb(255 255 255 / .16); 212 text-align: center; 213 } 214 /* 215 * Social media links 216 */ 217 .social-links { 218 font-size: 27px; 219 font-size: 1.6875rem; 220 } 221 .social-links a { 222 color: #6e6e6e; 223 } 224 .social-links a:hover, 225 .social-links a:focus { 226 border-bottom: none; 227 } 228 .icon-chief-architect + span, 229 .icon-chief-blog + span, 230 .icon-youtube + span, 231 .icon-houzz + span, 232 .icon-facebook + span, 233 .icon-instagram + span, 234 .icon-twitter + span, 235 .icon-linkedin + span, 236 .icon-pinterest + span { 237 transition: color 0.1s ease-out; 238 } 239 a:hover > .icon-chief-architect, 240 a:hover > .icon-chief-architect + span { 241 color: #9fc43e !important; 242 } 243 a:hover > .icon-chief-blog, 244 a:hover > .icon-chief-blog + span { 245 color: #9fc43e !important; 246 } 247 a:hover > .icon-youtube, 248 a:hover > .icon-youtube + span { 249 color: #cd201f !important; 250 } 251 a:hover > .icon-houzz, 252 a:hover > .icon-houzz + span { 253 color: #4dbc15 !important; 254 } 255 a:hover > .icon-facebook, 256 a:hover > .icon-facebook + span { 257 color: #3b5998 !important; 258 } 259 a:hover > .icon-instagram, 260 a:hover > .icon-instagram + span { 261 color: #e4405f !important; 262 } 263 a:hover > .icon-twitter, 264 a:hover > .icon-twitter + span { 265 color: #1da1f2 !important; 266 } 267 a:hover > .icon-linkedin, 268 a:hover > .icon-linkedin + span { 269 color: #0077b5 !important; 270 } 271 a:hover > .icon-pinterest, 272 a:hover > .icon-pinterest + span { 273 color: #bd081c !important; 274 } 275 @media only screen and (max-width: 40em) { 276 .indented { 277 margin-left: 0; 278 } 279 .social-links { 280 font-size: 1.25rem; 281 } 282 } 283 </style> 284 285<style> 286 a[href^="tel:"] { 287 color: inherit; 288 text-decoration: none; 289 border-bottom: none; 290 cursor: default; 291 white-space: nowrap; 292 } 293</style> 294
294<script src="js/modernizr.js"></script>
vendor: 1 bytes, line 294
294
295<script id="website-json-ld" type="application/ld+json"> 296{ 297 "@context":"http://schema.org", 298 "@type":"WebSite", 299 "name":"Chief Architect Software", 300 "alternateName":"Chief Architect Home Design Software", 301 "url":"https://www.chiefarchitect.com", 302 "potentialAction": { 303 "@type": "SearchAction", 304 "target": "https://www.chiefarchitect.com/search/?q={search}", 305 "query-input": "required name=search" 306 } 307} 308</script>
vendor: 1 bytes, line 308
308
309<script id="social-json-ld" type="application/ld+json"> 310{ 311 "@context":"http://schema.org", 312 "@type":"Organization", 313 "name":"Chief Architect Software", 314 "url":"https://www.chiefarchitect.com", 315 "sameAs":[ 316 "https://chieftalk.chiefarchitect.com/", 317 "https://www.facebook.com/ChiefArchitect", 318 "https://www.youtube.com/user/ChiefArchitectInc", 319 "https://www.instagram.com/chiefarchitect/", 320 "https://twitter.com/chiefsoftware", 321 "https://www.linkedin.com/company/chief-architect-inc-", 322 "https://www.houzz.com/pro/chiefarchitect/chief-architect-software" 323 ], 324 "contactPoint": [ 325 { 326 "name": "sales_us", 327 "@type": "ContactPoint", 328 "telephone": "+1-208-292-3400", 329 "faxNumber": "+1-208-292-3420", 330 "contactType": ["sales", "customer service"] 331 }, 332 { 333 "name":"tech", 334 "@type": "ContactPoint", 335 "telephone": "+1-208-292-3399", 336 "contactType": "technical support" 337 }, 338 { 339 "name":"tech_priority", 340 "@type": "ContactPoint", 341 "telephone": "+1-208-665-3674", 342 "contactType": "technical support" 343 }, 344 { 345 "name":"tech_au", 346 "@type": "ContactPoint", 347 "telephone": "+61-02-8006-6851", 348 "contactType": "technical support", 349 "areaServed": "AU" 350 }, 351 { 352 "name":"tech_uk", 353 "@type": "ContactPoint", 354 "telephone": "+44-020-3286-5716", 355 "contactType": "technical support", 356 "areaServed": "UK" 357 } 358 ] 359} 360</script>
360 361 </head> 362 <body> 363 <header class="site-header"> 364 <div class="standard-container"> 365<a class="site-logo" href="index.html" tabindex="1"> 366 <img alt="Chief Architect" src="png/chief-architect-logo.png"/> 367 <h6>Architectural Home Design Software</h6> 368</a>
369<script> 370 // Submit the form if a search term exists 371 function submitIfSearchTerm() { 372 var searchTerm = document.getElementsByClassName('site-search-term') ? document.getElementsByClassName('site-search-term')[0] : null; 373 374 if (searchTerm && searchTerm.value) { 375 var searchSubmit = document.getElementsByClassName('site-search-submit') ? document.getElementsByClassName('site-search-submit')[0] : null; 376 377 if (searchSubmit) { 378 searchSubmit.click(); 379 } 380 } 381 } 382</script>
382 383<form action="https://www.chiefarchitect.com/search/" class="site-search" method="get"> 384 <select class="site-search-filter" name="default_tab" onchange="submitIfSearchTerm();"> 385 <option selected="" value="all">All Content</option> 386 <option value="support">Knowledge Base</option> 387 <option value="video">Videos</option> 388 <option value="blog">Blog</option> 389 <option value="forum">ChiefTalk Forum</option> 390 </select> 391 <input class="site-search-term" name="q" placeholder="Searchâ¦" required="" type="search"/> 392 <input class="site-search-submit" type="submit" value=""/> 393</form> 394<ul class="site-quick-links u-imageCenter" style="display: block;"> 395 <li><a href="https://accounts.chiefarchitect.com/">My Account</a></li> 396 <li><a href="contact.html">Contact Us</a></li> 397 <li><a href="https://shopping.chiefarchitect.com/checkout/cart/">Cart</a></li> 398</ul> 399 400 <nav class="simple-menu top-bar hide-for-print" data-topbar="" id="top-menu"> 401 <ul class="title-area"> 402 <li class="name"></li> 403 <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li> 404 </ul> 405 <section class="top-bar-section"> 406 <ul> 407 <li class="has-dropdown"> 408 <a>PRODUCTS</a> 409 <ul class="dropdown"> 410 <li><a href="index-2.html">Chief Architect Premier</a></li> 411 <li><a href="trial.html">Trial Download</a></li> 412 <li><a href="upgrade.html">Upgrades</a></li> 413 <li><a href="index-3.html">Add-On Products</a></li> 414 <li><a href="index-4.html">3D Viewer App</a></li> 415 <li><a href="sysreq.html">System Requirements</a></li> 416 </ul> 417 </li> 418 <li class="has-dropdown"> 419 <a>PROFESSION</a> 420 <ul class="dropdown"> 421 <li><a href="index-5.html">Architects & Builders</a></li> 422 <li><a href="index-6.html">Remodelers</a></li> 423 <li><a href="index-7.html">Interior Designers</a></li> 424 <li><a href="index-8.html">Kitchen & Bath Designers</a></li> 425 <li><a href="index-9.html">Academic</a></li> 426 <li><a href="index-10.html">Home Enthusiast (DIY)</a></li> 427 </ul> 428 </li> 429 <li class="has-dropdown"> 430 <a>USER CENTER</a> 431 <ul class="dropdown"> 432 <li><a href="index-11.html">Getting Started Resources</a></li> 433 <li><a href="index-12.html">Events & Training</a></li> 434 <li><a href="index-13.html">Training Services</a></li> 435 <li><a href="index-14.html">Training Videos</a></li> 436 <li><a href="index-15.html">Catalog Downloads</a></li> 437 <li><a href="samples.html">Samples Gallery</a></li> 438 <li><a href="index-16.html" target="_blank">ChiefBlog</a></li> 439 <li><a href="https://chieftalk.chiefarchitect.com/" rel="me" target="_blank">ChiefTalk Professional Forum</a></li> 440 </ul> 441 </li> 442 <li class="has-dropdown"> 443 <a>SUPPORT</a> 444 <ul class="dropdown"> 445 <li><a href="index-17.html">Support Resources</a></li> 446 <li><a href="documentation.html">Documentation</a></li> 447 <li><a href="database.html">Knowledge Base</a></li> 448 <li><a href="index-14.html">Training Videos</a></li> 449 <li><a href="updates.html">Program Updates</a></li> 450 </ul> 451 </li> 452 </ul> 453 </section> 454 </nav> 455 </div> 456 </header> 457 <noscript> 458 <style> 459 /* 460 no-js elements 461 */ 462 .msg-need-js a { 463 color: black; 464 border-bottom: 2px solid black; 465 } 466 .msg-need-js a:hover { 467 color: black; 468 border-bottom: 2px solid black; 469 } 470 .msg-need-js p { 471 margin-bottom: 0; 472 } 473 .no-js .panorama-slider, 474 .no-js #vrview, 475 .no-js .lazy, 476 .no-js .view-pano-file-container, 477 .no-js .lazy, 478 .no-js .news-section, 479 .no-js .viewer-body { 480 display: none; 481 } 482 </style> 483 <br/> 484 <div class="row"> 485 <div class="small-12 columns text-center"> 486 <div aria-hidden="false" class="alert-box secondary"> 487 <p> 488 This site requires JavaScript to be fully operational. 489 </p> 490 <p> 491 <a href="index-18.html" target="_blank">More Information</a> 492 </p> 493 </div> 494 </div> 495 </div> 496</noscript> 497 <div class="u-primaryBG"> 498 <div class="row"> 499 <div class="small-12 columns"> 500 <h1 class="u-textWhite">Contact Chief Architect</h1> 501 </div> 502 </div> 503 <div class="row"> 504 <div class="small-12 columns"> 505 <p translate="no" typeof="schema:PostalAddress">
506 <span class="company-name" property="schema:name">Chief Architect Software</span> 507 <br/> 508 <span property="schema:streetAddress">6500 N Mineral Dr</span> 509 <br/> 510 <span property="schema:addressLocality">Coeur d'Alene</span>, <abbr property="schema:addressRegion" title="Idaho">ID</abbr> <span property="schema:postalCode">83815</span> 511 <br/> 512 Business Hours: <span content="Mo,Tu,We,Th,Fr 07:00-16:00" itemprop="openingHours" title="Monday through Friday, 07:00 to 16:00 US Pacific Time (PST/UTC-8 or PDT/UTC-7)">MâF <time class="nowrap" datetime="07:00">7:00 AM</time> to <time class="nowrap" datetime="16:00">4:00 PM</time> Pacific</span> 513 </p> 514 <p id="chief-clock"><span class="closed-notice"></span><span class="time-prefix">It is currently</span> <time class="hq-time"></time></p> 515 </div> 516 </div> 517 </div> 518 <div class="extra-padding"> 519 <div class="row"> 520 <div class="small-12 columns"> 521 <h3>Phone</h3> 522 </div> 523 </div> 524 <div class="row"> 525 <div class="medium-6 columns"> 526 <p class="no-margin indented"> 527 Sales / Customer Service / Training: 528 </p> 529 </div> 530 <div class="medium-6 columns"> 531 <p class="no-margin"> 532 <a href="tel:+1-208-292-3400">208-292-3400</a> </p> 533 </div> 534 </div> 535 <br class="show-for-small-only"/> 536 <div class="row"> 537 <div class="medium-6 columns"> 538 <p class="no-margin indented"> 539 Technical Support: 540 </p> 541 </div> 542 <div class="medium-6 columns"> 543 <p class="no-margin"> 544 <a href="index-17.html#contact">Contact Support</a> 545 </p> 546 </div> 547 </div> 548 <br class="show-for-small-only"/> 549 <div class="row"> 550 <div class="medium-6 columns"> 551 <p class="no-margin indented"> 552 Fax: 553 </p> 554 </div> 555 <div class="medium-6 columns"> 556 <p class="no-margin"> 557 208-292-3420 </p> 558 </div> 559 </div> 560 </div> 561 <div class="u-grayBG extra-padding"> 562 <div class="row"> 563 <div class="small-12 columns"> 564 <h3>E-mail</h3> 565 </div> 566 </div> 567 <div class="row"> 568 <div class="medium-6 columns"> 569 <p class="no-margin indented"> 570 Sales: 571 </p> 572 </div> 573 <div class="medium-6 columns"> 574 <p class="no-margin"> 575 <a href="mailto:[email protected]">[email protected]</a> </p> 576 </div> 577 </div> 578 <br class="show-for-small-only"/> 579 <div class="row"> 580 <div class="medium-6 columns"> 581 <p class="no-margin indented"> 582 Customer Service: 583 </p> 584 </div> 585 <div class="medium-6 columns"> 586 <p class="no-margin"> 587 <a href="mailto:[email protected]">[email protected]</a> </p> 588 </div> 589 </div> 590 <br class="show-for-small-only"/> 591 <div class="row"> 592 <div class="medium-6 columns"> 593 <p class="no-margin indented"> 594 Training: 595 </p> 596 </div> 597 <div class="medium-6 columns"> 598 <p class="no-margin"> 599 <a href="mailto:[email protected]">[email protected]</a> </p> 600 </div> 601 </div> 602 <br class="show-for-small-only"/> 603 <div class="row"> 604 <div class="medium-6 columns"> 605 <p class="no-margin indented"> 606 Technical Support: 607 </p> 608 </div> 609 <div class="medium-6 columns"> 610 <p class="no-margin"> 611 <a href="index-17.html#contact">Contact Support</a> 612 </p> 613 </div> 614 </div> 615 <br class="show-for-small-only"/> 616 <div class="row"> 617 <div class="medium-6 columns"> 618 <p class="no-margin indented"> 619 Suggestions & Feature Requests: 620 </p> 621 </div> 622 <div class="medium-6 columns"> 623 <p class="no-margin"> 624 <a href="mailto:[email protected]">[email protected]</a> </p> 625 </div> 626 </div> 627 <br class="show-for-small-only"/> 628 <div class="row"> 629 <div class="medium-6 columns"> 630 <p class="no-margin indented"> 631 General Information: 632 </p> 633 </div> 634 <div class="medium-6 columns"> 635 <p class="no-margin"> 636 <a href="mailto:[email protected]">[email protected]</a> </p> 637 </div> 638 </div> 639 </div> 640 <div class="row extra-padding"> 641 <div class="small-12 columns"> 642 <h3>E-mail Newsletter Subscriptions</h3> 643 <p class="indented"> 644 <a href="subscription706f.html">Subscribe</a> 645 </p> 646 <p class="indented"> 647 <a href="subscription44ac.html">Unsubscribe</a> 648 </p> 649 <p class="no-margin indented"> 650 <a href="subscription258f.html">Change E-mail Address</a> 651 </p> 652 </div> 653 </div> 654 <div class="extra-padding"> 655 <div class="row" id="social"> 656 <div class="small-12 columns"> 657 <h3>Social Media â Connect <span class="nowrap">With Us</span></h3> 658 </div> 659 </div>
660 <div class="row social-links"> 661 <div class="medium-4 columns"> 662 <a class="indented" href="https://chieftalk.chiefarchitect.com/" rel="me" target="_blank" title="ChiefTalk Community Forum"> 663 <span class="icon-chief-architect"></span> <span>ChiefTalk</span> 664 </a> 665 <br/> 666 <a class="indented" href="index-16.html" target="_blank" title="Chief Architect Blog"> 667 <span class="icon-chief-blog"></span> <span>ChiefBlog</span> 668 </a> 669 <br/> 670 <a class="indented" href="https://www.facebook.com/ChiefArchitect" rel="me noopener" target="_blank" title="Facebook"> 671 <span class="icon-facebook"></span> <span>Facebook</span> 672 </a> 673 </div> 674 <div class="medium-4 columns"> 675 <a class="indented" href="https://www.youtube.com/user/ChiefArchitectInc" rel="me noopener" target="_blank" title="YouTube"> 676 <span class="icon-youtube"></span> <span>YouTube</span> 677 </a> 678 <br/> 679 <a class="indented" href="https://www.instagram.com/chiefarchitect/" rel="me noopener" target="_blank" title="Instagram"> 680 <span class="icon-instagram"></span> <span>Instagram</span> 681 </a> 682 <br/> 683 <a class="indented" href="https://www.houzz.com/pro/chiefarchitect/chief-architect-software" rel="me noopener" target="_blank" title="Houzz"> 684 <span class="icon-houzz"></span> <span>Houzz</span> 685 </a> 686 </div> 687 <div class="medium-4 columns"> 688 <a class="indented" href="https://www.pinterest.com/chiefarchitect/" rel="me noopener" target="_blank" title="Pinterest"> 689 <span class="icon-pinterest"></span> <span>Pinterest</span> 690 </a> 691 <br/> 692 <a class="indented" href="https://twitter.com/chiefsoftware" rel="me noopener" target="_blank" title="Twitter"> 693 <span class="icon-twitter"></span> <span>Twitter</span> 694 </a> 695 <br/> 696 <a class="indented" href="https://www.linkedin.com/company/chief-architect-inc-" rel="me noopener" target="_blank" title="LinkedIn"> 697 <span class="icon-linkedin"></span> <span>Linkedin</span> 698 </a> 699 </div> 700 </div> 701 </div> 702 <div class="extra-padding"> 703 <div class="row" id="ambassadors"> 704 <div class="small-12 columns"> 705 <h3>Chief Architect Brand Ambassador</h3> 706 <p>Chief Architect offers a Brand Ambassador program for users that are passionate about our brand and the design industry. Send an email to <a href="mailto:[email protected]">[email protected]</a> to request more information.</p> 707 </div> 708 </div> 709 </div> 710 711 <footer> 712 <div class="standard-container"> 713 <ul class="accordion small-block-grid-1 medium-block-grid-3 large-block-grid-5 site-footer-nav hide-for-print" data-accordion=""> 714 <li class="accordion-navigation"> 715 <a href="#panel1"><h5 class="site-footer-nav-column-head">Products</h5></a> 716 <div class="content" id="panel1"> 717 <ul> 718 <li><a href="index-2.html">Chief Architect Premier</a></li> 719 <li><a href="trial.html">Trial Download</a></li> 720 <li><a href="index-4.html">3D Viewer App</a></li> 721 <li><a href="index-20.html">Detailed Feature List</a></li> 722 <li><a href="index-21.html">Support & Software Assurance</a></li> 723 <li><a href="upgrade.html">Upgrades</a></li> 724 <li><a href="index-3.html">Add-On Products</a></li> 725 <li><a href="index-22.html">Special Offers</a></li> 726 <li><a href="sysreq.html">System Requirements</a></li> 727 <li><a href="index-23.html">Subscription FAQ</a></li> 728 <li><a href="guarantee.html">Satisfaction Guarantee</a></li> 729 </ul> 730 </div> 731 </li> 732 <li class="accordion-navigation"> 733 <a href="#panel2"><h5 class="site-footer-nav-column-head">Education Center</h5></a> 734 <div class="content" id="panel2"> 735 <ul> 736 <li><a href="index-14.html">Training Videos</a></li> 737 <li><a href="index-12.html">Webinars & Training Seminars</a></li> 738 <li><a href="database.html">Knowledge Base</a></li> 739 <li><a href="index-13.html#personal">Personal Training</a></li> 740 <li><a href="index-13.html#custom">Custom Training</a></li> 741 <li><a href="chief-architect-certification.html">Certification</a></li> 742 </ul> 743 </div> 744 </li> 745 <li class="accordion-navigation"> 746 <a href="#panel3"><h5 class="site-footer-nav-column-head">User Center</h5></a> 747 <div class="content" id="panel3"> 748 <ul> 749 <li><a href="index-11.html">Getting Started Resources</a></li> 750 <li><a href="https://accounts.chiefarchitect.com/">My Account</a></li> 751 <li><a href="index-15.html">Catalog Downloads</a></li> 752 <li><a href="samples.html">Samples Gallery</a></li> 753 <li><a href="https://chieftalk.chiefarchitect.com/" rel="me" target="_blank">ChiefTalk User Forum</a></li> 754 <li><a href="index-24.html">Customer Testimonials</a></li> 755 <li><a href="index-25.html">NKBA Software Programs</a></li> 756 </ul> 757 </div> 758 </li> 759 <li class="accordion-navigation"> 760 <a href="#panel4"><h5 class="site-footer-nav-column-head">Support</h5></a> 761 <div class="content" id="panel4"> 762 <ul> 763 <li><a href="index-17.html">Support Resources</a></li> 764 <li><a href="documentation.html">Documentation</a></li> 765 <li><a href="database.html">Knowledge Base</a></li> 766 <li><a href="updates.html">Program Updates</a></li> 767 <li><a href="https://support.chiefarchitect.com/">Technical Support Center</a></li> 768 <li><a href="glossary.html">Glossary</a></li> 769 </ul> 770 </div> 771 </li> 772 <li class="accordion-navigation"> 773 <a href="#panel5"><h5 class="site-footer-nav-column-head">Company Info</h5></a> 774 <div class="content" id="panel5"> 775 <ul> 776 <li><a href="index-12.html">Events & Training</a></li> 777 <li><a href="contact.html">Contact Us</a></li> 778 <li><a href="careers.html">Careers</a></li> 779 <li><a href="aboutchief.html">About Chief Architect</a></li> 780 <li><a href="catalog-partner-program.html">Catalog Partner Program</a></li> 781 <li><a href="index-26.html">Marketing Graphics</a></li> 782 <li><a href="index-27.html">Newsletter</a></li> 783 <li><a href="index-16.html" target="_blank">ChiefBlog</a></li> 784 <li><a href="contact.html#social">Social Media</a></li> 785 </ul> 786 </div> 787 </li> 788 </ul> 789 </div> 790 <div class="standard-container"> 791 <div class="row"> 792 <div class="small-12 medium-6 large-4 columns text-center social-icon-container"> 793 <ul class="small-block-grid-7"> 794 <li class="social-icon"><a class="social-icon icon-chief-architect" href="https://chieftalk.chiefarchitect.com/" rel="me" target="_blank" title="ChiefTalk User Forum"></a></li> 795 <li class="social-icon"><a class="social-icon icon-chief-blog" href="index-16.html" target="_blank" title="Chief Architect Blog"></a></li> 796 <li class="social-icon"><a class="social-icon icon-facebook" href="https://www.facebook.com/ChiefArchitect" rel="me noopener" target="_blank" title="Facebook"></a></li> 797 <li class="social-icon"><a class="social-icon icon-youtube" href="https://www.youtube.com/user/ChiefArchitectInc" rel="me noopener" target="_blank" title="YouTube"></a></li> 798 <li class="social-icon"><a class="social-icon icon-instagram" href="https://www.instagram.com/chiefarchitect/" rel="me noopener" target="_blank" title="Instagram"></a></li> 799 <li class="social-icon"><a class="social-icon icon-houzz" href="https://www.houzz.com/pro/chiefarchitect/" rel="me noopener" target="_blank" title="Houzz"></a></li> 800 <li class="social-icon"><a class="social-icon icon-pinterest" href="https://www.pinterest.com/chiefarchitect/" rel="me noopener" target="_blank" title="Pinterest"></a></li> 801 </ul> 802 </div> 803 </div> 804 <div id="copyright"> 805 <ul class="nowrap-parent"> 806 <li><a href="tel:+1-208-292-3400" style="color: inherit;">208-292-3400</a></li> 807 <li>© 2000â2025 Chief Architect, Inc.</li> 808 <li><a href="terms.html" rel="terms-of-service">Terms of Use</a></li> 809 <li><a href="privacy.html" rel="privacy-policy">Privacy Policy</a></li> 810 </ul> 811 </div> 812 </div> 813 </footer> 814 <!--[if gte IE 9]><!--> 815
815<script src="js/jquery.min.js"></script>
815 816
816<script>window.jQuery || document.write('
816<script src="js/jquery.js"><\/script>')</script>
816 817 <!--<![endif]--> 818 <!--[if lt IE 9]> 819
819<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
819 820
820<script>window.jQuery || document.write('
820<script src="https://cdn.chiefarchitect.com/themes/chiefarchitect/1.2.4/js/jquery-ltie9.js"><\/script>')</script>
820 821 <![endif]--> 822 823
823<script> 824 blockToggle = function(el) { 825 if (el.attr('style') == 'display: block;') { 826 el.attr('style', ''); 827 } else { 828 el.attr('style', 'display: block;'); 829 } 830 } 831 $(".site-search-toggle, .toggle-search").click(function(event) { 832 event.preventDefault(); 833 // $("#site-search").toggle(); doesn't work because it leaves the 834 // element with inline style "display:none;" which overrides 835 // display rules for larger @media if the viewport width grows 836 blockToggle($("#site-search")); 837 }); 838 $(".site-menu-toggle").click(function(event) { 839 event.preventDefault(); 840 blockToggle($("#site-menu")); 841 }); 842 </script>
842 843 844 <!--[if gte IE 9]><!--> 845
845<script src="js/root.js"></script>
845 846 <!--<![endif]--> 847 <!--[if lt IE 9]> 848
848<script src="https://cdn.chiefarchitect.com/themes/chiefarchitect/1.2.4/js/root-ltie9.js"></script>
848 849 <![endif]--> 850 <!--BEGIN GOOGLE ANALYTICS--> 851<!-- Google tag (gtag.js) --> 852 853 854<!--END GOOGLE ANALYTICS--> 855
855<script> 856 $(function() { 857 FastClick.attach(document.body); 858 }); 859 $(document).foundation(); 860 $('a.openWindow').click(function(event) { 861 window.open($(this).attr('href'), '_blank', 'width=' + $(this).attr('width') + ', height=' + $(this).attr('height')); 862 return event.preventDefault(); 863 }); 864 $(window).load(function(e) { 865 $(".lazy:below-the-fold").lazyload({threshold:500}); 866 $(".lazy").lazyload({ 867 effect : "fadeIn" 868 }); 869 }); 870 871 // Disable form submit buttons for 3 seconds to prevent double submits. 872 // We let the event bubble to the document instead of attaching a 873 // listener to every form. This is more lightweight and plays nicely 874 // with form validators and other submit listeners. 875 document.addEventListener('submit', function (event) { 876 // Search for submit buttons in the form's elements property 877 // (instead of querying its subtree) in order to include elements 878 // that use the `form` attribute. 879 const submits = Array.from(event.target.elements).filter(function (el) { 880 const selectors = [ 881 'input[type="submit"]', 882 'button[type="submit"]', 883 // 'input[type="image"]', // not included in elements property 884 885 // If a button has no type attribute, its type is "submit" 886 // per the "missing value default" in the spec. It is valid. 887 'button:not([type])', 888 889 // If a button's type attribute is present but its value is 890 // missing, empty, or invalid, its type is "submit" per the 891 // "invalid value default" in the spec. Even though such 892 // buttons are technically submit buttons, their types are 893 // invalid. To include them would require enumerating valid 894 // values, which would require maintenance if new types are 895 // added. The selectors would look something like this: 896 // 'button[type=""]', // invalid 897 // 'button:not([type="reset"]):not([type="button"])', // invalid or "submit" 898 ]; 899 return el.matches(selectors.join(', ')); 900 }); 901 902 // Include the submitter if it is an input or button element. 903 // This will catch submit buttons that were not gathered above, 904 // such as input[type="image"] or buttons with invalid types. 905 // Elements might get included twice, but that is okay. 906 if (event.submitter instanceof HTMLInputElement || event.submitter instanceof HTMLButtonElement) { 907 submits.push(event.submitter); 908 } 909 910 submits.forEach(function (submit) { 911 if (!submit.disabled) { 912 submit.disabled = true; 913 setTimeout(function () {submit.disabled = false;}, 3000); 914 } 915 }); 916 }); 917 918 // Prevent double clicks on elements with the "dbl-click-guard" class 919 document.addEventListener('DOMContentLoaded', function(event) { 920 Array.from(document.getElementsByClassName('dbl-click-guard')).forEach(function (el) { 921 el.addEventListener('click', function (event) { 922 if ('dblClickTimeout' in el.dataset) { 923 event.preventDefault(); 924 } else { 925 el.dataset.dblClickTimeout = '1'; 926 setTimeout(function () { 927 delete el.dataset.dblClickTimeout; 928 }, 1000); // block additional clicks for 1 second 929 } 930 }); 931 }); 932 }); 933 </script>
933
934<script> 935'use strict'; 936const chiefClock = (function () { 937 try { 938 const chiefLocale = Intl.Locale ? new Intl.Locale('en-US') : 'en-US'; 939 const chiefTimeZone = 'America/Los_Angeles'; 940 const defaultTimeFormatOptions = { 941 timeZone: chiefTimeZone, 942 hour: 'numeric', 943 minute: '2-digit', 944 timeZoneName: 'short', 945 }; 946 const defaultDateFormatOptions = { 947 timeZone: chiefTimeZone, 948 weekday: 'long', 949 month: 'long', 950 day: 'numeric', 951 year: 'numeric', 952 }; 953 const defaultDateTimeFormatter = new Intl.DateTimeFormat(chiefLocale, Object.assign( 954 {second: '2-digit', fractionalSecondDigits: 3}, 955 defaultDateFormatOptions, defaultTimeFormatOptions 956 )); 957 const serverTime = new Date('2025-08-25T23:33:07-07:00'); 958 const deviceTime = new Date(); 959 960 // Test whether our locale and formatting options produce the result we 961 // expect. This depends on the browser locale database and support for 962 // the formatting options we are using. 963 // 964 // The formatted string we are checking should resemble this: 965 // Wednesday, July 24, 2024 at 7:45:01.000 AM PDT 966 // 967 // Comparing the browser's format() result to a hardcoded constant 968 // usually is not advised. Among the potential output variations are 969 // white space differences. For example, an implementation could use 970 // non-breaking spaces. We do a regex replacement on the white space 971 // character class to minimize that risk. 972 { 973 const expected = 'Monday, August 25, 2025 at 11:33:07.000 PM PDT'; 974 const jsResult = defaultDateTimeFormatter.format(serverTime).replace(/\s/g,' '); 975 if (jsResult !== expected) { 976 throw new Error(`Unexpected date-time format:\n${jsResult}\nExpected:\n${expected}`); 977 } 978 } 979 980 // Test the variance between the server time encoded in this document 981 // and the device time (comparing UTC timestamps). This can fail for 982 // several reasons: 983 // - inaccurate device clock 984 // - very slow page load 985 // - document was cached 986 // - inaccurate server clock 987 // If the variance is high, without doing something NTP-like we are 988 // unable to determine whether the device clock is reliable. But if the 989 // variance is reasonably low, we assume the device clock is reliable. 990 let referenceTime = serverTime; 991 let referenceOffset = serverTime - deviceTime; 992 const maxVarianceMs = 120000; // 2 minutes 993 const isReliable = Math.abs(referenceOffset) <= maxVarianceMs; 994 995 if (!isReliable) { 996 console.warn( 997 'server and device clock variance exceeds %f\xa0sec: %f\xa0sec', 998 maxVarianceMs/1000, referenceOffset/1000 999 ); 1000 } 1001 1002 if (isReliable && referenceOffset < 0) { 1003 // Use device clock without offset if it satisfied our reliability 1004 // check and it is not behind the server time. The device clock is 1005 // preferred because of unknown latency with the server time. 1006 referenceTime = deviceTime; 1007 referenceOffset = 0; 1008 } 1009 1010 1011 // Get the current UTC timestamp integer, synced to our reference clock 1012 function now() { 1013 return Date.now() + referenceOffset; 1014 } 1015
1016 // Refresh the clock time and its indicators 1017 function tick() { 1018 referenceTime.setTime(now()); 1019 indicators.refresh(); 1020 } 1021 1022 // Wind the clock so it ticks again at the right time 1023 function wind() { 1024 // Instead of setInterval, we use setTimeout with an "oscillator" to 1025 // continually adjust for delays, preventing clock drift 1026 wind.id = setTimeout(function () { 1027 tick(); 1028 wind(); 1029 }, oscillator()); 1030 } 1031 1032 // Calculate milliseconds until the start of the next oscillation 1033 function oscillator() { 1034 return oscillator.rate - (referenceTime.getTime() % oscillator.rate) 1035 } 1036 oscillator.rate = 60000; // 1 minute default 1037 1038 const indicators = []; 1039 indicators.refresh = () => indicators.forEach(indicator => indicator(referenceTime)); 1040 1041 if (document.readyState === 'loading') { 1042 document.addEventListener('DOMContentLoaded', function () { 1043 tick(); 1044 wind(); 1045 }); 1046 } else { 1047 indicators.refresh(); 1048 wind(); 1049 } 1050 1051 console.info( 1052 'Chief clock initialized with %f\xa0sec offset from device clock:\n%s', 1053 referenceOffset/1000, defaultDateTimeFormatter.format(referenceTime) 1054 ); 1055 1056 return { 1057 now: now, 1058 isReliable: isReliable, 1059 locale: chiefLocale, 1060 timeZone: chiefTimeZone, 1061 1062 get refreshRate() { 1063 return oscillator.rate; 1064 }, 1065 1066 set refreshRate(ms) { 1067 oscillator.rate = ms; 1068 if (wind.id) { 1069 clearTimeout(wind.id); 1070 tick(); 1071 wind(); 1072 } 1073 }, 1074 1075 // Register a clock indicator function. Indicators are callback 1076 // functions for each tick of the clock. The indicator functions are 1077 // called immediately upon being added (with the most recent tick or 1078 // init time) and on every tick. 1079 // 1080 // An indicator function receives one argument: a Date object 1081 // representing the current time. What the indicator does with the 1082 // Date object is unconstrained. In the typical case, you will use 1083 // indicators to format a time string and display it in the 1084 // document. But indicators can also be used for any specialized 1085 // task that you want to initiate from a reliably synchronized 1086 // clock; for example, removing a webinar event from a page the 1087 // instant it expires. 1088 // 1089 // See the getDisplayIndicator method, which is a convenient way to 1090 // create indicators for most typical use cases. 1091 addIndicator: function (indicator) { 1092 indicators.push(indicator); 1093 indicator(referenceTime); 1094 }, 1095 1096 // Deregister a clock indicator function 1097 removeIndicator: function (indicator) { 1098 const index = indicators.indexOf(indicator); 1099 if (index >= 0) { 1100 indicators.splice(index, 1); 1101 } 1102 }, 1103 1104 // Create a closure to use with addIndicator().The closure combines 1105 // a formatter function with one or more renderer functions. 1106 // 1107 // Ultimately it gets applied like this: 1108 // renderer(formatter(date)) 1109 // 1110 // The formatter function must accept a Date object and return a 1111 // value of the type expected by the renderers (text string, Node, 1112 // HTMLElement, HTML string, etc.). Typically it will be the format 1113 // function of an Intl.DateTimeFormat object. See the formatters 1114 // property for our conventional date and time formatter functions. 1115 // 1116 // The renderer functions are used to update a display (e.g., update 1117 // the DOM or log to the console) with the result of the formatter. 1118 // See the renderers property for common renderer functions. 1119 getDisplayIndicator: function (formatter, ...renderers) { 1120 return function (date) { 1121 const value = formatter(date);
1122 renderers.forEach(renderer => renderer(value)); 1123 }; 1124 }, 1125 1126 // Formatter functions for our common date and time conventions. 1127 // See the getDisplayIndicator method. 1128 // 1129 // These are not the formatter functions themselves, but rather 1130 // methods that return formatter functions. The indirection prevents 1131 // instantiation of Intl.DateTimeFormat objects that are never used. 1132 formatters: { 1133 // Wednesday, July 24, 2024 at 7:45:01.234 AM PDT 1134 // This can be useful for debugging. We already initialized it 1135 // for our locale formatting test, so why not include it here. 1136 dateTimeMs: function () { 1137 return defaultDateTimeFormatter.format; 1138 }, 1139 1140 // Wednesday, July 24, 2024 1141 longDate: function () { 1142 const longDateFormatter = new Intl.DateTimeFormat(chiefLocale, defaultDateFormatOptions); 1143 return longDateFormatter.format; 1144 }, 1145 1146 // 7:45 AM PDT 1147 shortTimeZone: function () { 1148 const shortTimeZoneFormatter = new Intl.DateTimeFormat(chiefLocale, defaultTimeFormatOptions); 1149 return shortTimeZoneFormatter.format; 1150 }, 1151 1152 // 7:45 AM PDT (Pacific / UTC-7) 1153 // Expands the time zone details of another formatter. Expects 1154 // the given formatter to return a string that includes the 1155 // 'short' timeZoneName, e.g. 'PST'. 1156 // 1157 // We want to add the UTC offset, but there is no good way to 1158 // get it. There are unergonomic ways to do it. For example, we 1159 // could attempt to parse a non-standard string containing 1160 // 'short' names and compare it to the same time string but UTC. 1161 // Something like this: 1162 // Date.parse(`${time}Z`) - Date.parse(`${time} PST`) 1163 // That is undocumented behavior at best. Another approach is to 1164 // extract the offset from a string formatted using the 1165 // 'longOffset' timeZoneName, but it is cumbersome and the 1166 // browser support for that is not ideal. At the end of the day, 1167 // we really only care about Pacific, so we just hardcode it. 1168 shortTimeZoneExpanded: function (formatter) { 1169 const map = new Map(); 1170 map.set('PST', 'PST (Pacific / UTC-8)'); 1171 map.set('PDT', 'PDT (Pacific / UTC-7)'); 1172 return date => formatter(date).replace(/(PST|PDT)/, map.get.bind(map)); 1173 }, 1174 1175 // 7:45 AM Pacific (PDT / UTC-7) 1176 // Expands the time zone details of another formatter. Expects 1177 // the given formatter to return a string that includes the 1178 // 'short' timeZoneName, e.g. 'PST'. See shortTimeZoneExpanded. 1179 genericTimeZoneExpanded: function (formatter) { 1180 const map = new Map(); 1181 map.set('PST', 'Pacific (PST / UTC-8)'); 1182 map.set('PDT', 'Pacific (PDT / UTC-7)'); 1183 return date => formatter(date).replace(/(PST|PDT)/, map.get.bind(map)); 1184 }, 1185 1186 // 2024-07-24T14:45:01.234Z 1187 // The following would be acceptable here, and even preferable, 1188 // but surprisingly there is no easy way to make this format: 1189 // 2024-07-24T07:45-07:00 1190 standardGlobalDateTime: function () { 1191 return date => date.toISOString(); 1192 }, 1193 1194 // A message to display when we are closed 1195 closedNotice: function () { 1196 return function (date) { 1197 try { 1198 const status = businessOpenStatus(date); 1199 1200 if (status.holiday && !status.afterHours) { 1201 return `We are currently closed for ${status.holiday}.`; 1202 } 1203 1204 return status.open ? '' : 'We are currently closed.'; 1205 } catch (e) { 1206 console.error(e); 1207 return ''; 1208 } 1209 }; 1210 }, 1211 }, 1212 1213 // Renderer functions. See the getDisplayIndicator method. 1214 renderers: { 1215 // Create a closure to update the text content of an HTMLElement 1216 // or Node object 1217 text: function (el) { 1218 return str => el.textContent = str; 1219 }, 1220 1221 // Create a closure to update an attribute of an HTML element 1222 attribute: function (el, attr) { 1223 return str => el.setAttribute(attr, str); 1224 }, 1225 1226 // Create a closure to write HTML content to an element and add 1227 // 'nowrap' styling to common date/time components 1228 htmlSelectiveNoWrap: function (el) { 1229 return function (str) { 1230 el.innerHTML = str.replace( 1231 // July 24, 2024 | 7:45 AM PDT / 7:45:01 AM / 07:45:01.234 PDT | (PDT / UTC-7) 1232 /(\w+\s\d\d?,\s\d{4})|(\d\d?:\d\d(:\d\d(\.\d{1,3})?)?(\s[AP]M)?\s\w+)|(\([^\(\)]+\))/g, 1233 '<span style="white-space: nowrap">$&</span>' 1234 ); 1235 }; 1236 }, 1237 }, 1238 }; 1239 1240 // Get an object describing the given Date object in terms of our 1241 // business hours and holiday policy 1242 function businessOpenStatus(date) { 1243 const f = new Intl.DateTimeFormat(chiefLocale, { 1244 timeZone: chiefTimeZone, 1245 hourCycle: 'h23', 1246 weekday: 'short', 1247 year: 'numeric', 1248 month: '2-digit', 1249 day: '2-digit', 1250 hour: '2-digit', 1251 minute: '2-digit', 1252 second: '2-digit', 1253 fractionalSecondDigits: 3, 1254 }); 1255 const s = f.format(date); // Wed, 07/24/2024, 07:45:01.234 1256 const m = s.match(/^(\w{3}), (\d\d)\/(\d\d)\/(\d{4}), (\d\d):(\d\d):(\d\d)\.(\d{3})$/); 1257 if (!m || m.length < 9) { 1258 throw new Error(`Failed to parse string:\n${s}\nFormatted from:\n${date}`); 1259 } 1260 1261 // Create a time-zone adjusted Date object for day-of-week and
1262 // wall-clock operations 1263 const ld = new Date(m[4], m[2]-1, m[3], m[5], m[6], m[7], m[8]); 1264 const dayOfWeek = m[1]; 1265 1266 const days = {Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6}; 1267 if (ld.getDay() !== days[dayOfWeek]) { 1268 throw new Error(`Unexpected day of week: ${ld.getDay()}\nExpected: ${days[dayOfWeek]} (${dayOfWeek})`); 1269 } 1270 1271 const closed = { 1272 open: {h: 0, m: 0}, 1273 close: {h: 0, m: 0}, 1274 }; 1275 const regularHours = { 1276 open: {h: 7, m: 0}, 1277 close: {h: 16, m: 0}, 1278 }; 1279 const hours = { 1280 Sun: closed, 1281 Mon: regularHours, 1282 Tue: regularHours, 1283 Wed: regularHours, 1284 Thu: regularHours, 1285 Fri: regularHours, 1286 Sat: closed, 1287 }; 1288 const openTime = new Date(ld.getFullYear(), ld.getMonth(), ld.getDate(), hours[dayOfWeek].open.h, hours[dayOfWeek].open.m); 1289 const closeTime = new Date(ld.getFullYear(), ld.getMonth(), ld.getDate(), hours[dayOfWeek].close.h, hours[dayOfWeek].close.m); 1290 1291 const status = { 1292 time: date, 1293 open: null, 1294 beforeHours: ld < openTime, 1295 inHours: openTime <= ld && ld < closeTime, 1296 afterHours: closeTime <= ld, 1297 holiday: null, 1298 }; 1299 1300 // Official company holidays. If a holiday falls on a Saturday, it 1301 // is observed on the preceding Friday. If it falls on a Sunday, it 1302 // is observed on the following Monday. 1303 1304 // January 1 1305 if (ld.getMonth() == 0 && ld.getDate() == 1) { 1306 status.holiday = "New Year's Day"; 1307 } 1308 1309 // January 1 on a weekend (e.g. 2028, 2033) 1310 if ( (ld.getMonth() == 11 && ld.getDate() == 31 && ld.getDay() == 5) 1311 || (ld.getMonth() == 0 && ld.getDate() == 2 && ld.getDay() == 1)) 1312 { 1313 status.holiday = "New Year's Day weekend"; 1314 } 1315 1316 // last Monday of May 1317 if (ld.getMonth() == 4 && ld.getDay() == 1 && ld.getDate() > 24) { 1318 status.holiday = 'Memorial Day'; 1319 } 1320 1321 // July 4 1322 if (ld.getMonth() == 6 && ld.getDate() == 4) { 1323 status.holiday = 'Independence Day'; 1324 } 1325 1326 // July 4 on a weekend (e.g. 2026, 2027) 1327 if ( (ld.getMonth() == 6 && ld.getDate() == 3 && ld.getDay() == 5) 1328 || (ld.getMonth() == 6 && ld.getDate() == 5 && ld.getDay() == 1)) 1329 { 1330 status.holiday = 'Independence Day weekend'; 1331 } 1332 1333 // first Monday of September 1334 if (ld.getMonth() == 8 && ld.getDay() == 1 && ld.getDate() < 8) { 1335 status.holiday = 'Labor Day'; 1336 } 1337 1338 // fourth Thursday of November and the Friday after 1339 if ( (ld.getMonth() == 10 && ld.getDay() == 4 && 21 < ld.getDate() && ld.getDate() < 29) 1340 || (ld.getMonth() == 10 && ld.getDay() == 5 && 22 < ld.getDate() && ld.getDate() < 30)) 1341 { 1342 status.holiday = 'Thanksgiving'; 1343 } 1344 1345 // December 25 1346 if (ld.getMonth() == 11 && ld.getDate() == 25) { 1347 status.holiday = 'Christmas'; 1348 } 1349 1350 // December 25 on a weekend (e.g. 2027, 2032) 1351 if ( (ld.getMonth() == 11 && ld.getDate() == 24 && ld.getDay() == 5) 1352 || (ld.getMonth() == 11 && ld.getDate() == 26 && ld.getDay() == 1)) 1353 { 1354 status.holiday = 'Christmas'; 1355 } 1356 1357 status.open = status.inHours && !status.holiday; 1358 return status; 1359 } 1360 1361 } catch (e) { 1362 console.error(e); 1363 return null; 1364 } 1365})(); 1366</script>
1366 1367
1367<script> 1368 if (chiefClock && chiefClock.isReliable) { 1369 document.addEventListener('DOMContentLoaded', function() { 1370 const clockElement = document.getElementById('chief-clock'); 1371 1372 const hqTime = clockElement.querySelector('.hq-time'); 1373 const weekdayTime = new Intl.DateTimeFormat(chiefClock.locale, { 1374 timeZone: chiefClock.timeZone, 1375 weekday: 'long', 1376 hour: 'numeric', 1377 minute: '2-digit', 1378 timeZoneName: 'short', 1379 }); 1380 chiefClock.addIndicator(chiefClock.getDisplayIndicator( 1381 chiefClock.formatters.genericTimeZoneExpanded(weekdayTime.format), 1382 chiefClock.renderers.htmlSelectiveNoWrap(hqTime), 1383 )); 1384 chiefClock.addIndicator(chiefClock.getDisplayIndicator( 1385 chiefClock.formatters.standardGlobalDateTime(), 1386 chiefClock.renderers.attribute(hqTime, 'datetime'), 1387 )); 1388 1389 const closedNotice = clockElement.querySelector('.closed-notice'); 1390 const timePrefix = clockElement.querySelector('.time-prefix'); 1391 chiefClock.addIndicator(chiefClock.getDisplayIndicator( 1392 chiefClock.formatters.closedNotice(), 1393 function (str) { 1394 if (str) { 1395 closedNotice.innerHTML = `${str}<br>`; 1396 timePrefix.textContent = 'It is'; 1397 } else { 1398 closedNotice.textContent = ''; 1399 timePrefix.textContent = 'It is currently'; 1400 } 1401 }, 1402 )); 1403 1404 clockElement.style.display = 'inline-block'; 1405 }); 1406 } 1407 </script>
1407 1408 <!-- Start of LiveChat (www.livechatinc.com) code -->
1409<script> 1410 window.__lc = window.__lc || {}; 1411 window.__lc.license = 1274271; 1412 window.__lc.skill = 3; 1413 window.addEventListener('load', function() { 1414 var lc = document.createElement('script'); lc.type = 'text/javascript'; lc.async = true; 1415 lc.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'cdn.livechatinc.com/tracking.js'; 1416 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(lc, s); 1417 }); 1418</script>
1418 1419<!-- End of LiveChat code --> 1420 1421 1422 1423 1424</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.