PageSourceSearch

https://www.coleschophouse.com/assets/js/main.js?8tqwkk8a

js coleschophouse.com collected 2026-09-26 08:47:42 UTC 30,933 bytes, 874 lines download raw bytes

1// MooTool fix for IE
2if (!Array.from) {
3  Array.from = (function () {
4    var toStr = Object.prototype.toString;
5    var isCallable = function (fn) {
6      return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
7    };
8    var toInteger = function (value) {
9      var number = Number(value);
10      if (isNaN(number)) { return 0; }
11      if (number === 0 || !isFinite(number)) { return number; }
12      return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
13    };
14    var maxSafeInteger = Math.pow(2, 53) - 1;
15    var toLength = function (value) {
16      var len = toInteger(value);
17      return Math.min(Math.max(len, 0), maxSafeInteger);
18    };
19
20    // The length property of the from method is 1.
21    return function from(arrayLike/*, mapFn, thisArg */) {
22      // 1. Let C be the this value.
23      var C = this;
24
25      // 2. Let items be ToObject(arrayLike).
26      var items = Object(arrayLike);
27
28      // 3. ReturnIfAbrupt(items).
29      if (arrayLike == null) {
30        throw new TypeError("Array.from requires an array-like object - not null or undefined");
31      }
32
33      // 4. If mapfn is undefined, then let mapping be false.
34      var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
35      var T;
36      if (typeof mapFn !== 'undefined') {
37        // 5. else
38        // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
39        if (!isCallable(mapFn)) {
40          throw new TypeError('Array.from: when provided, the second argument must be a function');
41        }
42
43        // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
44        if (arguments.length > 2) {
45          T = arguments[2];
46        }
47      }
48
49      // 10. Let lenValue be Get(items, "length").
50      // 11. Let len be ToLength(lenValue).
51      var len = toLength(items.length);
52
53      // 13. If IsConstructor(C) is true, then
54      // 13. a. Let A be the result of calling the [[Construct]] internal method of C with an argument list containing the single item len.
55      // 14. a. Else, Let A be ArrayCreate(len).
56      var A = isCallable(C) ? Object(new C(len)) : new Array(len);
57
58      // 16. Let k be 0.
59      var k = 0;
60      // 17. Repeat, while k < len� (also steps a - h)
61      var kValue;
62      while (k < len) {
63        kValue = items[k];
64        if (mapFn) {
65          A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
66        } else {
67          A[k] = kValue;
68        }
69        k += 1;
70      }
71      // 18. Let putStatus be Put(A, "length", len, true).
72      A.length = len;
73      // 20. Return A.
74      return A;
75    };
76  }());
77}
78
79
80var onRecaptchaLoad = function() {
81	jQuery('.g-recaptcha').each(function(index, captcha) {
82			grecaptcha.render(captcha, {
83					sitekey	: jQuery(captcha).data('sitekey'), 
84					theme	: 'dark'
85				});
86			jQuery(window).resize();
87		});
88};
89
90//======================= SlideShow =======================//
91function generateSlideshows() {
92	$$('.slideshow, .event-slideshow').each(function(el) {
93			if (!el.hasClass('initialized')) {
94
95				setTimeout(function() {
96						var options = {};
97						if (el.hasClass('inner-slideshow')) options.ar = 2.6; // The higher the value, the shorter the slideshow's height
98						if (slideshow_settings.delay) options.delay = slideshow_settings.delay * 1000;
98 // They're set as seconds in /cp/
99						if (slideshow_settings.duration) options.duration = slideshow_settings.duration * 1000; // They're set as seconds in /cp/
100						
101						if (location.hash == '#dev') options.delay = 20000;
102						
103						el.slideshow = SlideShow.init(el, options);
104						el.addClass('initialized');
105
106						jQuery(el).animate({
107								opacity: 1
108							});
109					}, (parseInt(jQuery(el).data('delay')) || 0));
110			}
111		});
112}
113document.addEvent('domready', function() {
114		Asset.javascript('/assets/js/lib/SlideShow.js', {
115				'onLoad': generateSlideshows
116			});
117		
118		//======================= Lightbox =======================//
119		Asset.javascript('/assets/js/lib/lightbox.js', {
120			'onLoad': function(e) {
121				LightBox.init();
122			}
123		});
124	});
125document.addEvent('newcontent', function() { LightBox.bind(); });
126
127//======================= Slidebox =======================//
128(function(){
129	var initSlideboxes = function(){
130		$$('.slidebox').each(function(el){
131			var slider = el.getElement('ul');
132			el.setStyle('width', null);
133			var maxw = jQuery(el).outerWidth();
134			slider.addClass('hidden');
135			var minw = jQuery(el).outerWidth();
136			el.setStyle('width', minw);
137			slider.removeClass('hidden');
138
139			var fx = new Fx.Tween(el, {
140				duration	: maxw*2.5,
141				property	: 'width',
142				link		: 'cancel'
143			});
144
145			el.removeEvents().addEvents({
146				mouseenter: function(){ fx.start(minw+slider.getWidth()).chain(function(){}); },
147				mouseleave: function(){ fx.start(minw).chain(function(){}); },
148			});
149
150			if(!el.hasClass('has-init')) {
151				el.addClass('has-init');
152			}
153		});
154	}
155	
156	document.addEvent('domready', function() {
157			setTimeout(initSlideboxes, 500);
158		});
159})();
160
161//======================= DBForm Handler =======================//
162window.DBForms = {};
163window.chkparseDbForms = function() {
164	$$('.dbform').each(function(el) {
165		if (el.hasClass('sync'))
166			return;
167
168		if (!el.retrieve('dbform')) {
169			var dbform = new DBForm(el);
170			window.DBForms[dbform.key] = dbform;
171			el.store('dbform', dbform);
172		}
173	});
174}
175
176document.addEvent('domready', function() {
177		//Asset.javascript('assets/js/legacy.js');
178		Asset.javascript('assets/js/forms.js?20191129', {
179				onLoad: window.chkparseDbForms
180			});
181		Asset.javascript('assets/js/postings.js');
182
183		// Load the main layout elements one at a time
184		var chain = new Chain();
185		chain.chain(
186			function() {
187				jQuery('#topmenu')[0].set('tween', { duration: '500', onComplete: function(){ chain.callChain(); }}).fade(1);
188			},
189			function() {
190				(jQuery('#home-slides').length ? jQuery('#home-slides') : jQuery('#top-header-slides'))[0].set('tween', { duration: '500', onComplete: function(){ chain.callChain(); }}).fade(1);
191			},
192			function() {
193				jQuery('#tag-lines')[0].set('tween', { duration: '500'}).fade(1);
194				jQuery('#reservations-bar-new > *')[0].set('tween', { duration: '500', onComplete: function(){ chain.callChain(); }}).fade(1);
195			},
196			function() {
197				(jQuery('#main-canvas .pagecontent').length ? jQuery('#main-canvas .pagecontent').first() : jQuery('#home-bottom-content'))[0].set('tween', { duration: '500', onComplete: function(){ chain.callChain(); }}).fade(1);
198			},
199			function() {
200				jQuery('#footer-map')[0].set('tween', { duration: '500', onComplete: function(){ chain.callChain(); }}).fade(1);
201			},
202			function() {
203				jQuery('#pagefooter')[0].set('tween', { duration: '500'}).fade(1);
204			}
205		).callChain();
206		
207		if (!jQuery('#home-slides').length && jQuery('#top-header-slides').length)
208			// We must be in an inner page, so let's load the inner slideshow container, too
209			jQuery('#top-header-slides')[0].set('tween', { duration: '500'}).fade(1);
210		
211		//jQuery('#opentable-container').replaceWith('<script src="//www.opentable.com/widget/reservation/loader?rid=785&domain=com&type=standard&theme=wide&lang=en-US&overlay=false&iframe=false&rand=' + Math.random() + '"></script>'); //assets/js/opentable.js
212		/* OpenTable inline widget disabled 2026-06-30 — see htmlfoot.phtml. The #opentable-frame iframe
213		   no longer exists, so this poll-and-lift-the-rendered-widget loop is off. Stopgap is the
214		   "Find a Table" button in pageheader.phtml. Restore both to re-enable.
215		var opentable_interval = setInterval(function() {
216				var iframeDocument = (jQuery('#opentable-frame')[0].contentDocument || jQuery('#opentable-frame')[0].contentWindow.document);
217
218				if (jQuery(iframeDocument).find('oc-component[data-rendered="true"]').length) {
219					if (!jQuery(iframeDocument).find('.ot-dtp-picker').hasClass('ot-hide')) {
220						jQuery('#opentable-container').replaceWith(jQuery(iframeDocument).find('div[id^="ot-widget-container"]'));
221						jQuery('#opentable-frame').css('display', 'none');
222						clearInterval(opentable_interval);
223
224						// Fix the datepicker modal orientation, not working after picking it up from the iframe
225						jQuery('#reservations-bar-new input[name=datepicker]').mousedown(function() {
226								setTimeout(function() {
227										var has_room = (jQuery(window).height() - jQuery('#reservations-bar-new').offset().top + jQuery(window).scrollTop() > 245);
228										jQuery('#reservations-bar-new .ot-date-picker .picker').toggleClass('up', !has_room);
229									}, 10);
230							});
231
232						setTimeout(checkHash, 500);
233
234					} else {
235						// Reload the widget iframe...
236						//console.log('Reloading the OpenTable widget iframe...');
237						iframeDocument.location.reload();
238					}
239				}
240			}, 1000);
241		*/
242	});
243
244//======================= AddThis / Google Analytics =======================//
245(function() {
246	if(!window.site_config || !site_config.pubid) return;
247	
248	window.addthis_config = {
249		ui_click				: true,
250		ui_delay				: 50,
251		//ui_hover_direction	: 1,
252		ui_offset_top			: 0,
253		ui_offset_left			: 0,
254		ui_header_color			: '#ffffff',
255		ui_header_background	: '#000000',
256		ui_cobrand				: site_config.title,
257		ui_use_css				: true,
258		data_track_clickback	: true,
259		data_track_addressbar	: false,
260		//services_exclude		: '',
261
262		services_compact: [
263			'facebook', 'favorites', 'twitter', 'print', 'google_plusone_share', 'email',
264			'linkedin', 'mailto', 'google', 'gmail', 'wordpress', 'hotmail',
265			'blogger', 'friendfeed', 'myspace', 'stumbleupon', 'delicious', 'bitly', 'digg', 'fark', 'reddit'
266		].join(','),
267
268		services_expanded: [
269			'facebook', 'google_plusone_share', 'twitter', 'linkedin', 'friendfeed', 'myspace',
270			'email', 'gmail', 'hotmail', 'yahoomail', 'aolmail', 'mailto',
271			'blogger', 'livejournal', 'wordpress', 'tumblr', 'typepad',
272			'reddit', 'digg', 'fark', 'delicious', 'bitly', 'stumbleupon', 'google', 'live',
273			'amazonwishlist', 'favorites', 'print', 'printfriendly', 'readitlater'
274		].join(',')
275	};
276	
277	document.addEvent('domready', function() {
278		if(site_config.pubid.analytics) {
279			(function(i,s,o,g,r,a,m){
280				i['GoogleAnalyticsObject']=r;
281				i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)}, i[r].l=1*new Date();
282				a=s.createElement(o),m=s.getElementsByTagName(o)[0];
283				a.async=1;a.src=g;m.parentNode.insertBefore(a,m);
284			})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
285			ga('create', site_config.pubid.analytics, 'auto');
286			ga('send', 'pageview');
287		};
288		if(site_config.pubid.addthis && addthis_config) {
289			Asset.javascript('//s7.addthis.com/js/300/addthis_widget.js#pubid='+site_config.pubid.addthis);
290		}
291	});
292})();
293
294
295
296//#################### Responsive Layout #####################//
297(function() {
298	var mm;
299	var respToggleMenu = function() {
300		$(document.body).toggleClass('resp-menu-show');
301	};
302
303	document.addEvent('domready', function() {
304		var pgcanvas, sidecol, maincol;
305		if(pgcanvas = document.getElement('#main-canvas .pagecanvas')) {
306			if((sidecol = pgcanvas.el('.pagemenu')) && (maincol = pgcanvas.el('.pagecontent'))) {
307				var szmain = maincol.measure(function() { return this.getSize(); }),
308					szside = sidecol.measure(function() { return this.getSize(); });
309				if(szside.y > szmain.y) maincol.setStyle('min-height', szside.y);
310			}
311		}
312		
313		
314		mm = $('mainmenu');
315		if(!mm) return;
316
317		// Add custom links to mobile menu
318		$$('.mobi-menu-links').each(function(el) {
319				var clone = el.clone();
320				clone.removeClass('hidden');
321				mm.el('.mmenu').adopt(new Element('<li>').addClass('mitem mobi-only').adopt(clone));
322			});
323
324		$$('.resp-menu-toggle').addEvent('click', respToggleMenu);
325		mm.els('.mmenu')[0].els('.curbranch').addClass('branch-expand');
326
327		mm.els('.mmenu:first-of-type .mitem').each(function(mitem) {
328				mitem.el('.msubmenus') ? mitem.addClass('has-sub') : mitem.remClass('has-sub');
329			});
330
331		mm.addEvent('click:relay(.mmenu:first-of-type .mitem)', function(e, el) {
332				if (el.hasClass('has-sub') && !el.hasClass('branch-expand')) {
333					mm.els('.branch-expand').remClass('branch-expand');
334					el.addClass('branch-expand');
335					el.el('>a').blur();
336					if(mm.hasClass('mm-mobi')) return !e.stop();
337
338				} else if (el.hasClass('has-sub') && el.hasClass('branch-expand')) {
339					// When clicking on an already expanded branch, we just close it
340					el.removeClass('branch-expand');
341				}
342				return true;
343			});
344
345		jQuery('#close-mobile-top-menu').click(respToggleMenu);
346
347		return;
348	});
349
350	var respPosMenu = function() {
351		if (!mm) return;
352		if (jQuery(window).width() <= 768) {
353			if(!mm.hasClass('mm-mobi')) {
354				mm.addClass('mm-mobi').dispose().inject($(document.body));
355			}
356		}
357		else if(mm.hasClass('mm-mobi')) mm.remClass('mm-mobi').dispose().inject($('pageheader'));
358	};
359	window.addEvents({ domready:respPosMenu, load:respPosMenu, resize:respPosMenu });
360})();
361
362// ScrollBarState
363(function() {
364	return;
365
366	var sbstate_parse = function() {
367		var r = { win:'', y:0, x:0 }, nbits = window.name.split('_xx_');
368		if(nbits.length > 1) {
369			r.win = nbits.shift() || '';
370			r.y = nbits.pop() || 0;
371		}
372		return r;
373	};
374
375	var xflag = false
376	var sbstate_scroll = function() {
377		if(!xflag) {
378			var p = sbstate_parse();
379			window.scrollTo(0, p.y);
380			xflag = true;
381		}
382		else test('xflag!');
383	};
384	var sbstate_relay = function() {
385		var p = sbstate_parse();
386		window.name = p.win +'_xx_'+ document.body.getScroll().y;
387		return true;
388	};
389	document.addEvent('domready', function() {
390		sbstate_scroll();
391		document.addEvent('click:relay(a)', function(e, el) {
392			return sbstate_relay(el);
393		});
394	});
395})();
396
397var checkHash;
398function checkReservationBubble() {
399	if (jQuery('#reservations-bar-new').offset().top + jQuery('#reservations-bar-new').outerHeight() + jQuery('#reservation-bubble').outerHeight() + 28 < jQuery(window).scrollTop() + jQuery(window).height()) {
400		jQuery('#reservation-bubble').removeClass('top');
401		jQuery('#reservation-bubble').css('top', jQuery('#reservations-bar-new').offset().top + jQuery('#reservations-bar-new').outerHeight() + 28 - jQuery(window).scrollTop());
402		
403	} else {
404		jQuery('#reservation-bubble').addClass('top');
405		jQuery('#reservation-bubble').css('top', jQuery('#reservations-bar-new').offset().top - jQuery('#reservation-bubble').outerHeight() - 28 - jQuery(window).scrollTop());
406	}
407}
408
409document.addEvent('domready', function() {
410		// Load all inner pages via AJAX
411		var main = jQuery('.pagecanvas'), 
412			menus = jQuery('#mainmenu .mitem');
413		
414		menus.each(function(index, menu) {
415				if (!jQuery(menu).data('single-page')) return;
416				
417				var link = jQuery(menu).children('a').first(), 
418					subpages = jQuery(menu).find('.msubmenus li');
419				/*
420				link.click(function() {
421						document.location = subpages.first().find('a').attr('href');
422						return false;
423					});
424				*/
425				if (!jQuery(menu).hasClass('curbranch')) {
426					subpages.each(function(index2, subpage) {
427							var sublink = jQuery(subpage).find('a'), 
428								url = sublink.attr('href');
429							
430							sublink.attr('href', link.attr('href') + '#' + url.substr(1).split('/').join('-'));
431						});
432					
433					return;
434				}
435				
436				
437				var loaded_subpages = [];
438				subpages.each(function(index2, subpage) {
439						var sublink = jQuery(subpage).find('a'), 
440							url = sublink.attr('href');
441						
442						jQuery.ajax({
443								url		: url,
444								success	: function(response) {
445									var content = jQuery(response).find('.pagecanvas');
446									loaded_subpages[index2] = content;
447									
448									sublink.attr('href', link.attr('href') + '#' + content.attr('id').substr(5));
449									
450									if (loaded_subpages.length == subpages.length) {
451										var all_pages = true;
452										for (var i=0, j=loaded_subpages.length; i<j; i++) {
453											if (!loaded_subpages[i]) {
454												all_pages = false;
455												break;
456											}
457										}
458										if (all_pages) {
459											for (var i=(loaded_subpages.length - 1), j=0; i>=j; i--) {
460												var loaded_subpage = jQuery(loaded_subpages[i]);
461												
462												main.after(loaded_subpages[i]);
463												loaded_subpage.find('.pagecontent').css('opacity', 1);
464												
465												// Create anchors for each sub-page, and place them above the sub-page containers
466												// so that, when linking to them, they'll clear the top header and reservations bar
467												var id = loaded_subpages[i].attr('id'), 
468													anchor = jQuery('<a class="inner-anchor" id="' + id + '"></a>');
469												
470												loaded_subpages[i].attr('id', id + '-container');
471												loaded_subpages[i].before(anchor);
472												anchor.css('margin-top', -(jQuery('#pageheader #topmenu > .block-canvas').height() + jQuery('#reservations-bar-new').height()));
473											}
474											jQuery(window).resize();
475											jQuery(window).trigger('hashchange');
476											
477											if (typeof SlideShow != 'undefined') generateSlideshows();
478										}
479									}
480								}
481							});
482					});
483			});
484		
485		checkHash = function() {
486			if (document.location.hash) {
487				if (jQuery('#page-' + document.location.hash.substr(1)).length)
488					jQuery('html, body').animate({
489							scrollTop: jQuery('#page-' + document.location.hash.substr(1)).offset().top
490						});
491					
492				else if (document.location.hash == '#reserve' && jQuery(window).width() > 768 && !jQuery('#opentable-container').length) {
493					if (!jQuery('#reservation-overlay').length) {
494						jQuery('body').append('<div id="reservation-overlay"></div>');
495						jQuery('#reservation-overlay').click(function() {
496								jQuery('#reservation-bubble > a').click();
497							});
498					}
499					jQuery('#reservations-bar-new').css('z-index', '10001');
500					
501					jQuery('#reservation-bubble').css({
502							'display'	: 'block', 
503							'right'		: jQuery(window).width() - jQuery('#reservations-bar-new div[id^="ot-widget-container"] .ot-button').offset().left - jQuery('#reservations-bar-new div[id^="ot-widget-container"] .ot-button').outerWidth() / 2
504						});
505					checkReservationBubble();
506					jQuery('#reservation-bubble').css('opacity', 1);
507					
508					jQuery('#reservation-bubble > a').click(function() {
509							jQuery('#reservation-bubble').css({
510									'display'	: 'none', 
511									'opacity'	: 0, 
512									'top'		: '100%'
513								});
514							jQuery('#reservation-overlay').remove();
515							jQuery('#reservations-bar-new').css('z-index', '');
516						});
517				}
518			}
519		}
520		jQuery(window).on('hashchange', checkHash);
521		
522		
523		if (!jQuery('#home-slides').length) jQuery('#reservations-bar-new').data('init-top', jQuery('#reservations-bar-new').offset().top);
524		
525		
526		jQuery('#reservations-intro').click(function() {
527				if (jQuery(window).width() <= 1135) document.location = jQuery(this).data('href');
528			});
529		
530		
531		document.addEvent('scroll', function(event) {
532				var scrollTop = parseInt(window.pageYOffset || document.documentElement.scrollTop/* || body.scrollTop*/);
533				
534				if (scrollTop > 0) jQuery('#pageheader').addClass('scroll');
535				else jQuery('#pageheader').removeClass('scroll');
536				
537				if (jQuery('#reservations-bar-new').data('init-top')) {
538					//if (scrollTop > (jQuery('#reservations-bar-new').data('init-top') - jQuery('#topmenu').outerHeight())) jQuery('#reservations-bar-new').addClass('fixed');
539					//else jQuery('#reservations-bar-new').removeClass('fixed');
540					
541					checkReservationBubble();
542				}
543				
544				
545				if (scrollTop >= 600) {
546					jQuery('.navtotop').css('opacity', '1');
547					var scrollLength = jQuery('body')[0].scrollHeight - scrollTop - jQuery(window).height();
548					
549					if (scrollLength < jQuery('#pagefooter').outerHeight() + 16) jQuery('.navtotop').css('bottom', -(scrollLength - jQuery('#pagefooter').outerHeight() - 16) + 'px');
550					else jQuery('.navtotop').css('bottom', '16px');
551					
552				} else jQuery('.navtotop').css('opacity', '0');
553				
554				jQuery('.navtotop').click(function() {
555						new Fx.Scroll(window).start(0, 0);
556					});
557				
558				
559				if (typeof jQuery != 'undefined' && jQuery('#private-menu').length == 1) {
560					// Make sure that when the private menu reaches the #topmenu
561					// it gets stuck on top of the page, and when the page scrolls down
562					// it gets un-stuck
563					if (jQuery(window).width() > 480 && scrollTop > jQuery('#pageheader').outerHeight()) jQuery('#private-menu').css('position', 'fixed');
564					else jQuery('#private-menu').css('position', '');
565				}
566			});
567		document.fireEvent('scroll');
568		
569		
570		jQuery('.shareicon .ico-calendar').next('ul').find('li').click(function() {
571				var data = jQuery(this).parents('ul').first().prev('a').data();
572				
573				if (jQuery(this).find('a').hasClass('google')) {
574					window.open('http://www.google.com/calendar/event?' + 
575						'action=TEMPLATE&' + 
576						'text=' + encodeURIComponent(data.title) + '&' + 
577						'dates=' + encodeURIComponent(data.startDate + '/' + data.endDate) + '&' + 
578						'details=' + encodeURIComponent(data.details) + '&' + 
579						'location=&' + 
580						'trp=false&' + 
581						'sprop=&' + 
582						'sprop=name:');
583					
584				} else if (jQuery(this).find('a').hasClass('outlook-online')) {
585					window.open('https://outlook.live.com/owa/?rru=addevent&' + 
586						'startdt=' + encodeURIComponent(data.startDate) + '&' + 
587						'enddt=' + encodeURIComponent(data.endDate) + '&' + 
588						'subject=' + encodeURIComponent(data.title) + '&' + 
589						'location=&' + 
590						'body=' + encodeURIComponent(data.details) + '&' + 
591						'allday=&' + 
592						'uid=&' + 
593						'path=/calendar/view/Month');
594					
595				} else if (jQuery(this).find('a').hasClass('yahoo')) {
596					window.open('http://calendar.yahoo.com/?v=60&view=d&type=20&' + 
597						'title=' + encodeURIComponent(data.title) + '&' + 
598						'st=' + encodeURIComponent(data.startDate) + '&' + 
599						'et=' + encodeURIComponent(data.endDate) + '&' + 
600						'desc=' + encodeURIComponent(data.details) + '&' + 
601						'in_loc=&' + 
602						'uid=');
603					
604				} else {
605					window.open('/events/calendar?' + 
606						'url=' + encodeURIComponent(location.href) + '&' + 
607						'title=' + encodeURIComponent(data.title) + '&' + 
608						'start=' + encodeURIComponent(data.startDate) + '&' + 
609						'end=' + encodeURIComponent(data.endDate) + '&' + 
610						'details=' + encodeURIComponent(data.details));
611				}
612			});
613		
614		
615		if (false && typeof google!='undefined') {
616			var location = new google.maps.LatLng(38.300241, -122.286094), 
617				mapObj = new google.maps.Map(jQuery('#footer-map > div')[0], {
618					center		: location,
619					mapTypeId	: google.maps.MapTypeId.ROADMAP, 
620					styles		: [
621					    {
622					        "featureType": "administrative",
623					        "elementType": "all",
624					        "stylers": [
625					            {
626					                "saturation": -100
627					            }
628					        ]
629					    },
630					    {
631					        "featureType": "administrative.province",
632					        "elementType": "all",
633					        "stylers": [
634					            {
635					                "visibility": "off"
636					            }
637					        ]
638					    },
639					    {
640					        "featureType": "landscape",
641					        "elementType": "all",
642					        "stylers": [
643					            {
644					                "saturation": -100
645					            },
646					            {
647					                "lightness": -20
648					            },
649					            {
650					                "visibility": "on"
651					            }
652					        ]
653					    },
654					    {
655					        "featureType": "poi",
656					        "elementType": "all",
657					        "stylers": [
658					            {
659					                "saturation": -100
660					            },
661					            {
662					                "lightness": 0
663					            },
664					            {
665					                "visibility": "simplified"
666					            }
667					        ]
668					    },
669					    {
670					        "featureType": "road",
671					        "elementType": "all",
672					        "stylers": [
673					            {
674					                "saturation": -100
675					            }
676					        ]
677					    },
678					    {
679					        "featureType": "road.highway",
680					        "elementType": "all",
681					        "stylers": [
682					            {
683					                "visibility": "simplified"
684					            }
685					        ]
686					    },
687					    {
688					        "featureType": "road.arterial",
689					        "elementType": "all",
690					        "stylers": [
691					            {
692					                "lightness": -20
693					            }
694					        ]
695					    },
696					    {
697					        "featureType": "road.local",
698					        "elementType": "all",
699					        "stylers": [
700					            {
701					                "lightness": -20
702					            }
703					        ]
704					    },
705					    {
706					        "featureType": "transit",
707					        "elementType": "all",
708					        "stylers": [
709					            {
710					                "saturation": -100
711					            },
712					            {
713					                "visibility": "simplified"
714					            }
715					        ]
716					    },
717					    {
718					        "featureType": "water",
719					        "elementType": "geometry",
720					        "stylers": [
721					            {
722					                "hue": "#ffff00"
723					            },
724					            {
725					                "lightness": -25
726					            },
727					            {
728					                "saturation": -97
729					            }
730					        ]
731					    },
732					    {
733					        "featureType": "water",
734					        "elementType": "labels",
735					        "stylers": [
736					            {
737					                "lightness": -25
738					            },
739					            {
740					                "saturation": -100
741					            }
742					        ]
743					    }
744					], 
745					zoom		: 17
746				})/*, 
747				marker = new google.maps.Marker({
748					icon		: {
749						anchor		: new google.maps.Point(42.5, 85), 
750						scaledSize	: new google.maps.Size(85, 85), 
751						size		: new google.maps.Size(170, 170), 
752						url			: '/assets/images/logo-cch-marker.png'
753					}, 
754					map			: mapObj, 
755					position	: location
756				});
757			
758			marker.addListener('click', function() {
759					window.open('https://www.google.com/maps/place/Cole\'s+Chop+House/@38.300242,-122.28611,
75915z/data=!4m2!3m1!1s0x0:0x3e9b540e8f8b0b89?sa=X&ved=0ahUKEwjt9bWO6qnWAhVKExoKHSTFCMsQ_BIIeTAN');
760				})*/;
761			
762			var infoWindow = new google.maps.InfoWindow({
763					content: '<div id="map-window-container">' + 
764							'<a href="https://www.google.com/maps/place/Cole\'s+Chop+House/@38.300242,-122.28611,15z/data=!4m2!3m1!1s0x0:0x3e9b540e8f8b0b89?sa=X&ved=0ahUKEwjt9bWO6qnWAhVKExoKHSTFCMsQ_BIIeTAN" target="_blank"><img height="85" src="/assets/images/logo-cch-marker.png" width="85" /></a>' + 
765							'<p>1122 Main St, Napa, CA 94559</p>' + 
766							'<p><a href="tel:+17072246328">(707) 224-6328</a></p>' + 
767							'<p><a href="https://www.google.com/maps/place/Cole\'s+Chop+House/@38.300242,-122.28611,15z/data=!4m2!3m1!1s0x0:0x3e9b540e8f8b0b89?sa=X&ved=0ahUKEwjt9bWO6qnWAhVKExoKHSTFCMsQ_BIIeTAN" target="_blank">Directions</a></p>' + 
768						'</div>'
769				});
770			infoWindow.open(mapObj);
771			infoWindow.setPosition(location);
772		}
773		
774		
775		jQuery(window).resize(function() {
776				var scroll_top = jQuery(window).scrollTop(), 
777					halfs_count = jQuery('.usercontent .half').length / 2;
778				
779				if (jQuery(window).width() > 480) {
780					// Set the homepage's blocks height
781					var home_boxes = jQuery('#home-bottom-content > div');
782					if (home_boxes.length == 2) {
783						home_boxes.height(0);
784						
785						if (home_boxes[0].scrollHeight > home_boxes[1].scrollHeight) {
786							home_boxes.last().height(home_boxes[0].scrollHeight);
787							home_boxes.first().height(home_boxes[0].scrollHeight);
788							
789						} else {
790							home_boxes.first().height(home_boxes[1].scrollHeight);
791							home_boxes.last().height(home_boxes[1].scrollHeight);
792						}
793					}
794					
795					for (var i=0, j=halfs_count; i<j; i++) {
796						var first = jQuery(jQuery('.usercontent .half')[i * 2]), 
797							second = first.next('.half');
798						
799						first.height(0);
800						second.height(0);
801						
802						if (first[0].scrollHeight > second[0].scrollHeight) {
803							second.height(first[0].scrollHeight);
804							first.height(first[0].scrollHeight);
805							
806						} else {
807							first.height(second[0].scrollHeight);
808							second.height(second[0].scrollHeight);
809						}
810					}
811				}
812				
813				// Set the map's center
814				if (typeof mapObj != 'undefined') {
815					var center = mapObj.getCenter();
816					google.maps.event.trigger(mapObj, 'resize');
817					mapObj.setCenter(center);
818				}
819				
820				jQuery(window).scrollTop(scroll_top);
821				jQuery(window).trigger('hashchange');
822			});
823		jQuery(window).resize();
824		/*
825		
826		function scrollFooterLogos(length, duration) {
827			jQuery('#footer-logos').animate({
828					scrollLeft: length
829				}, {
830					complete	: function() {
831						jQuery('#footer-logos').animate({
832								scrollLeft: 0
833							}, {
834								complete	: function() {
835									scrollFooterLogos(length, duration);
836								}, 
837								duration	: duration
838							});
839					}, 
840					duration	: duration
841				});
842		}
843		*/
844		// Allow all logos to load
845		setTimeout(function() {
846				if (jQuery('#footer-logos')[0].scrollWidth > jQuery('#footer-logos').width()) {
847					/*var length = (jQuery('#footer-logos')[0].scrollWidth - jQuery('#footer-logos').width()), 
848						duration = (length / 100) * 1500; // Scrolling 100px takes 1s
849					
850					scrollFooterLogos(length, duration);*/
851					jQuery('#footer-logos').bxSlider({
852							maxSlides	: 5, 
853							minSlides	: 5, 
854							slideWidth	: 'auto', 
855							slideMargin	: 10, 
856							speed		: 8000, 
857							ticker		: true, 
858							tickerHover	: true
859						});
860				}
861			}, 2000);
862		
863		// Append a Google Analytics tracking code to the "Find a table" OpenTable button
864		jQuery('#reservations-bar-new').on('click', 'div[id^="ot-widget-container"] .ot-button', function() {
865				ga('send', 'event', { eventCategory: 'ColesChopHouse', eventAction: 'Click', eventLabel: 'FindATable'});
866			});
867		
868		// Append a Google Analytics tracking code to each tel: link
869		jQuery('a[href^="tel:"]').each(function() {
870				jQuery(this).click(function() {
871						ga('send', 'event', { eventCategory: 'ColesChopHouse', eventAction: 'Click', eventLabel: 'ClickToCall'});
872					});
873			});
874	});

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.