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.