Como Chegar
Como Chegar
REFINADO
Ótica e Relojoaria Talismã (loja física)
Avenida Maripá 88
Centro
Marechal Cândido Rondon
Paraná
Brasil
85960-176
`);
var closeBtn = document.getElementById('payment-modal-close');
var overlay = document.getElementById('payment-modal-overlay');
if (closeBtn) {
closeBtn.addEventListener('click', fecharModalPagamentos);
}
if (overlay) {
overlay.addEventListener('click', function (e) {
if (e.target === overlay) {
fecharModalPagamentos();
}
});
}
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') {
fecharModalPagamentos();
}
});
}
function normalizarTexto(txt) {
var texto = (txt || '')
.replace(/\uFFFD/g, '') // remove caractere inválido
.replace(/\s+/g, ' ')
.trim();
// Correções de acentuação / caracteres quebrados
texto = texto
.replace(/Transfer.ncia/gi, 'Transferência')
.replace(/Transferncia/gi, 'Transferência')
.replace(/Transf.rencia/gi, 'Transferência')
.replace(/Deposito/gi, 'Depósito')
.replace(/Depsito/gi, 'Depósito')
.replace(/Cart.o/gi, 'Cartão')
.replace(/Carto/gi, 'Cartão')
.replace(/M.nima/gi, 'Mínima')
.replace(/Minima/gi, 'Mínima')
.replace(/Mnima/gi, 'Mínima')
.replace(/Informa..es/gi, 'Informações')
.replace(/Informacoes/gi, 'Informações')
.replace(/Parcela M.nima/gi, 'Parcela Mínima')
.replace(/Parcela Minima/gi, 'Parcela Mínima')
.replace(/Parcela Mnima/gi, 'Parcela Mínima');
// Corrigir "vista" sem duplicar "à à vista"
if (/^(vista|a vista|à vista)$/i.test(texto)) {
texto = 'à vista';
}
// Corrigir parcelamento: 6X -> 6x
texto = texto.replace(/(\d+)\s*X\b/g, '$1x');
return texto;
}
function extrairDetalhesPagamento(html) {
var doc = new DOMParser().parseFromString(html, 'text/html');
var cards = [];
var rows = Array.from(doc.querySelectorAll('tr')).filter(function (tr) {
return tr.innerText && tr.innerText.trim().length > 0;
});
var currentGroup = null;
rows.forEach(function (tr) {
var img = tr.querySelector('img');
var texts = Array.from(tr.querySelectorAll('td'))
.map(function (td) { return normalizarTexto(td.innerText); })
.filter(Boolean);
if (!texts.length) return;
var hasPaymentTitle = texts.some(function (t) {
return /vindi|pix|boleto|cartão|transferência|depósito/i.test(t);
});
if (img || hasPaymentTitle) {
if (currentGroup) {
cards.push(currentGroup);
}
currentGroup = {
image: img ? img.src : '',
title: texts[0] || 'Pagamento',
lines: texts.slice(1)
};
} else if (currentGroup) {
currentGroup.lines = currentGroup.lines.concat(texts);
}
});
if (currentGroup) {
cards.push(currentGroup);
}
return cards;
}
function renderizarCardsPagamento(cards) {
if (!cards || !cards.length) {
return `
Não foi possível organizar as formas de pagamento.
`;
}
return `
${cards.map(function (card, index) {
var destaque = [];
var vista = [];
var parcelaMinima = [];
var outros = [];
var parcelasBrutas = [];
(card.lines || []).forEach(function (line) {
var texto = normalizarTexto(line);
if (!texto) return;
if (/desconto/i.test(texto)) {
destaque.push(texto);
} else if (/parcela mínima/i.test(texto)) {
parcelaMinima.push(texto);
} else if (/^\d+x\b/i.test(texto) || /^R\$/i.test(texto)) {
parcelasBrutas.push(texto);
} else if (/^vista$/i.test(texto) || /^à vista$/i.test(texto) || /sem tarifa/i.test(texto) || /sem juros/i.test(texto)) {
vista.push(texto);
} else {
outros.push(texto);
}
});
var parcelas = [];
for (var i = 0; i < parcelasBrutas.length; i++) {
var atual = parcelasBrutas[i];
var prox = parcelasBrutas[i + 1] || '';
if (/^\d+x\b/i.test(atual) && prox && /^R\$/i.test(prox)) {
parcelas.push({
titulo: atual,
detalhe: prox
});
i++;
} else if (/^\d+x\b/i.test(atual)) {
parcelas.push({
titulo: atual,
detalhe: ''
});
} else if (/^R\$/i.test(atual)) {
if (!parcelas.length) {
vista.push(atual);
} else {
parcelas.push({
titulo: '',
detalhe: atual
});
}
}
}
var temParcelas = parcelas.length > 1;
var vistaHtml = `
${vista.map(function (item) {
return `
${item}
`;
}).join('')}
`;
var outrosHtml = outros.length ? `
${outros.map(function (item) {
return `
${item}
`;
}).join('')}
` : '';
var descontoHtml = destaque.length ? `
${destaque.map(function (texto) {
return `
${texto}
`;
}).join('')}
` : '';
var parcelaMinimaHtml = parcelaMinima.length ? `
${parcelaMinima.map(function (texto) {
return `
${texto}
`;
}).join('')}
` : '';
var parcelasHtml = temParcelas ? `
Ver parcelamento Clique para expandir
${parcelas.map(function (parcela, idx) {
if (idx === 0 && /^1x$/i.test(parcela.titulo || '')) return '';
return `
${parcela.titulo ? `
${parcela.titulo}
` : ''}
${parcela.detalhe ? `
${parcela.detalhe}
` : ''}
`;
}).join('')}
` : '';
return `
${card.image ? `
` : ''}
${normalizarTexto(card.title)}
${descontoHtml}
${outrosHtml}
${vistaHtml}
${parcelaMinimaHtml}
${parcelasHtml}
`;
}).join('')}
`;
}
function abrirModalPagamentos() {
var overlay = document.getElementById('payment-modal-overlay');
var content = document.getElementById('payment-modal-content');
if (!overlay || !content) return;
var urlBase = getUrlPagamentos();
overlay.style.display = 'flex';
document.body.style.overflow = 'hidden';
if (!urlBase) {
content.innerHTML = 'Não foi possível carregar as formas de pagamento.
';
return;
}
content.innerHTML = 'Carregando formas de pagamento...
';
fetch(urlBase, { credentials: 'same-origin' })
.then(function (response) { return response.text(); })
.then(function (html) {
var parser = new DOMParser();
var doc = parser.parseFromString(html, 'text/html');
var link = Array.from(doc.querySelectorAll('a')).find(function (el) {
return el.textContent && el.textContent.toLowerCase().indexOf('detalhes do pagamento') > -1;
});
if (!link) {
content.innerHTML = 'Não foi possível localizar os detalhes do pagamento.
';
return;
}
var dataUrl = link.getAttribute('data-url');
if (!dataUrl) {
content.innerHTML = 'Não foi possível localizar a URL dos detalhes do pagamento.
';
return;
}
var urlFinal = dataUrl
.replace(/&/g, '&')
.replace('IdProd=&', 'IdProd=' + getProductId() + '&')
.replace('preco=', 'preco=' + getPrecoAtual());
if (!urlFinal.startsWith('http')) {
urlFinal = window.location.origin + urlFinal;
}
fetch(urlFinal, { credentials: 'same-origin' })
.then(function (response) { return response.text(); })
.then(function (htmlDetalhes) {
var cards = extrairDetalhesPagamento(htmlDetalhes);
cards.sort(function (a, b) {
function getOrder(title) {
var t = normalizarTexto(title || '').toLowerCase();
if (t.indexOf('pix') > -1) return 1;
if (t.indexOf('cartão') > -1 || t.indexOf('visa') > -1 || t.indexOf('mastercard') > -1 || t.indexOf('elo') > -1 || t.indexOf('amex') > -1 || t.indexOf('diners') > -1) return 2;
if (t.indexOf('boleto') > -1) return 3;
if (t.indexOf('transferência') > -1 || t.indexOf('depósito') > -1) return 4;
return 99;
}
return getOrder(a.title) - getOrder(b.title);
});
content.innerHTML = renderizarCardsPagamento(cards);
})
.catch(function () {
content.innerHTML = 'Erro ao carregar os detalhes do pagamento.
';
});
})
.catch(function () {
content.innerHTML = 'Erro ao carregar as formas de pagamento.
';
});
}
function criarLinkPagamento() {
var precoBox = document.getElementById('produto_preco');
if (!precoBox) return;
if (!document.getElementById('see-payment-methods-link')) {
precoBox.insertAdjacentHTML('beforeend', `
Ver formas de pagamento
`);
}
var paymentLink = document.getElementById('see-payment-methods-link');
if (paymentLink && !paymentLink.dataset.modalBound) {
paymentLink.addEventListener('click', function (e) {
e.preventDefault();
abrirModalPagamentos();
});
paymentLink.dataset.modalBound = 'true';
}
}
criarModalPagamentos();
criarLinkPagamento();
setTimeout(criarLinkPagamento, 500);
setTimeout(criarLinkPagamento, 1200);
});