{"id":331,"date":"2026-04-10T16:45:56","date_gmt":"2026-04-10T14:45:56","guid":{"rendered":"https:\/\/www.carsuspect.com\/%d0%be%d1%82%d1%87%d0%b5%d1%82-%d0%b7%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82%d0%b0\/"},"modified":"2026-08-03T12:10:24","modified_gmt":"2026-08-03T10:10:24","slug":"%d0%be%d1%82%d1%87%d0%b5%d1%82-%d0%b7%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82%d0%b0","status":"publish","type":"page","link":"https:\/\/www.carcheckz.com\/bg\/%d0%be%d1%82%d1%87%d0%b5%d1%82-%d0%b7%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82%d0%b0\/","title":{"rendered":"\u041e\u0442\u0447\u0435\u0442 \u0437\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u0442\u0430"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"331\" class=\"elementor elementor-331 elementor-300\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ff88f0 e-flex e-con-boxed e-con e-parent\" data-id=\"6ff88f0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b16c5cb elementor-widget elementor-widget-shortcode\" data-id=\"b16c5cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[carcheckz_purchase_summary]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ff9b17 elementor-widget elementor-widget-shortcode\" data-id=\"9ff9b17\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t<div class=\"vr-wrap\" id=\"vr-wrap-471224\">\n\n\t\t  \t\t  <div id=\"vr-loader-block-471224\" style=\"text-align:center; padding:10px 0 4px;\">\n\t\t\t<style>\n\t\t\t  #vr-loader-471224{\n\t\t\t\twidth:60px;height:60px;border:6px solid rgba(0,0,0,0.14);\n\t\t\t\tborder-top:6px solid #0f172a;border-radius:50%;margin:0 auto 18px auto;\n\t\t\t\tanimation:vrSpin 1s linear infinite\n\t\t\t  }\n\t\t\t  @keyframes vrSpin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}\n\t\t\t  #vr-status-processing-471224{font-size:20px;color:#0f172a;margin:0 0 10px 0;opacity:1}\n\t\t\t  #vr-status-received-471224{font-size:20px;color:#16a34a;opacity:0;visibility:hidden}\n\t\t\t  .vr-subtext{font-size:14px;color:rgba(15,23,42,.75);text-align:center}\n\t\t\t  .vr-errorbox{margin-top:10px;padding:10px 12px;border-radius:12px;border:1px solid rgba(185,28,28,.25);background:rgba(185,28,28,.06);color:#7f1d1d;font-size:13px}\n\t\t\t<\/style>\n\n\t\t\t<div id=\"vr-loader-471224\"><\/div>\n\t\t\t<p id=\"vr-status-processing-471224\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u044f\u0432\u043a\u0430\u0442\u0430 \u0432\u0438 \u0437\u0430 VIN...<\/p>\n\t\t\t<p id=\"vr-status-received-471224\">\u2714 \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u0437\u0430\u044f\u0432\u043a\u0430.<\/p>\n\t\t\t<p class=\"vr-subtext\">\u041c\u043e\u043b\u044f, \u0438\u0437\u0447\u0430\u043a\u0430\u0439\u0442\u0435 - \u0442\u043e\u0432\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u043e\u0442\u043d\u0435\u043c\u0435 \u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438.<\/p>\n\t\t  <\/div>\n\t\t  \n\t\t  <div id=\"vr-report-slot-471224\" style=\"display:none;\"><\/div>\n\t\t  <div id=\"vr-error-slot-471224\" class=\"vr-errorbox\" style=\"display:none;\"><\/div>\n\t\t<\/div>\n\n\t\t<script>\n\t\t  (function(){\n\t\t\tfunction getParam(name){\n\t\t\t  try { return new URLSearchParams(window.location.search).get(name) || ''; } catch(e){ return ''; }\n\t\t\t}\n\t\t\tfunction detectOrderId(){\n\t\t\t  var path = window.location.pathname || '';\n\t\t\t  var m = path.match(\/\\\/order-received\\\/(\\d+)\\\/\/);\n\t\t\t  return m ? m[1] : '';\n\t\t\t}\n\n\t\t\tvar slot = document.getElementById('vr-report-slot-471224');\n\t\t\tvar err  = document.getElementById('vr-error-slot-471224');\n\t\t\tif (!slot || !err) return;\n\n\t\t\tvar isAdmin  = false;\n\t\t\tvar adminVin = \"\";\n\t\t\t\/\/ The shared-secret token rode in on the page URL (?vr_admin_token=\u2026). admin-ajax.php\n\t\t\t\/\/ gets no query string, so forward it in the POST or the admin lookup 403s when the\n\t\t\t\/\/ hop isn't authenticated by a WP cookie (e.g. the hub admin isn't logged into WP).\n\t\t\tvar adminToken = getParam('vr_admin_token');\n\t\t\tvar shareVin = \"\";\n\t\t\tvar shareExp = \"\";\n\t\t\tvar shareSig = \"\";\n\t\t\tvar orderId  = detectOrderId();\n\t\t\tvar orderKey = getParam('key');\n\t\t\t\/\/ Real report-page WPML language, resolved server-side above and POSTed\n\t\t\t\/\/ so the API's X-Vr-Locale isn't mislabelled by admin-ajax's lack of context.\n\t\t\tvar pageLang = \"bg\";\n\n\t\t\tvar revealed = false, latestHtml = '', coreReady = false, fetching = false, fetchFails = 0;\n\t\t\tvar startTs = Date.now();\n\t\t\tvar loaderBlockEl = document.getElementById('vr-loader-block-471224');\n\n\t\t\tfunction buildForm(){\n\t\t\t\tvar f = new FormData();\n\t\t\t\tf.append('action',    'vr_report_section_ajax');\n\t\t\t\tif (adminVin) {\n\t\t\t\t\tf.append('admin_vin', adminVin);\n\t\t\t\t\tif (adminToken) { f.append('vr_admin_token', adminToken); }\n\t\t\t\t}\n\t\t\t\tif (shareVin) {\n\t\t\t\t\tf.append('vr_share_vin', shareVin);\n\t\t\t\t\tf.append('vr_share_exp', shareExp);\n\t\t\t\t\tf.append('vr_share_sig', shareSig);\n\t\t\t\t}\n\t\t\t\tf.append('order_id',  orderId || 0);\n\t\t\t\tf.append('order_key', orderKey || '');\n\t\t\t\tf.append('lang',      pageLang || '');\n\t\t\t\tf.append('_wpnonce',  \"519a160396\");\n\t\t\t\treturn f;\n\t\t\t}\n\n\t\t\tif (!adminVin && !shareVin && !orderId && !orderKey) {\n\t\t\t\tif (loaderBlockEl) loaderBlockEl.style.display = 'none';\n\t\t\t\terr.textContent = \"\\u041d\\u0435 \\u043c\\u043e\\u0436\\u0435 \\u0434\\u0430 \\u0441\\u0435 \\u043e\\u0442\\u043a\\u0440\\u0438\\u0435 \\u043a\\u043e\\u043d\\u0442\\u0435\\u043a\\u0441\\u0442 \\u043d\\u0430 \\u043f\\u043e\\u0440\\u044a\\u0447\\u043a\\u0430\\u0442\\u0430 \\u043d\\u0430 \\u0442\\u0430\\u0437\\u0438 \\u0441\\u0442\\u0440\\u0430\\u043d\\u0438\\u0446\\u0430.\";\n\t\t\t\terr.style.display = 'block';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\/\/ Reveal is gated on DATA, not a fixed timer. The report body is held back\n\t\t\t\/\/ until the slow provider work that feeds it (Ezyvin service history, which\n\t\t\t\/\/ drives the mileage chart, plus the vehicle decode) reports a non-generating\n\t\t\t\/\/ status. Ezyvin service history lands ~10s to ~66s after the order, so a blind\n\t\t\t\/\/ 20s reveal shipped an empty mileage section. A floor keeps the thorough-\n\t\t\t\/\/ analysis beat; a ceiling stops the wait if a provider is pathologically slow\n\t\t\t\/\/ (the post-reveal enrich poll then fills it in when it finally lands).\n\t\t\tfunction computeCoreReady(html){\n\t\t\t\tvar tmp = document.createElement('div'); tmp.innerHTML = html;\n\t\t\t\tvar root = tmp.querySelector('#vr-report-root');\n\t\t\t\tif (!root) return false;\n\t\t\t\treturn root.getAttribute('data-sh-status') !== 'generating'\n\t\t\t\t    && root.getAttribute('data-vehicle-status') !== 'generating';\n\t\t\t}\n\t\t\tfunction fetchReport(cb){\n\t\t\t\tif (fetching) { if (cb) cb(); return; }\n\t\t\t\tfetching = true;\n\t\t\t\tfetch(\"https:\\\/\\\/www.carcheckz.com\\\/wp-admin\\\/admin-ajax.php\", { method:'POST', body: buildForm(), credentials: 'same-origin' })\n\t\t\t\t  .then(function(r){ return r.text().then(function(t){ return { status: r.status, text: t }; }); })\n\t\t\t\t  .then(function(payload){\n\t\t\t\t\tfetching = false;\n\t\t\t\t\tvar d = null; try { d = JSON.parse(payload.text); } catch(e) {}\n\t\t\t\t\tvar html = (d && d.success && d.data && d.data.html) ? d.data.html : '';\n\t\t\t\t\tif (html) { latestHtml = html; coreReady = computeCoreReady(html); }\n\t\t\t\t\telse { fetchFails += 1; }\n\t\t\t\t\tif (cb) cb();\n\t\t\t\t  })\n\t\t\t\t  .catch(function(){ fetching = false; fetchFails += 1; if (cb) cb(); });\n\t\t\t}\n\t\t\t\/\/ Re-create <script> nodes so inline scripts inside the injected report\n\t\t\t\/\/ HTML actually execute \u2014 assigning innerHTML never runs embedded scripts.\n\t\t\tfunction runScripts(container){\n\t\t\t  if (!container) return;\n\t\t\t  var list = container.querySelectorAll('script');\n\t\t\t  for (var i = 0; i < list.length; i++) {\n\t\t\t\tvar old = list[i], s = document.createElement('script');\n\t\t\t\tif (old.src) { s.src = old.src; } else { s.textContent = old.textContent; }\n\t\t\t\tif (old.parentNode) old.parentNode.replaceChild(s, old);\n\t\t\t  }\n\t\t\t}\n\t\t\tfunction vrIsGenerating(el){\n\t\t\t  return !!el && (el.getAttribute('data-sh-status') === 'generating'\n\t\t\t               || el.getAttribute('data-vehicle-status') === 'generating'\n\t\t\t               || el.getAttribute('data-auction-status') === 'generating');\n\t\t\t}\n\t\t\t\/\/ After the initial render, the vehicle decode (and service-history\n\t\t\t\/\/ when enabled) may still be assembling on the Java side. The data attrs\n\t\t\t\/\/ on #vr-report-root tell us. Poll every 5s up to ~3 min; when a status\n\t\t\t\/\/ flips, swap innerHTML of the existing root with the fresh render.\n\t\t\tfunction startEnrichPoll(){\n\t\t\t  var root = slot.querySelector('#vr-report-root');\n\t\t\t  if (!vrIsGenerating(root)) return; \/\/ nothing pending\n\t\t\t  var attempts = 0, MAX = 36; \/\/ 36 \u00d7 5s \u2248 3 minutes\n\t\t\t  (function poll(){\n\t\t\t\tattempts++;\n\t\t\t\tfetch(\"https:\\\/\\\/www.carcheckz.com\\\/wp-admin\\\/admin-ajax.php\", { method:'POST', body: buildForm(), credentials: 'same-origin' })\n\t\t\t\t  .then(function(r){ return r.text(); })\n\t\t\t\t  .then(function(t){\n\t\t\t\t\tvar data = null; try { data = JSON.parse(t); } catch(e) {}\n\t\t\t\t\tvar html = (data && data.success && data.data) ? data.data.html : '';\n\t\t\t\t\tvar cur = slot.querySelector('#vr-report-root');\n\t\t\t\t\tif (html && cur) {\n\t\t\t\t\t  var tmp = document.createElement('div'); tmp.innerHTML = html;\n\t\t\t\t\t  var fresh = tmp.querySelector('#vr-report-root');\n\t\t\t\t\t  if (fresh) {\n\t\t\t\t\t\tvar changed = fresh.getAttribute('data-sh-status') !== cur.getAttribute('data-sh-status')\n\t\t\t\t\t\t\t\t   || fresh.getAttribute('data-vehicle-status') !== cur.getAttribute('data-vehicle-status')\n\t\t\t\t\t\t\t\t   || fresh.getAttribute('data-auction-status') !== cur.getAttribute('data-auction-status');\n\t\t\t\t\t\tif (changed) {\n\t\t\t\t\t\t  cur.setAttribute('data-sh-status', fresh.getAttribute('data-sh-status') || '');\n\t\t\t\t\t\t  cur.setAttribute('data-vehicle-status', fresh.getAttribute('data-vehicle-status') || '');\n\t\t\t\t\t\t  cur.setAttribute('data-auction-status', fresh.getAttribute('data-auction-status') || '');\n\t\t\t\t\t\t  cur.innerHTML = fresh.innerHTML;\n\t\t\t\t\t\t  runScripts(cur);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!vrIsGenerating(fresh)) return; \/\/ everything resolved \u2192 done\n\t\t\t\t\t  }\n\t\t\t\t\t}\n\t\t\t\t\tif (attempts < MAX) setTimeout(poll, 5000);\n\t\t\t\t  })\n\t\t\t\t  .catch(function(){ if (attempts < MAX) setTimeout(poll, 5000); });\n\t\t\t  })();\n\t\t\t}\n\t\t\tfunction inject(html){\n\t\t\t  \/\/ JS-hide the loader block so its CSS animation can't restart when the\n\t\t\t  \/\/ print-medium toggles on\/off during Download as PDF. display:none beats\n\t\t\t  \/\/ any animation visibility\/opacity reset.\n\t\t\t  var loaderBlock = document.getElementById('vr-loader-block-471224');\n\t\t\t  if (loaderBlock) loaderBlock.style.display = 'none';\n\t\t\t  slot.innerHTML = html;\n\t\t\t  slot.style.display = 'block';\n\t\t\t  runScripts(slot);\n\t\t\t  startEnrichPoll();\n\t\t\t}\n\n\t\t\tfunction reveal(html){ if (revealed) return; revealed = true; inject(html); }\n\n\t\t\t\/\/ Customer view honours a minimum thorough-analysis beat; admin\/preview reveals\n\t\t\t\/\/ as soon as any render lands. CORE_CAP_MS is the hard ceiling: a real Ezyvin\n\t\t\t\/\/ service-history generation lands by ~66s, so 75s covers its slow tail before we\n\t\t\t\/\/ give up waiting and let the post-reveal enrich poll finish the job.\n\t\t\tvar FLOOR_MS    = isAdmin ? 0 : 20000;\n\t\t\tvar CORE_CAP_MS = 75000;\n\t\t\tvar POLL_MS     = 5000;\n\t\t\tfunction maybeReveal(){\n\t\t\t\tif (revealed) return;\n\t\t\t\tvar elapsed = Date.now() - startTs;\n\t\t\t\tif (elapsed < FLOOR_MS) return;\n\t\t\t\tif (!latestHtml) {\n\t\t\t\t\tif (isAdmin && fetchFails >= 3) { err.textContent = \"\\u041e\\u0442\\u0447\\u0435\\u0442\\u044a\\u0442 \\u043d\\u0435 \\u043c\\u043e\\u0436\\u0435 \\u0434\\u0430 \\u0431\\u044a\\u0434\\u0435 \\u0437\\u0430\\u0440\\u0435\\u0434\\u0435\\u043d.\"; err.style.display = 'block'; }\n\t\t\t\t}\n\t\t\t\telse if (isAdmin || coreReady || elapsed >= CORE_CAP_MS) { reveal(latestHtml); }\n\t\t\t}\n\t\t\tvar revealTick = setInterval(function(){ maybeReveal(); if (revealed) clearInterval(revealTick); }, 500);\n\t\t\t(function stagePoll(){\n\t\t\t\tif (revealed) return;\n\t\t\t\tfetchReport(function(){ maybeReveal(); if (!revealed) setTimeout(stagePoll, POLL_MS); });\n\t\t\t})();\n\t\t  })();\n\n\t\t\/* Download as PDF \u2014 opens a hidden off-screen iframe with only the report\n\t\t   HTML + its inline CSS, prints that, then removes the iframe. Avoids\n\t\t   theme print-CSS issues and keeps the main page out of print medium so\n\t\t   the loader animation can't re-trigger on dialog close. Falls back to\n\t\t   window.print() if the iframe path fails. *\/\n\t\twindow.vrPrintReport = window.vrPrintReport || function(btn) {\n\t\t\ttry {\n\t\t\t\tvar wrap = (btn && btn.closest) ? btn.closest('.vr-wrap') : null;\n\t\t\t\tvar reportRoot = wrap ? wrap.querySelector('#vr-report-root')\n\t\t\t\t                      : document.getElementById('vr-report-root');\n\t\t\t\tif (!reportRoot) { window.print(); return; }\n\t\t\t\tvar printFooter = wrap ? wrap.querySelector('.vr-print-footer') : null;\n\n\t\t\t\t\/\/ Clone every <style> that defines the report's visual system. Look for\n\t\t\t\t\/\/ .vr-report \/ .vr-access- markers so unrelated theme styles aren't dragged in.\n\t\t\t\tvar styleHTML = '';\n\t\t\t\tdocument.querySelectorAll('style').forEach(function(s){\n\t\t\t\t\tvar txt = s.textContent || '';\n\t\t\t\t\tif (txt.indexOf('.vr-report') !== -1 || txt.indexOf('.vr-access-') !== -1) {\n\t\t\t\t\t\tstyleHTML += s.outerHTML;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\tiframe.setAttribute('aria-hidden','true');\n\t\t\t\tiframe.style.cssText = 'position:fixed;right:-10000px;bottom:0;width:820px;height:1100px;border:0;';\n\t\t\t\tdocument.body.appendChild(iframe);\n\n\t\t\t\tvar doc = iframe.contentDocument || (iframe.contentWindow && iframe.contentWindow.document);\n\t\t\t\tif (!doc) { iframe.remove(); window.print(); return; }\n\t\t\t\t\/\/ The inherited @media print uses body * { visibility: hidden } then\n\t\t\t\t\/\/ re-shows .vr-wrap *. Wrap the report in .vr-wrap so the re-show\n\t\t\t\t\/\/ catches it, AND append an override that force-revisits everything in\n\t\t\t\t\/\/ case the .vr-wrap selector ever gets refactored.\n\t\t\t\tdoc.open();\n\t\t\t\tdoc.write(\n\t\t\t\t\t'<!doctype html><html><head><meta charset=\"utf-8\"><title>Vehicle report<\/title>' +\n\t\t\t\t\tstyleHTML +\n\t\t\t\t\t'<style>html,body{margin:0;padding:0;background:#fff;}' +\n\t\t\t\t\t'body{padding:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;}' +\n\t\t\t\t\t'.vr-report{border:none !important;box-shadow:none !important;border-radius:0 !important;}' +\n\t\t\t\t\t'@page{margin:12mm;}' +\n\t\t\t\t\t'@media print{html,body,body *{visibility:visible !important;}' +\n\t\t\t\t\t'.vr-access-row,.vr-access-pill,.vr-access-btn{display:none !important;}}' +\n\t\t\t\t\t'<\/style>' +\n\t\t\t\t\t'<\/head><body><div class=\"vr-wrap\">' +\n\t\t\t\t\treportRoot.outerHTML +\n\t\t\t\t\t(printFooter ? printFooter.outerHTML : '') +\n\t\t\t\t\t'<\/div><\/body><\/html>'\n\t\t\t\t);\n\t\t\t\tdoc.close();\n\n\t\t\t\tvar fired = false;\n\t\t\t\tvar doPrint = function(){\n\t\t\t\t\tif (fired) return; fired = true;\n\t\t\t\t\ttry { iframe.contentWindow.focus(); iframe.contentWindow.print(); }\n\t\t\t\t\tcatch(e) { window.print(); }\n\t\t\t\t\tsetTimeout(function(){ try { iframe.remove(); } catch(e){} }, 1500);\n\t\t\t\t};\n\t\t\t\tiframe.onload = function(){ setTimeout(doPrint, 400); };\n\t\t\t\tsetTimeout(doPrint, 1800);\n\t\t\t} catch (e) {\n\t\t\t\twindow.print();\n\t\t\t}\n\t\t};\n\t\t<\/script>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>[carcheckz_purchase_summary]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-331","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/pages\/331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/comments?post=331"}],"version-history":[{"count":2,"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/pages\/331\/revisions"}],"predecessor-version":[{"id":509,"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/pages\/331\/revisions\/509"}],"wp:attachment":[{"href":"https:\/\/www.carcheckz.com\/bg\/wp-json\/wp\/v2\/media?parent=331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}