(function($){
"use strict";
$(window).on('elementor/frontend/init', function(){
elementorFrontend.waypoint=function($element, callback, options){
if($element.length <=0) return;
const defaultOptions={
offset: '100%',
triggerOnce: true
};
options=jQuery.extend(defaultOptions, options);
const correctCallback=function (){
const element=this.element||this,
result=callback.apply(element, arguments);
if(options.triggerOnce&&this.destroy){
this.destroy();
}
return result;
};
return $element.elementorWaypoint(correctCallback, options);
}});
}(jQuery));
(function (){
function el(tag, attrs, children){
var node=document.createElement(tag);
if(attrs){
Object.keys(attrs).forEach(function (k){
if(k==="class") node.className=attrs[k];
else if(k==="text") node.textContent=attrs[k];
else node.setAttribute(k, attrs[k]);
});
}
(children||[]).forEach(function (c){
if(typeof c==="string") node.appendChild(document.createTextNode(c));
else if(c) node.appendChild(c);
});
return node;
}
function safeText(v){
return String(v==null ? "":v);
}
function cleanPhone(v){
return safeText(v).replace(/[^\d]/g, "");
}
function deepGet(obj, path){
var cur=obj;
var parts=String(path||"").split(".");
for (var i=0; i < parts.length; i++){
if(!cur||typeof cur!=="object") return "";
cur=cur[parts[i]];
}
return cur==null ? "":cur;
}
function htmlToNode(html){
var t=document.createElement("template");
t.innerHTML=String(html||"").trim();
return t.content.firstElementChild||document.createElement("div");
}
function htmlToText(html){
if(html==null) return "";
var t=document.createElement("template");
t.innerHTML=String(html);
var lis=t.content ? t.content.querySelectorAll("li"):[];
if(lis&&lis.length){
var items=[];
for (var i=0; i < lis.length; i++){
var v=safeText(lis[i].textContent||"").replace(/\s+/g, " ").trim();
if(v) items.push(v);
}
return items.join(", ");
}
var out=(t.content&&t.content.textContent) ? t.content.textContent:"";
return safeText(out).replace(/\s+/g, " ").trim();
}
function applyBinds(rootNode, data){
var nodes=rootNode.querySelectorAll("[data-bind],[data-bind-text],[data-bind-href],[data-bind-href-wa],[data-bind-href-tel],[data-show-if]");
for (var i=0; i < nodes.length; i++){
var n=nodes[i];
var showIf=n.getAttribute("data-show-if");
if(showIf){
var vShow=deepGet(data, showIf);
if(!vShow) n.style.display="none";
}
var bindText=n.getAttribute("data-bind-text");
if(bindText) n.textContent=safeText(deepGet(data, bindText));
var bind=n.getAttribute("data-bind");
if(bind&&n.tagName==="IMG"){
var src=safeText(deepGet(data, bind));
if(src) n.setAttribute("src", src);
}else if(bind){
var bg=safeText(deepGet(data, bind));
if(bg) n.style.backgroundImage='url("' + bg.replace(/"/g, '\\"') + '")';
}
var bindHref=n.getAttribute("data-bind-href");
if(bindHref&&n.tagName==="A"){
var href=safeText(deepGet(data, bindHref));
if(href) n.setAttribute("href", href);
}
var bindWa=n.getAttribute("data-bind-href-wa");
if(bindWa){
var zap=safeText(deepGet(data, bindWa));
if(zap) n.setAttribute("href", formatWhatsUrl(zap));
}
var bindTel=n.getAttribute("data-bind-href-tel");
if(bindTel){
var tel=safeText(deepGet(data, bindTel));
if(tel) n.setAttribute("href", "tel:" + cleanPhone(tel));
}}
}
function firstImageFromSuite(s){
if(!s||typeof s!=="object") return "";
if(s.imagem) return safeText(s.imagem);
if(typeof s.imagens==="string") return safeText(s.imagens);
if(Array.isArray(s.imagens)&&s.imagens.length&&s.imagens[0]){
var i0=s.imagens[0];
if(typeof i0==="string") return safeText(i0);
if(i0&&typeof i0==="object"){
if(i0.image) return safeText(i0.image);
if(i0.imagem) return safeText(i0.imagem);
if(i0.url) return safeText(i0.url);
}}
return "";
}
function formatWhatsUrl(zap){
var n=cleanPhone(zap);
if(!n) return "";
if(n.indexOf("55")!==0) n="55" + n;
return "https://wa.me/" + n;
}
function faClass(kind){
if(kind==="pin") return "fa-thin fa-location-dot";
if(kind==="mail") return "fa-thin fa-envelope";
if(kind==="phone") return "fa-thin fa-phone";
if(kind==="whats") return "fa-thin fa-comment-dots";
if(kind==="chat") return "fa-thin fa-comments";
if(kind==="back") return "fa-thin fa-arrow-left";
return "fa-thin fa-circle";
}
function iconMarkup(kind){
return '<i class="bdm-fa ' + faClass(kind) + '" aria-hidden="true"></i>';
}
function findFirstQuestion(items){
for (var i=0; i < items.length; i++){
if(String(items[i].primeira||"").toUpperCase()==="S"&&items[i].tipo==="questao") return items[i];
}
for (var j=0; j < items.length; j++){
if(items[j].tipo==="questao") return items[j];
}
return null;
}
function findOptions(items, questionId){
var out=[];
for (var i=0; i < items.length; i++){
if(items[i].tipo==="opcao"&&String(items[i].parent)===String(questionId)) out.push(items[i]);
}
return out;
}
function findNextQuestion(items, optionId){
for (var i=0; i < items.length; i++){
if(items[i].tipo==="questao"&&String(items[i].parent)===String(optionId)) return items[i];
}
return null;
}
function boot(root){
if(!window.BDMChatPages) window.BDMChatPages={};
var container=document.getElementById("bdm-chat-container");
if(!container){
container=el("div", { id: "bdm-chat-container" });
document.body.appendChild(container);
}
var toggle=el("button", { class: "bdm-chat-toggle", type: "button", "aria-expanded": "false" }, ["Chat"]);
var panel=el("div", { class: "bdm-chat-panel", role: "dialog", "aria-label": "Busca de Motéis Chat" });
var header=el("div", { class: "bdm-chat-header" });
var headerEnd=el("div", { class: "bdm-chat-header-end" });
var titleWrap=el("div", { class: "bdm-chat-nav" });
var navHome=el("button", { class: "bdm-chat-navitem -icon", type: "button", "aria-label": "Home", title: "Home", "data-action": "openHome" });
navHome.innerHTML='<i class="bdm-fa fa-thin fa-house" aria-hidden="true"></i>';
var navRes=el("button", { class: "bdm-chat-navitem -icon", type: "button", "aria-label": "Minhas Reservas", title: "Minhas Reservas", "data-action": "openReservations" });
navRes.innerHTML='<i class="bdm-fa fa-thin fa-calendar-check" aria-hidden="true"></i>';
var navAcc=el("button", { class: "bdm-chat-navitem -icon", type: "button", "aria-label": "Minha Conta", title: "Minha Conta", "data-action": "openAccount" });
navAcc.innerHTML='<i class="bdm-fa fa-thin fa-user" aria-hidden="true"></i>';
var close=el("button", { class: "bdm-chat-close", type: "button", "aria-label": "Sair", title: "Sair" });
close.innerHTML='<i class="bdm-fa fa-thin fa-arrow-right-from-bracket" aria-hidden="true"></i>';
var closeMobile=el("button", {
class: "bdm-chat-close-mobile",
type: "button",
"aria-label": "Fechar",
title: "Fechar",
});
closeMobile.innerHTML='<i class="bdm-fa fa-thin fa-xmark" aria-hidden="true"></i>';
var body=el("div", { class: "bdm-chat-body" });
var state={ currentView: "home" };
var lastForm=null;
titleWrap.appendChild(navHome);
titleWrap.appendChild(navRes);
titleWrap.appendChild(navAcc);
headerEnd.appendChild(close);
headerEnd.appendChild(closeMobile);
header.appendChild(titleWrap);
header.appendChild(headerEnd);
panel.appendChild(header);
panel.appendChild(body);
var noHeaderExit=el("button", {
class: "bdm-chat-noheader-exit",
type: "button",
"aria-label": "Fechar",
title: "Fechar",
});
noHeaderExit.innerHTML='<i class="bdm-fa fa-thin fa-xmark" aria-hidden="true"></i>';
panel.insertBefore(noHeaderExit, header);
noHeaderExit.addEventListener("click", function (){
setOpen(false);
});
function updateNoHeaderExit(){
var v=state.currentView;
var show =
container.classList.contains("bdm-no-header") &&
(v==="authLanding" ||
v==="authLogin" ||
v==="authRegister" ||
v==="authSubmitLogin" ||
v==="authSubmitRegister");
if(show) noHeaderExit.classList.add("bdm-chat-noheader-exit--on");
else noHeaderExit.classList.remove("bdm-chat-noheader-exit--on");
}
function renderBodyLoading(){
body.innerHTML="";
var wrap=el("div", {
class: "bdm-page-loading",
role: "status",
"aria-live": "polite",
"aria-busy": "true",
"aria-label": "Carregando conteúdo"
});
wrap.appendChild(el("i", { class: "bdm-fa fa-solid fa-circle-notch fa-spin", "aria-hidden": "true" }));
body.appendChild(wrap);
}
container.appendChild(toggle);
container.appendChild(panel);
function isMobilePanel(){
return window.matchMedia&&window.matchMedia("(max-width: 768px)").matches;
}
function setOpen(open){
if(open) panel.classList.add("is-open");
else panel.classList.remove("is-open");
toggle.setAttribute("aria-expanded", open ? "true":"false");
if(open){
document.documentElement.classList.add("bdm-chat-noscroll");
}else{
document.documentElement.classList.remove("bdm-chat-noscroll");
}}
function handleCloseClick(){
var pages=window.BDMChatPages||{};
if(state.currentView!=="home"){
navigate("home");
return;
}
if(pages.isLogged&&pages.isLogged()){
if(pages.logout) pages.logout();
navigate("authLanding");
}
setOpen(false);
}
toggle.addEventListener("click", function (){
setOpen(!panel.classList.contains("is-open"));
});
close.addEventListener("click", handleCloseClick);
closeMobile.addEventListener("click", function (){
setOpen(false);
});
window.addEventListener("resize", function (){
if(panel.classList.contains("is-open")){
document.documentElement.classList.add("bdm-chat-noscroll");
}else{
document.documentElement.classList.remove("bdm-chat-noscroll");
}});
navHome.addEventListener("click", function (ev){
ev.preventDefault();
navigate("home");
});
navRes.addEventListener("click", function (ev){
ev.preventDefault();
navigate("reservas");
});
navAcc.addEventListener("click", function (ev){
ev.preventDefault();
navigate("conta");
});
renderBodyLoading();
var bootstrapUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restBootstrap)||"";
var motelUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restMotel)||"";
var suitesUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restSuites)||"";
var templateUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restTemplate)||"";
var loginUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restLogin)||"";
var cadastroUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restCadastro)||"";
var reservasUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restReservas)||"";
var userUpdateUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restUserUpdate)||"";
var suiteDetalhesUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restSuiteDetalhes)||"";
var suitePrecosUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restSuitePrecos)||"";
var intervalosFechamentoUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restIntervalosFechamento)||"";
var suiteTermosUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restSuiteTermos)||"";
var reservaSaveUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restReservaSave)||"";
var reservaCheckUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restReservaCheck)||"";
var reservaDetalheUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restReservaDetalhe)||"";
var pagamentoPreferenceUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restPagamentoPreference)||"";
var pagamentoSubmitUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restPagamentoSubmit)||"";
var pagamentoCheckUrl=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.restPagamentoCheck)||"";
if(!bootstrapUrl||!motelUrl||!suitesUrl||!templateUrl||!loginUrl||!cadastroUrl){
body.textContent="Configuração inválida do plugin.";
return;
}
var cachedMotelData=null;
var templateCache={};
var cache={ chatData: null };
function loadTemplate(name){
if(templateCache[name]) return Promise.resolve(templateCache[name]);
var url=templateUrl + "?name=" + encodeURIComponent(name);
return fetch(url, { credentials: "same-origin" })
.then(function (r){ return r.json(); })
.then(function (j){
templateCache[name]=(j&&j.html) ? j.html:"";
return templateCache[name];
});
}
function wireActions(scope){
var acts=scope.querySelectorAll("[data-action]");
for (var i=0; i < acts.length; i++){
(function (){
var elAct=acts[i];
var act=elAct.getAttribute("data-action");
if(!act) return;
if(elAct.tagName==="FORM"){
elAct.addEventListener("submit", function (ev){
ev.preventDefault();
lastForm=elAct;
if(act==="authSubmitLogin") navigate("authSubmitLogin");
if(act==="authSubmitRegister") navigate("authSubmitRegister");
});
}else{
elAct.addEventListener("click", function (){
if(act==="openChat") navigate("chat");
if(act==="openHome") navigate("home");
if(act==="openSuites") navigate("suites");
if(act==="openReservations") navigate("reservas");
if(act==="openAccount") navigate("conta");
if(act==="authLogin") navigate("authLogin");
if(act==="authRegister") navigate("authRegister");
if(act==="reservarSuite"){
var pages=window.BDMChatPages||{};
var ctx=buildCtx();
if(pages.reservarSuite) pages.reservarSuite(ctx);
}
if(act==="togglePassword"){
var form=elAct.closest("form");
if(!form) return;
var input=form.querySelector('input[name="senha"]');
if(!input) return;
input.type=input.type==="password" ? "text":"password";
}});
}})();
}}
function buildCtx(){
return {
el: el,
safeText: safeText,
cleanPhone: cleanPhone,
deepGet: deepGet,
htmlToNode: htmlToNode,
htmlToText: htmlToText,
applyBinds: applyBinds,
firstImageFromSuite: firstImageFromSuite,
formatWhatsUrl: formatWhatsUrl,
iconMarkup: iconMarkup,
findFirstQuestion: findFirstQuestion,
findOptions: findOptions,
findNextQuestion: findNextQuestion,
loadTemplate: loadTemplate,
wireActions: wireActions,
body: body,
header: header,
state: state,
cache: cache,
urls: {
bootstrap: bootstrapUrl,
motel: motelUrl,
suites: suitesUrl,
suiteDetalhes: suiteDetalhesUrl,
suitePrecos: suitePrecosUrl,
intervalosFechamento: intervalosFechamentoUrl,
suiteTermos: suiteTermosUrl,
reservaSave: reservaSaveUrl,
reservaCheck: reservaCheckUrl,
reservaDetalhe: reservaDetalheUrl,
pagamentoPreference: pagamentoPreferenceUrl,
pagamentoSubmit: pagamentoSubmitUrl,
pagamentoCheck: pagamentoCheckUrl,
login: loginUrl,
cadastro: cadastroUrl,
reservas: reservasUrl,
userUpdate: userUpdateUrl,
},
navigate: navigate,
setHeaderVisible: function (visible){
if(visible) container.classList.remove("bdm-no-header");
else container.classList.add("bdm-no-header");
updateNoHeaderExit();
},
showPageLoading: renderBodyLoading,
};}
function navigate(view){
state.currentView=view;
container.setAttribute("data-bdm-view", String(view||""));
var pages=window.BDMChatPages||{};
var ctx=buildCtx();
if(view!=="authSubmitLogin"&&view!=="authSubmitRegister"){
ctx.showPageLoading();
}
if(view==="authLanding"){
ctx.setHeaderVisible(false);
if(pages.authLanding) return pages.authLanding(ctx, cachedMotelData);
return;
}
if(view==="authLogin"){
ctx.setHeaderVisible(false);
if(pages.authLogin) return pages.authLogin(ctx, cachedMotelData);
return;
}
if(view==="authRegister"){
ctx.setHeaderVisible(false);
if(pages.authRegister) return pages.authRegister(ctx, cachedMotelData);
return;
}
if(view==="authSubmitLogin"){
ctx.setHeaderVisible(false);
if(pages.authSubmitLogin) return pages.authSubmitLogin(ctx, lastForm);
return;
}
if(view==="authSubmitRegister"){
ctx.setHeaderVisible(false);
if(pages.authSubmitRegister) return pages.authSubmitRegister(ctx, lastForm);
return;
}
if(view==="home"){
ctx.setHeaderVisible(true);
if(pages.home) return pages.home(ctx, cachedMotelData);
return;
}
if(view==="chat"){
ctx.setHeaderVisible(true);
if(pages.chat) return pages.chat(ctx);
return;
}
if(view==="suites"){
ctx.setHeaderVisible(true);
if(pages.suites) return pages.suites(ctx);
return;
}
if(view==="reservas"){
ctx.setHeaderVisible(true);
if(pages.reservas) return pages.reservas(ctx);
return;
}
if(view==="conta"){
ctx.setHeaderVisible(true);
if(pages.conta) return pages.conta(ctx, cachedMotelData);
return;
}
if(view==="suiteDetalhes"){
ctx.setHeaderVisible(true);
if(pages.suiteDetalhes) return pages.suiteDetalhes(ctx);
return;
}
if(view==="reservaAguarde"){
ctx.setHeaderVisible(false);
if(pages.reservaAguarde) return pages.reservaAguarde(ctx);
return;
}
if(view==="reservaRecusada"){
ctx.setHeaderVisible(false);
if(pages.reservaRecusada) return pages.reservaRecusada(ctx);
return;
}
if(view==="reservaPagamento"){
ctx.setHeaderVisible(true);
if(pages.reservaPagamento) return pages.reservaPagamento(ctx);
return;
}
if(view==="reservaDetalhe"){
ctx.setHeaderVisible(true);
if(pages.reservaDetalhe) return pages.reservaDetalhe(ctx);
return;
}
updateNoHeaderExit();
}
fetch(motelUrl, { credentials: "same-origin" })
.then(function (r){ return r.json(); })
.then(function (motel){
cachedMotelData=motel;
window.BDMChatMotelModel=motel;
window.BDMChatMotelIntegracao=readModelIntegracao(motel)||readFallbackIntegracao();
var pages=window.BDMChatPages||{};
if(pages.isLogged&&pages.isLogged()) navigate("home");
else navigate("authLanding");
})
.catch(function (){
window.BDMChatMotelIntegracao=readFallbackIntegracao();
navigate("authLanding");
});
}
function normalizeIntegracaoValue(value){
if(value==null) return "";
return String(value).trim().toUpperCase();
}
function readIntegracaoFromNode(node, depth){
if(!node||typeof node!=="object"||depth > 3) return "";
if(Array.isArray(node)){
for (var i=0; i < node.length; i++){
var arrValue=readIntegracaoFromNode(node[i], depth + 1);
if(arrValue) return arrValue;
}
return "";
}
var keys=Object.keys(node);
for (var k=0; k < keys.length; k++){
var key=keys[k];
if(!Object.prototype.hasOwnProperty.call(node, key)) continue;
var normalizedKey=String(key).trim().toLowerCase();
if(normalizedKey==="integracao" ||
normalizedKey==="integração" ||
normalizedKey==="integracao_api" ||
normalizedKey==="integracaopms"
){
return normalizeIntegracaoValue(node[key]);
}}
for (var j=0; j < keys.length; j++){
var child=node[keys[j]];
if(child&&typeof child==="object"){
var nestedValue=readIntegracaoFromNode(child, depth + 1);
if(nestedValue) return nestedValue;
}}
return "";
}
function readModelIntegracao(rawModel){
return readIntegracaoFromNode(rawModel, 0);
}
function readFallbackIntegracao(){
var localized =
window.BuscaDeMoteisChat&&typeof window.BuscaDeMoteisChat==="object"
? normalizeIntegracaoValue(window.BuscaDeMoteisChat.motelIntegracao)
: "";
if(localized) return localized;
return normalizeIntegracaoValue(window.BDMChatMotelIntegracao);
}
function suiteIsUnavailableToday(suite){
if(!suite||typeof suite!=="object") return false;
var modelIntegracao=readModelIntegracao(window.BDMChatMotelModel)||readFallbackIntegracao();
if(modelIntegracao==="N") return false;
if(readModelIntegracao(suite)==="N") return false;
function valueMeansUnavailable(v){
if(v===false) return true;
if(v===true) return false;
if(v===0||v==="0") return true;
if(typeof v==="string"){
var t=v.trim().toLowerCase();
if(t==="0"||t==="false"||t==="no"||t==="n"||t==="nao"||t==="não") return true;
if(t==="indisponivel"||t==="indisponível") return true;
}
if(typeof v==="number") return v===0;
var n=parseInt(v, 10);
return v!=null&&v!==""&&!isNaN(n)&&n===0;
}
if(Object.prototype.hasOwnProperty.call(suite, "disponibilidade")){
return valueMeansUnavailable(suite.disponibilidade);
}
if(Object.prototype.hasOwnProperty.call(suite, "disponivel")){
var d=suite.disponivel;
if(d===false||d===0||d==="0"||d==="N"||d==="n") return true;
if(d===true||d===1||d==="S"||d==="s"||d==="1") return false;
return valueMeansUnavailable(d);
}
if(Object.prototype.hasOwnProperty.call(suite, "disponível")){
return valueMeansUnavailable(suite["disponível"]);
}
if(Object.prototype.hasOwnProperty.call(suite, "indisponivel")||Object.prototype.hasOwnProperty.call(suite, "indisponível")){
var ind=suite.indisponivel!==undefined ? suite.indisponivel:suite["indisponível"];
return ind===true||ind===1||ind==="1"||String(ind).toLowerCase()==="true";
}
return false;
}
window.BDMChatReadIntegracaoFlag=readModelIntegracao;
window.BDMChatSuiteUnavailableToday=suiteIsUnavailableToday;
document.addEventListener("DOMContentLoaded", function (){
var root=document.getElementById("buscademoteis_reservas_root");
if(!root) return;
boot(root);
});
})();
/**
* Owl Carousel v2.2.1
* Copyright 2013-2017 David Deutsch
* Licensed under  ()
*/
!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g--;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c<b;)d=f[c-1]||0,e=this._widths[this.relative(c)]+this.settings.margin,f.push(d+e*a);this._coordinates=f}},{filter:["width","items","settings"],run:function(){var a=this.settings.stagePadding,b=this._coordinates,c={width:Math.ceil(Math.abs(b[b.length-1]))+2*a,"padding-left":a||"","padding-right":a||""};this.$stage.css(c)}},{filter:["width","items","settings"],run:function(a){var b=this._coordinates.length,c=!this.settings.autoWidth,d=this.$stage.children();if(c&&a.items.merge)for(;b--;)a.css.width=this._widths[this.relative(b)],d.eq(b).css(a.css);else c&&(a.css.width=a.items.width,d.css(a.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(a){a.current=a.current?this.$stage.children().index(a.current):0,a.current=Math.max(this.minimum(),Math.min(this.maximum(),a.current)),this.reset(a.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var a,b,c,d,e=this.settings.rtl?1:-1,f=2*this.settings.stagePadding,g=this.coordinates(this.current())+f,h=g+this.width()*e,i=[];for(c=0,d=this._coordinates.length;c<d;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var b,c,e;b=this.$element.find("img"),c=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,e=this.$element.children(c).width(),b.length&&e<=0&&this.preloadAutoWidthImages(b)}this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('<div class="'+this.settings.stageOuterClass+'"/>'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b<c;)(this._invalidated.all||a.grep(this._pipe[b].filter,d).length>0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),this.settings.responsive!==!1&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)<Math.abs(d.y)&&this.is("valid")||(b.preventDefault(),this.enter("dragging"),this.trigger("drag"))},this)))},e.prototype.onDragMove=function(a){var b=null,c=null,d=null,e=this.difference(this._drag.pointer,this.pointer(a)),f=this.difference(this._drag.stage.start,e);this.is("dragging")&&(a.preventDefault(),this.settings.loop?(b=this.coordinates(this.minimum()),c=this.coordinates(this.maximum()+1)-b,f.x=((f.x-b)%c+c)%c+b):(b=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),c=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),d=this.settings.pullDrag?-1*e.x/5:0,f.x=Math.max(Math.min(f.x,b+d),c+d)),this._drag.stage.current=f,this.animate(f.x))},e.prototype.onDragEnd=function(b){var d=this.difference(this._drag.pointer,this.pointer(b)),e=this._drag.stage.current,f=d.x>0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var d=-1,e=30,f=this.width(),g=this.coordinates();return this.settings.freeDrag||a.each(g,a.proxy(function(a,h){return"left"===c&&b>h-e&&b<h+e?d=a:"right"===c&&b>h-f-e&&b<h-f+e?d=a+1:this.op(b,"<",h)&&this.op(b,">",g[a+1]||h-f)&&(d="left"===c?a+1:a),d===-1},this)),this.settings.loop||(this.op(b,">",g[this.minimum()])?d=b=this.minimum():this.op(b,"<",g[this.maximum()])&&(d=b=this.maximum())),d},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){a=this.normalize(a),a!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){for(b=this._items.length,c=this._items[--b].width(),d=this.$element.width();b--&&(c+=this._items[b].width()+this.settings.margin,!(c>d)););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2===0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=f*-1*g),a=c+e,d=((a-h)%g+g)%g+h,d!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.$element.is(":visible")&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){a=this.normalize(a,!0),a!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),this.settings.responsive!==!1&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a<c;case">":return d?a<c:a>c;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&a.namespace.indexOf("owl")!==-1?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type))for(var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&e*-1||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);f++<e;)this.load(h/2+this._core.relative(g)),h&&a.each(this._core.clones(this._core.relative(g)),i),g++},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={lazyLoad:!1},e.prototype.load=function(c){var d=this._core.$stage.children().eq(c),e=d&&d.find(".owl-lazy");!e||a.inArray(d.get(0),this._loaded)>-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"==a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.$stage.children().toArray().slice(b,c),e=[],f=0;a.each(d,function(b,c){e.push(a(c).height())}),f=Math.max.apply(null,e),this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?'style="width:'+c.width+"px;height:"+c.height+'px;"':"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(a){e='<div class="owl-video-play-icon"></div>',d=k.lazyLoad?'<div class="owl-video-tn '+j+'" '+i+'="'+a+'"></div>':'<div class="owl-video-tn" style="opacity:1;background-image:url('+a+')"></div>',b.after(d),b.after(e)};if(b.wrap('<div class="owl-video-wrapper"'+g+"></div>"),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),"youtube"===f.type?c='<iframe width="'+g+'" height="'+h+'" src="//www.youtube.com/embed/'+f.id+"?autoplay=1&rel=0&v="+f.id+'" frameborder="0" allowfullscreen></iframe>':"vimeo"===f.type?c='<iframe src="//player.vimeo.com/video/'+f.id+'?autoplay=1" width="'+g+'" height="'+h+'" frameborder="0" Winkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>':"vzaar"===f.type&&(c='<iframe frameborder="0"height="'+h+'"width="'+g+'" allowfullscreen mozallowfullscreen WinkitAllowFullScreen src="//view.vzaar.com/'+f.id+'/player?autoplay=true"></iframe>'),a('<div class="owl-video-frame">'+c+"</div>").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.WinkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},
a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype.play=function(a,b){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},e.prototype._getNextTimeout=function(d,e){return this._timeout&&b.clearTimeout(this._timeout),b.setTimeout(a.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(e||this._core.settings.autoplaySpeed)},this),d||this._core.settings.autoplayTimeout)},e.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},e.prototype.stop=function(){this._core.is("rotating")&&(b.clearTimeout(this._timeout),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("<div>").addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a<e;a++){if(b>=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("<support>").get(0).style,h="Winkit Moz O ms".split(" "),i={transition:{end:{WinkitTransition:"WinkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WinkitAnimation:"WinkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document);
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(){"use strict";function b(b,d){if(this.el=b,this.$el=a(b),this.s=a.extend({},c,d),this.s.dynamic&&"undefined"!==this.s.dynamicEl&&this.s.dynamicEl.constructor===Array&&!this.s.dynamicEl.length)throw"When using dynamic mode, you must also define dynamicEl as an Array.";return this.modules={},this.lGalleryOn=!1,this.lgBusy=!1,this.hideBartimeout=!1,this.isTouch="ontouchstart"in document.documentElement,this.s.slideEndAnimatoin&&(this.s.hideControlOnEnd=!1),this.s.dynamic?this.$items=this.s.dynamicEl:"this"===this.s.selector?this.$items=this.$el:""!==this.s.selector?this.s.selectWithin?this.$items=a(this.s.selectWithin).find(this.s.selector):this.$items=this.$el.find(a(this.s.selector)):this.$items=this.$el.children(),this.$slide="",this.$outer="",this.init(),this}var c={mode:"lg-slide",cssEasing:"ease",easing:"linear",speed:600,height:"100%",width:"100%",addClass:"",startClass:"lg-start-zoom",backdropDuration:150,hideBarsDelay:6e3,useLeft:!1,closable:!0,loop:!0,escKey:!0,keyPress:!0,controls:!0,slideEndAnimatoin:!0,hideControlOnEnd:!1,mousewheel:!0,getCaptionFromTitleOrAlt:!0,appendSubHtmlTo:".lg-sub-html",subHtmlSelectorRelative:!1,preload:1,showAfterLoad:!0,selector:"",selectWithin:"",nextHtml:"",prevHtml:"",index:!1,iframeMaxWidth:"100%",download:!0,counter:!0,appendCounterTo:".lg-toolbar",swipeThreshold:50,enableSwipe:!0,enableDrag:!0,dynamic:!1,dynamicEl:[],galleryId:1};b.prototype.init=function(){var b=this;b.s.preload>b.$items.length&&(b.s.preload=b.$items.length);var c=window.location.hash;c.indexOf("lg="+this.s.galleryId)>0&&(b.index=parseInt(c.split("&slide=")[1],10),a("body").addClass("lg-from-hash"),a("body").hasClass("lg-on")||(setTimeout(function(){b.build(b.index)}),a("body").addClass("lg-on"))),b.s.dynamic?(b.$el.trigger("onBeforeOpen.lg"),b.index=b.s.index||0,a("body").hasClass("lg-on")||setTimeout(function(){b.build(b.index),a("body").addClass("lg-on")})):b.$items.on("click.lgcustom",function(c){try{c.preventDefault(),c.preventDefault()}catch(a){c.returnValue=!1}b.$el.trigger("onBeforeOpen.lg"),b.index=b.s.index||b.$items.index(this),a("body").hasClass("lg-on")||(b.build(b.index),a("body").addClass("lg-on"))})},b.prototype.build=function(b){var c=this;c.structure(),a.each(a.fn.lightGallery.modules,function(b){c.modules[b]=new a.fn.lightGallery.modules[b](c.el)}),c.slide(b,!1,!1,!1),c.s.keyPress&&c.keyPress(),c.$items.length>1?(c.arrow(),setTimeout(function(){c.enableDrag(),c.enableSwipe()},50),c.s.mousewheel&&c.mousewheel()):c.$slide.on("click.lg",function(){c.$el.trigger("onSlideClick.lg")}),c.counter(),c.closeGallery(),c.$el.trigger("onAfterOpen.lg"),c.$outer.on("mousemove.lg click.lg touchstart.lg",function(){c.$outer.removeClass("lg-hide-items"),clearTimeout(c.hideBartimeout),c.hideBartimeout=setTimeout(function(){c.$outer.addClass("lg-hide-items")},c.s.hideBarsDelay)}),c.$outer.trigger("mousemove.lg")},b.prototype.structure=function(){var b,c="",d="",e=0,f="",g=this;for(a("body").append('<div class="lg-backdrop"></div>'),a(".lg-backdrop").css("transition-duration",this.s.backdropDuration+"ms"),e=0;e<this.$items.length;e++)c+='<div class="lg-item"></div>';if(this.s.controls&&this.$items.length>1&&(d='<div class="lg-actions"><button class="lg-prev lg-icon">'+this.s.prevHtml+'</button><button class="lg-next lg-icon">'+this.s.nextHtml+"</button></div>"),".lg-sub-html"===this.s.appendSubHtmlTo&&(f='<div class="lg-sub-html"></div>'),b='<div class="lg-outer '+this.s.addClass+" "+this.s.startClass+'"><div class="lg" style="width:'+this.s.width+"; height:"+this.s.height+'"><div class="lg-inner">'+c+'</div><div class="lg-toolbar lg-group"><span class="lg-close lg-icon"></span></div>'+d+f+"</div></div>",a("body").append(b),this.$outer=a(".lg-outer"),this.$slide=this.$outer.find(".lg-item"),this.s.useLeft?(this.$outer.addClass("lg-use-left"),this.s.mode="lg-slide"):this.$outer.addClass("lg-use-css3"),g.setTop(),a(window).on("resize.lg orientationchange.lg",function(){setTimeout(function(){g.setTop()},100)}),this.$slide.eq(this.index).addClass("lg-current"),this.doCss()?this.$outer.addClass("lg-css3"):(this.$outer.addClass("lg-css"),this.s.speed=0),this.$outer.addClass(this.s.mode),this.s.enableDrag&&this.$items.length>1&&this.$outer.addClass("lg-grab"),this.s.showAfterLoad&&this.$outer.addClass("lg-show-after-load"),this.doCss()){var h=this.$outer.find(".lg-inner");h.css("transition-timing-function",this.s.cssEasing),h.css("transition-duration",this.s.speed+"ms")}setTimeout(function(){a(".lg-backdrop").addClass("in")}),setTimeout(function(){g.$outer.addClass("lg-visible")},this.s.backdropDuration),this.s.download&&this.$outer.find(".lg-toolbar").append('<a id="lg-download" target="_blank" download class="lg-download lg-icon"></a>'),this.prevScrollTop=a(window).scrollTop()},b.prototype.setTop=function(){if("100%"!==this.s.height){var b=a(window).height(),c=(b-parseInt(this.s.height,10))/2,d=this.$outer.find(".lg");b>=parseInt(this.s.height,10)?d.css("top",c+"px"):d.css("top","0px")}},b.prototype.doCss=function(){return!!function(){var a=["transition","MozTransition","WebkitTransition","OTransition","msTransition","KhtmlTransition"],b=document.documentElement,c=0;for(c=0;c<a.length;c++)if(a[c]in b.style)return!0}()},b.prototype.isVideo=function(a,b){var c;if(c=this.s.dynamic?this.s.dynamicEl[b].html:this.$items.eq(b).attr("data-html"),!a)return c?{html5:!0}:(console.error("lightGallery :- data-src is not pvovided on slide item "+(b+1)+". Please make sure the selector property is properly configured. More info - http://sachinchoolur.github.io/lightGallery/demos/html-markup.html"),!1);var d=a.match(/\/\/(?:www\.)?youtu(?:\.be|be\.com|be-nocookie\.com)\/(?:watch\?v=|embed\/)?([a-z0-9\-\_\%]+)/i),e=a.match(/\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i),f=a.match(/\/\/(?:www\.)?dai.ly\/([0-9a-z\-_]+)/i),g=a.match(/\/\/(?:www\.)?(?:vk\.com|vkontakte\.ru)\/(?:video_ext\.php\?)(.*)/i);return d?{youtube:d}:e?{vimeo:e}:f?{dailymotion:f}:g?{vk:g}:void 0},b.prototype.counter=function(){this.s.counter&&a(this.s.appendCounterTo).append('<div id="lg-counter"><span id="lg-counter-current">'+(parseInt(this.index,10)+1)+'</span> / <span id="lg-counter-all">'+this.$items.length+"</span></div>")},b.prototype.addHtml=function(b){var c,d,e=null;if(this.s.dynamic?this.s.dynamicEl[b].subHtmlUrl?c=this.s.dynamicEl[b].subHtmlUrl:e=this.s.dynamicEl[b].subHtml:(d=this.$items.eq(b),d.attr("data-sub-html-url")?c=d.attr("data-sub-html-url"):(e=d.attr("data-sub-html"),this.s.getCaptionFromTitleOrAlt&&!e&&(e=d.attr("title")||d.find("img").first().attr("alt")))),!c)if(void 0!==e&&null!==e){var f=e.substring(0,1);"."!==f&&"#"!==f||(e=this.s.subHtmlSelectorRelative&&!this.s.dynamic?d.find(e).html():a(e).html())}else e="";".lg-sub-html"===this.s.appendSubHtmlTo?c?this.$outer.find(this.s.appendSubHtmlTo).load(c):this.$outer.find(this.s.appendSubHtmlTo).html(e):c?this.$slide.eq(b).load(c):this.$slide.eq(b).append(e),void 0!==e&&null!==e&&(""===e?this.$outer.find(this.s.appendSubHtmlTo).addClass("lg-empty-html"):this.$outer.find(this.s.appendSubHtmlTo).removeClass("lg-empty-html")),this.$el.trigger("onAfterAppendSubHtml.lg",[b])},b.prototype.preload=function(a){var b=1,c=1;for(b=1;b<=this.s.preload&&!(b>=this.$items.length-a);b++)this.loadContent(a+b,!1,0);for(c=1;c<=this.s.preload&&!(a-c<0);c++)this.loadContent(a-c,!1,0)},b.prototype.loadContent=function(b,c,d){var e,f,g,h,i,j,k=this,l=!1,m=function(b){for(var c=[],d=[],e=0;e<b.length;e++){var g=b[e].split(" ");""===g[0]&&g.splice(0,1),d.push(g[0]),c.push(g[1])}for(var h=a(window).width(),i=0;i<c.length;i++)if(parseInt(c[i],10)>h){f=d[i];break}};if(k.s.dynamic){if(k.s.dynamicEl[b].poster&&(l=!0,g=k.s.dynamicEl[b].poster),j=k.s.dynamicEl[b].html,f=k.s.dynamicEl[b].src,k.s.dynamicEl[b].responsive){m(k.s.dynamicEl[b].responsive.split(","))}h=k.s.dynamicEl[b].srcset,i=k.s.dynamicEl[b].sizes}else{if(k.$items.eq(b).attr("data-poster")&&(l=!0,g=k.$items.eq(b).attr("data-poster")),j=k.$items.eq(b).attr("data-html"),f=k.$items.eq(b).attr("href")||k.$items.eq(b).attr("data-src"),k.$items.eq(b).attr("data-responsive")){m(k.$items.eq(b).attr("data-responsive").split(","))}h=k.$items.eq(b).attr("data-srcset"),i=k.$items.eq(b).attr("data-sizes")}var n=!1;k.s.dynamic?k.s.dynamicEl[b].iframe&&(n=!0):"true"===k.$items.eq(b).attr("data-iframe")&&(n=!0);var o=k.isVideo(f,b);if(!k.$slide.eq(b).hasClass("lg-loaded")){if(n)k.$slide.eq(b).prepend('<div class="lg-video-cont lg-has-iframe" style="max-width:'+k.s.iframeMaxWidth+'"><div class="lg-video"><iframe class="lg-object" frameborder="0" src="'+f+'"  allowfullscreen="true"></iframe></div></div>');else if(l){var p="";p=o&&o.youtube?"lg-has-youtube":o&&o.vimeo?"lg-has-vimeo":"lg-has-html5",k.$slide.eq(b).prepend('<div class="lg-video-cont '+p+' "><div class="lg-video"><span class="lg-video-play"></span><img class="lg-object lg-has-poster" src="'+g+'" /></div></div>')}else o?(k.$slide.eq(b).prepend('<div class="lg-video-cont "><div class="lg-video"></div></div>'),k.$el.trigger("hasVideo.lg",[b,f,j])):k.$slide.eq(b).prepend('<div class="lg-img-wrap"><img class="lg-object lg-image" src="'+f+'" /></div>');if(k.$el.trigger("onAferAppendSlide.lg",[b]),e=k.$slide.eq(b).find(".lg-object"),i&&e.attr("sizes",i),h){e.attr("srcset",h);try{picturefill({elements:[e[0]]})}catch(a){console.warn("lightGallery :- If you want srcset to be supported for older browser please include picturefil version 2 javascript library in your document.")}}".lg-sub-html"!==this.s.appendSubHtmlTo&&k.addHtml(b),k.$slide.eq(b).addClass("lg-loaded")}k.$slide.eq(b).find(".lg-object").on("load.lg error.lg",function(){var c=0;d&&!a("body").hasClass("lg-from-hash")&&(c=d),setTimeout(function(){k.$slide.eq(b).addClass("lg-complete"),k.$el.trigger("onSlideItemLoad.lg",[b,d||0])},c)}),o&&o.html5&&!l&&k.$slide.eq(b).addClass("lg-complete"),!0===c&&(k.$slide.eq(b).hasClass("lg-complete")?k.preload(b):k.$slide.eq(b).find(".lg-object").on("load.lg error.lg",function(){k.preload(b)}))},b.prototype.slide=function(b,c,d,e){var f=this.$outer.find(".lg-current").index(),g=this;if(!g.lGalleryOn||f!==b){var h=this.$slide.length,i=g.lGalleryOn?this.s.speed:0;if(!g.lgBusy){if(this.s.download){var j;j=g.s.dynamic?!1!==g.s.dynamicEl[b].downloadUrl&&(g.s.dynamicEl[b].downloadUrl||g.s.dynamicEl[b].src):"false"!==g.$items.eq(b).attr("data-download-url")&&(g.$items.eq(b).attr("data-download-url")||g.$items.eq(b).attr("href")||g.$items.eq(b).attr("data-src")),j?(a("#lg-download").attr("href",j),g.$outer.removeClass("lg-hide-download")):g.$outer.addClass("lg-hide-download")}if(this.$el.trigger("onBeforeSlide.lg",[f,b,c,d]),g.lgBusy=!0,clearTimeout(g.hideBartimeout),".lg-sub-html"===this.s.appendSubHtmlTo&&setTimeout(function(){g.addHtml(b)},i),this.arrowDisable(b),e||(b<f?e="prev":b>f&&(e="next")),c){this.$slide.removeClass("lg-prev-slide lg-current lg-next-slide");var k,l;h>2?(k=b-1,l=b+1,0===b&&f===h-1?(l=0,k=h-1):b===h-1&&0===f&&(l=0,k=h-1)):(k=0,l=1),"prev"===e?g.$slide.eq(l).addClass("lg-next-slide"):g.$slide.eq(k).addClass("lg-prev-slide"),g.$slide.eq(b).addClass("lg-current")}else g.$outer.addClass("lg-no-trans"),this.$slide.removeClass("lg-prev-slide lg-next-slide"),"prev"===e?(this.$slide.eq(b).addClass("lg-prev-slide"),this.$slide.eq(f).addClass("lg-next-slide")):(this.$slide.eq(b).addClass("lg-next-slide"),this.$slide.eq(f).addClass("lg-prev-slide")),setTimeout(function(){g.$slide.removeClass("lg-current"),g.$slide.eq(b).addClass("lg-current"),g.$outer.removeClass("lg-no-trans")},50);g.lGalleryOn?(setTimeout(function(){g.loadContent(b,!0,0)},this.s.speed+50),setTimeout(function(){g.lgBusy=!1,g.$el.trigger("onAfterSlide.lg",[f,b,c,d])},this.s.speed)):(g.loadContent(b,!0,g.s.backdropDuration),g.lgBusy=!1,g.$el.trigger("onAfterSlide.lg",[f,b,c,d])),g.lGalleryOn=!0,this.s.counter&&a("#lg-counter-current").text(b+1)}g.index=b}},b.prototype.goToNextSlide=function(a){var b=this,c=b.s.loop;a&&b.$slide.length<3&&(c=!1),b.lgBusy||(b.index+1<b.$slide.length?(b.index++,b.$el.trigger("onBeforeNextSlide.lg",[b.index]),b.slide(b.index,a,!1,"next")):c?(b.index=0,b.$el.trigger("onBeforeNextSlide.lg",[b.index]),b.slide(b.index,a,!1,"next")):b.s.slideEndAnimatoin&&!a&&(b.$outer.addClass("lg-right-end"),setTimeout(function(){b.$outer.removeClass("lg-right-end")},400)))},b.prototype.goToPrevSlide=function(a){var b=this,c=b.s.loop;a&&b.$slide.length<3&&(c=!1),b.lgBusy||(b.index>0?(b.index--,b.$el.trigger("onBeforePrevSlide.lg",[b.index,a]),b.slide(b.index,a,!1,"prev")):c?(b.index=b.$items.length-1,b.$el.trigger("onBeforePrevSlide.lg",[b.index,a]),b.slide(b.index,a,!1,"prev")):b.s.slideEndAnimatoin&&!a&&(b.$outer.addClass("lg-left-end"),setTimeout(function(){b.$outer.removeClass("lg-left-end")},400)))},b.prototype.keyPress=function(){var b=this;this.$items.length>1&&a(window).on("keyup.lg",function(a){b.$items.length>1&&(37===a.keyCode&&(a.preventDefault(),b.goToPrevSlide()),39===a.keyCode&&(a.preventDefault(),b.goToNextSlide()))}),a(window).on("keydown.lg",function(a){!0===b.s.escKey&&27===a.keyCode&&(a.preventDefault(),b.$outer.hasClass("lg-thumb-open")?b.$outer.removeClass("lg-thumb-open"):b.destroy())})},b.prototype.arrow=function(){var a=this;this.$outer.find(".lg-prev").on("click.lg",function(){a.goToPrevSlide()}),this.$outer.find(".lg-next").on("click.lg",function(){a.goToNextSlide()})},b.prototype.arrowDisable=function(a){!this.s.loop&&this.s.hideControlOnEnd&&(a+1<this.$slide.length?this.$outer.find(".lg-next").removeAttr("disabled").removeClass("disabled"):this.$outer.find(".lg-next").attr("disabled","disabled").addClass("disabled"),a>0?this.$outer.find(".lg-prev").removeAttr("disabled").removeClass("disabled"):this.$outer.find(".lg-prev").attr("disabled","disabled").addClass("disabled"))},b.prototype.setTranslate=function(a,b,c){this.s.useLeft?a.css("left",b):a.css({transform:"translate3d("+b+"px, "+c+"px, 0px)"})},b.prototype.touchMove=function(b,c){var d=c-b;Math.abs(d)>15&&(this.$outer.addClass("lg-dragging"),this.setTranslate(this.$slide.eq(this.index),d,0),this.setTranslate(a(".lg-prev-slide"),-this.$slide.eq(this.index).width()+d,0),this.setTranslate(a(".lg-next-slide"),this.$slide.eq(this.index).width()+d,0))},b.prototype.touchEnd=function(a){var b=this;"lg-slide"!==b.s.mode&&b.$outer.addClass("lg-slide"),this.$slide.not(".lg-current, .lg-prev-slide, .lg-next-slide").css("opacity","0"),setTimeout(function(){b.$outer.removeClass("lg-dragging"),a<0&&Math.abs(a)>b.s.swipeThreshold?b.goToNextSlide(!0):a>0&&Math.abs(a)>b.s.swipeThreshold?b.goToPrevSlide(!0):Math.abs(a)<5&&b.$el.trigger("onSlideClick.lg"),b.$slide.removeAttr("style")}),setTimeout(function(){b.$outer.hasClass("lg-dragging")||"lg-slide"===b.s.mode||b.$outer.removeClass("lg-slide")},b.s.speed+100)},b.prototype.enableSwipe=function(){var a=this,b=0,c=0,d=!1;a.s.enableSwipe&&a.doCss()&&(a.$slide.on("touchstart.lg",function(c){a.$outer.hasClass("lg-zoomed")||a.lgBusy||(c.preventDefault(),a.manageSwipeClass(),b=c.originalEvent.targetTouches[0].pageX)}),a.$slide.on("touchmove.lg",function(e){a.$outer.hasClass("lg-zoomed")||(e.preventDefault(),c=e.originalEvent.targetTouches[0].pageX,a.touchMove(b,c),d=!0)}),a.$slide.on("touchend.lg",function(){a.$outer.hasClass("lg-zoomed")||(d?(d=!1,a.touchEnd(c-b)):a.$el.trigger("onSlideClick.lg"))}))},b.prototype.enableDrag=function(){var b=this,c=0,d=0,e=!1,f=!1;b.s.enableDrag&&b.doCss()&&(b.$slide.on("mousedown.lg",function(d){b.$outer.hasClass("lg-zoomed")||b.lgBusy||a(d.target).text().trim()||(d.preventDefault(),b.manageSwipeClass(),c=d.pageX,e=!0,b.$outer.scrollLeft+=1,b.$outer.scrollLeft-=1,b.$outer.removeClass("lg-grab").addClass("lg-grabbing"),b.$el.trigger("onDragstart.lg"))}),a(window).on("mousemove.lg",function(a){e&&(f=!0,d=a.pageX,b.touchMove(c,d),b.$el.trigger("onDragmove.lg"))}),a(window).on("mouseup.lg",function(g){f?(f=!1,b.touchEnd(d-c),b.$el.trigger("onDragend.lg")):(a(g.target).hasClass("lg-object")||a(g.target).hasClass("lg-video-play"))&&b.$el.trigger("onSlideClick.lg"),e&&(e=!1,b.$outer.removeClass("lg-grabbing").addClass("lg-grab"))}))},b.prototype.manageSwipeClass=function(){var a=this.index+1,b=this.index-1;this.s.loop&&this.$slide.length>2&&(0===this.index?b=this.$slide.length-1:this.index===this.$slide.length-1&&(a=0)),this.$slide.removeClass("lg-next-slide lg-prev-slide"),b>-1&&this.$slide.eq(b).addClass("lg-prev-slide"),this.$slide.eq(a).addClass("lg-next-slide")},b.prototype.mousewheel=function(){var a=this;a.$outer.on("mousewheel.lg",function(b){b.deltaY&&(b.deltaY>0?a.goToPrevSlide():a.goToNextSlide(),b.preventDefault())})},b.prototype.closeGallery=function(){var b=this,c=!1;this.$outer.find(".lg-close").on("click.lg",function(){b.destroy()}),b.s.closable&&(b.$outer.on("mousedown.lg",function(b){c=!!(a(b.target).is(".lg-outer")||a(b.target).is(".lg-item ")||a(b.target).is(".lg-img-wrap"))}),b.$outer.on("mousemove.lg",function(){c=!1}),b.$outer.on("mouseup.lg",function(d){(a(d.target).is(".lg-outer")||a(d.target).is(".lg-item ")||a(d.target).is(".lg-img-wrap")&&c)&&(b.$outer.hasClass("lg-dragging")||b.destroy())}))},b.prototype.destroy=function(b){var c=this;b||(c.$el.trigger("onBeforeClose.lg"),a(window).scrollTop(c.prevScrollTop)),b&&(c.s.dynamic||this.$items.off("click.lg click.lgcustom"),a.removeData(c.el,"lightGallery")),this.$el.off(".lg.tm"),a.each(a.fn.lightGallery.modules,function(a){c.modules[a]&&c.modules[a].destroy()}),this.lGalleryOn=!1,clearTimeout(c.hideBartimeout),this.hideBartimeout=!1,a(window).off(".lg"),a("body").removeClass("lg-on lg-from-hash"),c.$outer&&c.$outer.removeClass("lg-visible"),a(".lg-backdrop").removeClass("in"),setTimeout(function(){c.$outer&&c.$outer.remove(),a(".lg-backdrop").remove(),b||c.$el.trigger("onCloseAfter.lg")},c.s.backdropDuration+50)},a.fn.lightGallery=function(c){return this.each(function(){if(a.data(this,"lightGallery"))try{a(this).data("lightGallery").init()}catch(a){console.error("lightGallery has not initiated properly")}else a.data(this,"lightGallery",new b(this,c))})},a.fn.lightGallery.modules={}}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(0,function(a){!function(){"use strict";var b={autoplay:!1,pause:5e3,progressBar:!0,fourceAutoplay:!1,autoplayControls:!0,appendAutoplayControlsTo:".lg-toolbar"},c=function(c){return this.core=a(c).data("lightGallery"),this.$el=a(c),!(this.core.$items.length<2)&&(this.core.s=a.extend({},b,this.core.s),this.interval=!1,this.fromAuto=!0,this.canceledOnTouch=!1,this.fourceAutoplayTemp=this.core.s.fourceAutoplay,this.core.doCss()||(this.core.s.progressBar=!1),this.init(),this)};c.prototype.init=function(){var a=this;a.core.s.autoplayControls&&a.controls(),a.core.s.progressBar&&a.core.$outer.find(".lg").append('<div class="lg-progress-bar"><div class="lg-progress"></div></div>'),a.progress(),a.core.s.autoplay&&a.$el.one("onSlideItemLoad.lg.tm",function(){a.startlAuto()}),a.$el.on("onDragstart.lg.tm touchstart.lg.tm",function(){a.interval&&(a.cancelAuto(),a.canceledOnTouch=!0)}),a.$el.on("onDragend.lg.tm touchend.lg.tm onSlideClick.lg.tm",function(){!a.interval&&a.canceledOnTouch&&(a.startlAuto(),a.canceledOnTouch=!1)})},c.prototype.progress=function(){var a,b,c=this;c.$el.on("onBeforeSlide.lg.tm",function(){c.core.s.progressBar&&c.fromAuto&&(a=c.core.$outer.find(".lg-progress-bar"),b=c.core.$outer.find(".lg-progress"),c.interval&&(b.removeAttr("style"),a.removeClass("lg-start"),setTimeout(function(){b.css("transition","width "+(c.core.s.speed+c.core.s.pause)+"ms ease 0s"),a.addClass("lg-start")},20))),c.fromAuto||c.core.s.fourceAutoplay||c.cancelAuto(),c.fromAuto=!1})},c.prototype.controls=function(){var b=this;a(this.core.s.appendAutoplayControlsTo).append('<span class="lg-autoplay-button lg-icon"></span>'),b.core.$outer.find(".lg-autoplay-button").on("click.lg",function(){a(b.core.$outer).hasClass("lg-show-autoplay")?(b.cancelAuto(),b.core.s.fourceAutoplay=!1):b.interval||(b.startlAuto(),b.core.s.fourceAutoplay=b.fourceAutoplayTemp)})},c.prototype.startlAuto=function(){var a=this;a.core.$outer.find(".lg-progress").css("transition","width "+(a.core.s.speed+a.core.s.pause)+"ms ease 0s"),a.core.$outer.addClass("lg-show-autoplay"),a.core.$outer.find(".lg-progress-bar").addClass("lg-start"),a.interval=setInterval(function(){a.core.index+1<a.core.$items.length?a.core.index++:a.core.index=0,a.fromAuto=!0,a.core.slide(a.core.index,!1,!1,"next")},a.core.s.speed+a.core.s.pause)},c.prototype.cancelAuto=function(){clearInterval(this.interval),this.interval=!1,this.core.$outer.find(".lg-progress").removeAttr("style"),this.core.$outer.removeClass("lg-show-autoplay"),this.core.$outer.find(".lg-progress-bar").removeClass("lg-start")},c.prototype.destroy=function(){this.cancelAuto(),this.core.$outer.find(".lg-progress-bar").remove()},a.fn.lightGallery.modules.autoplay=c}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(){"use strict";function b(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement}var c={fullScreen:!0},d=function(b){return this.core=a(b).data("lightGallery"),this.$el=a(b),this.core.s=a.extend({},c,this.core.s),this.init(),this};d.prototype.init=function(){var a="";if(this.core.s.fullScreen){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))return;a='<span class="lg-fullscreen lg-icon"></span>',this.core.$outer.find(".lg-toolbar").append(a),this.fullScreen()}},d.prototype.requestFullscreen=function(){var a=document.documentElement;a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()},d.prototype.exitFullscreen=function(){document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()},d.prototype.fullScreen=function(){var c=this;a(document).on("fullscreenchange.lg webkitfullscreenchange.lg mozfullscreenchange.lg MSFullscreenChange.lg",function(){c.core.$outer.toggleClass("lg-fullscreen-on")}),this.core.$outer.find(".lg-fullscreen").on("click.lg",function(){b()?c.exitFullscreen():c.requestFullscreen()})},d.prototype.destroy=function(){b()&&this.exitFullscreen(),a(document).off("fullscreenchange.lg webkitfullscreenchange.lg mozfullscreenchange.lg MSFullscreenChange.lg")},a.fn.lightGallery.modules.fullscreen=d}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(0,function(a){!function(){"use strict";var b={pager:!1},c=function(c){return this.core=a(c).data("lightGallery"),this.$el=a(c),this.core.s=a.extend({},b,this.core.s),this.core.s.pager&&this.core.$items.length>1&&this.init(),this};c.prototype.init=function(){var b,c,d,e=this,f="";if(e.core.$outer.find(".lg").append('<div class="lg-pager-outer"></div>'),e.core.s.dynamic)for(var g=0;g<e.core.s.dynamicEl.length;g++)f+='<span class="lg-pager-cont"> <span class="lg-pager"></span><div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="'+e.core.s.dynamicEl[g].thumb+'" /></div></span>';else e.core.$items.each(function(){e.core.s.exThumbImage?f+='<span class="lg-pager-cont"> <span class="lg-pager"></span><div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="'+a(this).attr(e.core.s.exThumbImage)+'" /></div></span>':f+='<span class="lg-pager-cont"> <span class="lg-pager"></span><div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="'+a(this).find("img").attr("src")+'" /></div></span>'});c=e.core.$outer.find(".lg-pager-outer"),c.html(f),b=e.core.$outer.find(".lg-pager-cont"),b.on("click.lg touchend.lg",function(){var b=a(this);e.core.index=b.index(),e.core.slide(e.core.index,!1,!0,!1)}),c.on("mouseover.lg",function(){clearTimeout(d),c.addClass("lg-pager-hover")}),c.on("mouseout.lg",function(){d=setTimeout(function(){c.removeClass("lg-pager-hover")})}),e.core.$el.on("onBeforeSlide.lg.tm",function(a,c,d){b.removeClass("lg-pager-active"),b.eq(d).addClass("lg-pager-active")})},c.prototype.destroy=function(){},a.fn.lightGallery.modules.pager=c}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(0,function(a){!function(){"use strict";var b={thumbnail:!0,animateThumb:!0,currentPagerPosition:"middle",thumbWidth:100,thumbHeight:"80px",thumbContHeight:100,thumbMargin:5,exThumbImage:!1,showThumbByDefault:!0,toogleThumb:!0,pullCaptionUp:!0,enableThumbDrag:!0,enableThumbSwipe:!0,swipeThreshold:50,loadYoutubeThumbnail:!0,youtubeThumbSize:1,loadVimeoThumbnail:!0,vimeoThumbSize:"thumbnail_small",loadDailymotionThumbnail:!0},c=function(c){return this.core=a(c).data("lightGallery"),this.core.s=a.extend({},b,this.core.s),this.$el=a(c),this.$thumbOuter=null,this.thumbOuterWidth=0,this.thumbTotalWidth=this.core.$items.length*(this.core.s.thumbWidth+this.core.s.thumbMargin),this.thumbIndex=this.core.index,this.core.s.animateThumb&&(this.core.s.thumbHeight="100%"),this.left=0,this.init(),this};c.prototype.init=function(){var a=this;this.core.s.thumbnail&&this.core.$items.length>1&&(this.core.s.showThumbByDefault&&setTimeout(function(){a.core.$outer.addClass("lg-thumb-open")},700),this.core.s.pullCaptionUp&&this.core.$outer.addClass("lg-pull-caption-up"),this.build(),this.core.s.animateThumb&&this.core.doCss()?(this.core.s.enableThumbDrag&&this.enableThumbDrag(),this.core.s.enableThumbSwipe&&this.enableThumbSwipe(),this.thumbClickable=!1):this.thumbClickable=!0,this.toogle(),this.thumbkeyPress())},c.prototype.build=function(){function b(a,b,c){var g,h=d.core.isVideo(a,c)||{},i="";h.youtube||h.vimeo||h.dailymotion?h.youtube?g=d.core.s.loadYoutubeThumbnail?"//img.youtube.com/vi/"+h.youtube[1]+"/"+d.core.s.youtubeThumbSize+".jpg":b:h.vimeo?d.core.s.loadVimeoThumbnail?(g="//i.vimeocdn.com/video/error_"+f+".jpg",i=h.vimeo[1]):g=b:h.dailymotion&&(g=d.core.s.loadDailymotionThumbnail?"//www.dailymotion.com/thumbnail/video/"+h.dailymotion[1]:b):g=b,e+='<div data-vimeo-id="'+i+'" class="lg-thumb-item" style="width:'+d.core.s.thumbWidth+"px; height: "+d.core.s.thumbHeight+"; margin-right: "+d.core.s.thumbMargin+'px"><img src="'+g+'" /></div>',i=""}var c,d=this,e="",f="",g='<div class="lg-thumb-outer"><div class="lg-thumb lg-group"></div></div>';switch(this.core.s.vimeoThumbSize){case"thumbnail_large":f="640";break;case"thumbnail_medium":f="200x150";break;case"thumbnail_small":f="100x75"}if(d.core.$outer.addClass("lg-has-thumb"),d.core.$outer.find(".lg").append(g),d.$thumbOuter=d.core.$outer.find(".lg-thumb-outer"),d.thumbOuterWidth=d.$thumbOuter.width(),d.core.s.animateThumb&&d.core.$outer.find(".lg-thumb").css({width:d.thumbTotalWidth+"px",position:"relative"}),this.core.s.animateThumb&&d.$thumbOuter.css("height",d.core.s.thumbContHeight+"px"),d.core.s.dynamic)for(var h=0;h<d.core.s.dynamicEl.length;h++)b(d.core.s.dynamicEl[h].src,d.core.s.dynamicEl[h].thumb,h);else d.core.$items.each(function(c){d.core.s.exThumbImage?b(a(this).attr("href")||a(this).attr("data-src"),a(this).attr(d.core.s.exThumbImage),c):b(a(this).attr("href")||a(this).attr("data-src"),a(this).find("img").attr("src"),c)});d.core.$outer.find(".lg-thumb").html(e),c=d.core.$outer.find(".lg-thumb-item"),c.each(function(){var b=a(this),c=b.attr("data-vimeo-id");c&&a.getJSON("//www.vimeo.com/api/v2/video/"+c+".json?callback=?",{format:"json"},function(a){b.find("img").attr("src",a[0][d.core.s.vimeoThumbSize])})}),c.eq(d.core.index).addClass("active"),d.core.$el.on("onBeforeSlide.lg.tm",function(){c.removeClass("active"),c.eq(d.core.index).addClass("active")}),c.on("click.lg touchend.lg",function(){var b=a(this);setTimeout(function(){(d.thumbClickable&&!d.core.lgBusy||!d.core.doCss())&&(d.core.index=b.index(),d.core.slide(d.core.index,!1,!0,!1))},50)}),d.core.$el.on("onBeforeSlide.lg.tm",function(){d.animateThumb(d.core.index)}),a(window).on("resize.lg.thumb orientationchange.lg.thumb",function(){setTimeout(function(){d.animateThumb(d.core.index),d.thumbOuterWidth=d.$thumbOuter.width()},200)})},c.prototype.setTranslate=function(a){this.core.$outer.find(".lg-thumb").css({transform:"translate3d(-"+a+"px, 0px, 0px)"})},c.prototype.animateThumb=function(a){var b=this.core.$outer.find(".lg-thumb");if(this.core.s.animateThumb){var c;switch(this.core.s.currentPagerPosition){case"left":c=0;break;case"middle":c=this.thumbOuterWidth/2-this.core.s.thumbWidth/2;break;case"right":c=this.thumbOuterWidth-this.core.s.thumbWidth}this.left=(this.core.s.thumbWidth+this.core.s.thumbMargin)*a-1-c,this.left>this.thumbTotalWidth-this.thumbOuterWidth&&(this.left=this.thumbTotalWidth-this.thumbOuterWidth),this.left<0&&(this.left=0),this.core.lGalleryOn?(b.hasClass("on")||this.core.$outer.find(".lg-thumb").css("transition-duration",this.core.s.speed+"ms"),this.core.doCss()||b.animate({left:-this.left+"px"},this.core.s.speed)):this.core.doCss()||b.css("left",-this.left+"px"),this.setTranslate(this.left)}},c.prototype.enableThumbDrag=function(){var b=this,c=0,d=0,e=!1,f=!1,g=0;b.$thumbOuter.addClass("lg-grab"),b.core.$outer.find(".lg-thumb").on("mousedown.lg.thumb",function(a){b.thumbTotalWidth>b.thumbOuterWidth&&(a.preventDefault(),c=a.pageX,e=!0,b.core.$outer.scrollLeft+=1,b.core.$outer.scrollLeft-=1,b.thumbClickable=!1,b.$thumbOuter.removeClass("lg-grab").addClass("lg-grabbing"))}),a(window).on("mousemove.lg.thumb",function(a){e&&(g=b.left,f=!0,d=a.pageX,b.$thumbOuter.addClass("lg-dragging"),g-=d-c,g>b.thumbTotalWidth-b.thumbOuterWidth&&(g=b.thumbTotalWidth-b.thumbOuterWidth),g<0&&(g=0),b.setTranslate(g))}),a(window).on("mouseup.lg.thumb",function(){f?(f=!1,b.$thumbOuter.removeClass("lg-dragging"),b.left=g,Math.abs(d-c)<b.core.s.swipeThreshold&&(b.thumbClickable=!0)):b.thumbClickable=!0,e&&(e=!1,b.$thumbOuter.removeClass("lg-grabbing").addClass("lg-grab"))})},c.prototype.enableThumbSwipe=function(){var a=this,b=0,c=0,d=!1,e=0;a.core.$outer.find(".lg-thumb").on("touchstart.lg",function(c){a.thumbTotalWidth>a.thumbOuterWidth&&(c.preventDefault(),b=c.originalEvent.targetTouches[0].pageX,a.thumbClickable=!1)}),a.core.$outer.find(".lg-thumb").on("touchmove.lg",function(f){a.thumbTotalWidth>a.thumbOuterWidth&&(f.preventDefault(),c=f.originalEvent.targetTouches[0].pageX,d=!0,a.$thumbOuter.addClass("lg-dragging"),e=a.left,e-=c-b,e>a.thumbTotalWidth-a.thumbOuterWidth&&(e=a.thumbTotalWidth-a.thumbOuterWidth),e<0&&(e=0),a.setTranslate(e))}),a.core.$outer.find(".lg-thumb").on("touchend.lg",function(){a.thumbTotalWidth>a.thumbOuterWidth&&d?(d=!1,a.$thumbOuter.removeClass("lg-dragging"),Math.abs(c-b)<a.core.s.swipeThreshold&&(a.thumbClickable=!0),a.left=e):a.thumbClickable=!0})},c.prototype.toogle=function(){var a=this;a.core.s.toogleThumb&&(a.core.$outer.addClass("lg-can-toggle"),a.$thumbOuter.append('<span class="lg-toogle-thumb lg-icon"></span>'),a.core.$outer.find(".lg-toogle-thumb").on("click.lg",function(){a.core.$outer.toggleClass("lg-thumb-open")}))},c.prototype.thumbkeyPress=function(){var b=this;a(window).on("keydown.lg.thumb",function(a){38===a.keyCode?(a.preventDefault(),b.core.$outer.addClass("lg-thumb-open")):40===a.keyCode&&(a.preventDefault(),b.core.$outer.removeClass("lg-thumb-open"))})},c.prototype.destroy=function(){
this.core.s.thumbnail&&this.core.$items.length>1&&(a(window).off("resize.lg.thumb orientationchange.lg.thumb keydown.lg.thumb"),this.$thumbOuter.remove(),this.core.$outer.removeClass("lg-has-thumb"))},a.fn.lightGallery.modules.Thumbnail=c}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(){"use strict";function b(a,b,c,d){var e=this;if(e.core.$slide.eq(b).find(".lg-video").append(e.loadVideo(c,"lg-object",!0,b,d)),d)if(e.core.s.videojs)try{videojs(e.core.$slide.eq(b).find(".lg-html5").get(0),e.core.s.videojsOptions,function(){!e.videoLoaded&&e.core.s.autoplayFirstVideo&&this.play()})}catch(a){console.error("Make sure you have included videojs")}else!e.videoLoaded&&e.core.s.autoplayFirstVideo&&e.core.$slide.eq(b).find(".lg-html5").get(0).play()}function c(a,b){var c=this.core.$slide.eq(b).find(".lg-video-cont");c.hasClass("lg-has-iframe")||(c.css("max-width",this.core.s.videoMaxWidth),this.videoLoaded=!0)}function d(b,c,d){var e=this,f=e.core.$slide.eq(c),g=f.find(".lg-youtube").get(0),h=f.find(".lg-vimeo").get(0),i=f.find(".lg-dailymotion").get(0),j=f.find(".lg-vk").get(0),k=f.find(".lg-html5").get(0);if(g)g.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*");else if(h)try{$f(h).api("pause")}catch(a){console.error("Make sure you have included froogaloop2 js")}else if(i)i.contentWindow.postMessage("pause","*");else if(k)if(e.core.s.videojs)try{videojs(k).pause()}catch(a){console.error("Make sure you have included videojs")}else k.pause();j&&a(j).attr("src",a(j).attr("src").replace("&autoplay","&noplay"));var l;l=e.core.s.dynamic?e.core.s.dynamicEl[d].src:e.core.$items.eq(d).attr("href")||e.core.$items.eq(d).attr("data-src");var m=e.core.isVideo(l,d)||{};(m.youtube||m.vimeo||m.dailymotion||m.vk)&&e.core.$outer.addClass("lg-hide-download")}var e={videoMaxWidth:"855px",autoplayFirstVideo:!0,youtubePlayerParams:!1,vimeoPlayerParams:!1,dailymotionPlayerParams:!1,vkPlayerParams:!1,videojs:!1,videojsOptions:{}},f=function(b){return this.core=a(b).data("lightGallery"),this.$el=a(b),this.core.s=a.extend({},e,this.core.s),this.videoLoaded=!1,this.init(),this};f.prototype.init=function(){var e=this;e.core.$el.on("hasVideo.lg.tm",b.bind(this)),e.core.$el.on("onAferAppendSlide.lg.tm",c.bind(this)),e.core.doCss()&&e.core.$items.length>1&&(e.core.s.enableSwipe||e.core.s.enableDrag)?e.core.$el.on("onSlideClick.lg.tm",function(){var a=e.core.$slide.eq(e.core.index);e.loadVideoOnclick(a)}):e.core.$slide.on("click.lg",function(){e.loadVideoOnclick(a(this))}),e.core.$el.on("onBeforeSlide.lg.tm",d.bind(this)),e.core.$el.on("onAfterSlide.lg.tm",function(a,b){e.core.$slide.eq(b).removeClass("lg-video-playing")}),e.core.s.autoplayFirstVideo&&e.core.$el.on("onAferAppendSlide.lg.tm",function(a,b){if(!e.core.lGalleryOn){var c=e.core.$slide.eq(b);setTimeout(function(){e.loadVideoOnclick(c)},100)}})},f.prototype.loadVideo=function(b,c,d,e,f){var g="",h=1,i="",j=this.core.isVideo(b,e)||{};if(d&&(h=this.videoLoaded?0:this.core.s.autoplayFirstVideo?1:0),j.youtube)i="?wmode=opaque&autoplay="+h+"&enablejsapi=1",this.core.s.youtubePlayerParams&&(i=i+"&"+a.param(this.core.s.youtubePlayerParams)),g='<iframe class="lg-video-object lg-youtube '+c+'" width="560" height="315" src="//www.youtube.com/embed/'+j.youtube[1]+i+'" frameborder="0" allowfullscreen></iframe>';else if(j.vimeo)i="?autoplay="+h+"&api=1",this.core.s.vimeoPlayerParams&&(i=i+"&"+a.param(this.core.s.vimeoPlayerParams)),g='<iframe class="lg-video-object lg-vimeo '+c+'" width="560" height="315"  src="//player.vimeo.com/video/'+j.vimeo[1]+i+'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';else if(j.dailymotion)i="?wmode=opaque&autoplay="+h+"&api=postMessage",this.core.s.dailymotionPlayerParams&&(i=i+"&"+a.param(this.core.s.dailymotionPlayerParams)),g='<iframe class="lg-video-object lg-dailymotion '+c+'" width="560" height="315" src="//www.dailymotion.com/embed/video/'+j.dailymotion[1]+i+'" frameborder="0" allowfullscreen></iframe>';else if(j.html5){var k=f.substring(0,1);"."!==k&&"#"!==k||(f=a(f).html()),g=f}else j.vk&&(i="&autoplay="+h,this.core.s.vkPlayerParams&&(i=i+"&"+a.param(this.core.s.vkPlayerParams)),g='<iframe class="lg-video-object lg-vk '+c+'" width="560" height="315" src="//vk.com/video_ext.php?'+j.vk[1]+i+'" frameborder="0" allowfullscreen></iframe>');return g},f.prototype.loadVideoOnclick=function(a){var b=this;if(a.find(".lg-object").hasClass("lg-has-poster")&&a.find(".lg-object").is(":visible"))if(a.hasClass("lg-has-video")){var c=a.find(".lg-youtube").get(0),d=a.find(".lg-vimeo").get(0),e=a.find(".lg-dailymotion").get(0),f=a.find(".lg-html5").get(0);if(c)c.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*");else if(d)try{$f(d).api("play")}catch(a){console.error("Make sure you have included froogaloop2 js")}else if(e)e.contentWindow.postMessage("play","*");else if(f)if(b.core.s.videojs)try{videojs(f).play()}catch(a){console.error("Make sure you have included videojs")}else f.play();a.addClass("lg-video-playing")}else{a.addClass("lg-video-playing lg-has-video");var g,h,i=function(c,d){if(a.find(".lg-video").append(b.loadVideo(c,"",!1,b.core.index,d)),d)if(b.core.s.videojs)try{videojs(b.core.$slide.eq(b.core.index).find(".lg-html5").get(0),b.core.s.videojsOptions,function(){this.play()})}catch(a){console.error("Make sure you have included videojs")}else b.core.$slide.eq(b.core.index).find(".lg-html5").get(0).play()};b.core.s.dynamic?(g=b.core.s.dynamicEl[b.core.index].src,h=b.core.s.dynamicEl[b.core.index].html,i(g,h)):(g=b.core.$items.eq(b.core.index).attr("href")||b.core.$items.eq(b.core.index).attr("data-src"),h=b.core.$items.eq(b.core.index).attr("data-html"),i(g,h));var j=a.find(".lg-object");a.find(".lg-video").append(j),a.find(".lg-video-object").hasClass("lg-html5")||(a.removeClass("lg-complete"),a.find(".lg-video-object").on("load.lg error.lg",function(){a.addClass("lg-complete")}))}},f.prototype.destroy=function(){this.videoLoaded=!1},a.fn.lightGallery.modules.video=f}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(0,function(a){!function(){"use strict";var b=function(){var a=!1,b=navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);return b&&parseInt(b[2],10)<54&&(a=!0),a},c={scale:1,zoom:!0,actualSize:!0,enableZoomAfter:300,useLeftForZoom:b()},d=function(b){return this.core=a(b).data("lightGallery"),this.core.s=a.extend({},c,this.core.s),this.core.s.zoom&&this.core.doCss()&&(this.init(),this.zoomabletimeout=!1,this.pageX=a(window).width()/2,this.pageY=a(window).height()/2+a(window).scrollTop()),this};d.prototype.init=function(){var b=this,c='<span id="lg-zoom-in" class="lg-icon"></span><span id="lg-zoom-out" class="lg-icon"></span>';b.core.s.actualSize&&(c+='<span id="lg-actual-size" class="lg-icon"></span>'),b.core.s.useLeftForZoom?b.core.$outer.addClass("lg-use-left-for-zoom"):b.core.$outer.addClass("lg-use-transition-for-zoom"),this.core.$outer.find(".lg-toolbar").append(c),b.core.$el.on("onSlideItemLoad.lg.tm.zoom",function(c,d,e){var f=b.core.s.enableZoomAfter+e;a("body").hasClass("lg-from-hash")&&e?f=0:a("body").removeClass("lg-from-hash"),b.zoomabletimeout=setTimeout(function(){b.core.$slide.eq(d).addClass("lg-zoomable")},f+30)});var d=1,e=function(c){var d,e,f=b.core.$outer.find(".lg-current .lg-image"),g=(a(window).width()-f.prop("offsetWidth"))/2,h=(a(window).height()-f.prop("offsetHeight"))/2+a(window).scrollTop();d=b.pageX-g,e=b.pageY-h;var i=(c-1)*d,j=(c-1)*e;f.css("transform","scale3d("+c+", "+c+", 1)").attr("data-scale",c),b.core.s.useLeftForZoom?f.parent().css({left:-i+"px",top:-j+"px"}).attr("data-x",i).attr("data-y",j):f.parent().css("transform","translate3d(-"+i+"px, -"+j+"px, 0)").attr("data-x",i).attr("data-y",j)},f=function(){d>1?b.core.$outer.addClass("lg-zoomed"):b.resetZoom(),d<1&&(d=1),e(d)},g=function(c,e,g,h){var i,j=e.prop("offsetWidth");i=b.core.s.dynamic?b.core.s.dynamicEl[g].width||e[0].naturalWidth||j:b.core.$items.eq(g).attr("data-width")||e[0].naturalWidth||j;var k;b.core.$outer.hasClass("lg-zoomed")?d=1:i>j&&(k=i/j,d=k||2),h?(b.pageX=a(window).width()/2,b.pageY=a(window).height()/2+a(window).scrollTop()):(b.pageX=c.pageX||c.originalEvent.targetTouches[0].pageX,b.pageY=c.pageY||c.originalEvent.targetTouches[0].pageY),f(),setTimeout(function(){b.core.$outer.removeClass("lg-grabbing").addClass("lg-grab")},10)},h=!1;b.core.$el.on("onAferAppendSlide.lg.tm.zoom",function(a,c){var d=b.core.$slide.eq(c).find(".lg-image");d.on("dblclick",function(a){g(a,d,c)}),d.on("touchstart",function(a){h?(clearTimeout(h),h=null,g(a,d,c)):h=setTimeout(function(){h=null},300),a.preventDefault()})}),a(window).on("resize.lg.zoom scroll.lg.zoom orientationchange.lg.zoom",function(){b.pageX=a(window).width()/2,b.pageY=a(window).height()/2+a(window).scrollTop(),e(d)}),a("#lg-zoom-out").on("click.lg",function(){b.core.$outer.find(".lg-current .lg-image").length&&(d-=b.core.s.scale,f())}),a("#lg-zoom-in").on("click.lg",function(){b.core.$outer.find(".lg-current .lg-image").length&&(d+=b.core.s.scale,f())}),a("#lg-actual-size").on("click.lg",function(a){g(a,b.core.$slide.eq(b.core.index).find(".lg-image"),b.core.index,!0)}),b.core.$el.on("onBeforeSlide.lg.tm",function(){d=1,b.resetZoom()}),b.zoomDrag(),b.zoomSwipe()},d.prototype.resetZoom=function(){this.core.$outer.removeClass("lg-zoomed"),this.core.$slide.find(".lg-img-wrap").removeAttr("style data-x data-y"),this.core.$slide.find(".lg-image").removeAttr("style data-scale"),this.pageX=a(window).width()/2,this.pageY=a(window).height()/2+a(window).scrollTop()},d.prototype.zoomSwipe=function(){var a=this,b={},c={},d=!1,e=!1,f=!1;a.core.$slide.on("touchstart.lg",function(c){if(a.core.$outer.hasClass("lg-zoomed")){var d=a.core.$slide.eq(a.core.index).find(".lg-object");f=d.prop("offsetHeight")*d.attr("data-scale")>a.core.$outer.find(".lg").height(),e=d.prop("offsetWidth")*d.attr("data-scale")>a.core.$outer.find(".lg").width(),(e||f)&&(c.preventDefault(),b={x:c.originalEvent.targetTouches[0].pageX,y:c.originalEvent.targetTouches[0].pageY})}}),a.core.$slide.on("touchmove.lg",function(g){if(a.core.$outer.hasClass("lg-zoomed")){var h,i,j=a.core.$slide.eq(a.core.index).find(".lg-img-wrap");g.preventDefault(),d=!0,c={x:g.originalEvent.targetTouches[0].pageX,y:g.originalEvent.targetTouches[0].pageY},a.core.$outer.addClass("lg-zoom-dragging"),i=f?-Math.abs(j.attr("data-y"))+(c.y-b.y):-Math.abs(j.attr("data-y")),h=e?-Math.abs(j.attr("data-x"))+(c.x-b.x):-Math.abs(j.attr("data-x")),(Math.abs(c.x-b.x)>15||Math.abs(c.y-b.y)>15)&&(a.core.s.useLeftForZoom?j.css({left:h+"px",top:i+"px"}):j.css("transform","translate3d("+h+"px, "+i+"px, 0)"))}}),a.core.$slide.on("touchend.lg",function(){a.core.$outer.hasClass("lg-zoomed")&&d&&(d=!1,a.core.$outer.removeClass("lg-zoom-dragging"),a.touchendZoom(b,c,e,f))})},d.prototype.zoomDrag=function(){var b=this,c={},d={},e=!1,f=!1,g=!1,h=!1;b.core.$slide.on("mousedown.lg.zoom",function(d){var f=b.core.$slide.eq(b.core.index).find(".lg-object");h=f.prop("offsetHeight")*f.attr("data-scale")>b.core.$outer.find(".lg").height(),g=f.prop("offsetWidth")*f.attr("data-scale")>b.core.$outer.find(".lg").width(),b.core.$outer.hasClass("lg-zoomed")&&a(d.target).hasClass("lg-object")&&(g||h)&&(d.preventDefault(),c={x:d.pageX,y:d.pageY},e=!0,b.core.$outer.scrollLeft+=1,b.core.$outer.scrollLeft-=1,b.core.$outer.removeClass("lg-grab").addClass("lg-grabbing"))}),a(window).on("mousemove.lg.zoom",function(a){if(e){var i,j,k=b.core.$slide.eq(b.core.index).find(".lg-img-wrap");f=!0,d={x:a.pageX,y:a.pageY},b.core.$outer.addClass("lg-zoom-dragging"),j=h?-Math.abs(k.attr("data-y"))+(d.y-c.y):-Math.abs(k.attr("data-y")),i=g?-Math.abs(k.attr("data-x"))+(d.x-c.x):-Math.abs(k.attr("data-x")),b.core.s.useLeftForZoom?k.css({left:i+"px",top:j+"px"}):k.css("transform","translate3d("+i+"px, "+j+"px, 0)")}}),a(window).on("mouseup.lg.zoom",function(a){e&&(e=!1,b.core.$outer.removeClass("lg-zoom-dragging"),!f||c.x===d.x&&c.y===d.y||(d={x:a.pageX,y:a.pageY},b.touchendZoom(c,d,g,h)),f=!1),b.core.$outer.removeClass("lg-grabbing").addClass("lg-grab")})},d.prototype.touchendZoom=function(a,b,c,d){var e=this,f=e.core.$slide.eq(e.core.index).find(".lg-img-wrap"),g=e.core.$slide.eq(e.core.index).find(".lg-object"),h=-Math.abs(f.attr("data-x"))+(b.x-a.x),i=-Math.abs(f.attr("data-y"))+(b.y-a.y),j=(e.core.$outer.find(".lg").height()-g.prop("offsetHeight"))/2,k=Math.abs(g.prop("offsetHeight")*Math.abs(g.attr("data-scale"))-e.core.$outer.find(".lg").height()+j),l=(e.core.$outer.find(".lg").width()-g.prop("offsetWidth"))/2,m=Math.abs(g.prop("offsetWidth")*Math.abs(g.attr("data-scale"))-e.core.$outer.find(".lg").width()+l);(Math.abs(b.x-a.x)>15||Math.abs(b.y-a.y)>15)&&(d&&(i<=-k?i=-k:i>=-j&&(i=-j)),c&&(h<=-m?h=-m:h>=-l&&(h=-l)),d?f.attr("data-y",Math.abs(i)):i=-Math.abs(f.attr("data-y")),c?f.attr("data-x",Math.abs(h)):h=-Math.abs(f.attr("data-x")),e.core.s.useLeftForZoom?f.css({left:h+"px",top:i+"px"}):f.css("transform","translate3d("+h+"px, "+i+"px, 0)"))},d.prototype.destroy=function(){var b=this;b.core.$el.off(".lg.zoom"),a(window).off(".lg.zoom"),b.core.$slide.off(".lg.zoom"),b.core.$el.off(".lg.tm.zoom"),b.resetZoom(),clearTimeout(b.zoomabletimeout),b.zoomabletimeout=!1},a.fn.lightGallery.modules.zoom=d}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(0,function(a){!function(){"use strict";var b={hash:!0},c=function(c){return this.core=a(c).data("lightGallery"),this.core.s=a.extend({},b,this.core.s),this.core.s.hash&&(this.oldHash=window.location.hash,this.init()),this};c.prototype.init=function(){var b,c=this;c.core.$el.on("onAfterSlide.lg.tm",function(a,b,d){history.replaceState?history.replaceState(null,null,window.location.pathname+window.location.search+"#lg="+c.core.s.galleryId+"&slide="+d):window.location.hash="lg="+c.core.s.galleryId+"&slide="+d}),a(window).on("hashchange.lg.hash",function(){b=window.location.hash;var a=parseInt(b.split("&slide=")[1],10);b.indexOf("lg="+c.core.s.galleryId)>-1?c.core.slide(a,!1,!1):c.core.lGalleryOn&&c.core.destroy()})},c.prototype.destroy=function(){this.core.s.hash&&(this.oldHash&&this.oldHash.indexOf("lg="+this.core.s.galleryId)<0?history.replaceState?history.replaceState(null,null,this.oldHash):window.location.hash=this.oldHash:history.replaceState?history.replaceState(null,document.title,window.location.pathname+window.location.search):window.location.hash="",this.core.$el.off(".lg.hash"))},a.fn.lightGallery.modules.hash=c}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(0,function(a){!function(){"use strict";var b={share:!0,facebook:!0,facebookDropdownText:"Facebook",twitter:!0,twitterDropdownText:"Twitter",googlePlus:!0,googlePlusDropdownText:"GooglePlus",pinterest:!0,pinterestDropdownText:"Pinterest"},c=function(c){return this.core=a(c).data("lightGallery"),this.core.s=a.extend({},b,this.core.s),this.core.s.share&&this.init(),this};c.prototype.init=function(){var b=this,c='<span id="lg-share" class="lg-icon"><ul class="lg-dropdown" style="position: absolute;">';c+=b.core.s.facebook?'<li><a id="lg-share-facebook" target="_blank"><span class="lg-icon"></span><span class="lg-dropdown-text">'+this.core.s.facebookDropdownText+"</span></a></li>":"",c+=b.core.s.twitter?'<li><a id="lg-share-twitter" target="_blank"><span class="lg-icon"></span><span class="lg-dropdown-text">'+this.core.s.twitterDropdownText+"</span></a></li>":"",c+=b.core.s.googlePlus?'<li><a id="lg-share-googleplus" target="_blank"><span class="lg-icon"></span><span class="lg-dropdown-text">'+this.core.s.googlePlusDropdownText+"</span></a></li>":"",c+=b.core.s.pinterest?'<li><a id="lg-share-pinterest" target="_blank"><span class="lg-icon"></span><span class="lg-dropdown-text">'+this.core.s.pinterestDropdownText+"</span></a></li>":"",c+="</ul></span>",this.core.$outer.find(".lg-toolbar").append(c),this.core.$outer.find(".lg").append('<div id="lg-dropdown-overlay"></div>'),a("#lg-share").on("click.lg",function(){b.core.$outer.toggleClass("lg-dropdown-active")}),a("#lg-dropdown-overlay").on("click.lg",function(){b.core.$outer.removeClass("lg-dropdown-active")}),b.core.$el.on("onAfterSlide.lg.tm",function(c,d,e){setTimeout(function(){a("#lg-share-facebook").attr("href","https://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent(b.getSahreProps(e,"facebookShareUrl")||window.location.href)),a("#lg-share-twitter").attr("href","https://twitter.com/intent/tweet?text="+b.getSahreProps(e,"tweetText")+"&url="+encodeURIComponent(b.getSahreProps(e,"twitterShareUrl")||window.location.href)),a("#lg-share-googleplus").attr("href","https://plus.google.com/share?url="+encodeURIComponent(b.getSahreProps(e,"googleplusShareUrl")||window.location.href)),a("#lg-share-pinterest").attr("href","http://www.pinterest.com/pin/create/button/?url="+encodeURIComponent(b.getSahreProps(e,"pinterestShareUrl")||window.location.href)+"&media="+encodeURIComponent(b.getSahreProps(e,"src"))+"&description="+b.getSahreProps(e,"pinterestText"))},100)})},c.prototype.getSahreProps=function(a,b){var c="";if(this.core.s.dynamic)c=this.core.s.dynamicEl[a][b];else{var d=this.core.$items.eq(a).attr("href"),e=this.core.$items.eq(a).data(b);c="src"===b?d||e:e}return c},c.prototype.destroy=function(){},a.fn.lightGallery.modules.share=c}()});
(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
var LS_USER="bdm_chat_user";
function getUser(){
try {
var raw=localStorage.getItem(LS_USER);
return raw ? JSON.parse(raw):null;
} catch (e){ return null; }}
function setUser(u){
try { localStorage.setItem(LS_USER, JSON.stringify(u||{})); } catch (e){}}
function clearUser(){
try { localStorage.removeItem(LS_USER); } catch (e){}}
function normalizeDigits(v){
return String(v||"").replace(/[^\d]/g, "");
}
function usuarioIdFromLoginPayload(p){
if(!p||typeof p!=="object"||p._parseError) return 0;
var tryParse=function (v){
var n=parseInt(String(v==null ? "":v), 10);
return n > 0 ? n:0;
};
var id=tryParse(p.id);
if(id) return id;
id=tryParse(p.id_usuario);
if(id) return id;
id=tryParse(p.idUsuario);
if(id) return id;
id=tryParse(p.id_cliente);
if(id) return id;
id=tryParse(p.cliente_id);
if(id) return id;
if(p.usuario&&typeof p.usuario==="object"){
id=tryParse(p.usuario.id);
if(id) return id;
}
if(p.cliente&&typeof p.cliente==="object"){
id=tryParse(p.cliente.id);
if(id) return id;
}
if(p.data&&typeof p.data==="object"){
if(!Array.isArray(p.data)){
id=usuarioIdFromLoginPayload(p.data);
if(id) return id;
}else if(p.data.length&&p.data[0]&&typeof p.data[0]==="object"){
id=usuarioIdFromLoginPayload(p.data[0]);
if(id) return id;
}}
return 0;
}
function loginPainelResultIsOk(j){
if(!j||typeof j!=="object") return false;
return String(j.result==null ? "":j.result).trim().toUpperCase()==="OK";
}
function loginPainelMensagemErro(j){
if(!j||typeof j!=="object") return "Falha ao entrar.";
var m=j.erro!=null ? j.erro:j.mensagem!=null ? j.mensagem:j.message;
m=String(m==null ? "":m).trim();
return m||"Credenciais inválidas.";
}
function setAuthFormLoading(ctx, form, on, message){
if(!form) return;
message=message||"Verificando os dados…";
var slot=form.querySelector(".bdm-auth-feedback");
if(!slot){
var submit=form.querySelector(".bdm-auth-cta.-primary");
if(!submit||!submit.parentNode) return;
slot=document.createElement("div");
slot.className="bdm-auth-feedback";
slot.setAttribute("aria-live", "polite");
submit.parentNode.insertBefore(slot, submit.nextSibling);
}
var sub=form.querySelector(".bdm-auth-cta.-primary");
var out=form.querySelector(".bdm-auth-cta.-outline");
var eyes=form.querySelectorAll(".bdm-auth-eye");
var inputs=form.querySelectorAll("input");
if(on){
form.setAttribute("aria-busy", "true");
for (var i=0; i < inputs.length; i++) inputs[i].disabled=true;
for (var e=0; e < eyes.length; e++) eyes[e].disabled=true;
if(sub) sub.disabled=true;
if(out) out.disabled=true;
slot.innerHTML="";
var wrap=ctx.el("div", { class: "bdm-auth-form-loading" });
wrap.appendChild(ctx.el("i", { class: "bdm-fa fa-solid fa-circle-notch fa-spin", "aria-hidden": "true" }));
wrap.appendChild(ctx.el("span", { text: message }));
slot.appendChild(wrap);
}else{
form.removeAttribute("aria-busy");
for (var j=0; j < inputs.length; j++) inputs[j].disabled=false;
for (var g=0; g < eyes.length; g++) eyes[g].disabled=false;
if(sub) sub.disabled=false;
if(out) out.disabled=false;
var slotOff=form.querySelector(".bdm-auth-feedback");
if(slotOff){
var loadEl=slotOff.querySelector(".bdm-auth-form-loading");
if(loadEl&&loadEl.parentNode) loadEl.parentNode.removeChild(loadEl);
}}
}
function cadastroRespostaValida(j){
if(!j||typeof j!=="object"||j._parseError) return false;
return String(j.result==null ? "":j.result).trim().toUpperCase()==="OK";
}
function cadastroMensagemErro(j){
if(!j||typeof j!=="object") return "Falha ao cadastrar.";
var r=String(j.result==null ? "":j.result).trim();
if(r==="505"){
return "Este e-mail já está cadastrado. Faça login ou use outro e-mail.";
}
if(r.toLowerCase()==="error"){
return "Não foi possível concluir o cadastro. Tente novamente mais tarde.";
}
var m=j.erro!=null ? j.erro:j.mensagem!=null ? j.mensagem:j.message;
m=String(m==null ? "":m).trim();
return m||"Falha ao cadastrar.";
}
function showAuthFormFeedback(ctx, form, message, isError){
if(!form||!message) return;
var slot=form.querySelector(".bdm-auth-feedback");
if(!slot){
var submit=form.querySelector(".bdm-auth-cta.-primary");
if(!submit||!submit.parentNode) return;
slot=document.createElement("div");
slot.className="bdm-auth-feedback";
slot.setAttribute("aria-live", "polite");
submit.parentNode.insertBefore(slot, submit.nextSibling);
}
slot.innerHTML="";
var div=ctx.el("div", {
class: "bdm-auth-form-message" + (isError ? " bdm-auth-form-message--error":""),
text: String(message)
});
slot.appendChild(div);
}
window.BDMChatPages.authLanding=function (ctx, motel){
ctx.state.currentView="authLanding";
ctx.loadTemplate("auth-landing").then(function (html){
var node=ctx.htmlToNode(html);
ctx.applyBinds(node, { motel: motel||{}});
ctx.wireActions(node);
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar.";
});
};
window.BDMChatPages.authLogin=function (ctx, motel){
ctx.state.currentView="authLogin";
ctx.loadTemplate("auth-login").then(function (html){
var node=ctx.htmlToNode(html);
ctx.applyBinds(node, { motel: motel||{}});
ctx.wireActions(node);
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar.";
});
};
window.BDMChatPages.authRegister=function (ctx, motel){
ctx.state.currentView="authRegister";
ctx.loadTemplate("auth-register").then(function (html){
var node=ctx.htmlToNode(html);
ctx.applyBinds(node, { motel: motel||{}});
ctx.wireActions(node);
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar.";
});
};
window.BDMChatPages.authSubmitLogin=function (ctx, form){
var email=String(form.email&&form.email.value||"").trim().toLowerCase();
var senha=String(form.senha&&form.senha.value||"").trim();
var feedbackSlot=form&&form.querySelector ? form.querySelector(".bdm-auth-feedback"):null;
if(feedbackSlot) feedbackSlot.innerHTML="";
setAuthFormLoading(ctx, form, true, "Verificando login…");
console.log("[BDM login] POST", ctx.urls.login, { email: email, senhaLength: senha.length });
fetch(ctx.urls.login, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: email, senha: senha })
})
.then(function (r){
return r.text().then(function (text){
console.log("[BDM login] resposta bruta (login via REST → painel login.php)", {
status: r.status,
ok: r.ok,
contentType: r.headers.get("content-type"),
corpo: text
});
var j={};
if(text){
try {
j=JSON.parse(text);
} catch (e){
console.log("[BDM login] corpo não é JSON válido", e);
j={ _parseError: String(e), _raw: text };}}
return { status: r.status, json: j };});
})
.then(function (res){
var j=res.json||{};
console.log("[BDM login] objeto interpretado", j);
if(res.status < 200||res.status >=300){
showAuthFormFeedback(ctx, form, loginPainelMensagemErro(j), true);
return;
}
if(!loginPainelResultIsOk(j)||usuarioIdFromLoginPayload(j) <=0){
showAuthFormFeedback(ctx, form, loginPainelMensagemErro(j), true);
return;
}
var nomeLogin="";
if(j&&typeof j==="object"){
nomeLogin=String(j.nome||(j.cliente&&j.cliente.nome)||(j.usuario&&j.usuario.nome)||"").trim();
}
setUser({
logged: true,
payload: j,
email: email,
nome: nomeLogin||undefined
});
ctx.navigate("home");
})
.catch(function (){
showAuthFormFeedback(ctx, form, "Falha ao entrar.", true);
})
.finally(function (){
setAuthFormLoading(ctx, form, false);
});
};
window.BDMChatPages.authSubmitRegister=function (ctx, form){
var nome=String(form.nome&&form.nome.value||"").trim();
var email=String(form.email&&form.email.value||"").trim().toLowerCase();
var cpf=normalizeDigits(form.cpf&&form.cpf.value||"");
var telefone=String(form.telefone&&form.telefone.value||"").trim();
var senha=String(form.senha&&form.senha.value||"").trim();
if(cpf.length!==11){
showAuthFormFeedback(ctx, form, "CPF inválido (precisa ter 11 dígitos).", true);
return;
}
if(senha.length < 6){
showAuthFormFeedback(ctx, form, "Senha muito curta (mín. 6 caracteres).", true);
return;
}
var regFeedback=form&&form.querySelector ? form.querySelector(".bdm-auth-feedback"):null;
if(regFeedback) regFeedback.innerHTML="";
setAuthFormLoading(ctx, form, true, "Verificando cadastro…");
fetch(ctx.urls.cadastro, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ nome: nome, email: email, cpf: cpf, telefone: telefone, senha: senha })
})
.then(function (r){
return r.text().then(function (text){
var j={};
if(text){
try {
j=JSON.parse(text);
} catch (e){
j={ _parseError: String(e), _raw: text };}}
return { status: r.status, json: j };});
})
.then(function (res){
var j=res.json||{};
if(res.status < 200||res.status >=300){
showAuthFormFeedback(ctx, form, cadastroMensagemErro(j), true);
return;
}
if(!cadastroRespostaValida(j)){
showAuthFormFeedback(ctx, form, cadastroMensagemErro(j), true);
return;
}
setUser({ logged: true, payload: j, email: email, nome: nome, cpf: cpf, telefone: telefone });
ctx.navigate("home");
})
.catch(function (){
showAuthFormFeedback(ctx, form, "Falha ao cadastrar.", true);
})
.finally(function (){
setAuthFormLoading(ctx, form, false);
});
};
window.BDMChatPages.getUserRecord=function (){
return getUser();
};
window.BDMChatPages.isLogged=function (){
var u=getUser();
return !!(u&&u.logged);
};
window.BDMChatPages.saveUserProfile=function (fields){
var u=getUser();
if(!u||!u.logged) return false;
var f=fields||{};
if(f.nome!=null) u.nome=String(f.nome).trim();
if(f.telefone!=null) u.telefone=String(f.telefone).trim();
if(f.cpf!=null) u.cpf=normalizeDigits(f.cpf);
u.profile=u.profile&&typeof u.profile==="object" ? u.profile:{};
if(f.endereco!=null) u.profile.endereco=String(f.endereco).trim();
if(f.cidade!=null) u.profile.cidade=String(f.cidade).trim();
if(f.uf!=null) u.profile.uf=String(f.uf).trim().slice(0, 2).toUpperCase();
if(f.cep!=null) u.profile.cep=String(f.cep).trim();
if(f.numero!=null) u.profile.numero=String(f.numero).trim();
if(f.bairro!=null) u.profile.bairro=String(f.bairro).trim();
setUser(u);
return true;
};
window.BDMChatPages.applyUserApiResponse=function (serverUser){
if(!serverUser||typeof serverUser!=="object") return false;
var u=getUser();
if(!u||!u.logged) return false;
var copy={};
Object.keys(serverUser).forEach(function (k){
if(k==="senha"||k==="result") return;
copy[k]=serverUser[k];
});
if(copy.nome!=null) u.nome=String(copy.nome).trim();
if(copy.telefone!=null) u.telefone=String(copy.telefone).trim();
if(copy.cpf!=null) u.cpf=normalizeDigits(copy.cpf);
if(copy.email!=null&&!u.email) u.email=String(copy.email).trim();
u.profile=u.profile&&typeof u.profile==="object" ? u.profile:{};
if(copy.endereco!=null) u.profile.endereco=String(copy.endereco).trim();
if(copy.numero!=null) u.profile.numero=String(copy.numero).trim();
if(copy.bairro!=null) u.profile.bairro=String(copy.bairro).trim();
if(copy.cidade!=null) u.profile.cidade=String(copy.cidade).trim();
if(copy.estado!=null) u.profile.uf=String(copy.estado).trim().slice(0, 2).toUpperCase();
if(copy.cep!=null) u.profile.cep=String(copy.cep).trim();
u.payload=Object.assign({}, u.payload||{}, copy);
setUser(u);
return true;
};
window.BDMChatPages.getUsuarioId=function (){
var u=getUser();
if(!u||!u.payload||typeof u.payload!=="object") return 0;
return usuarioIdFromLoginPayload(u.payload);
};
window.BDMChatPages.logout=function (){
clearUser();
};})();
(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
var LS_PENDING_RESERVA="bdm_chat_pending_reserva";
var LS_PENDING_PAYMENT="bdm_chat_pending_payment";
function getPendingReservaApproval(){
try {
var raw=localStorage.getItem(LS_PENDING_RESERVA);
return raw ? JSON.parse(raw):null;
} catch (e){
return null;
}}
function clearPendingReservaApproval(){
try {
localStorage.removeItem(LS_PENDING_RESERVA);
} catch (e){}}
function getPendingPayment(){
try {
var raw=localStorage.getItem(LS_PENDING_PAYMENT);
return raw ? JSON.parse(raw):null;
} catch (e){
return null;
}}
function clearPendingPayment(){
try {
localStorage.removeItem(LS_PENDING_PAYMENT);
} catch (e){}}
function extractReservaStatusFromDetalhe(api){
function readStatus(o){
if(!o||typeof o!=="object") return "";
return String(
o.status_reserva||o.status||o.checking||o.result||o.situacao||o.estado||""
).trim();
}
if(Array.isArray(api)&&api.length) return readStatus(api[0]).toUpperCase();
if(api&&typeof api==="object"&&Array.isArray(api.data)&&api.data.length){
return readStatus(api.data[0]).toUpperCase();
}
return readStatus(api).toUpperCase();
}
function isReservaPagamentoAtiva(status){
var s=String(status||"").toUpperCase();
return (
s==="PENDENTE" ||
s==="ACEITO" ||
s==="AGUARDANDO" ||
s==="AGUARDANDO PAGAMENTO" ||
s==="AGUARDANDO_PAGAMENTO" ||
s==="WAIT" ||
s==="VERIFICANDO"
);
}
window.BDMChatPages.home=function (ctx, motel){
ctx.state.currentView="home";
var motelData=(motel&&motel.motel) ? motel.motel:(motel||{});
var pages=window.BDMChatPages||{};
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
var detalheUrl=(ctx.urls.reservaDetalhe||"").trim();
var pagamentoCheckUrl=(ctx.urls.pagamentoCheck||"").trim();
var pending=getPendingReservaApproval();
var pendingPayment=getPendingPayment();
function shouldResumePendingPaymentFlow(){
if(!pendingPayment||!pendingPayment.codigo_reserva||!uid||!detalheUrl){
return Promise.resolve(false);
}
if(parseInt(String(pendingPayment.id_usuario||0), 10)!==uid){
clearPendingPayment();
return Promise.resolve(false);
}
var codigoReserva=String(pendingPayment.codigo_reserva||"").trim();
if(!codigoReserva){
clearPendingPayment();
return Promise.resolve(false);
}
function resumeIfStillOpen(){
return fetch(detalheUrl, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid, codigo_reserva: codigoReserva })
})
.then(function (r){ return r.json(); })
.then(function (detalhe){
var status=extractReservaStatusFromDetalhe(detalhe);
if(!isReservaPagamentoAtiva(status)){
clearPendingPayment();
return false;
}
ctx.state.lastReservaPaymentData=pendingPayment.payload&&typeof pendingPayment.payload==="object"
? pendingPayment.payload
: { codigo_reserva: codigoReserva, id_usuario: uid };
if(!ctx.state.lastReservaPaymentData.codigo_reserva){
ctx.state.lastReservaPaymentData.codigo_reserva=codigoReserva;
}
if(!ctx.state.lastReservaPaymentData.id_usuario){
ctx.state.lastReservaPaymentData.id_usuario=uid;
}
ctx.navigate("reservaPagamento");
return true;
})
.catch(function (){
return false;
});
}
if(!pagamentoCheckUrl){
return resumeIfStillOpen();
}
return fetch(pagamentoCheckUrl, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid, codigo_reserva: codigoReserva })
})
.then(function (r){ return r.json().then(function (j){ return { status: r.status, json: j };});})
.then(function (res){
var payload=res&&res.json ? res.json:{};
if(res.status >=200&&res.status < 300){
var result=String(payload.result||payload.status||"").toUpperCase();
if(result==="OK"){
clearPendingPayment();
return false;
}}
return resumeIfStillOpen();
})
.catch(function (){
return resumeIfStillOpen();
});
}
function shouldResumePendingFlow(){
if(!pending||!pending.codigo_reserva||!uid||!detalheUrl){
return Promise.resolve(false);
}
if(parseInt(String(pending.id_usuario||0), 10)!==uid){
clearPendingReservaApproval();
return Promise.resolve(false);
}
return fetch(detalheUrl, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid, codigo_reserva: pending.codigo_reserva })
})
.then(function (r){ return r.json(); })
.then(function (detalhe){
var status=extractReservaStatusFromDetalhe(detalhe);
if(status==="PENDENTE" ||
status==="WAIT" ||
status==="AGUARDANDO" ||
status==="VERIFICANDO"
){
ctx.state.lastReservaResult={
code: String(pending.codigo_reserva),
payload: pending.payload&&typeof pending.payload==="object"
? pending.payload
: { id_usuario: uid }};
ctx.navigate("reservaAguarde");
return true;
}
clearPendingReservaApproval();
return false;
})
.catch(function (){
return false;
});
}
shouldResumePendingPaymentFlow().then(function (resumedPayment){
if(resumedPayment) return true;
return shouldResumePendingFlow();
}).then(function (resumed){
if(resumed) return;
return Promise.all([
ctx.loadTemplate("home-suites"),
fetch(ctx.urls.suites, { credentials: "same-origin" }).then(function (r){ return r.json(); })
])
.then(function (arr){
var html=arr[0];
var data=arr[1];
if(!window.BDMChatMotelModel&&data&&typeof data==="object"&&data.motel&&typeof data.motel==="object"){
window.BDMChatMotelModel={ motel: data.motel };}
if((!window.BDMChatMotelIntegracao||window.BDMChatMotelIntegracao==="") &&
data &&
typeof data==="object" &&
data.motel &&
typeof data.motel==="object" &&
data.motel.integracao!=null
){
window.BDMChatMotelIntegracao=String(data.motel.integracao).trim().toUpperCase();
}
var node=ctx.htmlToNode(html);
ctx.applyBinds(node, { motel: motelData });
var grid=node.querySelector('[data-slot="suites"]')||node;
grid.innerHTML="";
var suites=(data&&data.suites) ? data.suites:(Array.isArray(data) ? data:[]);
if(!suites||!suites.length){
grid.appendChild(ctx.el("div", { class: "bdm-empty", text: "Nenhuma suíte encontrada." }));
}else{
suites.forEach(function (s){
var img=ctx.firstImageFromSuite(s);
var row=ctx.el("div", { class: "bdm-suite-row" });
row.addEventListener("click", function (){
ctx.state.selectedSuite=s;
ctx.navigate("suiteDetalhes");
});
var left=ctx.el("div", { class: "bdm-suite-left" });
if(img){
left.appendChild(ctx.el("img", { class: "bdm-suite-thumb", src: img, alt: ctx.safeText(s.nome||"Suíte"), loading: "lazy", referrerpolicy: "no-referrer" }));
}
var mid=ctx.el("div", { class: "bdm-suite-mid" });
mid.appendChild(ctx.el("div", { class: "bdm-suite-title" }, [ctx.safeText(s.nome||"Suíte")]));
var status=ctx.el("div", { class: "bdm-suite-status" });
status.appendChild(ctx.el("span", { class: "bdm-dot" }));
var unavailable =
typeof window.BDMChatSuiteUnavailableToday==="function"&&window.BDMChatSuiteUnavailableToday(s);
var available = !unavailable;
try {
var readIntegracao =
typeof window.BDMChatReadIntegracaoFlag==="function"
? window.BDMChatReadIntegracaoFlag
: function (){ return ""; };} catch (e){}
if(!available) status.className="bdm-suite-status -off";
status.appendChild(ctx.el("span", { text: available ? "Disponível":"Indisponível" }));
mid.appendChild(status);
var details=ctx.el("div", { class: "bdm-suite-details" });
var txt=ctx.htmlToText(s.texto||"");
if(txt){
details.appendChild(ctx.el("div", { class: "bdm-suite-text", text: txt }));
}
mid.appendChild(details);
var right=ctx.el("div", { class: "bdm-suite-right" });
var rawPrice=(s.apartir||s.preco||s.valor||s.preco2h||s.price) ? (s.apartir||s.preco||s.valor||s.preco2h||s.price):"";
var price="";
if(rawPrice!==null&&rawPrice!==undefined&&rawPrice!==""){
var n=parseFloat(String(rawPrice).replace(",", "."));
price=isFinite(n) ? ("R$ " + n.toFixed(2).replace(".", ",")):String(rawPrice);
}
if(price){
right.appendChild(ctx.el("div", { class: "bdm-suite-price-sub" }, ["a partir de"]));
right.appendChild(ctx.el("div", { class: "bdm-suite-price" }, [ctx.safeText(price)]));
}
var btn=ctx.el("button", { class: "bdm-suite-cta", type: "button" }, ["RESERVAR"]);
btn.addEventListener("click", function (ev){
if(ev&&ev.stopPropagation) ev.stopPropagation();
ctx.body.scrollTop=0;
ctx.body.appendChild(ctx.el("div", { class: "bdm-toast", text: "Reserva: em breve." }));
setTimeout(function (){
var t=ctx.body.querySelector(".bdm-toast");
if(t) t.remove();
}, 1800);
});
right.appendChild(btn);
row.appendChild(left);
row.appendChild(mid);
row.appendChild(right);
grid.appendChild(row);
});
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
})
.catch(function (){
ctx.body.textContent="Falha ao carregar suítes.";
});
}).catch(function (){
ctx.body.textContent="Falha ao carregar suítes.";
});
};})();
(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
window.BDMChatPages.chat=function (ctx){
ctx.state.currentView="chat";
var p=ctx.cache.chatData
? Promise.resolve(ctx.cache.chatData)
: fetch(ctx.urls.bootstrap, { credentials: "same-origin" }).then(function (r){ return r.json(); });
p.then(function (data){
ctx.cache.chatData=data;
if(ctx.title&&data&&data.motel&&data.motel.nome) ctx.title.textContent=data.motel.nome;
var items=(data&&data.bot&&data.bot.items) ? data.bot.items:[];
ctx.body.innerHTML="";
var q=ctx.findFirstQuestion(items);
if(!q){
ctx.body.appendChild(ctx.el("div", { class: "bdm-msg -bot", text: "Chat não configurado para este motel." }));
return;
}
function renderQuestion(question){
ctx.body.appendChild(ctx.el("div", { class: "bdm-msg -bot" }, [ctx.safeText(question.texto||"")]));
var opts=ctx.findOptions(items, question.id);
if(!opts.length) return;
var wrap=ctx.el("div", { class: "bdm-options" });
opts.forEach(function (opt){
var b=ctx.el("button", { class: "bdm-option", type: "button" }, [ctx.safeText(opt.texto||"")]);
b.addEventListener("click", function (){
ctx.body.appendChild(ctx.el("div", { class: "bdm-msg -user" }, [ctx.safeText(opt.texto||"")]));
var next=ctx.findNextQuestion(items, opt.id);
if(!next){
ctx.body.appendChild(ctx.el("div", { class: "bdm-msg -bot", text: "Finalizado." }));
ctx.body.scrollTop=ctx.body.scrollHeight;
wrap.remove();
return;
}
wrap.remove();
renderQuestion(next);
ctx.body.scrollTop=ctx.body.scrollHeight;
});
wrap.appendChild(b);
});
ctx.body.appendChild(wrap);
ctx.body.scrollTop=ctx.body.scrollHeight;
}
renderQuestion(q);
}).catch(function (){
ctx.body.textContent="Falha ao carregar dados do chat.";
});
};})();
(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
window.BDMChatPages.suites=function (ctx){
ctx.state.currentView="suites";
Promise.all([
ctx.loadTemplate("suites"),
fetch(ctx.urls.suites, { credentials: "same-origin" }).then(function (r){ return r.json(); })
])
.then(function (arr){
var html=arr[0];
var data=arr[1];
var node=ctx.htmlToNode(html);
var grid=node.querySelector('[data-slot="suites"]')||node;
grid.innerHTML="";
var suites=(data&&data.suites) ? data.suites:(Array.isArray(data) ? data:[]);
if(!suites||!suites.length){
grid.appendChild(ctx.el("div", { class: "bdm-empty", text: "Nenhuma suíte encontrada." }));
}else{
suites.forEach(function (s){
var img=ctx.firstImageFromSuite(s);
var card=ctx.el("button", { class: "bdm-suite-card", type: "button" });
if(img){
var media=ctx.el("div", { class: "bdm-suite-media" });
media.appendChild(ctx.el("img", { class: "bdm-suite-img", src: img, alt: ctx.safeText(s.nome||"Suíte"), loading: "lazy", referrerpolicy: "no-referrer" }));
card.appendChild(media);
}
var info=ctx.el("div", { class: "bdm-suite-info" });
info.appendChild(ctx.el("div", { class: "bdm-suite-name" }, [ctx.safeText(s.nome||"Suíte")]));
if(s.descricao) info.appendChild(ctx.el("div", { class: "bdm-suite-desc" }, [ctx.safeText(s.descricao)]));
card.appendChild(info);
card.addEventListener("click", function (){
ctx.body.scrollTop=0;
ctx.body.appendChild(ctx.el("div", { class: "bdm-toast", text: "Detalhes da suíte: em breve." }));
setTimeout(function (){
var t=ctx.body.querySelector(".bdm-toast");
if(t) t.remove();
}, 1800);
});
grid.appendChild(card);
});
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
})
.catch(function (){
ctx.body.textContent="Falha ao carregar suítes.";
});
};})();
(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
var LS_PENDING_RESERVA="bdm_chat_pending_reserva";
var LS_PENDING_PAYMENT="bdm_chat_pending_payment";
var MESES=["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"];
function pad2(n){
return n < 10 ? "0" + n:String(n);
}
function getMinSelectableMidnight(){
var n=new Date();
if(n.getHours()===23){
var t=new Date(n.getFullYear(), n.getMonth(), n.getDate() + 1);
return t;
}
return new Date(n.getFullYear(), n.getMonth(), n.getDate());
}
function isRealToday(y, m, d){
var t=new Date();
return y===t.getFullYear()&&m===t.getMonth()&&d===t.getDate();
}
function dateAtMidnight(y, m, d){
return new Date(y, m, d);
}
function isDateBeforeMin(selY, selM, selD, minDate){
if(!minDate||!(minDate instanceof Date)) return false;
return dateAtMidnight(selY, selM, selD).getTime() < minDate.getTime();
}
function isPrecosListEmpty(data){
if(!data) return true;
if(typeof data==="object"&&data.erro&&isPrecosUnavailableErroMessage(data.erro)){
return true;
}
return normalizePrecosList(data).length===0;
}
function isPrecosUnavailableErroMessage(msg){
var s=String(msg==null ? "":msg).trim().toLowerCase();
return s.indexOf("sem autorização")!==-1||s.indexOf("sem autorizacao")!==-1;
}
function normalizePrecosApiResponse(data){
if(!data||typeof data!=="object") return data;
if(data.erro&&isPrecosUnavailableErroMessage(data.erro)){
return [];
}
return data;
}
function syncBookingUnavailableUi(node, merged, base, state, minDate, booking){
var unSlot=node.querySelector('[data-slot="unavailable-notice"]');
var flow=node.querySelector('[data-slot="booking-flow"]');
var disp0=isDisp0Combined(merged, base);
var selToday=isRealToday(state.selY, state.selM, state.selD);
var precosEmpty = !!(state&&state.precosEmptyForDay);
var hideFlow=isDateBeforeMin(state.selY, state.selM, state.selD, minDate)||(disp0&&selToday);
var showMsg=(disp0&&selToday)||precosEmpty;
var msg="";
if(disp0&&selToday){
msg="Esta suíte está indisponível para hoje. Selecione a partir de amanhã no calendário para escolher permanência e horário de chegada.";
}else if(precosEmpty){
msg="Indisponível para o dia selecionado.";
}
if(unSlot){
unSlot.textContent=msg;
unSlot.hidden = !showMsg;
unSlot.classList.toggle("-hidden", !showMsg);
}
if(flow){
flow.hidden=hideFlow;
flow.classList.toggle("-hidden", hideFlow);
}
if(booking&&booking.syncTermsButton) booking.syncTermsButton();
if(booking&&booking.refresh) booking.refresh();
}
function isSuiteUnavailableToday(suite){
if(!suite||typeof suite!=="object") return false;
var readIntegracao =
typeof window.BDMChatReadIntegracaoFlag==="function"
? window.BDMChatReadIntegracaoFlag
: function (raw){
if(!raw||typeof raw!=="object") return "";
if(Object.prototype.hasOwnProperty.call(raw, "integracao")){
return String(raw.integracao==null ? "":raw.integracao).trim().toUpperCase();
}
return "";
};
if(readIntegracao(window.BDMChatMotelModel)==="N") return false;
if(readIntegracao(suite)==="N") return false;
if(typeof window.BDMChatSuiteUnavailableToday==="function"){
try {
return !!window.BDMChatSuiteUnavailableToday(suite);
} catch (e){
}}
var d=suite.disponibilidade;
if(d===0||d==="0"||d===false) return true;
if(typeof d==="string"){
var t=d.trim().toLowerCase();
if(t==="0"||t==="false"||t==="no"||t==="n"||t==="nao"||t==="não") return true;
if(t==="indisponivel"||t==="indisponível") return true;
}
if(suite.disponivel===false||suite.disponivel===0||suite.disponivel==="0"||suite.disponivel==="N"||suite.disponivel==="n") return true;
if(suite["disponível"]===false||suite["disponível"]===0||suite["disponível"]==="0") return true;
return false;
}
function isDisp0Combined(merged, base){
var mergedUnavailable=isSuiteUnavailableToday(merged);
var baseUnavailable=isSuiteUnavailableToday(base);
var result=mergedUnavailable||baseUnavailable;
try {
var readIntegracao =
typeof window.BDMChatReadIntegracaoFlag==="function"
? window.BDMChatReadIntegracaoFlag
: function (){ return ""; };} catch (e){}
return result;
}
function getRealTodayMidnight(){
var n=new Date();
return new Date(n.getFullYear(), n.getMonth(), n.getDate());
}
function getCalendarMinDateForSuite(merged, base){
if(isDisp0Combined(merged, base)){
return getRealTodayMidnight();
}
return getMinSelectableMidnight();
}
function sameCalendarDay(a, b){
if(!a||!b||!(a instanceof Date)||!(b instanceof Date)||isNaN(a.getTime())||isNaN(b.getTime())){
return false;
}
return (
a.getFullYear()===b.getFullYear() &&
a.getMonth()===b.getMonth() &&
a.getDate()===b.getDate()
);
}
function getInitialPrecosMinDate(base){
if(isSuiteUnavailableToday(base)){
return getRealTodayMidnight();
}
return getMinSelectableMidnight();
}
function unwrapDetalhesJson(raw){
if(!raw||typeof raw!=="object"||Array.isArray(raw)) return raw;
if(raw.erro!=null) return raw;
var hasTop =
Object.prototype.hasOwnProperty.call(raw, "suite") ||
Object.prototype.hasOwnProperty.call(raw, "detalhes") ||
Object.prototype.hasOwnProperty.call(raw, "disponibilidade") ||
Object.prototype.hasOwnProperty.call(raw, "suites");
if(hasTop) return raw;
if(raw.data&&typeof raw.data==="object"&&!Array.isArray(raw.data)) return raw.data;
return raw;
}
function buildMergedSuite(base, suiteApi, detJson){
var merged=Object.assign({}, base||{}, suiteApi||{});
applyAvailabilityFromRawResponse(detJson, merged);
if(!Object.prototype.hasOwnProperty.call(merged, "disponibilidade")){
applyAvailabilityFromRawResponse(base, merged);
}
return merged;
}
function selectDateForPrecosApi(state){
var now=new Date();
if(isRealToday(state.selY, state.selM, state.selD)){
return formatSelectDate(now);
}
return state.selY + "-" + pad2(state.selM + 1) + "-" + pad2(state.selD) + "T12:00:00";
}
function formatSelectDate(d){
if(!d||!(d instanceof Date)||isNaN(d.getTime())){
d=new Date();
}
return d.getFullYear() + "-" + pad2(d.getMonth() + 1) + "-" + pad2(d.getDate()) + "T" + pad2(d.getHours()) + ":" + pad2(d.getMinutes()) + ":" + pad2(d.getSeconds());
}
function buildReservaDateTimeFromState(state){
var now=new Date();
return (
state.selY + "-" + pad2(state.selM + 1) + "-" + pad2(state.selD) +
"T" + pad2(now.getHours()) + ":" + pad2(now.getMinutes()) + ":" + pad2(now.getSeconds())
);
}
function normalizePeriodoReserva(label){
var raw=String(label==null ? "":label).trim();
if(!raw) return "";
return raw.replace(/\s*horas?$/i, "").trim();
}
function normalizeDetalhesPayload(data){
if(Array.isArray(data)&&data.length&&data[0]&&typeof data[0]==="object"){
return data[0];
}
if(!data||typeof data!=="object") return {};
if(data.suite&&typeof data.suite==="object") return data.suite;
if(data.detalhes&&typeof data.detalhes==="object") return data.detalhes;
if(data.suites&&typeof data.suites==="object"&&!Array.isArray(data.suites)) return data.suites;
return data;
}
function applyAvailabilityFromRawResponse(raw, target){
if(!target||typeof target!=="object") return;
var blobs=[];
function add(b){
if(b&&typeof b==="object"&&!Array.isArray(b)&&blobs.indexOf(b) < 0) blobs.push(b);
}
if(!raw||typeof raw!=="object") return;
if(Array.isArray(raw)&&raw.length&&raw[0]&&typeof raw[0]==="object"){
add(raw[0]);
}else{
add(raw);
if(raw.data&&typeof raw.data==="object"&&!Array.isArray(raw.data)) add(raw.data);
if(raw.dados&&typeof raw.dados==="object"&&!Array.isArray(raw.dados)) add(raw.dados);
if(raw.result&&typeof raw.result==="object"&&!Array.isArray(raw.result)) add(raw.result);
if(raw.suite&&typeof raw.suite==="object") add(raw.suite);
if(raw.detalhes&&typeof raw.detalhes==="object") add(raw.detalhes);
}
for (var i=0; i < blobs.length; i++){
var b=blobs[i];
if(Object.prototype.hasOwnProperty.call(b, "disponibilidade")){
var v=b.disponibilidade;
if(v===false||v==="false") target.disponibilidade=0;
else if(v===true) target.disponibilidade=1;
else target.disponibilidade=v;
return;
}
if(Object.prototype.hasOwnProperty.call(b, "disponivel")||Object.prototype.hasOwnProperty.call(b, "disponível")){
var dv=b.disponivel!==undefined ? b.disponivel:b["disponível"];
target.disponibilidade=dv===false||dv===0||dv==="0"||dv==="N"||dv==="n" ? 0:1;
return;
}}
}
function looksLikePrecoItem(o){
if(!o||typeof o!=="object") return false;
return (
o.valor!=null||o.preco!=null||o.apartir!=null||o.price!=null ||
o.duracao!=null||o.tempo!=null||o.horas!=null||o.periodo!=null
);
}
function normalizePrecosList(data){
if(!data||typeof data!=="object") return [];
if(Array.isArray(data)){
if(!data.length) return [];
if(data.length > 1&&data.every(function (row){ return looksLikePrecoItem(row); })){
return data;
}
if(data.length===1&&data[0]&&typeof data[0]==="object"){
var fromWrapper=normalizePrecosList(data[0]);
if(fromWrapper.length) return fromWrapper;
}
if(looksLikePrecoItem(data[0])){
if(data.length===1||data.every(function (row){ return looksLikePrecoItem(row); })){
return data;
}}
for (var a=0; a < data.length; a++){
var innerArr=normalizePrecosList(data[a]);
if(innerArr.length) return innerArr;
}
return [];
}
if(looksLikePrecoItem(data)) return [data];
if(data.data&&typeof data.data==="object"){
var nestedData=normalizePrecosList(data.data);
if(nestedData.length) return nestedData;
}
var keys=["precos", "periodos", "tempos", "valores", "tarifas", "dados", "lista", "resultado"];
for (var i=0; i < keys.length; i++){
var block=data[keys[i]];
if(!block) continue;
var innerKey=normalizePrecosList(block);
if(innerKey.length) return innerKey;
}
if(data.suite&&typeof data.suite==="object"){
var innerSuite=normalizePrecosList(data.suite);
if(innerSuite.length) return innerSuite;
}
if(Array.isArray(data.suites)&&data.suites.length){
for (var s=0; s < data.suites.length; s++){
var innerSuites=normalizePrecosList(data.suites[s]);
if(innerSuites.length) return innerSuites;
}}
return [];
}
function imagesFromDetail(suite){
var out=[];
if(!suite||typeof suite!=="object") return out;
if(Array.isArray(suite.galeria)){
suite.galeria.forEach(function (g){
if(typeof g==="string"&&g) out.push({ image: g, thumb: g });
else if(g&&typeof g==="object"){
var u=g.image||g.imagem||g.url||g.src||"";
var th=g.thumbImage||g.thumb||u;
if(u) out.push({ image: u, thumb: th });
}});
if(out.length) return out;
}
if(suite.imagens){
var im=suite.imagens;
if(typeof im==="string"){
var t=im.trim();
if(t.indexOf("[")===0){
try {
var parsed=JSON.parse(t);
if(Array.isArray(parsed)){
parsed.forEach(function (item){
if(typeof item==="string"&&item) out.push({ image: item, thumb: item });
else if(item&&typeof item==="object"){
var u2=item.image||item.imagem||item.url||"";
var th2=item.thumbImage||item.thumb||u2;
if(u2) out.push({ image: u2, thumb: th2 });
}});
return out;
}} catch (e){  }}
if(t.indexOf(",")!==-1){
return t.split(",").map(function (x){ return x.trim(); }).filter(Boolean).map(function (u){ return { image: u, thumb: u };});
}
if(t) return [{ image: t, thumb: t }];
}
if(Array.isArray(im)){
im.forEach(function (item){
if(typeof item==="string"&&item) out.push({ image: item, thumb: item });
else if(item&&typeof item==="object"){
var u3=item.image||item.imagem||item.url||"";
var th3=item.thumbImage||item.thumb||u3;
if(u3) out.push({ image: u3, thumb: th3 });
}});
return out;
}}
return out;
}
function formatMoneyBR(n){
if(!isFinite(n)) return "R$ 0,00";
return "R$ " + n.toFixed(2).replace(".", ",");
}
function parseMoneyAny(v){
if(v==null||v==="") return NaN;
var s=String(v).trim().replace(/[^\d,.-]/g, "");
if(s.indexOf(",") >=0&&s.indexOf(".") >=0){
s=s.replace(/\./g, "").replace(",", ".");
}else if(s.indexOf(",") >=0){
s=s.replace(",", ".");
}
return parseFloat(s);
}
function toast(ctx, msg){
ctx.body.scrollTop=0;
ctx.body.appendChild(ctx.el("div", { class: "bdm-toast", text: msg }));
setTimeout(function (){
var t=ctx.body.querySelector(".bdm-toast");
if(t) t.remove();
}, 2200);
}
function labelFromPrecoItem(p, i){
if(typeof p!=="object"||!p) return "Opção " + (i + 1);
var label=p.label||p.texto||p.nome||p.descricao||"";
var dur=p.duracao!=null ? p.duracao:(p.tempo!=null ? p.tempo:(p.horas!=null ? p.horas:p.periodo));
if(!label&&dur!=null){
var ds=String(dur).trim();
label=ds;
}
if(!label) label="Opção " + (i + 1);
return normalizePeriodoReserva(label);
}
function renderGalleryFallback(ctx, slot, items){
var idx={ v: 0 };
var mainWrap=ctx.el("div", { class: "bdm-gallery-main" });
var mainImg=ctx.el("img", { class: "bdm-gallery-main-img", alt: "", loading: "lazy", referrerpolicy: "no-referrer" });
mainImg.src=items[0].image;
var prev=ctx.el("button", { class: "bdm-gallery-nav -prev", type: "button", "aria-label": "Anterior" });
prev.innerHTML='<i class="bdm-fa fa-thin fa-chevron-left" aria-hidden="true"></i>';
var next=ctx.el("button", { class: "bdm-gallery-nav -next", type: "button", "aria-label": "Próximo" });
next.innerHTML='<i class="bdm-fa fa-thin fa-chevron-right" aria-hidden="true"></i>';
function show(i){
if(i < 0) i=items.length - 1;
if(i >=items.length) i=0;
idx.v=i;
mainImg.src=items[i].image;
}
prev.addEventListener("click", function (e){ e.stopPropagation(); show(idx.v - 1); });
next.addEventListener("click", function (e){ e.stopPropagation(); show(idx.v + 1); });
mainWrap.appendChild(mainImg);
mainWrap.appendChild(prev);
mainWrap.appendChild(next);
slot.appendChild(mainWrap);
var thumbs=ctx.el("div", { class: "bdm-gallery-thumbs" });
items.forEach(function (it, i){
var b=ctx.el("button", { class: "bdm-gallery-thumb", type: "button" });
b.appendChild(ctx.el("img", { src: it.thumb, alt: "", loading: "lazy", referrerpolicy: "no-referrer" }));
b.addEventListener("click", function (e){ e.stopPropagation(); show(i); });
thumbs.appendChild(b);
});
slot.appendChild(thumbs);
}
function renderGallery(ctx, slot, items){
slot.innerHTML="";
if(!items||!items.length){
slot.appendChild(ctx.el("div", { class: "bdm-gallery-empty", text: "Sem imagens." }));
return;
}
var jq=window.jQuery;
if(!jq||typeof jq.fn.owlCarousel!=="function"||typeof jq.fn.lightGallery!=="function"){
renderGalleryFallback(ctx, slot, items);
return;
}
var uid="bdm-gallery-" + String(Date.now()) + "-" + String(Math.random()).slice(2, 9);
var $slot=jq(slot);
var $wrap=jq("<div/>", {
class: "bdm-gallery-wrap",
"data-wp-ignore": "",
"data-bdm-gallery": "1"
});
var $carousel=jq("<div/>", { class: "owl-carousel bdm-gallery-owl", id: uid });
items.forEach(function (it){
var src=it.image;
var th=it.thumb||src;
var $a=jq("<a/>", {
class: "bdm-lg-item",
href: src,
"data-src": src,
"data-exthumbimage": th
});
$a.append(jq("<img/>", { src: th, alt: "", loading: "lazy", referrerpolicy: "no-referrer", draggable: false }));
$carousel.append(jq("<div/>", { class: "item" }).append($a));
});
$wrap.append($carousel);
$slot.append($wrap);
$wrap.get(0).addEventListener("click",
function (ev){
var el=ev.target&&ev.target.closest&&ev.target.closest("a.bdm-lg-item");
if(el) ev.preventDefault();
},
true
);
$carousel.owlCarousel({
loop: false,
margin: 0,
nav: items.length > 1,
navElement: "button",
navText: [
'<span class="bdm-owl-nav-inner"><i class="bdm-fa fa-thin fa-chevron-left" aria-hidden="true"></i></span>',
'<span class="bdm-owl-nav-inner"><i class="bdm-fa fa-thin fa-chevron-right" aria-hidden="true"></i></span>'
],
dots: false,
items: 1
});
$carousel.find(".owl-nav button").attr("type", "button");
$carousel.lightGallery({
selector: "a.bdm-lg-item",
download: false,
thumbnail: true,
showThumbByDefault: true,
animateThumb: true,
currentPagerPosition: "middle",
thumbWidth: 96,
thumbHeight: "72px",
thumbMargin: 8,
thumbContHeight: 100,
hideBarsDelay: 3000,
fullScreen: true,
hideControlOnEnd: true
});
}
var DOW_CODE_TO_NUM={ dom: 0, seg: 1, ter: 2, qua: 3, qui: 4, sex: 5, sab: 6 };
function parseHmToMinutes(hm){
var s=String(hm==null ? "":hm).trim();
var m=s.match(/^(\d{1,2}):(\d{2})/);
if(!m) return 0;
return parseInt(m[1], 10) * 60 + parseInt(m[2], 10);
}
function dowNumFromIntervalCode(code){
var c=String(code==null ? "":code).trim().toLowerCase().substring(0, 3);
return Object.prototype.hasOwnProperty.call(DOW_CODE_TO_NUM, c) ? DOW_CODE_TO_NUM[c]:-1;
}
function isArrivalBlockedByIntervalo(selY, selM, selD, slotHm, intervalo){
if(!intervalo||typeof intervalo!=="object") return false;
var selDow=new Date(selY, selM, selD).getDay();
var selMin=parseHmToMinutes(slotHm);
var startDow=dowNumFromIntervalCode(intervalo.dia_semana_inicio);
var endDow=dowNumFromIntervalCode(intervalo.dia_semana_fim);
var startMin=parseHmToMinutes(intervalo.hora_inicio);
var endMin=parseHmToMinutes(intervalo.hora_fim);
if(startDow < 0||endDow < 0) return false;
if(startDow===endDow){
if(selDow!==startDow) return false;
if(startMin <=endMin){
return selMin >=startMin&&selMin < endMin;
}
return selMin >=startMin||selMin < endMin;
}
if(startDow < endDow){
if(selDow < startDow||selDow > endDow) return false;
if(selDow===startDow) return selMin >=startMin;
if(selDow===endDow) return selMin < endMin;
return true;
}
if(selDow===startDow) return selMin >=startMin;
if(selDow===endDow) return selMin < endMin;
if(selDow > startDow||selDow < endDow) return true;
return false;
}
function isArrivalSlotBlocked(state, slotHm, intervalos){
if(!intervalos||!intervalos.length) return false;
for (var i=0; i < intervalos.length; i++){
if(isArrivalBlockedByIntervalo(state.selY, state.selM, state.selD, slotHm, intervalos[i])){
return true;
}}
return false;
}
function normalizeIntervalosList(json){
if(!json) return [];
if(Array.isArray(json)) return json;
if(typeof json!=="object") return [];
if(json.erro) return [];
if(Array.isArray(json.data)) return json.data;
if(Array.isArray(json.intervalos)) return json.intervalos;
if(Array.isArray(json.intervalos_dia_semana)) return json.intervalos_dia_semana;
return [];
}
function buildArrivalSlots(state, intervalos){
var now=new Date();
var slots=[];
if(isRealToday(state.selY, state.selM, state.selD)){
var start=new Date(now.getTime());
start.setSeconds(0, 0);
start.setMinutes(0);
start.setHours(start.getHours() + 1);
if(start.getFullYear()!==state.selY ||
start.getMonth()!==state.selM ||
start.getDate()!==state.selD
){
return slots;
}
var h0=start.getHours();
for (var h=h0; h <=23; h++){
slots.push(pad2(h) + ":00");
}}else{
for (var h2=0; h2 <=23; h2++){
slots.push(pad2(h2) + ":00");
}}
if(!intervalos||!intervalos.length) return slots;
return slots.filter(function (hm){
return !isArrivalSlotBlocked(state, hm, intervalos);
});
}
function fillChegada(select, state, intervalos){
select.innerHTML="";
var horarios=buildArrivalSlots(state, intervalos);
var ph=document.createElement("option");
ph.value="";
ph.textContent="Selecionar";
select.appendChild(ph);
horarios.forEach(function (h, i){
var opt=document.createElement("option");
opt.value=String(i + 1);
opt.textContent=h;
opt._bdmH=h;
select.appendChild(opt);
});
select.value="";
}
function fillPermanencia(select, precosArr, fallbackValor){
select.innerHTML="";
var opts=[];
if(precosArr&&precosArr.length){
precosArr.forEach(function (p, i){
var label=labelFromPrecoItem(p, i);
var val=parseMoneyAny(typeof p==="object"&&p ? (p.valor||p.preco||p.apartir||p.price):"");
opts.push({ label: label, valor: isFinite(val) ? val:NaN, raw: p });
});
}else{
opts.push({ label: "02:00", valor: fallbackValor, raw: null });
}
opts.forEach(function (o, i){
var opt=document.createElement("option");
opt.value=String(i);
opt.textContent=o.label;
opt._bdm=o;
select.appendChild(opt);
});
}
function renderCalendar(ctx, slot, state, minDate, onChange){
var minY=minDate.getFullYear();
var minM=minDate.getMonth();
var minD=minDate.getDate();
function isCellDisabled(y, m, d){
var cell=new Date(y, m, d);
return cell < minDate;
}
function draw(){
slot.innerHTML="";
var y=state.calYear;
var m=state.calMonth;
var first=new Date(y, m, 1);
var startWeek=first.getDay();
var daysInMonth=new Date(y, m + 1, 0).getDate();
var head=ctx.el("div", { class: "bdm-cal-head" });
var prevM=ctx.el("button", { class: "bdm-cal-nav", type: "button", "aria-label": "Mês anterior" });
prevM.innerHTML='<i class="bdm-fa fa-thin fa-chevron-left" aria-hidden="true"></i>';
var nextM=ctx.el("button", { class: "bdm-cal-nav", type: "button", "aria-label": "Próximo mês" });
nextM.innerHTML='<i class="bdm-fa fa-thin fa-chevron-right" aria-hidden="true"></i>';
var title=ctx.el("div", { class: "bdm-cal-title" }, [MESES[m] + " de " + y]);
var firstOfCal=new Date(y, m, 1);
var firstOfMin=new Date(minY, minM, 1);
var atMinMonth=firstOfCal.getTime() <=firstOfMin.getTime();
if(atMinMonth){
prevM.disabled=true;
prevM.classList.add("-disabled");
}
prevM.addEventListener("click", function (){
if(atMinMonth) return;
if(m===0){ m=11; y--; }else{ m--; }
state.calYear=y;
state.calMonth=m;
draw();
});
nextM.addEventListener("click", function (){
if(m===11){ m=0; y++; }else{ m++; }
state.calYear=y;
state.calMonth=m;
draw();
});
head.appendChild(prevM);
head.appendChild(title);
head.appendChild(nextM);
slot.appendChild(head);
var grid=ctx.el("div", { class: "bdm-cal-grid" });
var dow=["D", "S", "T", "Q", "Q", "S", "S"];
for (var i=0; i < 7; i++) grid.appendChild(ctx.el("div", { class: "bdm-cal-dow", text: dow[i] }));
for (var p=0; p < startWeek; p++) grid.appendChild(ctx.el("div", { class: "bdm-cal-cell -empty" }));
for (var d=1; d <=daysInMonth; d++){
(function (day){
var dis=isCellDisabled(y, m, day);
var cell=ctx.el("button", { class: "bdm-cal-cell", type: "button", text: String(day) });
if(dis){
cell.classList.add("-disabled");
cell.disabled=true;
}else if(state.selY===y&&state.selM===m&&state.selD===day){
cell.classList.add("-selected");
}
if(!dis){
cell.addEventListener("click", function (){
state.selY=y;
state.selM=m;
state.selD=day;
draw();
if(onChange) onChange();
});
}
grid.appendChild(cell);
})(d);
}
slot.appendChild(grid);
}
draw();
}
function updateResumo(ctx, node, state, selPerm, selChegada){
var dataEl=node.querySelector('[data-bind-resumo="data"]');
var chegadaEl=node.querySelector('[data-bind-resumo="chegada"]');
var periodoEl=node.querySelector('[data-bind-resumo="periodo"]');
var totalEl=node.querySelector('[data-slot="total"]');
if(dataEl) dataEl.textContent=pad2(state.selD) + "-" + pad2(state.selM + 1) + "-" + state.selY;
if(chegadaEl) chegadaEl.textContent=selChegada||"--:--";
if(periodoEl) periodoEl.textContent=selPerm ? selPerm.label:"--";
if(totalEl&&selPerm&&isFinite(selPerm.valor)){
totalEl.textContent=formatMoneyBR(selPerm.valor);
}else if(totalEl&&isFinite(state.fallbackValor)){
totalEl.textContent=formatMoneyBR(state.fallbackValor);
}}
function setReservarEnabled(btn, on){
if(!btn) return;
btn.disabled = !on;
if(on) btn.classList.remove("-disabled");
else btn.classList.add("-disabled");
}
function lockBookingSelects(selPerm, selChe){
if(!selPerm||!selChe) return;
selPerm.disabled=true;
selChe.disabled=true;
selPerm.innerHTML="";
var o1=document.createElement("option");
o1.value="";
o1.textContent="Indisponível";
selPerm.appendChild(o1);
selChe.innerHTML="";
var o2=document.createElement("option");
o2.value="";
o2.textContent="Indisponível";
selChe.appendChild(o2);
}
function previewForLog(v, max){
max=max||500;
var s=String(v==null ? "":v);
if(s.length > max) return s.slice(0, max) + "… (+" + (s.length - max) + " caracteres)";
return s;
}
function shallowTermoFields(obj){
if(!obj||typeof obj!=="object") return {};
var out={};
Object.keys(obj).forEach(function (k){
if(!/termo/i.test(k)) return;
var v=obj[k];
out[k]=typeof v==="string" ? previewForLog(v, 600):v;
});
return out;
}
function logTermosDebug(merged, base, detJson, context){
var model=window.BDMChatMotelModel||{};
var motel=model&&model.motel&&typeof model.motel==="object" ? model.motel:null;
var payload={
onde: context||"",
merged: shallowTermoFields(merged),
base: shallowTermoFields(base),
motel: motel ? shallowTermoFields(motel):{},
model: shallowTermoFields(model)
};
if(detJson&&typeof detJson==="object"){
payload.detalhes_raiz=shallowTermoFields(detJson);
if(detJson.data&&typeof detJson.data==="object") payload.detalhes_data=shallowTermoFields(detJson.data);
if(detJson.suite&&typeof detJson.suite==="object") payload.detalhes_suite=shallowTermoFields(detJson.suite);
if(detJson.detalhes&&typeof detJson.detalhes==="object") payload.detalhes_nested=shallowTermoFields(detJson.detalhes);
}
console.log("[BDM chat termos] inspeção", payload);
var urls=[];
function tryUrl(s){
var t=String(s==null ? "":s).trim();
if(/^https?:\/\//i.test(t)&&urls.indexOf(t) < 0) urls.push(t);
}
[merged, base, motel, model, detJson, detJson&&detJson.data, detJson&&detJson.suite, detJson&&detJson.detalhes].forEach(function (o){
if(!o||typeof o!=="object") return;
Object.keys(o).forEach(function (k){
if(!/termo/i.test(k)) return;
tryUrl(o[k]);
});
});
urls.forEach(function (url){
fetch(url, { credentials: "omit", mode: "cors" })
.then(function (r){
return r.text().then(function (t){
console.log("[BDM chat termos] resposta da URL", {
url: url,
status: r.status,
ok: r.ok,
contentType: r.headers.get("content-type"),
corpoPreview: previewForLog(t, 900)
});
});
})
.catch(function (err){
console.log("[BDM chat termos] erro ao buscar URL (CORS/rede?)", url, err);
});
});
}
function sanitizeTermosHtml(rawHtml){
var source=String(rawHtml==null ? "":rawHtml).trim();
if(!source) return "";
var root=document.createElement("div");
root.innerHTML=source;
var blocked=root.querySelectorAll("script,style,iframe,object,embed,link,meta,base,form,input,textarea,select,button");
for (var i=0; i < blocked.length; i++){
var n=blocked[i];
if(n&&n.parentNode) n.parentNode.removeChild(n);
}
var all=root.querySelectorAll("*");
for (var j=0; j < all.length; j++){
var el=all[j];
for (var k=el.attributes.length - 1; k >=0; k--){
var attr=el.attributes[k];
var name=String(attr.name||"").toLowerCase();
var value=String(attr.value||"");
if(name.indexOf("on")===0){
el.removeAttribute(attr.name);
continue;
}
if((name==="href"||name==="src"||name==="xlink:href")&&/^\s*javascript:/i.test(value)){
el.removeAttribute(attr.name);
}}
}
return root.innerHTML.trim();
}
function readSuiteTermsHtml(merged, base){
var model=window.BDMChatMotelModel||{};
var motel=model&&model.motel&&typeof model.motel==="object" ? model.motel:null;
var sources=[merged, base, motel, model];
for (var i=0; i < sources.length; i++){
var src=sources[i];
if(!src||typeof src!=="object") continue;
if(Object.prototype.hasOwnProperty.call(src, "termos")){
var rawT=src.termos;
var sanitized=sanitizeTermosHtml(rawT);
if(sanitized) return sanitized;
if(rawT!=null&&String(rawT).trim()!==""){
console.log("[BDM chat termos] campo `termos` existe mas ficou vazio após sanitize (não é HTML útil?)", {
origem: i,
tipo: typeof rawT,
preview: previewForLog(rawT, 300)
});
}}
}
return "";
}
function extractTermosFromRestJson(json){
if(!json) return "";
if(Array.isArray(json)){
for (var a=0; a < json.length; a++){
var row=json[a];
if(row&&typeof row==="object"&&typeof row.termos==="string"&&row.termos.trim()!==""){
return row.termos;
}}
return "";
}
if(typeof json!=="object") return "";
if(json.erro) return "";
var keys=["termos", "texto", "conteudo", "html", "content", "body"];
var i;
for (i=0; i < keys.length; i++){
var k=keys[i];
if(Object.prototype.hasOwnProperty.call(json, k)){
var v=json[k];
if(typeof v==="string"&&v.trim()!=="") return v;
}}
var data=json.data;
if(data&&typeof data==="object"){
for (i=0; i < keys.length; i++){
var k2=keys[i];
if(Object.prototype.hasOwnProperty.call(data, k2)){
var v2=data[k2];
if(typeof v2==="string"&&v2.trim()!=="") return v2;
}}
}
if(typeof data==="string"&&data.trim()!=="") return data;
return "";
}
function fetchPainelTermosJquery(){
var bdm=window.BuscaDeMoteisChat||{};
var url=(bdm.panelTermosAbsUrl||"").trim();
if(typeof window.jQuery==="undefined"){
return Promise.resolve(null);
}
var $=window.jQuery;
return new Promise(function (resolve){
$.ajax({
url: url,
type: "POST",
dataType: "text",
timeout: 30000
})
.done(function (text){
var s=typeof text==="string" ? text:String(text==null ? "":text);
var parsed=null;
try {
parsed=s ? JSON.parse(s):null;
} catch (e){
parsed=null;
}
if(parsed&&typeof parsed==="object"){
resolve(parsed);
return;
}
if(s.trim()!==""){
resolve({ termos: s });
return;
}
resolve(null);
})
.fail(function (xhr, status, err){
console.log("[BDM chat termos] $.ajax POST ao painel falhou:", status, err, xhr&&xhr.status);
resolve(null);
});
});
}
function resolveTermsModalHost(hostNode){
if(!hostNode||!hostNode.closest) return hostNode;
var openPanel=hostNode.closest(".bdm-chat-panel.is-open");
if(openPanel) return openPanel;
var panel=hostNode.closest(".bdm-chat-panel");
if(panel) return panel;
var root=hostNode.closest("#bdm-chat-container");
return root||hostNode;
}
function closeTermsModal(hostNode){
var rootHost=resolveTermsModalHost(hostNode);
if(!rootHost||!rootHost.querySelector) return;
var modal=rootHost.querySelector(".bdm-terms-modal-backdrop");
if(modal&&modal.parentNode){
modal.parentNode.removeChild(modal);
}}
function openTermsModal(hostNode, termsHtml, onAccept){
if(!hostNode) return;
var rootHost=resolveTermsModalHost(hostNode);
if(!rootHost) return;
closeTermsModal(rootHost);
var backdrop=document.createElement("div");
backdrop.className="bdm-terms-modal-backdrop";
var panel=document.createElement("div");
panel.className="bdm-terms-modal";
var head=document.createElement("div");
head.className="bdm-terms-modal-head";
var title=document.createElement("h3");
title.className="bdm-terms-modal-title";
title.textContent="Termos de uso";
var acceptBtn=document.createElement("button");
acceptBtn.type="button";
acceptBtn.className="bdm-terms-modal-accept";
acceptBtn.textContent="Aceito";
var body=document.createElement("div");
body.className="bdm-terms-modal-body";
body.innerHTML=termsHtml||"<p>Termos indisponíveis no momento.</p>";
head.appendChild(title);
head.appendChild(acceptBtn);
panel.appendChild(head);
panel.appendChild(body);
backdrop.appendChild(panel);
rootHost.appendChild(backdrop);
acceptBtn.addEventListener("click", function (e){
e.preventDefault();
e.stopPropagation();
console.log("[BDM chat termos] botão Aceito no modal", {
termsHtmlLength: String(termsHtml||"").length,
preview: previewForLog(termsHtml, 200)
});
if(typeof onAccept==="function") onAccept();
closeTermsModal(rootHost);
});
}
function bindBooking(ctx, node, state, precosPayload, precosArr, minDate, merged, base, detJson, intervalosFechamento){
state.intervalosFechamento=intervalosFechamento&&intervalosFechamento.length ? intervalosFechamento:[];
var selPerm=node.querySelector('[data-booking="permanencia"]');
var selChe=node.querySelector('[data-booking="chegada"]');
var cupomInp=node.querySelector('[data-booking="cupom"]');
var termos=node.querySelector('[data-booking="termos"]');
var applyBtn=node.querySelector(".bdm-booking-apply");
var termLink=node.querySelector(".bdm-booking-terms-link");
var resBtn=node.querySelector("[data-suite-reservar]");
var termsHtml=readSuiteTermsHtml(merged, base);
logTermosDebug(merged, base, detJson, "ao montar reserva (suite-detalhes)");
function openTermosModalComFallback(hostNode, onAcceptCb){
var local=readSuiteTermsHtml(merged, base);
if(local){
openTermsModal(hostNode, local, onAcceptCb);
return;
}
fetchPainelTermosJquery().then(function (json){
var raw=extractTermosFromRestJson(json);
if(!raw||!String(raw).trim()){
logTermosDebug(merged, base, detJson, "termos — POST ao painel sem HTML (CORS bloqueou? token?)");
toast(ctx, "Termos de uso indisponíveis no momento.");
return;
}
merged.termos=raw;
var safe=sanitizeTermosHtml(raw);
if(!safe){
toast(ctx, "Termos de uso indisponíveis no momento.");
return;
}
openTermsModal(hostNode, safe, onAcceptCb);
});
}
if(!termsHtml){
console.log("[BDM chat termos] sem HTML ao montar — link/checkbox fazem POST (jQuery) ao painel se precisar.");
}
var fb=state.fallbackValor;
var lastPrecosArr=precosArr&&precosArr.length ? precosArr.slice():[];
function isDateSelectionBlocked(){
return (
isDateBeforeMin(state.selY, state.selM, state.selD, minDate) ||
(isDisp0Combined(merged, base)&&isRealToday(state.selY, state.selM, state.selD))
);
}
function isPrecosEmptyForDay(){
return !lastPrecosArr.length;
}
function currentPermOption(){
var opt=selPerm.options[selPerm.selectedIndex];
return opt&&opt._bdm ? opt._bdm:{ label: "02:00", valor: fb, raw: null };}
function currentChegada(){
var opt=selChe.options[selChe.selectedIndex];
if(!opt||opt.value==="") return "";
return opt._bdmH||opt.textContent||"";
}
function getSelection(){
var p=currentPermOption();
var c=currentChegada();
var v=p&&isFinite(p.valor) ? p.valor:fb;
return {
blocked: isSelectionBlocked(),
periodoLabel: p&&p.label ? p.label:"02:00",
chegada: c||"",
valor: isFinite(v) ? v:0
};}
function isSelectionBlocked(){
return isDateSelectionBlocked()||isPrecosEmptyForDay();
}
function refresh(){
var blocked=isSelectionBlocked();
if(blocked){
updateResumo(ctx, node, state, null, blocked&&isPrecosEmptyForDay()&&!isDateSelectionBlocked() ? "Indisponível":"--");
return;
}
var p=currentPermOption();
var c=currentChegada();
var v=p.valor;
if(!isFinite(v)) v=fb;
updateResumo(ctx, node, state, { label: p.label, valor: v }, c);
}
function syncTermsButton(){
var blocked=isSelectionBlocked();
setReservarEnabled(resBtn, !!(termos&&termos.checked&&!blocked));
}
function applySelectsState(arr){
lastPrecosArr=arr&&arr.length ? arr.slice():[];
var dateBlocked=isDateSelectionBlocked();
var precosEmpty = !lastPrecosArr.length;
state.precosEmptyForDay = !dateBlocked&&precosEmpty;
if(dateBlocked||precosEmpty){
lockBookingSelects(selPerm, selChe);
}else{
selPerm.disabled=false;
selChe.disabled=false;
fillPermanencia(selPerm, lastPrecosArr, fb);
fillChegada(selChe, state, state.intervalosFechamento);
}
refresh();
syncTermsButton();
}
applySelectsState(lastPrecosArr);
selPerm.addEventListener("change", refresh);
selChe.addEventListener("change", refresh);
if(termos){
termos.addEventListener("change", function (){
if(!termos.checked){
syncTermsButton();
return;
}
termos.checked=false;
syncTermsButton();
openTermosModalComFallback(node, function (){
termos.checked=true;
syncTermsButton();
});
});
}
if(applyBtn){
applyBtn.addEventListener("click", function (e){
e.preventDefault();
e.stopPropagation();
var c=cupomInp ? cupomInp.value.trim():"";
if(!c){
toast(ctx, "Informe um cupom.");
return;
}
toast(ctx, "Cupom: em breve.");
});
}
if(termLink){
termLink.addEventListener("click", function (e){
e.preventDefault();
e.stopPropagation();
openTermosModalComFallback(node, function (){
if(termos) termos.checked=true;
syncTermsButton();
});
});
}
return {
refresh: refresh,
termos: termos,
getSelection: getSelection,
refillChegada: function (){
applySelectsState(lastPrecosArr);
},
refillPermanencia: function (arr){
lastPrecosArr=arr&&arr.length ? arr.slice():[];
applySelectsState(lastPrecosArr);
},
syncTermsButton: syncTermsButton
};}
window.BDMChatPages.suiteDetalhes=function (ctx){
ctx.state.currentView="suiteDetalhes";
var base=ctx.state.selectedSuite||{};
var idSuite=parseInt(
String(base.id_suite!=null&&base.id_suite!=="" ? base.id_suite:base.id||""),
10
);
if(!idSuite){
ctx.body.textContent="Suíte inválida.";
return;
}
var detUrl=(ctx.urls.suiteDetalhes||"").trim();
var preUrl=(ctx.urls.suitePrecos||"").trim();
if(!detUrl||!preUrl){
ctx.body.textContent="Rotas de detalhes não configuradas.";
return;
}
var basePayload={
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" }};
var payloadDet=Object.assign({}, basePayload, { body: JSON.stringify({ id_suite: idSuite }) });
function fetchPrecos(state){
return fetch(preUrl, Object.assign({}, basePayload, {
body: JSON.stringify({ id_suite: idSuite, selectDate: selectDateForPrecosApi(state) })
})).then(function (r){ return r.json(); });
}
function fetchTermos(){
return fetchPainelTermosJquery();
}
function fetchIntervalosFechamento(){
var url=(ctx.urls.intervalosFechamento||"").trim();
if(!url) return Promise.resolve([]);
return fetch(url, Object.assign({}, basePayload, { body: JSON.stringify({}) }))
.then(function (r){ return r.json(); })
.then(function (j){ return normalizeIntervalosList(j); })
.catch(function (){ return []; });
}
var initialMinDate=getInitialPrecosMinDate(base);
var initialPrecosState={
selY: initialMinDate.getFullYear(),
selM: initialMinDate.getMonth(),
selD: initialMinDate.getDate()
};
Promise.all([
ctx.loadTemplate("suite-detalhes"),
fetch(detUrl, payloadDet).then(function (r){ return r.json(); }),
fetchPrecos(initialPrecosState),
fetchTermos(),
fetchIntervalosFechamento()
])
.then(function (arr){
var html=arr[0];
var detJson=unwrapDetalhesJson(arr[1]);
var preJson=normalizePrecosApiResponse(arr[2]);
var termJson=arr[3];
var intervalosJson=arr[4];
if(detJson&&detJson.erro){
ctx.body.textContent=String(detJson.erro);
return;
}
var suiteApi=normalizeDetalhesPayload(detJson);
var merged=buildMergedSuite(base, suiteApi, detJson);
var minDate=getCalendarMinDateForSuite(merged, base);
var precosMismatch =
!sameCalendarDay(minDate, initialMinDate)||(preJson&&preJson.erro&&!isPrecosUnavailableErroMessage(preJson.erro));
if(precosMismatch){
return fetchPrecos({
selY: minDate.getFullYear(),
selM: minDate.getMonth(),
selD: minDate.getDate()
}).then(function (pre2){
return {
html: html,
detJson: detJson,
preJson: normalizePrecosApiResponse(pre2),
merged: merged,
suiteApi: suiteApi,
minDate: minDate,
termJson: termJson,
intervalosFechamento: intervalosJson
};});
}
return {
html: html,
detJson: detJson,
preJson: preJson,
merged: merged,
suiteApi: suiteApi,
minDate: minDate,
termJson: termJson,
intervalosFechamento: intervalosJson
};})
.then(function (pack){
if(!pack) return;
var html=pack.html;
var preJson=pack.preJson;
var merged=pack.merged;
var minDate=pack.minDate;
if(preJson&&preJson.erro){
ctx.body.textContent=String(preJson.erro);
return;
}
var termosPainel=extractTermosFromRestJson(pack.termJson);
if(termosPainel){
merged.termos=termosPainel;
}
var texto=ctx.htmlToText(merged.texto||"");
var imgItems=imagesFromDetail(merged);
if(!imgItems.length){
var one=ctx.firstImageFromSuite(merged);
if(one) imgItems=[{ image: one, thumb: one }];
}
var precosArr=normalizePrecosList(preJson);
var fallbackValor=parseMoneyAny(merged.apartir||merged.preco||merged.valor);
if(!isFinite(fallbackValor)) fallbackValor=0;
var intervalosFechamento=normalizeIntervalosList(pack.intervalosFechamento);
var state={
calYear: minDate.getFullYear(),
calMonth: minDate.getMonth(),
selY: minDate.getFullYear(),
selM: minDate.getMonth(),
selD: minDate.getDate(),
fallbackValor: fallbackValor,
intervalosFechamento: intervalosFechamento,
precosEmptyForDay: isPrecosListEmpty(preJson)
};
var node=ctx.htmlToNode(html);
var gSlot=node.querySelector('[data-slot="gallery"]');
var descSlot=node.querySelector('[data-slot="descricao"]');
var calSlot=node.querySelector('[data-slot="calendar"]');
var bookingRef={ booking: null };
if(gSlot) renderGallery(ctx, gSlot, imgItems);
if(descSlot) descSlot.textContent=texto||"—";
function onDayChanged(){
syncBookingUnavailableUi(node, merged, base, state, minDate, bookingRef.booking);
fetchPrecos(state).then(function (pj){
pj=normalizePrecosApiResponse(pj);
if(pj&&pj.erro){
ctx.body.textContent=String(pj.erro);
return;
}
var arr=normalizePrecosList(pj);
state.precosEmptyForDay=isPrecosListEmpty(pj);
if(bookingRef.booking&&bookingRef.booking.refillPermanencia){
bookingRef.booking.refillPermanencia(arr);
}
syncBookingUnavailableUi(node, merged, base, state, minDate, bookingRef.booking);
}).catch(function (){
state.precosEmptyForDay=true;
if(bookingRef.booking&&bookingRef.booking.refillPermanencia){
bookingRef.booking.refillPermanencia([]);
}
syncBookingUnavailableUi(node, merged, base, state, minDate, bookingRef.booking);
});
}
if(calSlot){
renderCalendar(ctx, calSlot, state, minDate, onDayChanged);
}
var booking=bindBooking(ctx, node, state, preJson, precosArr, minDate, merged, base, pack.detJson, intervalosFechamento);
bookingRef.booking=booking;
syncBookingUnavailableUi(node, merged, base, state, minDate, booking);
ctx.wireActions(node);
var resBtn=node.querySelector("[data-suite-reservar]");
if(resBtn){
resBtn.addEventListener("click", function (e){
e.stopPropagation();
if(isDisp0Combined(merged, base)&&isRealToday(state.selY, state.selM, state.selD)){
toast(ctx, "Esta suíte não está disponível para hoje. Escolha amanhã ou outra data.");
return;
}
if(isDateBeforeMin(state.selY, state.selM, state.selD, minDate)){
toast(ctx, "Esta suíte não está disponível na data selecionada. Escolha outro dia.");
return;
}
if(state.precosEmptyForDay){
toast(ctx, "Indisponível para o dia selecionado.");
return;
}
if(booking.termos&&!booking.termos.checked){
toast(ctx, "Aceite os termos de uso para continuar.");
return;
}
var selection=booking.getSelection ? booking.getSelection():null;
if(!selection||!selection.chegada){
toast(ctx, "Selecione o horário de chegada.");
return;
}
var pages=window.BDMChatPages||{};
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
if(!uid){
toast(ctx, "Faça login novamente para concluir a reserva.");
return;
}
var user=pages.getUserRecord ? pages.getUserRecord():null;
var userPayload=user&&user.payload&&typeof user.payload==="object" ? user.payload:{};
var model=window.BDMChatMotelModel||{};
var motelNode=model&&model.motel&&typeof model.motel==="object" ? model.motel:model;
var motelId=parseInt(String(
(merged&&(merged.id_motel||merged.motel_id)) ||
(base&&(base.id_motel||base.motel_id)) ||
(motelNode&&motelNode.id) ||
""
), 10);
var reservaPayload={
motel: motelId > 0 ? motelId:undefined,
id_suite: idSuite,
id_usuario: uid,
data_reserva: buildReservaDateTimeFromState(state),
chegada_reserva: String(selection.chegada),
periodo_reserva: normalizePeriodoReserva(selection.periodoLabel),
valor_reserva: String((isFinite(selection.valor) ? selection.valor:0).toFixed(2)),
nome: String((user&&user.nome)||userPayload.nome||"").trim(),
email: String((user&&user.email)||userPayload.email||"").trim(),
telefone: String((user&&user.telefone)||userPayload.telefone||"").trim(),
cpf: String((user&&user.cpf)||userPayload.cpf||"").trim()
};
window.BDMChatPages.reservarSuite(ctx, reservaPayload, resBtn);
});
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
})
.catch(function (){
ctx.body.textContent="Falha ao carregar detalhes da suíte.";
});
};
function extractReservaCode(api){
if(Array.isArray(api)&&api.length&&api[0]&&typeof api[0]==="object"){
return String(api[0].codigo_reserva||api[0].codigo||api[0].codigoPedido||"").trim();
}
if(!api||typeof api!=="object") return "";
if(Array.isArray(api.data)&&api.data.length&&api.data[0]&&typeof api.data[0]==="object"){
return String(api.data[0].codigo_reserva||api.data[0].codigo||api.data[0].codigoPedido||"").trim();
}
return String(api.codigo_reserva||api.codigo||api.codigoPedido||"").trim();
}
function rememberPendingReservaApproval(data){
try {
localStorage.setItem(LS_PENDING_RESERVA, JSON.stringify(data||{}));
} catch (e){}}
function clearPendingReservaApproval(){
try {
localStorage.removeItem(LS_PENDING_RESERVA);
} catch (e){}}
function rememberPendingPayment(data){
try {
localStorage.setItem(LS_PENDING_PAYMENT, JSON.stringify(data||{}));
} catch (e){}}
function clearPendingPayment(){
try {
localStorage.removeItem(LS_PENDING_PAYMENT);
} catch (e){}}
function clearReservaCheckTimer(ctx){
if(!ctx||!ctx.state) return;
if(ctx.state.reservaCheckTimer){
clearTimeout(ctx.state.reservaCheckTimer);
ctx.state.reservaCheckTimer=null;
}}
function extractCheckResult(api){
if(!api||typeof api!=="object") return "";
return String(api.result||api.status||"").trim().toUpperCase();
}
function clearPagamentoCheckTimer(ctx){
if(!ctx||!ctx.state) return;
if(ctx.state.pagamentoCheckTimer){
clearTimeout(ctx.state.pagamentoCheckTimer);
ctx.state.pagamentoCheckTimer=null;
}}
function extractPreferenceId(api){
if(Array.isArray(api)&&api.length&&api[0]&&typeof api[0]==="object"){
return String(api[0].id||api[0].preference_id||"").trim();
}
if(!api||typeof api!=="object") return "";
if(Array.isArray(api.data)&&api.data.length&&api.data[0]&&typeof api.data[0]==="object"){
return String(api.data[0].id||api.data[0].preference_id||"").trim();
}
return String(api.id||api.preference_id||"").trim();
}
function extractPixPayload(api){
if(!api||typeof api!=="object") return null;
var poi=api.point_of_interaction&&typeof api.point_of_interaction==="object"
? api.point_of_interaction
: {};
var tx=poi.transaction_data&&typeof poi.transaction_data==="object"
? poi.transaction_data
: {};
var code=String(tx.qr_code||"").trim();
var base64=String(tx.qr_code_base64||"").trim();
if(!code&&!base64) return null;
return { code: code, base64: base64 };}
function formatDateDisplay(raw){
var s=String(raw==null ? "":raw).trim();
var m=s.match(/^(\d{4})-(\d{2})-(\d{2})/);
if(m) return m[3] + "-" + m[2] + "-" + m[1];
return s;
}
function formatMoneyDisplay(raw){
var n=parseFloat(String(raw==null ? "":raw).replace(",", "."));
if(!isFinite(n)) return "R$ 0,00";
return "R$ " + n.toFixed(2).replace(".", ",");
}
window.BDMChatPages.reservarSuite=function (ctx, payload, btn){
if(ctx&&ctx.state&&ctx.state.reservaSubmitInFlight){
toast(ctx, "Aguarde, estamos processando sua reserva.");
return;
}
clearReservaCheckTimer(ctx);
clearPagamentoCheckTimer(ctx);
clearPendingPayment();
var url=(ctx.urls.reservaSave||"").trim();
if(!url){
toast(ctx, "Rota de reserva não configurada.");
return;
}
if(!payload||typeof payload!=="object"){
toast(ctx, "Dados da reserva inválidos.");
return;
}
if(ctx&&ctx.state) ctx.state.reservaSubmitInFlight=true;
if(btn) btn.disabled=true;
fetch(url, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
})
.then(function (r){
return r.json().then(function (j){
return { status: r.status, json: j };});
})
.then(function (res){
if(ctx&&ctx.state) ctx.state.reservaSubmitInFlight=false;
if(btn) btn.disabled=false;
var data=res&&res.json ? res.json:{};
if(res.status < 200||res.status >=300||(data&&data.result==="error")){
toast(ctx, String((data&&(data.erro||data.message))||"Não foi possível concluir a reserva."));
return;
}
ctx.state.lastReservaResult={
code: extractReservaCode(data),
payload: payload,
response: data
};
if(ctx.state.lastReservaResult.code){
rememberPendingReservaApproval({
codigo_reserva: ctx.state.lastReservaResult.code,
id_usuario: payload.id_usuario||0,
payload: payload,
date_create: Date.now(),
status: "Pendente"
});
}
ctx.navigate("reservaAguarde");
})
.catch(function (){
if(ctx&&ctx.state) ctx.state.reservaSubmitInFlight=false;
if(btn) btn.disabled=false;
toast(ctx, "Falha ao enviar a reserva.");
});
};
window.BDMChatPages.reservaAguarde=function (ctx){
ctx.state.currentView="reservaAguarde";
clearReservaCheckTimer(ctx);
clearPagamentoCheckTimer(ctx);
var result=ctx.state.lastReservaResult||{};
var code=result&&result.code ? String(result.code):"";
var checkUrl=(ctx.urls.reservaCheck||"").trim();
var bathtub=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.assetBathtub)||"";
ctx.loadTemplate("reserva-aguarde")
.then(function (html){
var node=ctx.htmlToNode(html);
var codeEl=node.querySelector('[data-slot="reserva-codigo"]');
if(codeEl) codeEl.textContent=code||"—";
var img=node.querySelector('[data-slot="reserva-aguarde-img"]');
if(img&&bathtub) img.setAttribute("src", bathtub);
ctx.body.innerHTML="";
ctx.body.appendChild(node);
function runCheck(){
if(ctx.state.currentView!=="reservaAguarde") return;
var pages=window.BDMChatPages||{};
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
if(!checkUrl||!uid||!code) return;
fetch(checkUrl, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid, codigo_reserva: code })
})
.then(function (r){
return r.json().then(function (j){ return { status: r.status, json: j };});
})
.then(function (res){
if(ctx.state.currentView!=="reservaAguarde") return;
var data=res&&res.json ? res.json:{};
if(res.status < 200||res.status >=300||data.erro){
ctx.state.reservaCheckTimer=setTimeout(runCheck, 5000);
return;
}
var resultStatus=extractCheckResult(data);
if(resultStatus==="WAIT"||resultStatus===""){
ctx.state.reservaCheckTimer=setTimeout(runCheck, 5000);
return;
}
if(resultStatus==="REFUSED"){
clearReservaCheckTimer(ctx);
clearPendingReservaApproval();
clearPendingPayment();
ctx.navigate("reservaRecusada");
return;
}
if(resultStatus==="OK"){
clearReservaCheckTimer(ctx);
clearPendingReservaApproval();
var payload=result&&result.payload&&typeof result.payload==="object" ? result.payload:{};
ctx.state.lastReservaPaymentData={
codigo_reserva: code,
id_usuario: payload.id_usuario||"",
id_suite: payload.id_suite||"",
motel: payload.motel||"",
data_reserva: payload.data_reserva||"",
chegada_reserva: payload.chegada_reserva||"",
periodo_reserva: payload.periodo_reserva||"",
valor_reserva: payload.valor_reserva||"",
nome: payload.nome||"",
email: payload.email||"",
telefone: payload.telefone||"",
cpf: payload.cpf||""
};
rememberPendingPayment({
codigo_reserva: code,
id_usuario: payload.id_usuario||0,
payload: ctx.state.lastReservaPaymentData,
status: "PENDENTE_PAGAMENTO",
date_create: Date.now()
});
ctx.navigate("reservaPagamento");
return;
}
ctx.state.reservaCheckTimer=setTimeout(runCheck, 5000);
})
.catch(function (){
if(ctx.state.currentView!=="reservaAguarde") return;
ctx.state.reservaCheckTimer=setTimeout(runCheck, 5000);
});
}
ctx.state.reservaCheckTimer=setTimeout(runCheck, 5000);
})
.catch(function (){
ctx.body.textContent="Falha ao carregar tela de confirmação.";
});
};
window.BDMChatPages.reservaRecusada=function (ctx){
ctx.state.currentView="reservaRecusada";
clearReservaCheckTimer(ctx);
clearPagamentoCheckTimer(ctx);
clearPendingReservaApproval();
clearPendingPayment();
var sad=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.assetSad)||"";
ctx.loadTemplate("reserva-recusada")
.then(function (html){
var node=ctx.htmlToNode(html);
var img=node.querySelector('[data-slot="reserva-recusada-img"]');
if(img&&sad) img.setAttribute("src", sad);
var btn=node.querySelector('[data-action="backHome"]');
if(btn){
btn.addEventListener("click", function (e){
e.preventDefault();
ctx.navigate("home");
});
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
})
.catch(function (){
ctx.body.textContent="Falha ao carregar status da reserva.";
});
};
window.BDMChatPages.reservaPagamento=function (ctx){
ctx.state.currentView="reservaPagamento";
clearReservaCheckTimer(ctx);
clearPagamentoCheckTimer(ctx);
clearPendingReservaApproval();
var data=ctx.state.lastReservaPaymentData||{};
var publicKey=(window.BuscaDeMoteisChat&&window.BuscaDeMoteisChat.mpPublicKey)||"";
var preferUrl=(ctx.urls.pagamentoPreference||"").trim();
var submitUrl=(ctx.urls.pagamentoSubmit||"").trim();
var checkUrl=(ctx.urls.pagamentoCheck||"").trim();
ctx.loadTemplate("reserva-pagamento")
.then(function (html){
var node=ctx.htmlToNode(html);
var code=node.querySelector('[data-slot="pagamento-codigo"]');
var dt=node.querySelector('[data-slot="pagamento-data"]');
var chegada=node.querySelector('[data-slot="pagamento-chegada"]');
var periodo=node.querySelector('[data-slot="pagamento-periodo"]');
var valor=node.querySelector('[data-slot="pagamento-valor"]');
if(code) code.textContent=String(data.codigo_reserva||"—");
if(dt) dt.textContent=formatDateDisplay(data.data_reserva||"");
if(chegada) chegada.textContent=String(data.chegada_reserva||"--:--");
if(periodo) periodo.textContent=String(data.periodo_reserva||"--");
if(valor) valor.textContent=formatMoneyDisplay(data.valor_reserva||"");
var note=node.querySelector('[data-slot="pagamento-note"]');
var brickWrap=node.querySelector('[data-slot="pagamento-brick-wrap"]');
var pixWrap=node.querySelector('[data-slot="pagamento-pix"]');
var pixQr=node.querySelector('[data-slot="pagamento-pix-qr"]');
var pixCode=node.querySelector('[data-slot="pagamento-pix-code"]');
var pixCopyBtn=node.querySelector('[data-action="copyPixCode"]');
var pages=window.BDMChatPages||{};
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
var codigo=String(data.codigo_reserva||"").trim();
function setNote(msg){
if(!note) return;
note.hidden = !msg;
note.textContent=msg||"";
}
function setBrickLoading(on){
if(!brickWrap) return;
brickWrap.classList.toggle("-loading", !!on);
}
function setPixData(pix){
if(!pixWrap||!pixQr||!pixCode) return;
if(!pix||(!pix.code&&!pix.base64)){
pixWrap.hidden=true;
pixCode.value="";
pixQr.removeAttribute("src");
return;
}
if(pix.base64){
pixQr.src="data:image/png;base64," + pix.base64;
}else{
pixQr.removeAttribute("src");
}
pixCode.value=pix.code||"";
pixWrap.hidden=false;
setTimeout(function (){
try {
pixWrap.scrollIntoView({ behavior: "smooth", block: "end" });
if(ctx&&ctx.body){
ctx.body.scrollTop=ctx.body.scrollHeight;
}} catch (e){}}, 120);
}
function runPagamentoCheck(){
if(ctx.state.currentView!=="reservaPagamento") return;
if(!checkUrl||!uid||!codigo) return;
fetch(checkUrl, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid, codigo_reserva: codigo })
})
.then(function (r){ return r.json().then(function (j){ return { status: r.status, json: j };});})
.then(function (res){
if(ctx.state.currentView!=="reservaPagamento") return;
var payload=res&&res.json ? res.json:{};
if(res.status < 200||res.status >=300||payload.erro){
ctx.state.pagamentoCheckTimer=setTimeout(runPagamentoCheck, 30000);
return;
}
if(extractCheckResult(payload)==="OK"){
clearPagamentoCheckTimer(ctx);
clearPendingPayment();
toast(ctx, "Pagamento confirmado.");
ctx.state.selectedReservaRaw=Object.assign({}, data||{}, {
codigo_reserva: codigo,
id_usuario: uid
});
ctx.state.lastReservaPaymentData=ctx.state.selectedReservaRaw;
ctx.navigate("reservaDetalhe");
return;
}
if(extractCheckResult(payload)==="REFUSED"){
clearPagamentoCheckTimer(ctx);
clearPendingPayment();
ctx.navigate("reservaRecusada");
return;
}
ctx.state.pagamentoCheckTimer=setTimeout(runPagamentoCheck, 30000);
})
.catch(function (){
if(ctx.state.currentView!=="reservaPagamento") return;
ctx.state.pagamentoCheckTimer=setTimeout(runPagamentoCheck, 30000);
});
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
if(pixCopyBtn){
pixCopyBtn.addEventListener("click", function (e){
e.preventDefault();
var txt=pixCode ? String(pixCode.value||"").trim():"";
if(!txt){
setNote("Código Pix ainda não disponível.");
return;
}
if(navigator.clipboard&&navigator.clipboard.writeText){
navigator.clipboard.writeText(txt).then(function (){
toast(ctx, "Código Pix copiado.");
}).catch(function (){
setNote("Não foi possível copiar automaticamente.");
});
}else{
try {
pixCode.focus();
pixCode.select();
document.execCommand ("copy");
toast(ctx, "Código Pix copiado.");
} catch (err){
setNote("Não foi possível copiar automaticamente.");
}}
});
}
if(!publicKey){
setNote("Chave pública do Mercado Pago não configurada.");
return;
}
if(!preferUrl||!submitUrl||!checkUrl){
setNote("Rotas de pagamento não configuradas.");
return;
}
if(!uid||!codigo){
setNote("Dados da reserva inválidos para pagamento.");
return;
}
rememberPendingPayment({
codigo_reserva: codigo,
id_usuario: uid,
payload: data,
status: "PENDENTE_PAGAMENTO",
date_create: Date.now()
});
setBrickLoading(true);
setNote("Carregando opções de pagamento...");
fetch(preferUrl, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid, codigo_reserva: codigo })
})
.then(function (r){ return r.json().then(function (j){ return { status: r.status, json: j };});})
.then(function (res){
var prefPayload=res&&res.json ? res.json:{};
if(res.status < 200||res.status >=300||prefPayload.erro){
setBrickLoading(false);
setNote(String(prefPayload.erro||prefPayload.message||"Não foi possível iniciar pagamento."));
return;
}
var prefId=extractPreferenceId(prefPayload);
if(!prefId){
setBrickLoading(false);
setNote("Preference do pagamento não retornada.");
return;
}
if(typeof window.BDMChatStartPagamento!=="function"){
setBrickLoading(false);
setNote("Módulo de pagamento não carregado.");
return;
}
window.BDMChatStartPagamento({
publicKey: publicKey,
amount: parseFloat(String(data.valor_reserva||"").replace(",", "."))||0,
preferenceId: prefId,
codigoReserva: codigo,
idUsuario: uid,
submitUrl: submitUrl,
onReady: function (){
setBrickLoading(false);
setNote("");
},
onPaymentCreated: function (_paymentId, payload){
var pix=extractPixPayload(payload);
setPixData(pix);
},
onError: function (err){
setBrickLoading(false);
setNote(err&&err.message ? err.message:"Falha ao enviar pagamento.");
}}).then(function (){
ctx.state.pagamentoCheckTimer=setTimeout(runPagamentoCheck, 30000);
}).catch(function (err){
setBrickLoading(false);
setNote(err&&err.message ? err.message:"Falha ao carregar checkout.");
});
})
.catch(function (){
setBrickLoading(false);
setNote("Falha na comunicação com o serviço de pagamento.");
});
})
.catch(function (){
ctx.body.textContent="Falha ao carregar página de pagamento.";
});
};})();
(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
function pick(obj, keys){
for (var i=0; i < keys.length; i++){
var k=keys[i];
if(obj&&obj[k]!=null&&String(obj[k]).trim()!=="") return obj[k];
}
return "";
}
function pickText(obj, keys){
var v=pick(obj, keys);
if(v==null||v==="") return "";
if(typeof v==="object"){
var inner=pick(v, ["nome", "name", "titulo", "title", "descricao"]);
if(inner!=null&&inner!=="") return String(inner);
return "";
}
return String(v);
}
function normalizeList(api){
if(!api) return [];
if(Array.isArray(api)) return api;
if(typeof api!=="object") return [];
var keys=["reservas", "lista", "items", "data", "rows"];
for (var j=0; j < keys.length; j++){
var arr=api[keys[j]];
if(Array.isArray(arr)) return arr;
}
return [];
}
function stripAcc(s){
try {
return String(s||"")
.toLowerCase()
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "");
} catch (e){
return String(s||"").toLowerCase();
}}
function formatDateBR(raw){
if(raw==null||raw==="") return "—";
var s=String(raw).trim();
var m=s.match(/^(\d{4})-(\d{2})-(\d{2})/);
if(m) return m[3] + "/" + m[2] + "/" + m[1];
m=s.match(/^(\d{2})\/(\d{2})\/(\d{4})/);
if(m) return m[0];
return s.length > 10 ? s.slice(0, 10):s;
}
function formatHora(raw){
if(raw==null||raw==="") return "—";
var s=String(raw).trim();
var m=s.match(/(\d{2}:\d{2})/);
if(m) return m[1];
return s.length >=5 ? s.slice(0, 5):s;
}
function formatMoney(raw){
if(raw==null||raw==="") return "";
var s=String(raw).trim().replace(/R\$\s*/i, "").replace(/\s/g, "");
var n;
if(/,/.test(s)){
n=parseFloat(s.replace(/\./g, "").replace(",", "."));
}else{
n=parseFloat(s);
}
if(!isFinite(n)) return String(raw);
return "R$ " + n.toFixed(2).replace(".", ",");
}
function statusToken(statusRaw){
var s=stripAcc(statusRaw);
if(s.indexOf("cancel") >=0) return "cancelada";
if(s.indexOf("conclu") >=0||s.indexOf("finaliz") >=0) return "concluida";
return "confirmada";
}
function statusLabel(statusRaw){
var s=String(statusRaw||"").trim();
if(s) return s.toUpperCase();
return "CONFIRMADA";
}
function resolvePagamentoStatus(row){
var pagamentoRaw=pickText(row, ["pagamento_status", "status_pagamento", "payment_status"]);
var sPay=stripAcc(pagamentoRaw);
if(sPay){
if(sPay.indexOf("aprova") >=0||sPay.indexOf("conclu") >=0||sPay.indexOf("paid") >=0||sPay.indexOf("success") >=0){
return { token: "pago", label: "PAGAMENTO CONCLUÍDO" };}
if(sPay.indexOf("pend") >=0||sPay.indexOf("wait") >=0||sPay.indexOf("process") >=0){
return { token: "pendente", label: "PAGAMENTO PENDENTE" };}}
var reservaRaw=pickText(row, ["status_reserva", "status", "situacao", "estado", "checking"]);
var sRes=stripAcc(reservaRaw);
if(sRes.indexOf("pend") >=0||sRes.indexOf("aguard") >=0||sRes.indexOf("wait") >=0){
return { token: "pendente", label: "PAGAMENTO PENDENTE" };}
if(sRes.indexOf("aceit") >=0||sRes.indexOf("aprova") >=0||sRes.indexOf("conclu") >=0||sRes.indexOf("finaliz") >=0){
return { token: "pago", label: "PAGAMENTO CONCLUÍDO" };}
return { token: statusToken(reservaRaw), label: statusLabel(reservaRaw) };}
function normalizeItem(row){
if(!row||typeof row!=="object") return null;
var suite=pickText(row, ["suite_nome", "nome_suite", "suite", "suite_name", "titulo", "descricao_suite"]);
var img=pick(row, ["imagem", "image_url", "foto", "thumb", "url_imagem", "suite_imagem"]);
if(!img&&Array.isArray(row.imagens)&&row.imagens.length){
var im0=row.imagens[0];
if(typeof im0==="string") img=im0;
else if(im0&&typeof im0==="object") img=im0.image||im0.thumbImage||im0.url||"";
}
if(!img&&row.suite&&typeof row.suite==="object"){
var s=row.suite;
img=pick(s, ["imagem", "image_url", "foto", "thumb", "url_imagem", "suite_imagem"]);
if(!img&&Array.isArray(s.imagens)&&s.imagens.length){
var sim0=s.imagens[0];
if(typeof sim0==="string") img=sim0;
else if(sim0&&typeof sim0==="object") img=sim0.image||sim0.thumbImage||sim0.url||"";
}}
var data=pick(row, ["data", "data_reserva", "dia", "date", "data_inicio"]);
var hora=pick(row, ["hora", "horario", "hora_inicio", "time", "hora_reserva", "chegada_reserva"]);
var valor=pick(row, ["pagamento_valor", "valor_reserva", "valor", "preco", "price", "total", "valor_total"]);
var dur=pick(row, ["periodo_reserva", "duracao", "periodo", "tempo", "duracao_texto", "pacote"]);
var statusData=resolvePagamentoStatus(row);
var durStr=dur ? String(dur).trim():"—";
var priceLine=formatMoney(valor)||"R$ 0,00";
return {
suite: suite ? String(suite):"Suíte",
img: img ? String(img):"",
dataFmt: formatDateBR(data),
horaFmt: formatHora(hora),
periodo: durStr,
valorPago: priceLine,
statusTok: statusData.token,
statusLbl: statusData.label
};}
function firstDetailRecord(api){
if(!api) return null;
if(Array.isArray(api)&&api.length&&api[0]&&typeof api[0]==="object") return api[0];
if(api&&typeof api==="object"&&Array.isArray(api.data)&&api.data.length&&api.data[0]&&typeof api.data[0]==="object") return api.data[0];
if(api&&typeof api==="object") return api;
return null;
}
function normalizeDetail(row){
if(!row||typeof row!=="object") return null;
var suite=pickText(row, ["suite_nome", "nome_suite", "suite", "suite_name", "titulo", "descricao_suite"]);
var codigo=pickText(row, ["codigo_reserva", "codigo", "codigoPedido"]);
var statusData=resolvePagamentoStatus(row);
var data=pick(row, ["data", "data_reserva", "dia", "date", "data_inicio"]);
var hora=pick(row, ["hora", "horario", "hora_inicio", "time", "hora_reserva", "chegada_reserva"]);
var periodo=pickText(row, ["periodo_reserva", "duracao", "periodo", "tempo", "duracao_texto"]);
var valor=pick(row, ["pagamento_valor", "valor_reserva", "valor", "preco", "price", "total", "valor_total", "transaction_amount"]);
var img=pickText(row, ["imagem", "image_url", "foto", "thumb", "url_imagem", "suite_imagem"]);
if(!img&&Array.isArray(row.imagens)&&row.imagens.length){
var im0=row.imagens[0];
if(typeof im0==="string") img=im0;
else if(im0&&typeof im0==="object") img=String(im0.image||im0.thumbImage||im0.url||"");
}
if(!img&&row.suite&&typeof row.suite==="object"){
img=pickText(row.suite, ["imagem", "image_url", "foto", "thumb", "url_imagem", "suite_imagem"]);
if(!img&&Array.isArray(row.suite.imagens)&&row.suite.imagens.length){
var sim0=row.suite.imagens[0];
if(typeof sim0==="string") img=sim0;
else if(sim0&&typeof sim0==="object") img=String(sim0.image||sim0.thumbImage||sim0.url||"");
}}
var paymentMethodRaw=pickText(row, ["pagamento_metodo", "payment_method_id", "metodo_pagamento", "forma_pagamento", "payment_type_id"]);
function paymentLabel(method){
var m=String(method||"").trim().toLowerCase();
if(!m) return "—";
if(m==="pix") return "Pix";
if(m==="credit_card"||m==="creditcard"||m==="cartao"||m==="cartão") return "Cartão de crédito";
if(m==="debit_card"||m==="debitcard") return "Cartão de débito";
if(m==="ticket"||m==="boleto") return "Boleto";
if(m==="bank_transfer") return "Pix";
return String(method).replace(/_/g, " ");
}
return {
suite: suite||"Suíte",
codigo: codigo||"—",
status: statusData.label,
dataFmt: formatDateBR(data),
horaFmt: formatHora(hora),
periodo: periodo||"—",
valorFmt: formatMoney(valor)||"R$ 0,00",
pagamento: paymentLabel(paymentMethodRaw),
img: img||""
};}
function metaSpan(ctx, iconClass, text){
var span=ctx.el("span", { class: "bdm-reserva-meta-i" });
var ic=document.createElement("i");
ic.className="bdm-fa fa-thin " + iconClass;
ic.setAttribute("aria-hidden", "true");
span.appendChild(ic);
span.appendChild(document.createTextNode(" " + text));
return span;
}
window.BDMChatPages.reservas=function (ctx){
ctx.state.currentView="reservas";
var pages=window.BDMChatPages||{};
var url=(ctx.urls.reservas||"").trim();
function mountShell(emptyMsg){
ctx.loadTemplate("reservas").then(function (html){
var node=ctx.htmlToNode(html);
var slot=node.querySelector('[data-slot="reservas"]');
if(slot&&emptyMsg){
slot.innerHTML="";
slot.appendChild(ctx.el("div", { class: "bdm-empty", text: emptyMsg }));
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar reservas.";
});
}
if(!pages.isLogged||!pages.isLogged()){
mountShell("Faça login para ver suas reservas.");
return;
}
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
if(!uid){
mountShell("Não foi possível identificar sua conta. Faça login novamente.");
return;
}
if(!url){
mountShell("Lista de reservas não configurada.");
return;
}
Promise.all([
ctx.loadTemplate("reservas"),
fetch(url, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid })
}).then(function (r){ return r.json(); })
])
.then(function (arr){
var html=arr[0];
var data=arr[1];
var node=ctx.htmlToNode(html);
var slot=node.querySelector('[data-slot="reservas"]');
if(!slot){
ctx.body.innerHTML="";
ctx.body.appendChild(node);
return;
}
slot.innerHTML="";
if(data&&data.erro){
slot.appendChild(ctx.el("div", { class: "bdm-empty", text: String(data.erro) }));
ctx.body.innerHTML="";
ctx.body.appendChild(node);
return;
}
var list=normalizeList(data);
if(!list.length){
slot.appendChild(ctx.el("div", { class: "bdm-empty", text: "Você ainda não possui reservas." }));
}else{
list.forEach(function (row){
var it=normalizeItem(row);
if(!it) return;
var card=ctx.el("button", { type: "button", class: "bdm-reserva-card" });
var thumbWrap=ctx.el("div", { class: "bdm-reserva-thumb-wrap" });
if(it.img){
thumbWrap.appendChild(ctx.el("img", {
class: "bdm-reserva-thumb",
src: it.img,
alt: "",
loading: "lazy",
referrerpolicy: "no-referrer"
}));
}else{
thumbWrap.appendChild(ctx.el("div", { class: "bdm-reserva-thumb -placeholder" }));
}
card.appendChild(thumbWrap);
var info=ctx.el("div", { class: "bdm-reserva-info" });
info.appendChild(ctx.el("div", { class: "bdm-reserva-suite", text: it.suite }));
var meta=ctx.el("div", { class: "bdm-reserva-meta" });
meta.appendChild(metaSpan(ctx, "fa-calendar", it.dataFmt));
meta.appendChild(ctx.el("span", { class: "bdm-reserva-meta-sep", "aria-hidden": "true" }));
meta.appendChild(metaSpan(ctx, "fa-clock", it.horaFmt));
info.appendChild(meta);
var extra=ctx.el("div", { class: "bdm-reserva-extra" });
extra.appendChild(ctx.el("div", { class: "bdm-reserva-extra-i" }, [
ctx.el("span", { class: "bdm-reserva-extra-k", text: "Período" }),
ctx.el("b", { class: "bdm-reserva-extra-v", text: it.periodo })
]));
extra.appendChild(ctx.el("div", { class: "bdm-reserva-extra-i" }, [
ctx.el("span", { class: "bdm-reserva-extra-k", text: "Valor pago" }),
ctx.el("b", { class: "bdm-reserva-extra-v -value", text: it.valorPago })
]));
info.appendChild(extra);
var badge=ctx.el("span", {
class: "bdm-reserva-status -" + it.statusTok,
text: it.statusLbl
});
info.appendChild(badge);
card.appendChild(info);
var chev=ctx.el("span", { class: "bdm-reserva-chev", "aria-hidden": "true" });
chev.innerHTML='<i class="bdm-fa fa-thin fa-chevron-right"></i>';
card.appendChild(chev);
card.addEventListener("click", function (){
ctx.state.selectedReservaRaw=row;
ctx.state.selectedReserva=it;
ctx.navigate("reservaDetalhe");
});
slot.appendChild(card);
});
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
})
.catch(function (){
ctx.body.textContent="Falha ao carregar suas reservas.";
});
};
window.BDMChatPages.reservaDetalhe=function (ctx){
ctx.state.currentView="reservaDetalhe";
var pages=window.BDMChatPages||{};
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
var url=(ctx.urls.reservaDetalhe||"").trim();
var raw=ctx.state.selectedReservaRaw||ctx.state.lastReservaPaymentData||{};
var codigo=pickText(raw, ["codigo_reserva", "codigo", "codigoPedido"]);
if(!uid||!codigo||!url){
ctx.body.textContent="Detalhes da reserva indisponíveis.";
return;
}
ctx.loadTemplate("reserva-detalhe")
.then(function (html){
return fetch(url, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id_usuario: uid, codigo_reserva: codigo })
}).then(function (r){ return r.json(); }).then(function (api){ return { html: html, api: api };});
})
.then(function (pack){
var row=firstDetailRecord(pack.api)||raw||{};
var detail=normalizeDetail(row)||{
suite: "Suíte",
codigo: codigo,
status: "—",
dataFmt: "—",
horaFmt: "—",
periodo: "—",
valorFmt: "R$ 0,00",
pagamento: "—",
img: ""
};
var model=window.BDMChatMotelModel||{};
var motelNode=model&&model.motel&&typeof model.motel==="object" ? model.motel:model;
var googleUrl=pickText(row, ["google", "maps", "google_maps"])||pickText(motelNode, ["google"]);
var wazeUrl=pickText(row, ["waze"])||pickText(motelNode, ["waze"]);
var node=ctx.htmlToNode(pack.html);
var setText=function (slot, value){
var el=node.querySelector('[data-slot="' + slot + '"]');
if(el) el.textContent=value;
};
setText("detalhe-suite", detail.suite);
setText("detalhe-codigo", detail.codigo);
setText("detalhe-data", detail.dataFmt);
setText("detalhe-hora", detail.horaFmt);
setText("detalhe-periodo", detail.periodo);
setText("detalhe-valor", detail.valorFmt);
setText("detalhe-pagamento", detail.pagamento);
setText("detalhe-status", detail.status);
var img=node.querySelector('[data-slot="detalhe-img"]');
if(img){
if(detail.img){
img.setAttribute("src", detail.img);
img.removeAttribute("hidden");
}else{
img.setAttribute("hidden", "hidden");
}}
var g=node.querySelector('[data-slot="detalhe-google"]');
var w=node.querySelector('[data-slot="detalhe-waze"]');
if(g){
if(googleUrl) g.setAttribute("href", googleUrl);
else g.setAttribute("hidden", "hidden");
}
if(w){
if(wazeUrl) w.setAttribute("href", wazeUrl);
else w.setAttribute("hidden", "hidden");
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
})
.catch(function (){
ctx.body.textContent="Falha ao carregar detalhes da reserva.";
});
};})();
(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
function toast(ctx, msg){
var prev=ctx.body.querySelector(".bdm-toast");
if(prev) prev.remove();
ctx.body.appendChild(ctx.el("div", { class: "bdm-toast", text: msg }));
setTimeout(function (){
var t=ctx.body.querySelector(".bdm-toast");
if(t) t.remove();
}, 2600);
}
function pickFirst(obj, keys){
if(!obj||typeof obj!=="object") return "";
for (var i=0; i < keys.length; i++){
var v=obj[keys[i]];
if(v!=null&&String(v).trim()!=="") return String(v).trim();
}
return "";
}
function deepPick(obj, path){
var parts=String(path||"").split(".");
var cur=obj;
for (var i=0; i < parts.length; i++){
if(!cur||typeof cur!=="object") return "";
cur=cur[parts[i]];
}
return cur==null ? "":String(cur).trim();
}
function formatCpfDisplay(digits){
var d=String(digits||"").replace(/\D/g, "");
if(d.length!==11) return String(digits||"").trim();
return d.slice(0, 3) + "." + d.slice(3, 6) + "." + d.slice(6, 9) + "-" + d.slice(9, 11);
}
function displayNome(u){
if(!u) return "Visitante";
if(u.nome&&String(u.nome).trim()) return String(u.nome).trim();
var p=u.payload&&typeof u.payload==="object" ? u.payload:null;
if(p){
var n=pickFirst(p, ["nome", "name"])||deepPick(p, "cliente.nome")||deepPick(p, "usuario.nome");
if(n) return n;
}
if(u.email){
var at=u.email.indexOf("@");
var local=at > 0 ? u.email.slice(0, at):u.email;
if(local) return local.charAt(0).toUpperCase() + local.slice(1);
}
return "Usuário";
}
function onlyDigits(v){
return String(v||"").replace(/\D/g, "");
}
function formatCepMask(d8){
if(d8.length!==8) return String(d8||"");
return d8.slice(0, 5) + "-" + d8.slice(5);
}
function wireCepAutofill(ctx, form){
var cepEl=form.elements.cep;
if(!cepEl) return;
var debounceTimer=null;
var lastFetchedDigits="";
var inFlight=false;
function fetchCep(digits){
if(digits.length!==8||inFlight) return;
if(digits===lastFetchedDigits) return;
inFlight=true;
fetch("https://viacep.com.br/ws/" + encodeURIComponent(digits) + "/json/", { mode: "cors" })
.then(function (r){
return r.json();
})
.then(function (data){
inFlight=false;
if(!data||data.erro===true){
lastFetchedDigits="";
toast(ctx, "CEP não encontrado.");
return;
}
lastFetchedDigits=digits;
if(form.endereco) form.endereco.value=String(data.logradouro||"").trim();
if(form.bairro) form.bairro.value=String(data.bairro||"").trim();
if(form.cidade) form.cidade.value=String(data.localidade||"").trim();
if(form.uf) form.uf.value=String(data.uf||"").trim().slice(0, 2).toUpperCase();
var d=onlyDigits(data.cep||cepEl.value);
if(d.length===8) cepEl.value=formatCepMask(d);
})
.catch(function (){
inFlight=false;
lastFetchedDigits="";
toast(ctx, "Não foi possível consultar o CEP.");
});
}
cepEl.addEventListener("input", function (){
clearTimeout(debounceTimer);
var d=onlyDigits(cepEl.value);
if(d.length < 8) lastFetchedDigits="";
debounceTimer=setTimeout(function (){
if(d.length===8) fetchCep(d);
}, 450);
});
cepEl.addEventListener("blur", function (){
clearTimeout(debounceTimer);
var d=onlyDigits(cepEl.value);
if(d.length===8){
cepEl.value=formatCepMask(d);
fetchCep(d);
}});
}
function buildSnapshot(u){
var p=u&&u.payload&&typeof u.payload==="object" ? u.payload:{};
var prof=u&&u.profile&&typeof u.profile==="object" ? u.profile:{};
var cpfRaw=u.cpf||pickFirst(p, ["cpf", "documento"])||"";
return {
nome: displayNome(u),
email: String(u.email||pickFirst(p, ["email", "mail"])||"").trim(),
telefone: String(u.telefone||pickFirst(p, ["telefone", "fone", "celular", "phone"])||"").trim(),
cpf: formatCpfDisplay(cpfRaw),
endereco: String(prof.endereco||pickFirst(p, ["endereco", "logradouro", "rua"])||"").trim(),
numero: String(prof.numero||pickFirst(p, ["numero", "num"])||"").trim(),
bairro: String(prof.bairro||pickFirst(p, ["bairro"])||"").trim(),
cidade: String(prof.cidade||pickFirst(p, ["cidade"])||"").trim(),
uf: String(prof.uf||pickFirst(p, ["uf", "estado"])||"").trim().slice(0, 2).toUpperCase(),
cep: String(prof.cep||pickFirst(p, ["cep"])||"").trim()
};}
function fillForm(node, snap){
var nomeEl=node.querySelector('[data-conta-display="nome"]');
var mailEl=node.querySelector('[data-conta-display="email"]');
if(nomeEl) nomeEl.textContent=snap.nome;
if(mailEl) mailEl.textContent=snap.email||"—";
var form=node.querySelector("[data-conta-form]");
if(!form) return;
var fields=["nome", "telefone", "cpf", "endereco", "numero", "bairro", "cidade", "uf", "cep"];
fields.forEach(function (name){
var inp=form.elements[name];
if(inp&&snap[name]!=null) inp.value=snap[name];
});
var sen=form.elements.senha;
if(sen) sen.value="";
}
window.BDMChatPages.conta=function (ctx){
ctx.state.currentView="conta";
var pages=window.BDMChatPages||{};
function mountGuest(msg){
ctx.loadTemplate("conta").then(function (html){
var node=ctx.htmlToNode(html);
var bodyEl=node.querySelector(".bdm-conta-body");
if(bodyEl){
bodyEl.innerHTML="";
bodyEl.appendChild(ctx.el("div", { class: "bdm-empty", text: msg }));
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar.";
});
}
if(!pages.isLogged||!pages.isLogged()){
mountGuest("Faça login para acessar sua conta.");
return;
}
ctx.loadTemplate("conta").then(function (html){
var node=ctx.htmlToNode(html);
var u=pages.getUserRecord ? pages.getUserRecord():null;
var snap=buildSnapshot(u||{});
fillForm(node, snap);
var form=node.querySelector("[data-conta-form]");
if(form){
form.addEventListener("submit", function (ev){
ev.preventDefault();
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
if(!uid){
toast(ctx, "Não foi possível identificar o usuário. Faça login novamente.");
return;
}
var apiUrl=(ctx.urls.userUpdate||"").trim();
if(!apiUrl){
toast(ctx, "Atualização de cadastro não configurada.");
return;
}
var nome=String(form.nome&&form.nome.value||"").trim();
var telefone=String(form.telefone&&form.telefone.value||"").trim();
var cpf=String(form.cpf&&form.cpf.value||"").trim();
var endereco=String(form.endereco&&form.endereco.value||"").trim();
var numero=String(form.numero&&form.numero.value||"").trim();
var bairro=String(form.bairro&&form.bairro.value||"").trim();
var cidade=String(form.cidade&&form.cidade.value||"").trim();
var uf=String(form.uf&&form.uf.value||"").trim().slice(0, 2).toUpperCase();
var cep=String(form.cep&&form.cep.value||"").trim();
var senha=String(form.senha&&form.senha.value||"").trim();
var body={
id: uid,
nome: nome,
telefone: telefone,
cpf: onlyDigits(cpf),
cep: cep,
endereco: endereco,
numero: numero,
bairro: bairro,
cidade: cidade,
uf: uf
};
if(senha) body.senha=senha;
fetch(apiUrl, {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body)
})
.then(function (r){
return r.json().then(function (j){
return { ok: r.ok, json: j };});
})
.then(function (res){
var j=res.json||{};
if(!res.ok||j.erro){
toast(ctx, String(j.erro||"Falha ao salvar."));
return;
}
var ok=j.result&&String(j.result).toUpperCase()==="OK";
if(!ok){
toast(ctx, "Não foi possível atualizar o cadastro.");
return;
}
if(pages.applyUserApiResponse) pages.applyUserApiResponse(j);
if(pages.saveUserProfile){
pages.saveUserProfile({
nome: nome,
telefone: telefone,
cpf: cpf,
endereco: endereco,
numero: numero,
bairro: bairro,
cidade: cidade,
uf: uf,
cep: cep
});
}
var u2=pages.getUserRecord ? pages.getUserRecord():null;
fillForm(node, buildSnapshot(u2||{}));
toast(ctx, "Dados atualizados com sucesso.");
})
.catch(function (){
toast(ctx, "Falha de conexão ao salvar.");
});
});
wireCepAutofill(ctx, form);
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar.";
});
};})();
(function (){
var sdkPromise=null;
function loadMercadoPagoSdk(){
if(window.MercadoPago) return Promise.resolve();
if(sdkPromise) return sdkPromise;
sdkPromise=new Promise(function (resolve, reject){
var s=document.createElement("script");
s.src="https://sdk.mercadopago.com/js/v2";
s.async=true;
s.onload=function (){ resolve(); };
s.onerror=function (){ reject(new Error("Falha ao carregar SDK do Mercado Pago.")); };
document.head.appendChild(s);
});
return sdkPromise;
}
function destroyController(refName){
var c=window[refName];
if(c&&typeof c.unmount==="function"){
try { c.unmount(); } catch (e){}}
window[refName]=null;
}
function ensureContainerVisible(id, visible){
var el=document.getElementById(id);
if(!el) return;
el.style.display=visible ? "":"none";
}
function getSafeErrorMessage(payload){
if(!payload||typeof payload!=="object") return "Falha no pagamento.";
return String(payload.erro||payload.message||"Falha no pagamento.");
}
window.BDMChatStartPagamento=async function (cfg){
cfg=cfg||{};
var publicKey=String(cfg.publicKey||"").trim();
if(!publicKey) throw new Error("Mercado Pago public key ausente.");
var preferenceId=String(cfg.preferenceId||"").trim();
if(!preferenceId) throw new Error("Preference ID ausente.");
var amount=Number(cfg.amount||0);
if(!isFinite(amount)||amount <=0) throw new Error("Valor de pagamento inválido.");
await loadMercadoPagoSdk();
destroyController("paymentBrickController");
destroyController("statusScreenBrickController");
ensureContainerVisible("paymentBrick_container", true);
ensureContainerVisible("statusScreenBrick_container", false);
var mp=new window.MercadoPago(publicKey, { locale: "pt-BR" });
var bricksBuilder=mp.bricks();
var settings={
initialization: {
amount: Number(amount.toFixed(2)),
preferenceId: preferenceId,
},
customization: {
paymentMethods: {
creditCard: "all",
debitCard: "all",
bankTransfer: "all",
maxInstallments: 1
},
visual: {
style: {
theme: "dark"
}}
},
callbacks: {
onReady: function (){
if(typeof cfg.onReady==="function") cfg.onReady();
},
onSubmit: function (args){
return new Promise(function (resolve, reject){
fetch(String(cfg.submitUrl||""), {
method: "POST",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
codigo_reserva: cfg.codigoReserva,
id_usuario: cfg.idUsuario,
form_data: args&&args.formData ? args.formData:{}})
})
.then(function (r){
return r.json().then(function (j){ return { status: r.status, json: j };});
})
.then(function (res){
var data=res&&res.json ? res.json:{};
if(res.status < 200||res.status >=300||data.erro||data.result==="error"){
var err=new Error(getSafeErrorMessage(data));
if(typeof cfg.onError==="function") cfg.onError(err);
reject(err);
return;
}
var paymentId=data.id||(data.data&&data.data.id);
if(paymentId&&typeof cfg.onPaymentCreated==="function"){
cfg.onPaymentCreated(paymentId, data);
}
resolve();
})
.catch(function (err){
if(typeof cfg.onError==="function") cfg.onError(err);
reject(err);
});
});
},
onError: function (error){
if(typeof cfg.onError==="function") cfg.onError(error);
}}
};
window.paymentBrickController=await bricksBuilder.create("payment", "paymentBrick_container", settings);
return window.paymentBrickController;
};
window.BDMChatRenderStatusBrick=async function (publicKey, paymentId){
if(!publicKey||!paymentId) return;
await loadMercadoPagoSdk();
destroyController("statusScreenBrickController");
var mp=new window.MercadoPago(String(publicKey), { locale: "pt-BR" });
var bricksBuilder=mp.bricks();
ensureContainerVisible("paymentBrick_container", false);
ensureContainerVisible("statusScreenBrick_container", true);
window.statusScreenBrickController=await bricksBuilder.create("statusScreen",
"statusScreenBrick_container",
{
initialization: { paymentId: paymentId },
customization: {
visual: { style: { theme: "dark" }}
},
callbacks: {
onReady: function (){},
onError: function (){}}
}
);
};})();