PageSourceSearch

https://allmovesuk.co.uk/route/scripts

js allmovesuk.co.uk collected 2026-10-06 20:01:15 UTC 100,148 bytes, 2,934 lines download raw bytes

1
2// <script>
3
4// Append Hidden Form
5
6if(!$(AJAXForm).length) {
7
8	BodyObject.append(
9		'<form data-route="1" '+
10			'class="ajax fixed AJAXForm" '+
11			(!WebApp.IsCMS ? 'data-loading="0" ' : '')+
12			'data-ajaxreplace="'+(WebApp.IsCMS ? 'section.right > article' : 'main')+'" '+
13			'style="left:9999px;top:9999px;">'+
14		'</form>'
15	);
16
17}
18
19// Detect History Changes
20
21WindowObject.on('popstate',function() {
22
23	if(!window.location.hash || ['#SF','#BF','#Tab'].includes(window.location.hash.replace(/\d/g,''))) {
24
25		$('.popup, .overlay, .lightbox').remove();
26
27		var PopStateOverride = false;
28
29		console.log('PopState: '+window.location.pathname.replace('/','')+window.location.search);		
30
31		if(typeof window.PopStateOverride === 'function') {
32			$('.popup .close').click();
33			window.PopStateOverride();
34		}
35		else {
36
37			if($(AJAXForm).attr('data-scrollrestore') && 'scrollRestoration' in history) {
38				history.scrollRestoration = $(AJAXForm).attr('data-scrollrestore');
39			}
40			WebApp.ProcessAJAXRequest();
41
42		}
43
44	}
45
46});
47
48// Call OnPageReady
49
50OnPageReady({'InitialLoad' : true});
51
52// Clear Date Pickers
53
54BodyObject.on('keydown','.datepicker, datetimepicker',function(event) {
55
56	if([8,46].indexOf(event.which) !== -1) {
57		$(this).val('');
58		$(this).siblings('[type=hidden][name="'+$(this).attr('name')+'"]').val('');
59	}
60
61});
62
63// Copy To Clipboard
64
65BodyObject.on('click','.CopyToClip',function(event) {
66
67	event.preventDefault();
68	event.stopImmediatePropagation();
69
70	var THIS = $(this);
71	
72	if(!$('.TempField').length) {
73		
74		var Copy	=	THIS.attr('data-copy');
75		var Text	= 	THIS.is(':input') ? THIS.val() : 
76						(Copy && Copy !== 'AS_TEXT' ? Copy : (Copy === 'AS_TEXT' ? THIS.text() : THIS.html().replace(/<br>|<br\/>|<br \/>/g,"\n")));
77
78		BodyObject.append('<textarea class="TempField" style="position:absolute;top:-10000px;left:-10000px;">'+Text+'</textarea>');
79
80	}
81
82	var CopyText = document.querySelector('.TempField');
83
84	CopyText.select();
85	document.execCommand('copy');
86
87	$('.TempField').remove();
88
89	if(Callback = THIS.attr('data-callback')) {
90		window[Callback](THIS);
91	}
92	else {
93
94		BodyObject.append(
95			'<div class="popup Copied">'+
96			'	<h6>Copied</h6>'+
97			'	<div class="paddedb_medium">Copied To Clipboard</div>'+
98			'</div>'
99		);
100
101		ShowPopup(false,'.Copied');
102
103		setTimeout(function() {
104			$('.Copied .close').click();
105		},500);
106
107	}
108
109});
110
111// Load reCAPTCHA Script ON Form Interaction
112
113BodyObject.on('click','input, textarea',function(event) {
114	reCAPTCHAcallback();
115});
116
117// Collapsable Menus
118
119BodyObject.on('click','nav.collapse .dropdown > a',function(event) {
120	
121	event.preventDefault();
122	event.stopImmediatePropagation();
123	
124	var Height	= 0;
125	var Action	= '';
126	var Class	= $(this).parent().attr('class').split(' ');
127		Class	= Class[1];
128	
129	if($(this).siblings('div').outerHeight() === 0) {
130		
131		Action = 'Expand';
132
133		$(this).parent().addClass('expanded');
134		$(this).siblings('div').css('height',0);
135		
136		$(this).siblings('div').children().each(function() {
137			Height = Height + $(this).outerHeight();
138		});
139	}
140	else {
141		Height	= 0;
142		Action	= 'Close';
143	}
144
145	$.post(
146		'/',
147		{
148			'MenuCollapse'	:	$(this).closest('.collapse').attr('data-menu'),
149			'Class'			:	Class,
150			'Action'		:	Action
151		}
152	);
153	
154	$(this).stop().siblings('div').animate({
155		'height'	:	Height
156	},250,function() {
157		if(Height === 0) {
158			$(this).parent().removeClass('expanded');
159			$(this).css({
160				'overflow'	:	'hidden'	
161			});	
162		}
163		else {
164			$(this).css({'height':'auto'});	
165		}
166	});
167	
168});
169
170// AJAX Links
171
172BodyObject.on('click','nav.ajax a, a.ajax',function(event) {
173
174	var THIS 		= $(this);
175	var Dropdown 	= THIS.parents('.dropdown');
176	var Unset		= false;
177	var HREF		= THIS.attr('href');
178
179	if(!event.ctrlKey && !event.metaKey) {
180
181		if(HREF) {
182
183			var El1 = THIS.closest('.mobile-menu');
184			var El2 = THIS.closest('#MM');
185
186			if(El1.length || El2.length) {
187
188				if(El1.length) {
189					$('a.mobile-menu').click();
190				}
191				else {
192
193					let Close = $('.overlay#Close');
194						Close = Close.length ? Close : El2.find('#Close');
195
196					if(Close.length) {
197						Close.click();
198					}
199
200				}
201
202				if(Dropdown.length) {
203					Dropdown.children('a').click();
204				}
205
206			}
207			else if(Dropdown.length) {
208				Dropdown.addClass('AutoLeave');
209				ProcessDropdownMouseLeave(Dropdown);
210			}
211
212		}
213
214		if(THIS.hasClass('ajax') && !HREF) {
215
216			HREF	= window.location.pathname.replace('/','')+window.location.search;
217			Unset	= true;
218
219			THIS.attr('href',HREF);
220
221		}
222
223		if(HREF && THIS.attr('target') !== '_blank' && HREF.indexOf('?GenerateReport') === -1 && HREF.indexOf(':') === -1) {
224
225			event.preventDefault();
226
227			if(!THIS.hasClass('greyed_bg')) {
228
229				if(Replace = THIS.attr('data-ajaxreplace') || THIS.closest('.ajax').attr('data-ajaxreplace')) {
230					$(AJAXForm).attr('data-ajaxreplace',Replace);
231				}
232				
233				if(ScrollFix = THIS.attr('data-ajaxscrollfix') || THIS.closest('.ajax').attr('data-ajaxscrollfix')) {
234					$(AJAXForm).attr('data-ajaxscrollfix',ScrollFix);
235				}
236				
237				var ActiveForm = !WebApp.IsCMS ? $(this).closest('form[data-ajaxreplace]') : {};
238				
239				WebApp.ProcessAJAXRequest({
240					'HREF' 		: $(this).attr('href'),
241					'ViaPopUp'	: $(this).closest('.popup').length ? true : false,
242					'Form'		: ActiveForm.length ? ActiveForm : null
243				});
244
245				if(Unset) {
246					THIS.removeAttr('href');
247				}
248
249			}
250
251		}
252
253	}
254
255});
256
257// Toggle Switch 
258
259BodyObject.on('change','.toggleswitch [type=checkbox]',function(event) {
260
261	var ToggleElement = $(this).siblings('.relative').children('.absolute');
262
263	if(ToggleElement.hasClass('On')) {
264		ToggleElement.removeClass('On');
265	}
266	else {
267		ToggleElement.addClass('On');
268	}
269
270});
271
272// Trigger Sort By "Ordering ASC" On ".OrderDrag "Click
273
274BodyObject.on('click','.responsive-table .greyed_bg.OrderDrag',function() {
275	$('button[value="Ordering ASC"]').focus().click();
276});
277
278// Show / Hide Next Div
279
280BodyObject.on('change','.ShowHide',function(event) {
281
282	let THIS    	= $(this);
283
284	if(!THIS.hasClass('Propagate')) {
285		event.stopImmediatePropagation();
286	}
287	
288	let CSS			= '';
289	let Hide 		=	THIS.attr('data-hide');
290		Hide 		=	Hide ? Hide.split('|') : ['','0','No'];
291	let Sel			=	THIS.attr('data-showhide');
292	let	El			=	Sel ? $(Sel) : null; 
293		El			=	El ? El : THIS.closest('label').length ? THIS.closest('label').next() : THIS.next();
294	let IsRadio		=	THIS.is(':radio');
295	let Checked		=	THIS.is(':checked');
296
297	if(THIS.prop('tagName') === 'SELECT') {
298
299		CSS			=	Hide.includes(THIS.val()) ? 'none' : 'block';
300
301	}
302	else if(THIS.is(':checkbox') || IsRadio) {
303
304		let Val			=	THIS.val();	
305			El			=	Sel ? El : (THIS.closest('label').length ? THIS.closest('label').next() : THIS.next());
306			CSS			=	Checked && !Hide.includes('1') || Hide.includes('1') && !Checked ? 'block' : 'none';
307
308		if(IsRadio) {
309
310			if(!Sel && CSS === 'block') {
311
312				$('[name="'+THIS.attr('name')+'"]:not([value="'+THIS.attr('value')+'"])').each(function() {
313
314					var _THIS_ = $(this);
315
316					SiblingElement = _THIS_.closest('label') ? _THIS_.closest('label').next() : _THIS_.next();
317					SiblingElement.css('display','none');
318
319				});
320
321			}
322			else if(Sel && Checked) {
323				CSS	= !Hide.includes(Val) ? 'block' : 'none';
324			}
325
326		}
327
328	}
329
330	if(!IsRadio || Checked) {
331		El.css('display',CSS);
332	}
333
334	// If Manual Change Inside A Pop-Up, Reload It To Resize It
335
336	let _PopUp = THIS.closest('.popup');
337
338	if(_PopUp.length && event.originalEvent) {
339		ShowPopup(false,'.'+_PopUp.attr('class').split(' ')[2],true);
340	}
341
342});
343
344$('.ShowHide').change();
345
346// Enable Feed Buttons For All Feeds
347
348BodyObject.on('click','.items-feed a.arrow',function() {
349
350	var Class	 			= $(this).parent().attr('class').split(' ');
351	var Class	 			= Class[0];
352	var ItemsFeedElement  	= $(this).parent().find('.active').prop('tagName').toLowerCase();
353	var ItemsFeedElement  	= '.'+Class+' '+($(this).parent().hasClass('Scroll') ? '.scroller > ' : '> ')+ItemsFeedElement;
354	var Callback 			= $(this).parent().attr('data-callback');
355
356	ShowNextItem(ItemsFeedElement,($(this).hasClass('prev') ? true : false),Callback);
357
358});
359
360BodyObject.on('click','.dots a',function() {
361
362	var THIS				= $(this);
363	var ActiveDot			= THIS.parent().find('.fas').index();
364	var Prev 				= ActiveDot > THIS.index();
365	var Count				= Number(String(ActiveDot - THIS.index()).replace('-',''));
366	var Class	 			= $(this).parent().attr('data-class');
367	var Feed				= $('.items-feed.'+Class);
368	var ItemsFeedElement  	= Feed.find('.active').prop('tagName').toLowerCase();
369		ItemsFeedElement  	= '.items-feed.'+Class+' '+(Feed.hasClass('Scroll') ? '.scroller > ' : '> ')+ItemsFeedElement;
370
371	if(Count) {
372		ShowNextItem(ItemsFeedElement,Prev,'ChangeFeedDot',Count);
373	}
374
375});
376
377
378// Publish & Un-Publish For New Records
379
380BodyObject.on('click','button[name=Publish],button[name=UnPublish]',function(event) {
381	if($('input[name=Status]').length) {
382		event.preventDefault();	
383		var NewValue  = $('input[name=Status]').val() == 1 ? 99999 : 1;
384		var NewButton = $('input[name=Status]').val() == 1 ? '<button name="Publish" class="button red" value="3">No<span class="fa fa-times"></span></button>' : '<button name="UnPublish" class="button green" value="">Yes<span class="fa fa-check"></span></button>';
385		$('input[name=Status]').val(NewValue);
386		$(this).replaceWith(NewButton);
387	}
388});
389
390// Delete Record Warning Pop-Up
391
392BodyObject.on('click','.fa-remove, .Del, .Prompt',function(event) {
393
394	var THIS = $(this);
395
396	if(!THIS.hasClass('Propagate')) {
397		event.stopImmediatePropagation();
398	}
399
400	if(!THIS.hasClass('CloseTrigger')) {
401		event.preventDefault();
402	}
403	if(!$('.popup.delete-confirm').length) {
404
405		THIS.addClass('CloseTrigger');
406
407		BodyObject.append(
408			'<form class="popup small delete-confirm ajax">'+
409				(THIS.attr('data-popuptext') ? THIS.attr('data-popuptext') : 
410			'	<h6>Confirm</h6>'+
411			'	<div class="paddedb_medium"><p>Are You Sure You Want To Delete&quest;</p></div>')+
412			'	<div class="foot">'+
413			'		<a class="more close red_bg floatl widthauto">No</a>'+
414			'		<a class="more green_bg floatr widthauto'+(THIS.hasClass('PreventAutoClose') ? ' PreventAutoClose' : '')+'">Yes</a>'+
415			'		<div class="clear"></div>'+
416			'	</div>'+
417			'</form>'
418		);
419
420		if(THIS.attr('data-function')) {
421			window[THIS.attr('data-function')](THIS.attr('data-function-args') ? THIS.attr('data-function-args') : null);
422		}
423
424		ShowPopup(false,'.delete-confirm');
425
426	}
427
428});
429
430// Escape To Close Pop-Up Or Lightbox
431
432BodyObject.on('keydown',function(event) {
433
434	if(event.which === 27) {
435		$('.popup .close, .lightbox .close').click();
436	}
437
438});
439
440BodyObject.on('keydown','.delete-confirm .green_bg:not(.PreventAutoClose)',function(event) {
441
442	if(event.which === 13) {
443
444		event.preventDefault();
445		event.stopImmediatePropagation();
446
447		$(this).click();
448
449	}
450
451});
452
453BodyObject.on('click','.delete-confirm .green_bg:not(.PreventAutoClose)',function(event) {
454
455	event.preventDefault();
456	event.stopImmediatePropagation();
457
458	var THIS = $(this);
459
460	if(!$('button.CloseTrigger').hasClass('AJAXSubmit')) {
461
462		if($('button.CloseTrigger').hasClass('IncludeSiblings')) {
463	
464			var Fields = THIS.closest('.delete-confirm').find('input, textarea, select');
465			var Target = $('button.CloseTrigger').parent();
466
467			Fields.each(function() {
468	
469				var _THIS_ 	= $(this);
470				var Clone	= _THIS_.clone();
471
472				Clone.addClass('none').val(_THIS_.val()).appendTo(Target);
473
474			});
475
476		}
477
478		$('.CloseTrigger').focus().click(); // First Focus To Ensure Active Element Changes
479		$('.popup.delete-confirm .close').click();
480
481	}
482	else {
483
484		var Button = $('button.CloseTrigger');
485
486		Button.closest('form').addClass('ajax');
487		Button.focus().click();
488
489		setTimeout(function() {
490			THIS.siblings('.close').click();
491		},100);
492
493	}
494
495});
496
497// Dropdown Mouseenter Function
498
499function ProcessDropdownMouseEnter(Element) {
500	
501	var Type = Element.attr('class').replace(' active','').split(' ');
502		Type = Type[Type.length - 1];
503	
504	// Horizontal
505	
506	if(Type === 'hori') {
507	
508		if(Element.closest('nav').hasClass('detailed')) {
509			
510			Element.children('div').css({'height':'auto','display':'flex'});
511
512			setTimeout(function() {
513				Element.children('div').css({'opacity' : 1});
514			},1);
515
516		}
517		else {
518			var NewHeight = 0;
519			Element.children('div').children().each(function(){
520				NewHeight = NewHeight + $(this).outerHeight();
521			});
522			Element.children('div').stop().animate({ 'height': NewHeight+'px' },500,function() {
523				$(this).css('overflow','visible');
524			});
525
526		}
527		
528	}
529	
530	// Vertical
531	
532	else if(Type === 'vert') {
533		
534		if(Element.closest('nav').hasClass('detailed')) {
535			Element.children('div').css({'width':'auto','display':'none', 'opacity' : 0});
536		}
537		else {
538			Element.children('div').stop().animate({ 'width': Element.children('div').attr('data-width')+'px' },500,function() {
539				$(this).css('overflow','visible');
540			});
541
542		}
543		
544	}
545	
546}
547
548// Dropdown Mouseout Function
549
550function ProcessDropdownMouseLeave(Element) {
551	
552	var Type = Element.attr('class').replace(' AutoLeave','').replace(' active','').split(' ');
553		Type = Type[Type.length - 1];
554
555	// Horizontal
556	
557	if(Type === 'hori') {
558	
559		var AutoLeave = Element.hasClass('AutoLeave');
560
561		if(Element.closest('nav').hasClass('detailed')) {
562
563			Element.children('div').css('opacity','0');
564
565			setTimeout(function() {
566				Element.children('div').css('display','none');
567			},200);
568
569		}
570		else {
571
572			var Speed = AutoLeave ? 0 : 500;
573
574			Element.children('div').stop().animate({ 'height': '0px' },Speed,function() {
575				$(this).css('overflow','hidden');
576			});
577
578		}
579
580		if(AutoLeave) {
581			Element.removeClass('AutoLeave');
582		}
583		
584	}
585	
586	// Vertical
587	
588	else if(Type === 'vert') {
589
590		var AutoLeave 	= Element.hasClass('AutoLeave');
591		var Speed		= AutoLeave ? 0 : 500;
592
593		if(Element.closest('nav').hasClass('detailed')) {
594			Element.children('div').stop().fadeTo(Speed,0,function() {
595				$(this).css('display','none');
596			});
597		}
598		else {
599
600			Element.children('div').stop().animate({ 'width': '0px' },Speed,function() {
601				$(this).css('overflow','hidden');
602
603			});
604
605		}
606
607		if(AutoLeave) {
608			Element.removeClass('AutoLeave');
609		}
610		
611	}
612	
613}
614
615/* Dropdown Menu: Detect Touch */
616	
617BodyObject.on('click touchstart','nav:not(.mobile-menu):not(.collapse):not(#MM) .dropdown > a',function(event) {
618	
619	if(event.pointerType === 'touch'&& window.navigator.userAgent.toLowerCase().match(/(edge)/) || 
620		event.type === 'touchstart'	&& window.navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad)/) || 
621		event.type === 'click'		&& window.navigator.userAgent.toLowerCase().match(/(android|iemobile|blackberry|bada|ipad)/)) {
622
623		event.preventDefault();
624		event.stopImmediatePropagation();
625		
626		if(!$(this).hasClass('TouchProcessed') && $(this).attr('href') && !$(this).closest('.detailed').length) {
627			$(this).addClass('TouchProcessed');
628			$(this).siblings('div').prepend($(this).clone());
629		}
630		
631		if(
632			$(this).parent().hasClass('hori') && $(this).parent().children('div').height() < 25 ||
633			$(this).parent().hasClass('vert') && $(this).parent().children('div').width() < 25  || 
634			$(this).closest('.detailed').length && $(this).parent().children('div').css('display') === 'none'
635			) {
636
637				ProcessDropdownMouseEnter($(this).parent());
638			}
639		else {
640			ProcessDropdownMouseLeave($(this).parent());
641		}
642
643	}
644	
645});
646
647/* Dropdown Menu: Hover */
648
649BodyObject.on('mouseenter','nav:not(.mobile-menu):not(.collapse) .dropdown',function() {
650	
651	var THIS = $(this);
652	
653	var Timeout = setTimeout(function(Timeout) {
654		ProcessDropdownMouseEnter(THIS);
655		THIS.attr('data-hovered','true');
656	},window.navigator.userAgent.toLowerCase().match(/(edge)/) ? 450 : 150);
657	
658	$(this).attr('data-hovered-timeout',Timeout);
659	
660});
661
662BodyObject.on('mouseleave','nav:not(.mobile-menu) .dropdown',function(){
663	
664	if($(this).attr('data-hovered')) {
665		ProcessDropdownMouseLeave($(this));
666	}
667	clearTimeout($(this).attr('data-hovered-timeout'));
668	$(this).attr('data-hovered-timeout','');
669	$(this).attr('data-hovered','');
670	
671}); 
672
673if($('.dropdown > div .active').length) {
674	$('.dropdown > div .active').parent().addClass('active');
675}
676
677// Auto-Scroll Item Images
678
679if($('.item-images').attr('data-autoscroll')) {
680	ScrollItemImages();
681}
682
683// Play & Pause Auto-Scroll
684
685BodyObject.on('click','.item-images .thumbnails > .fas',function() {
686	
687	if($(this).hasClass('fa-play')) {
688		$(this).addClass('fa-pause').removeClass('fa-play');
689		ScrollItemImages();
690	}
691	else if($(this).hasClass('fa-pause')) {
692		$(this).addClass('fa-play').removeClass('fa-pause');
693		clearInterval(window.ItemImagesScroll);
694	}
695	
696});
697
698// Items Images Interation: Select Image
699
700BodyObject.on('click','.item-images .thumbnails img',function() {
701	
702	if(!window.AutoClick) {
703		$('.item-images .fa-pause').click();
704	}
705	
706	var This	= $(this);
707	var Size	= This.closest('.item-images').attr('data-size');
708	var Source	= This.attr('src').replace('tiny/',(Size !== 'large' ? Size+'/' : ''));
709	var Img 	= This.closest('.item-images').find('.cell img[src="'+$(this).attr('src').replace('/tiny/',(Size === 'large'? '/' : '/'+Size+'/'))+'"]');
710
711	This.parent().addClass('active').siblings().removeClass('active');
712	Img.removeClass('none').siblings().addClass('none');
713
714	ItemImagesChildDimensions(Img);
715	
716});
717
718// Items Images Interation: Scroll Through Thumbnails
719
720BodyObject.on('click','.item-images .thumbnails .arrow',function() {
721	
722	if(!window.AutoClick) {
723		$('.item-images .fa-pause').click();
724	}
725	
726	var THIS		= $(this);
727	var Direction	= THIS.hasClass('prev') ? '+' : '-';
728	var Width		= THIS.siblings('div').children().outerWidth();
729	
730	THIS.siblings('div').children(':first-child').animate({'margin-left':Direction+'='+Width},350,function() {
731
732		var _THIS = $(this);
733		
734		_THIS.css('margin-left',0);
735		
736		if(Direction === '-') {
737			_THIS.insertAfter(_THIS.siblings(':last-child'));
738		}
739		else {
740			_THIS.siblings(':last-child').insertBefore(_THIS);
741		}
742		
743	});
744
745});
746
747// Items Images Interation: Hover
748
749BodyObject.on('mousemove','.item-images.zoom .cell img',function(event) {
750	
751	$('.item-images .fa-pause').click();
752	
753	if(WindowObject.outerWidth(true) + 17 > 800) {
754		
755		var Size	= $(this).closest('.item-images').attr('data-size');
756		var Source	= $(this).attr('src').replace('/'+Size+'/','/');
757
758		if(!$('.magnified').length) {
759			$(this).after('<div class="magnified" style="background-image:url(images/loading.gif);"><img src="'+Source+'" /></div>');
760			$('.magnified img').on('load',function() {
761				var Width = $(this).width() / $(this).height();
762					Width = Width * $(this).parent().height();
763				$(this).parent().addClass('loaded').css({'width':Width});
764			});
765		}
766		
767		var Offset	= $(this).offset(); 
768		var Zoom	= $(this).closest('.item-images').attr('data-zoom');
769		var ZoomX 	= (event.pageX - Offset.left) * (Zoom / 100);
770			ZoomX	= ZoomX * 0.5;
771		var ZoomY	= (event.pageY - Offset.top) * (Zoom / 100);
772			ZoomY	= ZoomY * 0.5;
773	
774
775		$('.magnified.loaded').css({'background-image':'url('+Source+')','background-size':Zoom+'%','background-position':'-'+ZoomX+'px -'+ZoomY+'px'});
776	}
777
778});
779
780BodyObject.on('mouseout','.item-images .cell img',function() {
781	$('.magnified, .lens').remove();
782});
783
784// Custom Lightbox
785
786BodyObject.on('click','.lightbox .arrow',function() {
787	if($(this).hasClass('prev')) {
788		if($('.currentlightbox').parent().parent().hasClass('photogallery')) {
789			var ElementType = $('.currentlightbox').prop('tagName');
790			if($('.currentlightbox').parent().prev().length) {
791				$('.currentlightbox').parent().prev().children(ElementType).click();
792			}
793			// If There Are Multiple Galleries On The Page, Show Last Image Of Previous One
794			else if($('.item-list.photogallery').length > 1) {
795				var Index = $('.currentlightbox').parent().parent().index('.item-list.photogallery');
796					Index = Index == 0 ? ($('.item-list.photogallery').length - 1) : Index - 1;
797				$('.item-list.photogallery:eq('+Index+')').children().children().last(
797).click();
798			}
799			else {
800				$('.currentlightbox').parent().siblings().last().children(ElementType).click();
801			}
802		}
803		else {
804			if($('.currentlightbox').prev().length) {
805				$('.currentlightbox').prev().click();
806			}
807			else {
808				$('.currentlightbox').siblings().last().click();
809			}
810		}
811	}
812	else {
813		if($('.currentlightbox').parent().parent().hasClass('photogallery')) {
814			var ElementType = $('.currentlightbox').prop('tagName');
815			if($('.currentlightbox').parent().next().length) {
816				$('.currentlightbox').parent().next().children(ElementType).click();
817			}
818			// If There Are Multiple Galleries On The Page, Show First Image Of Next One
819			else if($('.item-list.photogallery').length > 1) {
820				var Index = $('.currentlightbox').parent().parent().index('.item-list.photogallery');
821					Index = Index == ($('.item-list.photogallery').length - 1) ? 0 : Index + 1;
822				$('.item-list.photogallery:eq('+Index+')').children().children().first().click();
823			}
824			else {
825				$('.currentlightbox').parent().siblings().first().children(ElementType).click();
826			}	
827		}
828		else {
829			if($('.currentlightbox').next().length) {
830				$('.currentlightbox').next().click();
831			}
832			else {
833				$('.currentlightbox').siblings().first().click();
834			}	
835		}
836	}
837});
838
839BodyObject.keydown(function(event) {
840
841	if(event.which === 116) {
842
843		if(event.shiftKey) {
844
845			event.preventDefault();
846
847			let URI = window.location.pathname.replace('/','');
848				URI = URI || 'home';
849
850			WebApp.ProcessAJAXRequest({'URI' : URI+window.location.search+window.location.hash});
851
852		}
853
854	}
855	else if($('.lightbox').length) {
856
857		if(event.which == 37) {
858			$('.lightbox .arrow.prev').click();
859		}
860		if(event.which == 39) {
861			$('.lightbox .arrow.next').click();
862		}
863
864	}
865
866});
867
868BodyObject.on('click','.lightbox-link',function(event) {
869
870	SetBodyPosition();
871
872	if($(this).is('img')) {
873		var ImageURL = $(this).attr('src').replace('-small','');
874			ImageURL = ImageURL.replace('/small/','/');
875			ImageURL = ImageURL.replace('/thumb/',($(this).hasClass('ToSmall') ? '/small/' : '/'));
876			ImageURL = ImageURL.replace('/tiny/','/');
877	} 
878	else {
879		event.preventDefault();
880		var ImageURL = $(this).attr('href');	
881	}
882	$('.currentlightbox').removeClass('currentlightbox');
883	$(this).addClass('currentlightbox');
884	if ($('div.lightbox').length) { // IF LIGHTBOX ALREADY EXISTS FADE IT OUT AND REMOVE IT
885			$('div.lightbox').fadeTo(300, 0.0,
886				function() {
887					$(this).remove();
888							});
889	}
890	else {
891		LoadingOverlay();
892	}
893	if($(this).attr('title')) {
894		var Caption = '<div class="caption">'+$(this).attr('title').replace(/---/g,'<br/><br/>') +'</div>';
895	}
896	else {
897		var Caption = '';
898	}
899	BodyObject.append('<div class="lightbox" style="background-image:url(\''+ImageURL+'\');">'+Caption+'<a style="right:50%;top:50%;" class="close"></a><img class="source" src="'+ImageURL+'"/><img class="original" src="'+ImageURL+'"/></div>');
900
901	var ElementType = $(this).prop('tagName');
902	if($(this).parent().parent().hasClass('photogallery') || $(this).siblings(ElementType).length) {
903		$('.lightbox').append('<a class="arrow prev fa fa-chevron-left c3"></a><a class="arrow next fa fa-chevron-right c3"></a>');
904	}
905	
906	$('div.lightbox img').fadeTo(1500, 0.0, // FADE OUT ALREADY HIDDEN IMG TO ALLOW IMG TO BE LOADED FULLY
907		function() {
908			$('div.lightbox').fadeTo(400, 1.0);
909			if(WindowObject.height() > $('div.lightbox img.original').height()) {
910				$('div.lightbox').css('background-size','auto');
911			}
912			SetLightboxSize();
913			PlaceCloseButton();
914	});
915
916});
917
918BodyObject.on('click','.close, .exit',function() {
919
920	var THIS = $(this);
921
922	$('.CloseTrigger').removeClass('CloseTrigger');
923
924	var ElementToClose = THIS.closest(THIS.attr('data-close') || '.popup, .lightbox');
925
926	ElementToClose = ElementToClose.length ? ElementToClose : THIS.parent();
927
928	ElementToClose.animate({'top':'85%','opacity':0},350,function() {
929
930		if($(this).hasClass('records') || !$(this).find('.close, .exit').hasClass('hide')) {
931			$(this).remove();
932		}
933		else {
934			$(this).css('display','none');
935		}
936
937	});
938
939	if(!THIS.attr('data-retainoverlay')) {
940		RemoveOverlay();
941	}
942
943});	
944// Show Titles (Legacy Tooltips)
945
946BodyObject.on('mouseenter','.showtitles',function() {
947	$(this).prepend('<div'+($(this).attr('data-titlesclass') ? ' class="'+$(this).attr('data-titlesclass')+'"' : '')+'>'+$(this).attr('title')+'</div>');
948	$(this).attr('title','');
949});
950
951BodyObject.on('mouseleave','.showtitles',function() {
952	$(this).attr('title',$('div',this).html());
953	$('div',this).remove();
954});
955
956// Tooltips
957
958BodyObject.on('mouseenter','[data-tooltip]',function() {
959
960	let THIS	= $(this);
961	let	TT		= THIS.attr('data-tooltip');
962
963	try {
964		TT = JSON.parse(TT);
965	}
966	catch(e) {
967		TT	= {'Text' : TT};
968	}
969
970	TT.Text		= TT.Text.slice(0,1) === "\r" ? TT.Text.replace(/\n/,'') : TT.Text;
971	TT.Colour	= TT.Colour || 'colour1'; 
972
973	THIS.prepend('<div class="absolute '+TT.Colour+'_bg bgo90 '+(TT.Class || '')+'">'+(TT.Title ? '<h6>'+TT.Title+'</h6>' : '')+TT.Text.replace(/\n/g,'<br/>')+'</div>');
974	setTimeout(() => { THIS.addClass('hovered'); },50);
975	
976});
977
978BodyObject.on('mouseleave','[data-tooltip]',function() {
979
980	$(this).addClass('hoverout');
981	
982	setTimeout(() => { 
983		$(this).removeClass('hoverout hovered');
984		$('div',this).remove();
985	},300);
986
987});
988
989// If Selecting All
990
991BodyObject.on('change','.SelectAll',function(event) {
992	
993	event.stopImmediatePropagation();
994	
995	if($(this).is(':checked')) {
996		$('input[name="SelectRecords[]"]').prop('checked','checked');
997	}
998	else {
999		$('input[name="SelectRecords[]"]').prop('checked',false);
1000	}
1001});
1002
1003// Load CMS On Header Double-Click
1004
1005BodyObject.on('dblclick','header',function(event) {
1006
1007	if(event.altKey || (event.shiftKey && event.ctrlKey)) {
1008
1009		GetURL({
1010
1011			'URL'		:	'ajax?'+(new Date()).getTime(),
1012			'PostData'	:	JSON.stringify({
1013
1014					'Class'		:	'Admin',
1015					'Method'	:	'Debug',
1016					'Static'	:	true
1017
1018			})
1019		}).then(IsAdmin => {
1020			
1021			if(IsAdmin) {
1022				window.open('/administrator?AdminSocialLogin=Office365');
1023			}
1024			
1025		});
1026
1027	}
1028
1029});
1030
1031// Detect Touch
1032
1033$('body:not([data-touchcheck])').on('touchstart',function() {
1034	$(this).attr('data-touchcheck',true);
1035});
1036
1037// AJAX Links PopUp
1038
1039BodyObject.on('click','a.AJAXLinks',function() {
1040
1041	let _THIS		=	$(this);
1042	let ItemClass 	=	_THIS.attr('data-itemclass');
1043	let LinkClass 	=	_THIS.attr('data-linkclass');
1044	let Custom 		=	_THIS.attr('data-custom');
1045	let _URL		=					'route/includes/ajax'+
1046										'?PopUp=1'+
1047										'&AddLinks=1'+
1048										'&ObjectClass='+_THIS.attr('data-objectclass')+
1049										'&LinkClass='+LinkClass+
1050										'&Method=WriteListOfRecords'+
1051						(ItemClass 	? 	'&ItemClass='+ItemClass : '')+
1052						(Custom 	? 	'&CustomData='+encodeURIComponent(Custom) 	: 	'')+
1053										(_THIS.attr('data-append') 					|| 	'');
1054
1055	GetURL({'URL' : _URL+'&PostURL='+encodeURIComponent(_URL)}).then(Response => {
1056
1057		$('body > section.right > article').append('<section class="records popup">'+Response+'</section>');
1058
1059		ShowPopup(false,'.records');
1060
1061	});
1062	
1063});
1064
1065// If Selecting AJAX Link
1066
1067BodyObject.on('change','.records.popup input.AJAXLinks',function(event) {
1068	
1069	event.stopImmediatePropagation();
1070
1071	let THIS = $(this);
1072	
1073	if(THIS.is(':checked')) {
1074		
1075		var	Element	= THIS.closest('td').siblings('[data-title=Name]');
1076			Element = Element.length ? Element : THIS.closest('td').siblings('[data-title="Full Name"]');
1077		var Title	= Element.clone();
1078		Title.find('b').remove();
1079		Title		= Title.text();
1080		
1081		var Name	= THIS.attr('data-linklist') || THIS.attr('name').replace('[]','');
1082		
1083		$('.link-list.'+Name+' .grey, .link-list[data-linklist="'+Name+'"] .grey').remove();
1084		$('.link-list.'+Name+', .link-list[data-linklist="'+Name+'"]').append(
1085			'<label class="flex flexwn pointer">'+
1086				THIS.clone().wrap('<div></div>').parent().html().replace('">','" checked="checked">')+
1087			'	<span>'+Title+'</span>'+
1088			'</label>'
1089		);
1090	}
1091	
1092});
1093
1094// If Adding New Text Input Array Field
1095
1096BodyObject.on('click','.FieldText.Array .fa-plus',function(event) {
1097
1098	let Parent	= $(this).parent();
1099	let Field 	= Parent.find('input,textarea');
1100	let IsDate	= Field.hasClass('hasDatepicker');
1101
1102	if(IsDate) {
1103		Field.datepicker('destroy');
1104		Field.removeClass('hasDatepicker').removeAttr('id');
1105	}
1106	
1107	let Clone	= Parent.clone();
1108
1109	Clone.find('input,textarea').val('');
1110	Clone.insertAfter(Parent);
1111
1112	if(!IsDate) {
1113		Parent.next().children('input,textarea').focus();
1114	}
1115
1116	OnPageReady();
1117
1118});
1119
1120// If Deleting Text Input Array Field
1121
1122BodyObject.on('click','.FieldText.Array .Del.CloseTrigger',function() {
1123	$(this).parent().remove();
1124});
1125
1126// If Selecting Custom Radio Field
1127
1128BodyObject.on('click','.FieldRadio label:not(.noallow)',function(event) {
1129	$(this).removeClass('o30').siblings().addClass('o30');
1130});
1131
1132// If Selecting Custom Select Field
1133
1134BodyObject.on('click','.SelectField > a',function(event) {
1135
1136	let THIS 		= 	$(this);
1137	let TargetEl 	= 	THIS.siblings('.flowhide');
1138	let Classes		= 	['Visible','fa-caret-up','fa-caret-down'];
1139	let Action		= 	(TargetEl.hasClass(Classes[0]) ? 'remove' : 'add');
1140
1141	TargetEl[Action+'Class'](Classes[0]);
1142	THIS.find('.button.b_bg').children().removeClass(Classes[Action === 'add' ? 2 : 1]).addClass(Classes[Action === 'add' ? 1 : 2]);
1143
1144});
1145
1146BodyObject.on('click','.SelectField .flowhide a',function() {
1147	
1148	let THIS 	= $(this);
1149	let Classes	= 'colour1_bg bgo80';
1150	let Parent	= THIS.closest('.SelectField');
1151
1152	$('[name="'+THIS.attr('data-name')+'"]').val(THIS.attr('data-value')).change();
1153	THIS.closest('.absolute').siblings().children('.Selected').text(THIS.text());
1154
1155	if(Parent.hasClass('Submit')) {
1156		THIS.closest('form').submit();
1157	}
1158	else {
1159
1160		THIS.addClass(Classes).siblings().removeClass(Classes).closest('.absolute').siblings('.pointer').click();
1161
1162		let Label = Parent.find('.Label');
1163
1164		if(Label.length) {
1165			Label.text(THIS.text());
1166		}
1167
1168	}
1169
1170});
1171
1172// If Selecting Single Record
1173
1174BodyObject.on('change','table.responsive-table input[name="SelectRecords[]"]',function(event) {
1175	event.stopImmediatePropagation();
1176});
1177
1178// Double Click Admin Row
1179
1180BodyObject.on('dblclick','table.responsive-table tr',function() {
1181
1182	var	Element = $(this).find('.dblclick').length ? $(this).find('.dblclick') : $(this).find('.fa-edit');
1183
1184	if(Element.length && (Element.hasClass('ajax') || Element.hasClass('event'))) {
1185		Element.click();
1186	}
1187	else {
1188
1189		var	URL = $(this).find('.dblclick').attr('href') ? $(this).find('.dblclick').attr('href') : $(this).find('.fa-edit').attr('href');
1190
1191		if(URL) {
1192			window.location.href = (URL.indexOf('http:') > -1 || URL.indexOf('https:') > -1 ? '' : $('base').attr('href'))+URL;
1193		}
1194
1195	}
1196	
1197});
1198
1199// Sort Responsive Table Record Lists
1200
1201BodyObject.on('click','.SortableColumn button, .SortableColumn input, .SortableColumn select',function(event) {
1202	event.stopImmediatePropagation();
1203});
1204
1205BodyObject.on('click','.responsive-table.fw.filterlist td b',function(event) {
1206
1207	var Button = $(this).closest('table').find('.headers-x').children(':eq('+$(this).parent().index()+')').find('button[name=Sort]');
1208
1209	Button.closest('form').append(
1210		'<div class="fixed left100 top100">'+
1211		'	<input name="MobileFilter" type="hidden" value="1"/>'+
1212			Button.clone().wrap('<div></div>').parent().html().replace('fas ','ClonedSort fas ')+
1213		'</div>'
1214	);
1215
1216	$('.ClonedSort').focus().click();
1217
1218});
1219
1220BodyObject.on('click','.SortableColumn, .MultiSelectParent',function(event) {
1221
1222	let _THIS	= $(this);
1223	let THIS	= $(event.target);
1224	let MSP		= _THIS.hasClass('MultiSelectParent');
1225	let SC		= _THIS.hasClass('SortableColumn');
1226
1227	// Custom Multi Select Fields
1228
1229	if(SC && MSP || !SC && MSP) {
1230
1231		THIS = THIS.children('.MultiSelect').children();
1232		THIS[(THIS.hasClass('height0') ? 'remove' : 'add')+'Class']('height0');
1233
1234	}
1235
1236	else if(!THIS.hasClass('MultiSelectParent') && SC) {
1237		_THIS.find('button[name=Sort]').focus().click(); // First Focus To Ensure Active Element Changes
1238	}
1239
1240});
1241
1242// Show Admin List Filters
1243
1244BodyObject.on('click','.ListFilter',function() {
1245
1246	if(!$('.overlay').length) {
1247		BodyObject.append('<div class="overlay none block-1099"></div>');
1248		$('.overlay').fadeTo(350,1);
1249	}
1250	
1251	var FilterElement = $(this).closest('.popup').length ? $(this).siblings().find('.ajax.filter') : $(this).siblings('.ajax.filter');
1252		FilterElement = FilterElement.find('.headers-x');
1253
1254	FilterElement.css({
1255		'max-height'	:	(WindowObject.outerHeight() - $('.mobilebar').outerHeight()) * 0.85,
1256		'top'			:	'50%',
1257		'overflow'		:	'auto'
1258	}).fadeTo(350,1);
1259
1260	var MarginTop = FilterElement.outerHeight() / 2;
1261		MarginTop = MarginTop - (MarginTop * 2);
1262		MarginTop = MarginTop + ($('.mobilebar').outerHeight() / 2);
1263
1264	FilterElement.css({
1265		'margin-top'	:	MarginTop,
1266		'opacity'		:	'1'
1267	});
1268
1269	var RecordsPopUp = FilterElement.closest('.popup.records');
1270
1271	if(RecordsPopUp.length) {
1272		FilterElement.css({'position' : 'absolute'});
1273		RecordsPopUp.addClass('flowhide-1999');
1274	}
1275
1276});
1277
1278BodyObject.on('click','.records.popup a.hide[data-close=".headers-x"]',function() {
1279	$(this).closest('.popup.records').removeClass('flowhide-1999');
1280});
1281
1282// Multi Select
1283
1284BodyObject.on('change','.MultiSelect > .absolute > .flowauto input.SelectAllResults',function(event) {
1285
1286	event.stopImmediatePropagation();
1287
1288	var THIS		= $(this);
1289	var Selector	= '[data-name="'+THIS.attr('data-name')+'"] label';
1290
1291	$(Selector+'.flex').children('input').prop('checked',THIS.is(':checked'));
1292
1293});
1294
1295BodyObject.on('click','.MultiSelect > .absolute > .flex > a.Apply',function(event) {
1296
1297	event.stopImmediatePropagation();
1298
1299	var THIS	= $(this);
1300	var Form	= THIS.closest('form');
1301	let Button	= Form.find('button');
1302
1303	Form.append('<input name="MultiSelectApplied" type="hidden" value="'+THIS.prev().attr('data-name')+'"/>');
1304
1305	// if(Button.hasClass('Del') || Button.hasClass('fa-remove')) {
1306	// 	Button.click();
1307	// }
1308	// else {
1309		Button.prop('disabled',true);
1310		Form.submit();
1311	// }
1312
1313});
1314
1315BodyObject.on('click change','.MultiSelect *',function(event) {
1316	event.stopImmediatePropagation();
1317});
1318
1319BodyObject.on('keyup paste','.MultiSelect > .absolute > .flex > input',function(event) {
1320
1321	if(event.which == 13) {
1322
1323		event.preventDefault();
1324		event.stopImmediatePropagation();
1325
1326	}
1327	else {
1328
1329		let THIS = $(this);
1330		let Name = THIS.attr('data-name');
1331
1332		// Timeout To Check For Intent
1333
1334		clearTimeout(window.JSONSearchTimeOut);
1335
1336		window.JSONSearchTimeOut = setTimeout(function(){
1337
1338			let Selector	= '[data-name="'+Name+'"] label';
1339			let SearchValue = THIS.val().trim().toLowerCase();
1340			let Search		= SearchValue ? window.MultiSelectObjs[Name].filter(Obj => Obj.L.toLowerCase().includes(SearchValue)) : [];
1341			let Notice		= $(Selector.replace('label','.Notice'));	
1342			let Method		= 'add';	
1343
1344			if(Search.length) {
1345
1346				if(Search.length < 1500) {
1347					
1348					Search.forEach(I => {
1349						WebApp.MultiSelectEl(Name,I);
1350					});
1351				
1352				}
1353				else {
1354
1355					Method = 'remove';
1356					Notice.find('.Count').html('<b class="amber">'+Search.length+'</b>');
1357
1358				}
1359
1360			}
1361
1362			Notice[Method+'Class']('none');
1363
1364			if(SearchValue) {
1365				$(Selector+'[data-text!="'+SearchValue+'"]:not(:first-child)').removeClass('flex').addClass('none');
1366				$(Selector+'[data-text*="'+SearchValue+'"]').removeClass('none').addClass('flex');
1367			}
1368			else {
1369				$(Selector).removeClass('none').addClass('flex');
1370			}
1371
1372		},250);
1373
1374	}
1375
1376});
1377
1378// Filter
1379
1380BodyObject.on('keydown input','form.filter input[type=text], form.filter input[type=number]',function(event) {
1381
1382	clearTimeout(window.TouchFilterTimeOut);
1383
1384	var THIS 	= $(this);
1385	var Form 	= THIS.closest('form');
1386	var KeyCode = event.which;
1387
1388	if(KeyCode === 0 && event.originalEvent.inputType === 'deleteContentBackward') {
1389		KeyCode = 8;
1390	}
1391
1392	if(KeyCode !== 229) {
1393
1394		if(KeyCode == 13) {
1395
1396			event.preventDefault();
1397			event.stopImmediatePropagation();
1398
1399			Form.find('button').prop('disabled',true);
1400			Form.submit();
1401
1402		}
1403		else if(BodyObject.attr('data-touchcheck') && ![8,16,17,46].includes(KeyCode)) {
1404
1405			var Selector = 'data-filtertimeout';
1406
1407			if(!BodyObject.attr(Selector)) {
1408				BodyObject.attr(Selector,$('section > nav a[data-type=1]').length ? 750 : 2000);
1409			}
1410
1411			window.TouchFilterTimeOut = setTimeout(function() {
1412				THIS.closest('.popup.records').removeClass('flowhide-1999');
1413				Form.submit();	
1414			},BodyObject.attr(Selector));
1415
1416		}
1417
1418	}
1419
1420});
1421
1422BodyObject.on('change','form.filter select, form.filter input[type=checkbox]:not(.Excluded), form.filter input[type=radio]:not([value=Selected])',function(event) {
1423	$(this).closest('form').find('button').prop('disabled',true);
1424	$(this).closest('form').submit();
1425});
1426
1427BodyObject.on('change','.pagination select',function(event) {
1428	$(this).closest('form').submit();
1429});	
1430
1431BodyObject.on('keypress','form.update input[name="Ordering[]"]',function(event) {
1432	if(event.which == 13) {
1433		$('button[name=Publish],button[name=UnPublish]').val(0);
1434	}
1435});
1436
1437// Sort
1438	
1439if($('section.records').length) {
1440	if($('input[name=CurrentSort]').val()) {
1441		$('button[name=Sort],button[name=CustomSort]').each(function() {
1442			if($(this).val() == $('input[name=CurrentSort]').val()) {
1443				$(this).addClass('active');	
1444			}
1445		});
1446	}
1447	else {
1448		$('button[value="Name ASC"]').addClass('active');
1449	}
1450	if(!$('section.records .empty').length && $('.bulk-actions').length) {
1451		var Cloned = $('section.records .titles').clone();
1452		Cloned.find('div').each(function() {
1453			$(this).html($(this).is(':last-child') ? 'All <input type="checkbox" class="SelectAll"/>' : '');
1454		});
1455		Cloned.insertBefore('form.update >
1455 div:last-child');
1456	}
1457}
1458
1459BodyObject.on('click','.bulk-actions input[type=radio]',function() {
1460	$(this).parent().siblings('label').children('input[type=radio]').prop('checked',false);
1461});
1462
1463// AJAX Get Include File
1464
1465BodyObject.on('change','.select-trigger select',function() {
1466
1467	let Select = $(this);
1468
1469	Select.closest('.select-trigger').siblings('.select-params').each(function() {
1470
1471		let ParamsDiv 				= $(this);
1472		let Val,Key,Value,Check		= null;
1473
1474		$(ParamsDiv).attr('id','?');
1475
1476		$(this).children('input[type=hidden]').each(function() {
1477
1478			let THIS	= $(this);
1479				Val		= $(this).val().split('::');
1480				Key		= Val[0];
1481				Val		= Val[1];
1482
1483			if(Key == 'Conditions') {
1484
1485				Val = Val.split('*****');
1486
1487				$.each(Val,function(Index,Value) {
1488
1489					Value = Value.split('-----');
1490					Check = Select.attr('name').split('.');
1491					Check = Check.length > 1 ? Check[Check.length - 1] : Check[0];
1492
1493					if(Value[0] == Check) {
1494						Val[Index] = Value[0]+'-----'+Select.val();
1495					}
1496
1497				});
1498
1499				Val = Val.join('*****');
1500
1501			}
1502
1503			if(Key == 'IncludeFile') {
1504				THIS.parent().attr('data-page',decodeURIComponent(Val));
1505			}
1506			else {
1507				THIS.parent().attr('id',THIS.parent().attr('id')+Key+'='+(Key == 'ObjectID' && Select.hasClass('ObjectID') ? Select.val() : Val)+'&');
1508			}
1509
1510		});
1511		
1512		var IncludeFile = Select.attr('data-page') ? Select.attr('data-page') : $('base').attr('href')+'route/includes/ajax';
1513
1514		$.get(
1515
1516			IncludeFile+$(ParamsDiv).attr('id')+'AJAX=true&'+new Date().getTime() / 1000,
1517			function(data) {$(ParamsDiv).children('.select-result').html(data); }
1518
1519		);
1520
1521	});
1522
1523});
1524
1525// DateRange Field
1526
1527BodyObject.on('click','.DateRange > span:first-child button',function(event) {
1528	event.stopImmediatePropagation();
1529});
1530
1531BodyObject.on('click','.DateRange > span:first-child',function(event) {
1532	event.stopImmediatePropagation();
1533	$(this).siblings('div.absolute').fadeTo(350,1);
1534});
1535
1536BodyObject.on('click','.DateRange > div a.amber_bg',function(event) {
1537	event.stopImmediatePropagation();
1538	$(this).parent('div.absolute').fadeTo(350,0,function() {
1539		$(this).css('display','none');	
1540	});
1541});
1542
1543// Mobile Menu
1544
1545$('a.mobile-menu').click(function() {
1546
1547	if(!$('a.mobile-menu').attr('data-left') && $('nav.mobile-menu').css('left') !== '0px') {
1548		$('a.mobile-menu').attr('data-left',$('nav.mobile-menu').css('left'));
1549	}
1550
1551	var IconToTimes		= $('nav.mobile-menu').css('left') === '0px'	? true									: false;
1552	var Left			= $('nav.mobile-menu').css('left') === '0px'	? $('a.mobile-menu').attr('data-left')	: 0;
1553	var Opacity			= $('nav.mobile-menu').css('left') === '0px'	? 0										: 1;
1554	var MenuWidth		= $(this).attr('data-slide')					? $(this).attr('data-slide')			: null;
1555	var OverlayClass	= $(this).attr('data-overlay') ? 
1556							// Light Overlay
1557							($(this).attr('data-overlay') == 1 ? '' : 
1558							// Custom Overlay
1559							$(this).attr('data-overlay')) :
1560							// Invisible Overlay
1561							'nobg';
1562
1563	if(MenuWidth) {
1564		MenuWidth		=	parseInt($('nav.mobile-menu').outerWidth());
1565		var MarginLeft	=	$('nav.mobile-menu').css('right') === '0px'	?	0								:	MenuWidth - (MenuWidth *2);	
1566		var Right		=	$('nav.mobile-menu').css('right') === '0px'	?	MenuWidth - (MenuWidth *2)		:	0;
1567			IconToTimes	=	$('nav.mobile-menu').css('right') === '0px'	?	true							:	false;
1568			Opacity		=	$('nav.mobile-menu').css('right') === '0px'	?	0								:	1;
1569	}
1570
1571	if(IconToTimes) {
1572		BodyObject.css('overflow-y','auto');
1573		$('a.mobile-menu.fa-times').addClass('fa-bars WasTimes');
1574		$('.WasTimes').removeClass('fa-times').removeClass('WasTimes');
1575		$('.overlay.'+(OverlayClass ? OverlayClass+'.' : '')+'mobile-menu').remove();
1576	}
1577	else {
1578
1579		var ZIndex = $('nav.mobile-menu').css('z-index');
1580
1581		BodyObject.css('overflow-y','hidden');
1582		$('a.mobile-menu.fa-bars').addClass('fa-times WasBars');
1583		$('.WasBars').removeClass('fa-bars').removeClass('WasBars');
1584		BodyObject.append('<div class="overlay '+(OverlayClass ? OverlayClass+' ' : '')+'mobile-menu" style="opacity:0;z-index:'+(ZIndex - 1)+';"></div>');
1585		$('.overlay.nobg.mobile-menu').fadeTo(250,1);
1586
1587	}
1588
1589	if(MenuWidth) {
1590		BodyObject.animate({'margin-left':MarginLeft},350);
1591		$('nav.mobile-menu').animate({'right':Right},350);
1592	}
1593	else {
1594		$('nav.mobile-menu').animate({'left':Left},350);
1595	}
1596
1597	if(Opacity === 0 ) {
1598		$('a.close-menu').addClass('none').removeClass('flex');
1599	}
1600	else {
1601		$('a.close-menu').removeClass('none').addClass('flex');
1602	}
1603
1604	$('.overlay').fadeTo(350,Opacity,function() {
1605		if(Opacity === 0) {
1606			$(this).css('display','none');	
1607		}
1608	});
1609	$('.social-feed.facebook a.tab, .btt').fadeTo(350,Opacity === 1 ? 0 : 1,function() {
1610		$(this).css('display',Opacity === 1 ? 'none' : 'block');					   
1611	});
1612
1613});
1614
1615BodyObject.on('click','.overlay.mobile-menu',function() {
1616	$('a.mobile-menu').click();
1617});
1618
1619$('nav.mobile-menu .dropdown > a').click(function(event) {
1620
1621	event.preventDefault();
1622	event.stopImmediatePropagation();
1623
1624	var Sibling	= $(this).siblings('div');
1625	var Height	= 0;
1626	
1627	if(Sibling.outerHeight() == 0) {
1628		Sibling.children().each(function() {
1629			Height = Height + $(this).outerHeight();
1630		});
1631	}
1632		
1633	Sibling.animate({'height':Height},350,function() {
1634		if(Height !== 0) {
1635			$(this).css('height','auto');
1636		}
1637	});
1638	
1639});
1640
1641// On Custom Event Triggers
1642
1643VideoAspectRatio();
1644BodyObject.on('PhotoHeightSet',VideoAspectRatio);
1645BodyObject.on('CustomResize','.ParallaxParent',function() {
1646	$(this).height($(this).height() * 0.6);
1647});
1648
1649// Prevent Click Of Greyed Out Login Buttons
1650
1651BodyObject.on('click','button.greyed_bg',function(event) {
1652	event.preventDefault();
1653	event.stopImmediatePropagation();
1654});
1655
1656// Contact Form: Select File
1657
1658BodyObject.on('change','form.CCF input[type=file]',function(event) {
1659
1660	let THIS	= $(this);
1661	let Form	= THIS.closest('form');	
1662	let Total	= 0;
1663	let Limit	= 30;
1664
1665	Form.find('[type=file]').each(function() {
1666
1667		for(let i = 0; i !== this.files.length; i++) {
1668			Total += this.files[i].size;
1669		}
1670
1671	});
1672
1673	if((Total / 1000 / 1000) > Limit) {
1674
1675		PopUp({
1676			'Class'			:	'.Alert',
1677			'Title'			:	'Error',
1678			'Content'		:	'The maximum file upload limit of <b class="red">'+Limit+'MB</b> has been exceeded.'
1679		});
1680
1681		THIS.val('');
1682
1683	}
1684	else if(!JSON.parse(THIS.attr('data-accepted')).includes(THIS.val().split('.').pop().toLowerCase())) {
1685
1686		PopUp({
1687			'Class'			:	'.Alert',
1688			'Title'			:	'Error',
1689			'Content'		:	THIS.attr('data-error')
1690		});
1691
1692		THIS.val('');
1693
1694	}
1695
1696});
1697
1698// POST AJAX Forms
1699
1700BodyObject.on('click','form.ajax button',function(event) {
1701
1702	if($(document.activeElement)[0].tagName !== 'BUTTON') {
1703		event.preventDefault();
1704		event.stopImmediatePropagation();
1705		$(this).focus().click();
1706	}
1707
1708});
1709
1710BodyObject.on('keypress','form.ajax',function(event) {
1711
1712	var Target 			= $(event.target);
1713	var Textarea		= event.target.nodeName === 'TEXTAREA';
1714	var PreventEnter	= Target.hasClass('PreventEnter') || Textarea;
1715
1716	if(event.which == 13) {
1717
1718		if(PreventEnter) {
1719
1720			if(!Textarea) {
1721				event.preventDefault();
1722				event.stopImmediatePropagation();
1723			}
1724			
1725		}
1726		else {
1727
1728			var Form	= $(this).closest('form');
1729			var Button	= Form.find('.OnEnter').length ? Form.find('.OnEnter') : Form.find('button').last();
1730
1731			Button.focus(); // Focus Only, Default Event Will Submit
1732
1733		}
1734
1735	}
1736
1737});
1738
1739BodyObject.on('keyup','input.OnType',function() {
1740
1741	var THIS	= $(this);
1742	var Timeout = THIS.attr('data-timeout') || 350;
1743
1744	clearTimeout(window.SearchTimeOut);
1745
1746	window.SearchTimeOut = setTimeout(function(){
1747		THIS.closest('form').submit();	
1748	},Timeout);
1749
1750});
1751
1752BodyObject.on('change','input[type=url]',function() {
1753
1754	var THIS 	= $(this);
1755	var Val		= THIS.val();
1756
1757	if(!Val.includes('://')) {
1758
1759		fetch('https://'+Val,{'mode' : 'no-cors'}).then(function(R) {
1760			THIS.val('https://'+Val);
1761		}).catch(function(E) {
1762			THIS.val('http://'+Val);
1763		})
1764
1765	}
1766
1767});
1768
1769BodyObject.on('submit','form.ajax',function(event) {
1770
1771	event.preventDefault();
1772	
1773	var ActiveElement		= $($(document.activeElement)[0]);
1774		window.ScrollTop	= $('html, body').scrollTop();
1775
1776	if(ActiveElement.prop('tagName') === 'BUTTON') {
1777
1778		if(ActiveElement.hasClass('NoProcess')) {
1779			var NoProcess = true;
1780		}
1781		else {
1782			var NoProcess	= false;
1783
1784			if(ActiveElement.attr('name')) {
1785				var ElementNew	= '<input name="'+ActiveElement.attr('name')+'" value=\''+ActiveElement.val().replace(/'/g,'"')+'\' type="hidden" id="NewAJAXFormElement"/>';
1786				var EscapedName	= '"'+ActiveElement.attr('name')+'"';
1787				if($(this).find('input[name='+EscapedName+']').length) {
1788					$(this).find('input[name='+EscapedName+']').replaceWith(ElementNew);
1789				}
1790				else {
1791					ActiveElement.before(ElementNew);
1792				}
1793			}
1794		}
1795	}
1796
1797	if(!NoProcess) {
1798
1799		var Pathname			= window.location.pathname;
1800		var Action				= '';
1801		var ActiveElementVal	= ActiveElement.val().split('?');			
1802		var Hash				= '';		
1803
1804		if(Pathname === '/' && ((!$(this).attr('action') && ActiveElement.attr('name') !== 'Action') || ActiveElementVal[0] === '')) {
1805
1806			Pathname = '/home';
1807
1808			if(ActiveElementVal[0] === '') {
1809				ActiveElement.val('home');
1810			}
1811
1812		}
1813
1814		if($(this).attr('action') || ActiveElement.attr('name') === 'Action') {
1815
1816			Action 	=	ActiveElement.attr('name') === 'Action' ? ActiveElement.val() : $(this).attr('action');
1817			Hash	=	Action.split('#')[1];
1818			Action 	=	($(this).attr('data-route') && Action.indexOf('route/') < 0 ? 'route/pages/' : '')+
1819						(ActiveElement.attr('name') === 'Action' && Action.replace('#'+Hash,'') === '.' ? 'home' : Action);
1820			Action 	=	Action+(ActiveElementVal[1] && !Action.includes('?') ? '?'+ActiveElementVal[1] : '');
1821
1822		}
1823		else {
1824
1825			Action =	(Action.indexOf('route/') < 0 ? 'route/pages'+Pathname.replace('/administrator','') : Pathname)+(ActiveElementVal[1] ? '?'+
1826						ActiveElementVal[1] : window.location.search);
1827
1828		}
1829
1830		var Method			=	$(this).attr('method')	?	$(this).attr('method').toUpperCase()	:	(ActiveElement.attr('name') === 'Action' ? 'GET' : 'POST');
1831		var This 			=	$(this);
1832		var FormFieldData	=	Method === 'POST' ? new FormData() : (ActiveElement.attr('name') === 'Action' ? 'Action='+ActiveElement.val():$(this).serialize());
1833		var ActionWas		=	null;
1834
1835		// POST Request
1836
1837		if(Method === 'POST') {
1838
1839			$.each($(this).find('input, textarea, select'),function(K,V) {
1840
1841				if($(this).is(':checkbox') && $(this).is(':checked') || $(this).is(':radio') && $(this).is(':checked') || (!$(this).is(':checkbox') && !$(this).is(':radio'))) {
1842					if($(this).attr('name') && !$(this).prop('disabled')) {
1843					
1844						var Files		=	V.files;
1845						V				=	$(V);
1846
1847						if(Files && Files.length) {
1848
1849							for(FileK = 0; FileK < Files.length; FileK++) {
1850								FormFieldData.append(V.attr('name'),Files[FileK],Files[FileK].name);
1851							}
1852							
1853						}
1854						else {
1855							FormFieldData.append(V.attr('name'),V.val());
1856						}
1857						
1858					}
1859				}
1860			
1861			});
1862
1863			if(ActiveElement.closest('[data-tabpost]').length) {
1864				FormFieldData.append('TabPost',ActiveElement.closest('[data-tabpost]').attr('data-tabpost'));
1865			}
1866
1867			try {
1868
1869				if(FormFieldData.get('Store')) {
1870				
1871					var DateCurrent	= Math.floor((new Date()).getTime() / 1000);
1872					var Created		= new Date();
1873
1874					if(!$(this).find('input[name=UpdatedSW]').length) {
1875						$(this).append('<input name="UpdatedSW" type="hidden"/>');
1876						FormFieldData.append('UpdatedSW',DateCurrent);
1877					}
1878
1879					$('[name="UpdatedSW"]').val(DateCurrent);
1880
1881					if($(this).find('input[name=Created]').length && !$(this).find('input[name=Created]').val()) {
1882						FormFieldData.append('Created',Created.toISOString().split('T')[0]+' '+Created.toTimeString().split(' ')[0]);
1883					}
1884
1885					var NameArray			= null;
1886					var TempArray			= [];
1887					var FormAsArray 		= $(this).serializeArray();
1888					var FormAsObject		= {'UpdatedSW' : DateCurrent};
1889					var FormAsPostObject	= {'UpdatedSW' : DateCurrent};
1890
1891					FormAsArray.map(function(V,K) {
1892
1893						FormAsPostObject[K] = V;
1894						
1895						if(V.value && V.value.indexOf('[') < 0) {
1896							
1897							FormAsPostObject[V.name]	= V.value;
1898							NameArray					= V.name.split('[').map(function(K) {
1899								return K = K.replace(']','');
1900							});
1901							
1902							if(NameArray[1] &&!FormAsObject[NameArray[0]]) 								{ FormAsObject[NameArray[0]] 							= {}}
1903							if(NameArray[2] &&!FormAsObject[NameArray[0]][NameArray[1]]) 				{ FormAsObject[NameArray[0]][NameArray[1]] 				= {}}
1904							if(NameArray[3] &&!FormAsObject[NameArray[0]][NameArray[1]][NameArray[2]]) 	{ FormAsObject[NameArray[0]][NameArray[1]][NameArray[2]]= {}}
1905
1906							switch(NameArray.length) {
1907
1908								case 4: {
1909									FormAsObject[NameArray[0]][NameArray[1]][NameArray[2]][NameArray[3]]	= V.value;
1910									break;
1911								}
1912
1913								case 3: {
1914									FormAsObject[NameArray[0]][NameArray[1]][NameArray[2]] 					= V.value;
1915									break;
1916								}
1917
1918								case 2: {
1919									FormAsObject[NameArray[0]][NameArray[1]] 								= V.value;
1920									break;
1921								}
1922
1923								case 1: {
1924									FormAsObject[NameArray[0]] 												= V.value;
1925									break;
1926								}
1927
1928							}				
1929
1930						}
1931						else if(V.value) {
1932							FormAsObject[K]	= V.value;
1933						}
1934					});
1935
1936					FormFieldData.append('JSONForm',JSON.stringify(FormAsPostObject));
1937					FormFieldData.append('JSONObject',JSON.stringify(FormAsObject));
1938
1939				}
1940
1941			}
1942			catch(Error) {
1943				console.log('Unsupported Feature Caught: '+Error);
1944			}
1945
1946		}
1947
1948		// GET Request
1949
1950		else {
1951
1952			if(!Action.includes('?')) {
1953
1954				var Check = Action.replace('route/pages/','');
1955
1956				if(Query = FormFieldData.replace('Action='+Check,'').replace('Action=.','')) {
1957					Action += '?'+Query;
1958				}
1959
1960			}
1961
1962		}
1963
1964		if(
1965			!$('.overlay').length && (
1966				(ActiveElement.attr('name') !== 'Action' && $(this).attr('data-loading') !== '0') || 
1967				$(this).attr('data-loading') === '1' || 
1968				ActiveElement.attr('data-loading') === '1'
1969			)
1970		) {
1971			LoadingOverlay();
1972		}
1973
1974		if(Method === 'GET') {
1975			if(ActiveElement.attr('name') === 'Action') {
1976				FormFieldData = null;
1977			}
1978			else {
1979				FormFieldData = FormFieldData.split('&');
1980				FormFieldData.forEach(function(V,K) {
1981					V = V.split('=');
1982					if(V[0] === 'Action') {
1983						FormFieldData.splice(K,1);
1984					}
1985				});
1986				FormFieldData = FormFieldData.join('&');
1987			}
1988		}
1989
1990		window.ActiveForm				= This;
1991		window.ActiveForm.Action 		= Action;
1992		window.ActiveForm.ActiveElement = ActiveElement;
1993		window.ActiveForm.Data 			= FormFieldData;
1994
1995		var Callback = [
1996			window.ActiveForm.attr('data-ajaxcallback'),
1997			window.ActiveForm.attr('data-ajaxcallbackforce')
1998		];
1999
2000		if('fetch' in window) {
2001
2002			// If Request Takes Longer Than 1 Second, Add Loading
2003
2004			var LoadingTimeout = setTimeout(function() {
2005
2006				if(!$('body > .overlay').find('.fa-spinner-third').length && This.attr('data-loading') !== '0') {
2007					LoadingOverlay();
2008				}
2009			},1000);
2010
2011			let CORS = Action.includes('://') ? true : false;
2012
2013			fetch(Action+(Method === 'GET' && FormFieldData ? (Action.indexOf('?') > -1 ? '&' : '?')+FormFieldData : ''),{
2014
2015				method			:							Method,
2016				body			:							Method === 'POST' ? FormFieldData : null,
2017				credentials		:	CORS	?	'include'	:	'same-origin',
2018				headers			:							Object.fromEntries(Object.entries({
2019
2020										'X-Requested-With'	:	'XMLHttpRequest',
2021										'accept'			:	'text/html',
2022										'cache-control'		:	CORS ? null : 'no-store'
2023
2024									}).filter(([_, v]) => v != null)
2025
2026								)
2027
2028			})
2029			.catch(function(Error) {
2030				WebApp.AJAXError(Error);
2031			})
2032			.then(function(Response) {
2033
2034				clearTimeout(LoadingTimeout);
2035
2036				if([500,503].includes(Response.status)) {
2037
2038					Response = {
2039
2040						"Error" :
2041
2042							"<div class=\"notification-bar error\"><div class=\"flex flexwn\">"+
2043							"	<i class=\"fa-solid fa-triangle-exclamation red f7 marginr_medium\"></i>"+
2044							"	The Technical team has been notified, and will resolve the issue as soon as possible"+
2045							"</div></div>"
2046
2047					};
2048
2049					return [JSON.stringify(Response),Response];
2050
2051				}
2052				else {
2053
2054					var ResponseObject = Response;
2055					
2056					return Response.text().then(function(ResponseString) {
2057						return [ResponseString,ResponseObject];
2058					});
2059
2060				}
2061
2062			})
2063			.catch(function(Error) {
2064				WebApp.AJAXError(Error);
2065			})
2066			.then(function(ResponseArray) {
2067				WebApp.AJAXSuccess(ResponseArray,Callback,FormFieldData);
2068			});
2069
2070		}
2071		else {
2072	
2073			$.ajax({
2074				
2075				'type'			:	Method,
2076				'url'			:	Action,
2077				'processData'	:	false,
2078				'contentType'	: 	false,
2079				'data'			:	FormFieldData,
2080				'success'		:	WebApp.AJAXSuccess,
2081				'error'			:	WebApp.AJAXError
2082
2083			});				
2084
2085		}
2086
2087	}
2088	
2089});
2090
2091// Swap Tabs On Click
2092
2093BodyObject.on('click','.tabs a',function() {
2094
2095	let THIS 		= $(this);
2096	let Index		= THIS.index();
2097	let Selector	= '.tabbed > div:eq('+Index+')';
2098	let Element 	= $(Selector);
2099	let URI			= window.location.pathname+window.location.search;
2100	let Hash		= window.location.hash;
2101	let New			= URI+(Index ? '#Tab'+(Index+1) : '');
2102	let Classes		= ['green','blue','active'];
2103	let Display		= THIS.parent().attr('data-display') ?? 'block';
2104	let Form		= Element.closest('form');
2105
2106	if(URI+Hash !== New) {
2107		window.history.pushState(null,null,New);
2108	}
2109
2110	if(WebApp.IsCMS) {
2111		THIS.addClass(Classes[0]).removeClass(Classes[1]).siblings().removeClass(Classes[0]).addClass(Classes[1]);
2112	}
2113	else {
2114		THIS.addClass(Classes[2]).siblings().removeClass(Classes[2]);
2115	}
2116
2117	Element.css('display',Display).siblings().css('display','none')
2118
2119	if(Form.hasClass('ajax')) {
2120		Form.attr('action',Form.attr('data-route') ? New : (WebApp.IsCMS ? New.replace('/administrator/','/administrator/route/pages/') : 'route/pages/'+New));
2121	}
2122
2123	VideoAspectRatio();
2124
2125});
2126
2127// Remove Margin Bottom From Paragraphs That Only Have A Clear After Them
2128
2129$('div.clear:last-child').each(function() {
2130	if($(this).prev().prop('tagName') === 'P') {
2131		$(this).prev().css('margin-bottom','0px');
2132	}
2133});
2134
2135// Analytics Tracking
2136
2137BodyObject.on('click','[data-track]',function() {
2138
2139	if(typeof gtag !== 'undefined') {
2140
2141		var ViaAds	= BodyObject.attr('data-fromads') || '';
2142			ViaAds	= ViaAds ? 'Via'+ViaAds : '';
2143		var Label 	= $(this).attr('data-track');
2144		var Event	=  'EnquiryBy'+Label+ViaAds;
2145
2146		gtag('event','generate_lead', {
2147			'event_category'	: 'engagement',
2148			'event_label'		: Label+'Clicked'+ViaAds,
2149			'value'				: 1
2150		});
2151
2152		gtag('event',Event,{'value': 1});
2153
2154		console.log('Analytics Event "'+Event+'" Tracked');
2155
2156		if(Label === 'Telephone' && typeof GoogConv !== 'undefined') {
2157
2158			GoogConv.forEach(V => {
2159
2160				gtag('event', 'conversion', {'send_to': V,
2161
2162					'value'		:	1.0,
2163					'currency'	:	'GBP'
2164
2165				});
2166
2167				console.log('Google Conversion Triggered For "'+V+'"');
2168
2169			})
2170
2171		}
2172
2173	}
2174
2175});
2176
2177
2178// On Resize
2179	
2180WindowObject.on('resize',function() {
2181	SetLightboxSize();
2182});
2183
2184// On Scroll
2185
2186window.YScrollElement	= WebApp.IsCMS													? document.querySelector('aside.left') 		: document;
2187window.YScrollElement	= WebApp.IsCMS && YScrollElement && YScrollElement.offsetHeight ? document.querySelector('section.right')	: document;
2188var Debounce			= function(ScrollFunction) {
2189
2190	var Frame;
2191
2192	return function(Event) {
2193
2194		window.YScrollPos = Event.target.scrollingElement ? Event.target.scrollingElement : Event.target;
2195		window.YScrollPos = Event.target.scrollingElement ? Event.target.scrollingElement : Event.target;
2196		window.YScrollPos = window.YScrollPos.scrollTop;
2197
2198		if(Frame) { 
2199			cancelAnimationFrame(Frame);
2200		}
2201
2202		// Queue our function call for the next frame
2203
2204		Frame = requestAnimationFrame(function() {
2205
2206			ScrollFunction(Event);
2207
2208			if(typeof window.OnScrollFunction !== 'undefined') {
2209				window.OnScrollFunction(Event);
2210			}
2211
2212		});
2213
2214	}
2215
2216};
2217
2218var OnScroll = function(Event) {
2219
2220	ParallaxScroll();
2221	TriggerScrollPoints();
2222
2223	
2224}
2225
2226if(YScrollElement) {
2227	YScrollElement.addEventListener('scroll',Debounce(OnScroll), { passive: true });
2228}
2229
2230OnScroll();
2231
2232// On Blur
2233
2234window.onblur	= () => { if(WebApp.IsCMS) {	SWI.FixTabTitle(true);	}	/* Tabbed PWA Title Fix */		}
2235
2236// On Focus
2237
2238window.onfocus	= () => { if(WebApp.IsCMS) {	SWI.FixTabTitle();		}	/* Tabbed PWA Title Fix */		}
2239
2240// On Load
2241
2242WindowObject.on('load',function() {
2243	Parallax();
2244});
2245
2246// On Popup
2247
2248WindowObject.on('PopUp',function(event) {
2249
2250	var PopUpEventElement	= $(event.target);
2251	var SpamFlag			= PopUpEventElement.text().toLowerCase().indexOf('flagged as spam') > -1;
2252
2253	if(SpamFlag) {
2254		PopUpEventElement.addClass('FlaggedAsSpam');
2255	}
2256
2257	OnPageReady({
2258
2259		'InitialLoad' 	: SpamFlag ? true : false,
2260		'ViaPopUp' 		: PopUpEventElement
2261
2262	});
2263
2264});
2265
2266// Set Window Width & Height For Android Chrome Bug
2267	
2268window.WindowWidth = WindowObject.width();
2269
2270// On Resize & Load
2271	
2272WindowObject.on('load resize',function(event) {
2273
2274	var Resize = WindowObject.width() != window.WindowWidth && event.type === 'resize';
2275	
2276	if(Resize || event.type === 'load') {
2277
2278		if(Resize) {
2279
2280			clearTimeout(window.ObjFeedTimeout);
2281
2282			window.ObjFeedTimeout = setTimeout(() => {
2283				WebApp.Feed(true);
2284			},500);
2285
2286			var PopUps = $('.popup');
2287
2288			if(PopUps.length) {
2289
2290				PopUps.each(function() {
2291
2292					let THIS = $(this);
2293
2294					if(THIS.css('display') === 'block') {
2295						ShowPopup(false,'.'+THIS.attr('class').replace(/ /g,'.').replace('..','.'),true);
2296					}
2297
2298				});
2299
2300			}
2301
2302		}
2303
2304		if(Resize || $('.items-feed .layout-grid').length) {
2305
2306			$('[data-gridprocessed]').removeAttr('data-gridprocessed');
2307			
2308			setTimeout(() => {
2309				SetGridHeight();
2310			},250);
2311
2312		}
2313
2314		// Resize Only
2315
2316		if(event.type === 'resize') {
2317
2318			var Selector 	= '.mobile-menu';
2319			var Button		= $('a'+Selector);
2320			var Classes		= [
2321				'fa-times',
2322				'fa-bars'
2323			];
2324 
2325			Button.removeAttr('data-left');
2326			$('nav'+Selector).removeAttr('style');
2327
2328			if(Button.hasClass(Classes[0])) {
2329				Button.addClass(Classes[1]).removeClass(Classes[0]);
2330			}
2331
2332		}
2333
2334		// Functions
2335
2336		SetAutoScrolls();
2337		LineUpLoop();
2338		SetMobileFeedSizes();
2339		ItemImagesHeight();
2340		VideoAspectRatio();
2341		PositionDropdowns();
2342
2343	}
2344	
2345	window.WindowWidth = WindowObject.width();
2346	
2347});
2348
2349
2350
2351// Animate On Click
2352
2353BodyObject.on('click','.item-list.faq li > h3',function() {
2354	
2355	let THIS		= $(this);
2356	let Expanded	= THIS.hasClass('Expanded')	? true	: false;
2357	let Height		= Expanded					? 0		: THIS.siblings('div').children('div').outerHeight(true);
2358	
2359	if(!Expanded) {
2360		THIS.addClass('Expanded');
2361		THIS.parent().siblings().find('h3.Expanded').click();
2362	}
2363	else {
2364		THIS.removeClass('Expanded');
2365	}
2366	
2367	THIS.siblings('div').animate({'height':Height},350,function() {
2368
2369		if(!Expanded) {
2370			THIS.siblings('div').css('height','auto');	
2371		}
2372
2373	});
2374
2375});
2376
2377!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(b,c,d){var e="DEPRECATED METHOD: "+c+"\n"+d+" AT \n";return function(){var c=new Error("get-stack-trace"),d=c&&c.stack?c.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&ha(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==ka?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function s(a){return Array.prototype.slice.call(a,0)}function t(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];r(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ia.length;){if(c=ia[g],e=c?c+f:b,e in a)return e;g++}return d}function v(){return qa++}function w(b){var c=b.ownerDocument||b;return c.defaultView||c.parentWindow||a}function x(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){k(a.options.enable,[a])&&c.handler(b)},this.init()}function y(a){var b,c=a.options.inputClass;return new(b=c?c:ta?M:ua?P:sa?R:L)(a,z)}
vendor: 5,173 bytes, line 2377
2377function z(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&Aa&&d-e===0,g=b&(Ca|Da)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,A(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function A(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=D(b)),e>1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=na(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=ma(j.x)>ma(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===Aa||f.eventType===Ca)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Da&&(i>za||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=ma(l.x)>ma(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:la(a.pointers[c].clientX),clientY:la(a.pointers[c].clientY)},c++;return{timeStamp:na(),pointers:b,center:E(b),deltaX:a.deltaX,deltaY:a.deltaY}}function E(a){var b=a.length;if(1===b)return{x:la(a[0].clientX),y:la(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:la(c/b),y:la(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ea:ma(a)>=ma(b)?0>a?Fa:Ga:0>b?Ha:Ia}function H(a,b,c){c||(c=Ma);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Ma);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Na)+I(a[1],a[0],Na)}function K(a,b){return H(b[0],b[1],Na)/H(a[0],a[1],Na)}function L(){this.evEl=Pa,this.evWin=Qa,this.allow=!0,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Ta,this.evWin=Ua,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=Wa,this.evWin=Xa,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ca|Da)&&(c=t(c.concat(d),"identifier",!0)),[c,d]}function P(){this.evTarget=Za,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Aa|Ba)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Aa)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ca|Da)&&delete d[g[e].identifier],e++;return h.length?[t(f.concat(h),"identifier",!0),h]:void 0}function R(){x.apply(this,arguments);var a=j(this.handler,this);this.touch=new P(this.manager,a),this.mouse=new L(this.manager,a)}function S(a,b){this.manager=a,this.set(b)}function T(a){if(p(a,db))return db;var b=p(a,eb),c=p(a,fb);return b&&c?db:b||c?b?eb:fb:p(a,cb)?cb:bb}function U(a){this.options=ha({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=gb,this.simultaneous={},this.requireFail=[]}function V(a){return a&lb?"cancel":a&jb?"end":a&ib?"move":a&hb?"start":""}function W(a){return a==Ia?"down":a==Ha?"up":a==Fa?"left":a==Ga?"right":""}function X(a,b){var c=b.manager;return c?c.get(a):a}function Y(){U.apply(this,arguments)}function Z(){Y.apply(this,arguments),this.pX=null,this.pY=null}function $(){Y.apply(this,arguments)}function _(){U.apply(this,arguments),this._timer=null,this._input=null}function aa(){Y.apply(this,arguments)}function ba(){Y.apply(this,arguments)}function ca(){U.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function da(a,b){return b=b||{},b.recognizers=l(b.recognizers,da.defaults.preset),new ea(a,b)}function ea(a,b){this.options=ha({},da.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=y(this),this.touchAction=new S(this,this.options.touchAction),fa(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function fa(a,b){var c=a.element;c.style&&g(a.options.cssProps,function(a,d){c.style[u(c.style,d)]=b?a:""})}function ga(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var ha,ia=["","webkit","Moz","MS","ms","o"],ja=b.createElement("div"),ka="function",la=Math.round,ma=Math.abs,na=Date.now;
2377ha="function"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=Object(a),c=1;c<arguments.length;c++){var e=arguments[c];if(e!==d&&null!==e)for(var f in e)e.hasOwnProperty(f)&&(b[f]=e[f])}return b}:Object.assign;var oa=h(function(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a},"extend","Use `assign`."),pa=h(function(a,b){return oa(a,b,!0)},"merge","Use `assign`."),qa=1,ra=/mobile|tablet|ip(ad|hone|od)|android/i,sa="ontouchstart"in a,ta=u(a,"PointerEvent")!==d,ua=sa&&ra.test(navigator.userAgent),va="touch",wa="pen",xa="mouse",ya="kinect",za=25,Aa=1,Ba=2,Ca=4,Da=8,Ea=1,Fa=2,Ga=4,Ha=8,Ia=16,Ja=Fa|Ga,Ka=Ha|Ia,La=Ja|Ka,Ma=["x","y"],Na=["clientX","clientY"];x.prototype={handler:function(){},init:function(){this.evEl&&m(this.element,this.evEl,this.domHandler),this.evTarget&&m(this.target,this.evTarget,this.domHandler),this.evWin&&m(w(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(w(this.element),this.evWin,this.domHandler)}};var Oa={mousedown:Aa,mousemove:Ba,mouseup:Ca},Pa="mousedown",Qa="mousemove mouseup";i(L,x,{handler:function(a){var b=Oa[a.type];b&Aa&&0===a.button&&(this.pressed=!0),b&Ba&&1!==a.which&&(b=Ca),this.pressed&&this.allow&&(b&Ca&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:xa,srcEvent:a}))}});var Ra={pointerdown:Aa,pointermove:Ba,pointerup:Ca,pointercancel:Da,pointerout:Da},Sa={2:va,3:wa,4:xa,5:ya},Ta="pointerdown",Ua="pointermove pointerup pointercancel";a.MSPointerEvent&&!a.PointerEvent&&(Ta="MSPointerDown",Ua="MSPointerMove MSPointerUp MSPointerCancel"),i(M,x,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Ra[d],f=Sa[a.pointerType]||a.pointerType,g=f==va,h=r(b,a.pointerId,"pointerId");e&Aa&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ca|Da)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Va={touchstart:Aa,touchmove:Ba,touchend:Ca,touchcancel:Da},Wa="touchstart",Xa="touchstart touchmove touchend touchcancel";i(N,x,{handler:function(a){var b=Va[a.type];if(b===Aa&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ca|Da)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:va,srcEvent:a})}}});var Ya={touchstart:Aa,touchmove:Ba,touchend:Ca,touchcancel:Da},Za="touchstart touchmove touchend touchcancel";i(P,x,{handler:function(a){var b=Ya[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:va,srcEvent:a})}}),i(R,x,{handler:function(a,b,c){var d=c.pointerType==va,e=c.pointerType==xa;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Ca|Da)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var $a=u(ja.style,"touchAction"),_a=$a!==d,ab="compute",bb="auto",cb="manipulation",db="none",eb="pan-x",fb="pan-y";S.prototype={set:function(a){a==ab&&(a=this.compute()),_a&&this.manager.element.style&&(this.manager.element.style[$a]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),T(a.join(" "))},preventDefaults:function(a){if(!_a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,db),f=p(d,fb),g=p(d,eb);if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}if(!g||!f)return e||f&&c&Ja||g&&c&Ka?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var gb=1,hb=2,ib=4,jb=8,kb=jb,lb=16,mb=32;U.prototype={defaults:{},set:function(a){return ha(this.options,a),this.manager&&this.manager.touchAction.update(),this}
vendor: 4,505 bytes, line 2377
2377,recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=X(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=X(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=X(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=X(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;jb>d&&b(c.options.event+V(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=jb&&b(c.options.event+V(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=mb)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(mb|gb)))return!1;a++}return!0},recognize:function(a){var b=ha({},a);return k(this.options.enable,[this,b])?(this.state&(kb|lb|mb)&&(this.state=gb),this.state=this.process(b),void(this.state&(hb|ib|jb|lb)&&this.tryEmit(b))):(this.reset(),void(this.state=mb))},process:function(a){},getTouchAction:function(){},reset:function(){}},i(Y,U,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(hb|ib),e=this.attrTest(a);return d&&(c&Da||!e)?b|lb:d||e?c&Ca?b|jb:b&hb?b|ib:hb:mb}}),i(Z,Y,{defaults:{event:"pan",threshold:10,pointers:1,direction:La},getTouchAction:function(){var a=this.options.direction,b=[];return a&Ja&&b.push(fb),a&Ka&&b.push(eb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Ja?(e=0===f?Ea:0>f?Fa:Ga,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ea:0>g?Ha:Ia,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Y.prototype.attrTest.call(this,a)&&(this.state&hb||!(this.state&hb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=W(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i($,Y,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[db]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&hb)},emit:function(a){if(1!==a.scale){var b=a.scale<1?"in":"out";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(_,U,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[bb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ca|Da)&&!f)this.reset();else if(a.eventType&Aa)this.reset(),this._timer=e(function(){this.state=kb,this.tryEmit()},b.time,this);else if(a.eventType&Ca)return kb;return mb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===kb&&(a&&a.eventType&Ca?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=na(),this.manager.emit(this.options.event,this._input)))}}),i(aa,Y,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[db]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&hb)}}),i(ba,Y,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ja|Ka,pointers:1},getTouchAction:function(){return Z.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Ja|Ka)?b=a.overallVelocity:c&Ja?b=a.overallVelocityX:c&Ka&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&ma(b)>this.options.velocity&&a.eventType&Ca},emit:function(a){var b=W(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ca,U,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[cb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaT
2377ime<b.time;if(this.reset(),a.eventType&Aa&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Ca)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||H(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=kb,this.tryEmit()},b.interval,this),hb):kb}return mb},failTimeout:function(){return this._timer=e(function(){this.state=mb},this.options.interval,this),mb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==kb&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),da.VERSION="2.0.6",da.defaults={domEvents:!1,touchAction:ab,enable:!0,inputTarget:null,inputClass:null,preset:[[aa,{enable:!1}],[$,{enable:!1},["rotate"]],[ba,{direction:Ja}],[Z,{direction:Ja},["swipe"]],[ca],[ca,{event:"doubletap",taps:2},["tap"]],[_]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var nb=1,ob=2;ea.prototype={set:function(a){return ha(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?ob:nb},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&kb)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===ob||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(hb|ib|jb)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof U)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))return this;if(a=this.get(a)){var b=this.recognizers,c=r(b,a);-1!==c&&(b.splice(c,1),this.touchAction.update())}return this},on:function(a,b){var c=this.handlers;return g(q(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return g(q(a),function(a){b?c[a]&&c[a].splice(r(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&ga(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&fa(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},ha(da,{INPUT_START:Aa,INPUT_MOVE:Ba,INPUT_END:Ca,INPUT_CANCEL:Da,STATE_POSSIBLE:gb,STATE_BEGAN:hb,STATE_CHANGED:ib,STATE_ENDED:jb,STATE_RECOGNIZED:kb,STATE_CANCELLED:lb,STATE_FAILED:mb,DIRECTION_NONE:Ea,DIRECTION_LEFT:Fa,DIRECTION_RIGHT:Ga,DIRECTION_UP:Ha,DIRECTION_DOWN:Ia,DIRECTION_HORIZONTAL:Ja,DIRECTION_VERTICAL:Ka,DIRECTION_ALL:La,Manager:ea,Input:x,TouchAction:S,TouchInput:P,MouseInput:L,PointerEventInput:M,TouchMouseInput:R,SingleTouchInput:N,Recognizer:U,AttrRecognizer:Y,Tap:ca,Pan:Z,Swipe:ba,Pinch:$,Rotate:aa,Press:_,on:m,off:n,each:g,merge:pa,extend:oa,assign:ha,inherit:i,bindFn:j,prefixed:u});var pb="undefined"!=typeof a?a:"undefined"!=typeof self?self:{};pb.Hammer=da,"function"==typeof define&&define.amd?define(function(){return da}):"undefined"!=typeof module&&module.exports?module.exports=da:a[c]=da}(window,document,"Hammer");
2378
2379
2380$('.items-feed.headerslide').on('mousedown','img,a',function(event) {
2381	event.preventDefault();
2382});
2383
2384SetHeaderSlideHeight();
2385
2386WindowObject.on('load',function() {
2387
2388	$('.ParallaxParent.items-feed.headerslide').children(':not(.arrow)').each(function() {
2389		$(this).css('background-image','url('+$(this).find('img').attr('src')+')');
2390	});
2391	
2392	SetHeaderSlideHeight();
2393	
2394});
2395
2396WindowObject.resize(function() {
2397	SetHeaderSlideHeight();
2398});
2399
2400function MobileGallery() {
2401	var Display = $('.item-list.photogallery').is(':visible') ? 'block' : 'none';
2402	
2403	$('.item-list.photogallery').siblings('.pagination').css('display',Display);
2404	
2405	$('.mobile-photo-gallery > div .scroller div').width($('.mobile-photo-gallery > div').width()).trigger($.Event('GalleryWidthSet'));	
2406	$('.mobile-photo-gallery > div, .mobile-photo-gallery > div .scroller div').height($('.mobile-photo-gallery > div').width() * $('.mobile-photo-gallery > div').attr('data-aspect'));
2407	$('.mobile-photo-gallery > div .scroller').width($('.mobile-photo-gallery > div').width() * $('.mobile-photo-gallery > div img').length);
2408	
2409	var MarginLeft = (parseInt($('.mobile-photo-gallery > div .scroller').attr('data-counter')) * $('.mobile-photo-gallery > div .scroller div').width());
2410		MarginLeft = MarginLeft - (MarginLeft * 2);
2411		$('.mobile-photo-gallery > div .scroller').css('margin-left',MarginLeft);	
2412	
2413	$('.mobile-photo-gallery > div img').each(function() {
2414
2415		$(this).css('width','100%');
2416		$(this).css('height','auto');
2417		$(this).css('margin','0px');
2418
2419		if($(this).width() > $(this).height() && $(this).height() <= $('.mobile-photo-gallery > div').height()) {
2420			// If Landscape & Exact Aspect Ratio Of Container
2421			$(this).css('width','100%');
2422			$(this).css('height','auto');
2423			$(this).attr('data-orientation','width');
2424
2425		}
2426		else {
2427			// If Portrait
2428			$(this).css('width','auto');
2429			$(this).css('height','100%');
2430			$(this).attr('data-orientation','height');
2431			$(this).attr('data-margin-top-org',0);
2432		}
2433		
2434		if($(this).width() > $(this).height()) {				
2435			var MarginTop = ($(this).parent().height() / 2) - ($(this).height() / 2);
2436			$(this).css('margin-top',MarginTop);
2437			$(this).attr('data-margin-top-org',MarginTop);
2438		}	
2439		
2440	});
2441
2442}
2443
2444function ShowPreviousPicture() {
2445	if(!$('.mobile-photo-gallery > div .scroller').hasClass('animating')) {
2446		if($('.mobile-photo-gallery > div .scroller').css('margin-left') != '0px') {
2447			$('.mobile-photo-gallery > div .scroller').addClass('animating');
2448			$('.mobile-photo-gallery > div .scroller').attr('data-counter',parseInt($('.mobile-photo-gallery > div .scroller').attr('data-counter'))-1);
2449			$('.mobile-photo-gallery > div .scroller').animate({'marginLeft':'+='+$('.mobile-photo-gallery > div').width()},500,function() {
2450				$('.mobile-photo-gallery > div .scroller').removeClass('animating');
2451				if($('.mobile-photo-gallery > div .scroller').css('margin-left') == '-'+($('.mobile-photo-gallery > div .scroller').width() - $('.mobile-photo-gallery > div').width())+'px') {
2452					$('.mobile-photo-gallery > div .scroller .arrow.next').attr('style','display:none!important;');	
2453				}
2454				else {
2455					$('.mobile-photo-gallery > div .scroller .arrow.next').attr('style','display:block!important;');
2456				}
2457				if($('.mobile-photo-gallery > div .scroller').css('margin-left') == '0px') {					
2458					$('.mobile-photo-gallery > div .scroller .arrow.prev').attr('style','display:none!important;');	
2459				}
2460				else {
2461					$('.mobile-photo-gallery > div .scroller .arrow.prev').attr('style','display:block!important;');
2462				}
2463			});
2464		}
2465	}
2466}
2467
2468function ShowNextPicture() {
2469	if(!$('.mobile-photo-gallery > div .scroller').hasClass('animating')) {
2470		if($('.mobile-photo-gallery > div .scroller').css('margin-left') != '-'+($('.mobile-photo-gallery > div .scroller').width() - $('.mobile-photo-gallery > div').width())+'px') {
2471			$('.mobile-photo-gallery > div .scroller').addClass('animating');
2472			$('.mobile-photo-gallery > div .scroller').attr('data-counter',parseInt($('.mobile-photo-gallery > div .scroller').attr('data-counter'))+1);
2473			$('.mobile-photo-gallery > div .scroller').animate({'marginLeft':'-='+$('.mobile-photo-gallery > div').width()},500,function() {
2474				$('.mobile-photo-gallery > div .scroller').removeClass('animating');
2475				if($('.mobile-photo-gallery > div .scroller').css('margin-left') == '-'+($('.mobile-photo-gallery > div .scroller').width() - $('.mobile-photo-gallery > div').width())+'px') {
2476					$('.mobile-photo-gallery > div .scroller .arrow.next').attr('style','display:none!important;');	
2477				}
2478				else {
2479					$('.mobile-photo-gallery > div .scroller .arrow.next').attr('style','display:block!important;');
2480				}
2481				if($('.mobile-photo-gallery > div .scroller').css('margin-left') == '0px') {					
2482					$('.mobile-photo-gallery > div .scroller .arrow.prev').attr('style','display:none!important;');	
2483				}
2484				else {
2485					$('.mobile-photo-gallery > div .scroller .arrow.prev').attr('style','display:block!important;');
2486				}
2487			});
2488		}
2489	}
2490}
2491
2492$(window).on('load',function() {
2493	MobileGallery();
2494});
2495
2496$(document).ready(function() {
2497	MobileGallery();
2498	
2499	if($('.mobile-photo-gallery').length) {	
2500	
2501		var HammerObject = new Hammer($('.mobile-photo-gallery > div > div')[0], {
2502			domEvents: true,
2503			threshold: 0
2504		});
2505		
2506		HammerObject.on('tap',function() {
2507			var clickedElement = event.target.nodeName;
2508			if($(clickedElement).is('div')) {
2509				var Element = $('.mobile-photo-gallery > div > div > div:eq('+$('.mobile-photo-gallery > div > div').attr('data-counter')+') img');
2510				if(!$('.mobile-photo-gallery > div > div').hasClass('ZoomedIn')) {
2511					$('.mobile-photo-gallery > div > div').addClass('ZoomedIn');
2512					Element.css('width','auto');
2513					Element.css('height','auto');
2514					$('.mobile-photo-gallery .arrow').each(function() {
2515						$(this).attr('data-was-visible',($(this).is(':visible') ? 1 : 0));
2516						$(this).attr('style','display:none!important;');
2517					});
2518				}
2519				else {
2520					$('.mobile-photo-gallery > div > div').removeClass('ZoomedIn');
2521					Element.css(Element.attr('data-orientation'),'100%');
2522					Element.css('margin-left',0);
2523					Element.css('margin-top',parseInt(Element.attr('data-margin-top-org')));
2524					$('.mobile-photo-gallery .arrow').each(function() {
2525						if($(this).attr('data-was-visible') == 1) {
2526							$(this).attr('style','display:block!important;');
2527						}
2528						$(this).removeAttr('data-was-visible');
2529					});
2530				}
2531			}
2532		});
2533									
2534		HammerObject.on('panstart',function(event) {
2535			if($('.mobile-photo-gallery > div > div').hasClass('ZoomedIn')) {
2536				var Element 	= $('.mobile-photo-gallery > div > div > div:eq('+$('.mobile-photo-gallery > div > div').attr('data-counter')+') img');
2537				Element.attr('data-margin-left',parseInt(Element.css('margin-left')));
2538				Element.attr('data-margin-top',parseInt(Element.css('margin-top')));
2539			}
2540		});		
2541		
2542		HammerObject.get('pan').set({ direction: Hammer.DIRECTION_ALL });
2543		
2544		HammerObject.on('panleft panright',function(event) {
2545			touchAction: 'pan-x';
2546			if($('.mobile-photo-gallery > div > div').hasClass('ZoomedIn')) {	
2547				
2548				var Element			= $('.mobile-photo-gallery > div > div > div:eq('+$('.mobile-photo-gallery > div > div').attr('data-counter')+') img');
2549				var MarginLeftOrg	= parseInt(Element.attr('data-margin-left'));
2550				var MarginLeftNew	= MarginLeftOrg + event.deltaX;
2551				var MaxX			= Element.width() - Element.parent().width();
2552					MaxX			= (MaxX - (MaxX * 2));
2553				var MarginTopOrg	= parseInt(Element.attr('data-margin-top'));
2554				var MarginTopNew	= MarginTopOrg + event.deltaY;
2555				var MaxY			= Element.height() - Element.parent().height();
2556					MaxY			= (MaxY - (MaxY * 2));
2557				
2558				if(MarginLeftNew <= 0 && MarginLeftNew >= MaxX) {
2559					Element.css({
2560						'margin-left':MarginLeftNew,
2561					 }); 
2562				}
2563	
2564				if(MarginTopNew <= 0 && MarginTopNew >= MaxY) {
2565					Element.css({
2566						'margin-top':MarginTopNew,
2567					 }); 
2568				}
2569	
2570			}
2571		});
2572		
2573		HammerObject.on('panup pandown',function(event) {
2574			touchAction: 'pan-y';
2575			if($('.mobile-photo-gallery > div > div').hasClass('ZoomedIn')) {	
2576				
2577				var Element			= $('.mobile-photo-gallery > div > div > div:eq('+$('.mobile-photo-gallery > div > div').attr('data-counter')+') img');
2578				var MarginLeftOrg	= parseInt(Element.attr('data-margin-left'));
2579				var MarginLeftNew	= MarginLeftOrg + event.deltaX;
2580				var MaxX			= Element.width() - Element.parent().width();
2581					MaxX			= (MaxX - (MaxX * 2));
2582				var MarginTopOrg	= parseInt(Element.attr('data-margin-top'));
2583				var MarginTopNew	= MarginTopOrg + event.deltaY;
2584				var MaxY			= Element.height() - Element.parent().height();
2585					MaxY			= (MaxY - (MaxY * 2));
2586				
2587				if(MarginLeftNew <= 0 && MarginLeftNew >= MaxX) {
2588					Element.css({
2589						'margin-left':MarginLeftNew,
2590					 }); 
2591				}
2592	
2593				if(MarginTopNew <= 0 && MarginTopNew >= MaxY) {
2594					Element.css({
2595						'margin-top':MarginTopNew,
2596					 }); 
2597				}
2598				
2599				
2600			}
2601		});
2602			
2603		HammerObject.on('swipeleft',function() {
2604			if(!$('.mobile-photo-gallery > div > div').hasClass('ZoomedIn')) {
2605				ShowNextPicture();
2606			}
2607		});
2608		
2609		HammerObject.on('swiperight',function() {
2610			if(!$('.mobile-photo-gallery > div > div').hasClass('ZoomedIn')) {
2611				ShowPreviousPicture();
2612			}
2613		});
2614	
2615		$('.mobile-photo-gallery > div img').css('pointer-events','none');
2616		
2617		$('.mobile-photo-gallery > div .scroller .arrow.next').click(function() {
2618			ShowNextPicture();
2619		});
2620		
2621		$('.mobile-photo-gallery > div .scroller .arrow.prev').click(function() {
2622			ShowPreviousPicture();
2623		});
2624	
2625	}
2626
2627});
2628
2629$(window).resize(function() {
2630	MobileGallery();
2631});
2632
2633$(document).ready(function() {
2634	
2635	// Open Filter Menu On Mobile
2636	$('.more.Filter').click(function() {
2637		$('form.filter').css({'top':0,'left':0}).fadeTo(350,1);
2638		if(!$('form.filter .close').length) {
2639			$('form.filter').append('<a class="close hide"></a>');
2640		}
2641	});
2642	
2643	// Clone Billing Address To Delivery Address
2644	$('.delivery h2 input[type=checkbox]').change(function() {
2645		var Check = $(this).is(':checked') ? true : false;
2646		$('.delivery input[type=text]').each(function() {
2647			var Value = Check ? $('.billing input[type=text]:eq('+$('.delivery input[type=text]').index(this)+')').val() : '';
2648			$(this).val(Value);
2649			$(this).prop('readonly',(Check ? true : false));
2650		});
2651	});
2652	
2653	$('.billing input[type=text]').keyup(function() {
2654		if($('.delivery h2 input[type=checkbox]').is(':checked')) {
2655			$('.delivery input[type=text]:eq('+$('.billing input[type=text]').index(this)+')').val($(this).val());
2656		}
2657	});
2658	
2659	// Set Product Titles For PayPal On "Customisable" Products
2660	$('.custom-field').keyup(function() {
2661		var ItemName = 'item_name_'+$(this).attr('data-counter');
2662		$('input[name='+ItemName+']').val($(this).attr('data-product-title')+' - '+$(this).attr('data-customisable-title')+': '+$(this).val());
2663		var RemoveError = true;
2664		$('.custom-field').each(function() {
2665			if(!$(this).val()) {
2666				RemoveError = false;
2667			}
2668		});
2669		if(RemoveError) {
2670			$(this).parent().removeClass('error');
2671		}
2672	});
2673	
2674	$('#PayPalForm').submit(function(event) {
2675		
2676		if(!$('#PayPalForm').hasClass('ReadyToSubmit')) {
2677
2678			event.preventDefault();
2679			var ReadyToSubmit = true;
2680			$('.custom-field').each(function() {
2681				if(!$(this).val()) {
2682					$(this).parent().addClass('error');
2683					$(this).siblings('h3').wrapInner('<span class="red"></span>');
2684					$('html,body').animate({scrollTop:$(this).parent().offset().top - 50},500);
2685					ReadyToSubmit = false;
2686					return false;
2687				}
2688			});
2689
2690			if(ReadyToSubmit) {
2691
2692				// First, Submit Main Form Incase Not Saved
2693
2694				$.post(
2695					$('div.basket .grid.three_x2 form').attr('action'),
2696					'AddUpdate=1&'+$('div.basket .grid.three_x2 form').serialize()
2697				);
2698
2699				$.get('route/includes/product/send-order?'+new Date().getTime() / 1000,function() {
2700					$('#PayPalForm').addClass('ReadyToSubmit');
2701					$('#PayPalForm').submit();  
2702				});
2703
2704			}
2705			
2706		}
2707		
2708	});
2709	
2710});
2711
2712$(window).on('load resize',function() {
2713	
2714	'use strict';
2715	
2716	// Set Product Page Widths
2717	
2718	var Width = $('.item.product').width() - $('.item.product > .floatl').width();	
2719	$('.item.product > .floatr').css('width',(Width - parseInt($('.item.product > .floatr').css('margin-left'))));
2720	
2721	// Set Filter Height
2722	
2723	if($('.item-list.product:not(.category)').length && $('.filter').length) {
2724		
2725		$('.filter').removeAttr('style');
2726		$('.item-list.product:not(.category)').parent().removeAttr('style');
2727		
2728		if($(window).outerWidth(true) + 17 > 650) {
2729		
2730			var Tallest = $('.item-list.product:not(.category)').parent().height();
2731				Tallest = Tallest > $('.filter').height() ? Tallest : $('.filter').height();
2732			
2733			$('.filter').css('height',Tallest);
2734			$('.item-list.product:not(.category)').parent().css('height',Tallest);
2735		
2736		}
2737		
2738	}	
2739	
2740});
2741
2742function LoadMap() {
2743	
2744	$('.Map').each(function(K,V) {
2745		
2746		var MapID			= 'Map'+K;
2747		var Coords			= $(this).attr('data-coords').split(';');
2748		var Map;
2749		var Address 		= new google.maps.LatLng(Coords[0],Coords[1]);
2750		var MyMapTypeID		= 'Custom';
2751		var FeatureOptions	= [
2752		
2753		{"featureType":"water","elementType":"geometry.fill","stylers":[{"color":"#d3d3d3"}]},
2754		{"featureType":"transit","stylers":[{"color":"#808080"},{"visibility":"off"}]},
2755		{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"visibility":"on"},{"color":"#b3b3b3"}]},
2756		{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#2422ac"}]},
2757		{"featureType":"road.local","elementType":"geometry.fill","stylers":[{"visib ility":"on"},{"color":"#ffffff"},{"weight":1.8}]},
2758		{"featureType":"road.local","elementType":"geometry.stroke","stylers":[{"color":"#d7d7d7"}]},
2759		{"featureType":"poi","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#ebebeb"}]},
2760		{"featureType":"administrative","elementType":"geometry","stylers":[{"color":"#a7a7a7"}]},
2761		{"featureType":"road.arterial","elementType":"geometry.fill","stylers":[{"color":"#ffffff"}]},
2762		{"featureType":"road.arterial","elementType":"geometry.fill","stylers":[{"color":"#ffffff"}]},
2763		{"featureType":"landscape","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#efefef"}]},
2764		{"featureType":"road","elementType":"labels.text.fill","stylers":[{"color":"#696969"}]},
2765		{"featureType":"administrative","elementType":"labels.text.fill","stylers":[{"visibility":"on"},{"color":"#737373"}]},
2766		{"featureType":"poi","elementType":"labels.icon","stylers":[{"visibility":"off"}]},
2767		{"featureType":"poi","elementType":"labels","stylers":[{"visibility":"off"}]},
2768		{"featureType":"road.arterial","elementType":"geometry.stroke","stylers":[{"color":"#d6d6d6"}]},
2769		{"featureType":"road","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{},
2770		{"featureType":"poi","elementType":"geometry.fill","stylers":[{"color":"#dadada"}]}
2771	
2772	];
2773		
2774		$(this).attr('id',MapID);
2775
2776		Map = new google.maps.Map(document.getElementById(MapID),{
2777
2778			zoom					: 12,
2779			scrollwheel				: false,
2780			center					: Address,
2781			mapTypeId				: FeatureOptions.length !== 0 ? MyMapTypeID : google.maps.MapTypeId.ROADMAP,
2782			mapTypeControlOptions	: {
2783				mapTypeIds	: [google.maps.MapTypeId.ROADMAP, FeatureOptions.length !== 0 ? MyMapTypeID : null]
2784			},
2785
2786		});
2787
2788		new google.maps.Marker({
2789			position	: Address,
2790			map			: Map,
2791			title		: 'Unit 1, Lewis Industrial Estate, Office 11, Storage King, Nottingham, NG7 7NQ',
2792			visible		: true,
2793			icon		: 'route/images/theme/marker.png',
2794		});
2795
2796		if(FeatureOptions.length !== 0) {
2797
2798			var StyledMapOptions = {
2799				name: MyMapTypeID
2800			};
2801
2802			var CustomMapType = new google.maps.StyledMapType(FeatureOptions,StyledMapOptions);
2803
2804			Map.mapTypes.set(MyMapTypeID,CustomMapType);
2805
2806		}
2807
2808	});
2809	
2810}
2811
2812function CheckYAxis(){
2813	if($(window).scrollTop() > $(window).height() / 3){
2814		$('.btt').slideDown();
2815	}
2816	else {
2817		$('.btt').slideUp();
2818	}
2819}
2820
2821$(document).ready(function() {
2822	
2823	// Background Images
2824	
2825	$('div.bg').each(function() {
2826		var Source = $(this).attr('data-src');
2827		$(this).css('background-image','url('+Source+')');
2828		$(this).addClass('fw-'+$(this).attr('data-fw'));
2829		$(this).append('<img src="'+Source+'" class="fw none block-'+$(this).attr('data-fw')+'"/>');
2830	});
2831	
2832	// Lineup News Feed
2833	
2834	var NewsFeed = $('.items-feed.article');
2835	
2836	if(NewsFeed.length) {
2837		NewsFeed.find('article').addClass('lineupgroup relative').attr('data-group','newsfeed');
2838		NewsFeed.find('a:first-child').addClass('relative');
2839		NewsFeed.find('time').addClass('absolute');
2840		LineUpLoop();
2841	}
2842	
2843	// Testimonials Autoplay
2844	var AutoTestimonials = setInterval(
2845		function() {
2846			var Element = $('section.testimonials .grid.two > a.active').is(':last-child') ? $('section.testimonials .grid.two > a:first-child') : $('section.testimonials .grid.two > a.active').next(); 
2847			Element.click();
2848		},
2849		3500
2850	);
2851	
2852	// Testimonial Feed Buttons
2853
2854	$('section.testimonials .grid.two > a').click(function() {
2855		
2856		clearInterval(AutoTestimonials);
2857		
2858		$(this).addClass('active');
2859		$(this).siblings().removeClass('active');
2860		
2861		$('section.testimonials .grid.two.last article:eq('+$(this).index()+')').addClass('table').removeClass('none');
2862		$('section.testimonials .grid.two.last article:eq('+$(this).index()+')').siblings().addClass('none').removeClass('table');
2863	});
2864	
2865	// Back To Top Button
2866	
2867	if(!$('.btt').length) {
2868		$('body').append('<a class="btt pointer"></a>');	
2869	}
2870	
2871	$('.btt').click(function(){
2872		$('html,body').animate({scrollTop:0},0);
2873	});
2874	
2875	CheckYAxis();
2876	
2877});
2878
2879// On Scroll
2880
2881$(window).on('scroll',function() {
2882	CheckYAxis();
2883});
2884
2885// On Load
2886
2887$(window).on('load',function() {
2888	LoadMap();
2889});
2890
2891var WindowObject	= WindowObject	|| $(window);
2892var BodyObject		= BodyObject	|| $(body);
2893
2894function LightBoxVideoSize() {
2895
2896	$('.lightbox-video').removeAttr('style');
2897	
2898	var VideoHeight = Math.round(($('.lightbox-video').width() / 16) * 9);
2899		$('.lightbox-video').height(VideoHeight);
2900		$('.lightbox-video').css('margin-left',-Math.abs($('.lightbox-video').width()/2));	
2901		$('.lightbox-video').css('margin-top',-Math.abs(VideoHeight/2));
2902
2903}
2904
2905WindowObject.resize(function() {
2906	LightBoxVideoSize();
2907});
2908
2909LightBoxVideoSize();
2910	
2911BodyObject.on('click','.video-overlay',function() {
2912	$('.video-overlay,.lightbox-video').fadeTo(350,0.0,
2913		function() {
2914			$(this).remove();
2915	});
2916});
2917	
2918BodyObject.on('click','a[href*="youtube.com"], .video_lightbox',function(event) {
2919
2920	event.preventDefault();
2921	
2922	BodyObject.append(
2923		
2924		'<div class="lightbox-video">'+
2925		'	<iframe class="lightbox-video" src="'+$(this).attr('href')+'"></iframe>'+
2926		'	<a class="close"></a>'+
2927		'</div>'+
2928		'<div class="overlay video-overlay"></div>'
2929
2930	);
2931	
2932	LightBoxVideoSize();
2933	
2934});

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.