PageSourceSearch

https://www.brooksee.com/cart

html brooksee.com collected 2026-10-01 15:08:36 UTC 50,114 bytes, 1,251 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en"sta>
3  <head>
4    <meta charset="utf-8" />
5    <meta property="og:image" content="https://www.brooksee.com/files/bee/imgs/facebook_image.jpg"/>
6    <meta property="og:title" content="Brooksee"/>
7    <meta property="og:description" content="We do Endurance Events. Check out the fast and beautiful REVEL Marathon/Half Marathon Race Series."/>
8    <meta property="og:site_name" content="Brooksee"/>
9    <meta property="og:url"       content="https://www.brooksee.com"/>
10    <meta property="og:type"      content="website" />
11    <meta property="fb:app_id"    context="" />
12    <meta http-equiv="X-UA-Compatible" content="IE=edge">
13    <link rel="stylesheet" href="/files/css/normalize.css" />
14    <link rel="stylesheet" href="/files/bee/css/master2.css" />
15    <!--
15<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
15-->
16    <link href="/files/js/jquery-ui-1.10.3.custom/css/smoothness/jquery-ui-1.10.3.custom.min.css" rel="stylesheet">
17    <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic' rel='stylesheet' type='text/css'>
18    <link href='/files/fonts/aleo.css' rel='stylesheet' type='text/css'>
19    <link rel="stylesheet" href="https://use.typekit.net/sxx8ssb.css"> <!--Proxima Nova -->
20    
20<script src="/files/js/jquery-1.11.1.min.js"></script>
20
21    
21<script type="text/javascript" src="/files/js/jquery-ui-1.10.3.custom/js/jquery-ui-1.10.3.custom.min.js"></script>
21
22    
22<script src="/files/js/jquery.ui.touch-punch.min.js"></script>
22
23    
23<script type="text/javascript" src="/files/js/jquery.colorbox-min.js"></script>
23
24    <link rel="stylesheet" type="text/css" href="/files/css/colorbox.css">
25
26    <link rel="shortcut icon" href="/files/bee/imgs/favicon.ico" />
27    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
28    <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400" rel="stylesheet">
29
30    <title> Brooksee</title>
31    
32    
33<script type="text/javascript" src="/files/js/jquery.validate.min.js"></script>
vendor: 1 bytes, line 33
33
34<script type="text/javascript" src="/files/js/additional-methods.min.js"></script>
vendor: 1 bytes, line 34
34
35<script type="text/javascript" src="/files/js/jquery.form.js"></script>
vendor: 1 bytes, line 35
35
36<script>
37   
38function facebook_error(info) {
39    error("An error occurred. Try again. If the problem persists, contact [email protected].\n" + info);
40}
41
42function error(msg) {
43    ui_alert("Error", msg);
44}
45
46function facebook_discount(key) {
47    ui_alert("Facebook Discount Details", "<div style='font-size:1.1em; text-align: left'><p>To qualify for this Facebook discount, we will need permission to list you as <em>Attending</em> on our Facebook event page and to post a photo on your timeline that says you have registered.</p><p>To grant us these permissions, you must click <em>Okay</em> to each option on the Facebook pop-up that will appear next.</p></div>", function() { facebook_discount1(key); });
48}
49
50function facebook_discount1(key) {
51    try{
52	FB;
53    } catch(e) {
54	error("Error loading Facebook code. This could be due to ad-blocking or firewall settings. Adjust your firewall settings to allow access to http://connect.facebook.net and try again.");
55	return;
56    }
57    var waitDialog = ui_alert("Waiting For Facebook Login...", "<p>A Facebook login page should have just appeared. Please login to Facebook to earn this discount. We will post a message on your wall that you have registered for this event.</p> <p>If you do not see a popup, your browser may be asking you to enable popups for this site. You will need to enable pop-ups and try again for this to work.</p>");
58    FB.login(function(response) {
59	if (response.authResponse) {
60	    // user has auth'd your app and is logged into Facebook
61	    check_permissions(
62		function(permissions) {
63		    console.log(permissions);
64		    if((("publish_actions" in permissions))) {  //&& ("rsvp_event" in permissions)
65			waitDialog.dialog("close");
66			url = "https://www.brooksee.com/cart?action=fbapply&key=" + key + "&accessToken="+response.authResponse.accessToken+"&userID="+response.authResponse.userID
67			ui_alert("Please wait...", "Please Wait...");
68			window.location.href=url;
69		    } else {
70			waitDialog.dialog("close");
71			error("Authorization Failure. You must grant permissions for us to post to your Facebook page and manage your events to receive this discount. Please try again.");
72		    }
73		},
74		function(error_msg) {
75		    waitDialog.dialog("close");
76		    error("Error", error_msg + " Please try again.");
77		}
78	    );
79	} else {
80	    waitDialog.dialog("close");
81	    error("Authorization failure. Please try again. If this problem persists, logout of Facebook and try again.");
82	}
83    }, 
84	     {scope: 'publish_actions'});
85
86}
87
88function check_permissions(success, error) {
89    FB.api("/me/permissions", function(perm_response) {
90	if(perm_response && perm_response.data && perm_response.data.length) {
91	    var permissions = {};
92            var data = perm_response.data;
93            for(var k=0; k<data.length; k++) {
94               if(data[k]["status"] == "granted") {
95                 permissions[data[k]["permission"]] = true;
96               }
97            }
98	    success(permissions);
99	} else {
100	    error("Error getting Facebook permission status.");
101	}
102    });
103}
104
105
106  window.fbAsyncInit = function() {
107    FB.init({
108	appId      : '', // App ID
109	xfbml      : false,
110        status     : true,
111        cookie     : true,
112        version    : 'v2.3'
113    });
114
115    FB.getLoginStatus(function(response) {
116	if (response.status === 'connected') {
117	    // if the user is logged in and the app is autherized, then 
118	    // logout now.
119	    FB.logout(function(response) {});
120	}
121    });
122};
123
124(function(d, s, id){
125         var js, fjs = d.getElementsByTagName(s)[0];
126         if (d.getElementById(id)) {return;}
127         js = d.createElement(s); js.id = id;
128         js.src = "//connect.facebook.net/en_US/sdk.js";
129         fjs.parentNode.insertBefore(js, fjs);
130       }(document, 'script', 'facebook-jssdk'));
131
132  shipping_costs = {
133    
134    '17591' : 0.0 
135    
136};
137
138    
139$(document).ready(function() {
140    $("#promocode_form").validate();
141    $("#apply_promo").click(function() {
142	$("#promocode_form").submit();
143    });
144    
145
146
147});
148
149function fmt_cost(amt) {
150  amt = amt * 1.0;
151  
152  amt = Math.round(amt * 100)/100;
153  var x = "$" + amt.toFixed(2) + " USD";
154  return x;
155  
156}
157
158total = 0;
159
160function update_shipping_price() {
161  var shipping_cost = shipping_costs[$("#id_shipping_method").val()];
162  $("#shipping_amount").html(fmt_cost(shipping_cost));
163  total = shipping_cost + 0
164  
165  if (total < 0.005) {
166    total = 0;
167  }
168  
169  $("#total_amount").html(fmt_cost(total));
170}
171
172function its_free() {
173    ui_prompt("", "Email receipt to:", function (email) {
174	if(email) {
175	    $("#free_email").val(email);
176	    $("#cart_form").submit();
177	}
178    });
179    return false;
180}
181
182
183function submit1() {
184    $("#checkout_button").attr("disabled", true);
185    grecaptcha.execute('6LcWLKEUAAAAAC9sm7cfHSALmJWQVZZIw-n2nxWG', {action: 'cart'})
186        .then(function(token) {
187	    $("#captcha_token").val(token)
188	    if(Math.abs(total) < 0.005) {
189		its_free()
190		$("#checkout_button").attr("disabled", false);
191	    } else {
192		$("#cart_form").submit()
193		$("#checkout_button").attr("disabled", false);
194	    }
195        }).catch(function(err) {
196	    $("#checkout_button").attr("disabled", false);
197	})
198    return false
199}
200
201</script>
201    
202
203    
204
205<!-- Facebook Pixel Code -->
206<script>
vendor: 426 bytes, lines 206-215
206
207  !function(f,b,e,v,n,t,s)
208  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
209  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
210  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
211  n.queue=[];t=b.createElement(e);t.async=!0;
212  t.src=v;s=b.getElementsByTagName(e)[0];
213  s.parentNode.insertBefore(t,s)}(window, document,'script',
214  'https://connect.facebook.net/en_US/fbevents.js');
215  fbq('init', '
215525290401179405
vendor: 34 bytes, lines 215-216
215');
216  fbq('track', 'PageView');
217</script>
217
218<noscript><img height="1" width="1" style="display:none"
219  src="https://www.facebook.com/tr?id=525290401179405&ev=PageView&noscript=1"
220/></noscript>
221<!-- End Facebook Pixel Code -->
222
223<!-- Global site tag (gtag.js) - Google Ads: 1008471620 -->
vendor: 69 bytes, lines 223-224
223
224    <script async src="https://www.googletagmanager.com/gtag/js?id=
224AW-1008471620
vendor: 17 bytes, lines 224-225
224"></script>
225    
225<script>
226      
vendor: 148 bytes, lines 226-229
226window.dataLayer = window.dataLayer || [];
227      function gtag(){dataLayer.push(arguments);}
228      gtag('js', new Date());
229      gtag('config', '
229AW-1008471620
vendor: 9 bytes, lines 229-230
229');
230    
230</script>
230
231<style>
232#slideout .menu a {
233  color: #4d4d4d;
234  text-decoration: none;
235  padding: 5px 0;
236  width: 100%;
237  display: flex;
238  align-items: center;
239}
240#slideout .menu li {
241  padding: 10px 20px;
242  display: flex; 
243  align-items: center;
244}
245#slideout .menu a:hover {
246    background-color: #00aba363;
247    color: #0B1D46;
248}
249#slideout .menu {
250    margin: 0; 
251    padding: 0;
252}
253#slideout .menu li p {
254    margin: 0px;
255    padding-left: 10px;
256    font-size: 1.4rem;
257    
258}
259#slideout {
260    position: absolute; 
261    width: 30%; 
262    top:-100%; 
263    left:0px; 
264    transition: top 0.5s; 
265    background-color: white;
266    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3), 0 2px 5px rgba(0, 0, 0, 0.25);
267}
268.menu-list-container {
269    display: flex; 
270    flex-direction: column;
271}
272.cart-container {
273    display: flex; 
274    align-items: center; 
275    background-color: #00ABA3; 
276    padding: 10px 0px 10px 20px;
277}
278.cart-container img {
279    width: 20px; 
280    height: 20px;
281}
282.cart-container p {
283    margin: 0; 
284    padding-left: 15px;
285    font-size: 1.4rem;
286}
287.authenticated-user {
288    background-color: #0B1D46; 
289    padding: 20px 0 10px 0;
290}
291.user-name {
292    margin: 0px; 
293    display: flex; 
294    padding-left: 20px;
295}
296.user-name span, .logout-container span{
297    padding-left: 10px;
298}
299.user-email {
300    font-size: 0.8em; 
301    padding-top: 10px; 
302    padding-left: 60px;
303}
304.logout-container {
305    display: flex; 
306    align-items: center; 
307    padding-left: 20px;
308    font-size: 1.4rem;
309}
310.authenticated-user a {
311    color: white; 
312    font-size: 1.4rem;
313    display: flex;
314}
315.login-container {
316    padding-left: 20px; 
317    display: flex; 
318    align-items: center; 
319    font-size: 1.4rem;
320}
321#hamb{
322    position: absolute;
323    left: 2rem;
324    z-index: 10;
325    flex-direction: column;
326    justify-content: space-between;
327    display: flex;
328    width: 30px;
329    height: 23px;
330    transition: all 0.5s ease-out;
331    cursor: pointer;
332    z-index: 100;
333}
334#hamb .bar {
335    width: 30px;
336    height: 3px;
337    background-color: #0B1D46;
338    border-radius: 10px;
339    transition: all 0.5s ease-out;
340    display: block;
341    cursor: pointer;
342}
343#hamb, #hamb.close {
344    top: 25%;
345}
346#hamb.close {
347    transform: rotate(180deg);
348    cursor: pointer;
349    pointer-events: all;
350}
351#hamb.close .bar:nth-child(1) {
352    transform: rotate(45deg) translate(5px, 3px);
353}
354#hamb.close .bar:nth-child(2) {
355    opacity: 0;
356}
357#hamb.close .bar:nth-child(3) {
358    transform: rotate(-45deg) translate(11px, -8px);
359}
360@media only screen and (max-width: 1300px) {
361    #slideout {
362        width: 40%;
363    }
364}
365
366@media only screen and (max-width: 800px) {
367    #slideout {
368        width: 100%;
369    }
370    #hamb .bar {
371        width: 28px;
372    }
373    #hamb {
374        left: 0.75rem;
375    }
376    #slideout-menu li {
377        padding: 5px 20px;
378    }
379}
380@media only screen and (max-width: 350px) {
381    #hamb {
382        left: 0.5rem;
383    }
384    #hamb, #hamb.close {
385        top: 30%;
386    }
387    #hamb .bar {
388        width: 25px;
389    }
390}
391@media (hover: hover) {
392    .user-name span:hover, .logout-container span:hover{
393        transform: translateY(-2px);
394    }
395}
396</style>
397  </head>
398  
399  <body>
400    
401    <div data-role="page" id="page" style="display: flex; flex-direction: column; height: 100vh;">
402      <div style='position: relative; text-align: center; background-color: white; box-shadow: 0 -6px 10px 5px rgba(0,0,0,0.5); z-index:2;'>
403        <div id="hamb">
404            <span class="bar"></span>
405            <span class="bar"></span>
406            <span class="bar"></span>
407        </div>
408        <!--<img id='hamb' style='cursor: pointer; position: absolute; top: 20%; left: 5px' src="https://brookseeevents.s3.amazonaws.com/bee/2019/albums/hamburger.png" />-->
409        <a href="https://www.brooksee.com"><img style="padding: 10px 0" src="https://brookseeevents.s3.amazonaws.com/bee/2023/albums/BrookseeColor_web.png" width="275px" /></a>
410      </div>
411      <div id="content" style="z-index: 0; position: relative">
412	
413<!--<div class="row" id="subpage_header">
414  <div class="row_content">
415    <div class="row_inner">
416      <h1></h1>
417    </div>
418  </div>
419</div>-->
420
421<div class="row" id="nav2">
422  <div class="row_content">
423    <div class="row_inner">
424      
425    </div>
426  </div>
427</div>
428
429<div class="row">
430  <div class="row_content">
431    <div class="row_inner cart" id="subpage">
432      <div id="subpage_inner">
433	
434      
435
436      
437
438
439
440
441<script type="text/javascript" src="/files/js/jquery.validate.min.js"></script>
vendor: 1 bytes, line 441
441
442<script type="text/javascript" src="/files/js/additional-methods.min.js"></script>
vendor: 1 bytes, line 442
442
443<script type="text/javascript" src="/files/js/jquery.form.js"></script>
vendor: 1 bytes, line 443
443
444<script>
445  shipping_costs = {
446    
447    '17591' : 0.0 
448    
449};
450
451    
452$(document).ready(function() {
453    $("#promocode_form").validate();
454    $("#apply_promo").click(function() {
455	$("#promocode_form").submit();
456    });
457    
458
459
460});
461
462function fmt_cost(amt) {
463  amt = amt * 1.0;
464  
465  amt = Math.round(amt * 100)/100;
466  var x = "$" + amt.toFixed(2) + " USD";
467  return x;
468  
469}
470
471total = 0;
472
473function update_shipping_price() {
474  var shipping_cost = shipping_costs[$("#id_shipping_method").val()];
475  $("#shipping_amount").html(fmt_cost(shipping_cost));
476  total = shipping_cost + 0
477  
478  if (total < 0.005) {
479    total = 0;
480  }
481  
482  $("#total_amount").html(fmt_cost(total));
483}
484
485function its_free() {
486    ui_prompt("", "Email receipt to:", function (email) {
487	if(email) {
488	    $("#free_email").val(email);
489	    $("#cart_form").submit();
490	}
491    });
492    return false;
493}
494
495
496function submit1() {
497    $("#checkout_button").attr("disabled", true);
498    grecaptcha.execute('6LcWLKEUAAAAAC9sm7cfHSALmJWQVZZIw-n2nxWG', {action: 'cart'})
499        .then(function(token) {
500	    $("#captcha_token").val(token)
501	    if(Math.abs(total) < 0.005) {
502		its_free()
503		$("#checkout_button").attr("disabled", false);
504	    } else {
505		$("#cart_form").submit()
506		$("#checkout_button").attr("disabled", false);
507	    }
508        }).catch(function(err) {
509	    $("#checkout_button").attr("disabled", false);
510	})
511    return false
512}
513
514</script>
vendor: 61 bytes, lines 514-515
514
515<script src="https://www.google.com/recaptcha/api.js?render=
5156LcWLKEUAAAAAC9sm7cfHSALmJWQVZZIw-n2nxWG
vendor: 14 bytes, lines 515-517
515"></script>
516
517
518<div id="fb-root"></div>
519<div style='float:right'>
520  Currency: <form style='display: inline-block' id='currform'>
521    <select name="_currency" id='currsel'>
522      
523      <option value="1" selected>$ USD (US Dollars)</option>
524      
525  </select>
526  </form>
527</div>
528<script>
529  $(document).ready(function() {
530    $("#currsel").change(function() {
531      $("#currform").submit();
532    })
533  })
534</script>
534
535
536
537
538
539
540Your shopping cart is empty. Visit the Registration page to register for this event.
541
542
543<script>
544 
545function facebook_error(info) {
546    error("An error occurred. Try again. If the problem persists, contact [email protected].\n" + info);
547}
548
549function error(msg) {
550    ui_alert("Error", msg);
551}
552
553function facebook_discount(key) {
554    ui_alert("Facebook Discount Details", "<div style='font-size:1.1em; text-align: left'><p>To qualify for this Facebook discount, we will need permission to list you as <em>Attending</em> on our Facebook event page and to post a photo on your timeline that says you have registered.</p><p>To grant us these permissions, you must click <em>Okay</em> to each option on the Facebook pop-up that will appear next.</p></div>", function() { facebook_discount1(key); });
555}
556
557function facebook_discount1(key) {
558    try{
559	FB;
560    } catch(e) {
561	error("Error loading Facebook code. This could be due to ad-blocking or firewall settings. Adjust your firewall settings to allow access to http://connect.facebook.net and try again.");
562	return;
563    }
564    var waitDialog = ui_alert("Waiting For Facebook Login...", "<p>A Facebook login page should have just appeared. Please login to Facebook to earn this discount. We will post a message on your wall that you have registered for this event.</p> <p>If you do not see a popup, your browser may be asking you to enable popups for this site. You will need to enable pop-ups and try again for this to work.</p>");
565    FB.login(function(response) {
566	if (response.authResponse) {
567	    // user has auth'd your app and is logged into Facebook
568	    check_permissions(
569		function(permissions) {
570		    console.log(permissions);
571		    if((("publish_actions" in permissions))) {  //&& ("rsvp_event" in permissions)
572			waitDialog.dialog("close");
573			url = "https://www.brooksee.com/cart?action=fbapply&key=" + key + "&accessToken="+response.authResponse.accessToken+"&userID="+response.authResponse.userID
574			ui_alert("Please wait...", "Please Wait...");
575			window.location.href=url;
576		    } else {
577			waitDialog.dialog("close");
578			error("Authorization Failure. You must grant permissions for us to post to your Facebook page and manage your events to receive this discount. Please try again.");
579		    }
580		},
581		function(error_msg) {
582		    waitDialog.dialog("close");
583		    error("Error", error_msg + " Please try again.");
584		}
585	    );
586	} else {
587	    waitDialog.dialog("close");
588	    error("Authorization failure. Please try again. If this problem persists, logout of Facebook and try again.");
589	}
590    }, 
591	     {scope: 'publish_actions'});
592
593}
594
595function check_permissions(success, error) {
596    FB.api("/me/permissions", function(perm_response) {
597	if(perm_response && perm_response.data && perm_response.data.length) {
598	    var permissions = {};
599            var data = perm_response.data;
600            for(var k=0; k<data.length; k++) {
601               if(data[k]["status"] == "granted") {
602                 permissions[data[k]["permission"]] = true;
603               }
604            }
605	    success(permissions);
606	} else {
607	    error("Error getting Facebook permission status.");
608	}
609    });
610}
611
612
613  window.fbAsyncInit = function() {
614    FB.init({
615	appId      : '', // App ID
616	xfbml      : false,
617        status     : true,
618        cookie     : true,
619        version    : 'v2.3'
620    });
621
622    FB.getLoginStatus(function(response) {
623	if (response.status === 'connected') {
624	    // if the user is logged in and the app is autherized, then 
625	    // logout now.
626	    FB.logout(function(response) {});
627	}
628    });
629};
630
631(function(d, s, id){
632         var js, fjs = d.getElementsByTagName(s)[0];
633         if (d.getElementById(id)) {return;}
634         js = d.createElement(s); js.id = id;
635         js.src = "//connect.facebook.net/en_US/sdk.js";
636         fjs.parentNode.insertBefore(js, fjs);
637       }(document, 'script', 'facebook-jssdk'));
638
639</script>
639
640
641
642
643
644
645
646
647
648
649<div id="cart_footer">
650  <a class="privacy" href="https://www.brooksee.com/cart?action=empty_cart">Empty Shopping Cart</a>  |
651  <a class="privacy" href="https://www.brooksee.com/privacy">Privacy Policy</a> | 
652  <a class="privacy" href="https://www.brooksee.com/terms">Terms of Use</a> | BEE-BF8WUPBDW44H4
653</div>
654
655
656<script>
657  <!-- Event snippet for Purchase conversion page -->
658
659  fbq('track', 'BEEAddToCart');
660</script>
660
661
662      </div>
663    </div>
664  </div>
665</div>
666
667
668
669
670      </div>
671      <div id="footer" style="margin: 0px">
672
673
674<div class="row">
675  <div class="row_content">
676    <div class="row_inner">
677      <div class="col" id="announcement_list" style="width: auto;">
678      <img src="https://brookseeevents.s3.amazonaws.com/bee/2023/albums/BrookseeWhite_web.png" alt="Brooksee" />
679        <p id="announcement">Join the announcement list:</p>
680        <form id="subscribe" method="get" action="https://www.brooksee.com/subscribe2">
681          <input type="text" name="email" placeholder="Email Address"><br>
682          <input type="hidden" name="list_name" value="announcement">
683          <select name="which">
684            <option value="rev">REVEL Events</option>
685            <option value="pdx">Portland Marathon</option>
686            <option value="mes">Mesa Marathon</option>
687            <option value="lvm">Las Vegas Marathon</option>
688          </select>
689          <button class="button" style="float: none !important;">Submit</button>
690        </form>
691      </div>
692      <div class="col">
693      <div class="col bottom_nav" style="margin-top: 0px">
694        <ul class="nav_footer">
695          <li><a href="https://www.brooksee.com/jobs">Jobs</a></li>
696          <li><a href="https://www.brooksee.com/help">Contact Us </a></li>
697        </ul>
698      </div>
699      <div class="col bottom_nav" style="margin-top: 0px">
700        <ul class="nav_footer">
701          <li><a href="https://portlandmarathon.com">Portland Marathon</a></li>
702          <li><a href="https://mesamarathon.com">Mesa Marathon</a></li>
703          <li><a href="https://phxmarathon.com">Phoenix Marathon</a></li>
704          <li><a href="https://vegasmarathon.com">Las Vegas Marathon</a></li>
705          <li><a href="https://www.runrevel.com">REVEL Race Series</a></li>
706          <li><a href="https://timing.brooksee.com">Laurel Timing</a></li>
707          <!--<li><a href="https://www.brooksee.com/tst">Twenty Six Two Coaching</a></li>-->
708          <!--<li><a href="/stf/register">Staff Marathon</a></li>-->
709        </ul>
710      </div>
711      <div class="col bottom_nav" style="margin-top: 0px">
712        <ul class="nav_footer">
713          <li><a href="https://www.brooksee.com/terms">Terms of use</a></li>
714          <li><a href="https://www.brooksee.com/privacy">Privacy Policy</a></li>
715        </ul>
716      </div>
717      </div>
718      <p id="copyright" style="text-align: left">&copy; Brooksee 2026</p>
719    </div>
720  </div>
721</div>
722
723	
724      </div>
725    </div>
726    <div id='slideout'>
727      <div class="menu-list-container"> 
728          <ul class='menu'>
729             <a href="/">
730                <li>
731                    <img src="https://brookseeevents.s3.amazonaws.com/bee/2023/albums/favicon_web.png" style="height: 30px; width: 30px;" />
732                    <p>Home</p>
733                </li>
734            </a>
735            <a href="/blog">
736                <li>
737                    <svg xmlns="http://www.w3.org/2000/svg" width="30" height="21" viewBox="0 0 24 24" fill="none" stroke="#0B1D46" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V8l-6-6z"/><path d="M14 3v5h5M16 13H8M16 17H8M10 9H8"/></svg>
738                    <p>News</p>
739                </li>
740            </a>
741            <a href="/jobs">
742                <li>
743                   <svg xmlns="http://www.w3.org/2000/svg" width="30" height="20" viewBox="0 0 24 24" fill="none" stroke="#0b1d46" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
744                   <p>Jobs</p>
745                </li>
746            </a>
747            <a href="/training/coaching">
748                <li>
749                    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" width="30" height="40" viewBox="0 0 2048 2048"> <defs>  <style type="text/css">   <![CDATA[    .fil1 {fill:none}    .fil0 {fill:#0B1d46;fill-rule:nonzero}   ]]>  </style> </defs> <g id="Layer_x0020_1">  <metadata id="CorelCorpID_0Corel-Layer"/>  <polygon class="fil0" points="282.946,1542.13 282.278,1540.11 282.707,1541.41 "/>
749  <path class="fil0" d="M397.732 1022.44c-0.478347,0.214961 -0.957875,0.414567 -1.44331,0.6l3.90237 1.70079c-0.516142,-0.392126 -1.41614,-1.25197 -2.45906,-2.30079z"/>  <path class="fil0" d="M370.259 975.209l185.971 -136.237c20.628,-15.1299 43.2355,-23.8347 66.2847,-23.2961 22.148,0.516142 43.4965,9.15473 62.4981,28.1563l137.707 137.707 168.702 -33.7406c31.0937,-6.19252 54.6626,7.28623 68.0623,27.8776 4.97481,7.64646 8.39292,16.1315 10.115,24.7772 1.72205,8.64449 1.82008,17.778 0.159449,26.7225 -4.48819,24.1748 -21.0969,45.6744 -52.1894,51.8693l-202.728 40.5449 -0.0165354 -0.0838583c-6.12638,1.06654 -20.8937,-0.131102 -33.3012,-3.71221 -8.62796,-2.4874 -17.5051,-6.13819 -24.202,-11.028 -1.38425,-0.947245 -2.7,-2.03386 -3.92835,-3.26221l0.0555119 -0.056693 -3.17599 -3.17481c-0.529134,-0.453544 -1.04528,-0.933072 -1.54606,-1.43386l0.00236221 -0.00236221 -35.4603 -35.4603 14.7638 169.034 0.433465 0.291733c1.05709,0.659056 2.08229,1.39725 3.06614,2.21693l-0.0744095 0.0897638 166.719 138.86c4.66418,1.91221 8.91969,5.16969 12.7831,9.49843 2.53583,2.84173 5.04331,6.49607 7.33111,10.3748 3.42048,5.79685 6.85867,13.4327 8.99646,19.2957 0.783071,1.68662 1.40669,3.47835 1.84488,5.35985l-0.124016 0.0295276 0.0011811 0.00354331 0.0885827 -0.0212599 65.0056 278.91c4.18583,17.9669 0.68504,35.9386 -8.35512,50.4674 -8.70709,13.9984 -22.5567,24.7949 -39.6201,29.3079 -1.24843,0.388583 -2.53465,0.692127 -3.85158,0.900001 -17.3303,3.52323 -34.5567,-0.0401575 -48.5776,-8.76497 -13.9961,-8.70709 -24.7914,-22.552 -29.3067,-39.6142 -0.298819,-0.956694 -0.544489,-1.93583 -0.73819,-2.93504l-70.4871 -252.601 -129.623 -89.9906 -29.5477 134.979c-0.133465,0.759449 -0.298819,1.52008 -0.498426,2.27953l-0.0614174 -0.0165354c-3.21614,12.1878 -9.61064,22.7043 -18.0567,30.8941 -8.17087,7.92284 -18.2575,13.6665 -29.2394,16.637 -0.348425,0.112205 -0.698032,0.220866 -1.05354,0.32126l-0.011811 -0.0437008 -0.329528 0.0826772 -267.968 75.3816c-0.657875,0.233858 -1.32992,0.442914 -2.01024,0.625985 -16.9949,5.20512 -34.6087,3.22559 -49.4953,-4.26378 -14.8193,-7.45512 -26.8736,-20.3847 -32.8536,-37.1126 -0.377953,-0.954331 -0.703938,-1.93347 -0.97441,-2.9374 -5.20867,-16.9984 -3.23032,-34.6193 4.26142,-49.5095 7.48229,-14.8689 20.4744,-26.9587 37.2886,-32.9138 0.414567,-0.16063 0.836221,-0.312992 1.2626,-0.454725l0.00590552 0.0188977 0.0874016 -0.0295276 0.0318898 0.0968505 221.789 -73.8662 27.554 -136.553c-1.19291,-3.2811 -2.20512,-6.67087 -3.02362,-10.1551 -1.55906,-6.63189 -2.38465,-13.4551 -2.38465,-20.3681l0.00236221 0c0,-0.307087 0.00354331,-0.616536 0.0141732,-0.927166l0.0933072 0.00354331 8.36812 -248.162 -48.8233 35.765 7.61339 171.956c1.36536,31.6784 -15.4843,52.8745 -37.7847,62.9221 -8.13544,3.66378 -17.0492,5.70591 -26.0327,6.09331 -8.91733,0.383859 -17.954,-0.889371 -26.4012,-3.84922 -23.1166,-8.10355 -41.7555,-27.7677 -43.1197,-59.4154l-9.05316 -204.474 1.6748 -0.0720473c-0.552756,-9.79253 1.08543,-21.815 5.50748,-31.9961 3.80079,-8.74843 9.17835,-17.8087 15.9803,-24.4347 1.15866,-1.24016 2.44725,-2.39292 3.86693,-3.43229l0.0366142 0.0507874z"/>  <path class="fil0" d="M692.869 656.258c-11.0315,-11.0315 -26.2795,-17.8571 -43.1209,-17.8571 -16.8414,0 -32.0882,6.82441 -43.1209,17.8571 -11.0327,11.0327 -17.8571,26.2795 -17.8571,43.1209 0,16.8414 6.8256,32.0882 17.8571,43.1197 11.0327,11.0327 26.2795,17.8583 43.1209,17.8583 16.8414,0 32.0894,-6.8256 43.1209,-17.8571 11.0327,-11.0327 17.8583,-26.2795 17.8583,-43.1209 0,-16.8414 -6.8256,-32.0882 -17.8583,-43.1209z"/>  <path class="fil0" d="M649.749 598.252c27.9213,0 53.2052,11.3209 71.5052,29.6209 18.3012,18.3012 29.6221,43.5839 29.6221,71.5052 0,27.9213 -11.3209,53.204 -29.6221,71.5052 -18.3,18.3 -43.5839,29.6209 -71.5052,29.6209 -27.9213,0 -53.204,-11.3209 -71.5052,-29.6221 -18.3,-18.3 -29.6209,-43.5827 -29.6209,-71.504 0,-27.9213 11.3209,-53.204 29.6209,-71.5052 18.3012,-18.3 43.5839,-29.6209 71.5052,-29.6209z"/>  <polygon class="fil0" points="989.198,1187.23 988.529,1185.21 988.958,1186.51 "/>  <path class="fil0" d="M1103.98 667.537c-0.477166,0.214961 -0.959056,0.414567 -1.44331,0.6l3.90118 1.70079c-0.517323,-0.392126 -1.41614,-1.25197 -2.45788,-2.30079z"/>  <path class="fil0" d="M1076.51 620.308l185.971 -136.237c20.628,-15.1299 43.2355,-23.8347 66.2847,-23.2961 22.148,0.516142 43.4965,9.15473 62.4981,28.1563l137.707 137.707 168.702 -33.7406c31.0949,-6.19252 54.6638,7.28741 68.0623,27.8776 4.97481,7.64646 8.39292,16.1315 10.115,24.7772 1.72205,8.64449 1.82008,17.778 0.159449,26.7225 -4.48819,24.1748 -21.0969,45.6744 -52.1894,51.8693l-202.728 40.5449 -0.0165354 -0.0838583c-6.12638,1.06536 -20.8937,-0.131102 -33.3012,-3.71221 -8.62796,-2.4874 -17.5051,-6.13819 -24.202,-11.028 -1.38425,-0.947245 -2.7,-2.03386 -3.92835,-3.26221l0.0555119 -0.056693 -3.17599 -3.17481c-0.529134,-0.453544 -1.04528,-0.933072 -1.54606,-1.43386l0.00236221 -0.00236221 -35.4603 -35.4603 14.7638 169.034 0.433465 0.291733c1.05709,0.659056 2.08229,1.39725 3.06614,2.21693l-0.0744095 0.0897638 166.715 138.856c4.66536,1.91221 8.92205,5.17087 12.7866,9.50198 2.53583,2.84292 5.04331,6.49607 7.33111,10.3748 3.42048,5.79685 6.85867,13.4327 8.99646,19.2957 0.783071,1.68662 1.40669,3.47835 1.84488,5.35985l-0.124016 0.0295276 0.0011811 0.00354331 0.0885827 -0.
7490212599 65.0056 278.91c4.18583,17.9669 0.68504,35.9386 -8.35512,50.4674 -8.70709,13.9973 -22.5567,24.7949 -39.6201,29.3079 -1.24725,0.388583 -2.53347,0.690945 -3.8504,0.89882 -17.3291,3.52205 -34.5579,-0.0389764 -48.5788,-8.76379 -13.9949,-8.70591 -24.7914,-22.552 -29.3067,-39.6142 -0.298819,-0.956694 -0.544489,-1.93583 -0.73819,-2.93504l-70.4871 -252.601 -129.623 -89.9906 -29.5477 134.979c-0.133465,0.759449 -0.298819,1.52008 -0.498426,2.27953l-0.0614174 -0.0165354c-3.21614,12.1878 -9.60946,22.7032 -18.0567,30.8941 -8.17087,7.92284 -18.2575,13.6665 -29.2394,16.637 -0.348425,0.112205 -0.698032,0.220866 -1.05354,0.32126l-0.011811 -0.0437008 -0.329528 0.0826772 -267.968 75.3816c-0.657875,0.233858 -1.32992,0.442914 -2.01024,0.625985 -16.9949,5.20512 -34.6087,3.22559 -49.4953,-4.26378 -14.8193,-7.45512 -26.8736,-20.3847 -32.8536,-37.1126 -0.377953,-0.954331 -0.703938,-1.93347 -0.97441,-2.9374 -5.20867,-16.9984 -3.23032,-34.6193 4.26142,-49.5095 7.48229,-14.8689 20.4744,-26.9587 37.2886,-32.9138 0.414567,-0.16063 0.836221,-0.312992 1.2626,-0.454725l0.00590552 0.0188977 0.0874016 -0.0295276 0.0318898 0.0968505 221.789 -73.8662 27.554 -136.553c-1.19291,-3.2811 -2.20512,-6.67087 -3.02362,-10.1551 -1.55906,-6.63189 -2.38465,-13.4551 -2.38465,-20.3681l0.00236221 0c0,-0.307087 0.00354331,-0.616536 0.0141732,-0.927166l0.0933072 0.00354331 8.36812 -248.162 -48.8233 35.765 7.61339 171.956c1.36536,31.6772 -15.4843,52.8745 -37.7847,62.9221 -8.13544,3.66378 -17.0492,5.70591 -26.0327,6.09331 -8.91615,0.383859 -17.954,-0.889371 -26.4012,-3.84922 -23.1166,-8.10355 -41.7555,-27.7677 -43.1197,-59.4154l-9.05316 -204.474 1.6748 -0.0720473c-0.552756,-9.79253 1.08543,-21.815 5.50748,-31.9961 3.80079,-8.74843 9.17835,-17.8087 15.9803,-24.4347 1.15866,-1.24016 2.44725,-2.39292 3.86693,-3.43229l0.0366142 0.0507874z"/>  <path class="fil0" d="M1399.12 301.357c-11.0315,-11.0315 -26.2795,-17.8571 -43.1209,-17.8571 -16.8414,0 -32.0882,6.8256 -43.1197,17.8571 -11.0327,11.0327 -17.8583,26.2795 -17.8583,43.1209 0,16.8414 6.8256,32.0882 17.8583,43.1197 11.0315,11.0327 26.2784,17.8583 43.1197,17.8583 16.8414,0 32.0894,-6.8256 43.1209,-17.8571 11.0327,-11.0327 17.8583,-26.2795 17.8583,-43.1209 0,-16.8414 -6.8256,-32.0882 -17.8583,-43.1209z"/>  <path class="fil0" d="M1356 243.352c27.9213,0 53.2052,11.3209 71.5052,29.6209 18.3012,18.3012 29.6221,43.5839 29.6221,71.5052 0,27.9213 -11.3209,53.204 -29.6221,71.5052 -18.3,18.3 -43.5839,29.6209 -71.5052,29.6209 -27.9225,0 -53.204,-11.3209 -71.504,-29.6221 -18.3012,-18.3 -29.6221,-43.5815 -29.6221,-71.504 0,-27.9213 11.3209,-53.204 29.6221,-71.5052 18.3,-18.3 43.5827,-29.6209 71.504,-29.6209z"/> </g> <rect class="fil1" width="2048" height="2048"/></svg>
750                    <p>Coaching</p>
751                </li>
752            </a>
753            <a href="/help">
754                <li>
755                   <svg xmlns="http://www.w3.org/2000/svg" width="30" height="20" viewBox="0 0 24 24" fill="none" stroke="#0b1d46" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
756                   <p>Contact Us</p>
757                </li>
758            </a>
759           
760          </ul>
761      </div>
762      <div style='color: white'>
763        <a style='color: white; text-decoration: none' href="/cart">        
764            <div class="cart-container">
765                <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="10" cy="20.5" r="1"/><circle cx="18" cy="20.5" r="1"/><path d="M2.5 2.5h3l2.7 12.4a2 2 0 0 0 2 1.6h7.7a2 2 0 0 0 2-1.6l1.6-8.4H7.1"/></svg>
766                <!--<img src="/files/shop/imgs/cart.png" alt='Shopping Cart' /> -->
767                <p>My Cart</p>
768            </div>
769        </a>
770        
771        <div class="authenticated-user">
772            
773            	<div class="login-container">
774            	    <a style="color: white; text-decoration: none; display: flex; align-items: center" 
775            	        href="https://www.brooksee.com/accounts/login?next=/cart"
776            	    >
777                	    <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5.52 19c.64-2.2 1.84-3 3.22-3h6.52c1.38 0 2.58.8 3.22 3"/><circle cx="12" cy="10" r="3"/><circle cx="12" cy="12" r="10"/></svg>
778                	    <p style="margin: 0; padding-left: 10px; ">
779                	        Login
780                	    </p>
781            	    </a>
782            	</div>
783            
784        </div>
785    </div>
786</div>
787
788
789    
789<script>
790let isMenuOpen = false; 
791
792document.addEventListener("DOMContentLoaded", function() {
793    // Set up the "click outside" functionality after the DOM is loaded
794    document.addEventListener("click", closeMenuOnClickOutside);
795    
796    // Check if the masterReady function is defined and execute it
797    if (typeof masterReady == 'function') {
798        masterReady();
799    }
800    
801    // Set up the hamburger button click event
802    $("#hamb").click(function() {
803        toggleMenu();
804    });
805});
806
807function closeMenuOnClickOutside(event) {
808    const slideout = document.querySelector("#slideout");
809    const hamburger = document.querySelector("#hamb");
810
811    // Check if the click is outside of the slideout menu or hamburger button
812    if (!slideout.contains(event.target) && !hamburger.contains(event.target)) {
813        if (isMenuOpen) {
814            toggleMenu(); // Close the menu if it's open
815        }
816    }
817}
818
819function toggleMenu() {
820    if (isMenuOpen) {
821        $("#slideout").css('z-index', 0).css('top', '-100%'); // Close the menu
822    } else {
823        // If the menu is closed, slide it in (show)
824        $("#slideout").css('display', 'block').css('top', '62px');
825    }
826    isMenuOpen = !isMenuOpen; // Toggle the state
827    $("#hamb").toggleClass('close', isMenuOpen); // Update hamburger button
828}
829      
830      
831      
832      
833      $(".question_mark").tooltip(
834	{tooltipClass: "tooltip",
835	 content: function() { return $(this).prop('title'); }
836        });
837      if(typeof nav3_init == 'function') {
838       nav3_init();
839      }
840      $(".quotes").each(function(idx) {
841    var nav  = $(this).find(".nav");
842    var prev = nav.find(".prev");
843    var next = nav.find(".next");
844    var quotes = $(this).find("ul").children();
845    var count = quotes.length;
846    var pos = Math.floor(Math.random() * count);
847    if(count < 2) {
848	nav.hide();
849    } else {
850	for (var j=0; j<count; j++) {
851	    if(j==pos) { 
852		$(quotes[j]).css('display', 'list-item');
853	    } else {
854		$(quotes[j]).css('display', 'none');
855	    }
856	}
857	prev.click(function() { 
858	    $(quotes[pos]).css('display', 'none');
859	    pos = pos - 1;
860	    if(pos < 0) {
861		pos = count - 1;
862	    }
863	    $(quotes[pos]).css('display', 'list-item');
864	});
865	next.click(function() { 
866	    $(quotes[pos]).css('display', 'none');
867	    pos = pos + 1;
868	    if (pos >= count ) {
869		pos = 0;
870	    }
871	    $(quotes[pos]).css('display', 'list-item');
872	});
873    }
874});
875
876
877      (function() {
878    if (document.getElementById('ui_toast_styles')) { return; }
879    var style = document.createElement('style');
880    style.id = 'ui_toast_styles';
881    style.textContent =
882        '.ui_toast_stack { position:fixed; right:16px; bottom:16px; z-index:9500;' +
883        '  display:flex; flex-direction:column-reverse; gap:8px; }' +
884        '.ui_toast { min-width:220px; max-width:360px; padding:10px 14px; border-radius:8px;' +
885        '  background:#1f2937; color:#fff; font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;' +
886        '  font-size:13px; box-shadow:0 8px 20px rgba(0,0,0,.25); opacity:0; transform:translateY(6px);' +
887        '  transition:opacity .15s ease, transform .15s ease; }' +
888        '.ui_toast.ui_toast_in { opacity:1; transform:translateY(0); }' +
889        '.ui_toast_title { font-weight:700; margin-bottom:2px; }' +
890        '.ui_toast_error { background:#991b1b; }';
891    document.head.appendChild(style);
892})();
893
894function ui_toast(title, msg, type) {
895    var stack = document.querySelector('.ui_toast_stack');
896    if (!stack) {
897        stack = document.createElement('div');
898        stack.className = 'ui_toast_stack';
899        document.body.appendChild(stack);
900    }
901    var toast = document.createElement('div');
902    toast.className = 'ui_toast' + (type === 'error' ? ' ui_toast_error' : '');
903    toast.innerHTML = (title ? '<div class="ui_toast_title"></div>' : '') + '<div class="ui_toast_msg"></div>';
904    if (title) { toast.querySelector('.ui_toast_title').textContent = title; }
905    toast.querySelector('.ui_toast_msg').textContent = msg;
906    stack.appendChild(toast);
907    requestAnimationFrame(function() { toast.classList.add('ui_toast_in'); });
908    setTimeout(function() {
909        toast.classList.remove('ui_toast_in');
910        setTimeout(function() { toast.remove(); }, 200);
911    }, 3000);
912}
913
914(function() {
915    if (document.getElementById('ui_modal_styles')) { return; }
916    var style = document.createElement('style');
917    style.id = 'ui_modal_styles';
918    style.textContent =
919        '.ui_modal_overlay { position:fixed; inset:0; background:rgba(15,23,42,.5); }' +
920        '.ui_modal { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%);' +
921        '  min-width:320px; max-width:520px; background:#fff; border-radius:10px;' +
922        '  box-shadow:0 20px 40px rgba(0,0,0,.25); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif; }' +
923        '.ui_modal_titlebar { display:flex; align-items:center; justify-content:space-between;' +
924        '  padding:14px 16px; border-bottom:1px solid #e5e7eb; font-weight:700; font-size:15px;
924 color:#1f2937; }' +
925        '.ui_modal_close { border:0 !important; outline:0 !important; appearance:none !important;' +
926        '  -webkit-appearance:none !important; background:none !important; box-shadow:none !important;' +
927        '  font-size:26px !important; line-height:1 !important; padding:0 4px !important; margin:0 !important;' +
928        '  cursor:pointer; color:#9ca3af; }' +
929        '.ui_modal_close:hover { color:#4b5563 !important; background:none !important; }' +
930        '.ui_modal_body { padding:16px; font-size:14px; color:#374151; max-height:60vh; overflow-y:auto; }' +
931        '.ui_modal_body input[type=text], .ui_modal_body textarea {' +
932        '  box-sizing:border-box; width:100%; margin-top:8px; padding:7px 9px; border:1px solid #d1d5db;' +
933        '  border-radius:6px; font-size:14px; font-family:inherit; }' +
934        '.ui_modal_body textarea { min-height:70px; }' +
935        '.ui_modal_buttons { display:flex; justify-content:flex-end; gap:8px; padding:12px 16px; border-top:1px solid #e5e7eb; }' +
936        '.ui_modal_buttons button { border:1px solid #d1d5db; border-radius:6px; padding:8px 18px; background:#fff;' +
937        '  color:#1f2937; font-size:13px; font-weight:600; cursor:pointer; }' +
938        '.ui_modal_buttons button:hover { background:#f3f4f6; }';
939    document.head.appendChild(style);
940})();
941
942var _ui_modal_z = 9600;
943
944/* Shared engine behind ui_alert/ui_blocking_msg/ui_confirm/ui_prompt/ui_comment
945   -- vanilla JS/CSS, no jQuery UI. opts:
946     title, bodyHtml           -- same as each function's own args
947     buttons: [{label, cb}]    -- rendered left-to-right; clicking always
948                                  closes first, then calls cb (cb is optional
949                                  -- omit it for a plain Cancel/close button)
950     showClose (default true)  -- title-bar X icon
951     closeOnEscape (default true)
952     enterButton: index        -- Enter key clicks this button (unset = no
953                                  Enter binding, e.g. ui_comment's textarea)
954     onOpen(body)               -- called with the body element once it's in
955                                  the DOM, for callers that need to add their
956                                  own controls (ui_prompt's input, etc.)
957   Returns a jQuery-wrapped element with a .dialog('close') shim, since
958   several existing call sites hold onto the return value and close it
959   themselves later -- see git history for which ones. */
960function _ui_modal_open(opts) {
961    _ui_modal_z += 2;
962    var overlay = document.createElement('div');
963    overlay.className = 'ui_modal_overlay';
964    overlay.style.zIndex = _ui_modal_z;
965
966    var box = document.createElement('div');
967    box.className = 'ui_modal';
968    box.style.zIndex = _ui_modal_z + 1;
969
970    function close() {
971        overlay.remove();
972        box.remove();
973        $(document).off(keyNs);
974    }
975
976    var titlebar = document.createElement('div');
977    titlebar.className = 'ui_modal_titlebar';
978    var titleSpan = document.createElement('span');
979    titleSpan.textContent = opts.title || '';
980    titlebar.appendChild(titleSpan);
981    if (opts.showClose !== false) {
982        var closeBtn = document.createElement('button');
983        closeBtn.type = 'button';
984        closeBtn.className = 'ui_modal_close';
985        closeBtn.innerHTML = '&times;';
986        closeBtn.onclick = close;
987        titlebar.appendChild(closeBtn);
988    }
989
990    var body = document.createElement('div');
991    body.className = 'ui_modal_body';
992    body.innerHTML = opts.bodyHtml || '';
993
994    box.appendChild(titlebar);
995    box.appendChild(body);
996
997    var buttonEls = [];
998    if (opts.buttons && opts.buttons.length) {
999        var pane = document.createElement('div');
1000        pane.className = 'ui_modal_buttons';
1001        opts.buttons.forEach(function(b) {
1002            var btn = document.createElement('button');
1003            btn.type = 'button';
1004            btn.textContent = b.label;
1005            btn.onclick = function() {
1006                close();
1007                if (b.cb) { b.cb(); }
1008            };
1009            pane.appendChild(btn);
1010            buttonEls.push(btn);
1011        });
1012        box.appendChild(pane);
1013    }
1014
1015    var keyNs = 'keydown.ui_modal_' + _ui_modal_z;
1016    $(document).on(keyNs, function(e) {
1017        if (e.key === 'Escape' && opts.closeOnEscape !== false) {
1018            close();
1019        } else if (e.key === 'Enter' && opts.enterButton !== undefined && buttonEls[opts.enterButton]) {
1020            buttonEls[opts.enterButton].click();
1021        }
1022    });
1023
1024    document.body.appendChild(overlay);
1025    document.body.appendChild(box);
1026    if (opts.onOpen) { opts.onOpen(body); }
1027
1028    var $box = $(box);
1029    $box.dialog = function(action) { if (action === 'close') { close(); } };
1030    return $box;
1031}
1032
1033function ui_alert(title, msg, done_cb) {
1034    return _ui_modal_open({
1035        title: title,
1036        bodyHtml: msg,
1037        buttons: [{ label: "Ok", cb: done_cb }]
1038    });
1039}
1040
1041function ui_blocking_msg(title, msg) {
1042    return _ui_modal_open({
1043        title: title,
1044        bodyHtml: msg,
1045        showClose: false,
1046        closeOnEscape: false
1047    });
1048}
1049
1050function ui_confirm(title, msg, yes_cb, no_cb, yes_text, no_text) {
1051    return _ui_modal_open({
1052        title: title,
1053        bodyHtml: msg,
1054        buttons: [
1055            { label: yes_text || "Yes", cb: yes_cb },
1056            { label: no_text || "No", cb: no_cb }
1057        ],
1058        enterButton: 0
1059    });
1060}
1061
1062function ui_prompt(title, msg, done_cb, defaultText) {
1063    var defval = (defaultText != null) ? defaultText : "";
1064    var input;
1065    return _ui_modal_open({
1066        title: title,
1067        bodyHtml: msg + "<br>",
1068        onOpen: function(body) {
1069            input = document.createElement('input');
1070            input.type = 'text';
1071            input.className = 'nice input-text';
1072            input.value = defval;
1073            body.appendChild(input);
1074            input.focus();
1075        },
1076        buttons: [
1077            { label: "Cancel" },
1078            { label: "Ok", cb: function() { done_cb(input.value); } }
1079        ],
1080        enterButton: 1
1081    });
1082}
1083
1084function ui_comment(title, msg, done_cb, defaultText) {
1085    var defval = (defaultText != null) ? defaultText : "";
1086    var textarea;
1087    return _ui_modal_open({
1088        title: title,
1089        bodyHtml: msg + "<br>",
1090        onOpen: function(body) {
1091            body.classList.add('ui_comment_box');
1092            textarea = document.createElement('textarea');
1093            textarea.value = defval;
1094            body.appendChild(textarea);
1095        },
1096        buttons: [
1097            { label: "Cancel" },
1098            { label: "Ok", cb: function() { done_cb(textarea.value); } }
1099        ]
1100    });
1101}
1102
1103var _requests = [];
1104var _abortAllRequests = function() {
1105    $(_requests).each(function(i, xhr) { 
1106	console.log("aborting..." + xhr.abort()); 
1107    });
1108}
1109
1110$(window).on("beforeunload", function() {
1111  _abortAllRequests();
1112});
1113
1114var _rpc_server = "" // blank to use relative path for rpc_server
1115function rpc(mod, funcName, args, success, error, type, ajax_args) {
1116    var xhr;
1117    $("body").css("cursor", "progress");
1118    function mySuccess(data, textStatus, jqXHR) {
1119        _requests.pop(xhr);
1120	$("body").css("cursor", "default");
1121	if(data["status"] == "OK") {
1122	    $("body").css("cursor", "default");
1123	    success(data["result"], textStatus, jqXHR);
1124	} else {
1125	    $("body").css("cursor", "default");
1126	    error(jqXHR, data["status"], data["result"]);
1127	}
1128    }
1129    function myError(a0, a1, a2) {
1130        if(a2=="abort") { return; }
1131        _requests.pop(xhr);
1132	$("body").css("cursor", "default");
1133	error(a0, a1, a2);
1134    }
1135    if(!type)
1136	type="POST";
1137    var settings = {
1138	url      : _rpc_server + "/func/" + mod + "/" + funcName,
1139	type     : type,
1140	data     : { '__json__': JSON.stringify(args)},
1141	dataType : "json",
1142	success  : mySuccess,
1143	error    : myError
1144    };
1145    $.extend(settings, ajax_args);
1146    xhr = $.ajax(settings);
1147    _requests.push(xhr);
1148}
1149
1150function rpc_file(mod, funcName, args, file_obj, success, error, type, ajax_args) {
1151    let reader = new FileReader();
1152    reader.onloadend = function(evt) {
1153	args["data"] = reader.result
1154	rpc(mod, funcName, args, success, error, type, ajax_args)
1155    }
1156    reader.readAsBinaryString(file_obj)
1157}
1158
1159/*
1160var _rpc2_server = "https://rpc.brooksee.com" // blank to use relative path for rpc_server
1161async function rpc2(mod, view, func, args, msg, context, options) {
1162    // cant share session with existing server, so will need to login again
1163    let _context = {}
1164    if(context !== undefined) {
1165        Object.assign(_context, context)
1166    }
1167
1168    let body = {
1169        args: args,
1170        context: _context
1171    }
1172    let loading
1173    if(msg !== "__bg__") {
1174	loading = ui_blocking_msg("", msg);
1175    }
1176    let url = _rpc2_server + "/rest/" + mod + "/" + view + "/" + func
1177    console.log('rpc(' + url + ', ' + JSON.stringify(body) + ')')
1178    try {
1179	let response = await fetch(url, {
1180	    method: 'POST',
1181	    //mode: "no-cors",
1182	    body:JSON.stringify(body),
1183	})
1184	console.log(response)
1185	data = await response.json()
1186	console.log(data)
1187	if (data.status === 'OK') {
1188	    return data.result
1189	} else {
1190	    throw(data)
1191	}
1192    } finally {
1193	if(loading !== undefined) {
1194	    loading.dialog("close")
1195	}
1196    }
1197}
1198*/
1199
1200let _rpc3_server = "https://rpc.brooksee.com" // blank to use relative path for rpc_server
1201async function rpc3(mod, view, func, args) {
1202    // Base rpc call that does not handle any errors but
1203    // throws errors any error as an exception so that the
1204    // caller can handle it and decide what do with the error.
1205    // Does not display any indication of busy or progress.
1206    let url = _rpc3_server + "/rest/" + mod + "/" + view + "/" + func
1207    let body = {
1208	args: args,
1209	context: {},
1210    }
1211    console.log('rpc(' + url + ', ' + JSON.stringify(body) + ')')
1212    let response = await fetch(url, {
1213        method: "POST",
1214        headers: { "X-Pickle-Session": "pcwi92rwyx9wxvm8hgyuziivqlk4izsv" },
1215        body: JSON.stringify(body),
1216    })
1217    console.log(response)
1218    if(response.ok) {
1219        let data = await response.json()
1220        console.log(data)
1221        if(data.status === "ERROR") {
1222            console.log("err:",data.result)
1223            throw(data.result)
1224        } else if(data.status === "OK") {
1225            return data.result
1226        } else {
1227            throw("Unknown Response")
1228        }
1229    } else {
1230        throw("Error: " + response.status)
1231    }
1232}
1233
1234      $(".vimeo_colorbox,.vimeo").colorbox({iframe:true, width:"95%", height:"95%", reposition: true});
1235
1236    </script>
1236
1237
1238    
1238<script type="text/javascript">
1239      var _gaq = _gaq || [];
1240      _gaq.push(['_setAccount', 'G-L9EFPF17EV']);
1241      _gaq.push(['_trackPageview']);
1242      
1243      (function() {
1244      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
1245      ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
1246      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
1247      })();
1248    </script>
1248
1249    
1250  </body>
1251</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.