!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand (o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
jQuery.noConflict();
"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e,window)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery"),window):t(jQuery,window)}(function(s,n){"use strict";function e(e){return 0<=function(e,t){for(var r=/^(\d+)\.(\d+)\.(\d+)/,n=r.exec(e)||[],o=r.exec(t)||[],a=1;a<=3;a++){if(+o[a]<+n[a])return 1;if(+n[a]<+o[a])return-1}return 0}(s.fn.jquery,e)}s.migrateVersion="3.4.1";var t=Object.create(null);s.migrateDisablePatches=function(){for(var e=0;e<arguments.length;e++)t[arguments[e]]=!0},s.migrateEnablePatches=function(){for(var e=0;e<arguments.length;e++)delete t[arguments[e]]},s.migrateIsPatchEnabled=function(e){return!t[e]},n.console&&n.console.log&&(s&&e("3.0.0")&&!e("5.0.0")||n.console.log("JQMIGRATE: jQuery 3.x-4.x REQUIRED"),s.migrateWarnings&&n.console.log("JQMIGRATE: Migrate plugin loaded multiple times"),n.console.log("JQMIGRATE: Migrate is installed"+(s.migrateMute?"":" with logging active")+", version "+s.migrateVersion));var o={};function u(e,t){var r=n.console;!s.migrateIsPatchEnabled(e)||s.migrateDeduplicateWarnings&&o[t]||(o[t]=!0,s.migrateWarnings.push(t+" ["+e+"]"),r&&r.warn&&!s.migrateMute&&(r.warn("JQMIGRATE: "+t),s.migrateTrace&&r.trace&&r.trace()))}function r(e,t,r,n,o){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return u(n,o),r},set:function(e){u(n,o),r=e}})}function a(e,t,r,n,o){var a=e[t];e[t]=function(){return o&&u(n,o),(s.migrateIsPatchEnabled(n)?r:a||s.noop).apply(this,arguments)}}function c(e,t,r,n,o){if(!o)throw new Error("No warning message provided");return a(e,t,r,n,o),0}function i(e,t,r,n){return a(e,t,r,n),0}s.migrateDeduplicateWarnings=!0,s.migrateWarnings=[],void 0===s.migrateTrace&&(s.migrateTrace=!0),s.migrateReset=function(){o={},s.migrateWarnings.length=0},"BackCompat"===n.document.compatMode&&u("quirks","jQuery is not compatible with Quirks Mode");var d,l,p,f={},m=s.fn.init,y=s.find,h=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,g=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,v=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;for(d in i(s.fn,"init",function(e){var t=Array.prototype.slice.call(arguments);return s.migrateIsPatchEnabled("selector-empty-id")&&"string"==typeof e&&"#"===e&&(u("selector-empty-id","jQuery('#') is not a valid selector"),t[0]=[]),m.apply(this,t)},"selector-empty-id"),s.fn.init.prototype=s.fn,i(s,"find",function(t){var r=Array.prototype.slice.call(arguments);if("string"==typeof t&&h.test(t))try{n.document.querySelector(t)}catch(e){t=t.replace(g,function(e,t,r,n){return"["+t+r+'"'+n+'"]'});try{n.document.querySelector(t),u("selector-hash","Attribute selector with '#' must be quoted: "+r[0]),r[0]=t}catch(e){u("selector-hash","Attribute selector with '#' was not fixed: "+r[0])}}return y.apply(this,r)},"selector-hash"),y)Object.prototype.hasOwnProperty.call(y,d)&&(s.find[d]=y[d]);c(s.fn,"size",function(){return this.length},"size","jQuery.fn.size() is deprecated and removed; use the .length property"),c(s,"parseJSON",function(){return JSON.parse.apply(null,arguments)},"parseJSON","jQuery.parseJSON is deprecated; use JSON.parse"),c(s,"holdReady",s.holdReady,"holdReady","jQuery.holdReady is deprecated"),c(s,"unique",s.uniqueSort,"unique","jQuery.unique is deprecated; use jQuery.uniqueSort"),r(s.expr,"filters",s.expr.pseudos,"expr-pre-pseudos","jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"),r(s.expr,":",s.expr.pseudos,"expr-pre-pseudos","jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"),e("3.1.1")&&c(s,"trim",function(e){return null==e?"":(e+"").replace(v,"$1")},"trim","jQuery.trim is deprecated; use String.prototype.trim"),e("3.2.0")&&(c(s,"nodeName",function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},"nodeName","jQuery.nodeName is deprecated"),c(s,"isArray",Array.isArray,"isArray","jQuery.isArray is deprecated; use Array.isArray")),e("3.3.0")&&(c(s,"isNumeric",function(e){var t=typeof e;return("number"==t||"string"==t)&&!isNaN(e-parseFloat(e))},"isNumeric","jQuery.isNumeric() is deprecated"),s.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){f["[object "+t+"]"]=t.toLowerCase()}),c(s,"type",function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?f[Object.prototype.toString.call(e)]||"object":typeof e},"type","jQuery.type is deprecated"),c(s,"isFunction",function(e){return"function"==typeof e},"isFunction","jQuery.isFunction() is deprecated"),c(s,"isWindow",function(e){return null!=e&&e===e.window},"isWindow","jQuery.isWindow() is deprecated")),s.ajax&&(l=s.ajax,p=/(=)\?(?=&|$)|\?\?/,i(s,"ajax",function(){var e=l.apply(this,arguments);return e.promise&&(c(e,"success",e.done,"jqXHR-methods","jQXHR.success is deprecated and removed"),c(e,"error",e.fail,"jqXHR-methods","jQXHR.error is deprecated and removed"),c(e,"complete",e.always,"jqXHR-methods","jQXHR.complete is deprecated and removed")),e},"jqXHR-methods"),e("4.0.0")||s.ajaxPrefilter("+json",function(e){!1!==e.jsonp&&(p.test(e.url)||"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&p.test(e.data))&&u("jsonp-promotion","JSON-to-JSONP auto-promotion is deprecated")}));var j=s.fn.removeAttr,b=s.fn.toggleClass,w=/\S+/g;function x(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}i(s.fn,"removeAttr",function(e){var r=this,n=!1;return s.each(e.match(w),function(e,t){s.expr.match.bool.test(t)&&r.each(function(){if(!1!==s(this).prop(t))return!(n=!0)}),n&&(u("removeAttr-bool","jQuery.fn.removeAttr no longer sets boolean properties: "+t),r.prop(t,!1))}),j.apply(this,arguments)},"removeAttr-bool"),i(s.fn,"toggleClass",function(t){return void 0!==t&&"boolean"!=typeof t?b.apply(this,arguments):(u("toggleClass-bool","jQuery.fn.toggleClass(boolean) is deprecated"),this.each(function(){var e=this.getAttribute&&this.getAttribute("class")||"";e&&s.data(this,"__className__",e),this.setAttribute&&this.setAttribute("class",!e&&!1!==t&&s.data(this,"__className__")||"")}))},"toggleClass-bool");var Q,A,R=!1,C=/^[a-z]/,N=/^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;s.swap&&s.each(["height","width","reliableMarginRight"],function(e,t){var r=s.cssHooks[t]&&s.cssHooks[t].get;r&&(s.cssHooks[t].get=function(){var e;return R=!0,e=r.apply(this,arguments),R=!1,e})}),i(s,"swap",function(e,t,r,n){var o,a,i={};for(a in R||u("swap","jQuery.swap() is undocumented and deprecated"),t)i[a]=e.style[a],e.style[a]=t[a];for(a in o=r.apply(e,n||[]),t)e.style[a]=i[a];return o},"swap"),e("3.4.0")&&"undefined"!=typeof Proxy&&(s.cssProps=new Proxy(s.cssProps||{},{set:function(){return u("cssProps","jQuery.cssProps is deprecated"),Reflect.set.apply(this,arguments)}})),e("4.0.0")?(A={animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},"undefined"!=typeof Proxy?s.cssNumber=new Proxy(A,{get:function(){return u("css-number","jQuery.cssNumber is deprecated"),Reflect.get.apply(this,arguments)},set:function(){return u("css-number","jQuery.cssNumber is deprecated"),Reflect.set.apply(this,arguments)}}):s.cssNumber=A):A=s.cssNumber,Q=s.fn.css,i(s.fn,"css",function(e,t){var r,n,o=this;return e&&"object"==typeof e&&!Array.isArray(e)?(s.each(e,function(e,t){s.fn.css.call(o,e,t)}),this):("number"==typeof t&&(r=x(e),n=r,C.test(n)&&N.test(n[0].toUpperCase()+n.slice(1))||A[r]||u("css-number",'Number-typed values are deprecated for jQuery.fn.css("'+e+'", value)')),Q.apply(this,arguments))},"css-number");var S,P,k,H,E=s.data;i(s,"data",function(e,t,r){var n,o,a;if(t&&"object"==typeof t&&2===arguments.length){for(a in n=s.hasData(e)&&E.call(this,e),o={},t)a!==x(a)?(u("data-camelCase","jQuery.data() always sets/gets camelCased names: "+a),n[a]=t[a]):o[a]=t[a];return E.call(this,e,o),t}return t&&"string"==typeof t&&t!==x(t)&&(n=s.hasData(e)&&E.call(this,e))&&t in n?(u("data-camelCase","jQuery.data() always sets/gets camelCased names: "+t),2<arguments.length&&(n[t]=r),n[t]):E.apply(this,arguments)},"data-camelCase"),s.fx&&(k=s.Tween.prototype.run,H=function(e){return e},i(s.Tween.prototype,"run",function(){1<s.easing[this.easing].length&&(u("easing-one-arg","'jQuery.easing."+this.easing.toString()+"' should use only one argument"),s.easing[this.easing]=H),k.apply(this,arguments)},"easing-one-arg"),S=s.fx.interval,P="jQuery.fx.interval is deprecated",n.requestAnimationFrame&&Object.defineProperty(s.fx,"interval",{configurable:!0,enumerable:!0,get:function(){return n.document.hidden||u("fx-interval",P),s.migrateIsPatchEnabled("fx-interval")&&void 0===S?13:S},set:function(e){u("fx-interval",P),S=e}}));var M=s.fn.load,q=s.event.add,O=s.event.fix;s.event.props=[],s.event.fixHooks={},r(s.event.props,"concat",s.event.props.concat,"event-old-patch","jQuery.event.props.concat() is deprecated and removed"),i(s.event,"fix",function(e){var t,r=e.type,n=this.fixHooks[r],o=s.event.props;if(o.length){u("event-old-patch","jQuery.event.props are deprecated and removed: "+o.join());while(o.length)s.event.addProp(o.pop())}if(n&&!n._migrated_&&(n._migrated_=!0,u("event-old-patch","jQuery.event.fixHooks are deprecated and removed: "+r),(o=n.props)&&o.length))while(o.length)s.event.addProp(o.pop());return t=O.call(this,e),n&&n.filter?n.filter(t,e):t},"event-old-patch"),i(s.event,"add",function(e,t){return e===n&&"load"===t&&"complete"===n.document.readyState&&u("load-after-event","jQuery(window).on('load'...) called after load event occurred"),q.apply(this,arguments)},"load-after-event"),s.each(["load","unload","error"],function(e,t){i(s.fn,t,function(){var e=Array.prototype.slice.call(arguments,0);return"load"===t&&"string"==typeof e[0]?M.apply(this,e):(u("shorthand-removed-v3","jQuery.fn."+t+"() is deprecated"),e.splice(0,0,t),arguments.length?this.on.apply(this,e):(this.triggerHandler.apply(this,e),this))},"shorthand-removed-v3")}),s.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,r){c(s.fn,r,function(e,t){return 0<arguments.length?this.on(r,null,e,t):this.trigger(r)},"shorthand-deprecated-v3","jQuery.fn."+r+"() event shorthand is deprecated")}),s(function(){s(n.document).triggerHandler("ready")}),s.event.special.ready={setup:function(){this===n.document&&u("ready-event","'ready' event is deprecated")}},c(s.fn,"bind",function(e,t,r){return this.on(e,null,t,r)},"pre-on-methods","jQuery.fn.bind() is deprecated"),c(s.fn,"unbind",function(e,t){return this.off(e,null,t)},"pre-on-methods","jQuery.fn.unbind() is deprecated"),c(s.fn,"delegate",function(e,t,r,n){return this.on(t,e,r,n)},"pre-on-methods","jQuery.fn.delegate() is deprecated"),c(s.fn,"undelegate",function(e,t,r){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",r)},"pre-on-methods","jQuery.fn.undelegate() is deprecated"),c(s.fn,"hover",function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)},"pre-on-methods","jQuery.fn.hover() is deprecated");function T(e){var t=n.document.implementation.createHTMLDocument("");return t.body.innerHTML=e,t.body&&t.body.innerHTML}var F=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi;s.UNSAFE_restoreLegacyHtmlPrefilter=function(){s.migrateEnablePatches("self-closed-tags")},i(s,"htmlPrefilter",function(e){var t,r;return(r=(t=e).replace(F,"<$1></$2>"))!==t&&T(t)!==T(r)&&u("self-closed-tags","HTML tags must be properly nested and closed: "+t),e.replace(F,"<$1></$2>")},"self-closed-tags"),s.migrateDisablePatches("self-closed-tags");var D,W,_,I=s.fn.offset;return i(s.fn,"offset",function(){var e=this[0];return!e||e.nodeType&&e.getBoundingClientRect?I.apply(this,arguments):(u("offset-valid-elem","jQuery.fn.offset() requires a valid DOM element"),arguments.length?this:void 0)},"offset-valid-elem"),s.ajax&&(D=s.param,i(s,"param",function(e,t){var r=s.ajaxSettings&&s.ajaxSettings.traditional;return void 0===t&&r&&(u("param-ajax-traditional","jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),t=r),D.call(this,e,t)},"param-ajax-traditional")),c(s.fn,"andSelf",s.fn.addBack,"andSelf","jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"),s.Deferred&&(W=s.Deferred,_=[["resolve","done",s.Callbacks("once memory"),s.Callbacks("once memory"),"resolved"],["reject","fail",s.Callbacks("once memory"),s.Callbacks("once memory"),"rejected"],["notify","progress",s.Callbacks("memory"),s.Callbacks("memory")]],i(s,"Deferred",function(e){var a=W(),i=a.promise();function t(){var o=arguments;return s.Deferred(function(n){s.each(_,function(e,t){var r="function"==typeof o[e]&&o[e];a[t[1]](function(){var e=r&&r.apply(this,arguments);e&&"function"==typeof e.promise?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[t[0]+"With"](this===i?n.promise():this,r?[e]:arguments)})}),o=null}).promise()}return c(a,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),c(i,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),e&&e.call(a,a),a},"deferred-pipe"),s.Deferred.exceptionHook=W.exceptionHook),s});
document.addEventListener("DOMContentLoaded", function (){
var lastScrollTop=0;
if(document.getElementById('header')){
window.addEventListener('scroll', function (){
var st=window.pageYOffset||document.documentElement.scrollTop;
if(st > lastScrollTop){
document.getElementById('header').classList.add('scroll-down');
}else if(st < lastScrollTop){
document.getElementById('header').classList.remove('scroll-down');
}
lastScrollTop=st <=0 ? 0:st;
if(window.scrollY > 100){
document.getElementById('header').classList.add('cs-header-fixed-top');
document.body.classList.add('header-is-fixed');
}else{
document.getElementById('header').classList.remove('cs-header-fixed-top');
document.body.style.paddingTop='0';
document.body.classList.remove('header-is-fixed');
}});
}
document.querySelectorAll('.cs-tab').forEach((el)=> {
el.addEventListener('click', function (event){
const list=document.getElementsByClassName('cs-tab');
for (let item of list){
item.dataset.selected='false';
}
const list_tab=document.getElementsByClassName('cs-post-tab');
for (let item of list_tab){
item.classList.add('d-none');
}
document.getElementById(event.target.getAttribute('data-category')).classList.remove('d-none');
event.target.setAttribute('data-selected', 'true');
console.log(event.target.getAttribute('data-selected'))
})
})
});
document.addEventListener("DOMContentLoaded", function(){
(function (){
'use strict'
var forms=document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(forms)
.forEach(function (form){
form.addEventListener('submit', function (event){
if(!form.checkValidity()){
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})()
var form=document.getElementById('sendRequest');
if(form){
form.addEventListener('submit', function(event){
document.getElementById('spinner').innerHTML='<div class="spinner-border" role="status"><span class="sr-only"></span></div>'
document.getElementById('submitButton').classList.add('disabled')
if(form.checkValidity()===false){
event.preventDefault();
event.stopPropagation();
document.getElementById('spinner').innerHTML='';
document.getElementById('submitButton').classList.remove('disabled');
}else{
form.classList.add('was-validated');
event.preventDefault();
event.stopPropagation();
grecaptcha.ready(function(){
grecaptcha.execute('6Lcn69kgAAAAABT82xVWxshJNDp7RcrSVLxQsT17', {action: 'submit'}).then(function(token){
var formData=new FormData()
formData.append('action', document.getElementById('ActionForm').value)
formData.append('user_name', document.getElementById('InfoFormName').value)
formData.append('user_course',  document.getElementById('InfoFormCourse')?.value ?? '')
formData.append('user_course_link', document.getElementById('InfoFormCourseLink')?.value ?? '')
formData.append('user_surname',  document.getElementById('InfoFormSurname').value)
formData.append('user_phone', document.getElementById('InfoFormPhone')?.value ?? '')
formData.append('user_email', document.getElementById('InfoFormEmail').value)
formData.append('user_newsletter', document.getElementById('InfoFormNewsletter').checked ?? false)
formData.append('user_message', document.getElementById('InfoFormMessage')?.value ?? '')
if(document.getElementById('sendRequestFile')){
for (let i=0; i < document.getElementById('sendRequestFile').files.length; i++){
let file=document.getElementById('sendRequestFile').files.item(i);
console.log(file.name);
formData.append('user_file_' +  i, file);
}
formData.append('user_file', document.getElementById('sendRequestFile').files.length);
}
if(document.getElementById('InfoFormOrder')){
formData.append('user_order', document.getElementById('InfoFormOrder').value ?? '');
}
var ajaxurl=document.getElementById('adminUrl').value;
$.ajax({
method: 'post',
processData: false,
contentType: false,
cache: false,
data: formData,
enctype: 'multipart/form-data',
url: ajaxurl,
success: function (response){
console.log(response.body)
document.getElementById('spinner').innerHTML=''
setTimeout(()=> {
document.getElementById('successResponse').innerHTML='Email inviata con successo'
document.getElementById('successResponseContainer').classList.remove('d-none')
}, 600)
document.getElementById('successResponseContainer').classList.add('d-none')
document.getElementById('successResponse').innerHTML=''
document.getElementById('submitButton').classList.remove('disabled')
}});
});
});
}});
}
var form_newsletter=document.getElementById('sendRequestNewsletter');
if(form_newsletter){
form_newsletter.addEventListener('submit', function(event){
document.getElementById('spinnerNewsletter').innerHTML='<div class="spinner-border" role="status"><span class="sr-only"></span></div>'
document.getElementById('submitButton').classList.add('disabled')
if(form_newsletter.checkValidity()===false){
event.preventDefault();
event.stopPropagation();
document.getElementById('spinnerNewsletter').innerHTML='';
document.getElementById('submitButton').classList.remove('disabled');
}else{
form_newsletter.classList.add('was-validated');
event.preventDefault();
event.stopPropagation();
var formData=new FormData();
formData.append('action', 'send_newsletter')
formData.append('email', document.getElementById('newsletterEmail').value)
var ajaxurl=document.getElementById('adminUrl').value;
$.ajax({
method: 'post',
processData: false,
contentType: false,
cache: false,
data: formData,
enctype: 'multipart/form-data',
url: ajaxurl,
success: function (response){
document.getElementById('spinnerNewsletter').innerHTML=''
setTimeout(()=> {
document.getElementById('successResponseNewsletter').innerHTML='Iscrizione effettuata'
document.getElementById('successResponseNewsletterContainer').classList.remove('d-none')
}, 600)
document.getElementById('successResponseNewsletterContainer').classList.add('d-none')
document.getElementById('successResponseNewsletter').innerHTML=''
document.getElementById('submitButton').classList.remove('disabled')
}});
}});
}
var form_newsletter_modal=document.getElementById('sendRequestNewsletterModal');
if(form_newsletter_modal){
form_newsletter_modal.addEventListener('submit', function(event){
document.getElementById('spinnerNewsletterModal').innerHTML='<div class="spinner-border" role="status"><span class="sr-only"></span></div>'
document.getElementById('submitButton').classList.add('disabled')
if(form_newsletter_modal.checkValidity()===false){
event.preventDefault();
event.stopPropagation();
document.getElementById('spinnerNewsletterModal').innerHTML='';
}else{
form_newsletter_modal.classList.add('was-validated');
event.preventDefault();
event.stopPropagation();
var formData=new FormData();
formData.append('action', 'send_newsletter')
formData.append('email', document.getElementById('newsletterEmailModal').value)
var ajaxurl=document.getElementById('adminUrl').value;
$.ajax({
method: 'post',
processData: false,
contentType: false,
cache: false,
data: formData,
enctype: 'multipart/form-data',
url: ajaxurl,
success: function (response){
document.getElementById('spinnerNewsletterModal').innerHTML=''
setTimeout(()=> {
document.getElementById('successResponseNewsletterModal').innerHTML='Iscrizione effettuata'
document.getElementById('successResponseNewsletterModalContainer').classList.remove('d-none')
}, 600)
document.getElementById('successResponseNewsletterModalContainer').classList.add('d-none')
document.getElementById('successResponseNewsletterModal').innerHTML=''
document.getElementById('submitButtonModal').classList.remove('disabled')
}});
}});
}
const files=document.getElementById('sendRequestFile');
if(files){
files.addEventListener('change', (event)=> {
document.getElementById('fileUploaded').innerHTML='';
for (const [key, value] of Object.entries(event.target.files)){
document.getElementById('fileUploaded').innerHTML +='<p class="mb-1" data-file="' + key + '">' + value.name + '</p>';
}})
}})
function dropHandler(ev){
console.log('File(s) dropped');
ev.preventDefault();
if(ev.dataTransfer.items){
for (let i=0; i < ev.dataTransfer.items.length; i++){
if(ev.dataTransfer.items[i].kind==='file'){
document.getElementById('drop_zone').style.border="";
document.getElementById('drop_zone').style.backgroundColor="";
const file=ev.dataTransfer.items[i].getAsFile();
document.getElementById('sendRequestFile').files=ev.dataTransfer.files;
console.log('... file[' + i + '].name=' + file.name);
document.getElementById('fileUploaded').innerHTML='';
for (const [key, value] of Object.entries(document.getElementById('sendRequestFile').files)){
document.getElementById('fileUploaded').innerHTML +='<p class="mb-1" data-file="' + key + '">' + value.name + '</p>';
}}
}}else{
for (let i=0; i < ev.dataTransfer.files.length; i++){
console.log('... file[' + i + '].name=' + ev.dataTransfer.files[i].name);
}}
}
function dragOverHandler(ev){
console.log('File(s) in drop zone');
ev.preventDefault();
document.getElementById('drop_zone').style.border="2px solid #56af43";
document.getElementById('drop_zone').style.backgroundColor="#868686";
}
function clickHandler(ev){
document.getElementById('sendRequestFile').click();
};
document.addEventListener("DOMContentLoaded", function (){
if(!document.body.classList.contains("position-loaded")){
document.body.classList.add("position-loaded");
const currentPositions=document.querySelectorAll(".current-position");
if(!directBooking){
for (let i=0; i < currentPositions.length; i++){
currentPositions[i].addEventListener("click", function (e){
if(!directBooking){
navigator.geolocation.getCurrentPosition(function (pos){
var latlng=pos.coords.latitude + "," + pos.coords.longitude;
var inputPos =
currentPositions[i].previousElementSibling.querySelector('input[type="text"]'
);
if(inputPos==null){
inputPos =
currentPositions[i].parentNode.querySelector('input[type="text"]'
);
if(inputPos==null){
inputPos =
currentPositions[i].parentNode.parentNode.querySelector('input[type="text"]'
);
}}
if(!inputPos.disabled){
inputPos.value=latlng;
var justPosition=true;
var cta=inputPos.parentNode.parentNode.querySelector(".cta");
if(cta==null){
cta =
inputPos.parentNode.parentNode.parentNode.querySelector(".cta"
);
}
if(!currentPositions[i].classList.contains("just-position")){
justPosition=false;
getLocationLatLng(latlng, inputPos, justPosition);
}
if(justPosition){
inputPos.disabled=true;
cta.classList.add("cta-loading");
}
inputPos.classList.add("input-loading");
}},
function (err){
alert('Non è stato possibile recuperare la tua posizione. Riprova più tardi.');
console.warn(`ERROR(${err.code}): ${err.message}`);
},
{
enableHighAccuracy: false,
timeout: 10000,
maximumAge: 300_000,
}
);
e.preventDefault();
}});
var cta=currentPositions[i].parentNode.parentNode.querySelector(".cta");
if(cta==null)
cta =
currentPositions[i].parentNode.parentNode.parentNode.querySelector(".cta"
);
if(cta!=null){
cta.addEventListener("click", function (e){
if(!directBooking){
if(!this.classList.contains("cta-loading")){
var inputPos =
currentPositions[i].previousElementSibling.querySelector('input[type="text"]'
);
if(inputPos==null){
inputPos =
currentPositions[i].parentNode.querySelector('input[type="text"]'
);
if(inputPos==null){
inputPos =
currentPositions[i].parentNode.parentNode.querySelector('input[type="text"]'
);
}}
if(inputPos.value==""){
}else{
this.classList.add("cta-loading");
inputPos.disabled=true;
if(this.classList.contains("landing-shortcode-search")){
getClinics(inputPos, true);
}else{
getClinics(inputPos);
}}
}
e.preventDefault();
}});
}}
}
if(document.getElementById("location-search-input")!=null){
document
.getElementById("location-search-input")
.addEventListener("keydown", function (event){
if(event.keyCode===13){
event.preventDefault();
document.getElementById("location-search-button").click();
}});
}
if(document.getElementById("call-current-position-input")!=null){
document
.getElementById("call-current-position-input")
.addEventListener("keydown", function (event){
if(event.keyCode===13){
event.preventDefault();
document.getElementById("call-current-position-btn").click();
}});
}
if(document.querySelector(".centri input")!=null){
document
.querySelector(".centri input")
.addEventListener("keydown", function (event){
if(event.keyCode===13){
event.preventDefault();
document.querySelector(".centri button").click();
}});
}
var bookingAddresses=document.querySelectorAll(".page-booking input.address"
);
for (let e=0; e < bookingAddresses.length; e++){
bookingAddresses[e].addEventListener("keydown", function (event){
if(event.keyCode===13){
event.preventDefault();
this.parentNode.querySelector("button.booking-search").click();
}});
}
function getLocationLatLng(latlng, input, justPosition){
input.classList.add("input-loading");
var grecaptcha_key=document
.getElementById("g-recaptcha")
.getAttribute("src")
.split("render=")[1];
grecaptcha.ready(function (){
grecaptcha
.execute(grecaptcha_key, { action: "submit" })
.then(function (token){
let myData =
"action=dp_get_location_latlng&g-recaptcha-response=" +
token +
"&latlng=" +
latlng;
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function (){
if(this.readyState==4&&this.status==200){
input.value=xhttp.responseText;
var cta=input.parentNode.parentNode.querySelector(".cta");
if(cta==null)
cta =
input.parentNode.parentNode.parentNode.querySelector(".cta"
);
cta.click();
if(justPosition){
input.disabled=false;
input.classList.remove("input-loading");
var cta=input.parentNode.parentNode.querySelector(".cta");
if(cta==null)
cta =
input.parentNode.parentNode.parentNode.querySelector(".cta"
);
cta.classList.remove("cta-loading");
}}
};
let link=document.getElementById("ajaxurl").getAttribute("href");
xhttp.open("POST", link, true);
xhttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded; charset=UTF-8"
);
xhttp.send(myData);
});
});
}
function getClinics(input, isShortcode=false){
if(!input.classList.contains("search-nolimit")){
var shortcodeLimit=18;
var shortcodeRange=false;
if(document.querySelector("#shortcode-search-box-container")){
if(input.getAttribute("numero-centri")!=="" &&
input.getAttribute("numero-centri")!==null &&
input.getAttribute("numero-centri")!=false &&
input.getAttribute("numero-centri") > 0
)
shortcodeLimit=input.getAttribute("numero-centri");
}
if(document.querySelector("#shortcode-search-box-container")){
if(input.getAttribute("raggio")!=="" &&
input.getAttribute("raggio")!==null &&
input.getAttribute("raggio")!=false &&
parseFloat(input.getAttribute("raggio").replace(",", ".")) > 0
)
shortcodeRange=Math.floor(parseFloat(input.getAttribute("raggio").replace(",", "."))
);
}
var grecaptcha_key=document
.getElementById("g-recaptcha")
.getAttribute("src")
.split("render=")[1];
grecaptcha.ready(function (){
grecaptcha
.execute(grecaptcha_key, { action: "submit" })
.then(function (token){
let estetica=input.classList.contains("search-estetica")
? "&estetica"
: "";
let count=isShortcode ? "&count=" + shortcodeLimit:"&count=6";
var range=shortcodeRange
? "&range=" + shortcodeRange
: "&range=false";
let myData =
"action=dp_get_clinics&g-recaptcha-response=" +
token +
"&address=" +
input.value +
estetica +
count +
range;
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function (){
if(this.readyState==4&&this.status==200){
var clinics=xhttp.responseText;
input.disabled=false;
input.classList.remove("input-loading");
var cta=input.parentNode.parentNode.querySelector(".cta");
if(cta==null)
cta =
input.parentNode.parentNode.parentNode.querySelector(".cta"
);
cta.classList.remove("cta-loading");
if(isShortcode){
compileClinicsShortcode(clinics, input);
const updatePagedCards=new CustomEvent(
"updatePagedCards",
{
bubbles: true,
cancelable: true,
}
);
document.dispatchEvent(updatePagedCards);
}else{
compileClinics(clinics, input);
}}
};
let link=document
.getElementById("ajaxurl")
.getAttribute("href");
xhttp.open("POST", link, true);
xhttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded; charset=UTF-8"
);
xhttp.send(myData);
});
});
}else{
compileClinics("", input);
}}
function compileClinics(locations, input){
if(document.querySelector(".section-2.tab-yes .locator-results-mine")!=null
){
document
.querySelector(".section-2.tab-yes .locator-results-mine")
.classList.add("hide");
var resultsContainerEl =
input.parentNode.parentNode.parentNode.querySelector(".locator-results"
);
if(resultsContainerEl!=null){
var itemsTemplate=Handlebars.compile(input.parentNode.parentNode.parentNode.querySelector(".locator-results-html"
).innerHTML
);
var resultItemContext={ locations: JSON.parse(locations) };
resultsContainerEl.innerHTML=itemsTemplate(resultItemContext);
bookingBoxes();
}}else if(!document.body.classList.contains("post-type-archive-centro")
){
var resultsContainerEl =
input.parentNode.parentNode.parentNode.querySelector(".locator-results"
);
if(input.closest(".offcanvas-body")){
var newQueryString=editQueryParameters();
var link=input
.closest(".offcanvas-body")
.querySelector(".offcanvas-locator-button");
link.href =
location.protocol +
"//" +
location.hostname +
"/centri/" +
newQueryString +
"location=" +
encodeURIComponent(input.value);
if(!link.classList.contains("show")){
link.classList.add("show");
}}
if(resultsContainerEl!=null){
var itemsTemplate=Handlebars.compile(input.parentNode.parentNode.parentNode.querySelector(".locator-results-html"
).innerHTML
);
var resultItemContext={ locations: JSON.parse(locations) };
resultsContainerEl.innerHTML=itemsTemplate(resultItemContext);
bookingBoxes();
}}else if(document.body.classList.contains("post-type-archive-centro")){
var resultsContainerEl =
input.parentNode.parentNode.parentNode.querySelector(".locator-results"
);
if(input.closest(".offcanvas-body")){
var newQueryString=editQueryParameters();
var link=input
.closest(".offcanvas-body")
.querySelector(".offcanvas-locator-button");
link.href =
location.protocol +
"//" +
location.hostname +
"/centri/" +
newQueryString +
"location=" +
encodeURIComponent(input.value);
if(!link.classList.contains("show")){
link.classList.add("show");
}}
if(input.closest(".tab-content.centri")){
var newQueryString=editQueryParameters();
const stateObj={};
var newURI =
location.protocol +
"//" +
location.hostname +
"/centri/" +
newQueryString +
"location=" +
encodeURIComponent(input.value);
history.replaceState(stateObj, "", newURI);
}
if(resultsContainerEl!=null){
var itemsTemplate=Handlebars.compile(input.parentNode.parentNode.parentNode.querySelector(".locator-results-html"
).innerHTML
);
var resultItemContext={ locations: JSON.parse(locations) };
resultsContainerEl.innerHTML=itemsTemplate(resultItemContext);
bookingBoxes();
}}
}
function editQueryParameters(){
var queryString=window.location.search;
var urlparts=queryString.substring(1).split("&");
newQueryString="?";
if(queryString!==null||queryString!==""){
for (var i=0; i < urlparts.length; i++){
if(urlparts[i].includes("location")) continue;
newQueryString=newQueryString + urlparts[i] + "&";
}}
return newQueryString;
}
function compileClinicsShortcode(locations, input){
Handlebars.registerHelper("chunk", function (context, options){
let out="";
const size=6;
for (let i=0; i < context.length; i +=size){
out +='<div class="col-single-box item">';
out +=context
.slice(i, i + size)
.map(options.fn)
.join("");
out +="</div>";
}
return out;
});
var itemsTemplate=Handlebars.compile(input.parentNode.parentNode.parentNode.querySelector(".locator-results-html-desk"
).innerHTML
);
var resultItemContext={ locations: JSON.parse(locations) };
var resultsContainerEl=input
.closest("#shortcode-maps-container")
.querySelector(".locator-results-desk");
if(resultsContainerEl!=null){
resultsContainerEl.innerHTML=itemsTemplate(resultItemContext);
}
var itemsTemplate=Handlebars.compile(input.parentNode.parentNode.parentNode.querySelector(".locator-results-html"
).innerHTML
);
var resultsContainerEl=input
.closest("#shortcode-maps-container")
.querySelector(".locator-results-mobile");
if(resultsContainerEl!=null){
resultsContainerEl.innerHTML=itemsTemplate(resultItemContext);
}}
function updateDots(event){
var totalItems=event.item.count;
var currentItem=event.item.index + 1;
if($(event.target).hasClass("owl-loaded")){
$(event.target)
.find(".owl-dot")
.each(function (index){
$(this).text(index + 1);
});
}}
}});
function bookingBoxes(){
const pageBooking=document.querySelector(".page-booking");
if(pageBooking!=null){
var formSection2_yes=pageBooking.querySelector(".booking-section.section-2.tab-yes"
);
var formSection2_no=pageBooking.querySelector(".booking-section.section-2.tab-no"
);
var formSection3=pageBooking.querySelector(".booking-section.section-3");
var formSection4=pageBooking.querySelector(".booking-section.section-4");
var bookingLocations=formSection2_yes.querySelectorAll(".box-location");
for (let i=0; i < bookingLocations.length; i++){
if(bookingLocations[i].classList.contains("has-event")){
continue;
}
bookingLocations[i].addEventListener("click", function (){
this.classList.add("has-event");
var code=this.dataset.code;
title=this.querySelector(".box-location-title").innerHTML;
address=this.querySelector(".box-location-address");
if(address!=null){
address=address.innerHTML;
formSection2_yes.querySelector(".details p").innerHTML =
title + "<br>" + address;
}else{
formSection2_yes.querySelector(".details p").innerHTML=title;
}
formSection2_yes.classList.remove("active");
formSection2_yes.classList.add("done");
formSection2_no.querySelector(".details p").innerHTML=title;
formSection2_no.classList.remove("active");
formSection2_no.classList.add("done");
var isDirectBooking=(typeof window.selectedCardDirectBooking!=="undefined" ? window.selectedCardDirectBooking:(typeof selectedCardDirectBooking!=="undefined" ? selectedCardDirectBooking:null))==="1";
if(isDirectBooking&&formSection3!=null){
formSection3.classList.add("active");
formSection4.classList.remove("active");
}else{
formSection3.classList.remove("active");
formSection4.classList.add("active");
if(typeof bookingData!=="undefined") bookingData.times=[];
}
bookingData.location={};
bookingData.location.code=code;
bookingData.location.title=title;
bookingData.location.address=address;
dataLayer.push({
event: "FP_step3_centro",
FP_step3_centro_value: title,
FP_step1_paziente_value: bookingData.customer ? "si":"no",
});
});
}}
};
jQuery(function(){
const owlReview=jQuery(".cs-review");
const owlNews=jQuery(".cs-news");
const owlTratt=jQuery(".cs-tratt");
const owlPrimary=jQuery(".cs-primary");
const owlPrimaryContent=jQuery(".cs-primary-content");
if(owlReview.length){
owlReview.owlCarousel({
autoplay: false,
loop: true,
margin: 20,
dots: true,
nav: true,
slideTransition: "linear",
responsive: {
0: {
items: 1,
stagePadding: 70
},
768: {
items: 3,
stagePadding: 0
},
992: {
items: 3
}},
navText:[
`<span class="icon-arrow_left"></span>`,
`<span class="icon-arrow_right"></span>`
]
});
}
if(owlNews.length){
owlNews.each(function(){
draggable=jQuery(this).find('.dp-card-review').length > 2;
jQuery(this).owlCarousel({
autoplay: false,
loop: draggable,
margin: 20,
dots: true,
nav: true,
slideTransition: "linear",
touchDrag:true,
mouseDrag:draggable,
responsive: {
0: {
items: 1
},
768: {
items: 2
},
992: {
items: 2
}},
navText:[
`<span class="icon-arrow_left"></span>`,
`<span class="icon-arrow_right"></span>`
]
});
if(!draggable){
jQuery(this).closest('.container').find('.row:first-child').remove();
}});
}
if(owlTratt.length){
owlTratt.owlCarousel({
autoplay: false,
loop: true,
margin: 20,
dots: true,
nav: true,
slideTransition: "linear",
responsive: {
0: {
items: 1,
stagePadding: 70
},
768: {
items: 3,
stagePadding: 0
},
992: {
items: 4
}},
navText:[
`<span class="icon-arrow_left"></span>`,
`<span class="icon-arrow_right"></span>`
]
});
}
if(owlPrimary.length){
draggable=owlPrimary.find('.slide-image-container').length > 1;
owlPrimary.owlCarousel({
autoplay: false,
loop: false,
dots: true,
nav: true,
slideTransition: "linear",
onTranslated: setSlide,
touchDrag:draggable,
mouseDrag:draggable,
responsive: {
0: {
items: 1
},
},
navText:[
`<span class="icon-arrow_left"></span>`,
`<span class="icon-arrow_right"></span>`
]
});
}
if(owlPrimaryContent.length){
owlPrimaryContent.owlCarousel({
autoplay: false,
loop: false,
dots: false,
nav: false,
touchDrag: false,
mouseDrag: false,
slideTransition: "linear",
responsive: {
0: {
items: 1
},
},
navText:[
`<span class="icon-arrow_left"></span>`,
`<span class="icon-arrow_right"></span>`
]
});
if(jQuery('#primaryContentSlide .owl-item').length > 1||jQuery('body').hasClass('home')){
jQuery('#primarySlide + .dp-slider-content').css({'visibility': 'hidden', 'position': 'absolute'});
jQuery('#primarySlide + .dp-slider-content').show();
setTimeout(function(){
jQuery('#primarySlide + .dp-slider-content').css({'visibility': '', 'position': ''});
}, 500);
}}
function setSlide(event){
owlPrimaryContent.trigger("to.owl.carousel", event.page.index);
}
if(document.getElementById('trattRight')){
document.getElementById('trattRight').addEventListener('click', ()=> {
owlTratt.trigger("prev.owl.carousel");
});
}
if(document.getElementById('trattLeft')){
document.getElementById('trattLeft').addEventListener('click', ()=> {
owlTratt.trigger("next.owl.carousel");
});
}
if(document.getElementById('newsRight')){
document.getElementById('newsRight').addEventListener('click', ()=> {
owlNews.trigger("prev.owl.carousel");
});
}
if(document.getElementById('newsLeft')){
document.getElementById('newsLeft').addEventListener('click', ()=> {
owlNews.trigger("next.owl.carousel");
});
}
if(document.getElementById('newsLeft')){
document.getElementById('newsSecondRight').addEventListener('click', ()=> {
owlNews.trigger("prev.owl.carousel");
});
}
if(document.getElementById('newsSecondLeft')){
document.getElementById('newsSecondLeft').addEventListener('click', ()=> {
owlNews.trigger("next.owl.carousel");
});
}
if(document.getElementById('aboutMeRight')){
document.getElementById('aboutMeRight').addEventListener('click', ()=> {
owlReview.trigger("prev.owl.carousel");
});
}
if(document.getElementById('aboutMeLeft')){
document.getElementById('aboutMeLeft').addEventListener('click', ()=> {
owlReview.trigger("next.owl.carousel");
});
}
if(document.getElementById('primaryLeft')){
document.getElementById('primaryLeft').addEventListener('click', ()=> {
owlPrimary.trigger("next.owl.carousel");
owlPrimaryContent.trigger("next.owl.carousel");
});
}
if(document.getElementById('primaryRight')){
document.getElementById('primaryRight').addEventListener('click', ()=> {
owlPrimary.trigger("prev.owl.carousel");
owlPrimaryContent.trigger("prev.owl.carousel");
});
}
window.addEventListener('resize', checkSliderCard, true);
checkSliderCard();
function checkSliderCard(){
var dpCardSlider=document.querySelector('.dp-card-slider');
var owlResizer=document.querySelector('.owl-resizer');
if(dpCardSlider!=null){
var setCardOnTop=false;
if(window.outerWidth >=992){
if(window.outerHeight < 800){
setCardOnTop=true;
}}
if(setCardOnTop){
owlResizer.classList.add('active');
}else{
owlResizer.classList.remove('active');
}}
}});
function initMap(){
var mapContainer=document.querySelector('.map-container');
if(mapContainer!=null){
var gmapsKey=new URLSearchParams(document.getElementById('g-maps').getAttribute('src').split('?')[1]);
if(document.querySelector('.page-centri')!=null){
centriInitMap();
}else{
var title=mapContainer.querySelector('h1')!=null ? mapContainer.querySelector('h1').innerHTML:'';
var lat=parseFloat(mapContainer.dataset.lat);
var lng=parseFloat(mapContainer.dataset.lng);
centroInitMap(gmapsKey.get('key'), title, lat, lng);
}}
var options={
componentRestrictions: {country: "it"}};
var autocomplete=document.querySelectorAll('.autocomplete');
for(let i=0; i<autocomplete.length; i++){
new google.maps.places.Autocomplete(autocomplete[i], options);
}};
function centroInitMap(mapsApiKey, title, lat, lng){
const mapStyle=[
{
"featureType": "water",
"elementType": "geometry",
"stylers": [
{
"color": "#193341"
}
]
},
{
"featureType": "landscape",
"elementType": "geometry",
"stylers": [
{
"color": "#2c5a71"
}
]
},
{
"featureType": "road",
"elementType": "geometry",
"stylers": [
{
"color": "#29768a"
},
{
"lightness": -37
}
]
},
{
"featureType": "poi",
"elementType": "geometry",
"stylers": [
{
"color": "#406d80"
}
]
},
{
"featureType": "transit",
"elementType": "geometry",
"stylers": [
{
"color": "#406d80"
}
]
},
{
"elementType": "labels.text.stroke",
"stylers": [
{
"visibility": "on"
},
{
"color": "#3e606f"
},
{
"weight": 2
},
{
"gamma": 0.84
}
]
},
{
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#ffffff"
}
]
},
{
"featureType": "administrative",
"elementType": "geometry",
"stylers": [
{
"weight": 0.6
},
{
"color": "#1a3541"
}
]
},
{
"elementType": "labels.icon",
"stylers": [
{
"visibility": "off"
}
]
},
{
"featureType": "poi.park",
"elementType": "geometry",
"stylers": [
{
"color": "#2c5a71"
}
]
}
];
const configuration={
"locations": [
{"title":title,"coords":{"lat":lat,"lng":lng}}
],
"mapOptions": {"center":{"lat":lat,"lng":lng},"fullscreenControl":true,"mapTypeControl":false,"streetViewControl":false,"zoom":16,"zoomControl":true,"maxZoom":16, "mapTypeId": "myStyle"},
"mapsApiKey": mapsApiKey
};
const locator=this;
locator.locations=configuration.locations||[];
locator.capabilities=configuration.capabilities||{};
const mapEl=document.getElementById('centro-map');
if(mapEl==null)
return;
const panelEl=document.getElementById('locations-panel');
locator.panelListEl=document.getElementById('locations-panel-list');
const resultsContainerEl=document.getElementById('location-results-list');
locator.searchLocation=null;
locator.searchLocationMarker=null;
locator.selectedLocationIdx=null;
locator.userCountry=null;
locator.map=new google.maps.Map(mapEl, configuration.mapOptions);
locator.map.mapTypes.set('myStyle', new google.maps.StyledMapType(mapStyle, { name: 'Map Style' }));
const selectResultItem=function(locationIdx, panToMarker, scrollToResult){
locator.selectedLocationIdx=locationIdx;
for (let locationElem of resultsContainerEl.children){
locationElem.classList.remove('selected');
if(getResultIndex(locationElem)===locator.selectedLocationIdx){
locationElem.classList.add('selected');
if(scrollToResult){
panelEl.scrollTop=locationElem.offsetTop;
}}
}
if(panToMarker&&(locationIdx!=null)){
locator.map.panTo(locator.locations[locationIdx].coords);
}};
var svg=[
'<?xml version="1.0"?>',
'<svg width="26" height="31" viewBox="0 0 26 31" fill="none" xmlns="http://www.w3.org/2000/svg">',
'<path d="M25.2329 12.6165C25.2329 22.4293 12.6165 30.8402 12.6165 30.8402C12.6165 30.8402 0 22.4293 0 12.6165C4.98607e-08 9.27036 1.32923 6.06132 3.69527 3.69527C6.06132 1.32923 9.27036 0 12.6165 0C15.9625 0 19.1716 1.32923 21.5376 3.69527C23.9037 6.06132 25.2329 9.27036 25.2329 12.6165Z" fill="#79E2D9"/>',
'<path d="M12.6166 16.822C14.9392 16.822 16.8221 14.9391 16.8221 12.6165C16.8221 10.2939 14.9392 8.41104 12.6166 8.41104C10.294 8.41104 8.41113 10.2939 8.41113 12.6165C8.41113 14.9391 10.294 16.822 12.6166 16.822Z" fill="#215682"/>',
'</svg>'
].join('\n');
const markers=locator.locations.map(function(location, index){
const marker=new google.maps.Marker({
position: location.coords,
map: locator.map,
title: location.title,
icon: { url: 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg) },
optimized: false
});
marker.addListener('click', function(){
selectResultItem(index, false, true);
});
return marker;
});
locator.updateBounds=function(){
const bounds=new google.maps.LatLngBounds();
if(locator.searchLocationMarker){
bounds.extend(locator.searchLocationMarker.getPosition());
}
for (let i=0; i < markers.length; i++){
bounds.extend(markers[i].getPosition());
}
locator.map.fitBounds(bounds);
};
if(locator.locations.length){
locator.updateBounds();
}
const getLocationDistance=function(location){
if(!locator.searchLocation) return null;
if(location.travelDistanceValue!=null){
return location.travelDistanceValue;
}
return google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(location.coords),
locator.searchLocation.location);
};
const getResultIndex=function(elem){
return parseInt(elem.getAttribute('data-location-index'));
};
locator.renderResultsList=function(){
let locations=locator.locations.slice();
for (let i=0; i < locations.length; i++){
locations[i].index=i;
}
if(locator.searchLocation){
locations.sort(function(a, b){
return getLocationDistance(a) - getLocationDistance(b);
});
}};
locator.renderResultsList();
if(window.innerWidth > 991){
const center=new google.maps.LatLng(lat+0.0015, lng-0.005);
locator.map.panTo(center);
}}
jQuery(function(){
const owlOpinioni=jQuery(".owl-carousel.dp-opinioni");
const owlCentroImmagini=jQuery(".dp-centro-immagini");
const owlStaff=jQuery(".dp-staff");
const owlTreatments=jQuery(".dp-treatments");
if(owlOpinioni.length){
owlOpinioni.owlCarousel({
autoplay: false,
loop: true,
margin: 20,
dots: false,
nav: false,
slideTransition: "linear",
responsive: {
0: {
items: 1
},
992: {
items: 2
},
1200: {
items: 3
}}
});
}
if(owlCentroImmagini.length){
owlCentroImmagini.owlCarousel({
autoplay: false,
loop: true,
margin: 0,
dots: true,
nav: false,
slideTransition: "linear",
items: 1
});
}
if(owlStaff.length){
draggable=owlStaff.find('.dp-card-review').length > 4;
owlStaff.owlCarousel({
autoplay: false,
loop: true,
margin: 20,
dots: true,
nav: true,
slideTransition: "linear",
responsive: {
0: {
items: 1,
stagePadding: 70
},
768: {
items: 3,
stagePadding: 0
},
992: {
items: 4
}},
navText:[
`<span class="icon-arrow_left"></span>`,
`<span class="icon-arrow_right"></span>`
]
});
if(!draggable){
jQuery('#staffRight, #staffLeft').removeClass('d-md-block').hide();
}}
if(owlTreatments.length){
draggable=owlTreatments.find('.dp-card-review').length > 4;
owlTreatments.owlCarousel({
autoplay: false,
loop: true,
margin: 20,
dots: true,
nav: true,
slideTransition: "linear",
responsive: {
0: {
items: 1,
stagePadding: 70
},
768: {
items: 4,
stagePadding: 0
}},
navText:[
`<span class="icon-arrow_left"></span>`,
`<span class="icon-arrow_right"></span>`
]
});
if(!draggable){
jQuery('#treatmentsRight, #treatmentsLeft').removeClass('d-md-block').hide();
}}
document.querySelectorAll('[id="opinioniRight"]').forEach((btn)=> {
btn.addEventListener('click', ()=> owlOpinioni.trigger("prev.owl.carousel"));
});
document.querySelectorAll('[id="opinioniLeft"]').forEach((btn)=> {
btn.addEventListener('click', ()=> owlOpinioni.trigger("next.owl.carousel"));
});
if(document.getElementById('staffRight')){
document.getElementById('staffRight').addEventListener('click', ()=> {
owlStaff.trigger("prev.owl.carousel");
});
}
if(document.getElementById('staffLeft')){
document.getElementById('staffLeft').addEventListener('click', ()=> {
owlStaff.trigger("next.owl.carousel");
});
}
if(document.getElementById('treatmentsRight')){
document.getElementById('treatmentsRight').addEventListener('click', ()=> {
owlTreatments.trigger("prev.owl.carousel");
});
}
if(document.getElementById('treatmentsLeft')){
document.getElementById('treatmentsLeft').addEventListener('click', ()=> {
owlTreatments.trigger("next.owl.carousel");
});
}});
function centriInitMap(lat=null, lng=null){
const mapStyle=[
{
"featureType": "water",
"elementType": "geometry",
"stylers": [
{
"color": "#193341"
}
]
},
{
"featureType": "landscape",
"elementType": "geometry",
"stylers": [
{
"color": "#2c5a71"
}
]
},
{
"featureType": "road",
"elementType": "geometry",
"stylers": [
{
"color": "#29768a"
},
{
"lightness": -37
}
]
},
{
"featureType": "poi",
"elementType": "geometry",
"stylers": [
{
"color": "#406d80"
}
]
},
{
"featureType": "transit",
"elementType": "geometry",
"stylers": [
{
"color": "#406d80"
}
]
},
{
"elementType": "labels.text.stroke",
"stylers": [
{
"visibility": "on"
},
{
"color": "#3e606f"
},
{
"weight": 2
},
{
"gamma": 0.84
}
]
},
{
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#ffffff"
}
]
},
{
"featureType": "administrative",
"elementType": "geometry",
"stylers": [
{
"weight": 0.6
},
{
"color": "#1a3541"
}
]
},
{
"elementType": "labels.icon",
"stylers": [
{
"visibility": "off"
}
]
},
{
"featureType": "poi.park",
"elementType": "geometry",
"stylers": [
{
"color": "#2c5a71"
}
]
}
];
var svg=[
'<?xml version="1.0"?>',
'<svg width="26" height="31" viewBox="0 0 26 31" fill="none" xmlns="http://www.w3.org/2000/svg">',
'<path d="M25.2329 12.6165C25.2329 22.4293 12.6165 30.8402 12.6165 30.8402C12.6165 30.8402 0 22.4293 0 12.6165C4.98607e-08 9.27036 1.32923 6.06132 3.69527 3.69527C6.06132 1.32923 9.27036 0 12.6165 0C15.9625 0 19.1716 1.32923 21.5376 3.69527C23.9037 6.06132 25.2329 9.27036 25.2329 12.6165Z" fill="#79E2D9"/>',
'<path d="M12.6166 16.822C14.9392 16.822 16.8221 14.9391 16.8221 12.6165C16.8221 10.2939 14.9392 8.41104 12.6166 8.41104C10.294 8.41104 8.41113 10.2939 8.41113 12.6165C8.41113 14.9391 10.294 16.822 12.6166 16.822Z" fill="#215682"/>',
'</svg>'
].join('\n');
var mapOptions={
zoom: 6,
center: {lat: 42.655583, lng: 12.846389},
mapTypeId: "myStyle",
fullscreenControl: true,
mapTypeControl: false,
streetViewControl: false
};
if(lat!=null&&lng!=null){
mapOptions.zoom=9;
mapOptions.center={lat: lat, lng: lng};}
var map=new google.maps.Map(document.querySelector('.map-container'), mapOptions);
map.mapTypes.set('myStyle', new google.maps.StyledMapType(mapStyle, { name: 'Map Style' }));
var markers=[];
var markersLtLong=[];
if(document.querySelector('#centri-list').getAttribute('data-distance-max'))
window.mapConstants.maxKm=parseInt(document.querySelector('#centri-list').getAttribute('data-distance-max'));
window.currentMax=window.currentMax||window.mapConstants.minKm;
if(window.currentMax <=window.mapConstants.maxKm)
maxDistance=window.currentMax;
locations=document.querySelectorAll('#centri-list .box-location');
var initState=document.querySelector(".tab-content.locator-results").getAttribute("data-init")=='true';
var bounds=new google.maps.LatLngBounds();
while(maxDistance <  window.mapConstants.maxKm){
markers=[];
markersLtLong=[];
for(let i=0; i<locations.length; i++){
loc_lat=locations[i].getAttribute('data-lat');
loc_lng=locations[i].getAttribute('data-lng');
distance=locations[i].getAttribute('data-distance');
if(distance==null||parseInt(distance) <=maxDistance){
markers.push({
position: { lat: parseFloat(loc_lat), lng: parseFloat(loc_lng) },
content: '<div class="tab-content"><div class="tab-box"><div class="box-location">'+locations[i].innerHTML+'</div></div></div>'
});
}}
if(markers.length >=window.mapConstants.minResults){
break;
}else if(!initState&&markers.length < window.mapConstants.minResults){
maxDistance=maxDistance + window.mapConstants.stepKm;
}}
if(markers.length===1){
google.maps.event.addListenerOnce(map, "bounds_changed", function (){
this.setZoom(13);
});
};
if(markers.length > 0){
for (var i=0; i < markers.length; i++)
bounds.extend(new google.maps.LatLng(markers[i].position.lat,markers[i].position.lng));
map.fitBounds(bounds);
}else{
map.zoom=11;
}
if(!initState){
var feedbackTxt=document.querySelector(".locator-results--feedback");
if(markers.length > 0)
feedbackTxt.innerHTML="Sono stati trovati " + markers.length + " centri nel raggio di " + maxDistance + " Km";
else
feedbackTxt.innerHTML="Nessun centro trovato per la ricerca corrente nel raggio di " + maxDistance + " Km ";
setAccordionHeaderStickyVariable();
}
var currentInfowindow=null;
var markerObjects=[];
let lastSelectedMarker=null;
for (var i=0; i < markers.length; i++){
let marker=new google.maps.Marker({
position: markers[i].position,
map: map,
icon: { url: 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg) }});
let infowindow=new google.maps.InfoWindow({
content: markers[i].content
});
if(markers.length===1){
var vw=getClientWidth();
let lat=marker.position.lat();
let lng=marker.position.lng();
let targetElement=document.querySelector(`#centri-list .box-location[data-lat="${lat}"][data-lng="${lng}"]`)?.closest('.tab-box');
if(targetElement){
let accordionItem=targetElement.closest(".accordion");
if(accordionItem){
let accordionButton=accordionItem.querySelector("button.accordion-button");
if(accordionButton&&accordionButton.classList.contains("collapsed")){
accordionButton.click();
}
let scrollAndHighlight=function(){
setTimeout(function (){
let accordionItemOffset=accordionItem.offsetTop - accordionItem.querySelector(".accordion-header").clientHeight;
let totalOffset=accordionItemOffset + (targetElement.offsetTop - targetElement.clientHeight) + 300;
let scrollContainer=document.querySelector(".store-locator-container .col-4.col-lg-4");
if(scrollContainer){
scrollContainer.scroll({ top: totalOffset, behavior: 'smooth' });
}
document.querySelectorAll(".box-location.highlight").forEach(el=> el.classList.remove("highlight"));
targetElement.classList.add("highlight");
}, 300);
setTimeout(()=> targetElement.classList.remove("highlight"), 3000);
};
let centriList=document.querySelector("#centri-list");
if(vw <=991&&centriList&&getComputedStyle(centriList).display==="none"){
lastSelectedMarker={ scrollAndHighlight };}else{
scrollAndHighlight();
}}
}}
markerObjects.push({ marker, infowindow });
marker.addListener('click', function(){
var vw=getClientWidth();
if(currentInfowindow){
currentInfowindow.close();
}
infowindow.open(map, marker);
map.panTo(marker.position);
currentInfowindow=infowindow;
let lat=marker.position.lat();
let lng=marker.position.lng();
let targetElement=document.querySelector(`#centri-list .box-location[data-lat="${lat}"][data-lng="${lng}"]`)?.closest('.tab-box');
let test=document.querySelector(`#centri-list .box-location[data-lat="${lat}"][data-lng="${lng}"]`);
if(targetElement){
let accordionItem=targetElement.closest(".accordion");
if(accordionItem){
let accordionButton=accordionItem.querySelector("button.accordion-button");
if(accordionButton&&accordionButton.classList.contains("collapsed")){
accordionButton.click();
}
let scrollAndHighlight=function(){
setTimeout(function (){
let accordionItemOffset=accordionItem.offsetTop - accordionItem.querySelector(".accordion-header").clientHeight;
let totalOffset=accordionItemOffset + (targetElement.offsetTop - targetElement.clientHeight) + 300;
let scrollContainer=document.querySelector(".store-locator-container .col-4.col-lg-4");
if(scrollContainer){
scrollContainer.scroll({ top: totalOffset, behavior: 'smooth' });
}
document.querySelectorAll(".box-location.highlight").forEach(el=> el.classList.remove("highlight"));
test.classList.add("highlight");
}, 300);
setTimeout(()=> test.classList.remove("highlight"), 3000);
};
let centriList=document.querySelector("#centri-list");
if(vw <=991&&centriList&&getComputedStyle(centriList).display==="none"){
lastSelectedMarker={ scrollAndHighlight };}else{
scrollAndHighlight();
}}
}});
}
document.querySelector("#centri-list-tab").addEventListener("click", function(){
if(lastSelectedMarker){
setTimeout(lastSelectedMarker.scrollAndHighlight, 500);
}});
document.querySelectorAll("#centri-list .box-location .cta-link").forEach(link=> {
link.addEventListener("click", function (e){
e.stopPropagation();
});
});
document.querySelectorAll("#centri-list .box-location").forEach(item=> {
item.addEventListener("click", function (){
let lat=parseFloat(item.getAttribute("data-lat"));
let lng=parseFloat(item.getAttribute("data-lng"));
if(!isNaN(lat)&&!isNaN(lng)){
let targetLatLng=new google.maps.LatLng(lat, lng);
if(typeof map!=="undefined"&&map instanceof google.maps.Map){
let currentZoom=map.getZoom();
let targetZoom=currentZoom < 14 ? 14:currentZoom;
map.setZoom(targetZoom);
map.panTo(targetLatLng);
let markerObj=markerObjects.find(obj=>
obj.marker.position.lat()===lat&&obj.marker.position.lng()===lng
);
if(markerObj){
if(currentInfowindow) currentInfowindow.close();
markerObj.infowindow.open(map, markerObj.marker);
currentInfowindow=markerObj.infowindow;
}}
let accordionItem=item.closest(".accordion-item");
if(accordionItem){
let accordionButton=accordionItem.querySelector("button.accordion-button");
if(accordionButton&&accordionButton.classList.contains("collapsed")){
accordionButton.click();
}}
}});
});
}
document.addEventListener("DOMContentLoaded", function(){
const calcSubmit=document.querySelector('.tab-content.centri .cta');
if(calcSubmit!=null){
calcSubmit.addEventListener('click', function(){
address=this.parentNode.querySelector('input');
if(address.value!=''){
address.disabled=true;
address.classList.add('input-loading');
calcSubmit.classList.add('cta-loading');
var grecaptcha_key=document.getElementById('g-recaptcha').getAttribute('src').split('render=')[1];
grecaptcha.ready(function(){
grecaptcha.execute(grecaptcha_key, {action: 'submit'}).then(function(token){
let myData='action=dp_get_latlng_by_address&g-recaptcha-response=' + token + '&address=' + address.value;
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function(){
if(this.readyState==4&&this.status==200){
var latlng=xhttp.responseText;
address.disabled=false;
address.classList.remove('input-loading');
calcSubmit.classList.remove('cta-loading');
var lat=null, lng=null;
if(isJson(latlng)){
latlng=JSON.parse(latlng);
lat=latlng.lat;
lng=latlng.lng;
}else{
if(latlng.indexOf(',')!=-1){
latlng=address.trim().split(',');
lat=latlng[0];
lng=latlng[1];
}}
if(lat!=null&&lng!=null){
locations=document.querySelectorAll('#centri-list .box-location');
if(document.querySelector('#centri-list').getAttribute('data-distance-max'))
window.mapConstants.maxKm=parseInt(document.querySelector('#centri-list').getAttribute('data-distance-max'));
window.currentMax=window.currentMax||window.mapConstants.minKm;
if(window.currentMax <=window.mapConstants.maxKm)
maxDistance=window.currentMax;
while(maxDistance <  window.mapConstants.maxKm){
for(let i=0; i<locations.length; i++){
loc_lat=locations[i].getAttribute('data-lat');
loc_lng=locations[i].getAttribute('data-lng');
distance=calcDistance(lat, lng, loc_lat, loc_lng);
locations[i].querySelector('.box-location-distance').innerHTML='<span>' + Math.round(distance) + ' Km</span>';
locations[i].parentNode.style.order=Math.round(distance);
locations[i].setAttribute('data-distance', Math.round(distance));
locations[i].parentNode.style.display=(Math.round(distance) > maxDistance) ? 'none':'block';
locations[i].parentNode.setAttribute("location-active", (Math.round(distance) <=maxDistance) ? 'true':'false');
}
var locationsActive=document.querySelectorAll(".tab-box[location-active='true']");
if(locationsActive.length >=window.mapConstants.minResults){
break;
}else if(locationsActive.length < locations.length&&locationsActive.length < window.mapConstants.minResults){
maxDistance=maxDistance + window.mapConstants.stepKm;
}}
accordions=document.querySelectorAll('#centri-list .accordion');
for(let i=0; i<accordions.length; i++){
accordions[i].classList.remove("accordion-active");
accordions[i].querySelector(".accordion-collapse").classList.remove("show");
accordions[i].querySelector(".accordion-button").classList.add("collapsed");
accordions[i].querySelector(".accordion-button").setAttribute("aria-expanded", "false");
regionHasLocation=false;
locations=accordions[i].querySelectorAll('.tab-box');
for(let e=0; e<locations.length; e++){
if(locations[e].style.display=='block'){
regionHasLocation=true;
}}
accordions[i].style.display=regionHasLocation ? 'block':'none';
if(regionHasLocation){
accordions[i].classList.add("accordion-active");
accordions[i].querySelector(".accordion-collapse").classList.add("show");
accordions[i].querySelector(".accordion-button").classList.remove("collapsed");
accordions[i].querySelector(".accordion-button").setAttribute("aria-expanded", "true");
}}
document.querySelector('.store-locator-container .col-4').scrollTo(0,0);
document.querySelector(".tab-content.locator-results").setAttribute("data-init", false);
centriInitMap(lat, lng);
}}
};
let link=document.getElementById('ajaxurl').getAttribute('href');
xhttp.open("POST", link, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
xhttp.send(myData);
});
});
}});
}
const completeMap=document.querySelector(".complete-map");
if(completeMap){
var searchInput=completeMap.querySelector(".tab-content.centri input");
if(searchInput.value&&searchInput!=""){
var cta=searchInput.parentNode.parentNode.querySelector(".cta");
cta.click();
}
switchMapToMobile();
setHeaderHeightVariable();
window.addEventListener("resize", setHeaderHeightVariable);
window.addEventListener("resize", switchMapToMobile);
}
function isJson(str){
try {
JSON.parse(str);
} catch (e){
return false;
}
return true;
}
function calcDistance(lat1, lon1, lat2, lon2){
const earthRadius=6371;
const dLat=(lat2 - lat1) * Math.PI / 180;
const dLon=(lon2 - lon1) * Math.PI / 180;
const a =
Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
const c=2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const distance=earthRadius * c;
return distance;
}
function switchMapToMobile (){
var vw=getClientWidth();
if(vw <=991){
if(!completeMap.classList.contains("complete-map--mobile")){
completeMap.classList.add("complete-map--mobile");
completeMap.querySelector("#centri-list")
.classList.remove("show", "active");
completeMap
.querySelector(".store-locator-container ")
.prepend(completeMap.querySelector(".row-search"));
completeMap
.querySelector("#centri-list")
.after(completeMap.querySelector("#centri-map"));
}}else{
if(completeMap.classList.contains("complete-map--mobile")){
completeMap.classList.remove("complete-map--mobile");
completeMap.querySelector("#centri-list")
.classList.add("show", "active");
completeMap.querySelector("#centri-map")
.classList.add("show", "active");
completeMap
.querySelector(".store-locator-container .col-4 .row")
.prepend(completeMap.querySelector(".row-search"));
completeMap
.querySelector(".col-8 .locator-results")
.prepend(completeMap.querySelector("#centri-map"));
}}
}
function setHeaderHeightVariable (){
var vw=getClientWidth();
if(vw < 992){
var headerHeight=document.querySelector(".header-mobile .d-flex").offsetHeight;
document.documentElement.style.setProperty("--header-height", headerHeight + "px");
}else{
var headerHeight=document.querySelector(".header .d-flex").offsetHeight;
document.documentElement.style.setProperty("--header-height", headerHeight + "px");
}}
});
function setAccordionHeaderStickyVariable (){
var vw=getClientWidth();
if(vw > 991){
var offsetForSticky=document.querySelector(".row-search");
var accordionHeaders=document.querySelectorAll(".accordion-header");
for(var i=0; i<accordionHeaders.length; i++)
accordionHeaders[i].style.setProperty("--accordion-header-sticky", offsetForSticky.clientHeight + "px");
}}
function getClientWidth (){
return Math.max(document.documentElement.clientWidth||0, window.innerWidth||0);
};
document.addEventListener("DOMContentLoaded", function(){
if(!document.body.classList.contains('header-loaded')&&!document.body.classList.contains('page-template-page-landing')&&!document.body.classList.contains('area-pazienti')&&!document.body.classList.contains('page-template-page-booking')){
document.body.classList.add('header-loaded');
const parentMenu=document.querySelectorAll('#nav-main .cta.has-submenu .action');
const overlayMenu=document.querySelector('#menu-page-overlay');
const activeMenuClass='actived';
for(let i=0; i<parentMenu.length; i++){
parentMenu[i].addEventListener('click', function(){
var menuElement=this.parentNode;
if(menuElement.classList.contains(activeMenuClass)){
menuElement.classList.remove(activeMenuClass);
}else{
menuElement.classList.add(activeMenuClass);
}
overlayMenu.style.display=overlayMenu.style.display!='block' ? 'block':'none';
});
}
overlayMenu.addEventListener('click', function(){
for(let i=0; i<parentMenu.length; i++){
if(parentMenu[i].parentNode.classList.contains(activeMenuClass)){
parentMenu[i].parentNode.classList.remove(activeMenuClass);
}}
this.style.display='none';
});
const headerMobileStickyClass='header-mobile-sticky';
const menuClose=document.querySelectorAll('#menu-mobile .menu-close');
const submenuMobile=document.querySelectorAll('#menu-mobile .submenu-mobile');
const menuMain=document.querySelector('#menu-mobile-main');
const menuMobile=document.querySelector('#menu-mobile');
const submenuLink=document.querySelectorAll('#menu-mobile .menu-link.has-submenu');
const menuBack=document.querySelectorAll('#menu-mobile .menu-back');
const menuChooseLink=document.querySelectorAll('#menu-mobile .choose-links .choose-link');
const headerMobileMain=document.querySelector('#header-mobile-main');
const headerMobileMainHeight=headerMobileMain.clientHeight;
var lastScrollTop=0;
document.querySelector('.open-menu-mobile').addEventListener('click', function(e){
document.querySelector('#menu-mobile').style.display='block';
document.body.classList.add('overflow-hidden');
e.preventDefault();
});
for(let i=0; i<menuClose.length; i++){
menuClose[i].addEventListener('click', function(e){
for(let r=0; r<submenuMobile.length; r++){
submenuMobile[r].style.display='none';
}
menuMain.style.display='block';
menuMobile.style.display='none';
document.body.classList.remove('overflow-hidden');
e.preventDefault();
});
}
for(let i=0; i<submenuLink.length; i++){
submenuLink[i].addEventListener('click', function(){
var menu=this.getAttribute('data-menu');
for(let r=0; r<submenuMobile.length; r++){
if(submenuMobile[r].getAttribute('data-menu')==menu){
menuMain.style.display='none';
submenuMobile[r].style.display='block';
}}
});
}
for(let i=0; i<menuBack.length; i++){
menuBack[i].addEventListener('click', function(){
for(let r=0; r<submenuMobile.length; r++){
submenuMobile[r].style.display='none';
}
menuMain.style.display='block';
});
}
for(let i=0; i<menuChooseLink.length; i++){
menuChooseLink[i].addEventListener('click', function(e){
if(!this.classList.contains(activeMenuClass)){
var submenu=this.getAttribute('data-submenu');
for(let r=0; r<menuChooseLink.length; r++){
if(menuChooseLink[r].classList.contains(activeMenuClass)){
menuChooseLink[r].classList.remove(activeMenuClass);
}}
this.classList.add(activeMenuClass);
var navs=closest(this, '.submenu-mobile');
navs=navs.querySelector('.multiple-navs');
var navigations=navs.querySelectorAll('nav');
for(let r=0; r<navigations.length; r++){
if(navigations[r].classList.contains(activeMenuClass)){
navigations[r].classList.remove(activeMenuClass);
}}
navs.querySelector('nav.' + submenu).classList.add(activeMenuClass);
}
e.preventDefault();
});
}
window.addEventListener('scroll', function(){
var st=window.scrollY;
if(lastScrollTop > headerMobileMainHeight&&st < lastScrollTop&&headerMobileMainHeight>0){
if(!headerMobileMain.classList.contains(headerMobileStickyClass)){
headerMobileMain.classList.add(headerMobileStickyClass);
document.body.style.marginTop=headerMobileMainHeight + 80 + 'px';
document.body.classList.add(headerMobileStickyClass);
}}else{
if(headerMobileMain.classList.contains(headerMobileStickyClass)){
headerMobileMain.classList.remove(headerMobileStickyClass);
document.body.style.marginTop=0;
document.body.classList.remove(headerMobileStickyClass);
}}
lastScrollTop=st;
});
function closest(el, selector){
var matchesSelector=el.matches||el.webkitMatchesSelector||el.mozMatchesSelector||el.msMatchesSelector;
while (el){
if(matchesSelector.call(el, selector)){
break;
}
el=el.parentElement;
}
return el;
}
const searchOverlay=document.querySelector('.search-overlay');
const searchInputBox=document.querySelector('.search-input-box');
const searchInputBoxMobile=document.querySelector('.search-input-box-mobile');
const searchLinks=document.querySelectorAll('.search-link');
for(let i=0; i<searchLinks.length; i++){
searchLinks[i].addEventListener('click', function(e){
if(this.classList.contains('menu-link')){
searchOverlay.style.display='block';
}else{
if(searchLinks[i].parentNode.classList.contains('search-opened')){
searchLinks[i].parentNode.classList.remove('search-opened');
}else{
searchLinks[i].parentNode.classList.add('search-opened');
}}
e.preventDefault();
});
}
searchOverlay.querySelector('.search-overlay-close').addEventListener('click', function(){
searchOverlay.style.display='none';
});
}});
document.addEventListener("DOMContentLoaded", function(){
const dpIndex=document.querySelector('.dp-index');
if(dpIndex!=null){
var cumulativeOffset=function(element){
var top=0, left=0;
do {
top +=element.offsetTop||0;
left +=element.offsetLeft||0;
element=element.offsetParent;
} while(element);
return {
top: top,
left: left
};};
dpIndexItems=dpIndex.querySelectorAll('.dp-list-items');
for(let i=0; i<dpIndexItems.length; i++){
if(document.querySelector('#index-'+(i+1))!=null){
if(dpIndexItems[i].querySelector('p a').innerHTML==''){
dpIndexItems[i].querySelector('p a').innerHTML=document.querySelector('#index-'+(i+1)).innerHTML;
}}else{
dpIndexItems[i].remove();
}}
var dpIndexPosition=cumulativeOffset(dpIndex).top;
var dpIndexHeight=dpIndex.offsetHeight;
var dpIndexClone=dpIndex.cloneNode(true);
var dpCurrentIndex=dpIndexClone.querySelector('.current-index');
dpIndexClone.classList.add('fixed');
document.body.appendChild(dpIndexClone);
window.addEventListener('scroll', dpIndexToggle);
dpIndexClone.querySelector('.current-index').addEventListener('click', function(){
if(dpIndexClone.classList.contains('opened')){
dpIndexClone.classList.remove('opened');
}else{
dpIndexClone.classList.add('opened');
}});
dpIndexItems=document.querySelectorAll('.dp-index .dp-list-items');
for(let i=0; i<dpIndexItems.length; i++){
dpIndexItems[i].querySelector('p a').addEventListener('click', function(e){
e.preventDefault();
const href=this.getAttribute("href");
const offsetTop=document.querySelector(href).offsetTop - document.getElementById('header').offsetHeight - document.getElementById('header-mobile').offsetHeight;
scroll({
top: offsetTop,
behavior: "smooth"
});
});
}
cloneLinks=dpIndexClone.querySelectorAll('a');
for(let i=0; i<cloneLinks.length; i++){
cloneLinks[i].addEventListener('click', function(e){
dpIndexClone.classList.remove('opened');
e.preventDefault();
});
}
dpIndexToggle();
window.addEventListener('resize', dpIndexResize, true);
dpIndexResize();
}
function dpIndexToggle(){
var scrollY=window.scrollY;
if(scrollY > dpIndexPosition - dpIndexHeight){
if(!dpIndexClone.classList.contains('show')){
dpIndexClone.classList.add('show');
}
var titles=document.querySelectorAll('h1, h2, h3, h4, h5, h6');
var stopTitles=false;
for(let i=0; i<titles.length; i++){
if(scrollY <=titles[i].offsetTop&&!stopTitles){
currentIndexID=titles[i].getAttribute('id');
if(currentIndexID!=null){
for(let i=0; i<dpIndexItems.length; i++){
dpIndexItem=dpIndexItems[i].querySelector('p a');
if(dpIndexItem.getAttribute("href").split('#')[1]==currentIndexID){
dpCurrentIndex.innerHTML=dpIndexItem.innerHTML;
}}
}
stopTitles=true;
}}
}else{
if(dpIndexClone.classList.contains('show')){
dpIndexClone.classList.remove('show');
}}
}
function dpIndexResize(){
var ct=document.querySelector('.content-text .sticky');
if(ct!=null){
ct.style.marginTop=0;
document.getElementById('index-1').style.marginTop=0;
if(window.innerWidth >=992){
dpIndexResizePosition=cumulativeOffset(dpIndex).top + dpIndex.offsetHeight;
ctPosition=cumulativeOffset(ct).top;
if(ctPosition < dpIndexResizePosition+35){
padded=document.body.classList.contains('admin-bar') ? -15:15;
newPosition=dpIndexResizePosition - ctPosition + padded;
if(newPosition < 0) newPosition=0;
ct.style.marginTop=newPosition + 'px';
if(window.innerWidth < 1200){
document.getElementById('index-1').style.marginTop=0;
}else{
document.getElementById('index-1').style.marginTop=newPosition + 'px';
}}
}}
}
setTimeout(function (){
const iubBtn=document.querySelector('.iubenda-tp-btn');
if(iubBtn){
iubBtn.style.setProperty('z-index', '999', 'important');
}}, 3000);
});
class SectionSlot {
constructor(options={}){
this.container=options.container||document.getElementById("booking-owl-reservation");
this.mapContainer=options.mapContainer||document.querySelector(".grid-booking-box-3");
this.box1Container=options.box1Container||document.querySelector(".grid-booking-box-1");
this.box2Container=options.box2Container||document.querySelector(".grid-booking-box-2");
this.containerId=options.containerId||(this.container&&this.container.id)||"booking-owl-reservation";
this.navContainerId=options.navContainerId||"custom_slider_nav";
this.clinicSlotsContainerId=options.clinicSlotsContainerId||"clinic-slots-container";
this.retryCount=0;
this.reservationArgs=null;
this.mapCreated=false;
this.reservationData={};
this.clinicsData={};
this.map=null;
this.selectedSlot=null;
this.slotCarousel=null;
this.selectedDay=null;
this.selectedClinicName=null;
this.selectedType=null;
this.selectedType=null;
this._allInfoWindows=[];
this.onSlotConfirmed=options.onSlotConfirmed||null;
this.noMoreSlots=false;
this._activeLoaderHost=null;
}
setReservationData(args){
if(typeof args==='object'&&args!==null){
this.reservationData=Object.assign({}, this.reservationData, args);
}}
getReservationData(key){
if(typeof key==='undefined'){
return this.reservationData;
}
return this.reservationData[key];
}
setClinicsData(args){
if(typeof args==='object'&&args!==null){
this.clinicsData=Object.assign({}, this.clinicsData, args);
}}
getClinicsData(key){
if(typeof key==='undefined'){
return this.clinicsData;
}
return this.clinicsData[key];
}
setClinicEsigenza(type){
this.selectedType=type;
}
getClinicEsigenza(){
return this.selectedType;
}
callReservationYes(dataArgs, callback){
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: {
action: "dp_booking_slots",
data: JSON.stringify(dataArgs),
},
success: function (response){
if(typeof callback==="function"){
callback(response);
}
this.setClinicsData(response.data.Cliniche);
this.setReservationData(response.data.FreeOperatorSlots);
}.bind(this),
error: function (xhr, status, error){
console.error(error);
},
});
}
initializeCarouselBooking(){
const container=this.container||document.getElementById(this.containerId);
if(container){
container.addEventListener("click", (event)=> {
const target=event.target.closest('.day');
if(target&&container.contains(target)){
this.handleDayClick(target);
}});
}
const $container=jQuery("#" + this.containerId);
if($container.hasClass("owl-carousel")){
$container.trigger("destroy.owl.carousel");
this.slotCarousel=$container.owlCarousel({
loop: false,
margin: 24,
nav: true,
dots: false,
navContainer: "#" + this.navContainerId,
navText: [
`<svg
width="19"
height="13"
viewBox="0 0 19 13"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<g clip-path="url(#clip0_593_283)">
<path
d="M17.75 6.5L0.5 6.5"
stroke="url(#paint0_linear_593_283)"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M6.5 12.5L0.500001 6.5L6.5 0.500002"
stroke="url(#paint1_linear_593_283)"
stroke-linecap="round"
stroke-linejoin="round"
/>
</g>
<defs>
<linearGradient
id="paint0_linear_593_283"
x1="nan"
y1="nan"
x2="nan"
y2="nan"
gradientUnits="userSpaceOnUse"
>
<stop offset="0.02" stop-color="#1D3B54" />
<stop offset="1" stop-color="#215682" />
</linearGradient>
<linearGradient
id="paint1_linear_593_283"
x1="8.72"
y1="5.42"
x2="-0.46"
y2="9.9"
gradientUnits="userSpaceOnUse"
>
<stop offset="0.02" stop-color="#1D3B54" />
<stop offset="1" stop-color="#215682" />
</linearGradient>
<clipPath id="clip0_593_283">
<rect
width="18.25"
height="13"
fill="white"
transform="translate(18.25 13) rotate(-180)"
/>
</clipPath>
</defs>
</svg>`,
`<svg
width="19"
height="13"
viewBox="0 0 19 13"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<g clip-path="url(#clip0_593_279)">
<path
d="M0.5 6.5H17.75"
stroke="url(#paint0_linear_593_279)"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M11.75 0.5L17.75 6.5L11.75 12.5"
stroke="url(#paint1_linear_593_279)"
stroke-linecap="round"
stroke-linejoin="round"
/>
</g>
<defs>
<linearGradient
id="paint0_linear_593_279"
x1="nan"
y1="nan"
x2="nan"
y2="nan"
gradientUnits="userSpaceOnUse"
>
<stop offset="0.02" stop-color="#1D3B54" />
<stop offset="1" stop-color="#215682" />
</linearGradient>
<linearGradient
id="paint1_linear_593_279"
x1="9.53"
y1="7.58"
x2="18.71"
y2="3.1"
gradientUnits="userSpaceOnUse"
>
<stop offset="0.02" stop-color="#1D3B54" />
<stop offset="1" stop-color="#215682" />
</linearGradient>
<clipPath id="clip0_593_279">
<rect width="18.25" height="13" fill="white" />
</clipPath>
</defs>
</svg><div class="lds-ripple"><div></div><div></div></div>`
],
responsive: {
0: {
items: 3,
},
600: {
items: 3,
},
1000: {
items: 3,
},
},
});
}
this.initSlotCarousel();
}
initialiseMobileBookingcarousel(){
const $container=jQuery("#" + this.clinicSlotsContainerId);
if(window.innerWidth <=991){
$container.owlCarousel({
items: 1,
nav: true,
dots: false,
margin: 16,
navText: [
`<svg width="19" height="13" viewBox="0 0 19 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_655_982)">
<path d="M17.75 6.5L0.5 6.5" stroke="url(#paint0_linear_655_982)" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.5 12.5L0.500001 6.5L6.5 0.500002" stroke="url(#paint1_linear_655_982)" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<linearGradient id="paint0_linear_655_982" x1="nan" y1="nan" x2="nan" y2="nan" gradientUnits="userSpaceOnUse">
<stop offset="0.02" stop-color="#1D3B54"/>
<stop offset="1" stop-color="#215682"/>
</linearGradient>
<linearGradient id="paint1_linear_655_982" x1="8.72" y1="5.42" x2="-0.46" y2="9.9" gradientUnits="userSpaceOnUse">
<stop offset="0.02" stop-color="#1D3B54"/>
<stop offset="1" stop-color="#215682"/>
</linearGradient>
<clipPath id="clip0_655_982">
<rect width="18.25" height="13" fill="white" transform="translate(18.25 13) rotate(-180)"/>
</clipPath>
</defs>
</svg>`,
`<svg width="19" height="13" viewBox="0 0 19 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_655_977)">
<path d="M0.5 6.5H17.75" stroke="url(#paint0_linear_655_977)" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11.75 0.5L17.75 6.5L11.75 12.5" stroke="url(#paint1_linear_655_977)" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<linearGradient id="paint0_linear_655_977" x1="nan" y1="nan" x2="nan" y2="nan" gradientUnits="userSpaceOnUse">
<stop offset="0.02" stop-color="#1D3B54"/>
<stop offset="1" stop-color="#215682"/>
</linearGradient>
<linearGradient id="paint1_linear_655_977" x1="9.53" y1="7.58" x2="18.71" y2="3.1" gradientUnits="userSpaceOnUse">
<stop offset="0.02" stop-color="#1D3B54"/>
<stop offset="1" stop-color="#215682"/>
</linearGradient>
<clipPath id="clip0_655_977">
<rect width="18.25" height="13" fill="white"/>
</clipPath>
</defs>
</svg>
`
],
});
}else{
if($container.hasClass("owl-carousel")){
$container.trigger("destroy.owl.carousel");
$container.removeClass("owl-carousel owl-theme");
}}
this.initSlotCarousel();
}
handleDayClick(dayElem){
const dayAttribute=dayElem.getAttribute("data-date");
this.selectedDay=dayAttribute;
const scope=(this.container&&typeof this.container.closest==="function")
? this.container.closest(".grid-booking-3box")
: null;
const allDays=scope ? scope.querySelectorAll('.day'):document.querySelectorAll('.day');
allDays.forEach(day=> day.classList.remove('active'));
dayElem.classList.add('active');
this.createClinicBoxes(dayAttribute);
if(this.mapCreated){
const reservationData=this.getReservationData(dayAttribute);
if(!reservationData||typeof reservationData!=="object"){
return;
}
let clinics={};
Object.keys(reservationData).forEach((key)=> {
clinics[key]=this.getClinicsData(key);
});
this.clearAllMarkers();
this.createClinicMarkers(clinics);
}}
initSlotCarousel(){
const nextButton=this.box1Container ? this.box1Container.querySelector('.owl-next'):document.querySelector('.grid-booking-box-1 .owl-next');
if(nextButton){
nextButton.addEventListener('click', ()=> {
if(nextButton.classList.contains('ready-to-load')){
nextButton.classList.remove('ready-to-load');
nextButton.classList.remove('disabled');
nextButton.classList.add('cta', 'cta-loading');
this.addColumnToSlotCarousel();
}
if(nextButton.classList.contains('disabled')){
nextButton.classList.add('ready-to-load');
}});
}}
addColumnToSlotCarousel(){
if(this.noMoreSlots){
const nextButton=this.box1Container ? this.box1Container.querySelector('.owl-next'):document.querySelector('.grid-booking-box-1 .owl-next');
if(nextButton){
nextButton.classList.remove('cta', 'cta-loading');
}
return;
}
const newDate=nextFifteenday(reservationArgs.DataInizio);
reservationArgs.DataInizio=newDate;
this.callReservationYes(reservationArgs, (response)=> {
if(response&&response.data&&response.data.FreeOperatorSlots){
const freeSlots=response.data.FreeOperatorSlots;
if(Object.keys(freeSlots).length===0){
this.noMoreSlots=true;
const nextButton=this.box1Container ? this.box1Container.querySelector('.owl-next'):document.querySelector('.grid-booking-box-1 .owl-next');
if(nextButton){
nextButton.classList.remove('cta', 'cta-loading');
nextButton.classList.add('disabled');
}
return;
}
Object.keys(freeSlots).forEach((date)=> {
const html=this.generateSlotHtml(date, freeSlots[date]);
this.slotCarousel.trigger('add.owl.carousel', [html]);
});
this.slotCarousel.trigger('refresh.owl.carousel');
}else{
this.noMoreSlots=true;
const nextButton=this.box1Container ? this.box1Container.querySelector('.owl-next'):document.querySelector('.grid-booking-box-1 .owl-next');
if(nextButton){
nextButton.classList.remove('cta', 'cta-loading');
nextButton.classList.add('disabled');
}}
});
const nextButton=this.box1Container ? this.box1Container.querySelector('.owl-next'):document.querySelector('.grid-booking-box-1 .owl-next');
setTimeout(()=> {
if(nextButton){
nextButton.classList.remove('cta', 'cta-loading');
}}, 3000);
}
createClinicBoxes(day){
const box3Container=this.box2Container||document.querySelector(".grid-booking-box-2");
const allSlots=this.getReservationData(day);
if(!box3Container) return;
box3Container.innerHTML="";
const dateObj=new Date(day);
const dayName=dateObj.toLocaleDateString("it-IT", { weekday: "long" });
const dayNum=dateObj.toLocaleDateString("it-IT", { day: "2-digit" });
const monthName=dateObj.toLocaleDateString("it-IT", { month: "long" });
const capitalize=s => s.charAt(0).toUpperCase() + s.slice(1);
const dayNameCap=capitalize(dayName);
const monthNameCap=capitalize(monthName);
const fullDate=`${dayNameCap} <span class="w-date c-blue">${dayNum} ${monthNameCap}</span>`;
const infoDateHtml=`
<div class="info-date">
<span class="green-point"></span>
${fullDate}
</div>`;
box3Container.insertAdjacentHTML("beforeend", infoDateHtml);
const container='<div class="owl-carousel owl-theme" id="' + this.clinicSlotsContainerId + '"></div>';
box3Container.insertAdjacentHTML("beforeend", container);
const rowContainer=box3Container.querySelector('#' + this.clinicSlotsContainerId);
if(allSlots&&typeof allSlots==='object'&&Object.keys(allSlots).length > 0){
Object.entries(allSlots).forEach(([clinicaId, slotList])=> {
let clinica=this.getClinicsData(clinicaId);
if(!clinica&&typeof clinicaId==='number') clinica=this.getClinicsData(String(clinicaId));
if(!clinica&&typeof clinicaId==='string'&&/^\d+$/.test(clinicaId)) clinica=this.getClinicsData(clinicaId.padStart(3, '0'));
if(!clinica) return;
const titolo=clinica.title;
const indirizzo=clinica.address;
const linkMaps=`https://www.google.com/maps/search/?api=1&query=maida&query_place_id=${clinica.gmaps_place_id}`;
let clinicInfoHtml=`
<div class="clinic-info item">
<h4>${titolo}</h4>
<div class="address"><span>${this.getAddressSvg()}</span>${indirizzo}</div>
<div class="maps-link-container">
<span>${this.getMapSvg()}</span>
<a class="maps-link" href="${linkMaps}" target="_blank">Mappa</a>
</div>
<button class="mobile-set-time">Scegli orario</button>
</div>
`;
let slotsHtml='<div class="clinic-slots">';
slotList.forEach(slot=> {
const orarioInizio=slot.DataInizioSlot;
slotsHtml +=`
<div class="slot-btn time" data-time="${orarioInizio}">
<strong>${orarioInizio}</strong>
</div>
`;
});
slotsHtml +='</div>';
const clinicRowHtml=`
<div class="clinic-row" data-clinica-indirizzo="${indirizzo}" data-clinica-nome="${titolo}" data-clinica-id="${clinicaId}">
${clinicInfoHtml}
${slotsHtml}
</div>
`;
rowContainer.insertAdjacentHTML("beforeend", clinicRowHtml);
});
this.initMobileSetTimeModal();
this.initialiseMobileBookingcarousel();
}else{
box3Container.insertAdjacentHTML("beforeend", "<p>Nessuno slot disponibile per questa data.</p>");
}
const slotBtns=box3Container.querySelectorAll('.slot-btn.time');
slotBtns.forEach(btn=> {
btn.addEventListener('click', (e)=> {
this.handleSlotClick(e.currentTarget);
});
});
}
selectFirstAvailableDay(){
const scope=this.container||document;
const days=(scope&&scope.querySelectorAll) ? scope.querySelectorAll('.day'):document.querySelectorAll('.day');
const alreadyActive=Array.from(days).some(day=> day.classList.contains('active'));
if(days.length > 0&&!alreadyActive){
setTimeout(()=> {
this.handleDayClick(days[0]);
}, 500);
}}
handleSlotClick(slotBtn){
const formSection4=document.querySelector(".booking-section.section-4");
const subtitleSection4=formSection4.querySelector(".subtitle");
subtitleSection4.classList.add("d-none");
const dayDate=this.selectedDay ? this.selectedDay:null;
const clinicRow=slotBtn.closest('.clinic-row');
this.selectedClinicName=clinicRow ? clinicRow.getAttribute('data-clinica-nome'):null;
this.selectedClinicAddress=clinicRow ? clinicRow.getAttribute('data-clinica-indirizzo'):null;
const clinicId=clinicRow ? clinicRow.getAttribute('data-clinica-id'):null;
const time=slotBtn.getAttribute('data-time');
const slotList=this.reservationData[dayDate]&&this.reservationData[dayDate][clinicId];
const selectedSlotObj=Array.isArray(slotList)
? slotList.find(slot=> slot.DataInizioSlot===time)
: null;
if(selectedSlotObj){
document.querySelectorAll('.slot-btn.time.active').forEach(btn=> btn.classList.remove('active'));
slotBtn.classList.add('active');
this.selectedSlot=selectedSlotObj;
if(this._allMarkers&&Array.isArray(this._allMarkers)){
this._allMarkers.forEach(marker=> {
if(marker&&marker.title){
let markerClinicId=null;
for (const [id, clinic] of Object.entries(this.clinicsData)){
if(clinic&&clinic.title&&marker.title===clinic.title){
markerClinicId=id;
break;
}}
if(markerClinicId===clinicId){
marker.setIcon({
url: "data:image/svg+xml;charset=UTF-8," + encodeURIComponent(this.getSvgActive()),
scaledSize: new google.maps.Size(28, 39),
anchor: new google.maps.Point(14, 39)
});
}else{
marker.setIcon({
url: "data:image/svg+xml;charset=UTF-8," + encodeURIComponent(this.getSvgStd()),
scaledSize: new google.maps.Size(28, 39),
anchor: new google.maps.Point(14, 39)
});
}}
});
}
const allExtra=clinicRow.parentNode.querySelectorAll('.slot-extra-info');
allExtra.forEach(div=> {
$(div).stop(true, true).slideUp(250, function (){
div.remove();
});
});
setTimeout(()=> {
this.createAndShowExtra(clinicRow, selectedSlotObj);
}, 260);
}else{
this.selectedSlot=null;
}}
createAndShowExtra(clinicRow, selectedSlotObj){
const extraDiv=document.createElement('div');
extraDiv.className='slot-extra-info';
extraDiv.style.display='none';
extraDiv.innerHTML=`  <div class="slot-data">${selectedSlotObj.DataInizioSlot} - ${clinicRow.getAttribute('data-clinica-nome')}</div>
<span class="confirm-slot-btn">
<span class="confirm-text">Conferma</span>
<svg
width="7"
height="13"
viewBox="0 0 7 13"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M0.5 0.5L6.5 6.5L0.5 12.5"
stroke="white"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</span>`;
clinicRow.parentNode.insertBefore(extraDiv, clinicRow.nextSibling);
$(extraDiv).slideDown(250);
extraDiv.querySelector('.confirm-slot-btn').addEventListener('click', ()=> {
this.showSummary(false);
this.handleConfirmSlotClick(selectedSlotObj, clinicRow);
});
}
handleConfirmSlotClick(slotObj, clinicRow){
if(this.selectedDay&&clinicRow.getAttribute('data-clinica-id')){
const clinicId=clinicRow ? clinicRow.getAttribute('data-clinica-id'):null;
if(typeof this.onSlotConfirmed==='function'){
this.onSlotConfirmed({
slot: slotObj,
clinicId: clinicId,
day: this.selectedDay
});
}}
}
showSummary(show){
const s4FormContainer=document.querySelector(".section-4__form-container");
const s4Summary=document.querySelector(".section-4__summary");
const summaryType=s4Summary.querySelector("#summary-esigenza");
const summaryClinics=s4Summary.querySelector("#summary-clinica");
const summaryDate=s4Summary.querySelector("#summary-data");
const summaryTime=s4Summary.querySelector("#summary-ora");
const summaryClinicAddress=s4Summary.querySelector("#summary-address");
const dateObj=new Date(this.selectedDay);
const formattedDate=`${dateObj.getDate().toString().padStart(2, '0')}/${(dateObj.getMonth() + 1).toString().padStart(2, '0')}/${dateObj.getFullYear()}`;
if(show){
summaryType.textContent=this.getClinicEsigenza()||"";
summaryClinics.textContent=this.selectedClinicName||"";
summaryDate.textContent=formattedDate||"";
summaryTime.textContent=this.selectedSlot ? "ore " + this.selectedSlot.DataInizioSlot:"";
summaryClinicAddress.textContent=this.selectedClinicAddress||"";
s4FormContainer.classList.add("col-lg-8");
s4Summary.classList.remove("d-none");
}else{
s4FormContainer.classList.remove("col-lg-8");
s4Summary.classList.add("d-none");
}}
initBookingMap(clinicsObj, mapDiv){
if(!window.google||!window.google.maps) return;
var keys=Object.keys(clinicsObj);
if(keys.length===0) return;
var searchCoords=this.getBookingAddressCoords();
let center;
if(searchCoords&&searchCoords.length > 0&&searchCoords[0]&&searchCoords[1]){
center={
lat: parseFloat(searchCoords[0].Latitudine),
lng: parseFloat(searchCoords[0].Longitudine),
};}else{
var firstClinic=clinicsObj[keys[0]];
center={
lat: parseFloat(firstClinic.position.lat),
lng: parseFloat(firstClinic.position.lng),
};}
var mapOptions={
mapTypeId: "bookingMapStyle",
disableDefaultUI: true,
zoom: 14,
clickableIcons: false,
draggable: false,
scrollwheel: false,
disableDoubleClickZoom: true,
gestureHandling: 'none',
center: center
};
this.map=new google.maps.Map(mapDiv, mapOptions);
this.map.mapTypes.set("bookingMapStyle",
new google.maps.StyledMapType(shortcodeMapStyle, {
name: "Booking Map Style",
})
);
this.mapCreated=true;
const clinicMarkers=this.createClinicMarkers(clinicsObj, "clinic");
let searchMarkers={};
if(searchCoords&&searchCoords.length > 0&&keys.length > 1){
const searchMarkersObj={};
searchCoords.forEach(function (coord, index){
if(coord&&coord.Latitudine&&coord.Longitudine){
searchMarkersObj["search_" + index]={
position: {
lat: parseFloat(coord.Latitudine),
lng: parseFloat(coord.Longitudine)
}};}});
searchMarkers=this.createClinicMarkers(searchMarkersObj, "search");
}
const allMarkers=[
...Object.values(clinicMarkers||{}),
...Object.values(searchMarkers||{})
];
if(allMarkers.length > 1){
const bounds=new google.maps.LatLngBounds();
allMarkers.forEach(marker=> {
bounds.extend(marker.getPosition());
});
this.map.fitBounds(bounds);
}else if(allMarkers.length===1){
this.map.panTo(allMarkers[0].getPosition());
this.map.setZoom(12);
}}
createClinicMarkers(clinicsObj, type="clinic"){
const markers={};
if(!this._allMarkers) this._allMarkers=[];
if(!this._allInfoWindows) this._allInfoWindows=[];
Object.keys(clinicsObj).forEach((key)=> {
const clinic=clinicsObj[key];
console.log(clinic);
if(clinic &&
clinic.position &&
clinic.position.lat &&
clinic.position.lng
){
const marker=new google.maps.Marker({
position: {
lat: parseFloat(clinic.position.lat),
lng: parseFloat(clinic.position.lng),
},
map: this.map,
icon: {
url:
type==="clinic"
? "data:image/svg+xml;charset=UTF-8," + encodeURIComponent(this.getSvgStd())
: "data:image/svg+xml;charset=UTF-8," + encodeURIComponent(this.getSearchLocationSvg()),
...(type==="search"
? { scaledSize: new google.maps.Size(27, 27), anchor: new google.maps.Point(13.5, 13.5) }
: {}),
},
title: clinic.title||"",
});
if(type==="clinic"){
const healthDirectorHtml=(clinic.health_director)
? `<br><span class="box-location-address dp-text-xs-important"><span class="icon-Emoji me-1 dp-text-m"></span>Dir. Sanitario ${clinic.health_director}</span>`
: "";
const infoContent=`<div style='font-size:15px; display: flex; flex-direction: column; gap: 5px;'><strong>${clinic.title||""}</strong><br>${clinic.address||""}${healthDirectorHtml}</div>`;
const infoWindow=new google.maps.InfoWindow({
content: infoContent
});
this._allInfoWindows.push(infoWindow);
marker.addListener('click', ()=> {
if(this._allInfoWindows&&Array.isArray(this._allInfoWindows)){
this._allInfoWindows.forEach(iw=> {
try { iw.close(); } catch (e){ }});
}
if(typeof infoWindow.open==='function'&&infoWindow.open.length===1){
infoWindow.open(marker.getMap(), marker);
}else{
infoWindow.open({
anchor: marker,
map: marker.getMap(),
shouldFocus: false,
disableAutoPan: true
});
}
if(window.innerWidth > 991){
const clinicaId=clinic.id||clinic.clinicaId||clinic.ClinicaId||clinic.Codice||clinic.cod||clinic.COD||key;
const row=document.querySelector(`.clinic-row[data-clinica-id="${clinicaId}"]`);
if(row){
row.scrollIntoView({ behavior: "smooth", block: "center" });
if(row._highlightTimeout){
clearTimeout(row._highlightTimeout);
row.classList.remove('highlighted');
}
void row.offsetWidth;
row.classList.add('highlighted');
row._highlightTimeout=setTimeout(()=> {
row.classList.remove('highlighted');
row._highlightTimeout=null;
}, 2000);
}}
});
}
markers[key]=marker;
if(type=="clinic"){
this._allMarkers.push(marker);
}}
});
return markers;
}
clearAllMarkers(){
if(this._allMarkers&&Array.isArray(this._allMarkers)){
this._allMarkers.forEach(marker=> {
if(marker&&typeof marker.setMap==='function'){
marker.setMap(null);
}});
}
this._allMarkers=[];
}
generateSlotHtml(date){
let html='<div class="item">';
html +='<div class="day" data-date="' + date + '">';
const day=this.formatDateItalianShort(date);
html +='<span class="w-day">' + day.dayName + ' <span class="w-date">' + day.dayDate + "</span>";
html +="</div>";
html +="</div>";
return html;
}
showLoader(overrideHost){
const host=overrideHost||this.box1Container;
if(!host) return;
const existingLoader=host.querySelector(".booking-loader");
if(existingLoader){
existingLoader.remove();
}
this._activeLoaderHost=host;
const loader=document.createElement("div");
loader.className="booking-loader";
const loaderSpinner=document.createElement("div");
loaderSpinner.className="loader";
loader.appendChild(loaderSpinner);
host.style.position="relative";
host.appendChild(loader);
if(!overrideHost&&this.box2Container) this.box2Container.style.display="none";
}
hideLoader(){
const host=this._activeLoaderHost||this.box1Container;
const loader=host&&host.querySelector ? host.querySelector(".booking-loader"):null;
if(loader){
loader.remove();
}
this._activeLoaderHost=null;
if(this.box2Container) this.box2Container.style.display="grid";
}
getBookingAddressCoords(){
var coords=[];
var addressInputs=document.querySelectorAll(".autocomplete.booking-address"
);
addressInputs.forEach(function (input){
var latField=input.parentNode.querySelector(".booking-lat");
var lngField=input.parentNode.querySelector(".booking-lng");
if(latField&&lngField&&latField.value&&lngField.value){
coords.push({
Latitudine: latField.value.toString(),
Longitudine: lngField.value.toString(),
});
}else{
coords.push(null);
}});
return coords;
}
getSvgStd(){
return [
'<svg xmlns="http://www.w3.org/2000/svg" width="28" height="39" viewBox="0 0 28 39" fill="none">',
'<path d="M13.9651 0.000414856C24.6085 -0.0793662 31.4922 11.3638 26.148 20.579C22.6761 26.566 18.711 32.2674 15.0071 38.122C14.3284 39.1946 13.8654 39.361 13.1236 38.1924C9.32142 32.2039 5.20435 26.3942 1.72551 20.2259C-3.38072 11.1737 3.48221 0.0797035 13.9651 0.000414856ZM13.8561 21.5103C18.1074 21.6058 21.6637 18.1994 21.7486 13.9508C21.8306 9.86076 18.4573 6.33119 14.3195 6.17803C10.0495 6.01945 6.4645 9.35795 6.34011 13.609C6.21573 17.8576 9.59931 21.4152 13.8561 21.5108V21.5103Z" fill="#565658"/>',
"</svg>",
].join("");
}
getSvgActive(){
return [
'<svg xmlns="http://www.w3.org/2000/svg" width="28" height="39" viewBox="0 0 28 39" fill="none">',
'<path d="M13.9651 0.000414856C24.6085 -0.0793662 31.4922 11.3638 26.148 20.579C22.6761 26.566 18.711 32.2674 15.0071 38.122C14.3284 39.1946 13.8654 39.361 13.1236 38.1924C9.32142 32.2039 5.20435 26.3942 1.72551 20.2259C-3.38072 11.1737 3.48221 0.0797035 13.9651 0.000414856ZM13.8561 21.5103C18.1074 21.6058 21.6637 18.1994 21.7486 13.9508C21.8306 9.86076 18.4573 6.33119 14.3195 6.17803C10.0495 6.01945 6.4645 9.35795 6.34011 13.609C6.21573 17.8576 9.59931 21.4152 13.8561 21.5108V21.5103Z" fill="#66C1BF"/>',
"</svg>",
].join("");
}
getSearchLocationSvg(){
return [
'<svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none">',
'<circle cx="13.5" cy="13.5" r="13.5" fill="#295782" fill-opacity="0.3"/>',
'<circle cx="13.5" cy="13.5" r="8.5" fill="#295782"/>',
"</svg>",
].join("");
}
getAddressSvg(){
return `<svg width="9" height="13" viewBox="0 0 9 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.4888 0.000138285C7.90988 -0.0264554 10.1225 3.78793 8.40472 6.85967C7.28874 8.85534 6.01427 10.7558 4.82372 12.7073C4.60557 13.0649 4.45675 13.1203 4.21829 12.7308C2.99617 10.7346 1.67283 8.79805 0.554627 6.74197C-1.08666 3.72457 1.11928 0.0265678 4.4888 0.000138285ZM4.45373 7.17009C5.82023 7.20194 6.96334 6.06645 6.99063 4.65026C7.01696 3.28692 5.93272 2.1104 4.60271 2.05934C3.23019 2.00648 2.07787 3.11932 2.03789 4.53633C1.99791 5.95253 3.08549 7.13841 4.45373 7.17026V7.17009Z" fill="#295782"/>
</svg>`;
}
getMapSvg(){
return `<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.164159 9.94177C0.265179 10.0081 0.39356 10.0175 0.504051 9.96913L3.57256 8.60511L6.64106 9.96913C6.64632 9.97124 6.65264 9.96913 6.6579 9.97229C6.74419 10.0112 6.8431 10.0091 6.92834 9.96598C6.9336 9.96387 6.94097 9.96598 6.94623 9.96177L9.80217 8.53354C9.8611 8.50407 9.91161 8.45882 9.94633 8.40198C9.98106 8.34515 10 8.28095 10 8.21464V0.357829C10 0.233635 9.93581 0.118914 9.83058 0.0536602C9.72535 -0.011594 9.59381 -0.0179089 9.48332 0.0378729L6.77786 1.39137L3.71567 0.031558C3.71567 0.031558 3.70515 0.029453 3.69988 0.027348C3.6862 0.0220856 3.67252 0.0178757 3.65779 0.0147182C3.64306 0.0105083 3.62938 0.00840329 3.61465 0.00629832C3.58518 0.00419334 3.55677 0.00419334 3.52731 0.00629832C3.51257 0.00840329 3.49784 0.0115607 3.48416 0.0147182C3.46943 0.0178757 3.45575 0.0220856 3.44207 0.027348C3.43681 0.029453 3.4305 0.029453 3.42629 0.031558L0.212564 1.45978C0.149426 1.4882 0.0957592 1.53346 0.0578765 1.59134C0.0199937 1.64923 0 1.71659 0 1.78605V9.64181C0 9.76285 0.0610334 9.87546 0.162054 9.94072L0.164159 9.94177ZM9.28338 7.99362L7.1409 9.06505V2.00707L9.28338 0.935644V7.99362ZM6.42744 9.09347L3.92823 7.98204V0.908279L6.42744 2.01865V9.09241V9.09347ZM0.715564 2.01865L3.21477 0.908279V7.98204L0.715564 9.09241V2.01865Z" fill="#295782"/>
</svg>`;
}
_slotListForClinicOnDay(daySlots, clinicId){
if(!daySlots||typeof daySlots!=="object") return [];
if(daySlots[clinicId]!==undefined) return daySlots[clinicId];
const s=String(clinicId);
if(daySlots[s]!==undefined) return daySlots[s];
if(/^\d+$/.test(s)&&daySlots[s.padStart(3, "0")]!==undefined){
return daySlots[s.padStart(3, "0")];
}
return [];
}
initMobileSetTimeModal(){
document.addEventListener('click', (e)=> {
const btn=e.target.closest('.mobile-set-time');
if(!btn) return;
const clinicRow=btn.closest('.clinic-row');
if(!clinicRow) return;
const rowGrid=clinicRow.closest('.grid-booking-3box');
const selfGrid =
this.container&&typeof this.container.closest==='function'
? this.container.closest('.grid-booking-3box')
: null;
if(!rowGrid||!selfGrid||rowGrid!==selfGrid) return;
const clinicId=clinicRow.getAttribute('data-clinica-id');
const scope=selfGrid;
const dayElem=scope.querySelector('.day.active');
const dayDate=dayElem ? dayElem.getAttribute('data-date'):null;
if(!clinicId||!dayDate) return;
const daySlots=this.getReservationData(dayDate);
const slotList=this._slotListForClinicOnDay(daySlots, clinicId);
let clinic=this.getClinicsData(clinicId);
if(!clinic&&typeof clinicId==='string'&&/^\d+$/.test(clinicId)){
clinic=this.getClinicsData(clinicId.padStart(3, '0'));
}
if(!clinic) return;
this.openMobileSlotModal(clinic, slotList, dayDate);
});
}
updateMobileSlotModalFooter(clinic, selectedSlot, summaryElem, confirmBtnElem){
if(selectedSlot){
document.querySelector('.modal-summary-time').innerHTML=selectedSlot.DataInizioSlot;
confirmBtnElem.disabled=false;
}else{
confirmBtnElem.disabled=true;
}}
openMobileSlotModal(clinic, slotList, dayDate){
let existing=document.getElementById('mobile-slot-modal');
if(existing) existing.remove();
let slotsHtml='';
slotList.forEach(slot=> {
slotsHtml +=`<div class="modal-slot-btn" data-time="${slot.DataInizioSlot}">${slot.DataInizioSlot}</div>`;
});
const day=this.formatDateItalianShort(dayDate);
const modalHtml=`
<div class="modal-header">
<button class="modal-back-btn"><svg width="19" height="13" viewBox="0 0 19 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_655_982)">
<path d="M17.75 6.5L0.5 6.5" stroke="url(#paint0_linear_655_982)" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.5 12.5L0.500001 6.5L6.5 0.500002" stroke="url(#paint1_linear_655_982)" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<linearGradient id="paint0_linear_655_982" x1="nan" y1="nan" x2="nan" y2="nan" gradientUnits="userSpaceOnUse">
<stop offset="0.02" stop-color="#1D3B54"/>
<stop offset="1" stop-color="#215682"/>
</linearGradient>
<linearGradient id="paint1_linear_655_982" x1="8.72" y1="5.42" x2="-0.46" y2="9.9" gradientUnits="userSpaceOnUse">
<stop offset="0.02" stop-color="#1D3B54"/>
<stop offset="1" stop-color="#215682"/>
</linearGradient>
<clipPath id="clip0_655_982">
<rect width="18.25" height="13" fill="white" transform="translate(18.25 13) rotate(-180)"/>
</clipPath>
</defs>
</svg>
Torna indietro</button>
</div>
<div class="modal-list-wrap">
${slotsHtml}
</div>
<div class="modal-footer">
<div class="modal-summary">${clinic.title}</div>
<div class="modal-summary">
<span>
${day.dayName}
</span>
<span>
${day.dayDate}
</span>
</div>
<div class="modal-summary modal-summary-time"></div>
<button class="modal-confirm-btn" disabled>Conferma</button>
</div>`;
const modal=document.createElement('div');
modal.id='mobile-slot-modal';
modal.className='mobile-slot-modal';
modal.innerHTML=modalHtml;
document.body.appendChild(modal);
const backBtn=modal.querySelector('.modal-back-btn');
backBtn.addEventListener('click', ()=> modal.remove());
const slotBtns=modal.querySelectorAll('.modal-slot-btn');
const summary=modal.querySelector('.modal-summary');
const confirmBtn=modal.querySelector('.modal-confirm-btn');
let selectedSlot=null;
slotBtns.forEach(btn=> {
btn.addEventListener('click', ()=> {
slotBtns.forEach(b=> b.classList.remove('selected'));
btn.classList.add('selected');
selectedSlot=slotList.find(slot=> slot.DataInizioSlot===btn.getAttribute('data-time'));
this.updateMobileSlotModalFooter(clinic, selectedSlot, summary, confirmBtn);
});
});
confirmBtn.addEventListener('click', ()=> {
if(selectedSlot){
const clinicRowLike={
getAttribute: function (attr){
if(attr==='data-clinica-id') return clinic.id||clinic.clinicaId||clinic.ClinicaId||clinic.Codice||clinic.cod||clinic.COD||null;
if(attr==='data-clinica-nome') return clinic.title||clinic.nome||clinic.Nome||null;
return null;
}};
this.selectedSlot=selectedSlot;
this.selectedClinicName=clinic.title||clinic.nome||clinic.Nome||"";
this.selectedClinicAddress=clinic.address||clinic.indirizzo||clinic.Indirizzo||"";
this.selectedDay=dayDate;
this.handleConfirmSlotClick(selectedSlot, clinicRowLike);
modal.remove();
}});
}
formatDateItalianShort(date){
const capitalize=s => s.charAt(0).toUpperCase() + s.slice(1);
const dayName=capitalize(new Date(date).toLocaleDateString("it-IT", {
weekday: "short",
}));
const dayDate=capitalize(new Date(date).toLocaleDateString("it-IT", {
day: "2-digit",
month: "short",
}));
return { dayName: dayName, dayDate: dayDate };}};
class BookingSelezioneCentri {
constructor(container, options={}){
this.container=typeof container==='string'
? document.querySelector(container)
: container;
if(!this.container){
console.error('Container non trovato per BookingSelezioneCentri');
return;
}
this.options={
minChars: options.minChars||3,
apiUrl: options.apiUrl||null,
placeholder: options.placeholder||'Cerca una clinica...',
onSelect: options.onSelect||null,
...options
};
this.input=null;
this.resultsContainer=null;
this.selectedClinic=null;
this.searchTimeout=null;
this.isLoading=false;
this.init();
}
init(){
this.createInput();
this.createResultsContainer();
this.attachEvents();
}
createInput(){
console.log("CreateInput");
this.input=document.createElement('input');
this.input.type='text';
this.input.className='booking-selezione-centri-input';
this.input.placeholder=this.options.placeholder;
this.input.setAttribute('autocomplete', 'off');
this.container.appendChild(this.input);
}
createResultsContainer(){
this.resultsContainer=document.createElement('div');
this.resultsContainer.className='booking-selezione-centri-results';
this.resultsContainer.style.display='none';
this.container.appendChild(this.resultsContainer);
}
attachEvents(){
this.input.addEventListener('input', (e)=> {
this.handleInput(e);
});
document.addEventListener('click', (e)=> {
if(!this.container.contains(e.target)){
this.hideResults();
}});
this.input.addEventListener('keydown', (e)=> {
this.handleKeydown(e);
});
}
handleInput(e){
const searchTerm=e.target.value.trim();
if(this.searchTimeout){
clearTimeout(this.searchTimeout);
}
if(searchTerm.length < this.options.minChars){
this.hideResults();
return;
}
this.searchTimeout=setTimeout(()=> {
this.searchClinics(searchTerm);
}, 300);
}
handleKeydown(e){
const results=this.resultsContainer.querySelectorAll('.booking-selezione-centri-result-item');
if(results.length===0) return;
const currentActive=this.resultsContainer.querySelector('.booking-selezione-centri-result-item.active');
let nextActive=null;
if(e.key==='ArrowDown'){
e.preventDefault();
if(currentActive){
nextActive=currentActive.nextElementSibling;
}else{
nextActive=results[0];
}}else if(e.key==='ArrowUp'){
e.preventDefault();
if(currentActive){
nextActive=currentActive.previousElementSibling;
}else{
nextActive=results[results.length - 1];
}}else if(e.key==='Enter'&&currentActive){
e.preventDefault();
currentActive.click();
return;
}else if(e.key==='Escape'){
this.hideResults();
return;
}
if(nextActive){
results.forEach(item=> item.classList.remove('active'));
nextActive.classList.add('active');
nextActive.scrollIntoView({ block: 'nearest' });
}}
searchClinics(searchTerm){
if(this.isLoading) return;
this.isLoading=true;
this.showLoading();
this.fetchBookingClinics(searchTerm, (results)=> {
const mappedResults=Array.isArray(results)
? results.map(clinic=> ({
id_clinica: clinic.ID,
nome_clinica: clinic.title,
indirizzo_clinica: clinic.address||'',
cod: clinic.cod||''
}))
: [];
this.displayResults(mappedResults);
this.isLoading=false;
});
}
fetchBookingClinics(searchTerm, callback){
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: {
action: "dp_booking_search_clinics",
data: JSON.stringify({ search: searchTerm }),
},
success: function (response){
if(response.success&&Array.isArray(response.data)){
if(typeof callback==="function"){
callback(response.data);
}}else{
if(typeof callback==="function"){
callback([]);
}}
},
error: function (xhr, status, error){
console.error(error);
if(typeof callback==="function"){
callback([]);
}},
});
}
showLoading(){
this.resultsContainer.innerHTML='<div class="booking-selezione-centri-loading">Caricamento...</div>';
this.resultsContainer.style.display='block';
}
displayResults(results){
if(results.length===0){
this.resultsContainer.innerHTML='<div class="booking-selezione-centri-no-results">Nessun risultato trovato</div>';
this.resultsContainer.style.display='block';
return;
}
this.resultsContainer.innerHTML='';
results.forEach((clinic)=> {
const resultItem=document.createElement('div');
resultItem.className='booking-selezione-centri-result-item';
resultItem.setAttribute('data-clinic-id', clinic.id_clinica);
resultItem.innerHTML=`
<div class="booking-selezione-centri-result-name">${this.highlightText(clinic.nome_clinica, this.input.value)}</div>
<div class="booking-selezione-centri-result-address">${this.highlightText(clinic.indirizzo_clinica, this.input.value)}</div>
`;
resultItem.addEventListener('click', ()=> {
this.selectClinic(clinic);
});
resultItem.addEventListener('mouseenter', ()=> {
this.resultsContainer.querySelectorAll('.booking-selezione-centri-result-item').forEach(item=> {
item.classList.remove('active');
});
resultItem.classList.add('active');
});
this.resultsContainer.appendChild(resultItem);
});
this.resultsContainer.style.display='block';
}
highlightText(text, searchTerm){
if(!searchTerm) return text;
const regex=new RegExp(`(${this.escapeRegex(searchTerm)})`, 'gi');
return text.replace(regex, '<mark>$1</mark>');
}
escapeRegex(string){
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
hideResults(){
this.resultsContainer.style.display='none';
}
selectClinic(clinic){
this.selectedClinic=clinic;
this.input.value=clinic.nome_clinica;
this.hideResults();
if(this.options.onSelect&&typeof this.options.onSelect==='function'){
this.options.onSelect(clinic);
}
const event=new CustomEvent('clinicSelected', {
detail: { clinic: clinic }});
this.container.dispatchEvent(event);
}
getSelectedClinic(){
return this.selectedClinic;
}
reset(){
this.input.value='';
this.selectedClinic=null;
this.hideResults();
}
destroy(){
if(this.searchTimeout){
clearTimeout(this.searchTimeout);
}
if(this.input){
this.input.remove();
}
if(this.resultsContainer){
this.resultsContainer.remove();
}}
}
if(typeof window!=='undefined'){
window.BookingSelezioneCentri=BookingSelezioneCentri;
};
const shortcodeMapStyle=[
{
elementType: "geometry",
stylers: [
{
color: "#f5f5f5",
},
],
},
{
elementType: "labels.icon",
stylers: [
{
visibility: "off",
},
],
},
{
elementType: "labels.text.fill",
stylers: [
{
color: "#616161",
},
],
},
{
elementType: "labels.text.stroke",
stylers: [
{
color: "#f5f5f5",
},
],
},
{
featureType: "administrative.land_parcel",
elementType: "labels.text.fill",
stylers: [
{
color: "#bdbdbd",
},
],
},
{
featureType: "landscape.man_made",
elementType: "geometry.fill",
stylers: [
{
color: "#f8f8fa",
},
],
},
{
featureType: "landscape.natural",
elementType: "geometry.fill",
stylers: [
{
color: "#f8f8fa",
},
],
},
{
featureType: "poi",
elementType: "geometry",
stylers: [
{
color: "#eeedf2",
},
],
},
{
featureType: "poi",
elementType: "geometry.fill",
stylers: [
{
color: "#eeedf2",
},
],
},
{
featureType: "poi",
elementType: "labels.text.fill",
stylers: [
{
color: "#757575",
},
],
},
{
featureType: "poi.park",
elementType: "geometry",
stylers: [
{
color: "#e5e5e5",
},
],
},
{
featureType: "poi.park",
elementType: "geometry.fill",
stylers: [
{
color: "#eeedf2",
},
],
},
{
featureType: "poi.park",
elementType: "labels.text.fill",
stylers: [
{
color: "#9e9e9e",
},
],
},
{
featureType: "road",
elementType: "geometry",
stylers: [
{
color: "#ffffff",
},
],
},
{
featureType: "road.arterial",
elementType: "geometry.fill",
stylers: [
{
color: "#dad8e3",
},
],
},
{
featureType: "road.arterial",
elementType: "labels.text.fill",
stylers: [
{
color: "#757575",
},
],
},
{
featureType: "road.highway",
elementType: "geometry",
stylers: [
{
color: "#dad8e3",
},
],
},
{
featureType: "road.highway",
elementType: "geometry.fill",
stylers: [
{
color: "#dad8e3",
},
],
},
{
featureType: "road.highway",
elementType: "labels.text.fill",
stylers: [
{
color: "#616161",
},
],
},
{
featureType: "road.local",
elementType: "geometry.fill",
stylers: [
{
color: "#dad8e3",
},
],
},
{
featureType: "road.local",
elementType: "labels.text.fill",
stylers: [
{
color: "#9e9e9e",
},
],
},
{
featureType: "transit.line",
elementType: "geometry",
stylers: [
{
color: "#e5e5e5",
},
],
},
{
featureType: "transit.station",
elementType: "geometry",
stylers: [
{
color: "#eeedf2",
},
],
},
{
featureType: "water",
elementType: "geometry",
stylers: [
{
color: "#c9c9c9",
},
],
},
{
featureType: "water",
elementType: "labels.text.fill",
stylers: [
{
color: "#9e9e9e",
},
],
},
];
var bookForOther;
var slotCarousel;
var reservationArgs;
var currentClinics;
var directBooking;
var prestazioneId;
var selectedCardDirectBooking;
var mapDiv;
var retryCount=0;
var bookingSlotsData={};
var bookingClinicsData={};
var bookingSelectedSlot=null;
function nextFifteenday(date){
const currentDate=new Date(date);
currentDate.setDate(currentDate.getDate() + 16);
const yyyy=currentDate.getFullYear();
const mm=String(currentDate.getMonth() + 1).padStart(2,
"0"
);
const dd=String(currentDate.getDate()).padStart(2, "0");
const hh=String(currentDate.getHours()).padStart(2, "0");
const min=String(currentDate.getMinutes()).padStart(2,
"0"
);
const ss=String(currentDate.getSeconds()).padStart(2,
"0"
);
return `${yyyy}-${mm}-${dd}T${hh}:${min}:${ss}Z`;
}
function addColumnToSlotCarousel(){
const newDate=nextFifteenday(reservationArgs.DataInizio);
reservationArgs.DataInizio=newDate;
callReservationYes(reservationArgs, function (response){
if(response&&response.data&&response.data.FreeOperatorSlots){
const freeSlots=response.data.FreeOperatorSlots;
Object.keys(freeSlots).forEach(function (date){
const html=generateSlotHtml(date, freeSlots[date]);
slotCarousel.trigger('add.owl.carousel', [html]);
});
slotCarousel.trigger('refresh.owl.carousel');
}});
const nextButton=document.querySelector('.grid-booking-box-1 .owl-next');
setTimeout(()=> {
nextButton.classList.remove('cta', 'cta-loading');
}, 3000);
}
function generateSlotHtml(date, dayData){
let html='<div class="item" data-date="' + date + '">';
html +='<div class="day" data-date="' + date + '">';
const dayName=new Date(date).toLocaleDateString("it-IT", {
weekday: "short",
});
const dayDate=new Date(date).toLocaleDateString("it-IT", {
day: "2-digit",
month: "short",
});
html +='<span class="w-day">' + dayName + " " + dayDate + "</span>";
html +="</div>";
html +="</div>";
return html;
}
function initSlotCarousel(){
const nextButton=document.querySelector('.grid-booking-box-1 .owl-next');
if(nextButton){
nextButton.addEventListener('click', function (){
if(this.classList.contains('ready-to-load')){
this.classList.remove('ready-to-load');
this.classList.remove('disabled');
this.classList.add('cta', 'cta-loading');
addColumnToSlotCarousel();
}});
nextButton.addEventListener('click', function (){
if(this.classList.contains('disabled')){
this.classList.add('ready-to-load');
}});
}}
function callReservationYes(dataArgs, callback){
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: {
action: "dp_booking_slots",
data: JSON.stringify(dataArgs),
},
success: function (response){
bookingSlotsData={ ...bookingSlotsData, ...response.data.FreeOperatorSlots };
console.log("----------------");
console.log(bookingSlotsData);
console.log("----------------");
bookingClinicsData=response.data.Cliniche;
if(typeof callback==="function"){
callback(response);
}},
error: function (xhr, status, error){
console.error(error);
},
});
}
if(typeof window.normalizeDirectBookingApiError!=="function"){
window.DIRECT_BOOKING_APP_CONFLICT_USER_MESSAGE =
"Non è possibile completare la prenotazione online. Per finalizzare la tua richiesta, contatta il tuo Centro oppure chiama il numero verde <a href='tel:+39800326326'>800 326 326</a>";
window.normalizeDirectBookingApiError=function (data, fallback){
if(!data||typeof data!=="object") return fallback;
var msg=data.message!=null ? String(data.message):"";
var detail=data.errorDetail!=null ? String(data.errorDetail):"";
if(detail==="APP_ALREADY_EXISTS"||msg==="V2_APPOINTMENT_CREATION_ERROR"){
return window.DIRECT_BOOKING_APP_CONFLICT_USER_MESSAGE;
}
if(msg) return msg;
return fallback;
};
window.resolveDirectBookingAjaxErrorMessage=function (xhr, fallback){
if(xhr&&xhr.responseJSON&&xhr.responseJSON.data){
return window.normalizeDirectBookingApiError(xhr.responseJSON.data, fallback);
}
return fallback;
};}
function sendPostRequestBooking(data){
data.prestazioneId=prestazioneId;
const dataArgs=data;
document.body.classList.add("overlay-loading-show");
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: {
action: "dp_booking_slots_request",
data: JSON.stringify(dataArgs),
},
success: function (response){
if(response&&typeof response==='object'){
if(response.success===true){
data.bookData=response;
data.thankyou=response.data.thankYouData;
if(data.areaPazienti===true){
bookingSubmitAreaPazienti(data);
}else{
bookingSubmitFrontend(data);
}
var tyRootAp=document.getElementById("prenota-thankyou");
var bookingSummaryAp=tyRootAp ? tyRootAp.querySelector(".booking-summary"):document.querySelector(".booking-summary");
if(bookingSummaryAp){
bookingFillInlineThankyouSummary(data);
}}
}},
error: function (xhr, status, error){
document.body.classList.remove("overlay-loading-show");
if(xhr.responseJSON&&xhr.responseJSON.data){
if(xhr.responseJSON.data.requireCF){
handleRequireCF();
return false;
}
var errData=xhr.responseJSON.data;
var fb =
errData&&errData.message!=null&&String(errData.message).trim()!==""
? String(errData.message)
: "Si è verificato un errore.";
showErrorMessage(window.normalizeDirectBookingApiError(errData, fb));
bookingScroll();
return false;
}else{
var formSection4=document.querySelector(".booking-section.section-4");
var errorDiv=formSection4.querySelector(".error-message")||document.createElement("div");
errorDiv.className="error-message";
errorDiv.style.color="red";
errorDiv.innerHTML="Errore di connessione. Verifica la tua connessione e riprova.";
if(!formSection4.querySelector(".error-message")){
formSection4.querySelector("form").prepend(errorDiv);
}
return false;
}},
});
}
function handleRequireCF(){
let cfModal=document.querySelector('#cf-modal');
if(!cfModal){
cfModal=document.createElement('div');
cfModal.id='cf-modal';
cfModal.innerHTML=`
<div class="cf-modal-box">
<button type="button" id="cf-modal-close" class="cf-modal-close" aria-label="Chiudi">&times;</button>
<h3 class="cf-modal-title">Abbiamo bisogno del tuo Codice Fiscale per identificarti meglio</h3>
<label for="cf-modal-input">Inserisci il tuo codice fiscale</label>
<span class="input">
<input type="text" id="cf-modal-input">
</span>
<div id="cf-modal-error"></div>
<a href="#" id="booking-cf" class="cta transparent">Conferma</a>
</div>
`;
document.body.appendChild(cfModal);
document.body.style.overflow='hidden';
cfModal.querySelector('#cf-modal-close').onclick=function (){
cfModal.style.display='none';
document.body.style.overflow='';
};
cfModal.querySelector('#booking-cf').onclick=function (e){
e.preventDefault();
var cfValue=cfModal.querySelector('#cf-modal-input').value.trim().toUpperCase();
var regCf=/^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$/i;
var errorDiv=cfModal.querySelector('#cf-modal-error');
if(!regCf.test(cfValue)){
errorDiv.textContent='Codice Fiscale non valido.';
errorDiv.style.display='block';
return;
}
errorDiv.style.display='none';
var cfField=document.querySelector('#booking-cf');
if(cfField){
cfField.value=cfValue;
cfField.parentNode.style.display='';
}
cfModal.style.display='none';
document.body.style.overflow='';
};}else{
cfModal.style.display='flex';
document.body.style.overflow='hidden';
}}
function bookingScroll(){
activeSections=document.querySelectorAll(".booking-section.active");
maxTop=0;
for (let i=0; i < activeSections.length; i++){
if(maxTop < activeSections[i].offsetTop){
maxTop=activeSections[i].offsetTop;
}}
scroll({
top: maxTop - 190,
behavior: "smooth",
});
}
function createClinicBoxes(selectedSlots, dateHour, dateDay){
const box3Container=document.querySelector(".grid-booking-box-3");
var hourOnly=dateHour.split(":")[0];
if(!box3Container) return;
const clinicsData=bookingClinicsData;
const slotsData=bookingSlotsData;
if(!clinicsData||!slotsData){
console.error("Missing clinic or slots data");
return;
}
box3Container.innerHTML="";
if(selectedSlots.length > 0){
const date=new Date(dateDay);
let weekDay=date.toLocaleDateString("it-IT", { weekday: "long" });
weekDay=weekDay.charAt(0).toUpperCase() + weekDay.slice(1);
const dayNumber=date.toLocaleDateString("it-IT", { day: "numeric" });
const month=date.toLocaleDateString("it-IT", { month: "long" });
let timeRange="";
const hour=parseInt(dateHour);
const startHour=hour.toString().padStart(2, "0");
const endHour=(hour + 1).toString().padStart(2, "0");
timeRange=`${startHour}:00 - ${endHour}:00`;
const headerHtml=`
<div class="time-header">
<h3>
${weekDay}
<span class="date">${dayNumber} ${month}</span>
ore ${timeRange}
</h3>
</div>
`;
box3Container.insertAdjacentHTML("beforeend", headerHtml);
}
const slotsByClinic={};
selectedSlots.forEach((slot)=> {
const clinicId=slot.clinicaId;
if(!slotsByClinic[clinicId]){
slotsByClinic[clinicId]=[];
}
slotsByClinic[clinicId].push(slot);
});
Object.keys(slotsByClinic).forEach((clinicId)=> {
const clinicSlots=slotsByClinic[clinicId];
const clinicInfo=clinicsData[clinicId];
if(!clinicInfo){
console.error(`No clinic info found for clinic ID: ${clinicId}`);
return;
}
const boxHtml=`
<div class="clinic-box" data-clinic-id="${clinicId}">
<div class="clinic-header">
<svg xmlns="http://www.w3.org/2000/svg" width="19" height="26" viewBox="0 0 19 26" fill="none">
<path d="M9.47616 0.000276569C16.6983 -0.0529106 21.3692 7.57584 17.7429 13.7193C15.387 17.7106 12.6965 21.5115 10.1832 25.4146C9.72267 26.1296 9.4085 26.2406 8.9051 25.4615C6.32512 21.4692 3.53145 17.596 1.17086 13.4839C-2.29401 7.44911 2.36288 0.0531354 9.47616 0.000276569ZM9.40214 14.3401C12.2869 14.4038 14.7001 12.1329 14.7577 9.30048C14.8133 6.57382 12.5244 4.22078 9.71664 4.11867C6.81914 4.01296 4.38653 6.23861 4.30213 9.07263C4.21773 11.905 6.51369 14.2768 9.40214 14.3405V14.3401Z" fill="#66C1BF"/>
</svg>
<div class="clinic-info">
<h4>${clinicInfo.title}</h4>
<p class="clinic-address">${clinicInfo.address}</p>
</div>
<a href="https://www.google.com/maps/search/?api=1&query=maida&query_place_id=${clinicInfo.gmaps_place_id}" target="_blank" class="go-maps">
<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 17 17" fill="none">
<path d="M0.27907 16.901C0.450805 17.0137 0.669052 17.0298 0.856887 16.9475L6.07335 14.6287L11.2898 16.9475C11.2987 16.9511 11.3095 16.9475 11.3184 16.9529C11.4651 17.0191 11.6333 17.0155 11.7782 16.9422C11.7871 16.9386 11.7996 16.9422 11.8086 16.935L16.6637 14.507C16.7639 14.4569 16.8497 14.38 16.9088 14.2834C16.9678 14.1868 17 14.0776 17 13.9649V0.608309C17 0.39718 16.8909 0.202154 16.712 0.0912223C16.5331 -0.0197097 16.3095 -0.0304451 16.1216 0.0643839L11.5224 2.36533L6.31664 0.0536486C6.31664 0.0536486 6.29875 0.0500701 6.2898 0.0464917C6.26655 0.0375455 6.24329 0.0303886 6.21825 0.0250209C6.1932 0.017864 6.16995 0.0142856 6.1449 0.0107071C6.09481 0.00712868 6.04651 0.00712868 5.99642 0.0107071C5.97138 0.0142856 5.94633 0.0196533 5.92308 0.0250209C5.89803 0.0303886 5.87478 0.0375455 5.85152 0.0464917C5.84258 0.0500701 5.83184 0.0500701 5.82469 0.0536486L0.36136 2.48163C0.254025 2.52994 0.162791 2.60688 0.09839 2.70528C0.0339893 2.80369 0 2.9182 0 3.03629V16.3911C0 16.5968 0.103757 16.7883 0.275492 16.8992L0.27907 16.901ZM15.7818 13.5891L12.1395 15.4106V3.41203L15.7818 1.59059V13.5891ZM10.9267 15.4589L6.678 13.5695V1.54407L10.9267 3.43171V15.4571V15.4589ZM1.21646 3.43171L5.46512 1.54407V13.5695L1.21646 15.4571V3.43171Z" fill="#295782"/>
</svg>
</a>
</div>
<div class="clinic-slots">
${clinicSlots
.map((slot)=> {
const bookingStateData=slotsData[dateDay][hourOnly][clinicId];
let currentBookingState=null;
bookingStateData.forEach((el)=> {
if(el.DataInizioSlot===slot.orarioInizio){
currentBookingState=el;
}});
return `
<div class="single-slot">
<div class="slot-btn time"
data-clinic-id="${clinicId}"
time-start="${slot.orarioInizio}"
${new Date(slot.orarioInizio).toLocaleTimeString("it-IT", {
hour: "2-digit",
minute: "2-digit",
})}>${slot.orarioInizio}
</div>
<button class="prenota-btn"
data-clinic-id="${clinicId}"
data-slot='${JSON.stringify(currentBookingState
)}'>Prenota visita
</button>
</div>
`;
})
.join("")}
</div>
</div>
`;
box3Container.insertAdjacentHTML("beforeend", boxHtml);
});
box3Container.querySelectorAll(".slot-btn").forEach((btn)=> {
btn.addEventListener("click", function (){
box3Container
.querySelectorAll(".slot-btn")
.forEach((b)=> b.classList.remove("active"));
this.classList.add("active");
});
});
box3Container.querySelectorAll(".prenota-btn").forEach((btn)=> {
btn.addEventListener("click", function (){
const formSection4=document.querySelector(".booking-section.section-4");
const formSection5=document.querySelector(".booking-section.section-5");
const errorDiv=formSection4.querySelector(".error");
if(errorDiv){
errorDiv.classList.remove("active");
const errorMessage=errorDiv.querySelector("p");
if(errorMessage){
errorMessage.innerHTML="";
}}
bookingSelectedSlot=this.getAttribute("data-slot");
formSection5.classList.remove("active");
formSection5.classList.add("done");
showSummary(true);
formSection4.classList.add("active");
const clinicId=this.getAttribute("data-clinic-id");
const clinicInfo=clinicsData[clinicId];
if(clinicInfo){
formSection5.querySelector(".details p").textContent=clinicInfo.title;
}
bookingScroll();
});
});
}
function showLoader(){
const box1Container=document.querySelector(".grid-booking-box-1");
const box2Container=document.querySelector(".grid-booking-box-2");
const existingLoader=document.querySelector(".booking-loader");
if(existingLoader){
existingLoader.remove();
}
const loader=document.createElement("div");
loader.className="booking-loader";
const loaderSpinner=document.createElement("div");
loaderSpinner.className="loader";
loader.appendChild(loaderSpinner);
box1Container.style.position="relative";
box1Container.appendChild(loader);
box2Container.style.display="none";
}
function hideLoader(){
const loader=document.querySelector(".booking-loader");
if(loader){
loader.remove();
const box2Container=document.querySelector(".grid-booking-box-2");
box2Container.style.display="grid";
}}
function initializeCarouselBooking(){
const $container=jQuery("#booking-owl-reservation");
$container.on("click", ".time", function (){
const $time=jQuery(this);
const slots=JSON.parse($time.attr("data-slots"));
const dateHour=$time.attr("data-hour");
const dateDay=$time.attr("data-date");
$container.find(".time").removeClass("active");
$time.addClass("active");
createClinicBoxes(slots, dateHour, dateDay);
});
if($container.hasClass("owl-carousel")){
$container.trigger("destroy.owl.carousel");
slotCarousel=$container.owlCarousel({
loop: false,
margin: 24,
nav: true,
dots: false,
navContainer: "#custom_slider_nav",
navText: [
`<svg class="custom-nav" xmlns="http://www.w3.org/2000/svg" width="34" height="34" viewBox="0 0 34 34" fill="none">
<circle cx="17" cy="17" r="17" fill="#295782" fill-opacity="0.1"/>
<path d="M12.0011 17.029C12.0091 17.1588 12.0695 17.283 12.1697 17.3778L17.8957 22.8191C18.1343 23.0451 18.5367 23.059 18.7959 22.8497C19.0536 22.6405 19.0695 22.2875 18.8309 22.0601L13.5026 16.9983L18.8293 11.9366C19.0695 11.7106 19.0536 11.3576 18.7959 11.1483C18.5383 10.939 18.1358 10.953 17.8957 11.179L12.1697 16.6202C12.052 16.7305 11.9916 16.8783 12.0011 17.0304L12.0011 17.029Z" fill="#295782"/>
</svg>`,
`<svg xmlns="http://www.w3.org/2000/svg" width="34" height="34" viewBox="0 0 34 34" fill="none">
<circle cx="17" cy="17" r="17" transform="rotate(-180 17 17)" fill="#295782" fill-opacity="0.1"/>
<path d="M21.9989 16.971C21.9909 16.8412 21.9305 16.717 21.8303 16.6222L16.1043 11.1809C15.8657 10.9549 15.4633 10.941 15.2041 11.1503C14.9464 11.3595 14.9305 11.7125 15.1691 11.9399L20.4974 17.0017L15.1707 22.0634C14.9305 22.2894 14.9464 22.6424 15.2041 22.8517C15.4617 23.061 15.8642 23.047 16.1043 22.821L21.8303 17.3798C21.948 17.2695 22.0084 17.1217 21.9989 16.9696L21.9989 16.971Z" fill="#295782"/>
</svg><div class="lds-ripple"><div></div><div></div></div>`,
],
responsive: {
0: {
items: 3,
},
600: {
items: 5,
},
1000: {
items: 7,
},
},
});
}
initSlotCarousel();
}
function showErrorMessage(message){
const formSection4=document.querySelector(".booking-section.section-4");
const formSection5=document.querySelector(".booking-section.section-5");
if(formSection5){
formSection5.classList.remove("active");
}
if(formSection4){
formSection4.classList.add("active");
formSection4.style.setProperty("display", "flex", "important");
const errorDiv=formSection4.querySelector(".error");
if(errorDiv){
const errorMessage=errorDiv.querySelector("p");
if(errorMessage) errorMessage.innerHTML=message;
errorDiv.classList.add("active");
}
document.querySelector(".grid-booking-box-3").innerHTML="";
showLoader();
callReservationYes(reservationArgs, function (response){
if(response&&response.data&&response.data.FreeOperatorSlots){
const owlContainer=document.querySelector("#booking-owl-reservation");
if(owlContainer){
jQuery(owlContainer).trigger('destroy.owl.carousel');
owlContainer.innerHTML='';
Object.keys(response.data.FreeOperatorSlots).forEach(function (date){
const html=generateSlotHtml(date, response.data.FreeOperatorSlots[date]);
owlContainer.insertAdjacentHTML('beforeend', html);
});
initializeCarouselBooking();
document.querySelector(".grid-booking-box-2").style.display="block";
document.querySelector(".grid-booking-box-3").style.display="flex";
}}
hideLoader();
});
}
bookingScroll();
}
function getBookingAddressCoords(){
var coords=[];
var addressInputs=document.querySelectorAll(".autocomplete.booking-address"
);
addressInputs.forEach(function (input){
var latField=input.parentNode.querySelector(".booking-lat");
var lngField=input.parentNode.querySelector(".booking-lng");
if(latField&&lngField&&latField.value&&lngField.value){
coords.push({
Latitudine: latField.value.toString(),
Longitudine: lngField.value.toString(),
});
}else{
coords.push(null);
}});
return coords;
}
function initBookingAddressAutocomplete(){
console.log("initBookingAddressAutocomplete");
var addressInputs=document.querySelectorAll(".autocomplete.booking-address"
);
console.log("addressInputs", addressInputs);
addressInputs.forEach(function (input){
var latField=input.parentNode.querySelector(".booking-lat");
var lngField=input.parentNode.querySelector(".booking-lng");
if(!latField){
latField=document.createElement("input");
latField.type="hidden";
latField.className="booking-lat";
input.parentNode.insertBefore(latField, input.nextSibling);
}
if(!lngField){
lngField=document.createElement("input");
lngField.type="hidden";
lngField.className="booking-lng";
input.parentNode.insertBefore(lngField, latField.nextSibling);
}
setTimeout(function (){
if(!input._autocomplete &&
window.google &&
window.google.maps &&
window.google.maps.places
){
var options={
componentRestrictions: { country: "it" },
};
input._autocomplete=new window.google.maps.places.Autocomplete(input,
options
);
input._autocomplete.addListener("place_changed", function (){
var place=input._autocomplete.getPlace();
if(place.geometry&&place.geometry.location){
latField.value=place.geometry.location.lat();
lngField.value=place.geometry.location.lng();
}else{
latField.value="";
lngField.value="";
}});
}}, 500);
});
}
function handleCardEsigenzaClick(card, card_esigenza){
selectedCardDirectBooking=card.getAttribute("data-direct-booking");
var formSection5=document.querySelector(".booking-section.section-5");
var datepickerContainer=document.querySelector(".booking-date-container");
var s2_ry=document.querySelector(".section-2 .reservation_yes");
var s2_rn=document.querySelector(".section-2 .reservation_no");
card_esigenza.forEach(function (c){
c.classList.remove("selected");
});
card.classList.add("selected");
if(selectedCardDirectBooking==="1"){
showBookingFields(true);
if(!window.location.href.includes('area-pazienti')){
bookingCustomerNo();
}
var timesRows=document.querySelectorAll(".times .row");
if(timesRows.length){
timesRows.forEach(function (row, idx){
if(idx <=3){
row.style.display="flex";
var cols=row.querySelectorAll(".col-4");
cols.forEach(function (col){
col.remove();
});
}else{
row.style.display="none";
}});
}else{
timesRows.forEach(function (row){
row.style.display="flex";
});
}
directBooking=true;
formSection5.style.setProperty("display", "flex", "important");
if(datepickerContainer&&datepickerContainer.classList.contains("disabled")){
{
datepickerContainer.classList.remove("disabled");
}}
if(s2_ry&&s2_ry.classList.contains("disabled")){
{
s2_ry.classList.remove("disabled");
}}
if(s2_rn&&!s2_rn.classList.contains("disabled")){
{
s2_rn.classList.add("disabled");
}}
}else{
directBooking=false;
showBookingFields(false);
formSection5.style.setProperty("display", "none", "important");
if(datepickerContainer&&!datepickerContainer.classList.contains("disabled")){
{
datepickerContainer.classList.add("disabled");
}}
if(s2_ry&&!s2_ry.classList.contains("disabled")){
{
s2_ry.classList.add("disabled");
}}
if(s2_rn&&s2_rn.classList.contains("disabled")){
{
s2_rn.classList.remove("disabled");
}}
}}
function initBookingMap(clinicsObj, mapDiv){
if(!window.google||!window.google.maps) return;
var keys=Object.keys(clinicsObj);
if(keys.length===0) return;
var searchCoords=getBookingAddressCoords();
if(searchCoords&&searchCoords.length > 0&&searchCoords[0]&&searchCoords[1]){
center={
lat: parseFloat(searchCoords[0].Latitudine),
lng: parseFloat(searchCoords[0].Longitudine),
};}else{
var firstClinic=clinicsObj[keys[0]];
searchCoords=[{
Latitudine: parseFloat(firstClinic.position.lat),
Longitudine: parseFloat(firstClinic.position.lng),
}];
}
var mapOptions={
mapTypeId: "bookingMapStyle",
disableDefaultUI: true,
zoom: 14,
clickableIcons: false,
draggable: false,
scrollwheel: false,
disableDoubleClickZoom: true,
gestureHandling: 'none'
};
var map=new google.maps.Map(mapDiv, mapOptions);
map.mapTypes.set("bookingMapStyle",
new google.maps.StyledMapType(shortcodeMapStyle, {
name: "Booking Map Style",
})
);
window.bookingMarkers={};
keys.forEach(function (key){
var clinic=clinicsObj[key];
if(clinic &&
clinic.position &&
clinic.position.lat &&
clinic.position.lng
){
var marker=new google.maps.Marker({
position: {
lat: parseFloat(clinic.position.lat),
lng: parseFloat(clinic.position.lng),
},
map: map,
icon: {
url:
"data:image/svg+xml;charset=UTF-8," +
encodeURIComponent(getSvgStd()),
},
title: clinic.title||"",
});
var healthDirectorHtml=(clinic.health_director)
? "<br><span class=\"box-location-address dp-text-xs-important\"><span class=\"icon-Emoji me-1 dp-text-m\"></span>Dir. Sanitario " + clinic.health_director + "</span>"
: "";
var infoWindow=new google.maps.InfoWindow({
content:
"<strong>" +
(clinic.title||"") +
"</strong><br>" +
(clinic.address||"") +
healthDirectorHtml,
});
marker.addListener("click", function (){
infoWindow.open(map, marker);
});
window.bookingMarkers[key]={
marker: marker,
infoWindow: infoWindow,
active: false,
};}});
if(searchCoords&&searchCoords.length > 0&&keys.length > 1){
searchCoords.forEach(function (coord, index){
if(coord&&coord.Latitudine&&coord.Longitudine){
var searchMarker=new google.maps.Marker({
position: {
lat: parseFloat(coord.Latitudine),
lng: parseFloat(coord.Longitudine),
},
map: map,
icon: {
url:
"data:image/svg+xml;charset=UTF-8," +
encodeURIComponent(getSearchLocationSvg()),
scaledSize: new google.maps.Size(27, 27),
anchor: new google.maps.Point(13.5, 13.5),
},
zIndex: 1000,
});
window.bookingMarkers["search_" + index]={
marker: searchMarker,
isSearchLocation: true,
};}});
}
if(Object.keys(window.bookingMarkers).length > 2){
var bounds=new google.maps.LatLngBounds();
Object.values(window.bookingMarkers).forEach(function (markerObj){
bounds.extend(markerObj.marker.getPosition());
});
map.fitBounds(bounds);
}else{
var singleClinic=clinicsObj[keys[0]];
if(singleClinic&&singleClinic.position){
map.setCenter({
lat: parseFloat(singleClinic.position.lat),
lng: parseFloat(singleClinic.position.lng)
});
map.setZoom(12);
}}
jQuery("#booking-owl-reservation").on("click",
".time",
function (){
var $this=jQuery(this);
var clinicsData=$this
.attr("data-clinics")
.replace(/&quot;/g, '"');
var clinics=JSON.parse(clinicsData);
Object.keys(window.bookingMarkers).forEach(function (
key
){
if(!window.bookingMarkers[key].isSearchLocation){
window.bookingMarkers[key].marker.setIcon({
url:
"data:image/svg+xml;charset=UTF-8," +
encodeURIComponent(getSvgStd()),
});
window.bookingMarkers[key].active=false;
}});
clinics.forEach(function (clinicId){
if(window.bookingMarkers[clinicId]){
window.bookingMarkers[clinicId].marker.setIcon({
url:
"data:image/svg+xml;charset=UTF-8," +
encodeURIComponent(getSvgActive()),
});
window.bookingMarkers[clinicId].active=true;
}});
jQuery("#booking-owl-reservation .time").removeClass("active"
);
$this.addClass("active");
}
);
}
function getSvgStd(){
return [
'<svg xmlns="http://www.w3.org/2000/svg" width="28" height="39" viewBox="0 0 28 39" fill="none">',
'<path d="M13.9651 0.000414856C24.6085 -0.0793662 31.4922 11.3638 26.148 20.579C22.6761 26.566 18.711 32.2674 15.0071 38.122C14.3284 39.1946 13.8654 39.361 13.1236 38.1924C9.32142 32.2039 5.20435 26.3942 1.72551 20.2259C-3.38072 11.1737 3.48221 0.0797035 13.9651 0.000414856ZM13.8561 21.5103C18.1074 21.6058 21.6637 18.1994 21.7486 13.9508C21.8306 9.86076 18.4573 6.33119 14.3195 6.17803C10.0495 6.01945 6.4645 9.35795 6.34011 13.609C6.21573 17.8576 9.59931 21.4152 13.8561 21.5108V21.5103Z" fill="#565658"/>',
"</svg>",
].join("");
}
function getSvgActive(){
return [
'<svg xmlns="http://www.w3.org/2000/svg" width="28" height="39" viewBox="0 0 28 39" fill="none">',
'<path d="M13.9651 0.000414856C24.6085 -0.0793662 31.4922 11.3638 26.148 20.579C22.6761 26.566 18.711 32.2674 15.0071 38.122C14.3284 39.1946 13.8654 39.361 13.1236 38.1924C9.32142 32.2039 5.20435 26.3942 1.72551 20.2259C-3.38072 11.1737 3.48221 0.0797035 13.9651 0.000414856ZM13.8561 21.5103C18.1074 21.6058 21.6637 18.1994 21.7486 13.9508C21.8306 9.86076 18.4573 6.33119 14.3195 6.17803C10.0495 6.01945 6.4645 9.35795 6.34011 13.609C6.21573 17.8576 9.59931 21.4152 13.8561 21.5108V21.5103Z" fill="#66C1BF"/>',
"</svg>",
].join("");
}
function getSearchLocationSvg(){
return [
'<svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none">',
'<circle cx="13.5" cy="13.5" r="13.5" fill="#295782" fill-opacity="0.3"/>',
'<circle cx="13.5" cy="13.5" r="8.5" fill="#295782"/>',
"</svg>",
].join("");
}
function clearBookingErrors(){
const errorDiv=document.querySelector(".booking-section.section-4 .error");
if(errorDiv){
errorDiv.classList.remove("active");
const errorMessage=errorDiv.querySelector("p");
if(errorMessage){
errorMessage.innerHTML="";
}}
}
function getFormattedData(selectedDate){
let date;
if(selectedDate){
date=`${selectedDate}T00:00:00Z`;
}else{
var now=new Date();
var yyyy=now.getFullYear();
var mm=String(now.getMonth() + 1).padStart(2, "0");
var dd=String(now.getDate()).padStart(2, "0");
date=`${yyyy}-${mm}-${dd}T00:00:00Z`;
}
return date;
}
function bookingCustomerYes(){
var tab_no=document.querySelectorAll(".tab-no");
var tab_yes=document.querySelectorAll(".tab-yes");
for (let i=0; i < tab_no.length; i++){
tab_no[i].style.display="none";
}
for (let i=0; i < tab_yes.length; i++){
tab_yes[i].style.display="flex";
}}
function bookingCustomerNo(){
var tab_no=document.querySelectorAll(".tab-no");
var tab_yes=document.querySelectorAll(".tab-yes");
for (let i=0; i < tab_no.length; i++){
tab_no[i].style.display="flex";
}
for (let i=0; i < tab_yes.length; i++){
tab_yes[i].style.display="none";
}}
function directBookingCustomerYes(){
var tab_no=document.querySelectorAll(".tab-no");
var tab_yes=document.querySelectorAll(".tab-yes");
var tab_yes_direct=document.querySelector("#section-selection-by-comune");
for (let i=0; i < tab_no.length; i++){
tab_no[i].style.display="none";
}
for (let i=0; i < tab_yes.length; i++){
tab_yes[i].style.display="none";
}
tab_yes_direct.classList.add("active");
}
function bookingSubmitAreaPazienti(dataContent){
var grecaptcha_key=document
.getElementById("g-recaptcha")
.getAttribute("src")
.split("render=")[1];
grecaptcha.ready(function (){
grecaptcha
.execute(grecaptcha_key, { action: "submit" })
.then(function (token){
document.body.classList.add("overlay-loading-show");
const urlParams=new URLSearchParams(window.location.search);
const gclid_field=urlParams.get("gclid");
dataContent.gclid_field =
gclid_field!=null ? gclid_field:"";
let myDataJSON=JSON.stringify({
"g-recaptcha-response": token,
data: dataContent,
});
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function (){
if(this.readyState==4&&this.status==200){
bookingFillInlineThankyouSummary(dataContent);
var prenEl=document.getElementById("prenota");
var tyEl=document.getElementById("prenota-thankyou");
if(prenEl) prenEl.classList.remove("active");
if(tyEl) tyEl.classList.add("active");
dataLayer.push({
event: "generate_lead",
formID: "form_prenotazione",
email_customer: dataContent.email,
});
document.body.classList.remove("overlay-loading-show");
}};
const link=new URL(
document.getElementById("booking_ajax_url").value
);
link.searchParams.set("action", "dp_booking");
xhttp.open("POST", link, true);
xhttp.setRequestHeader("Content-type",
"application/json; charset=UTF-8"
);
xhttp.send(myDataJSON);
});
});
}
function bookingReservationDirectBookingParam(){
var fromWindow =
typeof window!=="undefined"&&window.selectedCardDirectBooking!=null&&window.selectedCardDirectBooking!==""
? String(window.selectedCardDirectBooking)
: null;
var fromGlobal =
typeof selectedCardDirectBooking!=="undefined" &&
selectedCardDirectBooking!=null &&
selectedCardDirectBooking!==""
? String(selectedCardDirectBooking)
: null;
var cardVal=fromGlobal!=null ? fromGlobal:fromWindow;
if(cardVal==="0") return "0";
if(cardVal==="1") return "1";
if(typeof directBooking!=="undefined"&&directBooking===false) return "0";
if(typeof directBooking!=="undefined"&&directBooking===true) return "1";
if(typeof window!=="undefined"&&window.directBooking===false) return "0";
if(typeof window!=="undefined"&&window.directBooking===true) return "1";
return "1";
}
try {
window.bookingReservationDirectBookingParam=bookingReservationDirectBookingParam;
} catch (e){}
function bookingBuildThankyouRedirectParams(dataContent, contactOnlyFollowup){
var dbFlag=bookingReservationDirectBookingParam();
if(dataContent&&dataContent.areaPazienti===true){
var tyAp=dataContent.thankyou&&typeof dataContent.thankyou==="object" ? dataContent.thankyou:null;
var hasDirectThankyouData =
!!(
tyAp &&
(
(tyAp.slot_time&&String(tyAp.slot_time).trim()!=="") ||
(tyAp.clinic_address&&String(tyAp.clinic_address).trim()!=="") ||
(tyAp.clinic_link&&String(tyAp.clinic_link).trim()!=="") ||
(tyAp.name&&String(tyAp.name).trim()!=="")
)
);
if(hasDirectThankyouData){
dbFlag="1";
}}
if(contactOnlyFollowup===true){
return {
thankyou_contact_only: "1",
email: "",
customer: "",
reservation_name: "",
reservation_type: "",
reservation_date: "",
reservation_clinic_address: "",
reservation_clinic_url: "",
reservation_direct_booking: dbFlag,
};}
var ty=dataContent&&dataContent.thankyou;
var name="";
var type="";
var dateStr="";
var clinicAddr="";
var clinicUrl="";
if(ty&&typeof ty==="object"){
name=ty.name||"";
type=ty.type||"";
dateStr=ty.slot_time||"";
clinicAddr=ty.clinic_address||"";
clinicUrl=ty.clinic_link||"";
}
if(!name&&dataContent){
name=((dataContent.firstname||"") + " " + (dataContent.lastname||"")).trim();
}
if(!type&&dataContent&&dataContent.service){
type=dataContent.service;
}
if(!dateStr&&dataContent&&dataContent.times){
dateStr=Array.isArray(dataContent.times) ? dataContent.times.join(", "):String(dataContent.times);
}
if(!clinicAddr&&dataContent&&dataContent.location){
var loc=dataContent.location;
if(typeof loc==="object"&&loc!==null){
clinicAddr=[loc.title, loc.address].filter(Boolean).join(" - ");
if(!clinicAddr){
clinicAddr=loc.address||loc.title||(loc.code!=null ? String(loc.code):"");
}}else{
clinicAddr=String(loc);
}}
return {
email: (dataContent&&dataContent.email)||"",
customer: typeof bookingData!=="undefined"&&bookingData.customer ? "si":"no",
reservation_name: name,
reservation_type: type,
reservation_date: dateStr,
reservation_clinic_address: clinicAddr,
reservation_clinic_url: clinicUrl,
reservation_direct_booking: dbFlag,
};}
try {
window.bookingBuildThankyouRedirectParams=bookingBuildThankyouRedirectParams;
} catch (e){}
function bookingFillInlineThankyouSummary(dataContent){
if(!dataContent) return;
var p=bookingBuildThankyouRedirectParams(dataContent, false);
var sp=document.getElementById("summary-patient");
if(sp) sp.textContent=p.reservation_name||"";
var st=document.getElementById("summary-visit-type");
if(st) st.textContent=p.reservation_type||"";
var sd=document.getElementById("summary-datetime");
if(sd) sd.textContent=p.reservation_date||"";
var sc=document.getElementById("summary-clinic");
if(sc) sc.textContent=p.reservation_clinic_address||"";
var sdr=document.getElementById("summary-datetime-row");
if(sdr) sdr.style.display=p.reservation_direct_booking==="0" ? "none":"";
var thankWrap=document.getElementById("prenota-thankyou");
var clinicBtn=thankWrap ? thankWrap.querySelector(".goClinic"):document.querySelector(".goClinic");
if(clinicBtn){
if(p.reservation_clinic_url){
clinicBtn.href=p.reservation_clinic_url;
clinicBtn.classList.remove("d-none");
}else{
clinicBtn.classList.add("d-none");
clinicBtn.href="#";
}}
var bs=thankWrap ? thankWrap.querySelector(".booking-summary"):document.querySelector(".booking-summary");
if(bs) bs.classList.remove("d-none");
}
try {
window.bookingFillInlineThankyouSummary=bookingFillInlineThankyouSummary;
} catch (e){}
function bookingSubmitFrontend(dataContent){
var contactOnlyFollowup=dataContent.thankyouContactOnlyRequest===true;
delete dataContent.thankyouContactOnlyRequest;
var forServer=Object.assign({}, dataContent);
var grecaptcha_key=document
.getElementById("g-recaptcha")
.getAttribute("src")
.split("render=")[1];
grecaptcha.ready(function (){
grecaptcha
.execute(grecaptcha_key, { action: "submit" })
.then(function (token){
document.body.classList.add("overlay-loading-show");
const urlParams=new URLSearchParams(window.location.search);
const gclid_field=urlParams.get("gclid");
forServer.gclid_field=gclid_field!=null ? gclid_field:"";
let myDataJSON=JSON.stringify({
"g-recaptcha-response": token,
data: forServer,
});
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function (){
if(this.readyState==4&&this.status==200){
goThankyou(
"/grazie-prenota/",
bookingBuildThankyouRedirectParams(contactOnlyFollowup ? forServer:dataContent, contactOnlyFollowup)
);
}};
const link=new URL(
document.getElementById("booking_ajax_url").value
);
link.searchParams.set("action", "dp_booking");
xhttp.open("POST", link, true);
xhttp.setRequestHeader("Content-type",
"application/json; charset=UTF-8"
);
xhttp.send(myDataJSON);
});
});
}
function bookFormatData(date){
var rawDate=date;
var dateObj=new Date(rawDate);
var day=String(dateObj.getDate()).padStart(2, '0');
var month=String(dateObj.getMonth() + 1).padStart(2, '0');
var year=dateObj.getFullYear();
var hours=String(dateObj.getHours()).padStart(2, '0');
var minutes=String(dateObj.getMinutes()).padStart(2, '0');
var formatted=`${day}/${month}/${year} ${hours}:${minutes}`;
return formatted;
}
function bookingGetSection4SubmitCtaLabel(){
var btn=document.querySelector(".booking-section.section-4 a.submit");
if(!btn) return "";
var spans=btn.querySelectorAll(".sz-16");
for (var i=0; i < spans.length; i++){
if(!spans[i].classList.contains("d-none")){
var t=spans[i].textContent&&spans[i].textContent.trim();
if(t) return t;
}}
var tAll=(btn.textContent||"").trim();
return tAll;
}
function bookingSyncTermsDisclaimerCtaText(){
var label=bookingGetSection4SubmitCtaLabel();
document.querySelectorAll(".terms-disclaimer-cta-text").forEach(function (el){
el.textContent=label;
});
}
try {
window.bookingSyncTermsDisclaimerCtaText=bookingSyncTermsDisclaimerCtaText;
window.bookingGetSection4SubmitCtaLabel=bookingGetSection4SubmitCtaLabel;
} catch (e){}
function showBookingFields(direct){
var fields_y=document.querySelectorAll(".direct-field-y");
var fields_n=document.querySelectorAll(".direct-field-n");
if(direct){
fields_y.forEach(function (el){
el.classList.remove('d-none');
});
fields_n.forEach(function (el){
el.classList.add('d-none');
});
}else{
fields_y.forEach(function (el){
el.classList.add('d-none');
});
fields_n.forEach(function (el){
el.classList.remove('d-none');
});
}
bookingSyncTermsDisclaimerCtaText();
}
try {
window.showBookingFields=showBookingFields;
} catch (e){}
function resetFormFields(formElement){
if(!formElement) return;
const fields=formElement.querySelectorAll("input, select, textarea");
fields.forEach(function (el){
if(el.type==="checkbox"||el.type==="radio"){
el.checked=el.defaultChecked;
}else if(el.tagName==="SELECT"){
el.selectedIndex=0;
}else{
el.value=el.defaultValue||"";
}});
}
document.addEventListener("DOMContentLoaded", function (){
if(typeof bookingSyncTermsDisclaimerCtaText==="function"){
bookingSyncTermsDisclaimerCtaText();
}});
(function (window){
"use strict";
var FLOW8={
H3_IGIENE: "Seleziona giorno e ora della tua igiene dentale",
H3_CHECKUP: "Seleziona giorno e ora della visita di controllo",
HTML_NO_SLOTS: '<div class="no-slots-message"><p>Nessuno slot disponibile</p></div>',
HTML_ERR_SLOTS: '<div class="no-slots-message"><p>Errore durante il recupero degli slot</p></div>',
SUB_NEG: "Informazione importante",
SUB_POS: "Inserisci i tuoi dati + Rational: condizioni del servizio",
MSG_NEG_ELIGIBILITY:
"<p>Per garantire la tua salute orale, prima dell'igiene dentale è necessaria una <strong>visita di controllo</strong></p>" +
"<p>Procedendo potrai prenotarle entrambe: prima la tua visita di controllo a cui seguirà una seduta di igiene dentale</p>",
};
class BookingFlowControlloIgieneOrale {
constructor(config){
var assign={
pageBooking: null,
bookingData: null,
formSection2Yes: null,
formSection2No: null,
formSection3: null,
formSection4: null,
formSection5: null,
formSection6: null,
formSection7: null,
formSectionSelectByComune: null,
formSection1Specialista: null,
subtitleSection4No: null,
subtitleSection4Yes: null,
formSection4SubmitLabelNo: null,
formSection4SubmitLabelYes: null,
section4DefaultLabelNo: "",
section4DefaultLabelYes: "",
sectionSlot: null,
sectionSlotStep2: null,
bookingScroll: function (){ },
};
Object.keys(assign).forEach(function (k){
this[k]=config[k]!=null ? config[k]:assign[k];
}, this);
this.section4DefaultLabelNo=config.section4DefaultLabelNo||"";
this.section4DefaultLabelYes=config.section4DefaultLabelYes||"";
this.flowApiAction=config.flowApiAction||"dp_booking_flow8_step1_check";
this.followupSlotsApiAction=config.followupSlotsApiAction||"dp_booking_flow8_followup_slots";
this.igieneSlotsApiAction=config.igieneSlotsApiAction||"dp_booking_flow8_igiene_slots";
this.appointmentsApiAction=config.appointmentsApiAction||"dp_booking_flow8_appointments";
this.passEvodentSessionBearer=config.passEvodentSessionBearer===true;
this.useDashboardBookingThankyou=config.useDashboardBookingThankyou===true;
this.subtitle4YesDefaultText=this.getSubtitleText(this.subtitleSection4Yes);
this.bindSectionSelectionByComuneCta();
this.bindFlow8ConfirmAppointments();
this.bindFlow8BackToEligibility();
this.bindFlow8TurnOffDirectBooking();
this._flow8ChangeClinicWrap=null;
this._flow8ChangeClinicInput=null;
}
_flow8EvodentBearerFromSession(){
if(typeof sessionStorage==="undefined") return "";
var id=sessionStorage.getItem("id_token");
var acc=sessionStorage.getItem("access_token");
if(id&&String(id).trim()) return String(id).trim();
if(acc&&String(acc).trim()) return String(acc).trim();
return "";
}
_flow8GetEsito(d){
if(!d||typeof d!=="object") return undefined;
if(typeof d.esito!=="undefined") return d.esito;
if(typeof d.Esito!=="undefined") return d.Esito;
return undefined;
}
_flow8EsitoIsPositive(d){
var e=this._flow8GetEsito(d);
if(e==null) return false;
if(typeof e==="string"){
var sp=e.trim().toLowerCase();
return sp=="true"||sp=="1";
}
return e==true||e==1;
}
_flow8EsitoIsNegative(d){
var e=this._flow8GetEsito(d);
if(e==null) return false;
if(typeof e==="string"){
var sn=e.trim().toLowerCase();
return sn=="false"||sn=="0"||sn=="no";
}
return e==false||e==0;
}
_flow8ResponseHasClinicaId(d){
if(!d||typeof d!=="object") return false;
var id=d.clinicaId!=null ? d.clinicaId:d.ClinicaId;
if(id==null) return false;
return String(id).trim()!=="";
}
_flow8JwtPayload(){
var jwt=this._flow8Jwt();
if(!jwt||typeof jwt!=="string") return null;
try {
var p=jwt.split(".")[1];
if(!p) return null;
var b=p.replace(/-/g, "+").replace(/_/g, "/");
while (b.length % 4) b +="=";
return JSON.parse(atob(b));
} catch (e){
return null;
}}
_flow8PazienteIdForBookingApi(){
if(!this.passEvodentSessionBearer) return "";
return this._resolveFlow8PazienteId();
}
_resolveFlow8PazienteId(){
var bd=this.bookingData;
if(bd&&bd.pazienteId!=null&&String(bd.pazienteId).trim()!==""){
return String(bd.pazienteId).trim();
}
var elig=bd&&bd.igieneEligibility;
if(elig&&typeof elig==="object"){
var ep=elig.PazienteId!=null ? elig.PazienteId:elig.pazienteId;
if(ep!=null&&String(ep).trim()!=="") return String(ep).trim();
}
if(bd&&bd.apGuestLikeFrontendFlow===true){
return "";
}
try {
var rawUd=sessionStorage.getItem("userData");
if(rawUd){
var ud=JSON.parse(rawUd);
if(ud&&ud.PatientWebCard&&ud.PatientWebCard.Paziente){
var pidCard=ud.PatientWebCard.Paziente.PazienteId;
if(pidCard!=null&&String(pidCard).trim()!=="") return String(pidCard).trim();
}}
} catch (e){ }
var pl=this._flow8JwtPayload();
if(pl&&typeof pl==="object"){
var jp=pl.pazienteId!=null ? pl.pazienteId:pl.PazienteId;
if(jp!=null&&String(jp).trim()!=="") return String(jp).trim();
if(pl.profile!=null&&String(pl.profile).trim()!=="") return String(pl.profile).trim();
}
if(typeof sessionStorage!=="undefined"){
var accTok=sessionStorage.getItem("access_token");
if(accTok&&String(accTok).trim()){
try {
var part=String(accTok).split(".")[1];
if(part){
var b64=part.replace(/-/g, "+").replace(/_/g, "/");
while (b64.length % 4) b64 +="=";
var pa=JSON.parse(atob(b64));
if(pa&&pa.profile!=null&&String(pa.profile).trim()!=="") return String(pa.profile).trim();
var jpa=pa.pazienteId!=null ? pa.pazienteId:pa.PazienteId;
if(jpa!=null&&String(jpa).trim()!=="") return String(jpa).trim();
}} catch (e2){ }}
}
return "";
}
_getClinicaIdForPositiveIgieneSlots(){
if(this.bookingData.location&&this.bookingData.location.code!=null&&String(this.bookingData.location.code).trim()!==""){
return String(this.bookingData.location.code).trim();
}
var d=this.bookingData.igieneEligibility;
if(d&&typeof d==="object"){
var id=d.clinicaId!=null ? d.clinicaId:d.ClinicaId;
if(id!=null&&String(id).trim()!=="") return String(id).trim();
}
var pl=this._flow8JwtPayload();
if(pl){
var jcid=pl.clinicaId!=null ? pl.clinicaId:pl.ClinicaId;
if(jcid!=null&&String(jcid).trim()!=="") return String(jcid).trim();
}
return "";
}
_syncFlow8ResultRefs(row){
if(!row){
this._flow8ChangeClinicWrap=null;
this._flow8ChangeClinicInput=null;
return;
}
this._flow8ChangeClinicWrap=row.querySelector(".flow8-change-clinic-option");
if(!this._flow8ChangeClinicWrap){
this._flow8ChangeClinicInput=null;
return;
}
this._flow8ChangeClinicInput =
this._flow8ChangeClinicWrap.querySelector("input.flow8-change-clinic-cb") ||
this._flow8ChangeClinicWrap.querySelector('input[type="checkbox"]');
}
getSubtitleText(node){
if(!node) return "";
var p=node.querySelector("p");
return p ? p.textContent:"";
}
_clearFlow8SummaryError(){
if(!this.formSection7) return;
var err=this.formSection7.querySelector(".flow8-summary-error");
if(!err) return;
err.classList.remove("active");
var p=err.querySelector("p");
if(p) p.innerHTML="";
}
_showFlow8SummaryError(htmlOrText){
if(!this.formSection7) return;
var err=this.formSection7.querySelector(".flow8-summary-error");
if(!err) return;
var p=err.querySelector("p");
if(p) p.innerHTML=htmlOrText!=null ? String(htmlOrText):"";
err.classList.add("active");
this.bookingScroll();
try {
err.scrollIntoView({ behavior: "smooth", block: "nearest" });
} catch (e){ }}
setSubtitleText(node, text){
if(!node) return;
var p=node.querySelector("p");
if(p) p.textContent=text;
}
_getAjaxUrl(){
var el=document.getElementById("booking_ajax_url");
return el ? el.value:"";
}
_bookingOriginHeaderUrl(){
try {
var l=window.location;
return l.protocol + "//" + l.host + l.pathname;
} catch (e){
return window.location.origin||"";
}}
_flow8Jwt(){
var jwt=this.bookingData.flow8ApiToken||this.bookingData.igieneEligibilityJwt||"";
if(jwt) return jwt;
if(this.bookingData&&this.bookingData.apGuestLikeFrontendFlow===true){
return "";
}
if(this.passEvodentSessionBearer){
return this._flow8EvodentBearerFromSession()||"";
}
return "";
}
_phoneFull(){
return (this.bookingData.phone_prefix||"") + (this.bookingData.phone||"");
}
_patientFieldsForIgieneApi(){
return {
PazienteNome: this.bookingData.firstname||"",
PazienteCognome: this.bookingData.lastname||"",
PazienteEmail: this.bookingData.email||"",
PazienteTelefono: this._phoneFull(),
};}
_syncMarketingProfile(){
var m=document.querySelector("#booking-marketing");
var p=document.querySelector("#booking-profile");
this.bookingData.marketing=m ? m.checked:false;
this.bookingData.profile=p ? p.checked:false;
}
getPhpSessionId(){
var m=document.cookie.match(/(?:^|;\s*)PHPSESSID=([^;]+)/);
return m ? decodeURIComponent(m[1]):"";
}
_pad2(n){
return n < 10 ? "0" + n:String(n);
}
_getBookingDateParsed(){
var el=document.querySelector("#booking-date");
var raw=el ? el.value:"";
var dateIn=typeof getFormattedData==="function" ? getFormattedData(raw):null;
return { dateIn: dateIn, start: dateIn ? new Date(dateIn):new Date() };}
_formatDateYmdMidnight(d){
return d.getFullYear() + "-" + this._pad2(d.getMonth() + 1) + "-" + this._pad2(d.getDate()) + "T00:00:00";
}
_mergedClinicsData(){
var merged={};
if(typeof window.bookingClinicsData==="object"&&window.bookingClinicsData) Object.assign(merged, window.bookingClinicsData);
if(this.sectionSlot&&this.sectionSlot.clinicsData) Object.assign(merged, this.sectionSlot.clinicsData);
if(this.sectionSlotStep2&&this.sectionSlotStep2.clinicsData) Object.assign(merged, this.sectionSlotStep2.clinicsData);
return merged;
}
_setFlow8EligibilitySubtitle(text){
if(this.subtitleSection4No) this.subtitleSection4No.classList.add("d-none");
if(this.subtitleSection4Yes){
this.subtitleSection4Yes.classList.remove("d-none");
this.subtitleSection4Yes.style.display="";
this.setSubtitleText(this.subtitleSection4Yes, text);
this.subtitleSection4Yes.classList.toggle("flow8-subtitle-sub-neg", text===FLOW8.SUB_NEG);
}}
_flow8GridSelectors(){
return {
mapParent: document.querySelector(".grid-booking-box-3"),
box4: document.querySelector(".grid-booking-box-4.d-none"),
};}
_owlHtml(containerId, html){
var c=document.getElementById(containerId);
if(c) c.innerHTML=html;
}
_ajaxErrorMessage(xhr, fallback){
if(typeof window.resolveDirectBookingAjaxErrorMessage==="function"){
return window.resolveDirectBookingAjaxErrorMessage(xhr, fallback);
}
if(xhr&&xhr.responseJSON&&xhr.responseJSON.data){
var d=xhr.responseJSON.data;
var msg=d.message!=null ? String(d.message):"";
var detail=d.errorDetail!=null ? String(d.errorDetail):"";
if(detail==="APP_ALREADY_EXISTS"||msg==="V2_APPOINTMENT_CREATION_ERROR"){
return "Non è possibile completare la prenotazione online. Per finalizzare la tua richiesta, contatta il tuo Centro oppure chiama il numero verde <a href='tel:+39800326326'>800 326 326</a>";
}
if(msg) return msg;
}
return fallback;
}
_escapeHtmlForFlow8(str){
if(str==null) return "";
return String(str)
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;");
}
_formatFlow8LastVisitDate(isoStr){
if(isoStr==null||isoStr==="") return "";
var dt=new Date(String(isoStr));
if(isNaN(dt.getTime())) return "";
return (
dt.toLocaleDateString("it-IT", { day: "numeric", month: "long", year: "numeric" }) +
" alle ore " +
dt.toLocaleTimeString("it-IT", { hour: "2-digit", minute: "2-digit" })
);
}
_resolveClinicTitleFromEligibility(clinicaId){
if(clinicaId==null||clinicaId==="") return "";
return this.getClinicInfo(String(clinicaId), this._mergedClinicsData()).title||"";
}
buildFlow8PositiveEligibilityHtml(d){
var iso=d.data!=null ? d.data:d.Data;
var clinicaId=d.clinicaId!=null ? d.clinicaId:d.ClinicaId;
var datePart=this._formatFlow8LastVisitDate(iso);
var nomeWp =
d.clinicaNome!=null&&String(d.clinicaNome).trim()
? String(d.clinicaNome).trim()
: d.clinica_nome!=null&&String(d.clinica_nome).trim()
? String(d.clinica_nome).trim()
: "";
var clinicPart=nomeWp||this._resolveClinicTitleFromEligibility(clinicaId);
if(!datePart) datePart="—";
if(!clinicPart&&clinicaId!=null&&clinicaId!==""){
clinicPart="il nostro centro (cod. " + String(clinicaId) + ")";
}
if(!clinicPart) clinicPart="—";
return (
"<p>Visita di controllo <strong>" +
this._escapeHtmlForFlow8(datePart) +
"</strong> presso <strong>" +
this._escapeHtmlForFlow8(clinicPart) +
"</strong></p>" +
"<p>Scegli quando vuoi prenotare la tua <strong>igiene dentale</strong></p>"
);
}
setSelectedFlowId(evodentId){
this.bookingData.customFlowId=evodentId!=null ? String(evodentId):null;
}
isSelected(){
return this.bookingData&&this.bookingData.customFlowId==="8";
}
shouldSkipRequiredValidation(){
return false;
}
ensureSectionSelectionOrderForFlow8(){
if(!this.formSection4||!this.formSectionSelectByComune) return;
if(this.formSectionSelectByComune.compareDocumentPosition(this.formSection4) & Node.DOCUMENT_POSITION_FOLLOWING){
this.formSection4.insertAdjacentElement("afterend", this.formSectionSelectByComune);
}
var chain=[
[this.formSectionSelectByComune, this.formSection5],
[this.formSection5, this.formSection6],
[this.formSection6, this.formSection7],
];
chain.forEach(function (pair){
var a=pair[0];
var b=pair[1];
if(a&&b && a.nextElementSibling!==b) a.insertAdjacentElement("afterend", b);
});
}
_deactivateBookingSteps2345(){
[this.formSection2Yes, this.formSection2No, this.formSection3, this.formSection5].forEach(function (el){
if(el) el.classList.remove("active");
});
if(this.formSectionSelectByComune){
this.formSectionSelectByComune.classList.remove("active", "done");
}}
_hideFlow8SelectionByComune(){
var el=this.formSectionSelectByComune;
if(!el) return;
el.style.setProperty("display", "none", "important");
el.setAttribute("aria-hidden", "true");
}
_showFlow8SelectionByComune(){
var el=this.formSectionSelectByComune;
if(!el) return;
el.style.removeProperty("display");
el.setAttribute("aria-hidden", "false");
}
_getFlow8Section4LoaderWrap(){
return this.formSection4 ? this.formSection4.querySelector(".flow8-section4-loader-wrap"):null;
}
_ensureSection4LoaderMarkup(host){
if(!host) return;
host.style.position="relative";
if(!host.querySelector(".booking-loader")){
var wrap=document.createElement("div");
wrap.className="booking-loader";
var spin=document.createElement("div");
spin.className="loader";
wrap.appendChild(spin);
host.appendChild(wrap);
}}
showRequestLoader(){
var row=this._getFlow8Section4LoaderWrap();
if(!row) return;
var host=row.querySelector(".flow8-section4-loader-host");
this._ensureSection4LoaderMarkup(host);
row.classList.remove("d-none");
row.style.removeProperty("display");
row.setAttribute("aria-busy", "true");
}
hideRequestLoader(){
var row=this._getFlow8Section4LoaderWrap();
if(!row) return;
row.classList.add("d-none");
row.setAttribute("aria-busy", "false");
}
toggleContentFromSubtitle(hide){
if(!this.formSection4) return;
var c=this.formSection4.querySelector(".container");
if(!c) return;
var afterSub=false;
Array.from(c.children).forEach(function (node){
if(!afterSub&&(node.classList.contains("subtitle")||node.querySelector(".subtitle"))) afterSub=true;
var keep =
node.classList.contains("flow8-api-result") ||
node.classList.contains("flow8-inline-loader") ||
node.classList.contains("flow8-section4-loader-wrap");
if(!afterSub||keep) return;
node.classList.toggle("d-none", hide);
node.style.display=hide ? "none":"";
});
}
showStepDatiFormContent(){
this.toggleContentFromSubtitle(false);
}
hideStepDatiFormContent(){
this.toggleContentFromSubtitle(true);
}
clearUiForDefaultFlow(){
this.bookingData.flow8SlotsShown=false;
this.bookingData.flow8RicontattoContactPath=false;
this.restoreDefaultLabels();
this.hideRequestLoader();
if(this.subtitleSection4No) this.subtitleSection4No.classList.add("d-none");
if(this.subtitleSection4Yes){
this.subtitleSection4Yes.classList.remove("d-none");
this.subtitleSection4Yes.classList.remove("flow8-subtitle-sub-neg");
}
this.setSubtitleText(this.subtitleSection4Yes, this.subtitle4YesDefaultText);
this.showStepDatiFormContent();
this.hideResultContainer();
this._showFlow8SelectionByComune();
var backWrap=this.formSection7&&this.formSection7.querySelector(".flow8-back-to-eligibility-wrap");
if(backWrap) backWrap.classList.add("d-none");
this._syncFlow8SoloIgieneSlotsSectionClass();
}
_syncFlow8SoloIgieneSlotsSectionClass(){
if(!this.bookingData) return;
var solo = !!(this.bookingData.flow8HygieneOnlyPath&&!this.bookingData.flow8NegativePath);
[this.formSection6, this.formSection7].forEach(function (el){
if(el) el.classList.toggle("solo-igiene", solo);
});
}
resetState(){
this.bookingData.customFlowId=null;
this.bookingData.flow8SlotsShown=false;
this.bookingData.flow8HygieneOnlyPath=false;
this.bookingData.flow8RicontattoContactPath=false;
this.clearUiForDefaultFlow();
}
restoreDefaultLabels(){
if(this.formSection4SubmitLabelNo) this.formSection4SubmitLabelNo.textContent=this.section4DefaultLabelNo;
if(this.formSection4SubmitLabelYes) this.formSection4SubmitLabelYes.textContent=this.section4DefaultLabelYes;
}
setStep1ButtonLabel(){
if(this.formSection4SubmitLabelNo) this.formSection4SubmitLabelNo.textContent="Avanti";
if(this.formSection4SubmitLabelYes) this.formSection4SubmitLabelYes.textContent="Avanti";
document.querySelectorAll(".direct-field-y").forEach(function (el){
el.textContent="Avanti";
});
}
ensureResultContainer(){
var existing=this.formSection4.querySelector(".flow8-api-result");
if(existing){
this._syncFlow8ResultRefs(existing);
return existing;
}
var cbId="flow8-change-clinic-" + String(Math.random()).replace(/\D/g, "").slice(0, 12);
var resultRow=document.createElement("div");
resultRow.className="row flow8-api-result d-none";
resultRow.innerHTML =
'<div class="col-12 col-lg-8 px-0">' +
'<div class="flow8-api-result-box"></div>' +
'<div class="flow8-api-result-actions mt-3 d-none">' +
'<div class="form-check flow8-change-clinic-option d-none">' +
'<input type="checkbox" class="form-check-input flow8-change-clinic-cb" id="' +
cbId +
'" autocomplete="off" />' +
'<label class="form-check-label" for="' +
cbId +
'">Voglio scegliere un\'altra zona o centro (verrà richiesta anche la visita di controllo)</label>' +
"</div>" +
'<div class="flow8-api-result-buttons-row">' +
'<a href="#" class="cta cta-btn-grandient cta-dark flow8-proceed-btn"><span class="sz-16">Continua</span></a>' +
'<span class="flow8-api-result-buttons-or d-none" aria-hidden="true">Oppure</span>' +
'<a href="#" class="cta transparent flow8-change-clinic-trigger-btn d-none"><span class="sz-16">Scegli un\'altra zona o centro</span></a>' +
"</div>" +
"</div></div>";
var mobileRow=this.formSection4.querySelector(".row.mobile-center");
if(mobileRow&&mobileRow.parentNode) mobileRow.parentNode.insertBefore(resultRow, mobileRow);
else {
var c=this.formSection4.querySelector(".container");
if(c) c.appendChild(resultRow);
}
var btn=resultRow.querySelector(".flow8-proceed-btn");
var triggerAlt=resultRow.querySelector(".flow8-change-clinic-trigger-btn");
var self=this;
if(triggerAlt){
triggerAlt.addEventListener("click", function (e){
e.preventDefault();
var changeCb=self._flow8ChangeClinicInput;
if(changeCb) changeCb.checked=true;
if(btn) btn.click();
});
}
if(btn)
btn.addEventListener("click", function (e){
e.preventDefault();
var changeWrap=self._flow8ChangeClinicWrap;
var changeCb=self._flow8ChangeClinicInput;
var forceNegativePath =
changeCb &&
changeCb.checked===true &&
self.bookingData.flow8HygieneOnlyPath===true &&
self.bookingData.flow8NegativePath!==true &&
changeWrap &&
!changeWrap.classList.contains("d-none");
if(forceNegativePath){
self.bookingData.flow8HygieneOnlyPath=false;
self.bookingData.flow8NegativePath=true;
self._syncFlow8SoloIgieneSlotsSectionClass();
self.goToSectionSelectionByComune(false);
return;
}
if(self.bookingData.flow8NegativePath===true){
self.goToSectionSelectionByComune(false);
}else{
self.onFlow8PositiveContinueClick();
}});
this._syncFlow8ResultRefs(resultRow);
return resultRow;
}
hideResultContainer(){
var row=this.formSection4.querySelector(".flow8-api-result");
if(!row) return;
row.classList.add("d-none");
var box=row.querySelector(".flow8-api-result-box");
if(box) box.innerHTML="";
var act=row.querySelector(".flow8-api-result-actions");
if(act){
act.classList.add("d-none");
var changeWrap=act.querySelector(".flow8-change-clinic-option");
var changeCb =
(changeWrap&&(changeWrap.querySelector("input.flow8-change-clinic-cb")||changeWrap.querySelector('input[type="checkbox"]'))) ||
null;
if(changeWrap) changeWrap.classList.add("d-none");
if(changeCb) changeCb.checked=false;
var altTr=act.querySelector(".flow8-change-clinic-trigger-btn");
if(altTr) altTr.classList.add("d-none");
var orEl=act.querySelector(".flow8-api-result-buttons-or");
if(orEl) orEl.classList.add("d-none");
}
this._syncFlow8ResultRefs(row);
}
renderApiError(msg){
var row=this.ensureResultContainer();
var box=row.querySelector(".flow8-api-result-box");
if(!box) return;
box.innerHTML =
"<p><strong>Errore</strong></p><p>" + (msg||"Si è verificato un errore durante il controllo.") + "</p>";
row.classList.remove("d-none");
this._showFlow8SelectionByComune();
}
_buildFlow8NegativeEligibilityMessageHtml(d){
if(d&&typeof d==="object"){
if(typeof d.html==="string"&&d.html.trim()) return d.html;
if(typeof d.message==="string"&&d.message.trim()) return "<p>" + d.message + "</p>";
}
return FLOW8.MSG_NEG_ELIGIBILITY;
}
renderApiResult(response){
var row=this.ensureResultContainer();
var box=row.querySelector(".flow8-api-result-box");
var act=row.querySelector(".flow8-api-result-actions");
if(!box) return;
var d=response&&response.data;
if(d&&typeof d==="object"){
this.bookingData.igieneEligibility=d;
this.bookingData.igieneEligibilityJwt=d.JWT||null;
var rawEsito=this._flow8GetEsito(d);
this.bookingData.igieneEligibilityEsito=typeof rawEsito!=="undefined" ? rawEsito:null;
this.bookingData.flow8ApiToken=d.JWT||null;
this.bookingData.flow8NegativePath=this._flow8EsitoIsNegative(d);
}
var neg = !!(d&&this._flow8EsitoIsNegative(d));
var pos = !!(d&&this._flow8EsitoIsPositive(d));
var html="";
console.log("bookingdata", this.bookingData);
console.log("neg", neg);
console.log("pos", pos);
if(pos){
this.bookingData.flow8HygieneOnlyPath=true;
this.bookingData.flow8NegativePath=false;
if(typeof d.html==="string"&&d.html.trim()){
html=d.html;
}else if(typeof d.message==="string"&&d.message.trim()){
html="<p>" + d.message + "</p>";
}else{
html=this.buildFlow8PositiveEligibilityHtml(d);
}}else if(neg){
this.bookingData.flow8HygieneOnlyPath=false;
this.bookingData.flow8NegativePath=true;
this._setFlow8EligibilitySubtitle(FLOW8.SUB_NEG);
html=this._buildFlow8NegativeEligibilityMessageHtml(d);
}else if(d){
this.bookingData.flow8HygieneOnlyPath=false;
if(typeof d.html==="string"&&d.html.trim()) html=d.html;
else if(typeof d.message==="string"&&d.message.trim()) html="<p>" + d.message + "</p>";
else if(typeof this._flow8GetEsito(d)!=="undefined"){
var ex=this._flow8GetEsito(d);
html =
"<p><strong>Controllo completato.</strong></p><p>Esito: " +
(this._flow8EsitoIsPositive(d) ? "positivo":this._flow8EsitoIsNegative(d) ? "negativo":String(ex)) +
".</p>";
}}
box.innerHTML=html||"<p><strong>Errore durante la chiamata API.</strong></p>";
if(act) act.classList.toggle("d-none", !(neg||pos));
this._syncFlow8ResultRefs(row);
var changeClinicWrap=this._flow8ChangeClinicWrap;
var changeClinicInput=this._flow8ChangeClinicInput;
var triggerAltBtn=act&&act.querySelector(".flow8-change-clinic-trigger-btn");
var orBetweenBtns=act&&act.querySelector(".flow8-api-result-buttons-or");
if(pos&&changeClinicWrap&&changeClinicInput){
changeClinicWrap.classList.remove("d-none");
changeClinicInput.checked=false;
if(triggerAltBtn) triggerAltBtn.classList.remove("d-none");
if(orBetweenBtns) orBetweenBtns.classList.remove("d-none");
}else if(changeClinicWrap&&changeClinicInput){
changeClinicWrap.classList.add("d-none");
changeClinicInput.checked=false;
if(triggerAltBtn) triggerAltBtn.classList.add("d-none");
if(orBetweenBtns) orBetweenBtns.classList.add("d-none");
}
if(pos){
this._hideFlow8SelectionByComune();
}else{
this._showFlow8SelectionByComune();
}
row.classList.remove("d-none");
this._syncFlow8SoloIgieneSlotsSectionClass();
}
onFlow8PositiveContinueClick(){
if(!this.bookingData.flow8HygieneOnlyPath) return;
var clinicaId=this._getClinicaIdForPositiveIgieneSlots();
if(!clinicaId){
this.goToSectionSelectionByComune(true);
return;
}
this._enterPositiveFlowSkipComune(clinicaId);
}
_enterPositiveFlowSkipComune(clinicaId){
this.ensureSectionSelectionOrderForFlow8();
this.hideRequestLoader();
this.hideResultContainer();
if(this.formSection4){
this.formSection4.classList.remove("active");
this.formSection4.classList.add("done");
}
this._deactivateBookingSteps2345();
this.bookingData.flow8NegativePath=false;
this.bookingData.flow8HygieneOnlyPath=true;
if(!this.bookingData.location) this.bookingData.location={};
this.bookingData.location.code=clinicaId;
if(this.formSectionSelectByComune){
this.formSectionSelectByComune.classList.remove("active");
this.formSectionSelectByComune.classList.add("done");
}
this._syncFlow8SoloIgieneSlotsSectionClass();
this.callPositivePathInitialIgieneSlots();
}
onFlow8PositiveAfterComuneCta(){
if(!this.bookingData.flow8HygieneOnlyPath) return;
this.callPositivePathInitialIgieneSlots();
}
buildInitialPositiveIgieneSlotsPayload(){
var parsed=this._getBookingDateParsed();
var dataInizio=this._formatDateYmdMidnight(parsed.start);
var clinicaSingle=this._getClinicaIdForPositiveIgieneSlots();
var cid=clinicaSingle ? [clinicaSingle]:[];
var p=Object.assign({
JWT: this._flow8Jwt(),
SessioneId: this.getPhpSessionId(),
ClinicaId: cid,
DataInizio: dataInizio,
PreferenzeOrario: ["ASAP"],
PageUrl: this.bookingData.pageUrl||window.location.href,
Source: "Website",
PhoneNumber: this._phoneFull(),
origin: this._bookingOriginHeaderUrl(),
},
this._patientFieldsForIgieneApi()
);
var pidAp0=this._flow8PazienteIdForBookingApi();
if(pidAp0) p.PazienteId=pidAp0;
var coords=this.getSelectionByComuneCoords();
if(coords[0]) p.Posizione1=coords[0];
if(coords[1]) p.Posizione2=coords[1];
if(this.passEvodentSessionBearer){
var evIg=this._flow8EvodentBearerFromSession();
if(evIg) p.evodent_bearer_token=evIg;
}
return p;
}
handlePositivePathHygieneSlotsResponse(response){
var g=this._flow8GridSelectors();
var h3=this.formSection5&&this.formSection5.querySelector("h3");
this._applySlotsResponse(this.sectionSlot, "booking-owl-reservation", response, {
h3El: h3,
h3Text: FLOW8.H3_IGIENE,
mapParent: g.mapParent,
mapId: "google-booking-map",
box4: g.box4,
});
this.bookingData.flow8SlotsShown=true;
}
_activateSection5ForSlots(h3Text){
if(!this.formSection5) return;
this.formSection5.style.setProperty("display", "flex", "important");
this.formSection5.classList.add("active");
var h3=this.formSection5.querySelector("h3");
if(h3) h3.textContent=h3Text;
}
callPositivePathInitialIgieneSlots(){
var url=this._getAjaxUrl();
if(!url||!this.formSection5||!this.sectionSlot) return;
if(this.bookingData.flow8HygieneOnlyPath&&!this.bookingData.flow8NegativePath){
this._hideFlow8SelectionByComune();
}
if(this.formSectionSelectByComune){
this.formSectionSelectByComune.classList.remove("active");
this.formSectionSelectByComune.classList.add("done");
}
this._activateSection5ForSlots(FLOW8.H3_IGIENE);
this._syncFlow8SoloIgieneSlotsSectionClass();
this.sectionSlot.showLoader();
this.bookingScroll();
var self=this;
jQuery.ajax({
url: url,
type: "POST",
data: { action: this.igieneSlotsApiAction, data: JSON.stringify(this.buildInitialPositiveIgieneSlotsPayload()) },
success: function (res){
self.sectionSlot.hideLoader();
if(res&&res.success&&res.data){
self.handlePositivePathHygieneSlotsResponse(res);
}else{
self._owlHtml("booking-owl-reservation", FLOW8.HTML_NO_SLOTS);
}
self.bookingScroll();
},
error: function (){
self.sectionSlot.hideLoader();
self._owlHtml("booking-owl-reservation", FLOW8.HTML_ERR_SLOTS);
self.bookingScroll();
},
});
}
callStep1Api(){
var url=this._getAjaxUrl();
if(!url){
this.hideRequestLoader();
this.renderApiError("Endpoint AJAX non configurato.");
return;
}
this._syncMarketingProfile();
var pageUrlNoQuery=window.location.protocol + "//" + window.location.host + window.location.pathname;
var stepData={
firstname: this.bookingData.firstname||"",
lastname: this.bookingData.lastname||"",
email: this.bookingData.email||"",
phone: this.bookingData.phone||"",
phone_prefix: this.bookingData.phone_prefix||"",
cf: this.bookingData.cf||"",
marketing: this.bookingData.marketing,
profile: this.bookingData.profile,
prestazione_id: this.bookingData.customFlowId||"",
area_specializzazione_ids: Array.isArray(this.bookingData.areaSpecializzazioneIds)
? this.bookingData.areaSpecializzazioneIds
: [],
pageUrl: pageUrlNoQuery,
origin: pageUrlNoQuery,
};
if(this.passEvodentSessionBearer){
var evBearer=this._flow8EvodentBearerFromSession();
if(evBearer) stepData.evodent_bearer_token=evBearer;
}
var payload={
action: this.flowApiAction,
data: JSON.stringify(stepData),
};
this.hideResultContainer();
var self=this;
jQuery.ajax({
url: url,
type: "POST",
data: payload,
success: function (res){
self.hideRequestLoader();
self.renderApiResult(res);
self.bookingScroll();
},
error: function (xhr){
self.hideRequestLoader();
self.renderApiError(self._ajaxErrorMessage(xhr, "Errore durante la chiamata API."));
self.bookingScroll();
},
});
}
handleSubmitIfFlow8(hasError){
if(!this.isSelected()||hasError) return false;
if(this.bookingData.flow8RicontattoContactPath) return false;
this.showRequestLoader();
this.hideStepDatiFormContent();
this.callStep1Api();
return true;
}
enterFlow8RicontattoFromSlots(){
if(!this.isSelected()||!this.formSection4) return;
this.bookingData.flow8RicontattoContactPath=true;
this.bookingData.flow8SlotsShown=false;
try {
if(typeof globalThis!=="undefined") globalThis.directBooking=false;
} catch (e){
try {
window.directBooking=false;
} catch (e2){ }}
this.hideRequestLoader();
this.hideResultContainer();
this.restoreDefaultLabels();
this.showStepDatiFormContent();
if(this.pageBooking) this.pageBooking.classList.remove("sos");
this._hideFlow8SelectionByComune();
this._deactivateBookingSteps2345();
if(this.formSection5){
this.formSection5.classList.remove("active");
this.formSection5.classList.add("done");
var h3=this.formSection5.querySelector("h3");
if(h3) h3.textContent="Richiesta di essere ricontattato";
}
if(this.formSection6){
this.formSection6.classList.remove("active");
this.formSection6.classList.add("done");
this.formSection6.style.setProperty("display", "none", "important");
}
if(this.formSection7){
this.formSection7.classList.remove("active", "done");
this.formSection7.style.setProperty("display", "none", "important");
}
if(this.subtitleSection4No) this.subtitleSection4No.classList.remove("d-none");
else {
var rowSub=this.formSection4.querySelector(".row.subtitle");
if(rowSub) rowSub.classList.remove("d-none");
}
if(this.subtitleSection4Yes) this.subtitleSection4Yes.classList.add("d-none");
var sumBox=this.formSection4.querySelector(".summary-box");
if(sumBox) sumBox.classList.add("d-none");
this.formSection4.classList.remove("done");
this.formSection4.classList.add("active");
if(typeof window.showBookingFields==="function") window.showBookingFields(false);
this.bookingScroll();
}
bindFlow8TurnOffDirectBooking(){
var pb=this.pageBooking;
if(!pb) return;
var self=this;
pb.addEventListener("click", function (e){
var a=e.target&&e.target.closest&&e.target.closest("a.turn-of-direct-booking");
if(!a) return;
if(!self.isSelected()) return;
e.preventDefault();
e.stopPropagation();
self.enterFlow8RicontattoFromSlots();
});
}
handleAfterEsigenzaSelection(showSpecialista){
if(!this.isSelected()) return false;
this.ensureSectionSelectionOrderForFlow8();
this.setStep1ButtonLabel();
this._deactivateBookingSteps2345();
if(showSpecialista&&this.formSection1Specialista){
this.bookingData.areaSpecializzazioneIds=[];
this.formSection1Specialista.classList.remove("d-none");
this.formSection1Specialista.setAttribute("aria-hidden", "false");
this.formSection1Specialista.classList.add("active");
this.bookingScroll();
return true;
}
this.showStepDati();
return true;
}
handleAfterSpecialistaSelection(){
if(!this.isSelected()) return false;
this.ensureSectionSelectionOrderForFlow8();
this.setStep1ButtonLabel();
this.showStepDati();
return true;
}
showStepDati(){
this.hideRequestLoader();
this.showStepDatiFormContent();
if(this.formSection1Specialista){
this.formSection1Specialista.classList.add("d-none");
this.formSection1Specialista.setAttribute("aria-hidden", "true");
this.formSection1Specialista.classList.remove("active", "done");
}
if(this.formSection4) this.formSection4.classList.add("active");
if(this.subtitleSection4No) this.subtitleSection4No.classList.add("d-none");
if(this.subtitleSection4Yes) this.subtitleSection4Yes.classList.remove("d-none");
if(this.pageBooking) this.pageBooking.classList.remove("sos");
if(this.isSelected()){
this._showFlow8SelectionByComune();
}
this.bookingScroll();
}
goToSectionSelectionByComune(fromPositiveFlow){
if(!this.formSectionSelectByComune) return;
this._showFlow8SelectionByComune();
this.ensureSectionSelectionOrderForFlow8();
this.hideRequestLoader();
this.hideResultContainer();
if(this.formSection4){
this.formSection4.classList.remove("active");
this.formSection4.classList.add("done");
}
this._deactivateBookingSteps2345();
if(fromPositiveFlow){
this.bookingData.flow8NegativePath=false;
this.bookingData.flow8HygieneOnlyPath=true;
}else{
this.bookingData.flow8NegativePath=true;
}
this.formSectionSelectByComune.classList.remove("done");
this.formSectionSelectByComune.classList.add("active");
this.bookingScroll();
this._syncFlow8SoloIgieneSlotsSectionClass();
}
bindSectionSelectionByComuneCta(){
if(!this.formSectionSelectByComune) return;
var cta=this.formSectionSelectByComune.querySelector(".cta");
if(!cta) return;
var self=this;
cta.addEventListener("click", function (e){
if(!self.isSelected()) return;
if(!self.bookingData.flow8NegativePath&&!self.bookingData.flow8HygieneOnlyPath) return;
e.preventDefault();
e.stopImmediatePropagation();
var coords=self.getSelectionByComuneCoords();
var hasZone=coords&&coords.length > 0;
var cb=self.formSectionSelectByComune.querySelector("#clinic-search");
var hasClinic=cb&&cb.checked&&self.bookingData.location&&self.bookingData.location.code;
var errRow=self.formSectionSelectByComune.querySelector(".selection-by-comune-error");
var errDiv=errRow&&errRow.querySelector(".error");
var errP=errDiv&&errDiv.querySelector("p");
if(!hasZone&&!hasClinic){
if(errDiv) errDiv.classList.add("active");
if(errP) errP.textContent="Inserisci una zona di preferenza o seleziona un centro";
return;
}
if(errDiv) errDiv.classList.remove("active");
if(errP) errP.textContent="";
if(self.bookingData.flow8NegativePath){
self.callFollowupSlotsApi();
}else{
self.onFlow8PositiveAfterComuneCta();
}});
}
getSelectionByComuneCoords(){
if(!this.formSectionSelectByComune) return [];
var out=[];
this.formSectionSelectByComune.querySelectorAll(".autocomplete.booking-address").forEach(function (input){
var lat=input.parentNode.querySelector(".booking-lat");
var lng=input.parentNode.querySelector(".booking-lng");
if(lat&&lng&&lat.value&&lng.value){
out.push({ Latitudine: String(lat.value), Longitudine: String(lng.value) });
}});
if(out.length) return out;
if(typeof getBookingAddressCoords==="function"){
return getBookingAddressCoords().filter(Boolean);
}
return out;
}
buildFollowupSlotsPayload(){
var parsed=this._getBookingDateParsed();
var start=parsed.start;
var dateIn=parsed.dateIn;
var end=new Date(start.getTime());
end.setDate(end.getDate() + 60);
var coords=this.getSelectionByComuneCoords();
var cid=this.bookingData.location&&this.bookingData.location.code ? this.bookingData.location.code:null;
var p={
SessioneId: this.getPhpSessionId(),
DataInizio: dateIn,
DataFine: end.toISOString().split(".")[0] + "Z",
ClinicaId: cid ? [cid]:[],
PreferenzeOrario: ["ASAP"],
PageUrl: this.bookingData.pageUrl||window.location.href,
Source: "Website",
PhoneNumber: this._phoneFull(),
AreaSpecializzazioneId: Array.isArray(this.bookingData.areaSpecializzazioneIds) ? this.bookingData.areaSpecializzazioneIds:[],
JWT: this._flow8Jwt(),
origin: this._bookingOriginHeaderUrl(),
};
if(coords[0]) p.Posizione1=coords[0];
if(coords[1]) p.Posizione2=coords[1];
if(this.passEvodentSessionBearer){
var evFu=this._flow8EvodentBearerFromSession();
if(evFu) p.evodent_bearer_token=evFu;
}
var pidFu=this._flow8PazienteIdForBookingApi();
if(pidFu) p.PazienteId=pidFu;
return p;
}
_applySlotsResponse(sectionSlot, containerId, response, mapOpts){
var container=document.getElementById(containerId);
if(!container||!sectionSlot) return;
container.innerHTML="";
var free=response&&response.data ? response.data.FreeOperatorSlots:null;
if(!free||!Object.keys(free).length){
container.innerHTML='<div class="no-slots-message"><p>Nessuno slot disponibile</p></div>';
return;
}
sectionSlot.reservationData=Object.assign({}, free);
sectionSlot.clinicsData =
response.data.Cliniche&&typeof response.data.Cliniche==="object" ? Object.assign({}, response.data.Cliniche):{};
Object.keys(free).forEach(function (date){
container.innerHTML +=sectionSlot.generateSlotHtml(date);
});
sectionSlot.initializeCarouselBooking();
sectionSlot.selectFirstAvailableDay();
if(mapOpts.h3El) mapOpts.h3El.textContent=mapOpts.h3Text;
var mapParent=mapOpts.mapParent;
if(mapParent&&response.data&&response.data.Cliniche){
mapParent.innerHTML="";
var div=document.createElement("div");
div.id=mapOpts.mapId;
if(mapOpts.mapMinHeight) div.style.minHeight=mapOpts.mapMinHeight;
mapParent.appendChild(div);
sectionSlot.initBookingMap(response.data.Cliniche, div);
if(mapOpts.onMapReady) mapOpts.onMapReady(sectionSlot);
if(mapOpts.box4) mapOpts.box4.classList.remove("d-none");
}}
handleFollowupSlotsResponse(response){
var g=this._flow8GridSelectors();
var h3=this.formSection5&&this.formSection5.querySelector("h3");
this._applySlotsResponse(this.sectionSlot, "booking-owl-reservation", response, {
h3El: h3,
h3Text: FLOW8.H3_CHECKUP,
mapParent: g.mapParent,
mapId: "google-booking-map",
box4: g.box4,
});
this.bookingData.flow8SlotsShown=true;
}
callFollowupSlotsApi(){
var url=this._getAjaxUrl();
if(!url) return;
this.formSectionSelectByComune.classList.remove("active");
this.formSectionSelectByComune.classList.add("done");
this._activateSection5ForSlots(FLOW8.H3_CHECKUP);
this.sectionSlot.showLoader();
this.bookingScroll();
var self=this;
jQuery.ajax({
url: url,
type: "POST",
data: { action: this.followupSlotsApiAction, data: JSON.stringify(this.buildFollowupSlotsPayload()) },
success: function (res){
self.sectionSlot.hideLoader();
self.handleFollowupSlotsResponse(res);
self.bookingScroll();
},
error: function (){
self.sectionSlot.hideLoader();
self._owlHtml("booking-owl-reservation", FLOW8.HTML_ERR_SLOTS);
self.bookingScroll();
},
});
}
_dataInizioForIgieneSlots(slot, day){
var t=slot&&slot.DataInizioSlot ? String(slot.DataInizioSlot):"";
if(t.length===5) t +=":00";
var fallback=(day||"") + "T" + t;
if(!day||!t) return fallback;
var d=new Date(day + "T" + t);
if(isNaN(d.getTime())) return fallback;
if(this.bookingData.flow8NegativePath){
d.setTime(d.getTime() + 2 * 60 * 60 * 1000);
}
return (
d.getFullYear() +
"-" +
this._pad2(d.getMonth() + 1) +
"-" +
this._pad2(d.getDate()) +
"T" +
this._pad2(d.getHours()) +
":" +
this._pad2(d.getMinutes()) +
":" +
this._pad2(d.getSeconds())
);
}
buildIgieneSlotsPayload(slot, clinicId, day){
var payload=Object.assign({
JWT: this._flow8Jwt(),
SessioneId: this.getPhpSessionId(),
ClinicaId: clinicId ? [clinicId]:[],
DataInizio: this._dataInizioForIgieneSlots(slot, day),
PreferenzeOrario: ["ASAP"],
PageUrl: this.bookingData.pageUrl||window.location.href,
Source: "Website",
PhoneNumber: this._phoneFull(),
origin: this._bookingOriginHeaderUrl(),
},
this._patientFieldsForIgieneApi()
);
if(this.bookingData.flow8NegativePath){
var c=this.getSelectionByComuneCoords();
if(c[0]) payload.Posizione1=c[0];
if(c[1]) payload.Posizione2=c[1];
}else{
var pid=this._flow8PazienteIdForBookingApi();
if(pid) payload.PazienteId=pid;
}
if(this.passEvodentSessionBearer){
var evIg2=this._flow8EvodentBearerFromSession();
if(evIg2) payload.evodent_bearer_token=evIg2;
}
return payload;
}
handleIgieneSlotsResponse(response){
if(!this.sectionSlotStep2||!this.formSection6) return;
var h3=this.formSection6.querySelector("h3");
var mapParent=this.formSection6.querySelector(".grid-booking-box-3");
var box4=this.formSection6.querySelector(".grid-booking-box-4.d-none");
this._applySlotsResponse(this.sectionSlotStep2, "booking-owl-reservation-step2", response, {
h3El: h3,
h3Text: FLOW8.H3_IGIENE,
mapParent: mapParent,
mapId: "google-booking-map-step2",
mapMinHeight: "360px",
box4: box4,
onMapReady: function (slot){
setTimeout(function (){
if(slot&&slot.map&&window.google&&window.google.maps&&window.google.maps.event){
window.google.maps.event.trigger(slot.map, "resize");
}}, 150);
},
});
}
_step2LoaderTarget(){
return this.sectionSlotStep2||this.sectionSlot;
}
callIgieneSlotsApi(slot, clinicId, day){
var url=this._getAjaxUrl();
if(!url) return;
this.formSection5.classList.remove("active");
this.formSection5.classList.add("done");
if(this.formSection6){
this.formSection6.style.setProperty("display", "flex", "important");
this.formSection6.classList.add("active");
var h3=this.formSection6.querySelector("h3");
if(h3) h3.textContent=FLOW8.H3_IGIENE;
this._syncFlow8SoloIgieneSlotsSectionClass();
}
var loader=this._step2LoaderTarget();
if(loader) loader.showLoader();
this.bookingScroll();
var self=this;
jQuery.ajax({
url: url,
type: "POST",
data: { action: this.igieneSlotsApiAction, data: JSON.stringify(this.buildIgieneSlotsPayload(slot, clinicId, day)) },
success: function (res){
var lt=self._step2LoaderTarget();
if(lt) lt.hideLoader();
self.handleIgieneSlotsResponse(res);
self.bookingScroll();
},
error: function (){
var lt=self._step2LoaderTarget();
if(lt) lt.hideLoader();
self._owlHtml("booking-owl-reservation-step2", FLOW8.HTML_ERR_SLOTS);
self.bookingScroll();
},
});
}
onFirstSlotConfirmed(payload){
if(this.bookingData.flow8HygieneOnlyPath&&!this.bookingData.flow8NegativePath){
this.bookingData.flow8FirstAppointment=null;
this.showFlow8HygieneOnlySummary();
return;
}
this.bookingData.flow8FirstAppointment={
slot: payload.slot,
clinicId: payload.clinicId,
day: payload.day,
};
this.callIgieneSlotsApi(payload.slot, payload.clinicId, payload.day);
}
getClinicInfo(clinicId, clinicsData){
if(!clinicsData||!clinicId) return { title: "", address: "", gmaps_place_id: "" };
var c=clinicsData[clinicId];
if(!c&&typeof clinicId==="string"&&/^\d+$/.test(clinicId)) c=clinicsData[clinicId.padStart(3, "0")];
return c
? {
title: c.title||"",
address: c.address||"",
gmaps_place_id: c.gmaps_place_id||"",
}
: { title: "", address: "", gmaps_place_id: "" };}
_flow8AddressSvg(){
return (
'<svg width="9" height="13" viewBox="0 0 9 13" fill="none" xmlns="http://www.w3.org/2000/svg">' +
'<path d="M4.4888 0.000138285C7.90988 -0.0264554 10.1225 3.78793 8.40472 6.85967C7.28874 8.85534 6.01427 10.7558 4.82372 12.7073C4.60557 13.0649 4.45675 13.1203 4.21829 12.7308C2.99617 10.7346 1.67283 8.79805 0.554627 6.74197C-1.08666 3.72457 1.11928 0.0265678 4.4888 0.000138285ZM4.45373 7.17009C5.82023 7.20194 6.96334 6.06645 6.99063 4.65026C7.01696 3.28692 5.93272 2.1104 4.60271 2.05934C3.23019 2.00648 2.07787 3.11932 2.03789 4.53633C1.99791 5.95253 3.08549 7.13841 4.45373 7.17026V7.17009Z" fill="#295782"/>' +
"</svg>"
);
}
_flow8MapSvg(){
return (
'<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">' +
'<path d="M0.164159 9.94177C0.265179 10.0081 0.39356 10.0175 0.504051 9.96913L3.57256 8.60511L6.64106 9.96913C6.64632 9.97124 6.65264 9.96913 6.6579 9.97229C6.74419 10.0112 6.8431 10.0091 6.92834 9.96598C6.9336 9.96387 6.94097 9.96598 6.94623 9.96177L9.80217 8.53354C9.8611 8.50407 9.91161 8.45882 9.94633 8.40198C9.98106 8.34515 10 8.28095 10 8.21464V0.357829C10 0.233635 9.93581 0.118914 9.83058 0.0536602C9.72535 -0.011594 9.59381 -0.0179089 9.48332 0.0378729L6.77786 1.39137L3.71567 0.031558C3.71567 0.031558 3.70515 0.029453 3.69988 0.027348C3.6862 0.0220856 3.67252 0.0178757 3.65779 0.0147182C3.64306 0.0105083 3.62938 0.00840329 3.61465 0.00629832C3.58518 0.00419334 3.55677 0.00419334 3.52731 0.00629832C3.51257 0.00840329 3.49784 0.0115607 3.48416 0.0147182C3.46943 0.0178757 3.45575 0.0220856 3.44207 0.027348C3.43681 0.029453 3.4305 0.029453 3.42629 0.031558L0.212564 1.45978C0.149426 1.4882 0.0957592 1.53346 0.0578765 1.59134C0.0199937 1.64923 0 1.71659 0 1.78605V9.64181C0 9.76285 0.0610334 9.87546 0.162054 9.94072L0.164159 9.94177ZM9.28338 7.99362L7.1409 9.06505V2.00707L9.28338 0.935644V7.99362ZM6.42744 9.09347L3.92823 7.98204V0.908279L6.42744 2.01865V9.09241V9.09347ZM0.715564 2.01865L3.21477 0.908279V7.98204L0.715564 9.09241V2.01865Z" fill="#295782"/>' +
"</svg>"
);
}
_flow8CalendarSvg(){
return (
'<svg width="11" height="11" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">' +
'<path d="M7 2h2v2h6V2h2v2h3a2 2 0 012 2v14a2 2 0 01-2 2H4a2 2 0 01-2-2V6a2 2 0 012-2h3V2zm11 8H6v10h12V10z" fill="#295782"/>' +
"</svg>"
);
}
_flow8ClockSvg(){
return (
'<svg width="11" height="11" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">' +
'<circle cx="12" cy="12" r="9" stroke="#295782" stroke-width="2"/>' +
'<path d="M12 7v5l3 2" stroke="#295782" stroke-width="2" stroke-linecap="round" fill="none"/>' +
"</svg>"
);
}
_flow8MapsUrl(clinica){
if(clinica&&clinica.gmaps_place_id){
return "https://www.google.com/maps/search/?api=1&query=maida&query_place_id=" + encodeURIComponent(String(clinica.gmaps_place_id));
}
if(clinica&&clinica.address){
return "https://www.google.com/maps/search/?api=1&query=" + encodeURIComponent(String(clinica.address));
}
return "#";
}
_fillFlow8SummaryCard(card, clinica, dayStr, slot){
if(!card) return;
var addrIcon=card.querySelector(".flow8-summary-icon-address");
var mapIcon=card.querySelector(".flow8-summary-icon-map");
var dateIcon=card.querySelector(".flow8-summary-icon-date");
var timeIcon=card.querySelector(".flow8-summary-icon-time");
if(addrIcon) addrIcon.innerHTML=this._flow8AddressSvg();
if(mapIcon) mapIcon.innerHTML=this._flow8MapSvg();
if(dateIcon) dateIcon.innerHTML=this._flow8CalendarSvg();
if(timeIcon) timeIcon.innerHTML=this._flow8ClockSvg();
var nameEl=card.querySelector(".flow8-card-clinica");
var addressEl=card.querySelector(".flow8-card-address");
var dataEl=card.querySelector(".flow8-card-data");
var oraEl=card.querySelector(".flow8-card-ora");
var mapA=card.querySelector(".flow8-maps-link");
var mapsRow=card.querySelector(".maps-link-container");
if(nameEl) nameEl.textContent=clinica.title||"";
if(addressEl) addressEl.textContent=clinica.address||"";
if(dataEl) dataEl.textContent=dayStr||"";
if(oraEl) oraEl.textContent=slot&&slot.DataInizioSlot ? "ore " + slot.DataInizioSlot:"";
if(mapA){
var mapUrl=this._flow8MapsUrl(clinica);
mapA.setAttribute("href", mapUrl);
if(mapsRow) mapsRow.classList.toggle("d-none", mapUrl==="#");
}}
formatDayForDisplay(dayStr){
if(!dayStr) return "";
var d=new Date(dayStr + "T12:00:00");
return isNaN(d.getTime()) ? "":d.toLocaleDateString("it-IT", { day: "2-digit", month: "long", year: "numeric" });
}
formatDayShortNumeric(dayStr){
if(!dayStr) return "";
var m=String(dayStr).match(/^(\d{4})-(\d{2})-(\d{2})/);
if(m) return m[3] + "/" + m[2] + "/" + m[1];
var d=new Date(dayStr + "T12:00:00");
if(isNaN(d.getTime())) return "";
return this._pad2(d.getDate()) + "/" + this._pad2(d.getMonth() + 1) + "/" + d.getFullYear();
}
showFlow8HygieneOnlySummary(){
var appt={
slot: this.bookingData.selectedSlot,
clinicId: this.bookingData.selectedClinicId,
day: this.bookingData.selectedDay,
};
if(!appt.slot||!appt.day||!this.formSection7) return;
this._clearFlow8SummaryError();
var c=this.getClinicInfo(appt.clinicId, this.sectionSlot.clinicsData);
var checkCard=this.formSection7.querySelector(".flow8-card-checkup");
var igieneCard=this.formSection7.querySelector(".flow8-card-igiene");
if(checkCard) checkCard.classList.add("d-none");
if(igieneCard) igieneCard.classList.remove("d-none");
this._fillFlow8SummaryCard(igieneCard, c, this.formatDayShortNumeric(appt.day), appt.slot);
if(this.formSection5){
this.formSection5.classList.remove("active");
this.formSection5.classList.add("done");
}
if(this.formSection6){
this.formSection6.classList.remove("active");
this.formSection6.classList.add("done");
}
this.formSection7.style.setProperty("display", "flex", "important");
this.formSection7.classList.add("active");
var backWrap=this.formSection7.querySelector(".flow8-back-to-eligibility-wrap");
if(backWrap) backWrap.classList.add("d-none");
this._syncFlow8SoloIgieneSlotsSectionClass();
this.bookingScroll();
}
_restoreFlow8NegativeEligibilityViewFromSummary(){
if(!this.formSection4||!this.bookingData.igieneEligibility) return;
this.hideRequestLoader();
this.ensureSectionSelectionOrderForFlow8();
if(this.formSection7){
this.formSection7.classList.remove("active");
this.formSection7.style.setProperty("display", "none", "important");
}
if(this.formSection5){
this.formSection5.classList.remove("active", "done");
this.formSection5.style.setProperty("display", "none", "important");
}
if(this.formSection6){
this.formSection6.classList.remove("active", "done");
this.formSection6.style.setProperty("display", "none", "important");
}
this.bookingData.flow8NegativePath=true;
this.bookingData.flow8HygieneOnlyPath=false;
this._syncFlow8SoloIgieneSlotsSectionClass();
this.formSection4.classList.remove("done");
this.formSection4.classList.add("active");
this.hideStepDatiFormContent();
var row=this.ensureResultContainer();
var box=row.querySelector(".flow8-api-result-box");
var act=row.querySelector(".flow8-api-result-actions");
if(!box) return;
box.innerHTML=this._buildFlow8NegativeEligibilityMessageHtml(this.bookingData.igieneEligibility);
if(act) act.classList.remove("d-none");
this._syncFlow8ResultRefs(row);
if(this._flow8ChangeClinicWrap) this._flow8ChangeClinicWrap.classList.add("d-none");
if(this._flow8ChangeClinicInput) this._flow8ChangeClinicInput.checked=false;
var altFromSummary=row.querySelector(".flow8-change-clinic-trigger-btn");
if(altFromSummary) altFromSummary.classList.add("d-none");
var orFromSummary=row.querySelector(".flow8-api-result-buttons-or");
if(orFromSummary) orFromSummary.classList.add("d-none");
row.classList.remove("d-none");
this._hideFlow8SelectionByComune();
this._setFlow8EligibilitySubtitle(FLOW8.SUB_NEG);
this.bookingScroll();
}
showFlow8SummarySection(){
var first=this.bookingData.flow8FirstAppointment;
var second={
slot: this.bookingData.selectedSlot,
clinicId: this.bookingData.selectedClinicId,
day: this.bookingData.selectedDay,
};
if(!first||!second.slot||!second.day||!this.formSection7) return;
var checkCard=this.formSection7.querySelector(".flow8-card-checkup");
var igieneCard=this.formSection7.querySelector(".flow8-card-igiene");
if(checkCard) checkCard.classList.remove("d-none");
if(igieneCard) igieneCard.classList.remove("d-none");
var c1=this.getClinicInfo(first.clinicId, this.sectionSlot.clinicsData);
var c2=this.getClinicInfo(second.clinicId, this.sectionSlotStep2.clinicsData);
this._fillFlow8SummaryCard(checkCard, c1, this.formatDayShortNumeric(first.day), first.slot);
this._fillFlow8SummaryCard(igieneCard, c2, this.formatDayShortNumeric(second.day), second.slot);
if(this.formSection6){
this.formSection6.classList.remove("active");
this.formSection6.classList.add("done");
}
this.formSection7.style.setProperty("display", "flex", "important");
this.formSection7.classList.add("active");
var backWrap=this.formSection7.querySelector(".flow8-back-to-eligibility-wrap");
if(backWrap){
backWrap.classList.toggle("d-none", this.bookingData.flow8NegativePath!==true);
}
this._syncFlow8SoloIgieneSlotsSectionClass();
this.bookingScroll();
}
bindFlow8ConfirmAppointments(){
var btn=this.formSection7&&this.formSection7.querySelector(".flow8-confirm-appointments");
if(!btn) return;
var self=this;
btn.addEventListener("click", function (e){
e.preventDefault();
self._clearFlow8SummaryError();
self.callFlow8AppointmentsApi();
});
}
bindFlow8BackToEligibility(){
var wrap=this.formSection7&&this.formSection7.querySelector(".flow8-back-to-eligibility-wrap");
var btn=wrap&&wrap.querySelector(".flow8-back-to-eligibility");
if(!btn) return;
var self=this;
btn.addEventListener("click", function (e){
e.preventDefault();
if(self.bookingData.flow8NegativePath!==true) return;
self._restoreFlow8NegativeEligibilityViewFromSummary();
});
}
_flow8BuildAppuntamentiOperatore(day, slot){
if(!slot||!day) return [];
var timeStart=slot.DataInizioSlot!=null ? String(slot.DataInizioSlot):"00:00";
var timeEnd=slot.DataFineSlot!=null ? String(slot.DataFineSlot):"00:00";
if(timeStart.length===5) timeStart +=":00";
if(timeEnd.length===5) timeEnd +=":00";
var oraInizio=day + "T" + timeStart;
var oraFine=day + "T" + timeEnd;
if(slot.AppuntamentiOperatore&&slot.AppuntamentiOperatore.length){
return slot.AppuntamentiOperatore.map(function (op){
return {
OperatoreId: op.OperatoreId!=null ? op.OperatoreId:0,
OraInizioAppuntamento: op.OraInizioAppuntamento||oraInizio,
OraFineAppuntamento: op.OraFineAppuntamento||oraFine,
};});
}
return [
{
OperatoreId: slot.OperatoreId!=null ? slot.OperatoreId:0,
OraInizioAppuntamento: oraInizio,
OraFineAppuntamento: oraFine,
},
];
}
_flow8ApiAppuntamentoItem(tipo, day, slot){
var item={
TipoAppuntamento: tipo,
DataAppuntamento: day + "T00:00:00",
AppuntamentiOperatore: this._flow8BuildAppuntamentiOperatore(day, slot),
};
if(slot&&slot.AppuntamentoOrigineId!=null&&slot.AppuntamentoOrigineId!==""){
item.AppuntamentoOrigineId=slot.AppuntamentoOrigineId;
}
return item;
}
buildFlow8AppointmentsPayload(){
this._syncMarketingProfile();
var second={
slot: this.bookingData.selectedSlot,
clinicId: this.bookingData.selectedClinicId,
day: this.bookingData.selectedDay,
};
var base={
JWT: this._flow8Jwt(),
SessioneId: this.getPhpSessionId(),
PazienteNome: this.bookingData.firstname||"",
PazienteCognome: this.bookingData.lastname||"",
PazienteEmail: this.bookingData.email||"",
PazienteTelefono: this._phoneFull(),
PazienteCodiceFiscale: this.bookingData.cf||"",
PageUrl: this.bookingData.pageUrl||window.location.href,
origin: this._bookingOriginHeaderUrl(),
PazientiPrivacy_1_Informativa: this.bookingData.informativa!==false,
PazientiPrivacy_2_DirittiModifica: this.bookingData.dirittiModifica!==false,
PazientiPrivacy_3_Marketing: this.bookingData.marketing===true,
PazientiPrivacy_4_Profilazione: this.bookingData.profile===true,
PazientiPrivacy_5_FirmaGrafometrica: this.bookingData.grafometrica===true,
};
var appuntamenti=[];
var clinicaId="";
if(this.bookingData.flow8HygieneOnlyPath){
if(!second.slot||!second.day) return null;
appuntamenti.push(this._flow8ApiAppuntamentoItem("igiene", second.day, second.slot));
clinicaId=String(second.clinicId||(second.slot.ClinicaId!=null ? second.slot.ClinicaId:"")||"").trim();
}else{
var first=this.bookingData.flow8FirstAppointment;
if(!first||!first.slot||!first.day||!second.slot||!second.day) return null;
appuntamenti.push(this._flow8ApiAppuntamentoItem("checkup_followup", first.day, first.slot));
appuntamenti.push(this._flow8ApiAppuntamentoItem("igiene", second.day, second.slot));
clinicaId=String(
first.clinicId||second.clinicId||(first.slot&&first.slot.ClinicaId)||(second.slot&&second.slot.ClinicaId)||""
).trim();
}
base.ClinicaId=clinicaId;
base.Appuntamenti=appuntamenti;
var pidAppts=this._flow8PazienteIdForBookingApi();
if(pidAppts) base.PazienteId=pidAppts;
if(this.passEvodentSessionBearer){
var evAppts=this._flow8EvodentBearerFromSession();
if(evAppts) base.evodent_bearer_token=evAppts;
}
return base;
}
_buildFlow8GoThankyouParams(){
var bd=this.bookingData;
var dbFlagFlow8 =
typeof window.bookingReservationDirectBookingParam==="function"
? window.bookingReservationDirectBookingParam()
: "1";
var second =
bd.selectedSlot&&bd.selectedDay
? { slot: bd.selectedSlot, clinicId: bd.selectedClinicId, day: bd.selectedDay }
: null;
if(!second||!second.slot) return null;
var name=((bd.firstname||"") + " " + (bd.lastname||"")).trim();
if(bd.flow8HygieneOnlyPath){
var cSolo=this.getClinicInfo(second.clinicId, this.sectionSlot&&this.sectionSlot.clinicsData);
var d2=this.formatDayShortNumeric(second.day);
var t2=second.slot&&second.slot.DataInizioSlot ? String(second.slot.DataInizioSlot):"";
var u=this._flow8MapsUrl(cSolo);
return {
email: bd.email||"",
customer: bd.customer ? "si":"no",
reservation_name: name,
reservation_type: "Igiene dentale",
reservation_date: d2 + (t2 ? " ore " + t2:""),
reservation_clinic_address: cSolo.address||"",
reservation_clinic_url: u!=="#" ? u:"",
reservation_direct_booking: dbFlagFlow8,
};}
var first=bd.flow8FirstAppointment;
if(!first||!first.slot) return null;
var c1=this.getClinicInfo(first.clinicId, this.sectionSlot&&this.sectionSlot.clinicsData);
var c2=this.getClinicInfo(second.clinicId, this.sectionSlotStep2&&this.sectionSlotStep2.clinicsData);
var day1=this.formatDayShortNumeric(first.day);
var day2=this.formatDayShortNumeric(second.day);
var t1=first.slot&&first.slot.DataInizioSlot ? String(first.slot.DataInizioSlot):"";
var t2b=second.slot&&second.slot.DataInizioSlot ? String(second.slot.DataInizioSlot):"";
var dateStr =
"Controllo: " +
day1 +
(t1 ? " ore " + t1:"") +
" · Igiene: " +
day2 +
(t2b ? " ore " + t2b:"");
var addr;
if(c1.address&&c2.address&&c1.address===c2.address){
addr=c1.address;
}else{
addr=[
c1.address ? "Controllo: " + c1.address:"",
c2.address ? "Igiene: " + c2.address:"",
]
.filter(Boolean)
.join(" · ");
}
var url2=this._flow8MapsUrl(c2);
var url1=this._flow8MapsUrl(c1);
var clinicUrl=url2!=="#" ? url2:url1!=="#" ? url1:"";
return {
email: bd.email||"",
customer: bd.customer ? "si":"no",
reservation_name: name,
reservation_type: "Visita di controllo e igiene dentale",
reservation_date: dateStr,
reservation_clinic_address: addr,
reservation_clinic_url: clinicUrl,
reservation_direct_booking: dbFlagFlow8,
};}
_showDashboardPrenotaThankyou(params){
var p=params||{};
var prenota=document.getElementById("prenota");
var thankWrap=document.getElementById("prenota-thankyou");
if(!prenota||!thankWrap){
var ty=document.querySelector(".thankyou");
if(ty){
ty.classList.add("active");
ty.scrollIntoView({ behavior: "smooth" });
}
this.bookingScroll();
return;
}
var sp=document.getElementById("summary-patient");
if(sp) sp.textContent=p.reservation_name||"";
var st=document.getElementById("summary-visit-type");
if(st) st.textContent=p.reservation_type||"";
var sd=document.getElementById("summary-datetime");
if(sd) sd.textContent=p.reservation_date||"";
var sdr=document.getElementById("summary-datetime-row");
if(sdr) sdr.style.display=p.reservation_direct_booking==="0" ? "none":"";
var sc=document.getElementById("summary-clinic");
if(sc) sc.textContent=p.reservation_clinic_address||"";
var clinicBtn=thankWrap.querySelector(".goClinic");
if(clinicBtn){
if(p.reservation_clinic_url){
clinicBtn.href=p.reservation_clinic_url;
clinicBtn.classList.remove("d-none");
}else{
clinicBtn.classList.add("d-none");
clinicBtn.href="#";
}}
var bookingSummary=thankWrap.querySelector(".booking-summary");
if(bookingSummary) bookingSummary.classList.remove("d-none");
var emailEl=document.getElementById("email_customer");
if(emailEl&&this.bookingData&&this.bookingData.email){
emailEl.setAttribute("href", "mailto:" + this.bookingData.email);
emailEl.textContent=this.bookingData.email;
}
prenota.classList.remove("active");
thankWrap.classList.add("active");
if(typeof window.dataLayer!=="undefined"&&window.dataLayer&&typeof window.dataLayer.push==="function"){
window.dataLayer.push({
event: "generate_lead",
formID: "form_prenotazione",
email_customer: (this.bookingData&&this.bookingData.email)||"",
});
}
this.bookingScroll();
thankWrap.scrollIntoView({ behavior: "smooth" });
}
callFlow8AppointmentsApi(){
var url=this._getAjaxUrl();
if(!url) return;
var btn=this.formSection7&&this.formSection7.querySelector(".flow8-confirm-appointments");
var lock=function (on){
if(!btn) return;
btn.classList.toggle("disabled", on);
btn.style.pointerEvents=on ? "none":"";
};
lock(true);
var self=this;
this._clearFlow8SummaryError();
var payload=this.buildFlow8AppointmentsPayload();
if(!payload||!payload.Appuntamenti||!payload.Appuntamenti.length||!payload.ClinicaId){
lock(false);
this._showFlow8SummaryError("Controlla i dati inseriti e riprova. Se il problema persiste, ricarica la pagina.");
return;
}
document.body.classList.add("overlay-loading-show");
jQuery.ajax({
url: url,
type: "POST",
data: { action: this.appointmentsApiAction, data: JSON.stringify(payload) },
success: function (res){
if(res&&res.success&&res.data){
self._clearFlow8SummaryError();
var params=self._buildFlow8GoThankyouParams();
if(self.useDashboardBookingThankyou){
document.body.classList.remove("overlay-loading-show");
lock(false);
if(!params){
var bd=self.bookingData;
params={
reservation_name: ((bd.firstname||"") + " " + (bd.lastname||"")).trim(),
reservation_type: bd.flow8HygieneOnlyPath ? "Igiene dentale":"Visita di controllo e igiene dentale",
reservation_date: "",
reservation_clinic_address: "",
reservation_clinic_url: "",
reservation_direct_booking:
typeof window.bookingReservationDirectBookingParam==="function"
? window.bookingReservationDirectBookingParam()
: "1",
};}
self._showDashboardPrenotaThankyou(params);
return;
}
if(typeof window.goThankyou==="function"&&params){
window.goThankyou("/grazie-prenota/", params);
return;
}
document.body.classList.remove("overlay-loading-show");
lock(false);
if(self.formSection7){
self.formSection7.classList.remove("active");
self.formSection7.classList.add("done");
}
var ty=document.querySelector(".thankyou");
if(ty){
ty.classList.add("active");
ty.scrollIntoView({ behavior: "smooth" });
}
self.bookingScroll();
return;
}
document.body.classList.remove("overlay-loading-show");
lock(false);
var apiFb =
res&&res.data&&res.data.message!=null&&String(res.data.message).trim()!==""
? String(res.data.message)
: "Al momento non è stato possibile completare la prenotazione. Riprova tra qualche minuto.";
var apiDisplay =
typeof window.normalizeDirectBookingApiError==="function"
? window.normalizeDirectBookingApiError(res.data, apiFb)
: apiFb;
self._showFlow8SummaryError(apiDisplay);
},
error: function (xhr){
document.body.classList.remove("overlay-loading-show");
lock(false);
self._showFlow8SummaryError(self._ajaxErrorMessage(xhr, "Errore durante la prenotazione. Riprova."));
},
});
}}
window.BookingFlowControlloIgieneOrale=BookingFlowControlloIgieneOrale;
})(typeof window!=="undefined" ? window:this);
let bookingData={};
let selectCityContainerSelectClinicID;
let selectCityContainerZone;
function pageBookingNotNull(pageBooking){
const formSection1=pageBooking.querySelector(".booking-section.section-1");
const card_esigenza=formSection1.querySelectorAll(".card-esigenza");
const formSection2_yes=pageBooking.querySelector(".booking-section.section-2.tab-yes");
const formSection2_no=pageBooking.querySelector(".booking-section.section-2.tab-no");
const formSection3=pageBooking.querySelector(".booking-section.section-3");
const formSection4=pageBooking.querySelector(".booking-section.section-4");
const formSection5=pageBooking.querySelector(".booking-section.section-5");
const formSection6=pageBooking.querySelector(".booking-section.section-6");
const formSection7=pageBooking.querySelector(".booking-section.section-7");
const formSectionSelectByComune=pageBooking.querySelector("#section-selection-by-comune");
const formSectionStart=pageBooking.querySelector('.booking-section.section-start');
const selectedDate=document.querySelector("#booking-date");
const selectCityContainer=document.querySelector('#container-selection-by-comune');
const box3Container=document.querySelector(".grid-bookingslot-box-3");
const checkboxClinicSearch=formSectionSelectByComune.querySelector('#clinic-search');
const slotNotFound=document.querySelector(".turn-of-direct-booking");
const subtitleSection4no=formSection4.querySelector(".subtitle.no");
const subtitleSection4yes=formSection4.querySelector(".subtitle.yes");
const formSection4Submit=formSection4 ? formSection4.querySelector(".submit"):null;
const formSection4SubmitLabelNo=formSection4Submit ? formSection4Submit.querySelector(".direct-field-n"):null;
const formSection4SubmitLabelYes=formSection4Submit ? formSection4Submit.querySelector(".direct-field-y"):null;
const section4DefaultLabelNo=formSection4SubmitLabelNo ? formSection4SubmitLabelNo.textContent:"";
const section4DefaultLabelYes=formSection4SubmitLabelYes ? formSection4SubmitLabelYes.textContent:"";
const resetStep=[formSectionStart, formSection1, formSection2_yes, formSectionSelectByComune, formSection2_no, formSection3, formSection4, formSection5, formSection6, formSection7];
const formSection1Specialista=pageBooking.querySelector(".booking-section.section-1-specialista");
const returnStep0=[formSection1, formSection1Specialista, formSection2_yes, formSection2_no, formSection3, formSection4, formSection5, formSection6, formSection7, formSectionSelectByComune];
const returnStep1=[formSection1Specialista, formSection2_yes, formSection2_no, formSection3, formSection4, formSection5, formSection6, formSection7, formSectionSelectByComune];
const returnStep2=[formSection3, formSection4, formSection5, formSection6, formSection7, formSectionSelectByComune];
const returnStepComuni=[formSection2_yes, formSection2_no, formSection3, formSection4, formSection5, formSection6, formSection7];
let flowControlloIgiene=null;
const sectionSlot=new SectionSlot({
onSlotConfirmed: function ({ slot, clinicId, day }){
bookingData.selectedSlot=slot;
bookingData.selectedClinicId=clinicId;
bookingData.selectedDay=day;
if(flowControlloIgiene&&(flowControlloIgiene.isSelected()||bookingData.flow8SlotsShown)){
flowControlloIgiene.onFirstSlotConfirmed({ slot, clinicId, day });
return;
}
formSection5.classList.remove("active");
formSection5.classList.add("done");
formSection4.classList.add("active");
bookingScroll();
sectionSlot.showSummary(true);
}});
const sectionSlotStep2=new SectionSlot({
container: document.getElementById("booking-owl-reservation-step2"),
mapContainer: formSection6 ? formSection6.querySelector(".grid-booking-box-3"):null,
box1Container: formSection6 ? formSection6.querySelector(".grid-booking-box-1"):null,
box2Container: formSection6 ? formSection6.querySelector(".grid-booking-box-2"):null,
containerId: "booking-owl-reservation-step2",
navContainerId: "custom_slider_nav_step2",
clinicSlotsContainerId: "clinic-slots-container-step2",
onSlotConfirmed: function ({ slot, clinicId, day }){
bookingData.selectedSlot=slot;
bookingData.selectedClinicId=clinicId;
bookingData.selectedDay=day;
if(flowControlloIgiene&&flowControlloIgiene.isSelected()&&bookingData.flow8FirstAppointment){
flowControlloIgiene.showFlow8SummarySection();
return;
}
formSection6.classList.remove("active");
formSection6.classList.add("done");
formSection4.classList.add("active");
bookingScroll();
sectionSlotStep2.showSummary(true);
}});
flowControlloIgiene=new window.BookingFlowControlloIgieneOrale({
pageBooking: pageBooking,
bookingData: bookingData,
formSection2Yes: formSection2_yes,
formSection2No: formSection2_no,
formSection3: formSection3,
formSection4: formSection4,
formSection5: formSection5,
formSection6: formSection6,
formSection7: formSection7,
formSectionSelectByComune: formSectionSelectByComune,
formSection1Specialista: formSection1Specialista,
subtitleSection4No: subtitleSection4no,
subtitleSection4Yes: subtitleSection4yes,
formSection4SubmitLabelNo: formSection4SubmitLabelNo,
formSection4SubmitLabelYes: formSection4SubmitLabelYes,
section4DefaultLabelNo: section4DefaultLabelNo,
section4DefaultLabelYes: section4DefaultLabelYes,
sectionSlot: sectionSlot,
bookingScroll: bookingScroll,
flowApiAction: "dp_booking_flow8_step1_check",
followupSlotsApiAction: "dp_booking_flow8_followup_slots",
igieneSlotsApiAction: "dp_booking_flow8_igiene_slots",
appointmentsApiAction: "dp_booking_flow8_appointments",
sectionSlotStep2: sectionSlotStep2,
});
if(slotNotFound){
slotNotFound.addEventListener("click", function (e){
if(flowControlloIgiene&&flowControlloIgiene.isSelected()){
e.preventDefault();
e.stopPropagation();
flowControlloIgiene.enterFlow8RicontattoFromSlots();
return;
}
e.preventDefault();
directBooking=false;
formSection5.classList.remove("active");
formSection5.classList.add("done");
formSection5.querySelector("h3").innerText="Richiesta di essere ricontattato";
formSection4.classList.add("active");
subtitleSection4no.classList.remove("d-none");
subtitleSection4yes.classList.add("d-none");
formSection4.querySelector(".summary-box").classList.add("d-none");
showBookingFields(false);
bookingScroll();
});
}
const selezioneCentri=new BookingSelezioneCentri(selectCityContainer, {
placeholder: 'Cerca una clinica...',
onSelect: (clinic)=> {
console.log('Clinica selezionata:', clinic);
if(!bookingData.location) bookingData.location={};
selectCityContainerSelectClinicID=clinic.cod;
bookingData.location.code=selectCityContainerSelectClinicID;
},
});
if(checkboxClinicSearch){
function updateZoneFieldsVisibility(){
if(!bookingData.location) bookingData.location={};
if(checkboxClinicSearch.checked){
selectCityContainer.classList.remove('d-none');
bookingData.location.code=null;
}else{
selectCityContainer.classList.add('d-none');
bookingData.location.code=selectCityContainerSelectClinicID;
}}
checkboxClinicSearch.addEventListener('change', updateZoneFieldsVisibility);
updateZoneFieldsVisibility();
}
selectedCardDirectBooking=null;
formSection5.style.setProperty("display", "none", "important");
if(formSection6) formSection6.style.setProperty("display", "none", "important");
initBookingAddressAutocomplete();
card_esigenza.forEach(function (card){
card.addEventListener("click", function (){
handleCardEsigenzaClick(this, card_esigenza);
flowControlloIgiene.setSelectedFlowId(card.getAttribute("data-evodent-id"));
if(flowControlloIgiene.isSelected()){
return;
}
if(card.getAttribute("data-direct-booking")==="1"){
formSection1.classList.remove("active");
formSection1.classList.add("done");
if(formSection2_yes) formSection2_yes.classList.remove("active");
if(formSection2_no) formSection2_no.classList.remove("active");
if(card.getAttribute("data-show-specialista-section")==="1"&&formSection1Specialista){
bookingData.areaSpecializzazioneIds=[];
formSection1Specialista.classList.remove("d-none");
formSection1Specialista.setAttribute("aria-hidden", "false");
formSection1Specialista.classList.add("active");
if(formSectionSelectByComune) formSectionSelectByComune.classList.remove("active");
}else{
directBookingCustomerYes();
}
bookingScroll();
}});
});
var setupFormStepStart=function (e){
flowControlloIgiene.resetState();
formSectionStart.querySelector("h3").innerText="Sei Registrato in Area Pazienti?";
resetStep.forEach(function (section){
if(section&&section.classList.contains('done')) section.classList.remove('done');
if(section&&section.classList.contains('active')) section.classList.remove('active');
});
if(box3Container) box3Container.innerHTML='';
formSectionStart.classList.remove('done');
formSectionStart.classList.add('active');
bookingSosNo();
bookingScroll();
if(e){
e.preventDefault();
}};
setupFormStepStart();
if(formSectionStart&&formSectionStart.querySelector('.changesection')){
formSectionStart.querySelector('.changesection').addEventListener('click', setupFormStepStart);
}
if(formSectionStart&&formSectionStart.querySelector('.cta.continue')){
formSectionStart.querySelector('.cta.continue').addEventListener('click', function (e){
formSectionStart.classList.remove('active');
formSectionStart.classList.add('done');
formSection1.classList.remove('done');
formSection1.classList.add('active');
formSectionStart.querySelector("h3").innerText="Prenotazione come ospite";
bookingScroll();
e.preventDefault();
});
}
function resetSection1Specialista(){
if(formSection1Specialista){
formSection1Specialista.classList.add("d-none");
formSection1Specialista.setAttribute("aria-hidden", "true");
formSection1Specialista.classList.remove("active");
formSection1Specialista.classList.remove("done");
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (c){ c.classList.remove("selected"); });
bookingData.areaSpecializzazioneIds=[];
}}
var setupFormStep1=function (e){
flowControlloIgiene.resetState();
returnStep0.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(formSection1Specialista){
formSection1Specialista.classList.add("d-none");
formSection1Specialista.setAttribute("aria-hidden", "true");
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (c){ c.classList.remove("selected"); });
bookingData.areaSpecializzazioneIds=[];
}
if(box3Container) box3Container.innerHTML="";
formSection1.classList.remove("done");
formSection1.classList.add("active");
bookingCustomerNo();
bookingSosNo();
bookingScroll();
if(e){
e.preventDefault();
}};
formSection1
.querySelector(".changesection")
.addEventListener("click", setupFormStep1);
formSection1
.querySelector(".changesection")
.addEventListener("click", function (e){
returnStep1.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(box3Container) box3Container.innerHTML="";
resetSection1Specialista();
formSection1.classList.remove("done");
formSection1.classList.add("active");
bookingCustomerNo();
bookingSosNo();
bookingScroll();
e.preventDefault();
});
formSectionSelectByComune
.querySelector(".changesection")
.addEventListener("click", function (e){
returnStepComuni.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(box3Container) box3Container.innerHTML="";
formSectionSelectByComune.classList.remove("done");
formSectionSelectByComune.classList.add("active");
bookingSosNo();
bookingScroll();
e.preventDefault();
});
formSection2_yes
.querySelector(".changesection")
.addEventListener("click", function (e){
returnStep2.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(box3Container) box3Container.innerHTML="";
formSection2_yes.classList.remove("done");
formSection2_yes.classList.add("active");
formSection2_no.classList.remove("done");
formSection2_no.classList.add("active");
bookingScroll();
e.preventDefault();
});
formSection2_no
.querySelector(".changesection")
.addEventListener("click", function (e){
returnStep2.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(box3Container) box3Container.innerHTML="";
formSection2_yes.classList.remove("done");
formSection2_yes.classList.add("active");
formSection2_no.classList.remove("done");
formSection2_no.classList.add("active");
bookingScroll();
e.preventDefault();
});
formSection3
.querySelector(".changesection")
.addEventListener("click", function (e){
formSection4.classList.remove("active");
formSection3.classList.remove("done");
formSection3.classList.add("active");
if(formSection5.classList.contains("active"))
formSection5.classList.remove("active");
if(box3Container) box3Container.innerHTML="";
bookingScroll();
e.preventDefault();
});
formSection5
.querySelector(".changesection")
.addEventListener("click", function (e){
formSection5.querySelector("h3").innerText="Seleziona";
formSection3.classList.remove("active");
formSection3.classList.remove("done");
formSection4.classList.remove("active");
formSection5.classList.remove("active");
if(selectedCardDirectBooking==="1"){
formSection5.style.setProperty("display", "flex", "important");
formSection5.classList.add("active");
const box2Container=document.querySelector(".grid-booking-box-2");
if(box2Container) box2Container.style.display="grid";
if(box3Container) box3Container.style.display="flex";
formSection5.querySelector(".changesection").style.display="none";
}else{
formSection3.classList.add("active");
}
bookingScroll();
e.preventDefault();
});
formSection5
.querySelector(".changesection")
.addEventListener("click", function (e){
formSection5.querySelector("h3").innerText="Seleziona";
formSection3.classList.remove("active");
formSection3.classList.remove("done");
formSection4.classList.remove("active");
formSection5.classList.remove("active");
if(selectedCardDirectBooking==="1"){
formSection5.style.setProperty("display", "flex", "important");
formSection5.classList.add("active");
const box2Container=document.querySelector(".grid-booking-box-2");
if(box2Container) box2Container.style.display="grid";
if(box3Container) box3Container.style.display="flex";
formSection5.querySelector(".changesection").style.display="none";
}else{
formSection3.classList.add("active");
}
bookingScroll();
e.preventDefault();
});
formSection1Specialista
.querySelector(".changesection")
.addEventListener("click", function (e){
formSection3.classList.remove("active");
formSection3.classList.remove("done");
formSection4.classList.remove("active");
formSection4.classList.remove("done");
formSection5.classList.remove("active");
formSection5.classList.remove("done");
formSectionSelectByComune.classList.remove("active");
formSectionSelectByComune.classList.remove("done");
formSection1Specialista.classList.remove("done");
formSection1Specialista.classList.add("active");
bookingScroll();
e.preventDefault();
});
var bookingLocations=formSection1.querySelectorAll(".box-location");
for (let i=0; i < bookingLocations.length; i++){
bookingLocations[i].addEventListener("click", function (){
var cardEsigenza=this.closest(".card-esigenza");
var showSpecialista=cardEsigenza&&cardEsigenza.getAttribute("data-show-specialista-section")==="1";
var selectedEvodentId=cardEsigenza ? cardEsigenza.getAttribute("data-evodent-id"):null;
flowControlloIgiene.setSelectedFlowId(selectedEvodentId);
subtitle=this.querySelector(".box-location-address");
if(subtitle!=null){
subtitle=subtitle.innerHTML;
}
title=this.querySelector(".box-location-title").innerHTML;
formSection1.querySelector(".details p").innerHTML =
"<strong>" +
title +
"</strong>" +
(subtitle ? ", " + subtitle:"");
formSection1.classList.remove("active");
formSection1.classList.add("done");
if(flowControlloIgiene.handleAfterEsigenzaSelection(showSpecialista)){
sectionSlot.setClinicEsigenza(title);
bookingData.service=title;
dataLayer.push({
event: "FP_step2_esigenza",
FP_step2_esigenza_value: title,
});
return;
}
flowControlloIgiene.clearUiForDefaultFlow();
titleslug=title.toLowerCase().split(" ").join("-");
switch (titleslug){
case "urgenze":
bookingSosYes();
break;
case "urgenza":
bookingSosYes();
break;
default:
formSection2_no.classList.add("active");
break;
}
bookingScroll();
sectionSlot.setClinicEsigenza(title);
bookingData.service=title;
dataLayer.push({
event: "FP_step2_esigenza",
FP_step2_esigenza_value: title,
});
});
}
if(formSection1Specialista){
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (card){
card.addEventListener("click", function (){
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (c){ c.classList.remove("selected"); });
this.classList.add("selected");
var titleEl=this.querySelector(".box-location-title");
var title=titleEl ? titleEl.textContent.trim():"";
var detailsP=formSection1Specialista.querySelector(".row.details .col-7 p");
if(detailsP) detailsP.textContent=title;
var id=this.getAttribute("data-area-specializzazione-id");
bookingData.areaSpecializzazioneIds=id ? [parseInt(id, 10)]:[];
formSection1Specialista.classList.remove("active");
formSection1Specialista.classList.add("done");
if(flowControlloIgiene.handleAfterSpecialistaSelection()){
return;
}
formSectionSelectByComune.classList.add("active");
bookingScroll();
});
});
}
document
.querySelector("#booking_time_choose")
.addEventListener("change", function (){
formSection3.querySelector(".times").style.display=this.checked
? "flex"
: "none";
if(this.checked){
this.parentNode.parentNode.classList.add("line-bordered");
}else{
this.parentNode.parentNode.classList.remove("line-bordered");
}});
document
.querySelector("#booking_time_asap")
.addEventListener("change", function (){
formSection3.querySelector(".times").style.display="none";
this.parentNode.parentNode.classList.remove("line-bordered");
});
formSection2_no
.querySelector(".cta")
.addEventListener("click", function (e){
var title=[];
titles=this.parentNode.querySelectorAll(".address");
for (let i=0; i < titles.length; i++){
title.push(titles[i].value);
}
var title=title.filter(function (el){
return el!=null&&el!="";
});
if(title.length){
this.parentNode.querySelector(".hint").style.display="none";
formSection2_no.querySelector(".details p").innerHTML =
title.join("<br>");
formSection2_no.classList.remove("active");
formSection2_yes.classList.add("done");
formSection2_no.classList.remove("active");
formSection2_no.classList.add("done");
if(selectedCardDirectBooking==="1"){
formSection3.classList.add("active");
}else{
formSection4.classList.add("active");
bookingData.times=[];
}
bookingScroll();
bookingData.location=title.join("\n\n");
bookingData.locations=title;
console.log("bookingData", bookingData);
dataLayer.push({
event: "FP_step3_centro",
FP_step3_centro_value: title.join(" - "),
FP_step1_paziente_value: bookingData.customer ? "si":"no",
});
}else{
this.parentNode.querySelector(".hint").style.display="block";
}
e.preventDefault();
});
formSectionSelectByComune.querySelector(".cta").addEventListener("click", function (e){
var addressInputs=formSectionSelectByComune.querySelectorAll(".autocomplete.booking-address");
var hasZone=false;
for (var i=0; i < addressInputs.length; i++){
var latField=addressInputs[i].parentNode.querySelector(".booking-lat");
var lngField=addressInputs[i].parentNode.querySelector(".booking-lng");
if(latField&&lngField&&latField.value&&lngField.value){
hasZone=true;
break;
}}
var checkboxClinic=formSectionSelectByComune.querySelector("#clinic-search");
var hasClinic=checkboxClinic&&checkboxClinic.checked&&(selectCityContainerSelectClinicID||(bookingData.location&&bookingData.location.code));
var isValid=hasZone||hasClinic;
var errorRow=formSectionSelectByComune.querySelector(".selection-by-comune-error");
var errorDiv=errorRow ? errorRow.querySelector(".error"):null;
var errorP=errorDiv ? errorDiv.querySelector("p"):null;
if(!isValid){
e.preventDefault();
if(errorDiv) errorDiv.classList.add("active");
if(errorP) errorP.textContent="Inserisci una zona di preferenza o seleziona un centro";
return;
}
if(errorDiv) errorDiv.classList.remove("active");
if(errorP) errorP.textContent="";
formSectionSelectByComune.classList.remove("active");
formSectionSelectByComune.classList.add("done");
formSection3.classList.add("active");
bookingScroll();
e.preventDefault();
});
formSection3
.querySelector(".cta")
.addEventListener("click", function (e){
title=[];
bookingData.timesAsap =
document.querySelector("#booking_time_asap").checked;
if(bookingData.asap){
title.push(document.querySelector('label[for="booking_time_asap"]').innerHTML
);
}
bookingData.timesChoose=document.querySelector("#booking_time_choose"
).checked;
if(bookingData.timesChoose){
hours=formSection3.querySelectorAll(".times .form-check-input");
for (let i=0; i < hours.length; i++){
if(hours[i].checked){
title.push(hours[i].value);
}}
}
if(title.length==0){
title.push(document.querySelector('label[for="booking_time_asap"]').innerHTML
);
}
bookingData.times=title;
var cleanedTitle=title.map(function (t){
return t.replace(/^(lunedì|martedì|mercoledì|giovedì|venerdì|sabato|domenica)\s*/i,
""
);
});
formSection3.querySelector(".details p").innerHTML =
cleanedTitle.join("<br>");
var rowDetails=formSection3.querySelector(".row-details");
if(rowDetails) rowDetails.style.display="none";
var timesBox=formSection3.querySelector(".times");
if(timesBox) timesBox.style.display="none";
formSection3.classList.remove("active");
formSection3.classList.add("done");
var coords=getBookingAddressCoords();
if(selectedCardDirectBooking=="1"){
formSection5.classList.add("active");
var clinicaId=null;
if(bookingData.location&&bookingData.location.code){
clinicaId=bookingData.location.code;
}
var selectedCard=null;
card_esigenza.forEach(function (card){
if(card.classList.contains("selected")){
selectedCard=card;
}});
if(selectedCard){
prestazioneId=selectedCard.getAttribute("data-evodent-id");
}
var DataInizio=getFormattedData(selectedDate.value);
reservationArgs={
ClinicaId: clinicaId ? [clinicaId]:[],
DataInizio: DataInizio,
PageUrl: bookingData.pageUrl||window.location.href,
PrestazioneId: prestazioneId||null,
AreaSpecializzazioneId: Array.isArray(bookingData.areaSpecializzazioneIds) ? bookingData.areaSpecializzazioneIds:[],
Source: "Website",
PhoneNumber: "",
PreferenzeOrario: [],
};
if(coords&&coords.length){
let posCount=1;
coords.forEach(function (coord){
if(coord){
reservationArgs['Posizione' + posCount]={
Latitudine: coord.Latitudine,
Longitudine: coord.Longitudine,
};
posCount++;
}});
}
if(document.querySelector("#booking_time_asap").checked){
reservationArgs.PreferenzeOrario.push("ASAP");
}else{
for (let i=0; i < hours.length; i++){
if(hours[i].checked){
var onlyHour;
if(/dopo le 18/i.test(hours[i].value)){
onlyHour=">18";
}else{
var match=hours[i].value.match(/(\d{1,2})\s*-\s*(\d{1,2})/);
onlyHour=match ? match[1] + "-" + match[2]:hours[i].value;
}
reservationArgs.PreferenzeOrario.push(onlyHour);
}}
if(reservationArgs.PreferenzeOrario.length===0){
reservationArgs.PreferenzeOrario.push("ASAP");
}}
sectionSlot.showLoader();
function handleReservationResponse(response){
var container=document.getElementById("booking-owl-reservation");
if(!container) return;
container.innerHTML="";
var freeSlots=response.data ? response.data.FreeOperatorSlots:null;
if(!freeSlots||Object.keys(freeSlots).length===0){
let message="Carica altri slot";
retryCount=typeof retryCount==='number' ? retryCount:0;
retryCount++;
if(retryCount > 2){
message="Cambia filtri";
}
container.innerHTML=`
<div class=\"no-slots-message\">
<p>${message}</p>
<button class=\"btn-primary btn-booking-retry\">Carica altri slot</button>
</div>
`;
sectionSlot.hideLoader();
const retryButton=container.querySelector(".btn-booking-retry");
if(retryButton){
retryButton.addEventListener("click", function (){
var noSlotContainer=document.querySelector(".no-slots-message");
noSlotContainer.classList.add("disabled");
container.innerHTML="";
sectionSlot.showLoader();
const currentDate=new Date(reservationArgs.DataInizio);
currentDate.setDate(currentDate.getDate() + 14);
reservationArgs.DataInizio=currentDate.toISOString().split("T")[0] + "T00:00:00Z";
sectionSlot.callReservationYes(reservationArgs, handleReservationResponse);
setTimeout(()=> sectionSlot.hideLoader(), 1000);
setTimeout(function (){
noSlotContainer.classList.remove("disabled");
}, 1000);
});
}
return;
}else{
sectionSlot.hideLoader();
retryCount=0;
Object.keys(freeSlots).forEach(function (date){
const html=sectionSlot.generateSlotHtml(date);
container.innerHTML +=html;
});
sectionSlot.initializeCarouselBooking();
}
sectionSlot.selectFirstAvailableDay();
var mapContainer=document.querySelector(".grid-booking-box-3");
if(mapContainer&&response.data&&response.data.Cliniche){
mapContainer.innerHTML="";
var mapDiv=document.createElement("div");
mapDiv.id="google-booking-map";
mapContainer.appendChild(mapDiv);
sectionSlot.initBookingMap(response.data.Cliniche, mapDiv);
document.querySelector(".grid-booking-box-4.d-none").classList.remove("d-none");
}}
sectionSlot.callReservationYes(reservationArgs, handleReservationResponse);
}else{
formSection4.classList.add("active");
}
bookingScroll();
dataLayer.push({
event: "FP_step4_appuntamento",
FP_step4_appuntamento_value: title.join("\r\n"),
});
e.preventDefault();
});
formSection4
.querySelector(".submit")
.addEventListener("click", function (e){
var hasError=false;
var skipRequiredValidation=flowControlloIgiene.shouldSkipRequiredValidation();
var regName=/^[a-zA-ZàèéìíîïòóôùúûñÁÉÍÓÚÜÑ\s\']+$/;
var regCf=/^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$/i;
var regEmail =
/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
firstname=formSection4.querySelector("#booking-firstname");
lastname=formSection4.querySelector("#booking-lastname");
phone=formSection4.querySelector("#booking-phone");
phone_prefix=formSection4.querySelector("#booking-phone-dial-code");
email=formSection4.querySelector("#booking-email");
cf=document.querySelector("#booking-cf");
if(!skipRequiredValidation&&!regName.test(firstname.value)){
if(firstname.parentNode.classList.contains("valid")){
firstname.parentNode.classList.remove("valid");
}
firstname.parentNode.classList.add("error");
hasError=true;
}else{
if(firstname.parentNode.classList.contains("error")){
firstname.parentNode.classList.remove("error");
}
firstname.parentNode.classList.add("valid");
}
if(!skipRequiredValidation&&!regName.test(lastname.value)){
if(lastname.parentNode.classList.contains("valid")){
lastname.parentNode.classList.remove("valid");
}
lastname.parentNode.classList.add("error");
hasError=true;
}else{
if(lastname.parentNode.classList.contains("error")){
lastname.parentNode.classList.remove("error");
}
lastname.parentNode.classList.add("valid");
}
if(!skipRequiredValidation &&
phone.value.length < 9 ||
!skipRequiredValidation &&
phone.value.length > 10 ||
!skipRequiredValidation &&
(phone.value.charAt(0)!=3&&phone.value.charAt(0)!=0) ||
!skipRequiredValidation &&
!/^\d+$/.test(phone.value)
){
if(phone.parentNode.classList.contains("valid")){
phone.parentNode.classList.remove("valid");
}
phone.parentNode.classList.add("error");
hasError=true;
}else{
if(phone.parentNode.classList.contains("error")){
phone.parentNode.classList.remove("error");
}
phone.parentNode.classList.add("valid");
}
if(!skipRequiredValidation&&!regEmail.test(email.value)){
if(email.parentNode.classList.contains("valid")){
email.parentNode.classList.remove("valid");
}
email.parentNode.classList.add("error");
hasError=true;
}else{
if(email.parentNode.classList.contains("error")){
email.parentNode.classList.remove("error");
}
email.parentNode.classList.add("valid");
}
if(cf){
if(cf.value&&!regCf.test(cf.value)){
if(cf.parentNode.classList.contains("valid")){
cf.parentNode.classList.remove("valid");
}
cf.parentNode.classList.add("error");
hasError=true;
}else{
if(cf.parentNode.classList.contains("error")){
cf.parentNode.classList.remove("error");
}
cf.parentNode.classList.add("valid");
}}
bookingData.firstname=firstname.value;
bookingData.lastname=lastname.value;
bookingData.phone=phone.value;
bookingData.phone_prefix=phone_prefix.value;
bookingData.email=email.value;
bookingData.cf=cf ? cf.value:"";
if(pageBooking.classList.contains("sos")){
bookingData.sos=true;
bookingData.message =
document.querySelector("#booking-message").value;
}else{
bookingData.sos=false;
bookingData.message="";
}
bookingData.marketing =
document.querySelector("#booking-marketing").checked;
bookingData.profile =
document.querySelector("#booking-profile").checked;
bookingData.pageUrl=window.location.href;
bookingData.pageTitle=document.title;
if(flowControlloIgiene.handleSubmitIfFlow8(hasError)){
e.preventDefault();
return;
}
if(!hasError){
document
.getElementById("email_customer")
.setAttribute("href", "mailto:" + bookingData.email);
document.getElementById("email_customer").innerHTML =
bookingData.email;
dataLayer.push({
event: "FP_step5_inviorichiesta",
convezione: "no",
assicurazione: "no",
informativag: bookingData.marketing ? "si":"no",
informativap: bookingData.profile ? "si":"no",
FP_step1_paziente_value: bookingData.customer ? "si":"no",
});
if(directBooking){
sendPostRequestBooking(bookingData);
}else{
bookingSubmitFrontend(bookingData);
}}else{
bookingScroll();
}
e.preventDefault();
});
function bookingSosYes(){
formSection4.classList.add("active");
pageBooking.classList.add("sos");
}
function bookingSosNo(){
pageBooking.classList.remove("sos");
}}
document.addEventListener("DOMContentLoaded", function (){
if(document.body.classList.contains("area-pazienti-dashboard")){
return;
}
var specialistHelpBoxes=document.querySelectorAll(".specialista-help");
if(specialistHelpBoxes.length){
function setHelpPopupState(box, isOpen){
if(!box) return;
var popup=box.querySelector(".specialista-help-popup");
var trigger=box.querySelector(".specialista-help-trigger");
if(popup) popup.hidden = !isOpen;
if(trigger) trigger.setAttribute("aria-expanded", isOpen ? "true":"false");
if(isOpen){
box.setAttribute("open", "");
}else{
box.removeAttribute("open");
}}
function closeAllHelpPopups(){
specialistHelpBoxes.forEach(function (box){
setHelpPopupState(box, false);
});
}
document.addEventListener("click", function (e){
var target=e.target&&e.target.closest ? e.target:null;
var trigger=target ? target.closest(".specialista-help-trigger"):null;
if(trigger){
e.preventDefault();
e.stopPropagation();
if(typeof e.stopImmediatePropagation==="function"){
e.stopImmediatePropagation();
}
var owner=trigger.closest(".specialista-help");
if(!owner) return;
var popup=owner.querySelector(".specialista-help-popup");
var willOpen = !!(popup&&popup.hidden);
closeAllHelpPopups();
if(willOpen) setHelpPopupState(owner, true);
return;
}
var insideHelp=target ? target.closest(".specialista-help"):null;
if(!insideHelp){
closeAllHelpPopups();
}}, true);
document.addEventListener("keydown", function (e){
if(e.key==="Escape"){
closeAllHelpPopups();
}});
}
if(!document.body.classList.contains("booking-loaded")){
document.body.classList.add("booking-loaded");
}
const pageBooking=document.querySelector(".page-booking");
if(pageBooking!=null){
pageBookingNotNull(pageBooking);
}});
(function (){
"use strict";
function initSection4PrivacyDefaults(){
var host=document.querySelector(".booking-section.section-4");
if(!host) return;
function sync(){
if(!host.classList.contains("active")) return;
var m=document.getElementById("booking-marketing");
var p=document.getElementById("booking-profile");
if(m&&!m.disabled) m.checked=true;
if(p&&!p.disabled) p.checked=true;
}
new MutationObserver(sync).observe(host, { attributes: true, attributeFilter: ["class"] });
sync();
}
if(document.readyState==="loading"){
document.addEventListener("DOMContentLoaded", initSection4PrivacyDefaults);
}else{
initSection4PrivacyDefaults();
}})();
document.addEventListener("DOMContentLoaded", function (){
if(!document.body.classList.contains("booking-loaded") &&
document.body.classList.contains("area-pazienti-dashboard")
){
document.body.classList.add("booking-loaded");
const pageBooking=document.querySelector(".page-booking");
if(pageBooking!=null){
if(sessionStorage.getItem("access_token")==null){
var accessToken=getTokenFromHash("access_token");
if(accessToken){
sessionStorage.setItem("access_token", accessToken);
sessionStorage.setItem("id_token", getTokenFromHash("id_token"));
document.body.classList.add("blankpage");
document.body.classList.add("overlay-loading-show");
const formLoginData=new FormData();
formLoginData.append("token", accessToken);
var tokenSelector=sessionStorage.getItem("TokenSelector");
if(tokenSelector){
formLoginData.append("action", "dp_get_card_validate");
formLoginData.append("tokenselector", tokenSelector);
}else{
formLoginData.append("action", "dp_get_card");
}
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function (){
if(this.readyState==4&&this.status==200){
var response=xhttp.responseText;
response=JSON.parse(response);
response.Data.expiry=false;
sessionStorage.removeItem("TokenSelector");
sessionStorage.setItem("userData", JSON.stringify(response.Data));
sessionStorage.setItem("PublicWebMasterTables",
JSON.stringify(response.PublicWebMasterTables)
);
window.location.href="/prenota-visita/";
}};
let link=document.getElementById("ajaxurl").getAttribute("href");
xhttp.open("POST", link, true);
xhttp.send(formLoginData);
}else{
document.body.classList.add("blankpage");
document.body.classList.add("overlay-loading-show");
window.location.href="/prenota-visita/?login";
return;
}}else{
initBookingApForm(pageBooking);
}}
}
function bookingScroll(){
activeSections=document.querySelectorAll(".booking-section.active");
maxTop=0;
for (let i=0; i < activeSections.length; i++){
if(maxTop < activeSections[i].offsetTop){
maxTop=activeSections[i].offsetTop;
}}
scroll({
top: maxTop - 190,
behavior: "smooth",
});
}
function getTokenFromHash(nametoken){
var hash=window.location.hash.substr(1);
var params=hash.split("&");
for (var i=0; i < params.length; i++){
var param=params[i].split("=");
if(param[0]===nametoken){
return param[1];
}}
return null;
}
function getDecodedToken(token){
var base64Url=token.split(".")[1];
var base64=base64Url.replace(/-/g, "+").replace(/_/g, "/");
var jsonPayload=decodeURIComponent(
window
.atob(base64)
.split("")
.map(function (c){
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
})
.join("")
);
return JSON.parse(jsonPayload);
}
function getUserCliniche(){
if(typeof userData.PatientWebCard.Cliniche!=="undefined"){
var cliniche=userData.PatientWebCard.Cliniche;
var masterCliniche=master.Cliniche;
for (let i=0; i < cliniche.length; i++){
for (let e=0; e < masterCliniche.length; e++){
if(cliniche[i].ClinicaId==masterCliniche[e].ClinicaId){
cliniche[i].ClinicaPartitaIva=masterCliniche[e].ClinicaPartitaIva;
}}
}
return cliniche;
}
return [];
}});
function initBookingApForm(pageBooking){
var selectCityContainerSelectClinicID=null;
const formSection1=pageBooking.querySelector(".booking-section.section-1");
const card_esigenza=formSection1.querySelectorAll(".card-esigenza");
const formSection0=pageBooking.querySelector(".booking-section.section-0");
const formSection2_yes=pageBooking.querySelector(".booking-section.section-2.tab-yes");
const formSection2_no=pageBooking.querySelector(".booking-section.section-2.tab-no");
const formSection3=pageBooking.querySelector(".booking-section.section-3");
const formSection4=pageBooking.querySelector(".booking-section.section-4");
const formSection5=pageBooking.querySelector(".booking-section.section-5");
const formSection6=pageBooking.querySelector(".booking-section.section-6");
const formSection6Flow8=pageBooking.querySelector("#section-igiene-slots");
const formSection7=pageBooking.querySelector(".booking-section.section-7");
const formSectionSelectByComune=pageBooking.querySelector("#section-selection-by-comune");
const sectionSlotStep2Host=formSection6Flow8||formSection6;
const selectedDate=document.querySelector("#booking-date");
const zoneFields=document.querySelector('.zone-fields');
const box3Container=document.querySelector(".grid-bookingslot-box-3");
const selectCityContainer=document.querySelector("#container-selection-by-comune");
const slotNotFound=document.querySelector(".turn-of-direct-booking");
const bookingLocations=formSection1.querySelectorAll(".box-location");
const subtitleSection4no=formSection4.querySelector(".subtitle.no");
const subtitleSection4yes=formSection4.querySelector(".subtitle.yes");
const subtitleSection4=subtitleSection4no||formSection4.querySelector(".subtitle");
const formSection1Specialista=pageBooking.querySelector(".booking-section.section-1-specialista");
const returnStep0=[
formSection1,
formSection1Specialista,
formSection2_yes,
formSection2_no,
formSection3,
formSection4,
formSection5,
formSection6,
formSection6Flow8!==formSection6 ? formSection6Flow8:null,
formSection7,
formSectionSelectByComune,
].filter(Boolean);
const returnStep1=[
formSection1Specialista,
formSection2_yes,
formSection2_no,
formSection3,
formSection4,
formSection5,
formSection6,
formSection6Flow8!==formSection6 ? formSection6Flow8:null,
formSection7,
formSectionSelectByComune,
].filter(Boolean);
const returnStep2=[
formSection3,
formSection4,
formSection5,
formSection6,
formSection6Flow8!==formSection6 ? formSection6Flow8:null,
formSection7,
formSectionSelectByComune,
].filter(Boolean);
const returnStep5=[
formSection3,
formSection4,
formSection5,
formSection6,
formSection6Flow8!==formSection6 ? formSection6Flow8:null,
formSection7,
].filter(Boolean);
let flowControlloIgiene=null;
function apGetDecodedAccessToken(){
var token=sessionStorage.getItem("access_token");
if(!token||typeof token!=="string") return null;
try {
var base64Url=token.split(".")[1];
if(!base64Url) return null;
var base64=base64Url.replace(/-/g, "+").replace(/_/g, "/");
var jsonPayload=decodeURIComponent(
window
.atob(base64)
.split("")
.map(function (c){
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
})
.join("")
);
return JSON.parse(jsonPayload);
} catch (errTok){
return null;
}}
var rawUserDataStr=sessionStorage.getItem("userData");
var rawMasterStr=sessionStorage.getItem("PublicWebMasterTables");
var userData=null;
var master=null;
try {
userData=rawUserDataStr ? JSON.parse(rawUserDataStr):null;
} catch (eUd){
userData=null;
}
try {
master=rawMasterStr ? JSON.parse(rawMasterStr):null;
} catch (eMs){
master=null;
}
if(!userData) userData={};
if(!master) master={};
function apPatientWebCardHasPazienteId(ud){
return !!(
ud &&
ud.PatientWebCard &&
ud.PatientWebCard.Paziente &&
ud.PatientWebCard.Paziente.PazienteId!=null &&
String(ud.PatientWebCard.Paziente.PazienteId).trim()!==""
);
}
var apGuestLikeFrontendFlow =
userData.PatientWebCard!=null&&!apPatientWebCardHasPazienteId(userData);
bookingData.apGuestLikeFrontendFlow=apGuestLikeFrontendFlow;
function resetSection1Specialista(){
if(formSection1Specialista){
formSection1Specialista.classList.add("d-none");
formSection1Specialista.setAttribute("aria-hidden", "true");
formSection1Specialista.classList.remove("active");
formSection1Specialista.classList.remove("done");
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (c){ c.classList.remove("selected"); });
bookingData.areaSpecializzazioneIds=[];
}}
const sectionSlot=new SectionSlot({
onSlotConfirmed: function ({ slot, clinicId, day }){
bookingData.selectedSlot=slot;
bookingData.selectedClinicId=clinicId;
bookingData.selectedDay=day;
if(clinicId&&(!bookingData.location||typeof bookingData.location!=="object"||!bookingData.location.code)){
if(!bookingData.location||typeof bookingData.location!=="object"){
bookingData.location={};}
bookingData.location.code=clinicId;
if(bookingData.locations&&bookingData.locations.length){
bookingData.location.title=Array.isArray(bookingData.locations) ? bookingData.locations[0]:bookingData.locations;
}}
if(flowControlloIgiene&&(flowControlloIgiene.isSelected()||bookingData.flow8SlotsShown)){
flowControlloIgiene.onFirstSlotConfirmed({ slot, clinicId, day });
return;
}
formSection5.classList.remove("active");
formSection5.classList.add("done");
formSection4.classList.add("active");
sectionSlot.showSummary(true);
bookingScroll();
}});
const sectionSlotStep2=new SectionSlot({
container: document.getElementById("booking-owl-reservation-step2"),
mapContainer: sectionSlotStep2Host ? sectionSlotStep2Host.querySelector(".grid-booking-box-3"):null,
box1Container: sectionSlotStep2Host ? sectionSlotStep2Host.querySelector(".grid-booking-box-1"):null,
box2Container: sectionSlotStep2Host ? sectionSlotStep2Host.querySelector(".grid-booking-box-2"):null,
containerId: "booking-owl-reservation-step2",
navContainerId: "custom_slider_nav_step2",
clinicSlotsContainerId: "clinic-slots-container-step2",
onSlotConfirmed: function ({ slot, clinicId, day }){
bookingData.selectedSlot=slot;
bookingData.selectedClinicId=clinicId;
bookingData.selectedDay=day;
if(flowControlloIgiene&&flowControlloIgiene.isSelected()&&bookingData.flow8FirstAppointment){
flowControlloIgiene.showFlow8SummarySection();
return;
}
var step2Section=formSection6Flow8||formSection6;
if(step2Section){
step2Section.classList.remove("active");
step2Section.classList.add("done");
}
formSection4.classList.add("active");
bookingScroll();
sectionSlotStep2.showSummary(true);
}});
if(typeof window.BookingFlowControlloIgieneOrale==="function"){
flowControlloIgiene=new window.BookingFlowControlloIgieneOrale({
pageBooking: pageBooking,
bookingData: bookingData,
formSection2Yes: formSection2_yes,
formSection2No: formSection2_no,
formSection3: formSection3,
formSection4: formSection4,
formSection5: formSection5,
formSection6: sectionSlotStep2Host,
formSection7: formSection7,
formSectionSelectByComune: formSectionSelectByComune,
formSection1Specialista: formSection1Specialista,
subtitleSection4No: subtitleSection4no,
subtitleSection4Yes: subtitleSection4yes,
formSection4SubmitLabelNo: formSection4.querySelector(".submit .direct-field-n"),
formSection4SubmitLabelYes: formSection4.querySelector(".submit .direct-field-y"),
section4DefaultLabelNo: formSection4.querySelector(".submit .direct-field-n") ? formSection4.querySelector(".submit .direct-field-n").textContent:"",
section4DefaultLabelYes: formSection4.querySelector(".submit .direct-field-y") ? formSection4.querySelector(".submit .direct-field-y").textContent:"",
sectionSlot: sectionSlot,
bookingScroll: bookingScroll,
flowApiAction: "dp_booking_flow8_step1_check",
followupSlotsApiAction: "dp_booking_flow8_followup_slots",
igieneSlotsApiAction: "dp_booking_flow8_igiene_slots",
appointmentsApiAction: "dp_booking_flow8_appointments",
sectionSlotStep2: sectionSlotStep2,
passEvodentSessionBearer: !apGuestLikeFrontendFlow,
useDashboardBookingThankyou: true,
});
}
if(selectCityContainer&&typeof BookingSelezioneCentri==="function"){
new BookingSelezioneCentri(selectCityContainer, {
placeholder: "Cerca una clinica...",
onSelect: function (clinic){
if(!bookingData.location) bookingData.location={};
selectCityContainerSelectClinicID=clinic.cod;
bookingData.location.code=selectCityContainerSelectClinicID;
},
});
}
var checkboxClinicSearch=formSectionSelectByComune ? formSectionSelectByComune.querySelector("#clinic-search"):null;
if(checkboxClinicSearch&&selectCityContainer){
function updateZoneFieldsVisibilityAp(){
if(!bookingData.location) bookingData.location={};
if(checkboxClinicSearch.checked){
selectCityContainer.classList.remove("d-none");
bookingData.location.code=null;
}else{
selectCityContainer.classList.add("d-none");
bookingData.location.code=selectCityContainerSelectClinicID;
}}
checkboxClinicSearch.addEventListener("change", updateZoneFieldsVisibilityAp);
updateZoneFieldsVisibilityAp();
}
if(slotNotFound){
slotNotFound.addEventListener("click", function (e){
if(flowControlloIgiene&&flowControlloIgiene.isSelected()){
e.preventDefault();
e.stopPropagation();
flowControlloIgiene.enterFlow8RicontattoFromSlots();
return;
}
e.preventDefault();
directBooking=false;
formSection5.classList.remove("active");
formSection5.classList.add("done");
formSection5.querySelector("h3").innerText="Richiesta di essere ricontattato";
formSection4.classList.add("active");
if(subtitleSection4no) subtitleSection4no.classList.remove("d-none");
if(subtitleSection4yes) subtitleSection4yes.classList.add("d-none");
else if(subtitleSection4) subtitleSection4.classList.remove("d-none");
var sumBox=formSection4.querySelector(".summary-box");
if(sumBox) sumBox.classList.add("d-none");
if(typeof window.showBookingFields==="function"){
window.showBookingFields(false);
}
bookingScroll();
});
}
formSection5.style.setProperty("display", "none", "important");
if(formSection6) formSection6.style.setProperty("display", "none", "important");
initBookingAddressAutocomplete();
selectedCardDirectBooking=null;
card_esigenza.forEach(function (card){
card.addEventListener("click", function (){
handleCardEsigenzaClick(this, card_esigenza);
window.selectedCardDirectBooking=this.getAttribute("data-direct-booking");
if(flowControlloIgiene){
flowControlloIgiene.setSelectedFlowId(this.getAttribute("data-evodent-id"));
if(flowControlloIgiene.isSelected()){
return;
}}
var isDirectBooking=this.getAttribute("data-direct-booking")==="1";
var searchClinics=document.querySelector('.search-clinics');
if(searchClinics){
searchClinics.classList.toggle('disabled', isDirectBooking);
}
var rowClinics=document.querySelector('.locator-results-mine');
if(rowClinics){
rowClinics.classList.toggle('direct-booking', isDirectBooking);
}
var rowSearchZone=document.querySelector('.row-search-zone');
if(rowSearchZone){
rowSearchZone.classList.toggle('disabled', !isDirectBooking);
}});
});
var zoneSelection=document.querySelector('#check-zone-section');
if(zoneSelection&&zoneFields){
zoneSelection.addEventListener('change', function (){
if(zoneSelection.checked){
zoneFields.classList.remove('disabled');
}else{
zoneFields.classList.add('disabled');
}});
if(zoneSelection.checked){
zoneFields.classList.remove('disabled');
}else{
zoneFields.classList.add('disabled');
}}
var numAccounts=1;
isProspect=false;
var decodedToken=null;
if(userData.PatientWebCard==null||apGuestLikeFrontendFlow){
if(userData.PatientWebCard==null){
isProspect=true;
}
document.querySelector("#booking_customer_yes").checked=false;
document.querySelector("#booking_customer_no").checked=true;
bookingCustomerNo();
decodedToken=apGetDecodedAccessToken()||{};
var mainLabel =
(decodedToken.given_name||"") + " " + (decodedToken.family_name||"");
mainLabel=mainLabel.trim()||"Account";
var accountsHtml =
'<div class="form-check"><input class="form-check-input" type="radio" name="booking_account" id="booking_customer_account_main" data-account="main" checked><label class="form-check-label" for="booking_customer_account_main">' +
mainLabel +
"</label></div>";
}else{
formSection1.classList.add("cards-yes-active");
document.querySelector("#booking_customer_yes").checked=true;
document.querySelector("#booking_customer_no").checked=false;
bookingCustomerYes();
var accountsHtml =
'<div class="form-check"><input class="form-check-input" type="radio" name="booking_account" id="booking_customer_account_main" data-account="main" checked><label class="form-check-label" for="booking_customer_account_main">' +
userData.PatientWebCard.Paziente.PazienteNome +
" " +
userData.PatientWebCard.Paziente.PazienteCognome +
"</label></div>";
for (let i=0; i < userData.PatientWebCard.Correlati.length; i++){
numAccounts++;
accountsHtml +=
'<div class="form-check"><input class="form-check-input" type="radio" name="booking_account" id="booking_customer_account_' +
i +
'" data-account="' +
userData.PatientWebCard.Correlati[i].PazienteCorrelatoId +
'"><label class="form-check-label" for="booking_customer_account_' +
i +
'">' +
userData.PatientWebCard.Correlati[i].PazienteNome +
" " +
userData.PatientWebCard.Correlati[i].PazienteCognome +
"</label></div>";
}
accountsHtml +='<div class="form-check"><input class="form-check-input" type="radio" name="booking_account" id="booking_customer_account_other" data-account="other"><label class="form-check-label" for="booking_customer_account_other">Qualcun altro</label></div>';
}
document.querySelector(".accounts-list").innerHTML=accountsHtml;
document.querySelectorAll('input[name="booking_account"]').forEach(function (radio){
radio.addEventListener('change', function (){
const bookedByFields=document.querySelectorAll('.bookedby-field');
if(document.getElementById("booking_customer_account_other").checked){
bookedByFields.forEach(field=> field.classList.add('active'));
}else{
bookedByFields.forEach(field=> field.classList.remove('active'));
}});
});
var setupFormStep0=function (e){
if(flowControlloIgiene) flowControlloIgiene.resetState();
returnStep0.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(formSection1Specialista){
formSection1Specialista.classList.add("d-none");
formSection1Specialista.setAttribute("aria-hidden", "true");
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (c){ c.classList.remove("selected"); });
bookingData.areaSpecializzazioneIds=[];
}
if(box3Container) box3Container.innerHTML="";
formSection0.classList.remove("done");
formSection0.classList.add("active");
if(document.querySelector("#booking_customer_yes").checked){
bookingCustomerYes();
}
if(document.querySelector("#booking_customer_no").checked){
bookingCustomerNo();
}
bookingSosNo();
bookingScroll();
if(e){
e.preventDefault();
}};
setupFormStep0();
formSection0
.querySelector(".changesection")
.addEventListener("click", setupFormStep0);
formSection1
.querySelector(".changesection")
.addEventListener("click", function (e){
if(flowControlloIgiene) flowControlloIgiene.resetState();
returnStep1.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(box3Container) box3Container.innerHTML="";
resetSection1Specialista();
formSection1.classList.remove("done");
formSection1.classList.add("active");
if(document.querySelector("#booking_customer_yes").checked){
bookingCustomerYes();
}
if(document.querySelector("#booking_customer_no").checked){
bookingCustomerNo();
}
bookingSosNo();
bookingScroll();
e.preventDefault();
});
formSection2_yes
.querySelector(".changesection")
.addEventListener("click", function (e){
returnStep2.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(box3Container) box3Container.innerHTML="";
formSection2_yes.classList.remove("done");
formSection2_yes.classList.add("active");
formSection2_no.classList.remove("done");
formSection2_no.classList.add("active");
bookingScroll();
e.preventDefault();
});
formSection2_no
.querySelector(".changesection")
.addEventListener("click", function (e){
returnStep2.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
if(box3Container) box3Container.innerHTML="";
formSection2_yes.classList.remove("done");
formSection2_yes.classList.add("active");
formSection2_no.classList.remove("done");
formSection2_no.classList.add("active");
bookingScroll();
e.preventDefault();
});
formSection3
.querySelector(".changesection")
.addEventListener("click", function (e){
clearBookingErrors();
formSection4.classList.remove("active");
formSection3.classList.remove("done");
formSection3.classList.add("active");
if(formSection5.classList.contains("active"))
formSection5.classList.remove("active");
if(box3Container) box3Container.innerHTML="";
bookingScroll();
e.preventDefault();
});
formSection5
.querySelector(".changesection")
.addEventListener("click", function (e){
returnStep5.forEach(function (section){
if(section&&section.classList.contains("done")) section.classList.remove("done");
if(section&&section.classList.contains("active")) section.classList.remove("active");
});
formSection5.classList.add("active");
formSection5.querySelector("h3").innerText="Seleziona";
bookingScroll();
e.preventDefault();
});
formSection1Specialista
.querySelector(".changesection")
.addEventListener("click", function (e){
formSection3.classList.remove("active");
formSection3.classList.remove("done");
formSection4.classList.remove("active");
formSection4.classList.remove("done");
formSection5.classList.remove("active");
formSection5.classList.remove("done");
if(formSectionSelectByComune){
formSectionSelectByComune.classList.remove("active");
formSectionSelectByComune.classList.remove("done");
}
if(formSection6){
formSection6.classList.remove("active");
formSection6.classList.remove("done");
}
if(formSection6Flow8&&formSection6Flow8!==formSection6){
formSection6Flow8.classList.remove("active");
formSection6Flow8.classList.remove("done");
}
if(formSection7){
formSection7.classList.remove("active");
formSection7.classList.remove("done");
}
formSection2_yes.classList.remove("active");
formSection2_yes.classList.remove("done");
formSection2_no.classList.remove("active");
formSection2_no.classList.remove("done");
formSection1Specialista.classList.remove("done");
formSection1Specialista.classList.add("active");
bookingScroll();
e.preventDefault();
});
if(formSectionSelectByComune){
var comuneCta=formSectionSelectByComune.querySelector(".cta");
if(comuneCta){
comuneCta.addEventListener("click", function (e){
if(flowControlloIgiene&&flowControlloIgiene.isSelected()){
return;
}
var addressInputs=formSectionSelectByComune.querySelectorAll(".autocomplete.booking-address");
var hasZone=false;
for (var zi=0; zi < addressInputs.length; zi++){
var latField=addressInputs[zi].parentNode.querySelector(".booking-lat");
var lngField=addressInputs[zi].parentNode.querySelector(".booking-lng");
if(latField&&lngField&&latField.value&&lngField.value){
hasZone=true;
break;
}}
var checkboxClinicAp=formSectionSelectByComune.querySelector("#clinic-search");
var hasClinic =
checkboxClinicAp &&
checkboxClinicAp.checked &&
(selectCityContainerSelectClinicID||(bookingData.location&&bookingData.location.code));
var isValid=hasZone||hasClinic;
var errorRowAp=formSectionSelectByComune.querySelector(".selection-by-comune-error");
var errorDivAp=errorRowAp ? errorRowAp.querySelector(".error"):null;
var errorPAp=errorDivAp ? errorDivAp.querySelector("p"):null;
if(!isValid){
e.preventDefault();
if(errorDivAp) errorDivAp.classList.add("active");
if(errorPAp) errorPAp.textContent="Inserisci una zona di preferenza o seleziona un centro";
return;
}
if(errorDivAp) errorDivAp.classList.remove("active");
if(errorPAp) errorPAp.textContent="";
formSectionSelectByComune.classList.remove("active");
formSectionSelectByComune.classList.add("done");
formSection3.classList.add("active");
bookingScroll();
e.preventDefault();
});
}}
for (let i=0; i < bookingLocations.length; i++){
bookingLocations[i].addEventListener("click", function (){
var cardEsigenza=this.closest(".card-esigenza");
var showSpecialista=cardEsigenza&&cardEsigenza.getAttribute("data-show-specialista-section")==="1";
var selectedEvodentId=cardEsigenza ? cardEsigenza.getAttribute("data-evodent-id"):null;
if(flowControlloIgiene) flowControlloIgiene.setSelectedFlowId(selectedEvodentId);
subtitle=this.querySelector(".box-location-address");
if(subtitle!=null){
subtitle=subtitle.innerHTML;
}
title=this.querySelector(".box-location-title").innerHTML;
formSection1.querySelector(".details p").innerHTML =
"<strong>" + title + "</strong>" + (subtitle ? ", " + subtitle:"");
formSection1.classList.remove("active");
formSection1.classList.add("done");
if(flowControlloIgiene&&flowControlloIgiene.handleAfterEsigenzaSelection(showSpecialista)){
sectionSlot.setClinicEsigenza(title);
bookingData.service=title;
dataLayer.push({ event: "FP_step2_esigenza", FP_step2_esigenza_value: title });
return;
}
if(flowControlloIgiene) flowControlloIgiene.clearUiForDefaultFlow();
if(showSpecialista&&formSection1Specialista){
bookingData.areaSpecializzazioneIds=[];
formSection1Specialista.classList.remove("d-none");
formSection1Specialista.setAttribute("aria-hidden", "false");
formSection1Specialista.classList.add("active");
if(formSection2_yes) formSection2_yes.classList.remove("active");
if(formSection2_no) formSection2_no.classList.remove("active");
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (c){
c.classList.remove("selected");
});
bookingScroll();
sectionSlot.setClinicEsigenza(title);
bookingData.service=title;
dataLayer.push({ event: "FP_step2_esigenza", FP_step2_esigenza_value: title });
return;
}
titleslug=title.toLowerCase().split(" ").join("-");
switch (titleslug){
case "urgenze":
bookingSosYes();
break;
case "urgenza":
bookingSosYes();
break;
default:
formSection2_yes.classList.add("active");
formSection2_no.classList.add("active");
break;
}
bookingScroll();
sectionSlot.setClinicEsigenza(title);
bookingData.service=title;
dataLayer.push({
event: "FP_step2_esigenza",
FP_step2_esigenza_value: title,
});
});
}
if(formSection1Specialista){
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (card){
card.addEventListener("click", function (){
formSection1Specialista.querySelectorAll(".card-specialista").forEach(function (c){ c.classList.remove("selected"); });
this.classList.add("selected");
var titleEl=this.querySelector(".box-location-title");
var title=titleEl ? titleEl.textContent.trim():"";
var detailsP=formSection1Specialista.querySelector(".row.details .col-7 p");
if(detailsP) detailsP.textContent=title;
var id=this.getAttribute("data-area-specializzazione-id");
bookingData.areaSpecializzazioneIds=id ? [parseInt(id, 10)]:[];
formSection1Specialista.classList.remove("active");
formSection1Specialista.classList.add("done");
if(flowControlloIgiene&&flowControlloIgiene.handleAfterSpecialistaSelection()){
bookingScroll();
return;
}
formSection2_yes.classList.add("active");
formSection2_no.classList.add("active");
bookingScroll();
});
});
}
document
.querySelector("#booking_time_choose")
.addEventListener("change", function (){
formSection3.querySelector(".times").style.display=this.checked
? "flex"
: "none";
if(this.checked){
this.parentNode.parentNode.classList.add("line-bordered");
}else{
this.parentNode.parentNode.classList.remove("line-bordered");
}});
document
.querySelector("#booking_time_asap")
.addEventListener("change", function (){
formSection3.querySelector(".times").style.display="none";
this.parentNode.parentNode.classList.remove("line-bordered");
});
document
.querySelector("#booking_customer_yes")
.addEventListener("change", function (){
bookingCustomerYes();
formSection1.classList.add("cards-yes-active");
formSection1.classList.remove("cards-no-active");
});
document
.querySelector("#booking_customer_no")
.addEventListener("change", function (){
bookingCustomerNo();
formSection1.classList.add("cards-no-active");
formSection1.classList.remove("cards-yes-active");
});
formSection0
.querySelector(".cta")
.addEventListener("click", function (e){
title=document.querySelector('input[name="booking_account"]:checked + label'
).innerHTML;
if(document.querySelector("#booking_customer_yes").checked){
bookingData.customer=true;
}else{
bookingData.customer=false;
}
formSection0.querySelector(".details p").innerHTML=title;
formSection0.classList.remove("active");
formSection0.classList.add("done");
formSection1.classList.add("active");
bookingScroll();
var accountId=document
.querySelector('input[name="booking_account"]:checked')
.getAttribute("data-account");
var bookingAccount=null;
if(!isProspect&&!apGuestLikeFrontendFlow){
if(accountId=="main"||accountId=="other"){
bookingAccount=userData.PatientWebCard.Paziente;
}else{
for (
let i=0;
i < userData.PatientWebCard.Correlati.length;
i++
){
if(accountId==userData.PatientWebCard.Correlati[i].PazienteCorrelatoId
){
bookingAccount=userData.PatientWebCard.Correlati[i];
}}
}}
if(bookingAccount){
document.getElementById("booking-firstname").value =
bookingAccount.PazienteNome;
document.getElementById("booking-lastname").value =
bookingAccount.PazienteCognome;
document.getElementById("booking-phone").value =
bookingAccount.PazienteTelefono;
document.getElementById("booking-email").value =
bookingAccount.PazienteEmail;
document.getElementById("booking-marketing").checked =
typeof bookingAccount.PazientiPrivacy_3_Marketing!=="undefined"
? bookingAccount.PazientiPrivacy_3_Marketing
: false;
document.getElementById("booking-profile").checked =
typeof bookingAccount.PazientiPrivacy_4_Profilazione!=="undefined"
? bookingAccount.PazientiPrivacy_4_Profilazione
: false;
var accPid =
bookingAccount.PazienteId!=null&&String(bookingAccount.PazienteId).trim()!==""
? bookingAccount.PazienteId
: bookingAccount.PazienteCorrelatoId;
if(accPid!=null&&String(accPid).trim()!==""){
bookingData.pazienteId=String(accPid).trim();
}}
if(isProspect||apGuestLikeFrontendFlow){
decodedToken=apGetDecodedAccessToken()||decodedToken||{};
document.getElementById("booking-firstname").value =
decodedToken.given_name||"";
document.getElementById("booking-lastname").value =
decodedToken.family_name||"";
document.getElementById("booking-email").value =
decodedToken.email||"";
document.getElementById("booking-phone").value =
decodedToken.telephone||"";
document.getElementById("booking-marketing").checked =
decodedToken.market_consent
? decodedToken.market_consent.toString().toLowerCase()=="true"
: false;
document.getElementById("booking-profile").checked =
decodedToken.profiling_consent
? decodedToken.profiling_consent.toString().toLowerCase()=="true"
: false;
if(!apGuestLikeFrontendFlow&&decodedToken.profile!=null&&String(decodedToken.profile).trim()!==""){
bookingData.pazienteId=String(decodedToken.profile).trim();
}else if(apGuestLikeFrontendFlow){
delete bookingData.pazienteId;
}}
dataLayer.push({
event: "FP_step1_paziente",
FP_step1_paziente_value: bookingData.customer ? "si":"no",
});
e.preventDefault();
});
if(numAccounts==1){
formSection0.querySelector(".cta").click();
formSection0.classList.add("hide");
}
formSection2_no
.querySelector(".cta")
.addEventListener("click", function (e){
var title=[];
titles=this.parentNode.querySelectorAll(".address");
for (let i=0; i < titles.length; i++){
title.push(titles[i].value);
}
var title=title.filter(function (el){
return el!=null&&el!="";
});
if(title.length){
this.parentNode.querySelector(".hint").style.display="none";
formSection2_no.querySelector(".details p").innerHTML =
title.join("<br>");
formSection2_no.classList.remove("active");
formSection2_yes.classList.add("done");
formSection2_no.classList.remove("active");
formSection2_no.classList.add("done");
var isDirectBookingCard=(window.selectedCardDirectBooking||selectedCardDirectBooking)==="1";
if(isDirectBookingCard){
formSection3.classList.add("active");
}else{
formSection4.classList.add("active");
bookingData.times=[];
}
bookingScroll();
bookingData.location=title.join("\n\n");
bookingData.locations=title;
dataLayer.push({
event: "FP_step3_centro",
FP_step3_centro_value: title.join(" - "),
FP_step1_paziente_value: bookingData.customer ? "si":"no",
});
}else{
this.parentNode.querySelector(".hint").style.display="block";
}
e.preventDefault();
});
pageBooking.querySelectorAll(".s2-direct-booking").forEach(function (s2Btn){
s2Btn.addEventListener("click", function (e){
if(directBooking){
var addresses=[];
var addressInputs=formSection2_yes.querySelectorAll('.address');
for (let i=0; i < addressInputs.length; i++){
if(addressInputs[i].value) addresses.push(addressInputs[i].value);
}
var clinics=[];
var clinicInputs=formSection2_yes.querySelectorAll('.clinic:checked');
for (let i=0; i < clinicInputs.length; i++){
clinics.push(clinicInputs[i].value);
}
var selections=[...addresses, ...clinics].filter(Boolean);
if(selections.length){
formSection2_yes.querySelector('.details p').innerHTML=selections.join('<br>');
formSection2_yes.classList.remove('active');
formSection2_yes.classList.add('done');
var isDirectBookingCardS2=(window.selectedCardDirectBooking||selectedCardDirectBooking)==="1";
if(isDirectBookingCardS2){
formSection3.classList.add('active');
}else{
formSection4.classList.add("active");
bookingData.times=[];
}
bookingScroll();
bookingData.locations=selections;
dataLayer.push({
event: "FP_step3_centro",
FP_step3_centro_value: selections.join(" - "),
FP_step1_paziente_value: bookingData.customer ? "si":"no",
});
}else{
}
e.preventDefault();
}else{
e.preventDefault();
}});
});
formSection3
.querySelector(".cta")
.addEventListener("click", function (e){
title=[];
bookingData.timesAsap =
document.querySelector("#booking_time_asap").checked;
if(bookingData.timesAsap){
title.push(document.querySelector('label[for="booking_time_asap"]')
.innerHTML
);
}
bookingData.timesChoose=document.querySelector("#booking_time_choose"
).checked;
if(bookingData.timesChoose){
hours=formSection3.querySelectorAll(".times .form-check-input");
for (let i=0; i < hours.length; i++){
if(hours[i].checked){
title.push(hours[i].value);
}}
}
if(title.length==0){
title.push(document.querySelector('label[for="booking_time_asap"]')
.innerHTML
);
}
bookingData.times=title;
var cleanedTitle=title.map(function (t){
return t.replace(/^(lunedì|martedì|mercoledì|giovedì|venerdì|sabato|domenica)\s*/i,
""
);
});
formSection3.querySelector(".details p").innerHTML =
cleanedTitle.join("<br>");
formSection3.classList.remove("active");
formSection3.classList.add("done");
var coords=getBookingAddressCoords();
if((window.selectedCardDirectBooking||selectedCardDirectBooking)=="1"){
formSection5.classList.add("active");
var clinicaId=null;
if(bookingData.location&&bookingData.location.code){
clinicaId=bookingData.location.code;
}
var selectedCard=null;
card_esigenza.forEach(function (card){
if(card.classList.contains("selected")){
selectedCard=card;
}});
if(selectedCard){
prestazioneId=selectedCard.getAttribute("data-evodent-id");
}
var DataInizio=getFormattedData(selectedDate.value);
reservationArgs={
ClinicaId: clinicaId ? [clinicaId]:[],
DataInizio: DataInizio,
PageUrl: bookingData.pageUrl||window.location.href,
PrestazioneId: prestazioneId||null,
AreaSpecializzazioneId: Array.isArray(bookingData.areaSpecializzazioneIds) ? bookingData.areaSpecializzazioneIds:[],
Source: "Website",
PhoneNumber: "",
PreferenzeOrario: [],
};
if(coords&&coords.length){
var posCount=1;
coords.forEach(function (coord){
if(coord){
reservationArgs["Posizione" + posCount]={
Latitudine: coord.Latitudine,
Longitudine: coord.Longitudine,
};
posCount++;
}});
}
if(document.querySelector("#booking_time_asap").checked){
reservationArgs.PreferenzeOrario.push("ASAP");
}else{
for (let i=0; i < hours.length; i++){
if(hours[i].checked){
var onlyHour;
if(/dopo le 18/i.test(hours[i].value)){
onlyHour=">18";
}else{
var match=hours[i].value.match(/(\d{1,2})\s*-\s*(\d{1,2})/);
onlyHour=match ? match[1] + "-" + match[2]:hours[i].value;
}
reservationArgs.PreferenzeOrario.push(onlyHour);
}}
}
sectionSlot.showLoader();
function handleReservationResponse(response){
var container=document.getElementById("booking-owl-reservation");
if(!container) return;
container.innerHTML="";
var freeSlots=response.data ? response.data.FreeOperatorSlots:null;
if(!freeSlots||Object.keys(freeSlots).length===0){
let message="Carica altri slot";
retryCount=typeof retryCount==='number' ? retryCount:0;
retryCount++;
if(retryCount > 2){
message="Cambia filtri";
}
container.innerHTML=`
<div class=\"no-slots-message\">
<p>${message}</p>
<button class=\"btn-primary btn-booking-retry\">Carica altri slot</button>
</div>
`;
sectionSlot.hideLoader();
const retryButton=container.querySelector(".btn-booking-retry");
if(retryButton){
retryButton.addEventListener("click", function (){
var noSlotContainer=document.querySelector(".no-slots-message");
noSlotContainer.classList.add("disabled");
container.innerHTML="";
sectionSlot.showLoader();
const currentDate=new Date(reservationArgs.DataInizio);
currentDate.setDate(currentDate.getDate() + 14);
reservationArgs.DataInizio=currentDate.toISOString().split("T")[0] + "T00:00:00Z";
sectionSlot.callReservationYes(reservationArgs, handleReservationResponse);
setTimeout(sectionSlot.hideLoader, 1000);
setTimeout(function (){
noSlotContainer.classList.remove("disabled");
}, 1000);
});
}
return;
}else{
sectionSlot.hideLoader();
retryCount=0;
Object.keys(freeSlots).forEach(function (date){
const html=sectionSlot.generateSlotHtml(date);
container.innerHTML +=html;
});
sectionSlot.initializeCarouselBooking();
}
sectionSlot.selectFirstAvailableDay();
var mapContainer=document.querySelector(".grid-booking-box-3");
if(mapContainer&&response.data&&response.data.Cliniche){
mapContainer.innerHTML="";
var mapDiv=document.createElement("div");
mapDiv.id="google-booking-map";
mapContainer.appendChild(mapDiv);
sectionSlot.initBookingMap(response.data.Cliniche, mapDiv);
document.querySelector(".grid-booking-box-4.d-none").classList.remove("d-none");
}}
sectionSlot.callReservationYes(reservationArgs, handleReservationResponse);
}else{
formSection4.classList.add("active");
}
bookingScroll();
dataLayer.push({
event: "FP_step4_appuntamento",
FP_step4_appuntamento_value: title.join("\r\n"),
});
e.preventDefault();
});
formSection4
.querySelector(".submit")
.addEventListener("click", function (e){
var hasError=false;
var skipRequiredValidation=flowControlloIgiene&&typeof flowControlloIgiene.shouldSkipRequiredValidation==="function"&&flowControlloIgiene.shouldSkipRequiredValidation();
var regName=/^[a-zA-ZàèéìíîïòóôùúûñÁÉÍÓÚÜÑ\s\']+$/;
var regCf=/^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$/i;
var regEmail =
/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
var cfVal="";
firstname=formSection4.querySelector("#booking-firstname");
lastname=formSection4.querySelector("#booking-lastname");
phone=formSection4.querySelector("#booking-phone");
phone_prefix=formSection4.querySelector("#booking-phone-dial-code");
email=formSection4.querySelector("#booking-email");
cf=document.querySelector("#booking-cf");
bookedby_phone_final=formSection4.querySelector("#bookedby-phone-final");
bookedby_firstname=formSection4.querySelector("#bookedby-firstname");
bookedby_lastname=formSection4.querySelector("#bookedby-lastname");
bookedby_phone=formSection4.querySelector("#bookedby-phone");
bookedby_phone_prefix=formSection4.querySelector("#bookedby-phone-dial-code");
bookedby_email=formSection4.querySelector("#bookedby-email");
if(!skipRequiredValidation&&!regName.test(firstname.value)){
if(firstname.parentNode.classList.contains("valid")){
firstname.parentNode.classList.remove("valid");
}
firstname.parentNode.classList.add("error");
hasError=true;
}else{
if(firstname.parentNode.classList.contains("error")){
firstname.parentNode.classList.remove("error");
}
firstname.parentNode.classList.add("valid");
}
if(!skipRequiredValidation&&!regName.test(lastname.value)){
if(lastname.parentNode.classList.contains("valid")){
lastname.parentNode.classList.remove("valid");
}
lastname.parentNode.classList.add("error");
hasError=true;
}else{
if(lastname.parentNode.classList.contains("error")){
lastname.parentNode.classList.remove("error");
}
lastname.parentNode.classList.add("valid");
}
if(!skipRequiredValidation &&
(phone.value.length < 9 ||
phone.value.length > 10 ||
(phone.value.charAt(0)!=3&&phone.value.charAt(0)!=0) ||
!/^\d+$/.test(phone.value))
){
if(phone.parentNode.classList.contains("valid")){
phone.parentNode.classList.remove("valid");
}
phone.parentNode.classList.add("error");
hasError=true;
}else{
if(phone.parentNode.classList.contains("error")){
phone.parentNode.classList.remove("error");
}
phone.parentNode.classList.add("valid");
}
if(!skipRequiredValidation&&!regEmail.test(email.value)){
if(email.parentNode.classList.contains("valid")){
email.parentNode.classList.remove("valid");
}
email.parentNode.classList.add("error");
hasError=true;
}else{
if(email.parentNode.classList.contains("error")){
email.parentNode.classList.remove("error");
}
email.parentNode.classList.add("valid");
}
if(cf){
if(cf.value&&!regCf.test(cf.value)){
if(cf.parentNode.classList.contains("valid")){
cf.parentNode.classList.remove("valid");
cfVal=cf.value;
}
cf.parentNode.classList.add("error");
hasError=true;
}else{
if(cf.parentNode.classList.contains("error")){
cf.parentNode.classList.remove("error");
}
cf.parentNode.classList.add("valid");
}}else if(!apGuestLikeFrontendFlow &&
userData &&
userData.PatientWebCard &&
userData.PatientWebCard.Paziente &&
userData.PatientWebCard.Paziente.PazienteCF
){
cfVal=userData.PatientWebCard.Paziente.PazienteCF;
}
var bookingCustomerAccountOther=document.getElementById("booking_customer_account_other");
if(bookingCustomerAccountOther&&bookingCustomerAccountOther.checked){
if(!regName.test(bookedby_firstname.value)){
if(bookedby_firstname.parentNode.classList.contains("valid")){
bookedby_firstname.parentNode.classList.remove("valid");
}
bookedby_firstname.parentNode.classList.add("error");
hasError=true;
}else{
if(bookedby_firstname.parentNode.classList.contains("error")){
bookedby_firstname.parentNode.classList.remove("error");
}
bookedby_firstname.parentNode.classList.add("valid");
}
if(!regName.test(bookedby_lastname.value)){
if(bookedby_lastname.parentNode.classList.contains("valid")){
bookedby_lastname.parentNode.classList.remove("valid");
}
bookedby_lastname.parentNode.classList.add("error");
hasError=true;
}else{
if(bookedby_lastname.parentNode.classList.contains("error")){
bookedby_lastname.parentNode.classList.remove("error");
}
bookedby_lastname.parentNode.classList.add("valid");
}
if(bookedby_phone.value.length < 9 ||
bookedby_phone.value.length > 10 ||
(bookedby_phone.value.charAt(0)!=3&&bookedby_phone.value.charAt(0)!=0) ||
!/^\d+$/.test(bookedby_phone.value)
){
if(bookedby_phone.parentNode.classList.contains("valid")){
bookedby_phone.parentNode.classList.remove("valid");
}
bookedby_phone.parentNode.classList.add("error");
hasError=true;
}else{
if(bookedby_phone.parentNode.classList.contains("error")){
bookedby_phone.parentNode.classList.remove("error");
}
bookedby_phone.parentNode.classList.add("valid");
}
if(!regEmail.test(bookedby_email.value)){
if(bookedby_email.parentNode.classList.contains("valid")){
bookedby_email.parentNode.classList.remove("valid");
}
bookedby_email.parentNode.classList.add("error");
hasError=true;
}else{
if(bookedby_email.parentNode.classList.contains("error")){
bookedby_email.parentNode.classList.remove("error");
}
bookedby_email.parentNode.classList.add("valid");
}}
var bookingForOther=bookingCustomerAccountOther&&bookingCustomerAccountOther.checked;
bookingData.firstname=bookingForOther ? bookedby_firstname.value:firstname.value;
bookingData.lastname=bookingForOther ? bookedby_lastname.value:lastname.value;
bookingData.phone=bookingForOther ? bookedby_phone.value:phone.value;
bookingData.phone_prefix=bookingForOther ? bookedby_phone_prefix.value:phone_prefix.value;
bookingData.email=bookingForOther ? bookedby_email.value:email.value;
bookingData.cf=bookingForOther ? "":cfVal;
if(pageBooking.classList.contains("sos")){
bookingData.sos=true;
bookingData.message =
document.querySelector("#booking-message").value;
}else{
bookingData.sos=false;
bookingData.message="";
}
bookingData.marketing =
document.querySelector("#booking-marketing").checked;
bookingData.profile =
document.querySelector("#booking-profile").checked;
bookingData.pageUrl=window.location.href;
bookingData.pageTitle=document.title;
if(bookingForOther){
bookingData.bookedby=true;
bookingData.bookedby_firstname=bookedby_firstname.value;
bookingData.bookedby_lastname=bookedby_lastname.value;
bookingData.bookedby_phone=bookedby_phone.value;
bookingData.bookedby_phone_prefix=bookedby_phone_prefix.value;
bookingData.bookedby_email=bookedby_email.value;
}else{
bookingData.bookedby=false;
bookingData.bookedby_firstname="";
bookingData.bookedby_lastname="";
bookingData.bookedby_phone="";
bookingData.bookedby_phone_prefix="";
bookingData.bookedby_email="";
}
if(flowControlloIgiene&&typeof flowControlloIgiene.handleSubmitIfFlow8==="function"&&flowControlloIgiene.handleSubmitIfFlow8(hasError)){
e.preventDefault();
return;
}
if(!hasError){
document
.getElementById("email_customer")
.setAttribute("href", "mailto:" + bookingData.email);
document.getElementById("email_customer").innerHTML =
bookingData.email;
dataLayer.push({
event: "FP_step5_inviorichiesta",
convezione: "no",
assicurazione: "no",
informativag: bookingData.marketing ? "si":"no",
informativap: bookingData.profile ? "si":"no",
FP_step1_paziente_value: bookingData.customer ? "si":"no",
});
if(directBooking){
if(!bookingForOther &&
!apGuestLikeFrontendFlow &&
userData &&
userData.PatientWebCard &&
userData.PatientWebCard.Paziente
){
bookingData.pazienteId=userData.PatientWebCard.Paziente.PazienteId;
bookingData.informativa=userData.PatientWebCard.Paziente.PazientiPrivacy_1_Informativa;
bookingData.dirittiModifica=userData.PatientWebCard.Paziente.PazientiPrivacy_2_DirittiModifica;
bookingData.marketing=userData.PatientWebCard.Paziente.PazientiPrivacy_3_Marketing;
bookingData.profile=userData.PatientWebCard.Paziente.PazientiPrivacy_4_Profilazione;
bookingData.grafometrica=userData.PatientWebCard.Paziente.PazientiPrivacy_5_FirmaGrafometrica;
}else{
console.error('PatientWebCard non disponibile:', userData);
bookingData.pazienteId=null;
bookingData.informativa=false;
bookingData.dirittiModifica=false;
bookingData.marketing=false;
bookingData.profile=false;
bookingData.grafometrica=false;
}
bookingData.areaPazienti=true;
var send=sendPostRequestBooking(bookingData);
if(send){
bookingData.reservation=send;
}else{
bookingScroll();
}}else{
bookingSubmitAreaPazienti(bookingData);
}}else{
bookingScroll();
}
e.preventDefault();
});
function bookingSosYes(){
formSection4.classList.add("active");
pageBooking.classList.add("sos");
}
function bookingSosNo(){
pageBooking.classList.remove("sos");
}};
document.addEventListener("DOMContentLoaded", function(){
if(!document.body.classList.contains('footer-loaded')){
document.body.classList.add('footer-loaded');
const footerAccordion=document.querySelectorAll('.cs-footer h4');
for(let i=0; i<footerAccordion.length; i++){
footerAccordion[i].addEventListener('click', function(e){
var parent=this.parentNode;
if(parent.classList.contains('active')){
parent.classList.remove('active')
}else{
parent.classList.add('active')
}});
}}
});
document.addEventListener("DOMContentLoaded", function(){
const bootstrapDropdowns=document.querySelectorAll('.dropdown-menu li a');
for(let i=0; i<bootstrapDropdowns.length; i++){
bootstrapDropdowns[i].addEventListener('click', function(e){
var dropdown=findAncestor(this, '.dropdown');
dropdown.querySelector('.btn').innerHTML=this.innerHTML;
dropdown.querySelector('.btn').value=this.getAttribute('data-value');
e.preventDefault();
});
}
function findAncestor (el, sel){
while ((el=el.parentElement)&&!((el.matches||el.matchesSelector).call(el,sel)));
return el;
}});
var urgenzeData={};
document.addEventListener("DOMContentLoaded", function (){
const urgenzeForm=document.querySelector("#request-urgenze-form");
if(urgenzeForm!=null){
urgenzeForm.querySelector(".cta").addEventListener("click", function (e){
var hasError=false;
var regName=/^[a-zA-ZàèéìíîïòóôùúûñÁÉÍÓÚÜÑ\s\']+$/;
var regEmail =
/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
firstname=urgenzeForm.querySelector('input[name="firstname"]');
lastname=urgenzeForm.querySelector('input[name="lastname"]');
phone=urgenzeForm.querySelector('input[name="phone"]');
email=urgenzeForm.querySelector('input[name="email"]');
message=urgenzeForm.querySelector('textarea[name="message"]');
if(!regName.test(firstname.value)){
if(firstname.parentNode.classList.contains("valid")){
firstname.parentNode.classList.remove("valid");
}
firstname.parentNode.classList.add("error");
hasError=true;
}else{
if(firstname.parentNode.classList.contains("error")){
firstname.parentNode.classList.remove("error");
}
firstname.parentNode.classList.add("valid");
}
if(!regName.test(lastname.value)){
if(lastname.parentNode.classList.contains("valid")){
lastname.parentNode.classList.remove("valid");
}
lastname.parentNode.classList.add("error");
hasError=true;
}else{
if(lastname.parentNode.classList.contains("error")){
lastname.parentNode.classList.remove("error");
}
lastname.parentNode.classList.add("valid");
}
if(phone.value.length < 9 ||
phone.value.length > 10 ||
(phone.value.charAt(0)!=3&&phone.value.charAt(0)!=0) ||
!/^\d+$/.test(phone.value)
){
if(phone.parentNode.classList.contains("valid")){
phone.parentNode.classList.remove("valid");
}
phone.parentNode.classList.add("error");
hasError=true;
}else{
if(phone.parentNode.classList.contains("error")){
phone.parentNode.classList.remove("error");
}
phone.parentNode.classList.add("valid");
}
if(!regEmail.test(email.value)){
if(email.parentNode.classList.contains("valid")){
email.parentNode.classList.remove("valid");
}
email.parentNode.classList.add("error");
hasError=true;
}else{
if(email.parentNode.classList.contains("error")){
email.parentNode.classList.remove("error");
}
email.parentNode.classList.add("valid");
}
if(!hasError){
urgenzeData.firstname=firstname.value;
urgenzeData.lastname=lastname.value;
urgenzeData.phone=phone.value;
urgenzeData.email=email.value;
urgenzeData.message=message.value;
urgenzeData.marketing =
urgenzeForm.querySelector("#urgenze-marketing").checked;
urgenzeData.profile =
urgenzeForm.querySelector("#urgenze-profile").checked;
urgenzeSubmit(urgenzeData);
}
e.preventDefault();
});
}
function urgenzeSubmit(dataContent){
var grecaptcha_key=document
.getElementById("g-recaptcha")
.getAttribute("src")
.split("render=")[1];
grecaptcha.ready(function (){
grecaptcha
.execute(grecaptcha_key, { action: "submit" })
.then(function (token){
document.body.classList.add("overlay-loading-show");
const urlParams=new URLSearchParams(window.location.search);
const gclid_field=urlParams.get("gclid");
dataContent.gclid_field=gclid_field!=null ? gclid_field:"";
dataContent.path=window.location.pathname;
let myDataJSON=JSON.stringify({
"g-recaptcha-response": token,
data: dataContent,
});
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function (){
if(this.readyState==4&&this.status==200){
goThankyou("/grazie-urgenze/", { email: dataContent.email });
}};
const link=new URL(
document.getElementById("ajaxurl").getAttribute("href")
);
link.searchParams.set("action", "dp_urgenze");
xhttp.open("POST", link, true);
xhttp.setRequestHeader("Content-type",
"application/json; charset=UTF-8"
);
xhttp.send(myDataJSON);
});
});
}});
document.addEventListener("DOMContentLoaded", function(){
if(document.body.classList.contains('page-template-page-work')&&!document.body.classList.contains('work-loaded')){
document.body.classList.add('work-loaded');
function getAnnounces(){
var grecaptcha_key=document.getElementById('g-recaptcha').getAttribute('src').split('render=')[1];
grecaptcha.ready(function(){
grecaptcha.execute(grecaptcha_key, {action: 'submit'}).then(function(token){
let myData='action=dp_get_announces&g-recaptcha-response=' + token;
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function(){
if(this.readyState==4&&this.status==200){
var announces=xhttp.responseText;
try {
announces=JSON.parse(announces);
} catch (e){
console.log(e);
return;
}
bindAnnounces(announces);
}};
let link=document.getElementById('ajaxurl').getAttribute('href');
xhttp.open("POST", link, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
xhttp.send(myData);
});
});
}
getAnnounces();
function bindAnnounces(announces){
var announce, validAnnounces=[], jobsLi='', categoriesLi='', provincesLi='', projects=[], functions=[], provinces=[], workModal=document.getElementById('workModal');
var workCategoryPlaceholder=document.querySelector('#work-category').innerHTML;
var workProvincePlaceholder=document.querySelector('#work-province').innerHTML;
for(let i=0; i<announces.length; i++){
announce=announces[i];
expire=announce.expires.replace(/ *\([^)]*\) */g, "");
expire=expire.split('-');
newDate=new Date(expire[2], expire[1]-1, expire[0]);
timestamp=newDate.getTime();
if(timestamp - Date.now() > 0){
validAnnounces.push(announce);
}}
for(let i=0; i<validAnnounces.length; i++){
announce=validAnnounces[i];
if(announce.project_label!=null&&projects.indexOf(announce.project_label)===-1){
projects.push(announce.project_label)
}
}
for(let i=0; i<projects.length; i++){
jobsLi +='<li><a class="dropdown-item" href="#" data-value="'+projects[i]+'">'+projects[i]+'</a></li>';
}
document.getElementById('work-job').parentNode.querySelector('ul').innerHTML=jobsLi;
var filters=document.querySelectorAll('.search-work .col-md-4');
for(let i=0; i<filters.length; i++){
if(i > 0){
filters[i].classList.add('inactive');
}}
const searchWorkDropdowns=document.querySelector('#work-job').parentNode.querySelectorAll('.dropdown-menu li a');
for(let i=0; i<searchWorkDropdowns.length; i++){
searchWorkDropdowns[i].addEventListener('click', function(event){
var dropdown=findAncestor(this, '.dropdown');
dropdown.querySelector('.btn').innerHTML=this.innerHTML;
dropdown.querySelector('.btn').value=this.getAttribute('data-value');
if(dropdown.querySelector('.btn').getAttribute('id')=='work-job'){
var currentJob=this.getAttribute('data-value');
enableCategories=[];
categoriesLi='';
var boxes=document.querySelectorAll('#candidature .work-boxes .box');
for(let e=0; e<boxes.length; e++){
boxes[e].parentNode.classList.remove('active');
boxes[e].parentNode.classList.remove('inactive');
boxes[e].parentNode.classList.remove('hidden');
if(boxes[e].getAttribute('data-job')==currentJob){
boxes[e].parentNode.classList.add('active');
cat=boxes[e].getAttribute('data-category');
if(enableCategories.indexOf(cat)===-1){
enableCategories.push(cat);
}}else{
boxes[e].parentNode.classList.add('inactive');
}}
for(let e=0; e<filters.length; e++){
if(e > 1){
filters[e].classList.add('inactive');
}else{
filters[e].classList.remove('inactive');
}}
for(let e=0; e<enableCategories.length; e++){
categoriesLi +='<li><a class="dropdown-item" href="#" data-value="'+enableCategories[e]+'">'+enableCategories[e]+'</a></li>';
}
document.querySelector('#work-category').innerHTML=workCategoryPlaceholder;
document.querySelector('#work-category').parentNode.querySelector('ul').innerHTML=categoriesLi;
workPagination();
workCategoryDropdown=document.querySelector('#work-category').parentNode.querySelectorAll('.dropdown-menu li a');
for(let e=0; e<workCategoryDropdown.length; e++){
workCategoryDropdown[e].addEventListener('click', function(event){
var dropdown=findAncestor(this, '.dropdown');
dropdown.querySelector('.btn').innerHTML=this.innerHTML;
dropdown.querySelector('.btn').value=this.getAttribute('data-value');
var currentCategory=this.getAttribute('data-value');
enableProvince=[];
provinceLi='';
for(let e=0; e<boxes.length; e++){
boxes[e].parentNode.classList.remove('active');
boxes[e].parentNode.classList.remove('inactive');
boxes[e].parentNode.classList.remove('hidden');
if(boxes[e].getAttribute('data-job')==currentJob&&boxes[e].getAttribute('data-category')==currentCategory){
boxes[e].parentNode.classList.add('active');
province=boxes[e].getAttribute('data-province');
if(enableProvince.indexOf(province)===-1){
enableProvince.push(province);
}}else{
boxes[e].parentNode.classList.add('inactive');
}}
for(let e=0; e<filters.length; e++){
filters[e].classList.remove('inactive');
}
for(let e=0; e<enableProvince.length; e++){
provinceLi +='<li><a class="dropdown-item" href="#" data-value="'+enableProvince[e]+'">'+enableProvince[e]+'</a></li>';
}
document.querySelector('#work-province').innerHTML=workProvincePlaceholder;
document.querySelector('#work-province').parentNode.querySelector('ul').innerHTML=provinceLi;
workPagination();
workProvinceDropdown=document.querySelector('#work-province').parentNode.querySelectorAll('.dropdown-menu li a');
for(let e=0; e<workProvinceDropdown.length; e++){
workProvinceDropdown[e].addEventListener('click', function(event){
var dropdown=findAncestor(this, '.dropdown');
dropdown.querySelector('.btn').innerHTML=this.innerHTML;
dropdown.querySelector('.btn').value=this.getAttribute('data-value');
var currentProvince=this.getAttribute('data-value');
for(let e=0; e<boxes.length; e++){
boxes[e].parentNode.classList.remove('active');
boxes[e].parentNode.classList.remove('inactive');
boxes[e].parentNode.classList.remove('hidden');
if(boxes[e].getAttribute('data-job')==currentJob&&boxes[e].getAttribute('data-category')==currentCategory&&boxes[e].getAttribute('data-province')==currentProvince){
boxes[e].parentNode.classList.add('active');
}else{
boxes[e].parentNode.classList.add('inactive');
}}
workPagination();
event.preventDefault();
});
}
event.preventDefault();
});
}}
event.preventDefault();
});
}
const announcesContainerEl=document.querySelector('#candidature .work-boxes');
if(announcesContainerEl!=null){
var itemsTemplate=Handlebars.compile(document.querySelector('.work-boxes-html').innerHTML);
var resultItemContext={ announces: validAnnounces };
announcesContainerEl.innerHTML=itemsTemplate(resultItemContext);
workPagination();
var announcesBoxes=announcesContainerEl.querySelectorAll('.box');
for(let i=0; i<announcesBoxes.length; i++){
announcesBoxes[i].addEventListener('click', function(e){
var id=this.getAttribute('data-id');
for(let e=0; e<validAnnounces.length; e++){
if(validAnnounces[e].id==id){
var announce=validAnnounces[e], announceContent;
workModal.querySelector('.teaser h2').innerHTML=announce.title;
workModal.querySelector('.teaser .location-name').innerHTML=announce.county;
announceContent=workModal.querySelector('.work-content');
announceContent.innerHTML='';
announceContent.innerHTML +=sanitizeAnnounceHtml(announce.position_description);
announceContent.innerHTML +=sanitizeAnnounceHtml(announce.requirements_description);
announceContent.innerHTML +=sanitizeAnnounceHtml(announce.other_information_description);
workModal.querySelector('.work-form').innerHTML='<iframe src="'+announce.registration_iframe_url+'"></iframe>';
}}
e.preventDefault();
});
}
document.querySelector('.search-work').classList.add('work-loaded');
}}
function findAncestor (el, sel){
while ((el=el.parentElement)&&!((el.matches||el.matchesSelector).call(el,sel)));
return el;
}
function sanitizeAnnounceHtml(html){
var t=document.createElement('template');
t.innerHTML=html;
content=t.content;
p=content.childNodes;
content.innerHTML='';
for(let i=0; i<p.length; i++){
if(p[i].innerHTML.trim()!=''&&p[i].innerHTML.trim()!='<br>')
content.innerHTML +='<'+p[i].localName+'>'+p[i].innerHTML+'</'+p[i].localName+'>';
}
return content.innerHTML;
}
function workPagination(){
var boxes_per_page=6;
var boxes=document.querySelectorAll('.work-boxes .active');
var totPages=Math.ceil(boxes.length / boxes_per_page);
var pagination=document.querySelector('.work-boxes-pagination .pager');
var pages='';
for(let i=0; i<boxes.length; i++){
if(i >=boxes_per_page){
boxes[i].classList.add('hidden');
}}
for(let i=1; i<=totPages; i++){
current=(i==1) ? ' current':'';
if(i==3||i==totPages-1){
pages +='<span class="dots">...</span>';
}
pages +='<span class="page'+current+'">'+i+'</span>';
}
pagination.innerHTML='<span class="prev"></span>' + pages + '<span class="next"></span>';
var pages=pagination.querySelectorAll('span');
for(let i=0; i<pages.length; i++){
pages[i].addEventListener('click', function(){
if(!this.classList.contains('current')&&!this.classList.contains('dots')){
var currentPage=parseInt(pagination.querySelector('.current').innerHTML);
var pageClick=null;
if(this.classList.contains('prev')&&currentPage > 1){
pageClick=currentPage - 1;
}
if(this.classList.contains('next')&&currentPage < pages.length-4){
pageClick=currentPage + 1;
}
if(this.classList.contains('page')){
pageClick=parseInt(this.innerHTML);
}
if(pageClick!=null){
for(let e=0; e<pages.length; e++){
if(pages[e].innerHTML==currentPage){
pages[e].classList.remove('current');
}
if(pages[e].innerHTML==pageClick){
pages[e].classList.add('current');
}}
minLimit=(pageClick-1)*boxes_per_page;
maxLimit=minLimit+boxes_per_page;
for(let e=0; e<boxes.length; e++){
boxes[e].classList.remove('hidden');
if(e < minLimit||e >=maxLimit){
boxes[e].classList.add('hidden');
}}
}
updatePaginationPager();
}});
}
function updatePaginationPager(){
myCurrent=parseInt(pagination.querySelector('.current').innerHTML);
dots=pagination.querySelectorAll('.dots');
if(dots.length){
dots[0].classList.remove('hidden');
if(myCurrent < 5||pages.length<=9){
dots[0].classList.add('hidden');
}
if(dots.length > 1){
dots[1].classList.remove('hidden');
if(myCurrent==pages.length-6||myCurrent==pages.length-7||myCurrent==pages.length-8||pages.length<=9){
dots[1].classList.add('hidden');
}}
for(let i=0; i<pages.length; i++){
if(!pages[i].classList.contains('dots')){
pages[i].classList.remove('hidden');
if(i > 1&&i<pages.length-3){
if(i!=myCurrent&&i!=myCurrent+1&&i!=myCurrent+2&&pages.length > 9){
pages[i].classList.add('hidden');
}}
}}
if(myCurrent <=5){
pages[2].classList.remove('hidden');
}
if(myCurrent==pages.length-8){
pages[pages.length-5].classList.remove('hidden');
}}
}
updatePaginationPager();
}}
if(document.querySelector('#primaryContentSlide .cta')!=null){
document.querySelector('#primaryContentSlide .cta').addEventListener('click', function(e){
if(this.getAttribute('href')=='#candidature'){
minus=(window.innerWidth > 991) ? 200:0
scroll({
top: document.getElementById('candidature').offsetTop - minus,
behavior: "smooth"
});
e.preventDefault();
}
if(this.getAttribute('href')=='#recensioni'){
minus=(window.innerWidth > 991) ? 200:0
scroll({
top: document.getElementById('index-2').offsetTop - minus,
behavior: "smooth"
});
e.preventDefault();
}});
}});
(function (){
var isDesktop=function (){ return window.matchMedia("(min-width: 768px)").matches; };
function initRsMobile(){
if(typeof jQuery==="undefined") return;
var wrap=jQuery(".review-slider .rs-slider-mobile");
if(!wrap.length) return;
wrap.find(".rs-tab").on("click", function (){
var tab=jQuery(this).attr("data-tab");
wrap.find(".rs-tab").removeClass("rs-active").attr("aria-selected", "false");
jQuery(this).addClass("rs-active").attr("aria-selected", "true");
wrap.find(".rs-panel").removeClass("rs-active");
var activePanel=wrap.find(".rs-panel[data-tab=\"" + tab + "\"]").addClass("rs-active");
setTimeout(checkCardTruncation, 80);
});
function setMobileCardsHeight(owlEl){
owlEl.find(".rs-card").removeClass("rs-expanded").css("height", "");
owlEl.find(".rs-card-more").text("Mostra di più").attr("aria-expanded", "false");
checkCardTruncation();
}
wrap.find(".rs-owl-mobile").each(function (){
var el=jQuery(this);
if(el.hasClass("owl-loaded")) return;
el.owlCarousel({
items: 1,
margin: 12,
loop: el.find(".item").length > 1,
nav: false,
dots: true,
autoplay: false,
onTranslated: function (){
setTimeout(function (){ setMobileCardsHeight(el); }, 150);
},
onChanged: function (){
setTimeout(function (){ setMobileCardsHeight(el); }, 150);
},
onDragged: function (){
setTimeout(function (){ setMobileCardsHeight(el); }, 150);
}});
el.on("translated.owl.carousel dragged.owl.carousel changed.owl.carousel", function (){
setTimeout(function (){ setMobileCardsHeight(el); }, 150);
});
});
setTimeout(checkCardTruncation, 200);
}
function initReviewSliders(){
if(typeof jQuery==="undefined") return;
var section=jQuery(".review-slider");
if(!section.length) return;
var desktopBlock=section.find(".rs-slider-desktop");
var rsOwl=desktopBlock.find(".rs-owl");
if(!rsOwl.length) return;
rsOwl.each(function (){
var el=jQuery(this);
if(el.hasClass("owl-loaded")) return;
el.owlCarousel({
items: 2,
margin: 16,
loop: el.find(".item").length > 2,
nav: false,
dots: false,
autoplay: false,
navText: ["‹", "›"],
responsive: {
0: { items: 1 },
768: { items: 2 },
992: { items: 2 }}
});
el.on("changed.owl.carousel", function (){
el.find(".rs-card").removeClass("rs-expanded");
el.find(".rs-card-more").text("Mostra di più").attr("aria-expanded", "false");
resetCardHeights(el);
setTimeout(function (){
equalizeVisibleSlideCards(el);
checkCardTruncation();
}, 80);
});
});
section.find(".rs-summary-prev").on("click", function (){
rsOwl.each(function (){ jQuery(this).trigger("prev.owl.carousel"); });
});
section.find(".rs-summary-next").on("click", function (){
rsOwl.each(function (){ jQuery(this).trigger("next.owl.carousel"); });
});
}
function checkCardTruncation(){
if(typeof jQuery==="undefined") return;
jQuery(".rs-card").each(function (){
var card=jQuery(this);
var textEl=card.find(".rs-card-text")[0];
var btn=card.find(".rs-card-more");
if(!textEl||!btn.length) return;
if(card.hasClass("rs-expanded")) return;
if(textEl.scrollHeight > textEl.clientHeight){
btn.addClass("is-visible").attr("aria-expanded", "false");
}else{
btn.removeClass("is-visible");
}});
}
function equalizeCardHeights(sliderEl){
if(!sliderEl||!sliderEl.length) return;
sliderEl.each(function (){
var el=jQuery(this);
if(el.hasClass("rs-owl-mobile")) return;
var cards=el.find(".rs-card");
if(!cards.length) return;
var panel=el.closest(".rs-panel");
if(panel.length&&panel.css("display")==="none") return;
cards.css("height", "auto");
var maxH=0;
cards.each(function (){
var h=this.offsetHeight;
if(h > maxH) maxH=h;
});
if(maxH > 0) cards.css("height", maxH + "px");
});
}
function resetCardHeights(sliderEl){
if(!sliderEl||!sliderEl.length) return;
sliderEl.find(".rs-card").css("height", "");
}
function equalizeVisibleSlideCards(carouselEl){
if(!carouselEl||!carouselEl.length) return;
if(carouselEl.hasClass("rs-owl-mobile")) return;
var cards=carouselEl.find(".owl-item.active .rs-card");
if(!cards.length){
cards=carouselEl.find(".owl-item.center .rs-card");
}
if(!cards.length){
equalizeCardHeights(carouselEl);
return;
}
cards.css("height", "auto");
var maxH=0;
cards.each(function (){
var h=this.offsetHeight;
if(h > maxH) maxH=h;
});
if(maxH > 0) cards.css("height", maxH + "px");
}
function runEqualizationForSlider(slider){
if(!slider||!slider.length) return;
resetCardHeights(slider);
setTimeout(function (){
equalizeCardHeights(slider);
setTimeout(checkCardTruncation, 50);
}, 80);
}
function bindCardMore(){
if(typeof jQuery==="undefined") return;
jQuery(document).on("click", ".rs-card-more", function (){
var btn=jQuery(this);
var card=btn.closest(".rs-card");
var slider=card.closest(".rs-owl-mobile, .rs-owl");
var isGmbOpinioni=card.closest(".opinioni-pazienti").length > 0;
if(card.hasClass("rs-expanded")){
card.removeClass("rs-expanded");
btn.text("Mostra di più").attr("aria-expanded", "false");
if(slider.length&&!isGmbOpinioni){
var isMobile=slider.hasClass("rs-owl-mobile");
if(isMobile){
resetCardHeights(slider);
}else{
runEqualizationForSlider(slider);
}}
}else{
card.addClass("rs-expanded");
btn.text("Mostra di meno").attr("aria-expanded", "true");
if(slider.length&&!isGmbOpinioni){
var isMobile=slider.hasClass("rs-owl-mobile");
if(!isMobile){
equalizeCardHeights(slider);
setTimeout(checkCardTruncation, 50);
}}
}});
}
function init(){
if(isDesktop()){
initReviewSliders();
}else{
initRsMobile();
}
bindCardMore();
setTimeout(checkCardTruncation, 200);
jQuery(window).on("resize", function (){
jQuery(".rs-card").removeClass("rs-expanded");
jQuery(".rs-card-more").text("Mostra di più").attr("aria-expanded", "false").removeClass("is-visible");
resetCardHeights(jQuery(".review-slider .rs-owl-mobile, .review-slider .rs-owl"));
setTimeout(checkCardTruncation, 150);
});
}
if(document.readyState==="loading"){
document.addEventListener("DOMContentLoaded", init);
}else{
init();
}})();
function landingSubmit(form, subject, recipients, thankyou, validExtensions=['doc', 'docx', 'pdf', 'png']){
var grecaptcha_key=document.getElementById('g-recaptcha').getAttribute('src').split('render=')[1];
grecaptcha.ready(function(){
grecaptcha.execute(grecaptcha_key, {action: 'submit'}).then(function(token){
document.body.classList.add('overlay-loading-show');
const urlParams=new URLSearchParams(window.location.search);
const gclid_field=urlParams.get('gclid');
form.gclid_field=(gclid_field!=null) ? gclid_field:'';
var formData=new FormData();
formData.append('action', 'dp_landing');
formData.append('g-recaptcha-response', token);
formData.append('data', JSON.stringify(form));
formData.append('subject', subject);
formData.append('recipients', JSON.stringify(recipients));
var fileInput=document.getElementById('request-landing-file');
if(fileInput!=null){
var hint=fileInput.parentNode.querySelector('.hint');
if(hint!=null){
hint.remove();
}
var file=fileInput.files[0];
if(file){
var isValidFile=false;
var fileExtension=file.name.split('.').pop();
for(let i=0; i<validExtensions.length; i++){
if(fileExtension==validExtensions[i]){
isValidFile=true;
}}
if(!isValidFile){
var error='I formati validi sono: ' + validExtensions.join(', ');
}else{
var fileSizeMB=file.size / (1024 * 1024);
if(fileSizeMB > 20){
isValidFile=false;
var error='La dimensione massima deve essere 20MB';
}}
if(isValidFile){
formData.append('file', file);
}
if(!isValidFile){
var spanElement=document.createElement('span');
spanElement.textContent=error;
spanElement.classList.add('hint');
spanElement.style.display='block';
spanElement.style.marginBottom=0;
fileInput.insertAdjacentElement('afterend', spanElement);
document.body.classList.remove('overlay-loading-show');
return;
}}
}
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function(){
if(this.readyState==4&&this.status==200){
goThankyou(thankyou, {email: formData.email});
}};
let link=document.getElementById('ajaxurl').getAttribute('href');
xhttp.open("POST", link, true);
xhttp.send(formData);
});
});
}
function goThankyou(path, params, method='post'){
const form=document.createElement('form');
form.method=method;
form.action=path;
for (const key in params){
if(params.hasOwnProperty(key)){
const hiddenField=document.createElement('input');
hiddenField.type='hidden';
hiddenField.name=key;
hiddenField.value=params[key];
form.appendChild(hiddenField);
}}
document.body.appendChild(form);
form.submit();
};
document.addEventListener("DOMContentLoaded", function(){
if(!document.body.classList.contains('area-pazienti-login-loaded')&&document.body.classList.contains('area-pazienti')&&!document.body.classList.contains('area-pazienti-dashboard')){
document.body.classList.add('area-pazienti-login-loaded');
if(!document.body.classList.contains('area-pazienti-register')){
if(!sessionStorage.getItem('userData')){
const currentUrl=window.location.href;
const urlObj=new URL(currentUrl);
const params=new URLSearchParams(urlObj.search);
if(!params.has('matchPatient')&&!params.has('TokenSelector')&&!params.has('ts')){
window.location.href='/area-pazienti/?login';
}}else{
window.location.href='/area-pazienti/dashboard/';
}}
var login=document.getElementById('login');
var register=document.getElementById('register');
if(login!=null){
var formLogin=login.querySelector('.form-login form');
var formRecover=login.querySelector('.form-recover form');
formLogin.addEventListener('submit', function(e){
const formLoginData=new FormData(formLogin);
formLogin.querySelector('.error').innerHTML='';
formLogin.querySelector('.error').classList.add('hide');
var grecaptcha_key=document.getElementById('g-recaptcha').getAttribute('src').split('render=')[1];
grecaptcha.ready(function(){
grecaptcha.execute(grecaptcha_key, {action: 'submit'}).then(function(token){
document.body.classList.add('overlay-loading-show');
formLoginData.append('action', 'dp_login');
formLoginData.append('g-recaptcha-response', token);
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function(){
if(this.readyState==4&&this.status==200){
var response=xhttp.responseText;
if(isJSON(response)){
response=JSON.parse(response);
if(!response.esit){
document.body.classList.remove('overlay-loading-show');
formLogin.querySelector('.error').innerHTML=response.errorDesc;
formLogin.querySelector('.error').classList.remove('hide');
}else{
response.Data.expiry=(formLoginData.get('remember')) ? false:(new Date().getTime() + (60 * 60 * 1000));
sessionStorage.setItem('userData', JSON.stringify(response.Data));
window.location.href='/area-pazienti/dashboard/';
}}else{
document.body.classList.remove('overlay-loading-show');
formLogin.querySelector('.error').innerHTML=response;
formLogin.querySelector('.error').classList.remove('hide');
}}
};
let link=document.getElementById('ajaxurl').getAttribute('href');
xhttp.open("POST", link, true);
xhttp.send(formLoginData);
});
});
e.preventDefault();
});
formRecover.addEventListener('submit', function(e){
const formRecoverData=new FormData(formRecover);
formRecover.querySelector('.error').innerHTML='';
formRecover.querySelector('.error').classList.add('hide');
formRecover.querySelector('.valid').innerHTML='';
formRecover.querySelector('.valid').classList.add('hide');
var grecaptcha_key=document.getElementById('g-recaptcha').getAttribute('src').split('render=')[1];
grecaptcha.ready(function(){
grecaptcha.execute(grecaptcha_key, {action: 'submit'}).then(function(token){
document.body.classList.add('overlay-loading-show');
formRecoverData.append('action', 'dp_recover');
formRecoverData.append('g-recaptcha-response', token);
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function(){
if(this.readyState==4&&this.status==200){
document.body.classList.remove('overlay-loading-show');
var response=xhttp.responseText;
if(isJSON(response)){
response=JSON.parse(response);
if(!response.esit){
formRecover.querySelector('.error').innerHTML=response.errorDesc;
formRecover.querySelector('.error').classList.remove('hide');
}else{
formRecover.querySelector('.valid').innerHTML='È stata inviata una mail per recuperare la password';
formRecover.querySelector('.valid').classList.remove('hide');
}}else{
formRecover.querySelector('.error').innerHTML=response;
formRecover.querySelector('.error').classList.remove('hide');
}}
};
let link=document.getElementById('ajaxurl').getAttribute('href');
xhttp.open("POST", link, true);
xhttp.send(formRecoverData);
});
});
e.preventDefault();
});
}
if(register!=null){
var formRegister=register.querySelector('.form-register form');
formRegister.addEventListener('submit', function(e){
const formRegisterData=new FormData(formRegister);
formRegister.querySelector('.error').innerHTML='';
formRegister.querySelector('.error').classList.add('hide');
var grecaptcha_key=document.getElementById('g-recaptcha').getAttribute('src').split('render=')[1];
grecaptcha.ready(function(){
grecaptcha.execute(grecaptcha_key, {action: 'submit'}).then(function(token){
document.body.classList.add('overlay-loading-show');
formRegisterData.append('action', 'dp_register');
formRegisterData.append('g-recaptcha-response', token);
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange=function(){
if(this.readyState==4&&this.status==200){
document.body.classList.remove('overlay-loading-show');
var response=xhttp.responseText;
if(isJSON(response)){
response=JSON.parse(response);
if(!response.esit){
formRegister.querySelector('.error').innerHTML=response.errorDesc;
formRegister.querySelector('.error').classList.remove('hide');
}else{
register.querySelector('.form-register').classList.add('hide');
register.querySelector('.thankyou').classList.remove('hide');;
}}else{
formRegister.querySelector('.error').innerHTML=response;
formRegister.querySelector('.error').classList.remove('hide');
}}
};
let link=document.getElementById('ajaxurl').getAttribute('href');
xhttp.open("POST", link, true);
xhttp.send(formRegisterData);
});
});
e.preventDefault();
});
}
var loginLinks=document.querySelectorAll('.show-login-form');
for(let i=0; i<loginLinks.length; i++){
loginLinks[i].addEventListener('click', function(e){
login.classList.remove('hide');
register.classList.add('hide');
login.querySelector('.form-login').classList.remove('hide');
login.querySelector('.form-recover').classList.add('hide');
e.preventDefault();
});
}
var recoverLinks=document.querySelectorAll('.show-recover-form');
for(let i=0; i<recoverLinks.length; i++){
recoverLinks[i].addEventListener('click', function(e){
login.classList.remove('hide');
register.classList.add('hide');
login.querySelector('.form-login').classList.add('hide');
login.querySelector('.form-recover').classList.remove('hide');
e.preventDefault();
});
}
var registerLinks=document.querySelectorAll('.show-register-form');
for(let i=0; i<registerLinks.length; i++){
registerLinks[i].addEventListener('click', function(e){
login.classList.add('hide');
register.classList.remove('hide');
e.preventDefault();
});
}}
function checkExpiry(){
var expired=false;
var key='userData';
var itemStr=sessionStorage.getItem(key);
if(!itemStr&&document.body.classList.contains('page-template-page-register')){
return null;
}
if(!itemStr){
window.location.href='/area-pazienti/?login';
return null;
}
if(isJSON(itemStr)){
var item=JSON.parse(itemStr);
if(item.expiry){
var now=new Date();
if(now.getTime() > item.expiry){
sessionStorage.removeItem(key);
expired=true;
}}
if(sessionStorage.getItem(key)&&document.body.classList.contains('area-pazienti')&&!document.body.classList.contains('area-pazienti-dashboard')){
document.body.classList.add('overlay-loading-show');
window.location.href='/area-pazienti/dashboard/';
return null;
}}else{
sessionStorage.removeItem(key);
expired=true;
}
if(expired&&document.body.classList.contains('page-template-page-register')){
return null;
}
if(expired&&document.body.classList.contains('area-pazienti')){
document.body.classList.add('overlay-loading-show');
window.location.href='/area-pazienti/?login';
return null;
}}
function isJSON(str){
try {
JSON.parse(str);
return true;
} catch (e){
return false;
}}
});