console.log('JWT blank. Not taking any login action.'); //************************************************ //********** GLOBAL PD/ONE VARIABLES ************* //************************************************ //************************************************ //************ JS/CSS FILE ROUTINES ************* //************************************************ function pdLoadJsCssFile(filename, filetype){ if (filetype=="js") { var fileref=document.createElement('script'); fileref.setAttribute("type","text/javascript"); fileref.setAttribute("async",true); fileref.setAttribute("src", filename); } else if (filetype=="css") { var fileref=document.createElement("link"); fileref.setAttribute("rel", "stylesheet"); fileref.setAttribute("type", "text/css"); fileref.setAttribute("href", filename); } if (typeof fileref!="undefined") document.getElementsByTagName("head")[0].appendChild(fileref); } //************************************************ //*** UTILITY TO EXECUTE SCRIPTS IN A CONTAINER *** //************************************************ function pdRunScriptsIn(element) { if (!element) return; if (!window.__pdExecutedScriptsSet) window.__pdExecutedScriptsSet = new Set(); var scripts = element.querySelectorAll('script'); console.log('pdRunScriptsIn: found', scripts.length, 'script tag(s) inside injected content.'); scripts.forEach(function(originalScript, idx) { var signature = originalScript.src ? 'src:' + originalScript.src : 'inline:' + (originalScript.textContent || '').trim(); if (window.__pdExecutedScriptsSet.has(signature)) { console.log('pdRunScriptsIn: skipping already executed script #' + (idx + 1)); originalScript.remove(); return; } // Skip known inline definitions if the global already exists (prevents duplicate var errors) if (!originalScript.src && originalScript.textContent && originalScript.textContent.indexOf('EmailInputManager') !== -1 && typeof window.EmailInputManager !== 'undefined') { console.log('pdRunScriptsIn: skipping inline EmailInputManager because it already exists.'); originalScript.remove(); return; } var newScript = document.createElement('script'); // Preserve external vs inline scripts if (originalScript.src) { newScript.src = originalScript.src; newScript.async = originalScript.async; newScript.defer = originalScript.defer; } else { newScript.textContent = originalScript.textContent; } // Move over type/attrs in case module/type is used if (originalScript.type) newScript.type = originalScript.type; // Append to head to ensure execution in most browsers window.__pdExecutedScriptsSet.add(signature); document.head.appendChild(newScript); console.log('pdRunScriptsIn: executed script #' + (idx + 1) + (originalScript.src ? ' src=' + originalScript.src : ' (inline)')); originalScript.remove(); }); } //************************************************ //*** UTILITY TO NORMALIZE MODULE NAMES ********** //************************************************ function pdNormalizeModuleName(raw) { if (!raw) return ''; var name = String(raw); if (name.indexOf('?') !== -1) name = name.split('?')[0]; if (name.indexOf('&') !== -1) name = name.split('&')[0]; if (name.indexOf('#') !== -1) name = name.split('#')[0]; if (name.indexOf('/') !== -1) { var parts = name.split('/').filter(function(p){ return p; }); var lastMod = parts.find(function(p){ return p.indexOf('mod_') === 0; }); if (lastMod) name = lastMod; else name = parts[parts.length - 1] || name; } return name.trim(); } //************************************************ //*** UTILITY TO PULL MODULE NAME FROM A URL ***** //************************************************ function pdGetModuleFromUrl(url) { try { var parsed = new URL(url, window.location.origin); return pdNormalizeModuleName(parsed.searchParams.get('module') || ''); } catch (e) { return ''; } } //************************************************ //****** PD/ONE FEATURE SPECIFIC CSS/JS ********* //************************************************ pdLoadJsCssFile("https://cdn.practicaldatacore.com/my-justforjeeps-com/mod_bigcommerce/pdCompiledScript.js?cb=1972191", "js"); pdLoadJsCssFile("https://cdn.practicaldatacore.com/my-justforjeeps-com/mod_pdOneStyleEditor/pdPublicStyle.css?cb=493047", "css"); //*** CATEGORY ID:**** //*** PRODUCT ID:**** //*** PRODUCT ID LIST CSV:**** //*** public_mod_structuredData_renderJsonByItemId found //*** public_mod_structuredData enabled var script = document.createElement('script'); script.setAttribute('type', 'application/ld+json'); script.innerHTML = "{\"@context\":\"http:\\/\\/schema.org\",\"@type\":\"Organization\",\"sameAs\":[\"https://www.facebook.com/JustForJeeps\",\"https://twitter.com/JustForJeeps\",\"https://www.instagram.com/justforjeeps/\",\"https://www.pinterest.com/justforjeeps/\"],\"name\":\"JustForJeeps.com\",\"url\":\"https:\\/\\/www.justforjeeps.com\\/\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"56 Boston Providence Tpke\",\"addressLocality\":\"Norwood\",\"addressRegion\":\"MA\",\"addressCountry\":\"US\",\"postalCode\":\"02062\"},\"founders\":[{\"@type\":\"Person\",\"name\":\"Peter Catanese\"}],\"logo\":\"https:\\/\\/my.justforjeeps.com\\/pd_custom\\/core\\/structuredData\\/images\\/imageCompanyLogo.jpg\",\"foundingDate\":\"2004\",\"contactPoint\":{\"@type\":\"ContactPoint\",\"email\":\"support@justforjeeps.com\",\"telephone\":\"+1-888-651-5337\",\"contactType\":\"Customer Support\"}}" document.getElementsByTagName('head')[0].appendChild(script); ; var script = document.createElement('script'); script.setAttribute('type', 'application/ld+json'); script.innerHTML = "{\"@context\":\"http:\\/\\/schema.org\",\"@type\":\"LocalBusiness\",\"address\":{\"@type\":\"PostalAddress\"},\"priceRange\":\"0.6700-3465.9900\"}" document.getElementsByTagName('head')[0].appendChild(script); ; function pdGetAccountNavRoot() { var navRoot = document.querySelector('.navBar-section'); if (navRoot) return navRoot; navRoot = document.querySelector('.navBar.navBar--sub.navBar--account .navBar-section'); if (navRoot) return navRoot; navRoot = document.querySelector('.navBar.navBar--sub.navBar--account'); if (navRoot) return navRoot; navRoot = document.querySelector('.account-nav'); if (navRoot) return navRoot; navRoot = document.querySelector('.b2b-account-nav, .b2b-side-nav, .b2b-sidebar nav, .b2b-sidebar, .b3-side-nav, .b3-nav, .b3-sidebar nav, .b3-sidebar, .b2b-portal__nav, .b3-portal__nav'); return navRoot; } function pdGetAccountNavItem(root, hrefFragment, fallbackSelector) { if (!root) return null; var link = hrefFragment ? root.querySelector('a[href*="' + hrefFragment + '"]') : null; if (link && link.closest) { var item = link.closest('li'); if (item) return item; } return fallbackSelector ? root.querySelector(fallbackSelector) : null; } function pdInjectAccountLinkModifications() { //***** INJECT REWARDS LINK **** var navRoot = pdGetAccountNavRoot(); var navItem = pdGetAccountNavItem(navRoot, "account.php?action=order_status", "li:nth-child(2)"); if (navItem) { navItem.insertAdjacentHTML("afterend", ''); } //***** INJECT OLDER ORDER HISTORY LINK **** var navRoot = pdGetAccountNavRoot(); var navItem = pdGetAccountNavItem(navRoot, "account.php?action=order_status", "li:nth-child(1)"); if (navItem) { navItem.insertAdjacentHTML("afterend", ''); } } pdInjectAccountLinkModifications();var pdPublicUrl = 'https://my.justforjeeps.com/'; var pdUseLegacyRewardsPage = true; function pdShouldUseRewards2025() { return !pdUseLegacyRewardsPage; } function insertDivUnderH1(divClass = "inserted-under-h1") { var pageName = window.location.pathname.split("/").pop(); if (pageName !== "login.php" && pageName !== "cart.php" && pageName !== "checkout") return; var params = new URLSearchParams(window.location.search || ""); var action = params.get("action") || "login"; if (pageName === "login.php" && action === "reset_password") return; var bannerHtml = ""; var bannerTemplateData = {"rewardsPercentageBack":3.33,"pointsAwardedForNewSignUp":0}; if (!bannerHtml) return; if (pageName === "login.php" && action === "login" && !true) return; if (pageName === "login.php" && action === "create_account" && !true) return; if (pageName === "cart.php" && !true) return; if (pageName === "checkout" && !true) return; function pdRenderBannerTemplate(template, data) { if (!template || !data) return template || ''; template = template.replace(/\{\{#if\s+(\w+)\}\}([\s\S]*?)\{\{\/if\}\}/g, function(_, key, inner) { var val = data[key]; if (val === undefined || val === null) return ''; if (typeof val === 'number' && val === 0) return ''; if (typeof val === 'string' && val.trim() === '') return ''; return inner; }); template = template.replace(/\{\{(\w+)\}\}/g, function(_, key) { var val = data[key]; return (val === undefined || val === null) ? '' : String(val); }); return template; } bannerHtml = pdRenderBannerTemplate(bannerHtml, bannerTemplateData); var div = document.createElement("div"); div.className = divClass; div.innerHTML = bannerHtml; if (pageName === "checkout") { var checkoutPrimary = document.querySelector(".layout.optimizedCheckout-contentPrimary"); if (checkoutPrimary) { checkoutPrimary.insertAdjacentElement("afterbegin", div); return; } } var h1 = document.querySelector("h1.page-heading"); if (!h1) return; if (pageName === "cart.php") { h1.insertAdjacentElement("afterend", div); return; } if (action === "login") { var loginRow = document.querySelector(".login-row"); if (loginRow) { loginRow.insertAdjacentElement("afterbegin", div); return; } } if (action === "create_account") { var accountBody = document.querySelector(".account-body"); if (accountBody) { accountBody.insertAdjacentElement("afterbegin", div); return; } } h1.insertAdjacentElement("afterend", div); } function pdInitAccountModuleContent(){ console.log('pdPageScript2025: DOMContentLoaded fired'); const urlParams = new URLSearchParams(location.search); var activeNavItem = document.querySelector('.navBar-section .is-active'); var prevLinkElem = activeNavItem ? activeNavItem.dataset.pdLinkElem : null; var prevLinkTarget = activeNavItem ? activeNavItem.dataset.pdLinkElemTarget : null; if (prevLinkElem && prevLinkTarget) { var prevTargetElem = document.querySelector(prevLinkTarget); if (prevTargetElem) { prevTargetElem.innerHTML = prevLinkElem; } delete activeNavItem.dataset.pdLinkElem; delete activeNavItem.dataset.pdLinkElemTarget; } if (urlParams.has('pd_module_content')){ console.log('pdPageScript2025: pd_module_content detected:', urlParams.get('pd_module_content')); console.log('pdPageScript2025: pd_module_subNav:', urlParams.get('pd_module_subNav')); var module = urlParams.get('pd_module_content'); var subNav = urlParams.get('pd_module_subNav'); var moduleLink = document.querySelector('#pdContent_'+module+' a'); var moduleTitle = moduleLink ? moduleLink.innerHTML : ''; var currentUrl = window.location.href; var currentUrlNoQuery = currentUrl.substring(0, currentUrl.indexOf('?')); console.log(currentUrlNoQuery); activeNavItem = document.querySelector('.navBar-section .is-active'); var currentTab = activeNavItem ? activeNavItem.innerHTML : ''; if (activeNavItem && activeNavItem.classList.contains('pdLinkEvent') == false){ if(activeNavItem.querySelector('.navBar-action')){ } else { activeNavItem.innerHTML = ''+currentTab+''; } } if (activeNavItem) { activeNavItem.dataset.pdLinkElemTarget = '#pdContent_'+module; var moduleItem = document.querySelector('#pdContent_'+module); activeNavItem.dataset.pdLinkElem = moduleItem ? moduleItem.innerHTML : ''; } var moduleItem = document.querySelector('#pdContent_'+module); if (moduleItem) { moduleItem.innerHTML = moduleLink ? moduleLink.textContent : ''; } if (activeNavItem) { activeNavItem.classList.remove('is-active'); } if (moduleItem) { moduleItem.classList.add('is-active'); } var pageHeading = document.querySelector('.page-heading'); if (pageHeading) { pageHeading.innerHTML = moduleTitle; } if (subNav !== '' && subNav !== null){ url = pdPublicUrl+'/'+module+'/'+subNav+'.php?module='+module; } else { url = pdPublicUrl+'/'+module+'/index.php?module='+module; } console.log('pdPageScript2025: calling pdOneAjaxLinkHandler with URL:', url); pdOneAjaxLinkHandler(url); } insertDivUnderH1(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', pdInitAccountModuleContent); } else { pdInitAccountModuleContent(); } document.addEventListener('submit', function(e) { var form = e.target.closest('.pdModal form'); if (!form) { return; } e.preventDefault(); e.stopImmediatePropagation(); pdOneAjaxFormHandler(form); }, true); document.addEventListener('submit', function(e) { var form = e.target.closest('#pdModuleContent form'); if (!form) { return; } e.preventDefault(); e.stopImmediatePropagation(); pdOneAjaxFormHandler(form); }, true); document.addEventListener('click', function(e) { var link = e.target.closest('.pdLinkEvent'); if (!link) { return; } var currentUrl = window.location.href; activeNavItem = document.querySelector('.navBar-section .is-active'); var activeNavAction = activeNavItem ? activeNavItem.querySelector('.navBar-action') : null; var currentTab = activeNavAction ? activeNavAction.innerHTML : (activeNavItem ? activeNavItem.innerHTML : ''); console.log(link.innerHTML); if (activeNavItem && activeNavItem.classList.contains('pdLinkEvent') == false){ activeNavItem.innerHTML = ''+currentTab+''; } if (activeNavItem) { activeNavItem.classList.remove('is-active'); } if (link.parentElement) { link.parentElement.classList.add('is-active'); } var url = link.getAttribute('href'); e.preventDefault(); e.stopImmediatePropagation(); pdOneAjaxLinkHandler(url); }); document.addEventListener('click', function(e) { var link = e.target.closest('#pdModuleContent a'); if (!link) { return; } var url = link.getAttribute('href'); link.setAttribute("href", "#"); e.preventDefault(); pdOneAjaxLinkHandler(url); }); function pdShowRewardsLoadError(message){ var accountContent = document.querySelector('.account-content'); if (!accountContent) { return; } var safeMessage = message || 'Rewards could not be loaded.'; accountContent.innerHTML = '
' + safeMessage + '
'; } var pdRewardsForceLegacy = false; function pdLoadRewardsLegacyFallback(options){ options = options || {}; pdRewardsForceLegacy = true; var url = pdPublicUrl + '/mod_myRewards/index.php?module=mod_myRewards'; var method = (options.method || 'GET').toUpperCase(); var queryString = options.queryString || ''; if (!queryString && options.body) { queryString = options.body.toString(); } if (queryString) { url += (url.indexOf('?') !== -1 ? '&' : '?') + queryString; } console.log('pdLoadRewardsLegacyFallback:', url, 'method:', method); if (method === 'GET') { pdOneAjaxLinkHandler(url); return; } var fetchOptions = { method: method, credentials: 'include' }; if (options.body) { fetchOptions.headers = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }; fetchOptions.body = options.body; } fetch(url, fetchOptions) .then(function(response) { return response.text(); }) .then(function(result) { console.log('pdLoadRewardsLegacyFallback success; length:', (result || '').length); var accountContent = document.querySelector('.account-content'); if (accountContent) { accountContent.innerHTML = result; } if (typeof pdRunScriptsIn === 'function') { pdRunScriptsIn(document.querySelector('.account-content')); } }) .catch(function(errMsg) { console.log('pdLoadRewardsLegacyFallback error', errMsg && errMsg['statusText'] ? errMsg['statusText'] : errMsg); pdShowRewardsLoadError('Rewards could not be loaded.'); }); } function pdLoadRewards2025Ajax(options){ options = options || {}; var endpoint = pdPublicUrl + '/mod_myRewards/ajax/renderRewardsPage2025.php'; var method = (options.method || 'GET').toUpperCase(); var queryString = options.queryString || ''; if (!queryString && options.body && method === 'GET') { queryString = options.body.toString(); } if (queryString) { endpoint += (endpoint.indexOf('?') !== -1 ? '&' : '?') + queryString; } var fetchOptions = { method: method, credentials: 'include', headers: { 'Accept': 'application/json' } }; if (method != 'GET' && options.body) { fetchOptions.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; fetchOptions.body = options.body; } var accountContent = document.querySelector('.account-content'); if (accountContent) { accountContent.innerHTML = '
Loading rewards...
'; } console.log('pdLoadRewards2025Ajax:', endpoint, 'method:', method); return fetch(endpoint, fetchOptions) .then(function(response) { if (!response.ok) { throw new Error('HTTP ' + response.status); } return response.json(); }) .then(function(data) { console.log('pdLoadRewards2025Ajax success; html length:', (data.html || '').length); if (data && data.success === false) { pdShowRewardsLoadError(data.message || 'Rewards could not be loaded.'); return; } if (data.redirectUrl) { window.location.href = data.redirectUrl; return; } var accountContent = document.querySelector('.account-content'); if (accountContent) { accountContent.innerHTML = data.html || ''; } if (!data.html) { pdLoadRewardsLegacyFallback(options); return; } if (data.js) { document.querySelectorAll('script[data-pd-rewards-ajax="true"]').forEach(function(script) { if (script.parentNode) script.parentNode.removeChild(script); }); var script = document.createElement('script'); script.type = 'text/javascript'; script.setAttribute('data-pd-rewards-ajax', 'true'); script.text = data.js; document.body.appendChild(script); try { document.dispatchEvent(new Event('DOMContentLoaded', { bubbles: true })); } catch(e) {} } }) .catch(function(errMsg) { console.log('pdLoadRewards2025Ajax error', errMsg && errMsg['statusText'] ? errMsg['statusText'] : errMsg); pdLoadRewardsLegacyFallback(options); }); } function pdOneAjaxLinkHandler(url){ console.log('pdOneAjaxLinkHandler entry:', url); console.log("pdOneAjaxLinkHandler:" + url); var contentElem = document.querySelector('#pdModuleContent'); var dataElem = document.querySelector('#pdModuleData'); var currModule = contentElem ? contentElem.getAttribute('data-currmodule') : null; if (!currModule || currModule === '' || currModule === undefined) { currModule = dataElem ? dataElem.getAttribute('data-currmodule') : null; } currModule = pdNormalizeModuleName(currModule); var externalLink = false; var targetModule = pdGetModuleFromUrl(url); if (!targetModule && currModule) { targetModule = currModule; } if (!targetModule) { // As a last resort, try to parse the path portion (e.g., /mod_myRewards/) try { var tmpUrl = new URL(url, window.location.origin); var parts = tmpUrl.pathname.split('/').filter(function(p){ return p; }); var maybeMod = parts.find(function(p){ return p.indexOf('mod_') === 0; }); if (maybeMod) targetModule = maybeMod; } catch(e) {} } console.log('pdOneAjaxLinkHandler: targetModule =', targetModule, 'currModule =', currModule); console.log('pdOneAjaxLinkHandler: targetModule decision point; targetModule=', targetModule); if (targetModule === 'mod_myRewards' && pdShouldUseRewards2025() && !pdRewardsForceLegacy) { var queryString = ''; try { var tmpUrl = new URL(url, window.location.origin); queryString = tmpUrl.search ? tmpUrl.search.substring(1) : ''; } catch(e) {} console.log('pdOneAjaxLinkHandler: routing to pdLoadRewards2025Ajax with query:', queryString); pdLoadRewards2025Ajax({ method: 'GET', queryString: queryString }); return; } //assume http or https is external link var testUrl = url; var testUrlNoQuery = url.substring(0, testUrl.indexOf('?')); if (testUrlNoQuery !== ''){ if ((url.includes('https://') || url.includes('http://')) && !testUrlNoQuery.includes('mod_')){ externalLink = true; } } if (!externalLink && currModule !== '' && currModule !== undefined) { testUrl = testUrl.replace('https://', ''); testUrl = testUrl.replace('http://', ''); replaceStart = testUrl.indexOf('/'); if (replaceStart == -1){ replaceStart = 0; } testurl = testUrl.substring(replaceStart); //If no 'mod_' present assume reference path to current module and create absolute path if (!url.includes('mod_')){ url = pdPublicUrl+'/'+currModule+'/'+testurl; } //Else assume link to other module and create absolute path else { url = pdPublicUrl+'/'+testurl; } if (currModule) { url += (url.indexOf('?') !== -1 ? '&' : '?') + 'module=' + currModule; } } //Perform ajax if not linking to external site if (!externalLink){ if (url.includes('?')){ url += '&mode=inject'; } else { url += '?mode=inject'; } fetch(url, { method: 'POST', credentials: 'include' }) .then(function(response) { return response.text(); }) .then(function(result) { console.log('pdOneAjaxLinkHandler success; length:', (result || '').length); var accountContent = document.querySelector('.account-content'); if (accountContent) { accountContent.innerHTML = result; } if (targetModule === 'mod_myRewards') { console.log('pdOneAjaxLinkHandler: running pdRunScriptsIn for mod_myRewards.'); pdRunScriptsIn(document.querySelector('.account-content')); } }) .catch(function(errMsg) { console.log('pdOneAjaxLinkHandler error', errMsg && errMsg['statusText']); }); } else { // window.location.href = url; } } function pdOneAjaxFormHandler(form, module){ var dataElem = document.querySelector('#pdModuleData'); var contentElem = document.querySelector('#pdModuleContent'); var currModule = dataElem ? dataElem.getAttribute('data-currmodule') : null; if (currModule == undefined){ currModule = contentElem ? contentElem.getAttribute('data-currmodule') : null; } currModule = pdNormalizeModuleName(currModule); if (currModule === 'mod_myRewards' && pdShouldUseRewards2025()) { var method = (form.getAttribute('method') || 'GET').toUpperCase(); var formParams = new URLSearchParams(new FormData(form)); if (method === 'GET') { pdLoadRewards2025Ajax({ method: 'GET', queryString: formParams.toString() }); } else { pdLoadRewards2025Ajax({ method: method, body: formParams }); } return; } var formData = new FormData(form); console.log(Array.from(formData.entries())); var method = form.getAttribute('method') || 'GET'; var url = form.getAttribute('action') || ''; replaceStart = url.indexOf('/'); if (replaceStart == -1){ replaceStart = 0; } url = url.substring(replaceStart); url = pdPublicUrl+'/'+currModule+'/'+url+'?module='+currModule; if (url.includes('?')){ url += '&mode=inject'; } else { url += '?mode=inject'; } if (url.includes('?')){ url += '&module='+currModule; } else { url += '?module='+currModule; } var formParams = new URLSearchParams(formData); var fetchUrl = url; var fetchOptions = { method: method.toUpperCase(), credentials: 'include' }; if (fetchOptions.method === 'GET') { if (formParams.toString()) { fetchUrl += (fetchUrl.includes('?') ? '&' : '?') + formParams.toString(); } } else { fetchOptions.headers = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }; fetchOptions.body = formParams; } fetch(fetchUrl, fetchOptions) .then(function(response) { return response.text(); }) .then(function(result) { console.log('pdOneAjaxFormHandler success; length:', (result || '').length); var moduleContainerSelector = '#pdModuleContent'; var moduleContainer = form.closest(moduleContainerSelector); if (moduleContainer) { moduleContainer.outerHTML = result; } if (currModule === 'mod_myRewards' && pdShouldUseRewards2025() && !pdRewardsForceLegacy) { console.log('pdOneAjaxFormHandler: running pdRunScriptsIn for mod_myRewards.'); pdRunScriptsIn(document.querySelector(moduleContainerSelector)); } }) .catch(function(errMsg) { console.log('pdOneAjaxFormHandler error', errMsg); }); }var script = document.createElement('style'); script.setAttribute('type', 'text/css'); script.innerHTML = ``; document.getElementsByTagName('head')[0].appendChild(script); var pdOneBannerEl = document.getElementById('pd_pdOneBanner'); if (pdOneBannerEl) { //*** BANNER ALREADY EXISTS, DO NOT RE-INSERT } else { pdOneBannerEl = document.createElement('div'); pdOneBannerEl.id = 'pd_pdOneBanner'; if (document.body && document.body.firstChild) { document.body.insertBefore(pdOneBannerEl, document.body.firstChild); } else if (document.body) { document.body.appendChild(pdOneBannerEl); } } if (pdOneBannerEl) { pdOneBannerEl.innerHTML = "
Sign In My Account My Rewards
Create a Rewards Account! Earn Starter Points
"; } //*** COMPLETION CALLBACK try{pdContentRenderCompleted()}catch(e){}; //*** done.