(function() {
var targetHost = 'https://express.dolanautogroup.com';
var vinParam = '';
var buttonSelector = '.roadster-btn';
var isTouch = (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);
var body = document.body;
var disabled = false;
var wantPreload = true;
var marketplaceType = 'express';
var loadedVin, visibleVin;
window.roadster = window.roadster || {};
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'https://roadster.com/assets/embedded-32c1e910bc01fe5aa301d6660621a540bddcb4af0b5a8404edd24f5db0d2f96e.css';
document.head.appendChild(link);
var container = document.createElement('div');
container.id = 'roadster-container';
if (!document.getElementById(container.id)) {
container.innerHTML = '\
<div id="roadster-backdrop"></div>\
<div id="roadster-loader"></div>\
<button id="roadster-close" type="button">\
<svg fill="currentColor" viewBox="0 0 260 260" width="24" height="24">\
<path d="M6.17 259.907l-5.94-5.94L254.01.19l5.94 5.938zm247.66-.02L.05 6.107 5.99.17l253.78 253.778z"></path>\
</svg>\
</button>\
<iframe id="roadster-iframe" frameborder="0" seamless></iframe>';
if (false) container.classList.add('is-left');
body.appendChild(container);
}
var close = document.getElementById('roadster-close'),
iframe = document.getElementById('roadster-iframe'),
backdrop = document.getElementById('roadster-backdrop'),
loader = document.getElementById('roadster-loader'),
viewport = document.querySelector('meta[name=viewport]');
var roadsterViewport = 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no';
var initialViewport = viewport ? viewport.getAttribute('content') : null;
close.addEventListener(isTouch ? 'touchend' : 'click', closeFrame);
var slideFrame = function() {
loader.style.display = 'none';
iframe.style.transform = 'none';
}
var preloadFrame = function(vin) {
if (wantPreload && vin) {
loadFrame(vin);
}
}
var loadFrame = function(vin) {
var localhost = window.location.href.replace(window.location.search, '');
var src = targetHost + '/express/' + vin + '?embed=' + encodeURI(localhost);
if (marketplaceType == 'express') {
src = src + '&' + gaCrossDomainTracking();
}
iframe.setAttribute('src', src);
wantPreload = false;
loadedVin = vin;
}
var showFrame = function(event, vin) {
if (visibleVin == vin) { return; }
visibleVin = vin;
if (event) {
event.stopPropagation();
event.preventDefault();
}
body.classList.add('roadster-body');
container.style.visibility = 'visible';
backdrop.style.opacity = 1;
if (initialViewport) {
viewport.setAttribute('content', roadsterViewport);
} else {
viewport = document.createElement('meta');
viewport.name = 'viewport';
viewport.setAttribute('content', roadsterViewport);
document.head.appendChild(viewport);
}
if (loadedVin != vin) {
loadFrame(vin);
iframe.onload = slideFrame;
} else {
setTimeout(slideFrame, 500);
}
setTimeout(function() {
for (var i = 0; i < window.frames.length; i++) {
if (window.frames[i]) {
try {
window.frames[i].postMessage('openFrame', '*');
}
catch(e) {
// continue to the next frame
}
}
}
}, 2000);
if (window.history && history.replaceState) {
history.replaceState({roadster_vin: vin}, null);
}
if (typeof window.jQuery !== 'undefined') {
jQuery(document).trigger('roadsterCalculatePaymentClick');
}
return true;
}
var processMessage = function(event) {
if (event && event.data == 'closeFrame') {
closeFrame();
}
if (event && event.data == 'enableButtons') {
enableButtons();
}
}
var closeFrame = function() {
visibleVin = null;
loader.style.display = close.style.display = 'none';
backdrop.style.opacity = '';
iframe.style.transform = '';
setTimeout(function() {
loader.style.display = close.style.display = '';
container.style.visibility = '';
body.classList.remove('roadster-body');
if (initialViewport) {
viewport.setAttribute('content', initialViewport);
} else {
document.head.removeChild(viewport);
}
}, 500);
if (window.history && history.replaceState) {
history.replaceState({}, null);
}
}
var enableDelegatedButtons = function() {
jQuery(document).on('click', buttonSelector, function(event) {
var btn = jQuery(this).get(0);
if (btn) {
var vin = getButtonVin(btn);
if (vin) {
showFrame(event, vin);
}
}
});
var buttons = document.querySelectorAll(buttonSelector);
if (buttons.length) {
return getButtonVin(buttons[0]);
}
}
var getButtonVin = function(btn) {
var vin = vinParam;
if (/\/express\/(used\/)?[0-9A-Z]{17}/.test(btn.href)) {
vin = vin || btn.href.match(/[0-9A-Z]{17}/)[0];
}
return vin || jQuery(btn).data('vin') || jQuery(btn).closest('.hproduct').data('vin') || jQuery('.hproduct').data('vin') || jQuery('.tps-roadster-btn').data('vin');
}
var enableButtons = function() {
var buttons = document.querySelectorAll(buttonSelector);
var vinToPreload = null;
[].forEach.call(buttons, function(btn) {
var vin = getButtonVin(btn);
if (vin) {
btn.addEventListener('click', function(event) { showFrame(event, vin) });
vinToPreload = vinToPreload || vin;
}
});
return vinToPreload;
}
var initFrame = function(event) {
if (!window.roadster.initialized && !disabled) {
window.roadster.initialized = true;
var vinToPreload = enableDelegatedButtons();
if (window.history && history.state && history.state.roadster_vin) {
showFrame(event, history.state.roadster_vin);
}
window.addEventListener("message", processMessage, false);
}
window.setTimeout(function() {
vinToPreload = vinToPreload || window.roadster.vinToPreload;
preloadFrame(vinToPreload);
}, 500);
}
var domReady = function(callback) {
document.readyState === 'loading' ? document.addEventListener("DOMContentLoaded", callback) : window.setTimeout(callback, 100);
}
var gaCrossDomainTracking = function() {
if (window.ga) {
try {
var trackers = ga.getAll();
var linkerParam = trackers[0].get('linkerParam');
return linkerParam;
}
catch(e) {
return '';
}
}
return '';
}
window.roadster.showFrame = showFrame;
domReady(initFrame);
}());