PageSourceSearch

https://www.columbiaortho.org/sites/default/files/js/js_N8XrEtDUgrnVQEoJCBBPIcdwJIrqKLS7cA-2RpK_xnk.js

js columbiaortho.org collected 2026-10-03 21:01:40 UTC 99,283 bytes, 1,029 lines download raw bytes

vendor: 4,096 bytes, lines 1-3
1/*! lazysizes - v5.3.1 */
2
3!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a<H.minSize&&t&&!e._lazysizesWidth){a=t.offsetWidth;t=t.parentNode}return a},ee=function(){var a,i;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;a=true;i=false;while(e.length){e.shift()()}a=false};var e=function(e,t){if(a&&!t){e.apply(this,arguments)}else{n.push(e);if(!i){i=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(a,e){return e?function(){ee(a)}:function(){var e=this;var t=arguments;ee(function(){a.apply(e,t)})}},ae=function(e){var a;var i=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){a=false;i=f.now();e()};var s=o&&n>49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e<i){I(n,i-e)}else{(o||r)(r)}};return function(){a=f.now();if(!t){t=I(n,i)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var M=0;var N=-1;var L=function(e){M--;if(!e||M<0||!e.target){M=0}};var x=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var W=function(e,t){var a;var i=e;var r=x(e);g-=t;b+=t;p-=t;C+=t;while(r&&(i=i.offsetParent)&&i!=D.body&&i!=O){r=(Z(i,"opacity")||1)>0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&p<a.right&&b>a.top-1&&g<a.bottom+1}}return r};var t=function(){var e,t,a,i,r,n,s,o,l,u,f,c;var d=k.elements;if((h=H.loadMode)&&M<8&&(e=d.length)){t=0;N++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(o=d[t][$]("data-expand"))||!(n=o*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&M<1&&N>2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>
vendor: 5,861 bytes, lines 3-7
32&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",i)}}if(!a.detail.dataAttr){Y(e,a.detail)}});var i=function(e,t,a){var i;var r=e.parentNode;if(r){a=s(e,r,a);i=X(e,"lazybeforesizes",{width:a,dataAttr:!!t});if(!i.defaultPrevented){a=i.detail.width;if(a&&a!==e._lazysizesWidth){n(e,r,i,a)}}}};var e=function(){var e;var t=a.length;if(t){e=0;for(;e<t;e++){i(a[e])}}};var t=ie(e);return{_:function(){a=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:i}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{});;
4/*! jQuery UI - v1.10.2 - 2013-03-14
5* http://jqueryui.com
6* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
7(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id
vendor: 9,552 bytes, lines 7-14
7)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);;
8/*! jQuery UI - v1.10.2 - 2013-03-14
9* http://jqueryui.com
10* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
11(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);;
12/*! lazysizes - v5.3.1 */
13
14!function(e,t){var i=function(){t(e.lazySizes),e.removeEventListener("lazyunveilread",i,!0)};t=t.bind(null,e,e.document),"object"==typeof module&&module.exports?t(require("lazysizes")):"function"==typeof define&&define.amd?define(["lazysizes"],t):e.lazySizes?i():e.addEventListener("lazyunveilread",i,!0)}(window,function(o,r,e){"use strict";var s,t,i,n,d,c,a,u,f,l,m,h,p;function g(){this.ratioElems=r.getElementsByClassName("lazyaspectratio"),this._setupEvents(),this.processImages()}o.addEventListener&&(s=Array.prototype.forEach,d=/^picture$/i,a="img["+(c="data-aspectratio")+"]",u=function(e){return o.matchMedia?(u=function(e){return!e||(matchMedia(e)||{}).matches})(e):o.Modernizr&&Modernizr.mq?!e||Modernizr.mq(e):!e},f=e.aC,l=e.rC,m=e.cfg,g.prototype={_setupEvents:function(){function t(e){e.naturalWi
vendor: 4,371 bytes, lines 14-96
14dth<36?n.addAspectRatio(e,!0):n.removeAspectRatio(e,!0)}function e(){n.processImages()}var i,n=this;function a(){s.call(n.ratioElems,t)}r.addEventListener("load",function(e){e.target.getAttribute&&e.target.getAttribute(c)&&t(e.target)},!0),addEventListener("resize",function(){clearTimeout(i),i=setTimeout(a,99)}),r.addEventListener("DOMContentLoaded",e),addEventListener("load",e)},processImages:function(e){for(var t=("length"in(e=e||r)&&!e.nodeName?e:e.querySelectorAll(a)),i=0;i<t.length;i++)36<t[i].naturalWidth?this.removeAspectRatio(t[i]):this.addAspectRatio(t[i])},getSelectedRatio:function(e){var t,i,n,a,o,r=e.parentNode;if(r&&d.test(r.nodeName||""))for(t=0,i=(n=r.getElementsByTagName("source")).length;t<i;t++)if(a=n[t].getAttribute("data-media")||n[t].getAttribute("media"),m.customMedia[a]&&(a=m.customMedia[a]),u(a)){o=n[t].getAttribute(c);break}return o||e.getAttribute(c)||""},parseRatio:(h=/^\s*([+\d\.]+)(\s*[\/x]\s*([+\d\.]+))?\s*$/,p={},function(e){var t;return!p[e]&&(t=e.match(h))&&(t[3]?p[e]=t[1]/t[3]:p[e]=+t[1]),p[e]}),addAspectRatio:function(e,t){var i,n=e.offsetWidth,a=e.offsetHeight;t||f(e,"lazyaspectratio"),n<36&&a<=0?(n||a&&o.console)&&console.log("Define width or height of image, so we can calculate the other dimension"):(i=this.getSelectedRatio(e),(i=this.parseRatio(i))&&(n?e.style.height=n/i+"px":e.style.width=a*i+"px"))},removeAspectRatio:function(e){l(e,"lazyaspectratio"),e.style.height="",e.style.width="",e.removeAttribute(c)}},(i=function(){(n=o.jQuery||o.Zepto||o.shoestring||o.$)&&n.fn&&!n.fn.imageRatio&&n.fn.filter&&n.fn.add&&n.fn.find?n.fn.imageRatio=function(){return t.processImages(this.find(a).add(this.filter(a))),this}:n=!1})(),setTimeout(i),t=new g,o.imageRatio=t,"object"==typeof module&&module.exports?module.exports=t:"function"==typeof define&&define.amd&&define(t))});;
15/**
16 * Limits the invocations of a function in a given time frame.
17 *
18 * The debounce function wrapper should be used sparingly. One clear use case
19 * is limiting the invocation of a callback attached to the window resize event.
20 *
21 * Before using the debounce function wrapper, consider first whether the
22 * callback could be attache to an event that fires less frequently or if the
23 * function can be written in such a way that it is only invoked under specific
24 * conditions.
25 *
26 * @param {Function} callback
27 *   The function to be invoked.
28 *
29 * @param {Number} wait
30 *   The time period within which the callback function should only be
31 *   invoked once. For example if the wait period is 250ms, then the callback
32 *   will only be called at most 4 times per second.
33 */
34
35var Drupal = Drupal || {};
36
37Drupal.debounce = function (callback, wait) {
38
39  "use strict";
40
41  var timeout, result;
42  return function () {
43    var context = this;
44    var args = arguments;
45    var later = function () {
46      timeout = null;
47      result = callback.apply(context, args);
48    };
49    window.clearTimeout(timeout);
50    timeout = window.setTimeout(later, wait);
51    return result;
52  };
53};
54;
55/**
56 * Adds an HTML element and method to trigger audio UAs to read system messages.
57 *
58 * Use Drupal.announce() to indicate to screen reader users that an element on
59 * the page has changed state. For instance, if clicking a link loads 10 more
60 * items into a list, one might announce the change like this.
61 * $('#search-list')
62 *   .on('itemInsert', function (event, data) {
63 *     // Insert the new items.
64 *     $(data.container.el).append(data.items.el);
65 *     // Announce the change to the page contents.
66 *     Drupal.announce(Drupal.t('@count items added to @container',
67 *       {'@count': data.items.length, '@container': data.container.title}
68 *     ));
69 *   });
70 */
71(function (Drupal, debounce) {
72
73  "use strict";
74
75  var liveElement;
76  var announcements = [];
77
78  /**
79   * Builds a div element with the aria-live attribute and attaches it
80   * to the DOM.
81   */
82  Drupal.behaviors.drupalAnnounce = {
83    attach: function (context) {
84      // Create only one aria-live element.
85      if (!liveElement) {
86        liveElement = document.createElement('div');
87        liveElement.id = 'drupal-live-announce';
88        liveElement.className = 'element-invisible';
89        liveElement.setAttribute('aria-live', 'polite');
90        liveElement.setAttribute('aria-busy', 'false');
91        document.body.appendChild(liveElement);
92      }
93    }
94  };
95
96  /**
vendor: 5,734 bytes, lines 97-170
97   * Concatenates announcements to a single string; appends to the live region.
98   */
99  function announce () {
100    var text = [];
101    var priority = 'polite';
102    var announcement;
103
104    // Create an array of announcement strings to be joined and appended to the
105    // aria live region.
106    for (var i = 0, il = announcements.length; i < il; i++) {
107      announcement = announcements.pop();
108      text.unshift(announcement.text);
109      // If any of the announcements has a priority of assertive then the group
110      // of joined announcements will have this priority.
111      if (announcement.priority === 'assertive') {
112        priority = 'assertive';
113      }
114    }
115
116    if (text.length) {
117      // Clear the liveElement so that repeated strings will be read.
118      liveElement.innerHTML = '';
119      // Set the busy state to true until the node changes are complete.
120      liveElement.setAttribute('aria-busy', 'true');
121      // Set the priority to assertive, or default to polite.
122      liveElement.setAttribute('aria-live', priority);
123      // Print the text to the live region. Text should be run through
124      // Drupal.t() before being passed to Drupal.announce().
125      liveElement.innerHTML = text.join('\n');
126      // The live text area is updated. Allow the AT to announce the text.
127      liveElement.setAttribute('aria-busy', 'false');
128    }
129  }
130
131  /**
132   * Triggers audio UAs to read the supplied text.
133   *
134   * The aria-live region will only read the text that currently populates its
135   * text node. Replacing text quickly in rapid calls to announce results in
136   * only the text from the most recent call to Drupal.announce() being read.
137   * By wrapping the call to announce in a debounce function, we allow for
138   * time for multiple calls to Drupal.announce() to queue up their messages.
139   * These messages are then joined and append to the aria-live region as one
140   * text node.
141   *
142   * @param String text
143   *   A string to be read by the UA.
144   * @param String priority
145   *   A string to indicate the priority of the message. Can be either
146   *   'polite' or 'assertive'. Polite is the default.
147   *
148   * @see http://www.w3.org/WAI/PF/aria-practices/#liveprops
149   */
150  Drupal.announce = function (text, priority) {
151    // Save the text and priority into a closure variable. Multiple simultaneous
152    // announcements will be concatenated and read in sequence.
153    announcements.push({
154      text: text,
155      priority: priority
156    });
157    // Immediately invoke the function that debounce returns. 200 ms is right at
158    // the cusp where humans notice a pause, so we will wait
159    // at most this much time before the set of queued announcements is read.
160    return (debounce(announce, 200)());
161  };
162}(Drupal, Drupal.debounce));
163;
164/*! jQuery UI - v1.10.2 - 2013-03-14
165* http://jqueryui.com
166* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
167(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);;
168/*! jQuery UI - v1.10.2 - 2013-03-14
169* http://jqueryui.com
170* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
vendor: 10,068 bytes, line 171
171(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);
171;
172!function(e,s){if("function"==typeof define&&define.amd)define([],s);else if("undefined"!=typeof exports)s();else{var i={exports:{}};s(),e.cola_alerts_dismiss=i.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,function(){"use strict";!function(e,s){s.behaviors.colaAlertDismiss={attach:function(){var s=this;this.alert="",this.alertWrapper="",this.key="";var i=this,t=setInterval(function(){e(".cb-alert__wrapper").length&&(i.alertWrapper=e(".cb-alert__wrapper"),i.alert=e("#cb-alert"),i.key=i.alert.attr("data-key"),i.isDismissed()?s.alert.addClass("cb-alert--dismissed"):i.dismissInit(),clearInterval(t))},200)},dismissInit:function(){var i=this,t=this;if(this.alertWrapper.length){var a=e("<button/>",{"class":"cb-alert__dismiss","aria-label":s.t("Dismiss site alert"),title:s.t("Dismiss site alert"),click:function(e){i.handleClick(e)}});this.alert.once("dismiss",function(){t.alertWrapper.append(a),t.alert.addClass("cb-alert--visible")})}},handleClick:function(s){s.preventDefault(),this.alert.removeClass("cb-alert--visible"),this.alert.addClass("cb-alert--dismissed"),e.cookie("siteAlertDismissed",this.key)},isDismissed:function(){return e.cookie("siteAlertDismissed")===this.key}}}(jQuery,Drupal)});;
173!function(){"use strict";var e,s;e=jQuery,(s=Drupal).behaviors.piwikConsent={attach(){window.ppms&&window.ppms.cm&&(this.consentTypes={analytics:{name:"Performance",description:"These cookies allow Columbia to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and, therefore, anonymous."},ab_testing_and_personalization:{name:"AB Testing",description:"We will create a cookie in your browser to ensure consistency of our A/B tests. A/B tests are small changes displayed to different groups of visitors. We use the data to create a better experience for all visitors. We will also use this cookie to personalize content for you."},conversion_tracking:{name:"Conversion Tracking",description:"We will store data about when you complete certain actions on our website to understand better how you use it. We use this data to improve your experience with our site."},marketing_automation:{name:"Marketing Automation",description:"We will store data to create marketing campaigns for certain groups of visitors."},remarketing:{name:"Remarketing",description:"We will store data to show you our advertisements (only ours) on other websites relevant to your interests."},user_feedback:{name:"User Feedback",description:"We will store data in an aggregated form to analyze the performance of our website's user interface. We use this data to improve the site for all visitors."},custom_consent:{name:"Custom consent",description:"Adjust this copy to your needs."}},this.baseClass="cb-consent-form",this.initConsents())},savePreferences(){const s=this,t={};e(`.${this.baseClass}__consent-details-checkbox`).each(((s,n)=>{const a=e(n).attr("data-type"),o=e(n).is(":checked")?1:0;t[a]={status:o}})),ppms.cm.api("setComplianceSettings",{consents:t},(()=>s.hideConsentForm()),console.error)},setAll(s){e(`.${this.baseClass}__consent-details-checkbox`).prop("checked",s)},rejectAll(){this.setAll(!1),this.savePreferences()},acceptAll(){this.setAll(!0),this.savePreferences()},showConsentForm(s){e(`#${this.baseClass}`).length||this.renderConsentForm(s),e(`#${this.baseClass}`).removeClass(`${this.baseClass}--hidden`),e(`#${this.baseClass}`)[0].dispatchEvent(this.heightChangeEvent)},hideConsentForm(){e(`#${this.baseClass}`).addClass(`${this.baseClass}--hidden`),e(`#${this.baseClass}`)[0].dispatchEvent(this.heightChangeEvent)},initConsents(){const e=this;window.ppms.cm.api("getComplianceSettings",(s=>{Object.keys(s.consents).length>0&&e.hasChosen(s.consents)||ppms.cm.api("openConsentForm",(s=>{s&&(document.getElementById(s)||ppms.cm.api("getNewComplianceTypes",(s=>{e.setNewConsentTypes(s)}),console.error))}),console.error)}),console.error)},hasChosen(e){const s=Object.keys(this.consentTypes);for(let t=0;t<s.length;t++)if(void 0!==e[s[t]]&&-1===e[s[t]].status)return!1;return!0},setNewConsentTypes(e){const s=this;e.length>0?(ppms.cm.api("setInitialComplianceSettings",e,(()=>{s.getConsentSettings()}),console.error),ppms.cm.api("trackMainFormView")):s.getConsentSettings()},getConsentSettings(){const e=this;ppms.cm.api("getComplianceSettings",(s=>{e.hasChosen(s.consents)||e.showConsentForm(s.consents)}),console.error)},renderConsentList(s){const t=this,n=e("<ul />",{class:`${t.baseClass}__consent-list`});
173return s.forEach((s=>{const a=e("<li />",{class:`${t.baseClass}__consent-item`});a.text(t.consentTypes[s].name),n.append(a)})),n},renderConsentDetails(t,n){const a=this;if(t.length){const o=e("<div />",{class:`${this.baseClass}__consent-details`});for(let i=0;i<t.length;i++){const c=t[i],l=`${a.baseClass}__consent-details-checkbox-${c}`,r=e("<div />",{class:`${a.baseClass}__consent-details-element`}),d=e("<input />",{type:"checkbox",role:"switch",class:`${a.baseClass}__consent-details-checkbox`,id:l,"data-type":c,checked:0!==n[c].status}),p=e("<label />",{for:l,class:`${a.baseClass}__consent-details-label`}),h=e("<div />",{class:`${a.baseClass}__consent-details-text`});e("<span />",{class:`${a.baseClass}__consent-details-switch`,html:`<span class="${a.baseClass}__consent-details-switch-housing">\n              <span class="${a.baseClass}__consent-details-switch-knob"></span>\n            </span>\n            <span class="${a.baseClass}__consent-details-switch--on" aria-hidden="true">${s.t("On")}</span>\n            <span class="${a.baseClass}__consent-details-switch--off" aria-hidden="true">${s.t("Off")}</span>`}).appendTo(p),e("<span />",{class:`${a.baseClass}__consent-details-label-title`,text:a.consentTypes[c].name}).appendTo(h),e("<span />",{class:`${a.baseClass}__consent-details-label-description`,text:a.consentTypes[c].description}).appendTo(h),h.appendTo(p),d.appendTo(r),p.appendTo(r),r.appendTo(o),d.on("focus",(()=>d.parent().addClass(`${this.baseClass}__consent-details-element--focus`))),d.on("blur",(()=>d.parent().removeClass(`${this.baseClass}__consent-details-element--focus`)))}return o}return""},renderConsentForm(t){const n=this,a=Object.keys(t),{baseClass:o}=n;
173if(n.heightChangeEvent=new Event("consent-height-change",{bubbles:!0}),!e(`#${o}`).length){const i=e("<Section />",{id:o,class:`${o} ${o}--hidden`,"aria-labelledby":`${o}__title`,"aria-describedby":`${o}__description`,"aria-modal":"false",role:"dialog"}),c=e("<div />",{class:`${o}__content-wrapper`}),l=e("<div />",{class:`${o}__header`,html:`<p class="${o}__pseudo-heading">${s.t("We value your privacy")}</p>`}),r=e("<div />",{class:`${o}__body`,html:`<p id="${o}__description" class="${o}__description">\n          ${s.t("We use cookies to analyze website usage and improve it. Some cookies are necessary for the website to function and cannot be switched off. Other cookies help us measure performance and collect anonymous data. You can opt in or opt out of specific non-essential cookies below.")}\n          </p>\n          <div id="${o}__types" class="${o}__types"></div>`}),d=e("<div />",{id:`${o}__details`,class:`${o}__details ${o}__details--hidden`}),p=e("<div />",{class:`${o}__actions`}),h='<svg aria-labelledby="title desc" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" fill="currentColor">\n          <title>External link</title>\n          <desc>Opens in a new window</desc>\n          <path d="M401.961 338.963v91.227c0 22.619-8.031 41.956-24.089 58.014-16.062 16.063-35.399 24.09-58.015 24.09H82.67c-22.62 0-41.956-8.026-58.014-24.09C8.594 472.146.567 452.809.567 430.19V193.002c0-22.615 8.027-41.951 24.089-58.014 16.058-16.058 35.395-24.089 58.014-24.089h200.697c2.659 0 4.847.855 6.557 2.566 1.711 1.71 2.566 3.897 2.566 6.557v18.246c0 2.664-.855 4.846-2.566 6.557-1.71 1.71-3.897 2.566-6.557 2.566H82.67c-12.543 0-23.283 4.468-32.214 13.399-8.936 8.936-13.399 19.67-13.399 32.214V430.19c0 12.544 4.463 23.283 13.399 32.214 8.931 8.936 19.671 13.399 32.214 13.399h237.188c12.544 0 23.279-4.464 32.215-13.399 8.931-8.931 13.398-19.67 13.398-32.214v-91.227c0-2.659.855-4.846 2.565-6.557 1.711-1.71 3.894-2.565 6.558-2.565h18.245c2.659 0 4.846.855 6.557 2.565 1.711 1.712 2.565 3.898 2.565 6.557zm109.472-246.31v145.962c0 4.944-1.809 9.221-5.417 12.829-3.612 3.612-7.889 5.416-12.828 5.416-4.944 0-9.221-1.804-12.829-5.416l-50.174-50.174-185.874 185.873c-1.902 1.901-4.089 2.851-6.557 2.851-2.472 0-4.66-.949-6.557-2.851l-32.499-32.5c-1.902-1.897-2.851-4.084-2.851-6.557 0-2.468.949-4.655 2.851-6.557l185.873-185.874-50.175-50.174c-3.612-3.608-5.416-7.884-5.416-12.829 0-4.94 1.804-9.216 5.416-12.829 3.608-3.608 7.885-5.417 12.829-5.417h145.962c4.939 0 9.216 1.809 12.828 5.417 3.609 3.614 5.418 7.89 5.418 12.83z" />\n        </svg>';e("<h2 />",{id:`${o}__title`,class:`${o}__title visually-hidden`,text:s.t("Privacy settings and cookie consent")}).prependTo(l),e("<button />",{id:`${o}__close`,class:`${o}__close`,"aria-label":"Close consent form",html:'<svg viewbox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">\n            <g>\n              <path d="M2.188 4.406l2.244-2.25 9.725 9.75-2.244 2.25-9.726-9.75"></path>\n              <path d="M11.913 2.156l2.244 2.25-9.725 9.75-2.245-2.25 9.726-9.75"></path>\n            </g>\n          </svg>',click:()=>{n.hideConsentForm(),ppms.cm.api("trackCloseButtonClick")}}).appendTo(l),e("<button />",{class:`${o}__toggle-details`,text:"Show consent details","aria-expanded":"false","aria-controls":`${o}__details`,html:`<span>${s.t("Show consent details")}</span>\n          <svg viewbox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor">\n            <g>\n              <path d="M2.15 6 l 2.25 -2.25 3.75 3.75 3.75 -3.75 2.25 2.25 -6 6Z" ></path>\n            </g>\n          </svg>`,click:()=>{const t=e(`.${o}__toggle-details`),a=t.find("span");e(`.${o}__details`).toggleClass(`${o}__details--hidden`),e(`.${o}__details`).hasClass(`${o}__details--hidden`)?(a.text(s.t("Show consent details")),t.attr("aria-expanded","false")):(a.text(s.t("Hide consent details")),t.attr("aria-expanded","true")),e(`.${o}`)[0].dispatchEvent(n.heightChangeEvent)}}).appendTo(r);const _=e("<fieldset />",{class:`${o}__details-fieldset`,html:"<legend>Cookie Preferences</legend>"});_.append(n.renderConsentDetails(a,t)),_.appendTo(d),e("<button />",{id:`${o}__save`,class:`${o}__save`,text:s.t("Save and close"),click:()=>{n.savePreferences(),ppms.cm.api("trackSaveChoicesClick")}}).appendTo(d),d.appendTo(r),e("<button />",{id:`${o}__accept-all`,class:`${o}__accept-all`,text:s.t("Accept all"),click:()=>{n.acceptAll(),ppms.cm.api("trackAgreeToAllClick")}}).appendTo(p),e("<button />",{id:`${o}__reject-all`,class:`${o}__reject-all cb-button--style-outline`,text:s.t("Reject all"),click:()=>{n.rejectAll(),ppms.cm.api("trackRejectAllClick")}}).appendTo(p),e("<a />",{id:`${o}__policy-link`,class:`${o}__policy-link`,html:`${s.t("Privacy Policy")} ${h}`,href:"https://www.cuimc.columbia.edu/privacy-policy",target:"_blank",rel:"noopener noreferrer",click:()=>ppms.cm.api("trackPrivacyPolicyLinkView")}).appendTo(p),l.appendTo(c),r.appendTo(c),p.appendTo(c),c.appendTo(i),i.appendTo("#cookieconsent-container")}}}}();
174;
175/*jslint browser: true */ /*global jQuery: true */
176
177/**
178 * jQuery Cookie plugin
179 *
180 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
181 * Dual licensed under the MIT and GPL licenses:
182 * http://www.opensource.org/licenses/mit-license.php
183 * http://www.gnu.org/licenses/gpl.html
184 *
185 */
186
187// TODO JsDoc
188
189/**
190 * Create a cookie with the given key and value and other optional parameters.
191 *
192 * @example $.cookie('the_cookie', 'the_value');
193 * @desc Set the value of a cookie.
194 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
195 * @desc Create a cookie with all available options.
196 * @example $.cookie('the_cookie', 'the_value');
197 * @desc Create a session cookie.
198 * @example $.cookie('the_cookie', null);
199 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
200 *       used when the cookie was set.
201 *
202 * @param String key The key of the cookie.
203 * @param String value The value of the cookie.
204 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
205 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
206 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
207 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
208 *                             when the the browser exits.
209 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
210 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
211 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
212 *                        require a secure protocol (like HTTPS).
213 * @type undefined
214 *
215 * @name $.cookie
216 * @cat Plugins/Cookie
217 * @author Klaus Hartl/[email protected]
218 */
219
220/**
221 * Get the value of a cookie with the given key.
222 *
223 * @example $.cookie('the_cookie');
224 * @desc Get the value of a cookie.
225 *
226 * @param String key The key of the cookie.
227 * @return The value of the cookie.
228 * @type String
229 *
230 * @name $.cookie
231 * @cat Plugins/Cookie
232 * @author Klaus Hartl/[email protected]
233 */
234jQuery.cookie = function (key, value, options) {
235
236    // key and value given, set cookie...
237    if (arguments.length > 1 && (value === null || typeof value !== "object")) {
238        options = jQuery.extend({}, options);
239
240        if (value === null) {
241            options.expires = -1;
242        }
243
244        if (typeof options.expires === 'number') {
245            var days = options.expires, t = options.expires = new Date();
246            t.setDate(t.getDate() + days);
247        }
248
249        return (document.cookie = [
250            encodeURIComponent(key), '=',
251            options.raw ? String(value) : encodeURIComponent(String(value)),
252            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
253            options.path ? '; path=' + options.path : '',
254            options.domain ? '; domain=' + options.domain : '',
255            options.secure ? '; secure' : ''
256        ].join(''));
257    }
258
259    // key and possibly options given, get cookie...
260    options = value || {};
261    var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
262    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
263};
264;
265/*!
266 * jQuery Form Plugin
267 * version: 4.2.1
268 * Requires jQuery v1.7 or later
269 * Copyright 2017 Kevin Morris
270 * Copyright 2006 M. Alsup
271 * Project repository: https://github.com/jquery-form/form
272 * Dual licensed under the MIT and LGPLv3 licenses.
273 * https://github.com/jquery-form/form#license
274 */
275!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){"use strict";function b(b){var c=b.data;b.isDefaultPrevented()||(b.preventDefault(),a(b.target).closest("form").ajaxSubmit(c))}function c(b){var c=b.target,d=a(c);if(!d.is("[type=submit],[type=image]")){var e=d.closest("[type=submit]");if(0===e.length)return;c=e[0]}var f=c.form;if(f.clk=c,"image"===c.type)if(void 0!==b.offsetX)f.clk_x=b.offsetX,f.clk_y=b.offsetY;else if("function"==typeof a.fn.offset){var g=d.offset();f.clk_x=b.pageX-g.left,f.clk_y=b.pageY-g.top}else f.clk_x=b.pageX-c.offsetLeft,f.clk_y=b.pageY-c.offsetTop;setTimeout(function(){f.clk=f.clk_x=f.clk_y=null},100)}function d(){if(a.fn.ajaxSubmit.debug){var b="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(b):window.opera&&window.opera.postError&&window.opera.postError(b)}}var e={};e.fileapi=void 0!==a('<input type="file">').get(0).files,e.formdata=void 0!==window.FormData;var f=!!a.fn.prop;a.fn.attr2=function(){if(!f)return this.attr.apply(this,arguments);var a=this.prop.apply(this,arguments);return a&&a.jquery||"string"==typeof a?a:this.attr.apply(this,arguments)},a.fn.ajaxSubmit=function(b,c,g,h){function i(c){var d,e,f=a.param(c,b.traditional).split("&"),g=f.length,h=[];for(d=0;d<g;d++)f[d]=f[d].replace(/\+/g," "),e=f[d].split("="),h.push([decodeURIComponent(e[0]),decodeURIComponent(e[1])]);return h}function j(c){for(var d=new FormData,e=0;e<c.length;e++)d.append(c[e].name,c[e].value);if(b.extraData){var f=i(b.extraData);for(e=0;e<f.length;e++)f[e]&&d.append(f[e][0],f[e][1])}b.data=null;var g=a.extend(!0,{},a.ajaxSettings,b,{contentType:!1,processData:!1,cache:!1,type:l||"POST"});b.uploadProgress&&(g.xhr=function(){var c=a.ajaxSettings.xhr();return c.upload&&c.upload.addEventListener("progress",function(a){var c=0,d=a.loaded||a.position,e=a.total;a.lengthComputable&&(c=Math.ceil(d/e*100)),b.uploadProgress(a,d,e,c)},!1),c}),g.data=null;var h=g.beforeSend;return g.beforeSend=function(a,c){b.formData?c.data=b.formData:c.data=d,h&&h.call(this,a,c)},a.ajax(g)}function k(c){function e(a){var b=null;try{a.contentWindow&&(b=a.contentWindow.document)}catch(a){d("cannot get iframe.contentWindow document: "+a)}if(b)return b;try{b=a.contentDocument?a.contentDocument:a.document}catch(c){d("cannot get iframe.contentDocument: "+c),b=a.document}return b}function g(){function b(){try{var a=e(q).readyState;d("state = "+a),a&&"uninitialized"===a.toLowerCase()&&setTimeout(b,50)}catch(a){d("Server abort: ",a," (",a.name,")"),h(2),w&&clearTimeout(w),w=void 0}}var c=o.attr2("target"),f=o.attr2("action"),g=o.attr("enctype")||o.attr("encoding")||"multipart/form-data";x.setAttribute("target",n),l&&!/post/i.test(l)||x.setAttribute("method","POST"),f!==k.url&&x.setAttribute("action",k.url),k.skipEncodingOverride||l&&!/post/i.test(l)||o.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"}),k.timeout&&(w=setTimeout(function(){v=!0,h(1)},k.timeout));var i=[];try{if(k.extraData)for(var j in k.extraData)k.extraData.hasOwnProperty(j)&&(a.isPlainObject(k.extraData[j])&&k.extraData[j].hasOwnProperty("name")&&k.extraData[j].hasOwnProperty("value")?i.push(a('<input type="hidden" name="'+k.extraData[j].name+'">',z).val(k.extraData[j].value).appendTo(x)[0]):i.push(a('<input type="hidden" name="'+j+'">',z).val(k.extraData[j]).appendTo(x)[0]));k.iframeTarget||p.appendTo(A),q.attachEvent?q.attachEvent("onload",h):q.addEventListener("load",h,!1),setTimeout(b,15);try{x.submit()}catch(a){var m=document.createElement("form").submit;m.apply(x)}}finally{x.setAttribute("action",f),x.setAttribute("enctype",g),c?x.setAttribute("target",c):o.removeAttr("target"),a(i).remove()}}function h(b){if(!r.aborted&&!F){if(E=e(q),E||(d("cannot access response document"),b=2),1===b&&r)return r.abort("timeout"),void y.reject(r,"timeout");if(2===b&&r)return r.abort("server abort"),void y.reject(r,"error","server abort");if(E&&E.location.href!==k.iframeSrc||v){q.detachEvent?q.detachEvent("onload",h):q.removeEventListener("load",h,!1);var c,f="success";try{if(v)throw"timeout";var g="xml"===k.dataType||E.XMLDocument||a.isXMLDoc(E);if(d("isXml="+g),!g&&window.opera&&(null===E.body||!E.body.innerHTML)&&--G)return d("requeing onLoad callback, DOM not available"),void setTimeout(h,250);var i=E.body?E.body:E.documentElement;r.responseText=i?i.innerHTML:null,r.responseXML=E.XMLDocument?E.XMLDocument:E,g&&(k.dataType="xml"),r.getResponseHeader=function(a){return{"content-type":k.dataType}[a.toLowerCase()]},i&&(r.status=Number(i.getAttribute("status"))||r.status,r.statusText=i.getAttribute("statusText")||r.statusText);var j=(k.dataType||"").toLowerCase(),l=/(json|script|text)/.test(j);if(l||k.textarea){var n=E.getElementsByTagName("textarea")[0];if(n)r.responseText=n.value,r.status=Number(n.getAttribute("status"))||r.status,r.statusText=n.getAttribute("statusText")||r.statusText;else if(l){var o=E.getElementsByTagName("pre")[0],s=E.getElementsByTagName("body")[0];o?r.responseText=o.textContent?o.textContent:o.innerText:s&&(r.responseText=s.textContent?s.textContent:s.innerText)}}else"xml"===j&&!r.responseXML&&r.responseText&&(r.responseXML=H(r.responseText));try{D=J(r,j,k)}catch(a){f="parsererror",r.error=c=a||f}}catch(a){d("error caught: ",a),f="error",r.error=c=a||f}r.aborted&&(d("upload aborted"),f=null),r.status&&(f=r.status>=200&&r.status<300||304===r.status?"success":"error"),"success"===f?(k.success&&k.success.call(k.
275context,D,"success",r),y.resolve(r.responseText,"success",r),m&&a.event.trigger("ajaxSuccess",[r,k])):f&&(void 0===c&&(c=r.statusText),k.error&&k.error.call(k.context,r,f,c),y.reject(r,"error",c),m&&a.event.trigger("ajaxError",[r,k,c])),m&&a.event.trigger("ajaxComplete",[r,k]),m&&!--a.active&&a.event.trigger("ajaxStop"),k.complete&&k.complete.call(k.context,r,f),F=!0,k.timeout&&clearTimeout(w),setTimeout(function(){k.iframeTarget?p.attr("src",k.iframeSrc):p.remove(),r.responseXML=null},100)}}}var i,j,k,m,n,p,q,r,t,u,v,w,x=o[0],y=a.Deferred();if(y.abort=function(a){r.abort(a)},c)for(j=0;j<s.length;j++)i=a(s[j]),f?i.prop("disabled",!1):i.removeAttr("disabled");k=a.extend(!0,{},a.ajaxSettings,b),k.context=k.context||k,n="jqFormIO"+(new Date).getTime();var z=x.ownerDocument,A=o.closest("body");if(k.iframeTarget?(p=a(k.iframeTarget,z),u=p.attr2("name"),u?n=u:p.attr2("name",n)):(p=a('<iframe name="'+n+'" src="'+k.iframeSrc+'" />',z),p.css({position:"absolute",top:"-1000px",left:"-1000px"})),q=p[0],r={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(b){var c="timeout"===b?"timeout":"aborted";d("aborting upload... "+c),this.aborted=1;try{q.contentWindow.document.execCommand&&q.contentWindow.document.execCommand("Stop")}catch(a){}p.attr("src",k.iframeSrc),r.error=c,k.error&&k.error.call(k.context,r,c,b),m&&a.event.trigger("ajaxError",[r,k,c]),k.complete&&k.complete.call(k.context,r,c)}},m=k.global,m&&0==a.active++&&a.event.trigger("ajaxStart"),m&&a.event.trigger("ajaxSend",[r,k]),k.beforeSend&&k.beforeSend.call(k.context,r,k)===!1)return k.global&&a.active--,y.reject(),y;if(r.aborted)return y.reject(),y;(t=x.clk)&&(u=t.name)&&!t.disabled&&(k.extraData=k.extraData||{},k.extraData[u]=t.value,"image"===t.type&&(k.extraData[u+".x"]=x.clk_x,k.extraData[u+".y"]=x.clk_y));var B=a("meta[name=csrf-token]").attr("content"),C=a("meta[name=csrf-param]").attr("content");C&&B&&(k.extraData=k.extraData||{},k.extraData[C]=B),k.forceSync?g():setTimeout(g,10);var D,E,F,G=50,H=a.parseXML||function(a,b){return window.ActiveXObject?(b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(a)):b=(new DOMParser).parseFromString(a,"text/xml"),b&&b.documentElement&&"parsererror"!==b.documentElement.nodeName?b:null},I=a.parseJSON||function(a){return window.eval("("+a+")")},J=function(b,c,d){var e=b.getResponseHeader("content-type")||"",f=("xml"===c||!c)&&e.indexOf("xml")>=0,g=f?b.responseXML:b.responseText;return f&&"parsererror"===g.documentElement.nodeName&&a.error&&a.error("parsererror"),d&&d.dataFilter&&(g=d.dataFilter(g,c)),"string"==typeof g&&(("json"===c||!c)&&e.indexOf("json")>=0?g=I(g):("script"===c||!c)&&e.indexOf("javascript")>=0&&a.globalEval(g)),g};return y}if(!this.length)return d("ajaxSubmit: skipping submit process - no element selected"),this;var l,m,n,o=this;"function"==typeof b?b={success:b}:"string"==typeof b||b===!1&&arguments.length>0?(b={url:b,data:c,dataType:g},"function"==typeof h&&(b.success=h)):void 0===b&&(b={}),l=b.method||b.type||this.attr2("method"),m=b.url||this.attr2("action"),n="string"==typeof m?a.trim(m):"",n=n||window.location.href||"",n&&(n=(n.match(/^([^#]+)/)||[])[1]),b=a.extend(!0,{url:n,success:a.ajaxSettings.success,type:l||a.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},b);var p={};if(this.trigger("form-pre-serialize",[this,b,p]),p.veto)return d("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(b.beforeSerialize&&b.beforeSerialize(this,b)===!1)return d("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var q=b.traditional;void 0===q&&(q=a.ajaxSettings.traditional);var r,s=[],t=this.formToArray(b.semantic,s,b.filtering);if(b.data){var u=a.isFunction(b.data)?b.data(t):b.data;b.extraData=u,r=a.param(u,q)}if(b.beforeSubmit&&b.beforeSubmit(t,this,b)===!1)return d("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[t,this,b,p]),p.veto)return d("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var v=a.param(t,q);r&&(v=v?v+"&"+r:r),"GET"===b.type.toUpperCase()?(b.url+=(b.url.indexOf("?")>=0?"&":"?")+v,b.data=null):b.data=v;var w=[];if(b.resetForm&&w.push(function(){o.resetForm()}),b.clearForm&&w.push(function(){o.clearForm(b.includeHidden)}),!b.dataType&&b.target){var x=b.success||function(){};w.push(function(c,d,e){var f=arguments,g=b.replaceTarget?"replaceWith":"html";a(b.target)[g](c).each(function(){x.apply(this,f)})})}
275else b.success&&(a.isArray(b.success)?a.merge(w,b.success):w.push(b.success));if(b.success=function(a,c,d){for(var e=b.context||this,f=0,g=w.length;f<g;f++)w[f].apply(e,[a,c,d||o,o])},b.error){var y=b.error;b.error=function(a,c,d){var e=b.context||this;y.apply(e,[a,c,d,o])}}if(b.complete){var z=b.complete;b.complete=function(a,c){var d=b.context||this;z.apply(d,[a,c,o])}}var A=a("input[type=file]:enabled",this).filter(function(){return""!==a(this).val()}),B=A.length>0,C="multipart/form-data",D=o.attr("enctype")===C||o.attr("encoding")===C,E=e.fileapi&&e.formdata;d("fileAPI :"+E);var F,G=(B||D)&&!E;b.iframe!==!1&&(b.iframe||G)?b.closeKeepAlive?a.get(b.closeKeepAlive,function(){F=k(t)}):F=k(t):F=(B||D)&&E?j(t):a.ajax(b),o.removeData("jqxhr").data("jqxhr",F);for(var H=0;H<s.length;H++)s[H]=null;return this.trigger("form-submit-notify",[this,b]),this},a.fn.ajaxForm=function(e,f,g,h){if(("string"==typeof e||e===!1&&arguments.length>0)&&(e={url:e,data:f,dataType:g},"function"==typeof h&&(e.success=h)),e=e||{},e.delegation=e.delegation&&a.isFunction(a.fn.on),!e.delegation&&0===this.length){var i={s:this.selector,c:this.context};return!a.isReady&&i.s?(d("DOM not ready, queuing ajaxForm"),a(function(){a(i.s,i.c).ajaxForm(e)}),this):(d("terminating; zero elements found by selector"+(a.isReady?"":" (DOM not ready)")),this)}return e.delegation?(a(document).off("submit.form-plugin",this.selector,b).off("click.form-plugin",this.selector,c).on("submit.form-plugin",this.selector,e,b).on("click.form-plugin",this.selector,e,c),this):this.ajaxFormUnbind().on("submit.form-plugin",e,b).on("click.form-plugin",e,c)},a.fn.ajaxFormUnbind=function(){return this.off("submit.form-plugin click.form-plugin")},a.fn.formToArray=function(b,c,d){var f=[];if(0===this.length)return f;var g,h=this[0],i=this.attr("id"),j=b||void 0===h.elements?h.getElementsByTagName("*"):h.elements;if(j&&(j=a.makeArray(j)),i&&(b||/(Edge|Trident)\//.test(navigator.userAgent))&&(g=a(':input[form="'+i+'"]').get(),g.length&&(j=(j||[]).concat(g))),!j||!j.length)return f;a.isFunction(d)&&(j=a.map(j,d));var k,l,m,n,o,p,q;for(k=0,p=j.length;k<p;k++)if(o=j[k],(m=o.name)&&!o.disabled)if(b&&h.clk&&"image"===o.type)h.clk===o&&(f.push({name:m,value:a(o).val(),type:o.type}),f.push({name:m+".x",value:h.clk_x},{name:m+".y",value:h.clk_y}));else if((n=a.fieldValue(o,!0))&&n.constructor===Array)for(c&&c.push(o),l=0,q=n.length;l<q;l++)f.push({name:m,value:n[l]});else if(e.fileapi&&"file"===o.type){c&&c.push(o);var r=o.files;if(r.length)for(l=0;l<r.length;l++)f.push({name:m,value:r[l],type:o.type});else f.push({name:m,value:"",type:o.type})}else null!==n&&void 0!==n&&(c&&c.push(o),f.push({name:m,value:n,type:o.type,required:o.required}));if(!b&&h.clk){var s=a(h.clk),t=s[0];m=t.name,m&&!t.disabled&&"image"===t.type&&(f.push({name:m,value:s.val()}),f.push({name:m+".x",value:h.clk_x},{name:m+".y",value:h.clk_y}))}return f},a.fn.formSerialize=function(b){return a.param(this.formToArray(b))},a.fn.fieldSerialize=function(b){var c=[];return this.each(function(){var d=this.name;if(d){var e=a.fieldValue(this,b);if(e&&e.constructor===Array)for(var f=0,g=e.length;f<g;f++)c.push({name:d,value:e[f]});else null!==e&&void 0!==e&&c.push({name:this.name,value:e})}}),a.param(c)},a.fn.fieldValue=function(b){for(var c=[],d=0,e=this.length;d<e;d++){var f=this[d],g=a.fieldValue(f,b);null===g||void 0===g||g.constructor===Array&&!g.length||(g.constructor===Array?a.merge
275(c,g):c.push(g))}return c},a.fieldValue=function(b,c){var d=b.name,e=b.type,f=b.tagName.toLowerCase();if(void 0===c&&(c=!0),c&&(!d||b.disabled||"reset"===e||"button"===e||("checkbox"===e||"radio"===e)&&!b.checked||("submit"===e||"image"===e)&&b.form&&b.form.clk!==b||"select"===f&&b.selectedIndex===-1))return null;if("select"===f){var g=b.selectedIndex;if(g<0)return null;for(var h=[],i=b.options,j="select-one"===e,k=j?g+1:i.length,l=j?g:0;l<k;l++){var m=i[l];if(m.selected&&!m.disabled){var n=m.value;if(n||(n=m.attributes&&m.attributes.value&&!m.attributes.value.specified?m.text:m.value),j)return n;h.push(n)}}return h}return a(b).val().replace(/\r?\n/g,"\r\n")},a.fn.clearForm=function(b){return this.each(function(){a("input,select,textarea",this).clearFields(b)})},a.fn.clearFields=a.fn.clearInputs=function(b){var c=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var d=this.type,e=this.tagName.toLowerCase();c.test(d)||"textarea"===e?this.value="":"checkbox"===d||"radio"===d?this.checked=!1:"select"===e?this.selectedIndex=-1:"file"===d?/MSIE/.test(navigator.userAgent)?a(this).replaceWith(a(this).clone(!0)):a(this).val(""):b&&(b===!0&&/hidden/.test(d)||"string"==typeof b&&a(this).is(b))&&(this.value="")})},a.fn.resetForm=function(){return this.each(function(){var b=a(this),c=this.tagName.toLowerCase();switch(c){case"input":this.checked=this.defaultChecked;case"textarea":return this.value=this.defaultValue,!0;case"option":case"optgroup":var d=b.parents("select");return d.length&&d[0].multiple?"option"===c?this.selected=this.defaultSelected:b.find("option").resetForm():d.resetForm(),!0;case"select":return b.find("option").each(function(a){if(this.selected=this.defaultSelected,this.defaultSelected&&!b[0].multiple)return b[0].selectedIndex=a,!1}),!0;case"label":var e=a(b.attr("for")),f=b.find("input,select,textarea");return e[0]&&f.unshift(e[0]),f.resetForm(),!0;case"form":return("function"==typeof this.reset||"object"==typeof this.reset&&!this.reset.nodeType)&&this.reset(),!0;default:return b.find("form,input,label,select,textarea").resetForm(),!0}})},a.fn.enable=function(a){return void 0===a&&(a=!0),this.each(function(){this.disabled=!a})},a.fn.selected=function(b){return void 0===b&&(b=!0),this.each(function(){var c=this.type;if("checkbox"===c||"radio"===c)this.checked=b;else if("option"===this.tagName.toLowerCase()){var d=a(this).parent("select");b&&d[0]&&"select-one"===d[0].type&&d.find("option").selected(!1),this.selected=b}})},a.fn.ajaxSubmit.debug=!1});
276;
277(function ($) {
278
279/**
280 * Provides Ajax page updating via jQuery $.ajax (Asynchronous JavaScript and XML).
281 *
282 * Ajax is a method of making a request via JavaScript while viewing an HTML
283 * page. The request returns an array of commands encoded in JSON, which is
284 * then executed to make any changes that are necessary to the page.
285 *
286 * Drupal uses this file to enhance form elements with #ajax['path'] and
287 * #ajax['wrapper'] properties. If set, this file will automatically be included
288 * to provide Ajax capabilities.
289 */
290
291Drupal.ajax = Drupal.ajax || {};
292
293Drupal.settings.urlIsAjaxTrusted = Drupal.settings.urlIsAjaxTrusted || {};
294
295/**
296 * Attaches the Ajax behavior to each Ajax form element.
297 */
298Drupal.behaviors.AJAX = {
299  attach: function (context, settings) {
300    // Load all Ajax behaviors specified in the settings.
301    for (var base in settings.ajax) {
302      if (!$('#' + base + '.ajax-processed').length) {
303        var element_settings = settings.ajax[base];
304
305        if (typeof element_settings.selector == 'undefined') {
306          element_settings.selector = '#' + base;
307        }
308        $(element_settings.selector).each(function () {
309          element_settings.element = this;
310          Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
311        });
312
313        $('#' + base).addClass('ajax-processed');
314      }
315    }
316
317    // Bind Ajax behaviors to all items showing the class.
318    $('.use-ajax:not(.ajax-processed)').addClass('ajax-processed').each(function () {
319      var element_settings = {};
320      // Clicked links look better with the throbber than the progress bar.
321      element_settings.progress = { 'type': 'throbber' };
322
323      // For anchor tags, these will go to the target of the anch
323or rather
324      // than the usual location.
325      if ($(this).attr('href')) {
326        element_settings.url = $(this).attr('href');
327        element_settings.event = 'click';
328      }
329      // Special handling if the data-dialog attribute is TRUE.
330      if ($(this).data('dialog')) {
331        element_settings.dialog = $(this).data('dialog-options') || {};
332
333        var uri = element_settings.url;
334        if (uri.indexOf('?') === -1) {
335          uri += '?';
336        }
337        else {
338          uri += '&';
339        }
340        uri += '_format=drupal_dialog';
341
342        element_settings.url = uri;
343      }
344      var base = $(this).attr('id');
345      Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
346    });
347
348    // This class means to submit the form to the action using Ajax.
349    $('.use-ajax-submit:not(.ajax-processed)').addClass('ajax-processed').each(function () {
350      var element_settings = {};
351
352      // Ajax submits specified in this manner automatically submit to the
353      // normal form action.
354      element_settings.url = $(this.form).attr('action');
355      // Form submit button clicks need to tell the form what was clicked so
356      // it gets passed in the POST request.
357      element_settings.setClick = true;
358      // Form buttons use the 'click' event rather than mousedown.
359      element_settings.event = 'click';
360      // Clicked form buttons look better with the throbber than the progress bar.
361      element_settings.progress = { 'type': 'throbber' };
362
363      var base = $(this).attr('id');
364      Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
365    });
366  }
367};
368
369/**
370 * Ajax object.
371 *
372 * All Ajax objects on a page are accessible through the global Drupal.ajax
373 * object and are keyed by the submit button's ID. You can access them from
374 * your module's JavaScript file to override properties or functions.
375 *
376 * For example, if your Ajax enabled button has the ID 'edit-submit', you can
377 * redefine the function that is called to insert the new content like this
378 * (inside a Drupal.behaviors attach block):
379 * @code
380 *    Drupal.behaviors.myCustomAJAXStuff = {
381 *      attach: function (context, settings) {
382 *        Drupal.ajax['edit-submit'].commands.insert = function (ajax, response, status) {
383 *          new_content = $(response.data);
384 *          $('#my-wrapper').append(new_content);
385 *          alert('New content was appended to #my-wrapper');
386 *        }
387 *      }
388 *    };
389 * @endcode
390 */
391Drupal.ajax = function (base, element, element_settings) {
392  var defaults = {
393    url: 'system/ajax',
394    event: 'mousedown',
395    keypress: true,
396    selector: '#' + base,
397    effect: 'none',
398    speed: 'none',
399    method: 'replaceWith',
400    progress: {
401      type: 'throbber',
402      message: Drupal.t('Please wait...')
403    },
404    submit: {
405      'js': true
406    }
407  };
408
409  $.extend(this, defaults, element_settings);
410
411  this.element = element;
412  this.element_settings = element_settings;
413
414  // Replacing 'nojs' with 'ajax' in the URL allows for an easy method to let
415  // the server detect when it needs to degrade gracefully.
416  // There are five scenarios to check for:
417  // 1. /nojs/
418  // 2. /nojs$ - The end of a URL string.
419  // 3. /nojs? - Followed by a query (with clean URLs enabled).
420  //      E.g.: path/nojs?destination=foobar
421  // 4. /nojs& - Followed by a query (without clean URLs enabled).
422  //      E.g.: ?q=path/nojs&destination=foobar
423  // 5. /nojs# - Followed by a fragment.
424  //      E.g.: path/nojs#myfragment
425  this.url = element_settings.url.replace(/\/nojs(\/|$|\?|&|#)/g, '/ajax$1');
426  // If the 'nojs' version of the URL is trusted, also trust the 'ajax' version.
427  if (Drupal.settings.urlIsAjaxTrusted[element_settings.url]) {
428    Drupal.settings.urlIsAjaxTrusted[this.url] = true;
429  }
430
431  this.wrapper = '#' + element_settings.wrapper;
432
433  // If there isn't a form, jQuery.ajax() will be used instead, allowing us to
434  // bind Ajax to links as well.
435  if (this.element.form) {
436    this.form = $(this.element.form);
437  }
438
439  // Set the options for the ajaxSubmit function.
440  // The 'this' variable will not persist inside of the options object.
441  var ajax = this;
442  ajax.options = {
443    url: Drupal.sanitizeAjaxUrl(ajax.url),
444    data: ajax.submit,
445    beforeSerialize: function (element_settings, options) {
446      return ajax.beforeSerialize(element_settings, options);
447    },
448    beforeSubmit: function (form_values, element_settings, options) {
449      ajax.ajaxing = true;
450      return ajax.beforeSubmit(form_values, element_settings, options);
451    },
452    beforeSend: function (xmlhttprequest, options) {
453      ajax.ajaxing = true;
454      return ajax.beforeSend(xmlhttprequest, options);
455    },
456    success: function (response, status, xmlhttprequest) {
457      // Sanity check for browser support (object expected).
458      // When using iFrame uploads, responses must be returned as a string.
459      if (typeof response == 'string') {
460        response = $.parseJSON(response);
461      }
462
463      // Prior to invoking the response's commands, verify that they can be
464      // trusted by checking for a response header. See
465      // ajax_set_verification_header() for details.
466      // - Empty responses are harmless so can bypass verification. This avoids
467      //   an alert message for server-generated no-op responses that skip Ajax
468      //   rendering.
469      // - Ajax objects with trusted URLs (e.g., ones defined server-side via
470      //   #ajax) can bypass header verification. This is especially useful for
471      //   Ajax with multipart forms. Because IFRAME transport is used, the
472      //   response headers cannot be accessed for verification.
473      if (response !== null && !Drupal.settings.urlIsAjaxTrusted[ajax.url]) {
474        if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') {
475          var customMessage = Drupal.t("The response failed verification so will not be processed.");
476          return ajax.error(xmlhttprequest, ajax.url, customMessage);
477        }
478      }
479
480      return ajax.success(response, status);
481    },
482    complete: function (xmlhttprequest, status) {
483      ajax.ajaxing = false;
484      if (status == 'error' || status == 'parsererror') {
485        return ajax.error(xmlhttprequest, ajax.url);
486      }
487    },
488    dataType: 'json',
489    jsonp: false,
490    type: 'POST'
491  };
492  if (element_settings.dialog) {
493    ajax.options.data.dialogOptions = element_settings.dialog;
494  }
495
496  // For multipart forms (e.g., file uploads), jQuery Form targets the form
497  // submission to an iframe instead of using an XHR object. The initial "src"
498  // of the iframe, prior to the form submission, is set to options.iframeSrc.
499  // "about:blank" is the semantically correct, standards-compliant, way to
500  // initialize a blank iframe; however, some old IE versions (possibly only 6)
501  // incorrectly report a mixed content warning when iframes with an
502  // "about:blank" src are added to a parent document with an https:// origin.
503  // jQuery Form works around this by defaulting to "javascript:false" instead,
504  // but that breaks on Chrome 83, so here we force the semantically correct
505  // behavior for all browsers except old IE.
506  // @see https://www.drupal.org/project/drupal/issues/3143016
507  // @see https://github.com/jquery-form/form/blob/df9cb101b9c9c085c8d75ad980c7ff1cf62063a1/jquery.form.js#L68
508  // @see https://bugs.chromium.org/p/chromium/issues/detail?id=1084874
509  // @see https://html.spec.whatwg.org/multipage/browsers.html#creating-browsing-contexts
510  // @see https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
511  if (navigator.userAgent.indexOf("MSIE") === -1) {
512    ajax.options.iframeSrc = 'about:blank';
513  }
514
515  // Bind the ajaxSubmit function to the element event.
516  $(ajax.element).bind(element_settings.event, function (event) {
517    if (!Drupal.settings.urlIsAjaxTrusted[ajax.url] && !Drupal.urlIsLocal(ajax.url)) {
518      throw new Error(Drupal.t('The callback URL is not local and not trusted: !url', {'!url': ajax.url}));
519    }
520    return ajax.eventResponse(this, event);
521  });
522
523  // If necessary, enable keyboard submission so that Ajax behaviors
524  // can be triggered through keyboard input as well as e.g. a mousedown
525  // action.
526  if (element_settings.keypress) {
527    $(ajax.element).keypress(function (event) {
528      return ajax.keypressResponse(this, event);
529    });
530  }
531
532  // If necessary, prevent the browser default action of an additional event.
533  // For example, prevent the browser default action of a click, even if the
534  // AJAX behavior binds to mousedown.
535  if (element_settings.prevent) {
536    $(ajax.element).bind(element_settings.prevent, false);
537  }
538};
539
540/**
541 * Handle a key press.
542 *
543 * The Ajax object will, if instructed, bind to a key press response. This
544 * will test to see if the key press is valid to trigger this event and
545 * if it is, trigger it for us and prevent other keypresses from triggering.
546 * In this case we're handling RETURN and SPACEBAR keypresses (event codes 13
547 * and 32. RETURN is often used to submit a form when in a textfield, and
548 * SPACE is often used to activate an element without submitting.
549 */
550Drupal.ajax.prototype.keypressResponse = function (element, event) {
551  // Create a synonym for this to reduce code confusion.
552  var ajax = this;
553
554  // Detect enter key and space bar and allow the standard response for them,
555  // except for form elements of type 'text' and 'textarea', where the
556  // spacebar activation causes inappropriate activation if #ajax['keypress'] is
557  // TRUE. On a text-type widget a space should always be a space.
558  if (event.which == 13 || (event.which == 32 && element.type != 'text' && element.type != 'textarea')) {
559    $(ajax.element_settings.element).trigger(ajax.element_settings.event);
560    return false;
561  }
562};
563
564/**
565 * Handle an event that triggers an Ajax response.
566 *
567 * When an event that triggers an Ajax response happens, this method will
568 * perform the actual Ajax call. It is bound to the event using
569 * bind() in the constructor, and it uses the options specified on the
570 * ajax object.
571 */
572Drupal.ajax.prototype.eventResponse = function (element, event) {
573  // Create a synonym for this to reduce code confusion.
574  var ajax = this;
575
576  // Do not perform another ajax command if one is already in progress.
577  if (ajax.ajaxing) {
578    return false;
579  }
580
581  try {
582    if (ajax.form) {
583      // If setClick is set, we must set this to ensure that the button's
584      // value is passed.
585      if (ajax.setClick) {
586        // Mark the clicked button. 'form.clk' is a special variable for
587        // ajaxSubmit that tells the system which element got clicked to
588        // trigger the submit. Without it there would be no 'op' or
589        // equivalent.
590        element.form.clk = element;
591      }
592
593      ajax.form.ajaxSubmit(ajax.options);
594    }
595    else {
596      ajax.beforeSerialize(ajax.element, ajax.options);
597      $.ajax(ajax.options);
598    }
599  }
600  catch (e) {
601    // Unset the ajax.ajaxing flag here because it won't be unset during
602    // the complete response.
603    ajax.ajaxing = false;
604    alert("An error occurred while attempting to process " + ajax.options.url + ": " + e.message);
605  }
606
607  // For radio/checkbox, allow the default event. On IE, this means letting
608  // it actually check the box.
609  if (typeof element.type != 'undefined' && (element.type == 'checkbox' || element.type == 'radio')) {
610    return true;
611  }
612  else {
613    return false;
614  }
615
616};
617
618/**
619 * Handler for the form serialization.
620 *
621 * Runs before the beforeSend() handler (see below), and unlike that one, runs
622 * before field data is collected.
623 */
624Drupal.ajax.prototype.beforeSerialize = function (element, options) {
625  // Allow detaching behaviors to update field values before collecting them.
626  // This is only needed when field values are added to the POST data, so only
627  // when there is a form such that this.form.ajaxSubmit() is used instead of
628  // $.ajax(). When there is no form and $.ajax() is used, beforeSerialize()
629  // isn't called, but don't rely on that: explicitly check this.form.
630  if (this.form) {
631    var settings = this.settings || Drupal.settings;
632    Drupal.detachBehaviors(this.form, settings, 'serialize');
633  }
634
635  // Prevent duplicate HTML ids in the returned markup.
636  // @see drupal_html_id()
637  options.data['ajax_html_ids[]'] = [];
638  $('[id]').each(function () {
639    options.data['ajax_html_ids[]'].push(this.id);
640  });
641
642  // Allow Drupal to return new JavaScript and CSS files to load without
643  // returning the ones already loaded.
644  // @see ajax_base_page_theme()
645  // @see drupal_get_css()
646  // @see drupal_get_js()
647  options.data['ajax_page_state[theme]'] = Drupal.settings.ajaxPageState.theme;
648  options.data['ajax_page_state[theme_token]'] = Drupal.settings.ajaxPageState.theme_token;
649  for (var key in Drupal.settings.ajaxPageState.css) {
650    options.data['ajax_page_state[css][' + key + ']'] = 1;
651  }
652  for (var key in Drupal.settings.ajaxPageState.js) {
653    options.data['ajax_page_state[js][' + key + ']'] = 1;
654  }
655
656  // Provide an error if the dialog options can't be parsed.
657  if (this.options.data.dialogOptions && typeof this.options.data.dialogOptions !== 'object') {
658    $.error(Drupal.t('The data-dialog-options property on this link is not valid JSON.'));
659  }
660};
661
662/**
663 * Modify form values prior to form submission.
664 */
665Drupal.ajax.prototype.beforeSubmit = function (form_values, element, options) {
666  // This function is left empty to make it simple to override for modules
667  // that wish to add functionality here.
668};
669
670/**
671 * Prepare the Ajax request before it is sent.
672 */
673Drupal.ajax.prototype.beforeSend = function (xmlhttprequest, options) {
674  // For forms without file inputs, the jQuery Form plugin serializes the form
675  // values, and then calls jQuery's $.ajax() function, which invokes this
676  // handler. In this circumstance, options.extraData is never used. For forms
677  // with file inputs, the jQuery Form plugin uses the browser's normal form
678  // submission mechanism, but captures the response in a hidden IFRAME. In this
679  // circumstance, it calls this handler first, and then appends hidden fields
680  // to the form to submit the values in options.extraData. There is no simple
681  // way to know which submission mechanism will be used, so we add to extraData
682  // regardless, and allow it to be ignored in the former case.
683  if (this.form) {
684    options.extraData = options.extraData || {};
685
686    // Let the server know when the IFRAME submission mechanism is used. The
687    // server can use this information to wrap the JSON response in a TEXTAREA,
688    // as per http://jquery.malsup.com/form/#file-upload.
689    options.extraData.ajax_iframe_upload = '1';
690
691    // The triggering element is about to be disabled (see below), but if it
692    // contains a value (e.g., a checkbox, textfield, select, etc.), ensure that
693    // value is included in the submission. As per above, submissions that use
694    // $.ajax() are already serialized prior to the element being disabled, so
695    // this is only needed for IFRAME submissions.
696    var v = $.fieldValue(this.element);
697    if (v !== null) {
698      options.extraData[this.element.name] = Drupal.checkPlain(v);
699    }
700  }
701
702  // Disable the element that received the change to prevent user interface
703  // interaction while the Ajax request is in progress. ajax.ajaxing prevents
704  // the element from triggering a new request, but does not prevent the user
705  // from changing its value.
706  $(this.element).addClass('progress-disabled').attr('disabled', true);
707
708  // Insert progressbar or throbber.
709  if (this.progress.type == 'bar') {
710    var progressBar = new Drupal.progressBar('ajax-progress-' + this.element.i
710d, $.noop, this.progress.method, $.noop);
711    if (this.progress.message) {
712      progressBar.setProgress(-1, this.progress.message);
713    }
714    if (this.progress.url) {
715      progressBar.startMonitoring(this.progress.url, this.progress.interval || 1500);
716    }
717    this.progress.element = $(progressBar.element).addClass('ajax-progress ajax-progress-bar');
718    this.progress.object = progressBar;
719    $(this.element).after(this.progress.element);
720  }
721  else if (this.progress.type == 'throbber') {
722    this.progress.element = $('<div class="ajax-progress ajax-progress-throbber"><div class="throbber">&nbsp;</div></div>');
723    if (this.progress.message) {
724      $('.throbber', this.progress.element).after('<div class="message">' + this.progress.message + '</div>');
725    }
726    $(this.element).after(this.progress.element);
727  }
728};
729
730/**
731 * Handler for the form redirection completion.
732 */
733Drupal.ajax.prototype.success = function (response, status) {
734  // Remove the progress element.
735  if (this.progress.element) {
736    $(this.progress.element).remove();
737  }
738  if (this.progress.object) {
739    this.progress.object.stopMonitoring();
740  }
741  $(this.element).removeClass('progress-disabled').removeAttr('disabled');
742
743  Drupal.freezeHeight();
744
745  for (var i in response) {
746    if (response.hasOwnProperty(i) && response[i]['command'] && this.commands[response[i]['command']]) {
747      this.commands[response[i]['command']](this, response[i], status);
748    }
749  }
750
751  // Reattach behaviors, if they were detached in beforeSerialize(). The
752  // attachBehaviors() called on the new content from processing the response
753  // commands is not sufficient, because behaviors from the entire form need
754  // to be reattached.
755  if (this.form) {
756    var settings = this.settings || Drupal.settings;
757    Drupal.attachBehaviors(this.form, settings);
758  }
759
760  Drupal.unfreezeHeight();
761
762  // Remove any response-specific settings so they don't get used on the next
763  // call by mistake.
764  this.settings = null;
765};
766
767/**
768 * Build an effect object which tells us how to apply the effect when adding new HTML.
769 */
770Drupal.ajax.prototype.getEffect = function (response) {
771  var type = response.effect || this.effect;
772  var speed = response.speed || this.speed;
773
774  var effect = {};
775  if (type == 'none') {
776    effect.showEffect = 'show';
777    effect.hideEffect = 'hide';
778    effect.showSpeed = '';
779  }
780  else if (type == 'fade') {
781    effect.showEffect = 'fadeIn';
782    effect.hideEffect = 'fadeOut';
783    effect.showSpeed = speed;
784  }
785  else {
786    effect.showEffect = type + 'Toggle';
787    effect.hideEffect = type + 'Toggle';
788    effect.showSpeed = speed;
789  }
790
791  return effect;
792};
793
794/**
795 * Handler for the form redirection error.
796 */
797Drupal.ajax.prototype.error = function (xmlhttprequest, uri, customMessage) {
798  Drupal.displayAjaxError(Drupal.ajaxError(xmlhttprequest, uri, customMessage));
799  // Remove the progress element.
800  if (this.progress.element) {
801    $(this.progress.element).remove();
802  }
803  if (this.progress.object) {
804    this.progress.object.stopMonitoring();
805  }
806  // Undo hide.
807  $(this.wrapper).show();
808  // Re-enable the element.
809  $(this.element).removeClass('progress-disabled').removeAttr('disabled');
810  // Reattach behaviors, if they were detached in beforeSerialize().
811  if (this.form) {
812    var settings = this.settings || Drupal.settings;
813    Drupal.attachBehaviors(this.form, settings);
814  }
815};
816
817/**
818 * Provide a series of commands that the server can request the client perform.
819 */
820Drupal.ajax.prototype.commands = {
821  /**
822   * Command to insert new content into the DOM.
823   */
824  insert: function (ajax, response, status) {
825    // Get information from the response. If it is not there, default to
826    // our presets.
827    var wrapper = response.selector ? $(response.selector) : $(ajax.wrapper);
828    var method = response.method || ajax.method;
829    var effect = ajax.getEffect(response);
830
831    // We don't know what response.data contains: it might be a string of text
832    // without HTML, so don't rely on jQuery correctly iterpreting
833    // $(response.data) as new HTML rather than a CSS selector. Also, if
834    // response.data contains top-level text nodes, they get lost with either
835    // $(response.data) or $('<div></div>').replaceWith(response.data).
836    var new_content_wrapped = $('<div></div>').html(response.data);
837    var new_content = new_content_wrapped.contents();
838
839    // For legacy reasons, the effects processing code assumes that new_content
840    // consists of a single top-level element. Also, it has not been
841    // sufficiently tested whether attachBehaviors() can be successfully called
842    // with a context object that includes top-level text nodes. However, to
843    // give developers full control of the HTML appearing in the page, and to
844    // enable Ajax content to be inserted in places where DIV elements are not
845    // allowed (e.g., within TABLE, TR, and SPAN parents), we check if the new
846    // content satisfies the requirement of a single top-level element, and
847    // only use the container DIV created above when it doesn't. For more
848    // information, please see http://drupal.org/node/736066.
849    if (new_content.length != 1 || new_content.get(0).nodeType != 1) {
850      new_content = new_content_wrapped;
851    }
852
853    // If removing content from the wrapper, detach behaviors first.
854    switch (method) {
855      case 'html':
856      case 'replaceWith':
857      case 'replaceAll':
858      case 'empty':
859      case 'remove':
860        var settings = response.settings || ajax.settings || Drupal.settings;
861        Drupal.detachBehaviors(wrapper, settings);
862    }
863
864    // Add the new content to the page.
865    wrapper[method](new_content);
866
867    // Immediately hide the new content if we're using any effects.
868    if (effect.showEffect != 'show') {
869      new_content.hide();
870    }
871
872    // Determine which effect to use and what content will receive the
873    // effect, then show the new content.
874    if ($('.ajax-new-content', new_content).length > 0) {
875      $('.ajax-new-content', new_content).hide();
876      new_content.show();
877      $('.ajax-new-content', new_content)[effect.showEffect](effect.showSpeed);
878    }
879    else if (effect.showEffect != 'show') {
880      new_content[effect.showEffect](effect.showSpeed);
881    }
882
883    // Attach all JavaScript behaviors to the new content, if it was successfully
884    // added to the page, this if statement allows #ajax['wrapper'] to be
885    // optional.
886    if (new_content.parents('html').length > 0) {
887      // Apply any settings from the returned JSON if available.
888      var settings = response.settings || ajax.settings || Drupal.settings;
889      Drupal.attachBehaviors(new_content, settings);
890    }
891  },
892
893  /**
894   * Command to remove a chunk from the page.
895   */
896  remove: function (ajax, response, status) {
897    var settings = response.settings || ajax.settings || Drupal.settings;
898    Drupal.detachBehaviors($(response.selector), settings);
899    $(response.selector).remove();
900  },
901
902  /**
903   * Command to mark a chunk changed.
904   */
905  changed: function (ajax, response, status) {
906    if (!$(response.selector).hasClass('ajax-changed')) {
907      $(response.selector).addClass('ajax-changed');
908      if (response.asterisk) {
909        $(response.selector).find(response.asterisk).append(' <span class="ajax-changed">*</span> ');
910      }
911    }
912  },
913
914  /**
915   * Command to provide an alert.
916   */
917  alert: function (ajax, response, status) {
918    alert(response.text, response.title);
919  },
920
921  /**
922   * Command to provide the jQuery css() function.
923   */
924  css: function (ajax, response, status) {
925    $(response.selector).css(response.argument);
926  },
927
928  /**
929   * Command to set the settings that will be used for other commands in this response.
930   */
931  settings: function (ajax, response, status) {
932    if (response.merge) {
933      $.extend(true, Drupal.settings, response.settings);
934    }
935    else {
936      ajax.settings = response.settings;
937    }
938  },
939
940  /**
941   * Command to attach data using jQuery's data API.
942   */
943  data: function (ajax, response, status) {
944    $(response.selector).data(response.name, response.value);
945  },
946
947  /**
948   * Command to apply a jQuery method.
949   */
950  invoke: function (ajax, response, status) {
951    var $element = $(response.selector);
952    $element[response.method].apply($element, response.arguments);
953  },
954
955  /**
956   * Command to restripe a table.
957   */
958  restripe: function (ajax, response, status) {
959    // :even and :odd are reversed because jQuery counts from 0 and
960    // we count from 1, so we're out of sync.
961    // Match immediate children of the parent element to allow nesting.
962    $('> tbody > tr:visible, > tr:visible', $(response.selector))
963      .removeClass('odd even')
964      .filter(':even').addClass('odd').end()
965      .filter(':odd').addClass('even');
966  },
967
968  /**
969   * Command to add css.
970   *
971   * Uses the proprietary addImport method if available as browsers which
972   * support that method ignore @import statements in dynamically added
973   * stylesheets.
974   */
975  add_css: function (ajax, response, status) {
976    // Add the styles in the normal way.
977    $('head').prepend(response.data);
978    // Add imports in the styles using the addImport method if available.
979    var match, importMatch = /^@import url\("(.*)"\);$/igm;
980    if (document.styleSheets[0].addImport && importMatch.test(response.data)) {
981      importMatch.lastIndex = 0;
982      while (match = importMatch.exec(response.data)) {
983        document.styleSheets[0].addImport(match[1]);
984      }
985    }
986  },
987
988  /**
989   * Command to update a form's build ID.
990   */
991  updateBuildId: function(ajax, response, status) {
992    $('input[name="form_build_id"][value="' + response['old'] + '"]').val(response['new']);
993  }
994};
995
996})(jQuery);
997;
998/**
999 * @file
1000 * Adds additional commands to the standard Drupal AJAX functionality.
1001 */
1002
1003(function ($) {
1004
1005/**
1006 * Command to set the window.location, redirecting the browser.
1007 */
1008Drupal.ajax.prototype.commands.redirect = function (ajax, response, status) {
1009  window.location.href = response.url;
1010};
1011
1012/**
1013 * Command to trigger window.location.reload(), reloading the current page.
1014 */
1015Drupal.ajax.prototype.commands.reload = function (ajax, response, status) {
1016  window.location.reload();
1017};
1018
1019})(jQuery);
1020;
1021(function (D) {
1022  var beforeSerialize = D.ajax.prototype.beforeSerialize;
1023  D.ajax.prototype.beforeSerialize = function (element, options) {
1024    beforeSerialize.call(this, element, options);
1025    options.data['ajax_page_state[jquery_version]'] = D.settings.ajaxPageState.jquery_version;
1026    options.data['ajax_page_state[jquery_version_token]'] = D.settings.ajaxPageState.jquery_version_token;
1027  }
1028})(Drupal);
1029;

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.