PageSourceSearch

https://islandmotorsportcircuit.com/wp-content/themes/vimc/js/vimc-main.js?ver=1767203443

js islandmotorsportcircuit.com collected 2026-10-08 03:13:24 UTC 61,512 bytes, 1,428 lines download raw bytes

1/*!
2* jQuery Form Plugin
3* version: 3.51.0-2014.06.20
4* Requires jQuery v1.5 or later
5* Copyright (c) 2014 M. Alsup
6* Examples and documentation at: http://malsup.com/jquery/form/
7* Project repository: https://github.com/malsup/form
8* Dual licensed under the MIT and GPL licenses.
9* https://github.com/malsup/form#copyright-and-license
10*/
11!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):e("undefined"!=typeof jQuery?jQuery:window.Zepto)}(function(e){"use strict";function t(t){var r=t.data;t.isDefaultPrevented()||(t.preventDefault(),e(t.target).ajaxSubmit(r))}function r(t){var r=t.target,a=e(r);if(!a.is("[type=submit],[type=image]")){var n=a.closest("[type=submit]");if(0===n.length)return;r=n[0]}var i=this;if(i.clk=r,"image"==r.type)if(void 0!==t.offsetX)i.clk_x=t.offsetX,i.clk_y=t.offsetY;else if("function"==typeof e.fn.offset){var o=a.offset();i.clk_x=t.pageX-o.left,i.clk_y=t.pageY-o.top}else i.clk_x=t.pageX-r.offsetLeft,i.clk_y=t.pageY-r.offsetTop;setTimeout(function(){i.clk=i.clk_x=i.clk_y=null},100)}function a(){if(e.fn.ajaxSubmit.debug){var t="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(t):window.opera&&window.opera.postError&&window.opera.postError(t)}}var n={};n.fileapi=void 0!==e("<input type='file'/>").get(0).files,n.formdata=void 0!==window.FormData;var i=!!e.fn.prop;e.fn.attr2=function(){if(!i)return this.attr.apply(this,arguments);var e=this.prop.apply(this,arguments);return e&&e.jquery||"string"==typeof e?e:this.attr.apply(this,arguments)},e.fn.ajaxSubmit=function(t){function r(r){var a,n,i=e.param(r,t.traditional).split("&"),o=i.length,s=[];for(a=0;o>a;a++)i[a]=i[a].replace(/\+/g," "),n=i[a].split("="),s.push([decodeURIComponent(n[0]),decodeURIComponent(n[1])]);return s}function o(a){for(var n=new FormData,i=0;i<a.length;i++)n.append(a[i].name,a[i].value);if(t.extraData){var o=r(t.extraData);for(i=0;i<o.length;i++)o[i]&&n.append(o[i][0],o[i][1])}t.data=null;var s=e.extend(!0,{},e.ajaxSettings,t,{contentType:!1,processData:!1,cache:!1,type:u||"POST"});t.uploadProgress&&(s.xhr=function(){var r=e.ajaxSettings.xhr();return r.upload&&r.upload.addEventListener("progress",function(e){var r=0,a=e.loaded||e.position,n=e.total;e.lengthComputable&&(r=Math.ceil(a/n*100)),t.uploadProgress(e,a,n,r)},!1),r}),s.data=null;var c=s.beforeSend;return s.beforeSend=function(e,r){r.data=t.formData?t.formData:n,c&&c.call(this,e,r)},e.ajax(s)}function s(r){function n(e){var t=null;try{e.contentWindow&&(t=e.contentWindow.document)}catch(r){a("cannot get iframe.contentWindow document: "+r)}if(t)return t;try{t=e.contentDocument?e.contentDocument:e.document}catch(r){a("cannot get iframe.contentDocument: "+r),t=e.document}return t}function o(){function t(){try{var e=n(g).readyState;a("state = "+e),e&&"uninitialized"==e.toLowerCase()&&setTimeout(t,50)}catch(r){a("Server abort: ",r," (",r.name,")"),s(k),j&&clearTimeout(j),j=void 0}}var r=f.attr2("target"),i=f.attr2("action"),o="multipart/form-data",c=f.attr("enctype")||f.attr("encoding")||o;w.setAttribute("target",p),(!u||/post/i.test(u))&&w.setAttribute("method","POST"),i!=m.url&&w.setAttribute("action",m.url),m.skipEncodingOverride||u&&!/post/i.test(u)||f.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"}),m.timeout&&(j=setTimeout(function(){T=!0,s(D)},m.timeout));var l=[];try{if(m.extraData)for(var d in m.extraData)m.extraData.hasOwnProperty(d)&&l.push(e.isPlainObject(m.extraData[d])&&m.extraData[d].hasOwnProperty("name")&&m.extraData[d].hasOwnProperty("value")?e('<input type="hidden" name="'+m.extraData[d].name+'">').val(m.extraData[d].value).appendTo(w)[0]:e('<input type="hidden" name="'+d+'">').val(m.extraData[d]).appendTo(w)[0]);m.iframeTarget||v.appendTo("body"),g.attachEvent?g.attachEvent("onload",s):g.addEventListener("load",s,!1),setTimeout(t,15);try{w.submit()}catch(h){var x=document.createElement("form").submit;x.apply(w)}}finally{w.setAttribute("action",i),w.setAttribute("enctype",c),r?w.setAttribute("target",r):f.removeAttr("target"),e(l).remove()}}function s(t){if(!x.aborted&&!F){if(M=n(g),M||(a("cannot access response document"),t=k),t===D&&x)return x.abort("timeout"),void S.reject(x,"timeout");if(t==k&&x)return x.abort("server abort"),void S.reject(x,"error","server abort");if(M&&M.location.href!=m.iframeSrc||T){g.detachEvent?g.detachEvent("onload",s):g.removeEventListener("load",s,!1);var r,i="success";try{if(T)throw"timeout";var o="xml"==m.dataType||M.XMLDocument||e.isXMLDoc(M);if(a("isXml="+o),!o&&window.opera&&(null===M.body||!M.body.innerHTML)&&--O)return a("requeing onLoad callback, DOM not available"),void setTimeout(s,250);var u=M.body?M.body:M.documentElement;x.responseText=u?u.innerHTML:null,x.responseXML=M.XMLDocument?M.XMLDocument:M,o&&(m.dataType="xml"),x.getResponseHeader=function(e){var t={"content-type":m.dataType};return t[e.toLowerCase()]},u&&(x.status=Number(u.getAttribute("status"))||x.status,x.statusText=u.getAttribute("statusText")||x.statusText);var c=(m.dataType||"").toLowerCase(),l=/(json|script|text)/.test(c);if(l||m.textarea){var f=M.getElementsByTagName("textarea")[0];if(f)x.responseText=f.value,x.status=Number(f.getAttribute("status"))||x.status,x.statusText=f.getAttribute("statusText")||x.statusText;else if(l){var p=M.getElementsByTagName("pre")[0],h=M.getElementsByTagName("body")[0];p?x.responseText=p.textContent?p.textContent:p.innerText:h&&(x.responseText=h.textContent?h.textContent:h.innerText)}}else"xml"==c&&!x.responseXML&&x.responseText&&(x.responseXML=X(x.responseText));try{E=_(x,c,m)}catch(y){i="parsererror",x.error=r=y||i}}catch(y){a("error caught: ",y),i="error",x.error=r=y||i}x.aborted&&(a("upload aborted"),i=null),x.status&&(i=x.status>=200&&x.status<300||304===x.status?"success":"error"),"success"===i?(m.success&&m.success.call(m.context,E,"success",x),S.resolve(x.responseText,"success",x),d&&e.event.trigger("ajaxSuccess",[x,m])):i&&(void 0===r&&(r=x.statusText),m.error&&m.error.call(m.context,x,i,r),S.reject(x,"error",r),d&&e.event.trigger("ajaxError",[x,m,r])),d&&e.event.trigger("ajaxComplete",[x,m]),d&&!--e.active&&e.event.trigger("ajaxStop"),m.complete&&m.complete.call(m.context,x,i),F=!0,m.timeout&&clearTimeout(j),setTimeout(function(){m.iframeTarget?v.attr("src",m.iframeSrc):v.remove(),x.responseXML=null},100)}}}var c,l,m,d,p,v,g,x,y,b,T,j,w=f[0],S=e.Deferred();if(S.abort=function(e){x.abort(e)},r)for(l=0;l<h.length;l++)c=e(h[l]),i?c.prop("disabled",!1):c.removeAttr("disabled");if(m=e.extend(!0,{},e.ajaxSettings,t),m.context=m.context||m,p="jqFormIO"+(new Date).getTime(),m.iframeTarget?(v=e(m.iframeTarget),b=v.attr2("name"),b?p=b:v.attr2("name",p)):(v=e('<iframe name="'+p+'" src="'+m.iframeSrc+'" />'),v.css({position:"absolute",top:"-1000px",left:"-1000px"})),g=v[0],x={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(t){var r="timeout"===t?"timeout":"aborted";a("aborting upload... "+r),this.aborted=1;try{g.contentWindow.document.execCommand&&g.contentWindow.document.execCommand("Stop")}catch(n){}v.attr("src",m.iframeSrc),x.error=r,m.error&&m.error.call(m.context,x,r,t),d&&e.event.trigger("ajaxError",[x,m,r]),m.complete&&m.complete.call(m.context,x,r)}},d=m.global,d&&0===e.active++&&e.event.trigger("ajaxStart"),d&&e.event.trigger("ajaxSend",[x,m]),m.beforeSend&&m.beforeSend.c
11all(m.context,x,m)===!1)return m.global&&e.active--,S.reject(),S;if(x.aborted)return S.reject(),S;y=w.clk,y&&(b=y.name,b&&!y.disabled&&(m.extraData=m.extraData||{},m.extraData[b]=y.value,"image"==y.type&&(m.extraData[b+".x"]=w.clk_x,m.extraData[b+".y"]=w.clk_y)));var D=1,k=2,A=e("meta[name=csrf-token]").attr("content"),L=e("meta[name=csrf-param]").attr("content");L&&A&&(m.extraData=m.extraData||{},m.extraData[L]=A),m.forceSync?o():setTimeout(o,10);var E,M,F,O=50,X=e.parseXML||function(e,t){return window.ActiveXObject?(t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e)):t=(new DOMParser).parseFromString(e,"text/xml"),t&&t.documentElement&&"parsererror"!=t.documentElement.nodeName?t:null},C=e.parseJSON||function(e){return window.eval("("+e+")")},_=function(t,r,a){var n=t.getResponseHeader("content-type")||"",i="xml"===r||!r&&n.indexOf("xml")>=0,o=i?t.responseXML:t.responseText;return i&&"parsererror"===o.documentElement.nodeName&&e.error&&e.error("parsererror"),a&&a.dataFilter&&(o=a.dataFilter(o,r)),"string"==typeof o&&("json"===r||!r&&n.indexOf("json")>=0?o=C(o):("script"===r||!r&&n.indexOf("javascript")>=0)&&e.globalEval(o)),o};return S}if(!this.length)return a("ajaxSubmit: skipping submit process - no element selected"),this;var u,c,l,f=this;"function"==typeof t?t={success:t}:void 0===t&&(t={}),u=t.type||this.attr2("method"),c=t.url||this.attr2("action"),l="string"==typeof c?e.trim(c):"",l=l||window.location.href||"",l&&(l=(l.match(/^([^#]+)/)||[])[1]),t=e.extend(!0,{url:l,success:e.ajaxSettings.success,type:u||e.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},t);var m={};if(this.trigger("form-pre-serialize",[this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(t.beforeSerialize&&t.beforeSerialize(this,t)===!1)return a("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var d=t.traditional;void 0===d&&(d=e.ajaxSettings.traditional);var p,h=[],v=this.formToArray(t.semantic,h);if(t.data&&(t.extraData=t.data,p=e.param(t.data,d)),t.beforeSubmit&&t.beforeSubmit(v,this,t)===!1)return a("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[v,this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var g=e.param(v,d);p&&(g=g?g+"&"+p:p),"GET"==t.type.toUpperCase()?(t.url+=(t.url.indexOf("?")>=0?"&":"?")+g,t.data=null):t.data=g;var x=[];if(t.resetForm&&x.push(function(){f.resetForm()}),t.clearForm&&x.push(function(){f.clearForm(t.includeHidden)}),!t.dataType&&t.target){var y=t.success||function(){};x.push(function(r){var a=t.replaceTarget?"replaceWith":"html";e(t.target)[a](r).each(y,arguments)})}else t.success&&x.push(t.success);if(t.success=function(e,r,a){for(var n=t.context||this,i=0,o=x.length;o>i;i++)x[i].apply(n,[e,r,a||f,f])},t.error){var b=t.error;t.error=function(e,r,a){var n=t.context||this;b.apply(n,[e,r,a,f])}}if(t.complete){var T=t.complete;t.complete=function(e,r){var a=t.context||this;T.apply(a,[e,r,f])}}var j=e("input[type=file]:enabled",this).filter(function(){return""!==e(this).val()}),w=j.length>0,S="multipart/form-data",D=f.attr("enctype")==S||f.attr("encoding")==S,k=n.fileapi&&n.formdata;a("fileAPI :"+k);var A,L=(w||D)&&!k;t.iframe!==!1&&(t.iframe||L)?t.closeKeepAlive?e.get(t.closeKeepAlive,function(){A=s(v)}):A=s(v):A=(w||D)&&k?o(v):e.ajax(t),f.removeData("jqxhr").data("jqxhr",A);for(var E=0;E<h.length;E++)h[E]=null;return this.trigger("form-submit-notify",[this,t]),this},e.fn.ajaxForm=function(n){if(n=n||{},n.delegation=n.delegation&&e.isFunction(e.fn.on),!n.delegation&&0===this.length){var i={s:this.selector,c:this.context};return!e.isReady&&i.s?(a("DOM not ready, queuing ajaxForm"),e(function(){e(i.s,i.c).ajaxForm(n)}),this):(a("terminating; zero elements found by selector"+(e.isReady?"":" (DOM not ready)")),this)}return n.delegation?(e(document).off("submit.form-plugin",this.selector,t).off("click.form-plugin",this.selector,r).on("submit.form-plugin",this.selector,n,t).on("click.form-plugin",this.selector,n,r),this):this.ajaxFormUnbind().bind("submit.form-plugin",n,t).bind("click.form-plugin",n,r)},e.fn.ajaxFormUnbind=function(){return this.unbind("submit.form-plugin click.form-plugin")},e.fn.formToArray=function(t,r){var a=[];if(0===this.length)return a;var i,o=this[0],s=this.attr("id"),u=t?o.getElementsByTagName("*"):o.elements;if(u&&!/MSIE [678]/.test(navigator.userAgent)&&(u=e(u).get()),s&&(i=e(':input[form="'+s+'"]').get(),i.length&&(u=(u||[]).concat(i))),!u||!u.length)return a;var c,l,f,m,d,p,h;for(c=0,p=u.length;p>c;c++)if(d=u[c],f=d.name,f&&!d.disabled)if(t&&o.clk&&"image"==d.type)o.clk==d&&(a.push({name:f,value:e(d).val(),type:d.type}),a.push({name:f+".x",value:o.clk_x},{name:f+".y",value:o.clk_y}));else if(m=e.fieldValue(d,!0),m&&m.constructor==Array)for(r&&r.push(d),l=0,h=m.length;h>l;l++)a.push({name:f,value:m[l]});else if(n.fileapi&&"file"==d.type){r&&r.push(d);var v=d.files;if(v.length)for(l=0;l<v.length;l++)a.push({name:f,value:v[l],type:d.type});else a.push({name:f,value:"",type:d.type})}else null!==m&&"undefined"!=typeof m&&(r&&r.push(d),a.push({name:f,value:m,type:d.type,required:d.required}));if(!t&&o.clk){var g=e(o.clk),x=g[0];f=x.name,f&&!x.disabled&&"image"==x.type&&(a.push({name:f,value:g.val()}),a.push({name:f+".x",value:o.clk_x},{name:f+".y",value:o.clk_y}))}return a}
11,e.fn.formSerialize=function(t){return e.param(this.formToArray(t))},e.fn.fieldSerialize=function(t){var r=[];return this.each(function(){var a=this.name;if(a){var n=e.fieldValue(this,t);if(n&&n.constructor==Array)for(var i=0,o=n.length;o>i;i++)r.push({name:a,value:n[i]});else null!==n&&"undefined"!=typeof n&&r.push({name:this.name,value:n})}}),e.param(r)},e.fn.fieldValue=function(t){for(var r=[],a=0,n=this.length;n>a;a++){var i=this[a],o=e.fieldValue(i,t);null===o||"undefined"==typeof o||o.constructor==Array&&!o.length||(o.constructor==Array?e.merge(r,o):r.push(o))}return r},e.fieldValue=function(t,r){var a=t.name,n=t.type,i=t.tagName.toLowerCase();if(void 0===r&&(r=!0),r&&(!a||t.disabled||"reset"==n||"button"==n||("checkbox"==n||"radio"==n)&&!t.checked||("submit"==n||"image"==n)&&t.form&&t.form.clk!=t||"select"==i&&-1==t.selectedIndex))return null;if("select"==i){var o=t.selectedIndex;if(0>o)return null;for(var s=[],u=t.options,c="select-one"==n,l=c?o+1:u.length,f=c?o:0;l>f;f++){var m=u[f];if(m.selected){var d=m.value;if(d||(d=m.attributes&&m.attributes.value&&!m.attributes.value.specified?m.text:m.value),c)return d;s.push(d)}}return s}return e(t).val()},e.fn.clearForm=function(t){return this.each(function(){e("input,select,textarea",this).clearFields(t)})},e.fn.clearFields=e.fn.clearInputs=function(t){var r=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var a=this.type,n=this.tagName.toLowerCase();r.test(a)||"textarea"==n?this.value="":"checkbox"==a||"radio"==a?this.checked=!1:"select"==n?this.selectedIndex=-1:"file"==a?/MSIE/.test(navigator.userAgent)?e(this).replaceWith(e(this).clone(!0)):e(this).val(""):t&&(t===!0&&/hidden/.test(a)||"string"==typeof t&&e(this).is(t))&&(this.value="")})},e.fn.resetForm=function(){return this.each(function(){("function"==typeof this.reset||"object"==typeof this.reset&&!this.reset.nodeType)&&this.reset()})},e.fn.enable=function(e){return void 0===e&&(e=!0),this.each(function(){this.disabled=!e})},e.fn.selected=function(t){return void 0===t&&(t=!0),this.each(function(){var r=this.type;if("checkbox"==r||"radio"==r)this.checked=t;else if("option"==this.tagName.toLowerCase()){var a=e(this).parent("select");t&&a[0]&&"select-one"==a[0].type&&a.find("option").selected(!1),this.selected=t}})},e.fn.ajaxSubmit.debug=!1});
12
13if (!String.prototype.trim) {
14  String.prototype.trim = function () {
15    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
16  };
17}
18
19function createElement(type, className) {
20	var element = document.createElement(type);
21	if (className) {
22		element.className = className;
23	}
24	return element;
25}
26
27function createElementTree(elementList) {
28	if (elementList && elementList.length > 0) {
29		for (var i = elementList.length - 1; i >= 1; i--) {
30			var element = elementList[i];
31			var elementParent = elementList[i-1];
32			elementParent.appendChild(element);
33		}
34		return elementList[0];
35	}
36}
37
38function searchParentNodes(element, className) {
39	while(element.parentNode) {
40		element = element.parentNode;
41		if (element.className) {
42			var classList = element.className.split(' ');
43			if (classList.includes(className)) {
44				return element;
45			}
46		}
47	}
48	return false;
49}
50
51function setupSubMenu() {
52	var subMenuList = document.querySelectorAll('ul.sub-menu');
53	for (var i = subMenuList.length - 1; i >= 0; i--) {
54		var ul = subMenuList[i];
55		var collapsible = ul.parentNode;
56		var trigger = collapsible.querySelector('a');
57		trigger.className = 'trigger';
58		trigger.href = '#'+collapsible.id;
59		var collapsibleBlock = createElement('div', 'collapsibleBlock');
60		var innerBlock = createElement('div', 'inner-block');
61		collapsible.className += ' collapsible';
62		collapsible.appendChild(collapsibleBlock);
63		collapsibleBlock.appendChild(innerBlock);
64		innerBlock.appendChild(ul);
65	}
66}
67
68function setupCollapsible() {
69	function close(c, cb, ib) {
70		cb.style.height = ib.offsetHeight+"px";
71		window.requestAnimationFrame(function() {
72			c.setAttribute('data-open', 'closing');
73			window.requestAnimationFrame(function() {
74				cb.style.height = "0";
75			});
76		});
77	}
78
79	function setupTrigger(trigger) {
80		var target = document.querySelector(trigger.hash);
81		if (target) {
82			var collapsibleBlock = target.querySelector('.collapsibleBlock');
83			if (collapsibleBlock) {
84				collapsibleBlock.addEventListener('transitionend', function() {
85					if (target.getAttribute('data-open') === 'opening') {
86						target.setAttribute('data-open', 'open');
87					} else if (target.getAttribute('data-open') === 'closing') {
88						target.setAttribute('data-open', 'closed');
89					}
90					collapsibleBlock.removeAttribute('style');
91				});
92				var innerBlock = collapsibleBlock.querySelector('.inner-block');
93
94				trigger.addEventListener('click', function(event) {
95					if (target.getAttribute('data-open') === 'open') {
96						close(target, collapsibleBlock, innerBlock);
97					} else if (target.getAttribute('data-open') === 'closed') {
98						target.setAttribute('data-open', 'opening');
99						var collapseGroup = target.getAttribute('collapse-group');
100						if (collapseGroup) {
101							var parent = document.getElementById(collapseGroup);
102							if (parent) {
103								var groupOpenTarget = parent.querySelector('.collapsible[data-open="open"]');
104								if (groupOpenTarget) {
105									var cb = groupOpenTarget.querySelector('.collapsibleBlock');
106									var ib = groupOpenTarget.querySelector('.inner-block');
107									close(groupOpenTarget, cb, ib);
108								}
109							}
110						}
111						collapsibleBlock.style.height = innerBlock.offsetHeight+"px";
112					}
113					event.preventDefault();
114					return false;
115				});
116			}
117		}
118	}
119
120	var collapsibleList = document.querySelectorAll('.collapsible');
121	for (var i = collapsibleList.length - 1; i >= 0; i--) {
122		(function(collapsible) {
123			if (collapsible.getAttribute('data-open') !== 'open') {
124				collapsible.setAttribute('data-open', 'closed');
125			}
126			var multiTrigger = (collapsible.className.indexOf(' multi-trigger ') > -1);
127			var triggerList = collapsible.querySelectorAll('a.trigger');
128			for (var i = 0; i < triggerList.length; i++) {
129				setupTrigger(triggerList[i]);
130				if (!multiTrigger) {
131					break;
132				}
133			}
134			var triggerList = document.querySelectorAll('a.outer-collapsible-trigger');
135			for (var i = 0; i < triggerList.length; i++) {
136				setupTrigger(triggerList[i]);
137			}
138		})(collapsibleList[i]);
139	}
140	document.addEventListener('click', function(event) {
141		let target = event.target;
142		let childTarget = false;
143		if (target.classList && target.classList.contains('trigger')) {
144			let cp = document.querySelector(target.hash);
145			if (cp) {
146				let parent = cp.parentNode;
147				if (parent.classList && parent.classList.contains('sub-menu')) {
148					childTarget = target;
149				}
150			}
151		}
152		var collapsibleList = document.querySelectorAll('.collapsible.auto-hide[data-open="open"]');
153		for (var i = collapsibleList.length - 1; i >= 0; i--) {
154			if (!childTarget || !collapsibleList[i].contains(childTarget)) {
155				var c = collapsibleList[i];
156				var cb = c.querySelector('.collapsibleBlock');
157				var ib = c.querySelector('.inner-block');
158				close(c, cb, ib);
159			}
160		}
161	});
162}
163
164function setupTabs() {
165	let isDown = false;
166	let downX = -1;
167	let currentDragBlock = null;
168	let currentDragBlockWidth = 0;
169	let dragStartX = -1;
170	let dragDX = 0;
171
172	let onDragBlock = function(block, blockWidth, x) {
173		let minOffset = block.offsetWidth - blockWidth;
174		block.parentNode.className = block.parentNode.className.replace(' fade-left', '').replace(' fade-right', '');
175		if (x < minOffset) {
176			x = minOffset;
177		} else {
178			block.parentNode.className += ' fade-right';
179		}
180		if (x > 0) {
181			x = 0;
182		} else {
183			block.parentNode.className += ' fade-left';
184		}
185		block.style.left = x+'px';
186	}
187
188	let onMouseDown = function(event) {
189		isDown = true;
190		dragDX = 0;
191		if (event.type === "touchstart") {
192			downX = event.touches[0].clientX;
193		} else {
194			downX = event.clientX;
195		}
196	};
197
198	let onMouseUp = function(event) {
199		if (currentDragBlock) {
200			currentDragBlock.setAttribute('data-dragging', 'false');
201		}
202		currentDragBlock = null;
203		isDown = false;
204	};
205
206	let onMouseMove = function(event) {
207		if (isDown && currentDragBlock) {
208			let cx = 0;
209			if (event.type === "touchmove") {
210				cx = event.touches[0].clientX;
211			} else {
212				cx = event.clientX;
213			}
214			dragDX = cx-downX;
215			let x = (dragStartX+dragDX);
216			onDragBlock(currentDragBlock, currentDragBlockWidth, x);
217		}
218	};
219
220	window.addEventListener("touchstart", onMouseDown, false);
221	window.addEventListener("touchend", onMouseUp, false);
222
223	window.addEventListener('mousedown', onMouseDown);
224	window.addEventListener('mouseup', onMouseUp);
225
226	let getListWidth = function(linkList) {
227		let r0 = linkList[0].getBoundingClientRect();
228		let rL = linkList[linkList.length - 1].getBoundingClientRect();
229		return (rL.x+rL.width)-r0.x;
230	}
231
232	let getLinkMidPointX = function(link) {
233		let r = link.getBoundingClientRect();
234		let R = link.parentNode.getBoundingClientRect();
235		return (R.width/2)-((r.x-R.x)+r.width/2);
236	}
237
238	let loadLazy = function(tabBlock, dataIndex) {
239		let lazyList = tabBlock.querySelectorAll('.experience[data-index="'+dataIndex+'"] div[data-lazy-style]');
240		for (var k = lazyList.length - 1; k >= 0; k--) {
241			let lazy = lazyList[k];
242			let lazyStyle = lazy.getAttribute('data-lazy-style');
243			lazy.removeAttribute('data-lazy-style');
244			lazy.setAttribute('style', lazyStyle);
245		}
246	}
247
248	window.addEventListener("touchmove", onMouseMove, false);
249
250	window.addEventListener('mousemove', onMouseMove);
251
252	let dragList = document.querySelectorAll('.drag-list');
253	for (var i = dragList.length - 1; i >= 0; i--) {
254		(function(dragBlock) {
255			let parentTabBlock = dragBlock.parentNode.parentNode;
256			let dragInnerBlock = dragBlock.querySelector('.tab-list');
257			let linkList = dragInnerBlock.querySelectorAll('a.link');
258			parentTabBlock.setAttribute('data-tab-count', linkList.length)
259
260			let dragInnerBlockWidth = getListWidth(linkList);
261			if (dragInnerBlockWidth > dragBlock.getBoundingClientRect().width) {
262				dragBlock.className += ' fade-right';
263			}
264			dragInnerBlock.style.left = "0px";
265
266			let dragBlockOnMouseDown = function(event) {
267				currentDragBlock = dragInnerBlock;
268				currentDragBlock.setAttribute('data-dragging', 'true');
269				dragStartX = parseInt(currentDragBlock.style.left);
270				currentDragBlockWidth = getListWidth(linkList);
271			};
272
273			dragBlock.addEventListener("touchstart", dragBlockOnMouseDown, false);
274			dragBlock.addEventListener('mousedown', dragBlockOnMouseDown);
275		})(dragList[i]);
276	}
277
278	var tabBlockList = document.querySelectorAll('.tab-block');
279	for (var i = tabBlockList.length - 1; i >= 0; i--) {
280		(function(tabBlock) {
281			loadLazy(tabBlock, 1);
282			let shiftList = tabBlock.querySelectorAll('a.shift');
283			for (var j = shiftList.length - 1; j >= 0; j--) {
284				let shift = shiftList[j];
285				if (shift.className.indexOf(' left') !== -1) {
286					shift.addEventListener('click', function(event) {
287						event.preventDefault();
288						let currentIndex = parseInt(tabBlock.getAttribute('data-selected-tab-index'));
289						if (currentIndex > 1) {
290							tabBlock.setAttribute('data-selected-tab-index', currentIndex-1);
291							let link = linkList[currentIndex-2];
292							loadLazy(tabBlock, currentIndex-1);
293							onDragBlock(link.parentNode, getListWidth(linkList), getLinkMidPointX(link));
294						}
295					});
296				} else if (shift.className.indexOf(' right') !== -1) {
297					shift.addEventListener('click', function(event) {
298						event.preventDefault();
299						let currentIndex = parseInt(tabBlock.getAttribute('data-selected-tab-index'));
300						if (currentIndex < linkList.length) {
301							tabBlock.setAttribute('data-selected-tab-index', currentIndex+1);
302							let link = linkList[currentIndex];
303							loadLazy(tabBlock, currentIndex+1);
304							onDragBlock(link.parentNode, getListWidth(linkList), getLinkMidPointX(link));
305						}
306					});
307				}
308			}
309			var linkList = tabBlock.querySelectorAll('a.link');
310			for (var i = linkList.length - 1; i >= 0; i--) {
311				var link = linkList[i];
312				link.setAttribute("draggable", "false");
313				link.addEventListener('click', function(event) {
314					if (dragDX > -3 && dragDX < 3) {
315						let dataIndex = this.getAttribute('data-index');
316						tabBlock.setAttribute("data-selected-tab-index", dataIndex);
317						tabBlock.setAttribute("data-user-selection", dataIndex);
318						loadLazy(tabBlock, dataIndex);
319						if (this.parentNode.parentNode.className.indexOf(' drag-list ')) {
320							onDragBlock(this.parentNode, getListWidth(linkList), getLinkMidPointX(this));
321						}
322					}
323					event.preventDefault();
324					return false;
325				});
326			}
327		})(tabBlockList[i]);
328	}
329}
330
331function easeInOutQuad(t, b, c, d) {
332	t /= d / 2;
333	if (t < 1) return c / 2 * t * t + b;
334	t--;
335	return -c / 2 * (t * (t - 2) - 1) + b;
336}
337
338let element				 // element to scroll to									 (node)
339
340let start					 // where scroll starts										(px)
341let stop						// where scroll stops										 (px)
342
343let offset					// adjustment from the stop position			(px)
344let easing					// easing function												(function)
345let a11y						// accessibility support flag						 (boolean)
346
347let distance				// distance of scroll										 (px)
348let duration				// scroll duration												(ms)
349
350let timeStart			 // time scroll started										(ms)
351let timeElapsed		 // time spent scrolling thus far					(ms)
352
353let next						// next scroll position									 (px)
354
355let callback				// to call when done scrolling						(function)
356
357// scroll position helper
358
359function currentWindowLocation () {
360	return window.scrollY || window.pageYOffset
361}
362
363// element offset helper
364
365function elementTop(element) {
366	return element.getBoundingClientRect().top + start
367}
368
369function elementHeight(element) {
370	return element.getBoundingClientRect().height
371}
372
373// rAF loop helper
374
375function loop (timeCurrent) {
376	// store time scroll started, if not started already
377	if (!timeStart) {
378		timeStart = timeCurrent
379	}
380
381	// determine time spent scrolling so far
382	timeElapsed = timeCurrent - timeStart
383
384	// calculate next scroll position
385	next = easing(timeElapsed, start, distance, duration)
386
387	// scroll to it
388	window.scrollTo(0, next)
389
390	// check progress
391	timeElapsed < duration
392		? window.requestAnimationFrame(loop)			 // continue scroll loop
393		: done()																	 // scrolling is done
394}
395
396// scroll finished helper
397
398function done () {
399	// account for rAF time rounding inaccuracies
400	window.scrollTo(0, start + distance)
401
402	// if scrolling to an element, and accessibility is enabled
403	if (element && a11y) {
404		// add tabindex indicating programmatic focus
405		element.setAttribute('tabindex', '-1')
406
407		// focus the element
408		element.focus()
409	}
410
411	// if it exists, fire the callback
412	if (typeof callback === 'function') {
413		callback()
414	}
415
416	// reset time for next jump
417	timeStart = false
418}
419
420// API
421
422function jump (target, options) {
423	if (!options) {
424		options = {};
425	}
426	// resolve options, or use defaults
427	duration = options.duration || 1000
428	offset = options.offset || 0
429	callback = options.callback											 // "undefined" is a suitable default, and won't be called
430	easing = options.easing || easeInOutQuad
431	a11y = options.a11y || false
432
433	// cache starting position
434	start = currentWindowLocation()
435
436	element = target
437	stop = elementTop(element)
438
439	// resolve scroll distance, accounting for offset
440	distance = stop - start + offset
441
442	// resolve duration
443	switch (typeof options.duration) {
444		// number in ms
445		case 'number':
446			duration = options.duration
447			break
448
449		// function passed the distance of the scroll
450		case 'function':
451			duration = options.duration(distance)
452			break
453	}
454
455	// start the loop
456	window.requestAnimationFrame(loop);
457}
458
459function smoothScrollTo(hash, linkOffset) {
460	if (hash) {
461		let c = hash.charAt(1);
462		if (c >= '0' && c <= '9') {
463			return;
464		}
465		var element = document.querySelector(hash);
466		if (element) {
467			if (linkOffset) {
468				linkOffset = parseInt(linkOffset);
469			}
470			if (isNaN(linkOffset)) {
471				linkOffset = 0;
472			}
473			var menu = document.getElementById("top-menu-block");
474			var offset = elementHeight(menu)+linkOffset;
475			jump(element, { offset: -offset });
476		}
477	}
478}
479
480function setupSmoothAnchor(link) {
481	link.addEventListener('click', function(event) {
482		var linkOffset = link.getAttribute('data-offset');
483		smoothScrollTo(link.hash, linkOffset);
484		event.preventDefault();
485		return false;
486	});
487}
488
489function setupSmoothAnchorScroll() {
490	var anchorList = document.querySelectorAll('.smooth-anchor-scroll');
491	for (var i = anchorList.length - 1; i >= 0; i--) {
492		var link = anchorList[i];
493		setupSmoothAnchor(link);
494	}
495	if(window.location.hash) {
496		setTimeout(function() { smoothScrollTo(window.location.hash); }, 500);
497	}
498}
499
500function waitForJQ(run) {
501	if (typeof(jQuery) === 'undefined') {
502		window.requestAnimationFrame(function() { waitForJQ(run); });
503	} else {
504		run();
505	}
506}
507
508function setupFormBlocks() {
509	var formWraper = document.querySelector(".gform_wrapper");
510	if (formWraper) {
511		var form = 	formWraper.querySelector('form');
512		if (form) {
513			waitForJQ(function() {
514				$ = jQuery;
515				$(form).validator();
516
517				// when the form is submitted
518				$(form).on('submit', function (e) {
519					form.className += ' submitted';
520					// if the validator does not prevent form submit
521					if (!e.isDefaultPrevented()) {
522						var mcForm = document.getElementById('mc-hidden-subscribe-form');
523						if (mcForm) {
524							var mcInputList = mcForm.getElementsByTagName('input');
525							for (var i = mcInputList.length - 1; i >= 0; i--) {
526								if (mcInputList[i].id && mcInputList[i].id.length > 0) {
527									var inputElement = 	form.querySelector('li.'+mcInputList[i].id+' input');
528									if (inputElement) {
529										mcInputList[i].value = inputElement.value;
530									}
531								}
532							}
533							$(mcForm).ajaxSubmit({
534								url: mcForm.action,
535								type: 'GET',
536								dataType: 'json',
537								contentType: "application/json; charset=utf-8",
538								success: function() {
539									form.submit();
540								}
541							});
542						} else {
543							form.submit();
544						}
545					} else {
546						console.log("incomplete");
547					}
548				});
549			});
550
551			let formSubmit = form.querySelector('input[type="submit"]');
552			var submitButton = formWraper.querySelector('.cta.button.submit');
553			if (submitButton) {
554				submitButton.addEventListener('click', function(event) {
555					$(form).submit();
556					event.preventDefault();
557					return false;
558				});
559			}
560		}
561
562		var gformUL = formWraper.querySelector(".gform_body ul.gform_fields");
563
564		if (gformUL) {
565			var hearSelect = gformUL.querySelector('li.hear-select select');
566			if (hearSelect) {
567				var hearComments = gformUL.querySelector('li.hear-comments');
568				if (hearComments) {
569					var origialClassName = hearComments.className;
570					hearSelect.addEventListener('change', function(event) {
571						if (this.value === 'Other') {
572							hearComments.className = origialClassName+" show";
573						} else {
574							hearComments.className = origialClassName;
575						}
576					});
577				}
578
579				var optionList = formWraper.querySelectorAll("select > option");
580				for (var i = optionList.length - 1; i >= 0; i--) {
581					if (optionList[i].value === "") {
582						optionList[i].setAttribute("disabled", "disabled");
583					}
584				}
585			}
586			var hearSelect = gformUL.querySelector('li.hear-select select');
587
588			var sameAsBillingCheckBox = gformUL.querySelector('li.same-as-billing input[type="checkbox"]');
589			if (sameAsBillingCheckBox) {
590				sameAsBillingCheckBox.addEventListener('change', function(event) {
591					if (sameAsBillingCheckBox.checked) {
592						var billingItems = gformUL.querySelectorAll('li.billing input');
593						var shippingItems = gformUL.querySelectorAll('li.shipping input');
594						for (var i = billingItems.length - 1; i >= 0; i--) {
595							shippingItems[i].value = billingItems[i].value;
596						}
597						var billingCountry = gformUL.querySelector('li.billing select');
598						var shippingCountry = gformUL.querySelector('li.shipping select');
599						shippingCountry.selectedIndex = billingCountry.selectedIndex;
600
601						var shippingLI = gformUL.querySelectorAll('li.shipping');
602						for (var i = shippingLI.length - 1; i >= 0; i--) {
603							shippingLI[i].style.display = 'none';
604						}
605					} else {
606						var shippingLI = gformUL.querySelectorAll('li.shipping');
607						for (var i = shippingLI.length - 1; i >= 0; i--) {
608							shippingLI[i].style.display = '';
609						}
610					}
611				});
612			}
613
614			var j = 1;
615			while(true) {
616				var liList = gformUL.querySelectorAll("li.combine.g"+j);
617				if (liList.length > 0) {
618					var liParent = liList[0].parentNode.insertBefore(createElement('li'), liList[0]);
619					liParent.className = "combine-parent";
620					if (liList[0].className.indexOf('col50') > -1) {
621						liParent.className += " col50";
622					}
623					var ul = createElement("ul");
624					liParent.appendChild(ul);
625					var preItem = null;
626					for (var k = liList.length - 1; k >= 0; k--) {
627						ul.insertBefore(liList[k], preItem);
628						preItem = liList[k];
629					}
630					j++;
631				} else {
632					break;
633				}
634			}
635		}
636	}
637}
638
639function setWindowScroll() {
640	let topMenuBlock = document.getElementById('top-menu-block');
641	if (topMenuBlock) {
642		window.addEventListener('scroll', function(event) {
643			if (document.body.scrollTop > 40 || document.documentElement.scrollTop > 40) {
644				topMenuBlock.setAttribute('data-scroll-position', 'not-top');
645			} else {
646				topMenuBlock.setAttribute('data-scroll-position', 'top');
647			}
648		});
649	}
650}
651
652var globalFullscreenContainer = createElement("div", "fullscreen-container content-block word-press-content");
653
654function createSingleGallery(gallery) {
655	var urlList = [];
656	var imageList = gallery.querySelector(".image-list");
657	if (imageList) {
658		var aList = imageList.querySelectorAll(".grid-item > a");
659		for (var i = 0; i < aList.length; i++) {
660			let a = aList[i];
661			urlList.push(a.href);
662			(function(urlIndex) {
663				a.addEventListener("click", function(event) {
664					event.preventDefault();
665					if (gallery.className.indexOf(' animate') === -1 && gallery.className.indexOf(' animate-fast') === -1) {
666						globalFullscreenContainer.setAttribute("show", "showing");
667						window.requestAnimationFrame(function() {
668							globalFullscreenContainer.setAttribute("show", "true");
669						});
670						let popupGallery = globalFullscreenContainer.querySelector('.popup-gallery.experience > .exp-box > .description.gallery');
671						if (popupGallery) {
672							if (popupGallery.className.indexOf(' animate-fast') !== 0) {
673								popupGallery.className = popupGallery.className.replace(' animate-fast', '');
674							}
675							if (popupGallery.className.indexOf(' animate') !== 0) {
676								popupGallery.className = popupGallery.className.replace(' animate', '');
677							}
678							popupGallery.removeAttribute('data-drag-offset');
679							let count = urlList.length;
680							popupGallery.setAttribute('data-selected-index', urlIndex);
681							popupGallery.setAttribute('data-count', count);
682							let slider = popupGallery.querySelector('.slider.image-list');
683							if (slider) {
684								slider.removeAttribute('style');
685								slider.innerHTML = '';
686								slider.innerHTML += '<div class="gallery-block"><div class="row"><div class="image-thumbnail line-item" style="background-image:url('+urlList[count-2]+');"></div></div></div>';
687								slider.innerHTML += '<div class="gallery-block"><div class="row"><div class="image-thumbnail line-item" style="background-image:url('+urlList[count-1]+');"></div></div></div>';
688								for (var j = 0; j < urlList.length; j++) {
689									let url = urlList[j];
690									slider.innerHTML += '<div class="gallery-block"><div class="row"><div class="image-thumbnail line-item" style="background-image:url('+url+');"></div></div></div>';
691								}
692								slider.innerHTML += '<div class="gallery-block"><div class="row"><div class="image-thumbnail line-item" style="background-image:url('+urlList[0]+');"></div></div></div>';
693								slider.innerHTML += '<div class="gallery-block"><div class="row"><div class="image-thumbnail line-item" style="background-image:url('+urlList[1]+');"></div></div></div>';
694							}
695						}
696					}
697				});
698			})(i);
699		}
700	}
701}
702
703function setAttribute(element, attribute, value) {
704	element.setAttribute(attribute, value);
705	return element;
706}
707
708function createGallery() {
709	var prev = createElement("a", "gallery-button prev");
710	prev.href = "#";
711	var next = createElement("a", "gallery-button next");
712	next.href = "#";
713
714	var innerBlock = createElement("div", "inner-block");
715	document.body.appendChild(globalFullscreenContainer);
716	globalFullscreenContainer.appendChild(innerBlock);
717
718	var slider = createElement("div", "slider flex-row image-list");
719	var popupGallery = createElement("div", "description gallery");
720	popupGallery.setAttribute('data-count', 99);
721
722	var popupGalleryContainer = createElementTree([
723		createElement("div", "popup-gallery experience"),
724		createElement("div", "exp-box"),
725		popupGallery,
726		createElement("div", "viewport"),
727		slider,
728	]);
729
730	slider.addEventListener('transitionend', function() {
731		if (popupGallery.className.indexOf(' animate-fast') !== 0) {
732			popupGallery.className = popupGallery.className.replace(' animate-fast', '');
733		}
734		if (popupGallery.className.indexOf(' animate') !== 0) {
735			popupGallery.className = popupGallery.className.replace(' animate', '');
736		}
737		let index = parseInt(popupGallery.getAttribute('data-selected-index'));
738		let count = parseInt(popupGallery.getAttribute('data-count'));
739		if (index === -1) {
740			popupGallery.setAttribute('data-selected-index', count-1);
741		} else if (index === count) {
742			popupGallery.setAttribute('data-selected-index', 0);
743		}
744	});
745	innerBlock.appendChild(popupGalleryContainer);
746	innerBlock.appendChild(prev);
747	innerBlock.appendChild(next);
748
749	document.addEventListener('keydown', function(event) {
750		if (globalFullscreenContainer.getAttribute("show") === "true") {
751			switch (event.keyCode) {
752				case 37: {
753					updatePopupGalleryIndex(-1);
754					break;
755				} case 39: {
756					updatePopupGalleryIndex(1);
757					break;
758				} case 27: {
759					closePopupGalery();
760					break;
761				}
762			}
763		}
764	}, false);
765
766	var galleryList = document.querySelectorAll(".gallery");
767	for (var i = galleryList.length - 1; i >= 0; i--) {
768		createSingleGallery(galleryList[i]);
769	}
770
771	function updatePopupGalleryIndex(offset) {
772		if (popupGallery.className.indexOf(' animate-fast') === -1 && popupGallery.className.indexOf(' animate') === -1) {
773			popupGallery.className += ' animate';
774			let index = parseInt(popupGallery.getAttribute('data-selected-index'));
775			popupGallery.setAttribute('data-selected-index', index+offset);
776		}
777	}
778
779	prev.addEventListener("click", function(event) {
780		event.preventDefault();
781		event.stopPropagation();
782		updatePopupGalleryIndex(-1);
783	});
784
785	next.addEventListener("click", function(event) {
786		event.preventDefault();
787		event.stopPropagation();
788		updatePopupGalleryIndex(1);
789	});
790
791	function closePopupGalery() {
792		if (popupGallery.className.indexOf(' animate-fast') === -1 && popupGallery.className.indexOf(' animate') === -1) {
793			let offset = parseInt(popupGallery.getAttribute('data-drag-offset'));
794			if (isNaN(offset) || (offset > -3 && offset < 3)) {
795				globalFullscreenContainer.setAttribute("show", "hiding");
796			}
797		}
798	}
799
800	globalFullscreenContainer.addEventListener("click", function(event) {
801		closePopupGalery();
802	});
803	globalFullscreenContainer.addEventListener("transitionend", function(event) {
804		if (globalFullscreenContainer.getAttribute("show") === "hiding") {
805			globalFullscreenContainer.setAttribute("show", "hide");
806		}
807	});
808}
809
810function setupProductBlock() {
811	let productBlockList = document.querySelectorAll(".product-block");
812	let currentIndex = 0;
813
814	function centerOnIndex(slideBlock, productList, realList, index) {
815		productList.style.left = parseInt((slideBlock.offsetWidth/2.0) - (realList.offsetWidth*1.5))+'px';
816	}
817
818	for (let i = productBlockList.length - 1; i >= 0; i--) {
819		let productBlock = productBlockList[i];
820		let slideBlock = productBlock.querySelector(".slide-block");
821		let productList = slideBlock.querySelector(".productList");
822		let realList = productBlock.querySelector(".real.list");
823		let categoryAnchorList = document.querySelectorAll(".categories a");
824
825		for (let j = categoryAnchorList.length - 1; j >= 0; j--) {
826			let categoryAnchor = categoryAnchorList[j];
827			categoryAnchor.addEventListener("click", function(event) {
828				event.preventDefault();
829				productBlock.setAttribute('filter', this.hash.substr(1));
830			});
831		}
832	}
833}
834
835function setupScroll(scrollBox, count) {
836	let scrollLeftList = scrollBox.querySelectorAll(".scroll-left");
837	let scrollRightList = scrollBox.querySelectorAll(".scroll-right");
838	let slider = scrollBox.querySelector(".viewport > .slider");
839	if (slider) {
840		scrollBox.setAttribute('data-count', count);
841		let className = scrollBox.className;
842		for (var i = scrollRightList.length - 1; i >= 0; i--) {
843			let scrollRight = scrollRightList[i];
844			scrollRight.addEventListener("click", function(event) {
845				event.preventDefault();
846				if (scrollBox.className.indexOf(' animate') !== -1) {
847					return;
848				}
849				scrollBox.setAttribute('data-direction', 'right');
850				let nextIndex = parseInt(scrollBox.getAttribute('data-selected-index'))+1;
851				if (nextIndex <= count) {
852					scrollBox.className += ' animate';
853					scrollBox.setAttribute('data-selected-index', nextIndex);
854				}
855			});
856		}
857		for (var i = scrollLeftList.length - 1; i >= 0; i--) {
858			let scrollLeft = scrollLeftList[i];
859			scrollLeft.addEventListener("click", function(event) {
860				event.preventDefault();
861				if (scrollBox.className.indexOf(' animate') !== -1) {
862					return;
863				}
864				scrollBox.setAttribute('data-direction', 'left');
865				let nextIndex = parseInt(scrollBox.getAttribute('data-selected-index'))-1;
866				if (nextIndex >= -1) {
867					scrollBox.className += ' animate';
868					scrollBox.setAttribute('data-selected-index', nextIndex);
869				}
870			});
871		}
872		slider.addEventListener('transitionend', function() {
873			scrollBox.className = className;
874			let index = parseInt(scrollBox.getAttribute('data-selected-index'));
875			if (index === -1) {
876				scrollBox.setAttribute('data-selected-index', count-1);
877			}
878			if (index === count) {
879				scrollBox.setAttribute('data-selected-index', 0);
880			}
881		});
882	}
883}
884
885function setupTestimonials() {
886	let testimonialList = document.querySelectorAll(".testimonials");
887	for (let i = testimonialList.length - 1; i >= 0; i--) {
888		let testimonialBlockList = testimonialList[i].querySelectorAll(".testimonial-block");
889		let dotBlock = createElement('div', 'dot-block');
890		testimonialList[i].appendChild(dotBlock);
891		let tCount = testimonialBlockList.length;
892		for (let j = 0; j < tCount; j++) {
893			let dot = createElement('div', 'dot');
894			dot.setAttribute('data-index', j);
895			dotBlock.appendChild(dot);
896		}
897		if (tCount > 0) {
898			let slider = testimonialBlockList[0].parentNode;
899			let firstClone = testimonialBlockList[0].cloneNode(true);
900			let lastClone = testimonialBlockList[tCount-1].cloneNode(true);
901			slider.insertBefore(lastClone, slider.firstChild);
902			slider.appendChild(firstClone);
903		}
904		setupScroll(testimonialList[i], testimonialBlockList.length);
905	}
906}
907
908function setupGalleryDrag() {
909	let isDown = false;
910	let downX = -1;
911	let currentGallery = null;
912	let currentDragBlock = null;
913	let currentDragBlockWidth = 0;
914	let dragStartX = -1;
915	let dragDX = 0;
916
917	let onDragBlock = function(block, x) {
918		currentGallery.setAttribute('data-drag-offset', x);
919		let per = (parseInt(currentGallery.getAttribute('data-selected-index'))+2)*100;
920		block.style.left = 'calc(-'+per+'% + '+x+'px)';
921	}
922
923	let onMouseMove = function(event) {
924		if (isDown && currentGallery && currentDragBlock) {
925			let cx = 0;
926			if (event.type === "touchmove") {
927				cx = event.touches[0].clientX;
928			} else {
929				cx = event.clientX;
930			}
931			dragDX = cx-downX;
932			let x = (dragStartX+dragDX);
933			onDragBlock(currentDragBlock, x);
934		}
935	};
936
937	let onMouseUp = function(event) {
938		if (currentGallery && currentDragBlock) {
939			let offset = parseInt(currentGallery.getAttribute('data-drag-offset'));
940			if (offset > 5) {
941				let index = parseInt(currentGallery.getAttribute('data-selected-index'))-1;
942				currentGallery.setAttribute('data-selected-index', index);
943				currentGallery.className += ' animate-fast';
944			} else if (offset < -5) {
945				let index = parseInt(currentGallery.getAttribute('data-selected-index'))+1;
946				currentGallery.setAttribute('data-selected-index', index);
947				currentGallery.className += ' animate-fast';
948			}
949			window.requestAnimationFrame(function() {
950				currentDragBlock.removeAttribute('style');
951				currentDragBlock.removeAttribute('data-dragging');
952				currentGallery.removeAttribute('data-drag-offset');
953				currentGallery = null;
954				currentDragBlock = null;
955			});
956		}
957		isDown = false;
958	};
959
960	// window.addEventListener("touchstart", onMouseDown, false);
961	window.addEventListener("touchend", onMouseUp, false);
962	window.addEventListener("touchmove", onMouseMove, false);
963
964	// window.addEventListener('mousedown', onMouseDown);
965	window.addEventListener('mouseup', onMouseUp);
966	window.addEventListener('mousemove', onMouseMove);
967
968	let addStartEvents = function(gallery) {
969		let onMouseDown = function(event) {
970			if (gallery.className.indexOf(' animate') === -1 && gallery.className.indexOf(' animate-fast') === -1) {
971				isDown = true;
972				dragDX = 0;
973				if (event.type === "touchstart") {
974					downX = event.touches[0].clientX;
975				} else {
976					downX = event.clientX;
977				}
978				currentGallery = gallery;
979				currentDragBlock = gallery.querySelector('.viewport > .slider');
980				currentDragBlock.setAttribute('data-dragging', 'true');
981			}
982		};
983		gallery.addEventListener("touchstart", onMouseDown, false);
984		gallery.addEventListener('mousedown', onMouseDown);
985	}
986
987	galleryList = document.querySelectorAll(".experience > .exp-box > .description.gallery");
988	for (let gIndex = galleryList.length - 1; gIndex >= 0; gIndex--) {
989		let gallery = galleryList[gIndex];
990		if (gallery.getAttribute('data-count') > 1) {
991			addStartEvents(gallery);
992		}
993	}
994}
995
996function setupTabGallery() {
997	let galleryList = document.querySelectorAll(".experience > .exp-box > .description.gallery.needs-repsonsive-blocks");
998	let responsiveClassNameList = ['desktop', 'tablet', 'mobile'];
999	for (let gIndex = galleryList.length - 1; gIndex >= 0; gIndex--) {
1000		let gallery = galleryList[gIndex];
1001		for (var i = 0; i < 3; i++) {
1002			let galleryClone = gallery.cloneNode(true);
1003			galleryClone.className += ' visible-'+responsiveClassNameList[i]+' block';
1004			gallery.parentNode.insertBefore(galleryClone, gallery);
1005		}
1006		gallery.parentNode.removeChild(gallery);
1007	}
1008
1009	galleryList = document.querySelectorAll(".experience > .exp-box > .description.gallery.needs-repsonsive-blocks");
1010	for (let gIndex = galleryList.length - 1; gIndex >= 0; gIndex--) {
1011		let gallery = galleryList[gIndex];
1012		let sliderList = gallery.querySelectorAll(".slider.image-list");
1013
1014		for (let sIndex = sliderList.length - 1; sIndex >= 0; sIndex--) {
1015			let slider = sliderList[sIndex];
1016			let galleryBlockList = slider.querySelectorAll(".gallery-block");
1017			for (let k = 0; k < galleryBlockList.length; k++) {
1018				let galleryBlock = galleryBlockList[k];
1019				let parentNode = galleryBlock.parentNode;
1020				parentNode.removeChild(galleryBlock);
1021
1022				let imageList = galleryBlock.querySelectorAll(".image-thumbnail.line-item");
1023				let imageListCount = imageList.length;
1024				let modCount = 3;
1025				if (gallery.className.indexOf('visible-desktop') !== -1) {
1026					if (imageListCount % 4 === 0) {
1027						modCount = 4;
1028					}
1029				} else if (gallery.className.indexOf('visible-tablet') !== -1) {
1030					if (imageListCount === 2 || imageListCount === 4) {
1031						modCount = 2;
1032					}
1033				} else if (gallery.className.indexOf('visible-mobile') !== -1) {
1034					modCount = 1;
1035				}
1036				for (let j = 0; j < imageListCount; j++) {
1037					if (j % modCount === 0) {
1038						var currentGalleryBlock = createElement('div', 'gallery-block');
1039						parentNode.appendChild(currentGalleryBlock);
1040					}
1041					currentGalleryBlock.appendChild(imageList[j]);
1042				}
1043			}
1044		}
1045	}
1046
1047	galleryList = document.querySelectorAll(".experience > .exp-box > .description.gallery");
1048	for (let gIndex = galleryList.length - 1; gIndex >= 0; gIndex--) {
1049		let gallery = galleryList[gIndex];
1050		let sliderList = gallery.querySelectorAll(".slider.image-list");
1051
1052		let dotBlock = createElement('div', 'dot-block');
1053		gallery.appendChild(dotBlock);
1054
1055		let overlayList = gallery.querySelectorAll(".overlay");
1056		for (let j = 0; j < overlayList.length; j++) {
1057			overlayList[j].setAttribute('image-index', j);
1058		}
1059
1060		for (let sIndex = sliderList.length - 1; sIndex >= 0; sIndex--) {
1061			let slider = sliderList[sIndex];
1062
1063			let galleryBlockList = slider.querySelectorAll(".gallery-block");
1064
1065			let gCount = galleryBlockList.length;
1066			for (let j = 0; j < gCount; j++) {
1067				let dot = createElement('div', 'dot');
1068				dot.setAttribute('data-index', j);
1069				dotBlock.appendChild(dot);
1070				dot.addEventListener("click", function(event) {
1071					if (gallery.className.indexOf(' animate') === -1) {
1072						gallery.className += ' animate';
1073						gallery.setAttribute('data-selected-index', this.getAttribute('data-index'));
1074					}
1075				});
1076			}
1077
1078			for (let i = galleryBlockList.length - 1; i >= 0; i--) {
1079				let galleryBlock = galleryBlockList[i];
1080				galleryBlock.setAttribute('data-slide-index', i);
1081				let imageList = galleryBlock.querySelectorAll(".image-thumbnail.grid-item");
1082				if (imageList && imageList.length > 0) {
1083					let mainElement = createElement('div', 'main');
1084					let rowsElement = createElement('div', 'rows');
1085					mainElement.appendChild(imageList[0]);
1086					for (let j = 1; j < imageList.length; j++) {
1087						let spacerElement = createElement('div', 'spacer-h s'+j);
1088						rowsElement.appendChild(spacerElement);
1089						rowsElement.appendChild(imageList[j]);
1090						if (j === 2) {
1091							let spacerElement = createElement('div', 'spacer');
1092							rowsElement.appendChild(spacerElement);
1093						}
1094					}
1095					galleryBlock.appendChild(mainElement);
1096					galleryBlock.appendChild(rowsElement);
1097				} else {
1098					imageList = galleryBlock.querySelectorAll(".image-thumbnail.line-item");
1099					if (imageList && imageList.length > 0) {
1100						for (let j = 0; j < imageList.length; j++) {
1101							let overlay = imageList[j].querySelector(".overlay");
1102							if (overlay) {
1103								let aOpenList = overlay.querySelectorAll("a.open");
1104								for (var k=0; k<aOpenList.length; k++) {
1105									(function(overlay, aOpen) {
1106										aOpen.addEventListener("click", function(event) {
1107											event.preventDefault();
1108											gallery.setAttribute('open-index', overlay.getAttribute('image-index'));
1109										});
1110									})(overlay, aOpenList[k]);
1111								}
1112								let aCloseList = overlay.querySelectorAll("a.close");
1113								for (var k=0; k<aCloseList.length; k++) {
1114									(function(overlay, aClose) {
1115										aClose.addEventListener("click", function(event) {
1116											event.preventDefault();
1117											gallery.removeAttribute('open-index');
1118										});
1119									})(overlay, aCloseList[k]);
1120								}
1121							}
1122						}
1123						let rowElement = createElement('div', 'row');
1124						rowElement.appendChild(imageList[0]);
1125						for (let j = 1; j < imageList.length; j++) {
1126							rowElement.appendChild(createElement('div', 'spacer-h s'+j));
1127							rowElement.appendChild(imageList[j]);
1128						}
1129						galleryBlock.appendChild(rowElement);
1130					}
1131				}
1132			}
1133			if (gCount > 0) {
1134				let firstClone = galleryBlockList[0].cloneNode(true);
1135				let lastClone = galleryBlockList[gCount-1].cloneNode(true);
1136
1137				let index = (lastClone.getAttribute('data-slide-index') - 1) % gCount;
1138				let secondClone = galleryBlockList[index].cloneNode(true);
1139				index = (firstClone.getAttribute('data-slide-index') + 1) % gCount;
1140				let secondLastClone = galleryBlockList[index].cloneNode(true);
1141
1142				slider.insertBefore(lastClone, slider.firstChild);
1143				slider.appendChild(firstClone);
1144
1145				slider.insertBefore(secondClone, slider.firstChild);
1146				slider.appendChild(secondLastClone);
1147
1148				let dotPrev = createElement('div', 'scroll-left');
1149				dotBlock.insertBefore(dotPrev, dotBlock.firstChild);
1150
1151				let dotNext = createElement('div', 'scroll-right');
1152				dotBlock.appendChild(dotNext);
1153
1154				setupScroll(gallery, gCount);
1155			}
1156		}
1157	}
1158	setupGalleryDrag();
1159}
1160
1161function setupTransitionElements() {
1162	document.addEventListener('transitionend', function(te)	{
1163		let target = te.target;
1164		if (!target.classList.contains('transition-element')) return;
1165		
1166		if (target.className.indexOf('transition-element') > -1 && target.className.indexOf('transition-set') > -1) {
1167			target.classList.remove('transition-element', 'transition-set');
1168			for (const className of target.classList) {
1169				if (className.endsWith('-animate')) {
1170					target.classList.remove(className);
1171				}
1172			}
1173		}
1174	});
1175
1176	let onScrollFunction = function(e) {
1177		let elementList = document.querySelectorAll('.transition-element');
1178		for (let i = elementList.length - 1; i >= 0; i--) {
1179			let el = elementList[i];
1180			let checkEL = el;
1181			if (el.getAttribute('data-transition-check') === "parent") {
1182				checkEL = el.parentNode;
1183			}
1184			if (el.className.indexOf('transition-set') === -1 && inViewport(checkEL)) {
1185				if (el.className.indexOf('slide-up-left') !== -1) {
1186					el.className = el.className.replace('slide-up-left', 'slide-up-left-animate transition-set');
1187				} else if (el.className.indexOf('slide-down-left') !== -1) {
1188					el.className = el.className.replace('slide-down-left', 'slide-down-left-animate transition-set');
1189				} else if (el.className.indexOf('slide-up-right') !== -1) {
1190					el.className = el.className.replace('slide-up-right', 'slide-up-right-animate transition-set');
1191				} else if (el.className.indexOf('slide-down-right') !== -1) {
1192					el.className = el.className.replace('slide-down-right', 'slide-down-right-animate transition-set');
1193				} else if (el.className.indexOf('slide-up') !== -1) {
1194					el.className = el.className.replace('slide-up', 'slide-up-animate transition-set');
1195				} else if (el.className.indexOf('slide-right') !== -1) {
1196					el.className = el.className.replace('slide-right', 'slide-right-animate transition-set');
1197				} else if (el.className.indexOf('slide-left') !== -1) {
1198					el.className = el.className.replace('slide-left', 'slide-left-animate transition-set');
1199				} else if (el.className.indexOf('draw-in') !== -1) {
1200					el.className = el.className.replace('draw-in', 'draw-in-animate transition-set');
1201				} else if (el.className.indexOf('scale-in') !== -1) {
1202					el.className = el.className.replace('scale-in', 'scale-in-animate transition-set');
1203				} else if (el.className.indexOf('fade-in') !== -1) {
1204					el.className = el.className.replace('fade-in', 'fade-in-animate transition-set');
1205				}
1206			}
1207		}
1208	}
1209	onScrollFunction();
1210	window.addEventListener('scroll', onScrollFunction);
1211}
1212
1213function inViewport(elem) {
1214	let bounding = elem.getBoundingClientRect();
1215	let wh = (window.innerHeight || document.documentElement.clientHeight);
1216	if ((bounding.top >= 0 && bounding.top < wh) || (bounding.bottom >= 0 && bounding.bottom < wh)) {
1217		return true;
1218	}
1219	if (bounding.height > wh) {
1220		return true;
1221	}
1222	return false;
1223}
1224
1225function showPopup(popupLayer) {
1226	let scrollTop = (document.body.scrollTop || document.documentElement.scrollTop);
1227	let bg = popupLayer.querySelector('.full-background-layer');
1228	if (bg) {
1229		popupLayer.setAttribute('show', 'showing');
1230		popupLayer.style.top = scrollTop+"px";
1231		bg.style.height = (document.body.clientHeight)+'px';
1232		bg.style.top = '-'+scrollTop+"px";
1233		window.requestAnimationFrame(function() {
1234			popupLayer.setAttribute('show', 'true');
1235		});
1236	}
1237}
1238
1239function setupPopupButton() {
1240	setupButtonListeners();
1241	movePopupLayersToMain();
1242	setupPopupLayerBackgrounds();
1243	setupCloseButtonListeners();
1244	handleInitialHash();
1245}
1246
1247function setupButtonListeners() {
1248  document.getElementById('main').addEventListener("click", (event) => {
1249    const button = event.target.closest(".button-popup");
1250    if (!button) return;
1251
1252    event.preventDefault();
1253
1254    const hash = new URL(button.href).hash.substring(1);
1255    const popupLayer = document.getElementById(hash);
1256
1257    if (popupLayer) {
1258      showPopup(popupLayer);
1259    }
1260  });
1261}
1262
1263
1264function movePopupLayersToMain() {
1265	const main = document.getElementById("main");
1266	const popupLayerList = document.querySelectorAll(".vimc-popup-layer");
1267
1268	if (main) {
1269		popupLayerList.forEach((popupLayer) => {
1270			main.appendChild(popupLayer);
1271		});
1272	}
1273}
1274
1275function setupPopupLayerBackgrounds() {
1276	const popupLayerList = document.querySelectorAll(".vimc-popup-layer");
1277
1278	popupLayerList.forEach((popupLayer) => {
1279		const bg = createElement("div", "full-background-layer");
1280		popupLayer.appendChild(bg);
1281
1282		bg.addEventListener("click", (event) => {
1283			if (event.target === bg) {
1284				event.preventDefault();
1285				popupLayer.setAttribute("show", "hiding");
1286			}
1287		});
1288
1289		popupLayer.addEventListener("transitionend", () => {
1290			if (popupLayer.getAttribute("show") === "hiding") {
1291				popupLayer.setAttribute("show", "");
1292			}
1293		});
1294	});
1295}
1296
1297function setupCloseButtonListeners() {
1298	const closeButtonList = document.querySelectorAll(".vimc-popup-layer-close");
1299
1300	closeButtonList.forEach((closeButton) => {
1301		closeButton.addEventListener("click", (event) => {
1302			event.preventDefault();
1303			const popupLayer = document.querySelector(closeButton.hash);
1304
1305			if (popupLayer) {
1306				popupLayer.setAttribute("show", "hiding");
1307			}
1308		});
1309	});
1310}
1311
1312function handleInitialHash() {
1313	if (window.location.hash) {
1314		const hash = window.location.hash;
1315		const firstChar = hash.charAt(1);
1316
1317		if (firstChar < "0" || firstChar > "9") {
1318			const element = document.querySelector(hash);
1319
1320			if (element) {
1321				showPopup(element);
1322			}
1323		}
1324	}
1325}
1326
1327
1328function setupHustleCTA() {
1329	let hustle = document.querySelector('.hustle-ui.hustle-popup');
1330	if (hustle) {
1331		let hustleCtaList = hustle.querySelectorAll('.buttons a.cta');
1332		for (let i = hustleCtaList.length - 1; i >= 0; i--) {
1333			let cta = hustleCtaList[i];
1334			cta.addEventListener("click", function(event) {
1335				if (jQuery) {
1336					jQuery(hustle).trigger('hustle:module:closed', this);
1337				}
1338			});
1339		}
1340	}
1341}
1342
1343let hideInfoBarCookieVar = "hide-info-bar";
1344let hideInfoBarCookie = hideInfoBarCookieVar+"=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";
1345
1346function setupRemoveButton() {
1347	let removeList = document.querySelectorAll('a.remove-button');
1348	for (let i = removeList.length - 1; i >= 0; i--) {
1349		let button = removeList[i];
1350		button.addEventListener("click", function(event) {
1351			let main = document.getElementById('main');
1352			if (main) {
1353				main.setAttribute('info-bar-closed', 'true');
1354			}
1355			// document.cookie = hideInfoBarCookie;
1356			event.preventDefault();
1357			event.stopPropagation();
1358			let elementList = document.querySelectorAll(button.hash);
1359			for (let j = elementList.length - 1; j >= 0; j--) {
1360				let element = elementList[j];
1361				if (element) {
1362					let h = element.clientHeight;
1363					element.style.height = h+'px';
1364					element.className += ' animate';
1365					element.style.transition = 'height 0.5s';
1366					element.style.overflow = 'hidden';
1367					(function(el) {
1368						window.requestAnimationFrame(function() {
1369							el.style.height = '0px';
1370							el.addEventListener('transitionend', function() {
1371								el.parentNode.removeChild(el);
1372							});
1373						});
1374					})(element);
1375				}
1376			}
1377		});
1378	}
1379}
1380
1381function setupTopMenuBar() {
1382	let bars = document.querySelectorAll('#top-info-bar');
1383	for (let i = bars.length - 1; i >= 0; i--) {
1384		let bar = bars[i];
1385		// if (document.cookie.split('; ').find(function(row) { return row.startsWith(hideInfoBarCookieVar) })) {
1386		// 	bar.parentNode.removeChild(bar);
1387		// }
1388		let link = bar.querySelector('.link');
1389		let remove = bar.querySelector('.remove-button');
1390		if (link && remove) {
1391			bar.addEventListener('click', function(event) {
1392				if (event.target != remove) {
1393					event.preventDefault();
1394					// document.cookie = hideInfoBarCookie;
1395					window.location.assign(link.href);
1396				}
1397			});
1398		}
1399	}
1400}
1401
1402setupSubMenu();
1403setupCollapsible();
1404setupTabs();
1405setupSmoothAnchorScroll();
1406setupFormBlocks();
1407setWindowScroll();
1408createGallery();
1409setupProductBlock();
1410setupTestimonials();
1411setupTabGallery();
1412setupPopupButton();
1413setupHustleCTA();
1414setupRemoveButton();
1415setupTopMenuBar();
1416setTimeout(setupTransitionElements, 1000);
1417
1418let remove = false;
1419let nonList = document.querySelectorAll('.variation-NonDrivingGuests');
1420for (let i = nonList.length - 1; i >= 0; i--) {
1421	if (nonList[i].innerHTML.indexOf('None ($0.00)') !== -1) {
1422		remove = true;
1423		break;
1424	}
1425}
1426for (let i = nonList.length - 1; i >= 0; i--) {
1427	nonList[i].parentNode.removeChild(nonList[i]);
1428}

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.