/*---- Init Javascript ------*/ var dealerCode = 'e649be6a5769a4ca55fc70697c326088'; var vin = ''; var dataLayerSnippet = ' '; /*============================================================================================================ // We want to add our Google Tag Manager (GTM) tag to the page as part of our JavaScript integration. This is // so that we can track interactions wih the plugin buttons. //============================================================================================================ */ (window.addEventListener('load', function() { if (document.querySelectorAll('[src="https://www.googletagmanager.com/gtm.js?id=GTM-55TLM44"]').length == 0) { // JS function to inject gtm head tag (function(w,d,s,l,i){ w[l]=w[l]||[]; w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'}); var f=d.getElementsByTagName(s)[0], j=d.createElement(s), dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-55TLM44'); if (dataLayerSnippet != undefined) { // Strip script tag from dataLayerSnippet string dataLayerSnippet = dataLayerSnippet.replace(/()|(<\/script>)/g, ''); // Create script node to append var scriptNode = document.createElement('script'); scriptNode.innerHTML += dataLayerSnippet; document.head.appendChild(scriptNode); } var gtmBodyCode = "" + "" + ""; var bodyTag = document.createElement('noscript'); document.body.insertBefore(bodyTag, document.body.firstChild); } })); var currencyFormat = function (num, decimals) { if (num === null || num === undefined) return ""; var numString = num.toString().replace(/,/g, ''); return "$" + parseFloat(numString).toFixed(decimals).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"); }; var populate = function (results) { if (results.msrpIncAccessories) { updateVal('ds_msrpIncAccessories', currencyFormat(results.msrpIncAccessories)); updateVal('ds_discount_off_msrp', currencyFormat(results.discount_off_msrp)); updateVal('ds_discount_off_msrp_before_rebates', currencyFormat(results.discount_off_msrp_before_rebates)); } if (results.rebates) { updateVal('ds_rebates', currencyFormat(results.rebates)); } if (results.sale_price) { updateVal('ds_sale_price', currencyFormat(results.sale_price)); } if (results.lease_payment) { updateVal('ds_lease_payment', currencyFormat(results.lease_payment)); updateVal('ds_lease_term', results.lease_term); updateVal('ds_lease_das', currencyFormat(results.lease_das)); updateVal('ds_lease_down', currencyFormat(results.lease_down)); updateVal('ds_lease_down_text', results.lease_down_text); updateVal('ds_lease_down_or_das', currencyFormat(results.lease_down_or_das)); if (!results.doNotUpdateModal) { updateModal('ds_lease_link', results.lease_frameurl, results.vin, 'lease', results.vehicleDescription); } } if (results.onepay_das) { updateVal('ds_onepay_das', currencyFormat(results.onepay_das)); updateVal('ds_onepay_term', currencyFormat(results.onepay_term)); updateVal('ds_onepay_mileage', currencyFormat(results.onepay_mileage)); updateVal('ds_onepay_down_text', results.onepay_down_text); updateVal('ds_onepay_down_or_das', currencyFormat(results.onepay_down_or_das)); if (!results.doNotUpdateModal) { updateModal('ds_onepay_link', results.onepay_frameurl, results.vin, 'onepay', results.vehicleDescription); } } else { jQuery(".ds_vin_" + results.vin).find(".dsp-one-pay-button").hide(); } if (results.finance_apr) { updateVal('ds_finance_apr', (results.finance_apr)); } if (results.finance_lowapr) { updateVal('ds_finance_lowapr', (results.finance_lowapr)); updateVal('ds_finance_lowapr_max_term', (results.finance_lowapr_max_term)); if (!results.doNotUpdateModal) { updateModal('ds_finance_lowapr_link', results.finance_lowapr_frameurl, results.vin, 'finance', results.vehicleDescription); } } else { jQuery(".ds_vin_" + results.vin).find(".dsp-banner-footer").hide(); } if (results.finance_payment) { updateVal('ds_finance_payment', currencyFormat(results.finance_payment)); updateVal('ds_finance_term', results.finance_term); updateVal('ds_finance_das', currencyFormat(results.finance_das)); updateVal('ds_finance_down', currencyFormat(results.finance_down)); updateVal('ds_finance_down_text', results.finance_down_text); updateVal('ds_finance_down_or_das', currencyFormat(results.finance_down_or_das)); if (!results.doNotUpdateModal) { updateModal('ds_finance_link', results.finance_frameurl, results.vin, 'finance', results.vehicleDescription); } } }; var updateVal = function (key, value) { var match = jQuery('.' + key).html(value); match.removeClass(key); }; var updateModal = function (key, frame_url, vin, buttonType, description) { var tag = jQuery("a." + key); var newClass = key + vin; tag.removeClass(key).addClass(newClass).attr('href', frame_url); //This adds a class to fancybox for apple users if (navigator.vendor === "Apple Computer, Inc.") { jQuery("a." + newClass).click(function(e) { e.preventDefault(); e.stopPropagation(); jQuery.fancybox({ 'transitionIn': 'none', 'transitionOut': 'none', 'type': 'iframe', 'wrapCSS': 'fancyIOS', 'href': frame_url, }); }); } else { jQuery("a." + newClass).click(function(e) { e.preventDefault(); e.stopPropagation(); jQuery.fancybox({ 'transitionIn': 'none', 'transitionOut': 'none', 'type': 'iframe', 'href': frame_url, 'helpers': { overlay: { locked: false }} }); }); } // These are used by google tag manager. jQuery("a." + newClass).attr('data-payment-type', buttonType); jQuery("a." + newClass).attr('data-vehicle-description', description); }; var updatePluginForSuperLead = function(key, vin, requestUrl, requestData, buttonType, description) { var tag = jQuery('a.' + key); var newClass = key + vin; tag.removeClass(key).addClass(newClass).attr('href', requestUrl); jQuery('a.' + newClass).unbind(); jQuery('a.' + newClass).click(function(e) { e.preventDefault(); e.stopPropagation(); var textLink = '.dsp-banner-right a.' + newClass; jQuery(textLink).html('

Sending...

'); jQuery.ajax({ url: $(this).attr('href'), type: 'POST', data: requestData, complete: function(xhr, status) { jQuery(textLink).html('

Submitted

'); } }); }); // These are used by google tag manager. jQuery('a.' + newClass).attr('data-payment-type', buttonType); jQuery('a.' + newClass).attr('data-vehicle-description', description); }; var GetURLParameter = function (sParam) { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return sParameterName[1]; } } }; var removeURLParameter = function (url, parameter) { var urlparts= url.split('?'); if (urlparts.length>=2) { var prefix= encodeURIComponent(parameter)+'='; var pars= urlparts[1].split(/[&;]/g); for (var i= pars.length; i-- > 0;) { if (pars[i].lastIndexOf(prefix, 0) !== -1) { pars.splice(i, 1); } } return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ''); } return url; }; var setSigninCookie = function (leadId) { if (document.cookie.search('vrp-form=visited') < 0) { jQuery.getScript("https://cdnjs.cloudflare.com/ajax/libs/js-cookie/2.1.4/js.cookie.min.js", function (data, textStatus, jqxhr) { Cookies.set('vrp-form', 'visited', { expires: 7, path: '/' }); if (leadId) { Cookies.set('DSPrimaryLeadId', leadId, { expires: 7, path: '/'}); } }); } }; var getCookie = function(cookieName) { var name = cookieName + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ''; }; var requireSigninIfDesired = function (results, signed_in, dealerCode, vin) { var sign_in_required = parseInt(results.sign_in_required); var leadId = 0; if (sign_in_required && !signed_in) { /* * checks to see if sign in is required and then signs the user in if sign_in_user is set. * */ var sign_in_user = GetURLParameter('sign_in_user'); leadId = GetURLParameter('leadId'); var show_sign_in = true; if (results.payment_is_a_special && results.show_specials_without_signing_in) { show_sign_in = false; } if (results.loaner == 1) { if (results.show_loaners_without_signing_in) { show_sign_in = false; } } else if (results.new == 0 && results.show_used_without_signing_in) { show_sign_in = false; } if (sign_in_user) { setSigninCookie(leadId); signed_in = true; } else if (show_sign_in) { /* * if sign in required and the user is not signed in, add code to alert the user to sign in instead of payments * */ var sign_in_url = ('https://plugins.dealerscience.com/iframe.php?target=signin' + '&dealerCode=' + dealerCode + '&vin=' + vin + '&reloadtopframe=' + encodeURIComponent(window.top.location.href)); var lease_sign_in_url = (sign_in_url + '&monthly=' + results.lease_payment + '&down=' + results.lease_down_or_das + '&url=' + encodeURIComponent(results.lease_url)); var finance_sign_in_url = (sign_in_url + '&monthly=' + results.finance_payment + '&down=' + results.finance_down_or_das + '&url=' + encodeURIComponent(results.finance_url)); if (results.hasOwnProperty('onepay_url')) { var onepay_sign_in_url = (sign_in_url + '&down=' + results.onepay_down_or_das + '&url=' + encodeURIComponent(results.onepay_url)); } if (results.sign_in_required == 6) { // indicate we are not updating the modal when we populate results.doNotUpdateModal = true; sign_in_url = 'https://plugins.dealerscience.com/iframe.php?target=signin&action=nocalclead' + '&dealerCode=' + dealerCode + '&vin=' + vin; lease_sign_in_url = sign_in_url + '&paymentType=lease'; finance_sign_in_url = sign_in_url + '&paymentType=finance'; if (onepay_sign_in_url) { onepay_sign_in_url = sign_in_url + '&paymentType=onepay'; updateVal('configureOnePayLease', 'Reserve
One Pay'); } updateVal('configureLease', 'Reserve
Lease'); updateVal('financeNow', 'Reserve
Finance'); } else { // do not show pricing for these results.sale_price = null; results.finance_payment = null; results.lease_payment = null; results.finance_lowapr = null; results.onepay_das = null; if (results.sign_in_required == 5) { updateVal('ds_lease_payment', '$XXX'); updateVal('ds_lease_das', currencyFormat(results.lease_das)); updateVal('ds_lease_down', currencyFormat(results.lease_down)); updateVal('ds_lease_down_text', results.lease_down_text); updateVal('ds_lease_down_or_das', currencyFormat(results.lease_down_or_das)); updateVal('ds_finance_payment', '$XXX'); updateVal('ds_finance_das', currencyFormat(results.finance_das)); updateVal('ds_finance_down', currencyFormat(results.finance_down)); updateVal('ds_finance_down_text', results.finance_down_text); updateVal('ds_finance_down_or_das', currencyFormat(results.finance_down_or_das)); updateVal('configureLease', 'Instant
Lease
Quote'); updateVal('financeNow', 'Instant
Finance
Quote'); if (onepay_sign_in_url) { updateVal('ds_onepay_das', '$XXX'); updateVal('ds_onepay_down_or_das', '$XXX'); updateVal('ds_onepay_term', currencyFormat(results.onepay_term)); updateVal('ds_onepay_mileage', currencyFormat(results.onepay_mileage)); updateVal('ds_onepay_down_text', results.onepay_down_text); updateVal('configureOnePayLease', 'Instant
OnePay
Quote'); } } else if (results.sign_in_required == 7) { // indicate we are not updating the modal when we populate results.doNotUpdateModal = true; sign_in_url = 'https://plugins.dealerscience.com/iframe.php?target=signin&action=instantpricequote' + '&dealerCode=' + dealerCode + '&vin=' + vin; lease_sign_in_url = sign_in_url + '&paymentType=lease'; finance_sign_in_url = sign_in_url + '&paymentType=finance'; if (onepay_sign_in_url) { onepay_sign_in_url = sign_in_url + '$paymentType=onepay'; } } else { jQuery('.das').html(''); jQuery('.payment').html("

Sign in For
Payments

"); // Display Unlock message if new car or sign in is not required on used if ( parseInt(results.new) || parseInt(results.show_used_without_signing_in) ) jQuery('.sign_in_price_placeholder,.sign_in_price_discount_placeholder').html("Unlock"); else // remove unlock container jQuery('.sign_in_price_container').html(''); } } updateModal('ds_signin_link', sign_in_url, results.vin, 'lease', results.vehicleDescription); updateModal('ds_lease_link', lease_sign_in_url, results.vin, 'lease', results.vehicleDescription); updateModal('ds_finance_link', finance_sign_in_url, results.vin, 'finance', results.vehicleDescription); if (onepay_sign_in_url) { updateModal('ds_onepay_link', onepay_sign_in_url, results.vin, 'onepay', results.vehicleDescription); } } } if (signed_in) { if (results.sign_in_required == 5) { // indicate we are not updating the modal when we populate results.doNotUpdateModal = true; updateVal('configureLease', 'Claim
Lease'); updateVal('financeNow', 'Claim
Finance'); // update the modal action here to do the super lead submission var superLeadUrl = 'https://plugins.dealerscience.com/api/leads/super'; updatePluginForSuperLead('ds_lease_link', results.vin, superLeadUrl, { "dealerCode": dealerCode, "vin": vin, "leadId": leadId ? leadId : getCookie('DSPrimaryLeadId'), "monthly": results.lease_payment, "down": results.lease_down_or_das, "url": encodeURIComponent(results.lease_url), "paymentType": "lease" }, 'lease', results.vehicleDescription, 'configureLease'); var financeLinks = ['ds_finance_link']; // if we have a low apr link, need to update this too if (results.finance_lowapr) { financeLinks.push('ds_finance_lowapr_link'); } for (var i in financeLinks) { updatePluginForSuperLead(financeLinks[i], results.vin, superLeadUrl, { "dealerCode": dealerCode, "vin": vin, "leadId": leadId ? leadId : getCookie('DSPrimaryLeadId'), "monthly": results.finance_payment, "down": results.finance_down_or_das, "url": encodeURIComponent(results.finance_url), "paymentType": "finance" }, 'finance', results.vehicleDescription, 'financeNow'); } // if we have a onepay value if (results.hasOwnProperty('onepay_url')) { updateVal('configureOnePayLease', 'Claim
One Pay'); updatePluginForSuperLead('ds_onepay_link', results.vin, superLeadUrl, { "dealerCode": dealerCode, "vin": vin, "leadId": leadId ? leadId : getCookie('DSPrimaryLeadId'), "down": results.onepay_down_or_das, "url": encodeURIComponent(results.onepay_url), "paymentType": "onepay" }, 'onepay', results.vehicleDescription, 'configureOnePayLease'); } } } return results; }; var loadDependencies = function() { jQuery.fn.matchVin = function () { return this.filter(function () { return jQuery(this).text().length >= 17; }); }; }; var checkJqueryLoaded = function(startTime, timeoutMs, callback) { if (window.jQuery) { console.log('SUCCESS: jQuery dependency loaded.'); loadDependencies(); callback(); } else { if ((new Date().getTime() - startTime) > timeoutMs) { console.log('ERROR: Failed to load jQuery dependency.'); return; } else { setTimeout(function() { console.log('PENDING: Waiting for jQuery to load.'); checkJqueryLoaded(startTime, timeoutMs, callback); }, 100); } } }; var loadJquery = function(callback) { if (typeof window.jQuery === 'undefined') { var script = document.createElement('script'); script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.1/jquery.min.js'; script.type = 'text/javascript'; document.getElementsByTagName('head')[0].appendChild(script); checkJqueryLoaded(new Date().getTime(), 10000, callback); } else { loadDependencies(); callback(); } }; var loadFancyBox = function(callback) { loadJquery(function() { jQuery(document).ready(function() { // if not loaded, or using fancybox1/fancybox3, we need to load version 2 if (typeof jQuery.fancybox === 'undefined' || (typeof jQuery.fancybox !== 'undefined' && typeof jQuery.fancybox.getInstance === 'function') || (typeof jQuery.fancybox !== 'undefined' && typeof jQuery.fancybox.version === 'undefined')) { jQuery('head').append(''); jQuery.getScript("https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js", function (data, textStatus, jqxhr) { callback(); }); } else { callback(); } }); }); }; var loadEcommerceTools = function(callback) { if (!window.dealerSciencePaymentsAdded) { window.dealerSciencePaymentsAdded = true; callback(); } }; /** * Single integration script for both SRP and VDP pages */ var populatePlugins = function(leaseDetailsTemplate, financeDetailsTemplate, onepayDetailsTemplate, pricingDetailsTemplate, signedIn, paymenttype) { // target each vehicle row that hasn't already had the dealerScienced class applied, meaning we already covered it jQuery("div.dsPaymentButtonsContainer:not(.dealerScienced)").each(function(index, element) { // mark this vehicle block as done jQuery(element).addClass('dealerScienced'); var vin = jQuery(element).attr('data-vin'); if (vin) { var apiurl = 'https://plugins.dealerscience.com/webservices/script/?v=0.2&key=FJA12D159&details&paymenttype=' + paymenttype + '&category=2&dealerCode=' + dealerCode + '&vin=' + vin; // get the vehicle info for the plugins jQuery.getJSON(apiurl, function(results) { if (results.vin) { var templates = ''; templates += pricingDetailsTemplate; // check if we're showing lease or finance if (results.show_lease == 1) { templates += leaseDetailsTemplate; } if (results.show_finance == 1) { templates += financeDetailsTemplate; } if (results.show_onepay == 1) { templates += onepayDetailsTemplate; } jQuery(element).html(templates); // check if we need to sign in var resultsAfterSignin = requireSigninIfDesired(results, signedIn, dealerCode, results.vin); populate(resultsAfterSignin); /* some dealers may require specific actions to the page. The scripts themselves would be defined in the dealer specific template, so if it is defined in the template then execute it here */ if (typeof dealerSpecificLeaseAction === 'function') { dealerSpecificLeaseAction(resultsAfterSignin.vin); } if (typeof dealerSpecificFinanceAction === 'function') { dealerSpecificFinanceAction(resultsAfterSignin.vin); } if (typeof dealerSpecificOnepayAction === 'function') { dealerSpecificOnepayAction(resultsAfterSignin.vin); } } }); } }); }; (function() { window.loadPaymentButtons = function() { console.log('ACTION: Loading payment buttons.'); loadJquery(function() { var apiurl = 'https://plugins.dealerscience.com/webservices/ds/jstemplate/?v=0.2&key=FJA12D159&dealerCode=' + dealerCode + '&category=generic_script&subcategory[]=lease&subcategory[]=finance&subcategory[]=lease_finance_header&subcategory[]=generic_script_lease_finance_header&subcategory[]=onepay&subcategory[]=pricing'; jQuery.getJSON(apiurl, function(results) { var leaseDetailsTemplate = results['lease']; var financeDetailsTemplate = results['finance']; var onepayDetailsTemplate = results['onepay']; var pricingDetailsTemplate = results['pricing']; var headerTemplate = results['lease_finance_header']; var genericScriptHeaderTemplate = results['generic_script_lease_finance_header']; var paymenttype = results['paymenttype']; var signedIn = (document.cookie.search('vrp-form=visited') >= 0 ? true : false); loadFancyBox(function() { populatePlugins(leaseDetailsTemplate, financeDetailsTemplate, onepayDetailsTemplate, pricingDetailsTemplate, signedIn, paymenttype); }); jQuery(headerTemplate).appendTo('head'); jQuery(genericScriptHeaderTemplate).appendTo('head'); }); }); }; loadEcommerceTools(function() { loadPaymentButtons(); }); }());