PageSourceSearch

https://inbmarketing.pl/wp-content/uploads/inb-ps-min/63ae5c6f14134444439829683db4298d.min.js

js inbmarketing.pl collected 2026-10-07 00:35:02 UTC 30,095 bytes, 948 lines download raw bytes

1(function() {
2'use strict';
3if (typeof window.inbTbConfig === 'undefined') {
4console.warn('[INB TB] Configuration not found');
5return;
6}
7var config = window.inbTbConfig;
8var settings = config.settings || {};
9var pageData = config.pageData || {};
10function debug(message, data) {
11if (config.debug) {
12console.log('[INB TB] ' + message, data || '');
13}
14}
15var LEAD_EVENTS = [
16'lead_formularz_wyslany',
17'lead_formularz_wyslany_thp',
18'lead_z_formularza_w_tabeli_mieszkan'
19];
20function classifyEvent(eventName) {
21if (LEAD_EVENTS.indexOf(eventName) !== -1) return 'lead';
22if (/_click$|^wyswietlenie_|^otwarcie_|^telefon_|^email_|^wyznaczanie_/.test(eventName)) {
23return 'micro';
24}
25return 'other';
26}
27var _uidSeq = 0;
28function generateTxId(prefix) {
29_uidSeq++;
30return (prefix || 'lead') + '-' + Date.now() + '-' + _uidSeq + '-' + Math.floor(Math.random() * 1e6);
31}
32function pushEvent(eventName, eventData) {
33var payload = Object.assign({}, {
34event: eventName,
35event_category: classifyEvent(eventName),
36tb_version: config.version,
37page_type: pageData.page_type,
38page_path: pageData.page_path || location.pathname,
39page_url: location.href,
40page_title: pageData.page_title || document.title,
41site_language: pageData.site_language || document.documentElement.lang || '',
42debug_mode: config.debug
43}, eventData);
44window.dataLayer = window.dataLayer || [];
45window.dataLayer.push(payload);
46debug('Event pushed: ' + eventName, payload);
47if (config.debug) {
48storeEventLog(payload);
49}
50}
51function storeEventLog(event) {
52try {
53var logs = JSON.parse(sessionStorage.getItem('inb_tb_event_log') || '[]');
54logs.push({
55timestamp: new Date().toISOString(),
56event: event
57});
58if (logs.length > 20) {
59logs = logs.slice(-20);
60}
61sessionStorage.setItem('inb_tb_event_log', JSON.stringify(logs));
62} catch (e) {
63}
64}
65function matchesSelector(element, selector) {
66if (!selector || !element) return false;
67try {
68return element.matches(selector) || element.closest(selector) !== null;
69} catch (e) {
70return false;
71}
72}
73function getPhoneLocation(element) {
74var selectors = settings.selectors || {};
75if (selectors.stickyPhone && matchesSelector(element, selectors.stickyPhone)) {
76return 'mobile_sticky';
77}
78if (selectors.headerPhone && matchesSelector(element, selectors.headerPhone)) {
79return 'header_menu';
80}
81if (selectors.footerPhone && matchesSelector(element, selectors.footerPhone)) {
82return 'footer';
83}
84if (selectors.contactPhone && matchesSelector(element, selectors.contactPhone)) {
85return 'contact_page';
86}
87if (element.closest('header') || element.closest('[data-tb-zone="header"]')) {
88return 'header_menu';
89}
90if (element.closest('footer') || element.closest('[data-tb-zone="footer"]')) {
91return 'footer';
92}
93if (element.closest('[data-tb-zone="sticky"]')) {
94return 'mobile_sticky';
95}
96if (pageData.page_type === 'contact') {
97return 'contact_page';
98}
99return settings.locationMode === 'strict' ? 'unknown' : 'content';
100}
101function getFormLocation(formElement) {
102var selectors = settings.selectors || {};
103if (selectors.footerForm && matchesSelector(formElement, selectors.footerForm)) {
104return 'footer';
105}
106if (selectors.contactForm && matchesSelector(formElement, selectors.contactForm)) {
107return 'contact_page';
108}
109if (selectors.homeForm && matchesSelector(formElement, selectors.homeForm)) {
110return 'home';
111}
112if (selectors.landingForm && matchesSelector(formElement, selectors.landingForm)) {
113return 'landing';
114}
115if (formElement.closest('footer') || formElement.closest('[data-tb-zone="footer"]')) {
116return 'footer';
117}
118if (pageData.page_type === 'contact') {
119return 'contact_page';
120}
121if (pageData.page_type === 'home') {
122return 'home';
123}
124if (pageData.page_type === 'landing') {
125return 'landing';
126}
127return settings.locationMode === 'strict' ? 'unknown' : 'content';
128}
129function normalizePhoneNumber(href) {
130return href.replace('tel:', '').replace(/\s+/g, '');
131}
132function getLinkText(element) {
133return element.innerText.trim() ||
134element.getAttribute('aria-label') ||
135element.getAttribute('title') ||
136'';
137}
138function initPhoneClickTracking() {
139if (!settings.trackPhoneClick) return;
140document.addEventListener('click', function(e) {
141var link = e.target.closest('a[href^="tel:"]');
142if (!link) return;
143var phoneNumber = normalizePhoneNumber(link.getAttribute('href'));
144var phoneLocation = getPhoneLocation(link);
145var isMobile = window.matchMedia('(max-width: 767px)').matches;
146pushEvent('telefon_click', {
147phone_number: phoneNumber,
148phone_location: phoneLocation,
149link_text: getLinkText(link),
150element_id: link.id || '',
151element_classes: (link.className || '').substring(0, 200),
152is_mobile: isMobile
153});
154}, true);
155debug('Phone click tracking initialized');
156}
157function normalizeEmailAddress(href) {
158return href.replace('mailto:', '').split('?')[0].trim();
159}
160function initEmailClickTracking() {
161if (!settings.trackEmailClick) return;
162document.addEventListener('click', function(e) {
163var link = e.target.closest('a[href^="mailto:"]');
164if (!link) return;
165var emailAddress = normalizeEmailAddress(link.getAttribute('href'));
166var emailLocation = getPhoneLocation(link); 
167var isMobile = window.matchMedia('(max-width: 767px)').matches;
168pushEvent('email_click', {
169email_address: emailAddress,
170email_location: emailLocation,
171link_text: getLinkText(link),
172element_id: link.id || '',
173element_classes: (link.className || '').substring(0, 200),
174is_mobile: isMobile
175});
176}, true);
177debug('Email click tracking initialized');
178}
179function getFormIdentity(form) {
180if (!form) return { id: '', name: '' };
181var id = form.id
182|| form.getAttribute('data-form-id')
183|| form.getAttribute('data-id')
184|| '';
185var name = form.getAttribute('data-form-name')
186|| form.getAttribute('data-name')
187|| form.getAttribute('aria-label')
188|| (form.querySelector('h2,h3,h4') || {}).innerText
189|| '';
190return { id: String(id).substring(0, 100), name: String(name).substring(0, 200) };
191}
192var _formFired = {};
193var DEDUP_WINDOW_MS = 1500;
194function getFormFingerprint(provider, form, identity, extra) {
195if (extra && extra.form_id) {
196return provider + '|id:' + extra.form_id;
197}
198if (identity.id) return provider + '|id:' + identity.id;
199if (identity.name) return provider + '|name:' + identity.name;
200if (form && form.nodeType === 1) {
201var path = [];
202var node = form;
203var depth = 0;
204while (node && node.nodeType === 1 && depth < 6) {
205var ix = 0;
206var sib = node;
207while ((sib = sib.previousElementSibling) !== null) { ix++; }
208path.unshift(node.nodeName + ':' + ix);
209node = node.parentElement;
210depth++;
211}
212return provider + '|dom:' + path.join('>');
213}
214return provider + '|generic';
215}
216function fireFormEvent(provider, form, extra) {
217if (!settings.trackLeadForm) return;
218var identity = getFormIdentity(form);
219var key = getFormFingerprint(provider, form, identity, extra);
220if (_formFired[key]) {
221debug('Duplikat pominięty (dedup): ' + key);
222return;
223}
224_formFired[key] = true;
225setTimeout(function() { delete _formFired[key]; }, DEDUP_WINDOW_MS);
226var eventId = generateTxId('lead');
227pushEvent('lead_formularz_wyslany', Object.assign({
228event_id: eventId,
229transaction_id: eventId,
230form_provider: provider,
231form_id: identity.id,
232form_name: identity.name,
233form_location: getFormLocation(form || document.body),
234element_id: (form || {}).id || '',
235element_classes: ((form || {}).className || '').substring(0, 200)
236}, extra || {}));
237debug('Form event fired: ' + provider, identity);
238}
239function initElementorFormTracking() {
240if (!settings.trackLeadForm) return;
241function getElementorFormId(form) {
242if (!form || !form.querySelector) return '';
243var hidden = form.querySelector('input[name="form_id"]');
244var fid = hidden && hidden.value ? String(hidden.value) : '';
245return fid.substring(0, 100);
246}
247document.addEventListener('submit_success', function(e) {
248var form = e.target;
249if (!form || !form.classList || !form.classList.contains('elementor-form')) return;
250fireFormEvent('elementor', form, { form_id: getElementorFormId(form) });
251}, true);
252if (typeof MutationObserver !== 'undefined') {
253var observer = new MutationObserver(function(mutations) {
254mutations.forEach(function(mutation) {
255if (mutation.type !== 'childList') return;
256var target = mutation.target;
257var el = target && target.closest ? target.closest('.elementor-form') : null;
258if (el && el.querySelector('.elementor-message-success')) {
259fireFormEvent('elementor', el, { form_id: getElementorFormId(el) });
260}
261});
262});
263var allElementorForms = document.querySelectorAll('.elementor-form');
264allElementorForms.forEach(function(form) {
265observer.observe(form, { subtree: true, childList: true });
266});
267}
268if (typeof jQuery !== 'undefined') {
269jQuery(document).on('ajaxComplete', function(event, xhr, ajaxSettings) {
270var dataStr = '';
271if (typeof ajaxSettings.data === 'string') {
272dataStr = ajaxSettings.data;
273} else if (ajaxSettings.data && typeof ajaxSettings.data.get === 'function') {
274try { dataStr = ajaxSettings.data.get('action') || ''; } catch(e) {}
275} else if (ajaxSettings.data && typeof ajaxSettings.data === 'object') {
276dataStr = ajaxSettings.data.action || '';
277}
278if (dataStr.indexOf('elementor') !== -1 && dataStr.indexOf('form') !== -1) {
279try {
280var response = xhr.responseJSON || JSON.parse(xhr.responseText);
281var hasFieldErrors = response && response.data && (
282response.data.errors || response.data.error
283);
284if (response && response.success === true && !hasFieldErrors) {
285var ajaxFormId = '';
286if (typeof ajaxSettings.data === 'string') {
287var m = ajaxSettings.data.match(/(?:^|&)form_id=([^&]*)/);
288if (m) { try { ajaxFormId = decodeURIComponent(m[1]); } catch(e) { ajaxFormId = m[1]; } }
289} else if (ajaxSettings.data && typeof ajaxSettings.data.get === 'function') {
290try { ajaxFormId = ajaxSettings.data.get('form_id') || ''; } catch(e) {}
291}
292var form = null;
293if (ajaxFormId) {
294if (window.CSS && CSS.escape) {
295var hidden = document.querySelector('.elementor-form input[name="form_id"][value="' + CSS.escape(ajaxFormId) + '"]');
296if (hidden && hidden.closest) form = hidden.closest('.elementor-form');
297} else {
298var candidates = document.querySelectorAll('.elementor-form input[name="form_id"]');
299for (var ci = 0; ci < candidates.length; ci++) {
300if (candidates[ci].value === ajaxFormId && candidates[ci].closest) {
301form = candidates[ci].closest('.elementor-form');
302break;
303}
304}
305}
306}
307if (!form) {
308form = document.querySelector('.elementor-form:not(.elementor-form-waiting)');
309}
310if (form || ajaxFormId) {
311fireFormEvent('elementor', form, { form_id: ajaxFormId || getElementorFormId(form) });
312}
313}
314} catch (err) {}
315}
316});
317}
318debug('Elementor form tracking initialized (success-only)');
319}
320function initCF7FormTracking() {
321if (!settings.trackLeadForm) return;
322document.addEventListener('wpcf7mailsent', function(e) {
323var detail = e.detail || {};
324var wrapper = e.target;
325var form = wrapper ? wrapper.querySelector('form') : null;
326var id = String(detail.contactFormId || (form && form.id) || '');
327fireFormEvent('contact_form_7', form || wrapper, { form_id: id });
328});
329debug('Contact Form 7 tracking initialized');
330}
331function initWPFormsTracking() {
332if (!settings.trackLeadForm) return;
333if (typeof jQuery !== 'undefined') {
334jQuery(document).on('wpformsAjaxSubmitSuccess', function(e, response, formData) {
335var formId = response && response.data && response.data.form_id;
336var formEl = document.querySelector('#wpforms-form-' + formId);
337fireFormEvent('wpforms', formEl, { form_id: String(formId || '') });
338});
339}
340if (typeof MutationObserver !== 'undefined') {
341var wpfObserver = new MutationObserver(function(mutations) {
342mutations.forEach(function(mutation) {
343if (mutation.type !== 'childList') return;
344var target = mutation.target;
345var container = target && target.closest ? target.closest('.wpforms-container') : null;
346if (container && container.querySelector('.wpforms-confirmation-container, .wpforms-confirmation-container-full')) {
347var form = container.querySelector('form');
348fireFormEvent('wpforms', form || container);
349}
350});
351});
352document.querySelectorAll('.wpforms-container').forEach(function(c) {
353wpfObserver.observe(c, { subtree: true, childList: true });
354});
355}
356debug('WPForms tracking initialized (success-only)');
357}
358function initGravityFormsTracking() {
359if (!settings.trackLeadForm) return;
360if (typeof jQuery !== 'undefined') {
361jQuery(document).on('gform_confirmation_loaded', function(e, formId) {
362var formEl = document.querySelector('#gform_' + formId);
363fireFormEvent('gravity_forms', formEl, { form_id: String(formId) });
364});
365jQuery(document).on('gform_post_render', function(e, formId, currentPage) {
366if (currentPage === 1) return; 
367});
368}
369debug('Gravity Forms tracking initialized');
370}
371function initNinjaFormsTracking() {
372if (!settings.trackLeadForm) return;
373document.addEventListener('nfFormSubmitResponse', function(e) {
374var detail = e.detail || {};
375var response = detail.response || {};
376var hasErrors = (response.errors && (
377(response.errors.fields && Object.keys(response.errors.fields).length) ||
378(response.errors.form && Object.keys(response.errors.form).length)
379));
380if (hasErrors) {
381debug('Ninja Forms: odpowiedź z błędami walidacji - pomijam');
382return;
383}
384var formId = String(detail.id || detail.formId || (response.data && response.data.form_id) || '');
385var formEl = document.querySelector('#nf-form-' + formId + '-cont');
386fireFormEvent('ninja_forms', formEl, { form_id: formId });
387});
388debug('Ninja Forms tracking initialized');
389}
390function initFluentFormsTracking() {
391if (!settings.trackLeadForm) return;
392if (typeof jQuery !== 'undefined') {
393jQuery(document).on('fluentform_submission_success', function(e, response, formId) {
394var formEl = document.querySelector('#fluentform_' + formId);
395fireFormEvent('fluent_forms', formEl, { form_id: String(formId || '') });
396});
397}
398debug('Fluent Forms tracking initialized');
399}
400function initMetFormTracking() {
401if (!settings.trackLeadForm) return;
402if (typeof jQuery !== 'undefined') {
403jQuery(document).on('metform:submit:success', function(e) {
404var formEl = e.target || document.body;
405fireFormEvent('metform', formEl);
406});
407}
408debug('MetForm tracking initialized');
409}
410function initAvadaFormTracking() {
411if (!settings.trackLeadForm) return;
412document.addEventListener('fusionFormSubmitSuccess', function(e) {
413var wrapper = e.target;
414var form = wrapper ? wrapper.querySelector('form') : null;
415fireFormEvent('avada_fusion_forms', form || wrapper);
416});
417debug('Avada Fusion Forms tracking initialized');
418}
419function initNativeFallbackFormTracking() {
420if (!settings.trackLeadForm) return;
421var LEAD_SELECTORS = [
422'.wpcf7-form',
423'.elementor-form',
424'.gform_form',
425'.nf-form-cont form',
426'.ff-form-wrap form',
427'.fusion-form form',
428'.metform-form form',
429'.wpforms-form',
430'[class*="contact"] form',
431'[class*="kontakt"] form',
432'[id*="contact"] form',
433'[id*="kontakt"] form',
434'form[class*="contact"]',
435'form[class*="kontakt"]',
436'form[id*="contact"]',
437'form[id*="kontakt"]',
438];
439var SKIP_IF_PROVIDER_CLASS = [
440'wpcf7-form', 
441'elementor-form', 
442'gform_form', 
443'ff-form-wrap', 
444'metform-form', 
445'wpforms-form', 
446'inb-ef-form', 
447'inb-nl-form', 
448'inb-nl-confirm-form', 
449];
450function isSearchOrFilterForm(form) {
451if ((form.getAttribute('role') || '').toLowerCase() === 'search') return true;
452var method = (form.getAttribute('method') || 'get').toLowerCase();
453if (method !== 'post') return true;
454if (form.querySelector('input[type="search"]')) return true;
455var blob = ((form.className || '') + ' ' + (form.id || '')).toLowerCase();
456if (/search|szukaj|wyszuk|filter|filtr|newsletter|subscribe|zapis/.test(blob)) return true;
457var hasContactField = form.querySelector(
458'input[type="email"], input[type="tel"], input[name*="email" i], input[name*="mail" i], input[name*="phone" i], input[name*="tel" i]'
459);
460if (!hasContactField) return true;
461return false;
462}
463function requiredConsentsChecked(form) {
464var requiredBoxes = form.querySelectorAll('input[type="checkbox"][required]');
465for (var i = 0; i < requiredBoxes.length; i++) {
466if (!requiredBoxes[i].checked) return false;
467}
468return true;
469}
470function hasSuccessConfirmation(container) {
471if (!container) return false;
472if (container.querySelector(
473'.elementor-message-success, .wpcf7-mail-sent-ok, .frm_message, .nf-response-msg, ' +
474'[class*="success" i]:not(input):not(button), [class*="sent" i]:not(input):not(button), ' +
475'[class*="thank" i]:not(input):not(button), [class*="confirm" i]:not(input):not(button)'
476)) return true;
477var text = (container.textContent || '').toLowerCase();
478if (/dziękuj|dziekuj|zgłoszenie zostało|zgloszenie zostalo|pomyślnie przesłane|pomyslnie przeslane|wiadomość została wysłana|wiadomosc zostala wyslana|formularz zosta|message has been sent|thank you|successfully/.test(text)) return true;
479return false;
480}
481document.addEventListener('submit', function(e) {
482var form = e.target;
483if (!form || form.tagName !== 'FORM') return;
484if (form.id === 'mrep-contact-form' ||
485(form.closest && form.closest('.mrep-popup, .mrep-offer-popup, [class*="mrep"]'))) {
486return;
487}
488var classes = (form.className || '') + ' ' + ((form.closest('[class]') || {}).className || '');
489for (var i = 0; i < SKIP_IF_PROVIDER_CLASS.length; i++) {
490if (classes.indexOf(SKIP_IF_PROVIDER_CLASS[i]) !== -1) return;
491}
492var isLeadForm = LEAD_SELECTORS.some(function(sel) {
493try { return form.matches(sel) || form.closest(sel) !== null; } catch(x) { return false; }
494});
495if (!isLeadForm) return;
496if (isSearchOrFilterForm(form)) {
497debug('Native fallback: pominięto formularz wyszukiwania/filtra');
498return;
499}
500if (typeof form.checkValidity === 'function' && !form.checkValidity()) {
501debug('Native fallback: formularz nie przeszedł walidacji - pomijam');
502return;
503}
504if (!requiredConsentsChecked(form)) {
505debug('Native fallback: wymagane zgody niezaznaczone - pomijam');
506return;
507}
508var container = form.closest('div, section, article') || form.parentNode || form;
509var fired = false;
510function tryFire() {
511if (fired) return false;
512if (hasSuccessConfirmation(container)) {
513fired = true;
514fireFormEvent('native_html5', form);
515return true;
516}
517return false;
518}
519if (tryFire()) return;
520var observer = new MutationObserver(function() { tryFire(); });
521observer.observe(container, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ['class', 'style'] });
522setTimeout(function() {
523observer.disconnect();
524if (!fired) {
525debug('Native fallback: brak potwierdzenia wysłania w oknie czasowym - konwersji nie liczono');
526}
527}, 6000);
528}, true);
529debug('Native fallback form tracking initialized');
530}
531function initCalendarClickTracking() {
532if (!settings.trackCalendarClick) return;
533var patterns = settings.calendarPatterns || [];
534var linkSelector = settings.calendarLinkSelector || '';
535if (patterns.length === 0) return;
536document.addEventListener('click', function(e) {
537var link = e.target.closest('a[href]');
538if (!link) return;
539var href = link.getAttribute('href');
540if (!href) return;
541if (linkSelector && !matchesSelector(link, linkSelector)) {
542return;
543}
544var matched = false;
545var matchedRule = '';
546for (var i = 0; i < patterns.length; i++) {
547var pattern = patterns[i];
548var patternValue = pattern.pattern || '';
549if (!patternValue) continue;
550switch (pattern.match_type) {
551case 'contains':
552if (href.indexOf(patternValue) !== -1) {
553matched = true;
554matchedRule = 'contains:' + patternValue;
555}
556break;
557case 'starts_with':
558if (href.indexOf(patternValue) === 0) {
559matched = true;
560matchedRule = 'starts_with:' + patternValue;
561}
562break;
563case 'regex':
564try {
565if (new RegExp(patternValue).test(href)) {
566matched = true;
567matchedRule = 'regex:' + patternValue;
568}
569} catch (err) {
570debug('Invalid regex pattern: ' + patternValue);
571}
572break;
573}
574if (matched) break;
575}
576if (!matched) return;
577var linkLocation = getPhoneLocation(link); 
578pushEvent('otwarcie_kalendarza', {
579calendar_provider: 'ms_bookings',
580link_url: href,
581link_text: getLinkText(link),
582link_location: linkLocation,
583matched_rule: matchedRule,
584is_outbound: href.indexOf(location.hostname) === -1
585});
586}, true);
587debug('Calendar click tracking initialized');
588}
589function initThankYouTracking() {
590if (!settings.trackThankyou) return;
591var rules = settings.thankyouRules || [];
592if (rules.length === 0) return;
593var currentPath = location.pathname + location.search;
594for (var i = 0; i < rules.length; i++) {
595var rule = rules[i];
596var pattern = rule.pattern || '';
597var matched = false;
598if (!pattern) continue;
599switch (rule.match_type) {
600case 'contains':
601matched = currentPath.indexOf(pattern) !== -1;
602break;
603case 'exact':
604matched = currentPath === pattern;
605break;
606case 'regex':
607try {
608matched = new RegExp(pattern).test(currentPath);
609} catch (err) {
610debug('Invalid regex pattern: ' + pattern);
611}
612break;
613}
614if (matched) {
615if (rule.fire_once) {
616var firedKey = 'inb_tb_thankyou_' + i;
617if (sessionStorage.getItem(firedKey)) {
618debug('Thank you rule already fired this session: ' + rule.rule_name);
619continue;
620}
621sessionStorage.setItem(firedKey, '1');
622}
623var thpEventId = generateTxId('thp-' + (rule.rule_name || String(i)));
624pushEvent('lead_formularz_wyslany_thp', {
625event_id: thpEventId,
626transaction_id: thpEventId,
627thankyou_rule_id: rule.rule_name || String(i),
628thankyou_rule_pattern: pattern
629});
630}
631}
632debug('Thank you page tracking initialized');
633}
634function initPropertyPdfTracking() {
635if (!settings.trackPropertyPdf) return;
636document.addEventListener('click', function(e) {
637var link = e.target.closest('.mrep-pdf-link');
638if (!link) return;
639var href = link.getAttribute('href') || '';
640var row = link.closest('tr');
641var propertyId = '';
642var propertyNumber = '';
643if (row) {
644var idCell = row.querySelector('.col-key-id .cell-content');
645var numberCell = row.querySelector('.col-key-number .cell-content');
646propertyId = idCell ? idCell.textContent.trim() : '';
647propertyNumber = numberCell ? numberCell.textContent.trim() : '';
648}
649pushEvent('wyswietlenie_karty_mieszkania', {
650property_id: propertyId,
651property_number: propertyNumber,
652pdf_url: href,
653conversion_type: 'micro'
654});
655if (settings.propertyPdfAsDownload) {
656var pdfPath = href.split('#')[0].split('?')[0];
657var pdfExt = (pdfPath.match(/\.([a-z0-9]{1,8})$/i) || [null, 'pdf'])[1].toLowerCase();
658pushEvent('pobranie_pliku', {
659file_url: href,
660file_name: (pdfPath.split('/').pop() || '').substring(0, 150),
661file_extension: pdfExt,
662property_id: propertyId,
663conversion_type: 'micro'
664});
665}
666}, true);
667debug('Property PDF click tracking initialized');
668}
669function initFileDownloadTracking() {
670if (!settings.trackFileDownload) return;
671var extList = String(settings.downloadExtensions || 'pdf,doc,docx,xls,xlsx,zip,rar')
672.toLowerCase().split(',')
673.map(function (e) { return e.replace(/[^a-z0-9]/g, ''); })
674.filter(function (e) { return e.length > 0 && e.length <= 8; });
675if (!extList.length) return;
676document.addEventListener('click', function (e) {
677var link = e.target.closest('a[href]');
678if (!link) return;
679var href = link.getAttribute('href') || '';
680if (!href || href.indexOf('#') === 0 || /^(mailto|tel):/i.test(href)) return;
681var path = href.split('#')[0].split('?')[0];
682var m = path.match(/\.([a-z0-9]{1,8})$/i);
683if (!m) return;
684var ext = m[1].toLowerCase();
685if (extList.indexOf(ext) === -1) return;
686if (link.classList && link.classList.contains('mrep-pdf-link')) return;
687var fileName = path.split('/').pop() || '';
688pushEvent('pobranie_pliku', {
689file_url: href,
690file_name: fileName.substring(0, 150),
691file_extension: ext,
692link_text: (link.textContent || '').trim().substring(0, 100),
693link_location: getPhoneLocation(link),
694conversion_type: 'micro'
695});
696}, true);
697debug('File download tracking initialized (' + extList.join(',') + ')');
698}
699function initPropertyInquiryClickTracking() {
700if (!settings.trackPropertyInquiryClick) return;
701document.addEventListener('click', function(e) {
702var btn = e.target.closest('.mrep-offer-btn');
703if (!btn) return;
704var propertyId = btn.getAttribute('data-id') || '';
705var buttonText = btn.textContent.trim();
706pushEvent('wyswietlenie_formularza_w_tabeli_mieszkan', {
707property_id: propertyId,
708button_text: buttonText,
709conversion_type: 'micro'
710});
711}, true);
712debug('Property inquiry click tracking initialized');
713}
714function initPropertyInquirySubmitTracking() {
715if (!settings.trackPropertyInquirySubmit) return;
716var _propertyFired = {};
717if (typeof jQuery !== 'undefined') {
718jQuery(document).on('ajaxComplete', function(event, xhr, ajaxSettings) {
719if (ajaxSettings.data && ajaxSettings.data.indexOf('mrep_submit_form') !== -1) {
720try {
721var response = JSON.parse(xhr.responseText);
722if (response.success) {
723var apartmentId = '';
724var match = ajaxSettings.data.match(/apartment_id=([^&]*)/);
725if (match) {
726apartmentId = decodeURIComponent(match[1]);
727}
728var pKey = 'mrep:' + (apartmentId || 'unknown');
729if (_propertyFired[pKey]) {
730debug('Duplikat formularza tabeli pominięty: ' + pKey);
731return;
732}
733_propertyFired[pKey] = true;
734setTimeout(function() { delete _propertyFired[pKey]; }, 1500);
735var pEventId = generateTxId('mrep');
736pushEvent('lead_z_formularza_w_tabeli_mieszkan', {
737event_id: pEventId,
738transaction_id: pEventId,
739property_id: apartmentId,
740form_provider: 'tabela_mieszkan',
741conversion_type: 'lead'
742});
743}
744} catch (err) {
745debug('Error parsing AJAX response: ' + err.message);
746}
747}
748});
749}
750debug('Property inquiry submit tracking initialized');
751}
752function initMapsDirectionsTracking() {
753if (!settings.trackMapsDirections) return;
754var mapsPatterns = [
755'google.com/maps/dir',
756'google.pl/maps/dir',
757'maps.google.com/maps?daddr',
758'maps.google.pl/maps?daddr',
759'google.com/maps/place',
760'google.pl/maps/place',
761'google.com/maps?q=',
762'google.pl/maps?q=',
763'google.com/maps/@',
764'google.pl/maps/@',
765'maps.app.goo.gl',
766'goo.gl/maps'
767];
768var directionsButtonSelectors = [
769'a[href*="maps"][href*="dir"]',
770'a[href*="daddr="]',
771'a[href*="destination="]',
772'.gm-style a[href*="maps"]',
773'.wpgmza_directions_button',
774'.wpgmza-directions',
775'a.wpgmza_gd',
776'.mmp-directions',
777'a[data-directions]',
778'.map-container a[href*="google"]',
779'.google-map a[href*="google"]',
780'[class*="map"] a[href*="google.com/maps"]',
781'[class*="map"] a[href*="google.pl/maps"]',
782'.elementor-widget-google_maps a',
783'.et_pb_map a',
784'a[href*="maps"][class*="direction"]',
785'a[href*="maps"][class*="route"]',
786'a[href*="maps"][class*="dojazd"]',
787'a[href*="maps"][class*="trasa"]',
788];
789document.addEventListener('click', function(e) {
790var link = e.target.closest('a[href]');
791if (!link) return;
792var href = link.getAttribute('href') || '';
793var isGoogleMapsLink = false;
794var isDirectionsLink = false;
795for (var i = 0; i < mapsPatterns.length; i++) {
796if (href.indexOf(mapsPatterns[i]) !== -1) {
797isGoogleMapsLink = true;
798if (href.indexOf('/dir') !== -1 || href.indexOf('daddr') !== -1 || href.indexOf('destination=') !== -1) {
799isDirectionsLink = true;
800}
801break;
802}
803}
804if (!isGoogleMapsLink) {
805for (var j = 0; j < directionsButtonSelectors.length; j++) {
806try {
807if (link.matches(directionsButtonSelectors[j])) {
808isGoogleMapsLink = true;
809isDirectionsLink = true;
810break;
811}
812} catch (err) {}
813}
814}
815if (!isGoogleMapsLink) return;
816var linkLocation = getPhoneLocation(link);
817pushEvent('wyznaczanie_trasy_click', {
818link_url: href,
819link_text: getLinkText(link),
820link_location: linkLocation,
821conversion_type: isDirectionsLink ? 'directions' : 'map_view',
822is_directions: isDirectionsLink
823});
824debug('Maps click tracked: ' + (isDirectionsLink ? 'directions' : 'map_view'));
825}, true);
826document.addEventListener('click', function(e) {
827var mapButton = e.target.closest(
828'[onclick*="maps.google"], ' +
829'[onclick*="google.com/maps"], ' +
830'[data-map-url], ' +
831'[data-directions-url], ' +
832'.open-map-btn, ' +
833'.directions-btn, ' +
834'.map-directions, ' +
835'.get-directions'
836);
837if (!mapButton) return;
838if (mapButton.tagName === 'A' && mapButton.getAttribute('href')) return;
839var mapUrl = mapButton.getAttribute('data-map-url')
840|| mapButton.getAttribute('data-directions-url')
841|| mapButton.getAttribute('onclick') || '';
842pushEvent('wyznaczanie_trasy_click', {
843link_url: mapUrl.substring(0, 500),
844link_text: getLinkText(mapButton) || mapButton.innerText.trim(),
845link_location: getPhoneLocation(mapButton),
846conversion_type: 'button_click',
847is_directions: true
848});
849debug('Maps button click tracked');
850}, true);
851debug('Google Maps tracking initialized (enhanced)');
852}
853function initCustomLinksTracking() {
854if (!settings.trackCustomLinks) return;
855var customLinks = settings.customLinks || [];
856if (customLinks.length === 0) return;
857document.addEventListener('click', function(e) {
858var link = e.target.closest('a[href]');
859if (!link) return;
860var href = link.getAttribute('href') || '';
861var matched = false;
862var matchedLink = null;
863for (var i = 0; i < customLinks.length; i++) {
864var linkConfig = customLinks[i];
865var pattern = linkConfig.url || '';
866if (!pattern) continue;
867switch (linkConfig.match_type) {
868case 'contains':
869if (href.indexOf(pattern) !== -1) {
870matched = true;
871matchedLink = linkConfig;
872}
873break;
874case 'exact':
875if (href === pattern) {
876matched = true;
877matchedLink = linkConfig;
878}
879break;
880case 'starts_with':
881if (href.indexOf(pattern) === 0) {
882matched = true;
883matchedLink = linkConfig;
884}
885break;
886case 'regex':
887try {
888if (new RegExp(pattern).test(href)) {
889matched = true;
890matchedLink = linkConfig;
891}
892} catch (err) {
893debug('Invalid regex pattern: ' + pattern);
894}
895break;
896}
897if (matched) break;
898}
899if (!matched || !matchedLink) return;
900var linkLocation = getPhoneLocation(link);
901var rawName = (matchedLink.name || 'link').trim();
902var eventName = rawName
903.toLowerCase()
904.replace(/\s+/g, '_')
905.replace(/[^a-z0-9_]/g, '')
906+ '_link_click';
907pushEvent(eventName, {
908link_name: matchedLink.name || '',
909link_url: href,
910link_text: getLinkText(link),
911link_location: linkLocation,
912matched_pattern: matchedLink.url,
913match_type: matchedLink.match_type
914});
915}, true);
916debug('Custom links tracking initialized');
917}
918function init() {
919debug('Initializing tracker v' + config.version);
920debug('Page data:', pageData);
921debug('Settings:', settings);
922initPhoneClickTracking();
923initEmailClickTracking();
924initElementorFormTracking();
925initCF7FormTracking();
926initWPFormsTracking();
927initGravityFormsTracking();
928initNinjaFormsTracking();
929initFluentFormsTracking();
930initMetFormTracking();
931initAvadaFormTracking();
932initNativeFallbackFormTracking();
933initCalendarClickTracking();
934initThankYouTracking();
935initPropertyPdfTracking();
936initPropertyInquiryClickTracking();
937initPropertyInquirySubmitTracking();
938initMapsDirectionsTracking();
939initCustomLinksTracking();
940initFileDownloadTracking();
941debug('All tracking modules initialized');
942}
943if (document.readyState === 'loading') {
944document.addEventListener('DOMContentLoaded', init);
945} else {
946init();
947}
948})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.