var scriptSource = 'businesswidget'; function getMyScriptReference() { var scripts = document.getElementsByTagName("script"); var scriptSource = 'businesswidget'; for (var i = 0; i < scripts.length; i++) { if (scripts[i].src && scripts[i].src.toLowerCase().indexOf(scriptSource.toLowerCase()) > -1) return scripts[i]; } return document; } function getQueryStringOfScript() { // get latest script added to the page (this script) // Replace src text with empty string, up to the ? in the src var querystring = getMyScriptReference().src.replace(/^[^\?]+\?/, ''); return querystring; } function parseQueryString(querystring) { // options: sst, width, height, environment var options = querystring.split("&"); var len = options.length; var i = 0; var qsObj = {}; for (; i < len; i++) { var optionValue = options[i].split("="); qsObj[optionValue[0].toLowerCase()] = optionValue[1]; } return qsObj; } function parseParentQueryStringAndAddToScriptQSObject(qsObj) { var querystring = document.URL.replace(/^[^\?]+\?/, ''); var options = querystring.split("&"); var len = options.length; var i = 0; for (; i < len; i++) { var optionValue = options[i].split("="); var optionParamName = (optionValue[0].indexOf("bw") > -1 || optionValue[0].toLowerCase() == "geoid" || optionValue[0].toLowerCase() == "upr") ? optionValue[0].toLowerCase() : ""; if (optionParamName != "") qsObj[optionParamName] = optionValue[1]; } //remove the mode parameter if DID parameter is present if (qsObj.did != null && qsObj.mode != null) delete qsObj.mode; //add secure parameter if ssl present if (window.location.protocol.match(/https/i) != null) qsObj.secure = true; return qsObj; } function checkValidClient(qsobj, callback) { let sst = qsobj.sst || qsobj.bwsst; if (!sst) { qsobj.redirect = true; callback(); } else { var url = 'https://resources.zoomprospector.com/common/services/Utilities.asmx/CheckActiveClient'; var data = { SubsetToken: sst }; fetch(url, { method: 'POST', body: JSON.stringify(data), headers: { 'Content-Type': 'application/json' } }) .then(res => res.json()) .then(response => { let exists = response.d || false; qsobj.redirect = !exists; callback(); }) .catch(error => { console.error('Error:', error); qsobj.redirect = true; callback(); }); } } function buildIframe(qsobj) { var url, width, height; if (qsobj.redirect) url = 'https://images.zoomprospector.com/404.html'; else { url = (qsobj.secure && qsobj.secure == true) ? "https://" : "http://"; var defaultWidget = "Business.aspx"; if (qsobj.environment) { if (qsobj.environment.toLowerCase() == "staging") { url += "zpebeta.zoomprospector.com/main/widgets/" + defaultWidget; } else if (qsobj.environment.toLowerCase() == "production") { url += "media.zoomprospector.com/main/widgets/" + defaultWidget; } else { url += "localhost:8080/main/widgets/" + defaultWidget; } } else { url += "media.zoomprospector.com/main/widgets/" + defaultWidget; } for (var qs in qsobj) { var qsSeparator = url.indexOf('?') > -1 ? '&' : '?'; url += qsSeparator + qs + "=" + qsobj[qs]; } if (qsobj.width && parseInt(qsobj.width) >= 1) { width = qsobj.width; } if (qsobj.height && parseInt(qsobj.height) >= 1) { height = qsobj.height; } /*REMOVED PER GISP DESIGNER'S REQUEST (Pau) //force parent to new width and height in case it was too small getMyScriptReference().parentNode.style.width = width + 'px'; getMyScriptReference().parentNode.style.height = height + 'px'; */ //attach height and width to query string var qsSeparator = url.indexOf('?') > -1 ? '&' : '?'; url += qsSeparator + 'bwWidth=' + width + '&bwHeight=' + height; url += '&bwReferrerURL=' + encodeURIComponent(window.location.href.toLowerCase().replace('&bwlatlngzoom=' + qsobj.bwlatlngzoom, '') .replace('?bwlatlngzoom=' + qsobj.bwlatlngzoom, '') .replace('&bwgeo=' + qsobj.bwgeo, '') .replace('&bwparams=' + qsobj.bwparams, '') .replace('&bwsst=' + qsobj.bwsst, '') .replace('&geoid=' + qsobj.geoid, '')); if (qsobj.dlwlatlngzoom) { url += '&bwlatlngzoom=' + qsobj.bwlatlngzoom; } if (qsobj.bwgeo) { url += '&bwgeo=' + qsobj.bwgeo; } if (qsobj.geoid) { url += '&geoid=' + qsobj.geoid; } if (qsobj.bwparams) { url += '&bwparams=' + qsobj.bwparams; } } if (!width || !height) { //add placeholder iframe to determine actual size var tempIframe = document.createElement('iframe'); tempIframe.scrolling = 'no'; tempIframe['frameBorder'] = '0'; tempIframe['border'] = '0'; tempIframe.style.cssText = 'position: fixed; width: 100%; height: 100%; border: 0px; top: 0px; left: 0px;'; var div = document.createElement('div'); div.style.cssText = 'overflow: hidden; height: 100%; width: 100%; position: fixed; margin: 0px auto; visibility:hidden;'; div.appendChild(tempIframe); getMyScriptReference().parentNode.appendChild(div); var z = getTrueBrowserSize(); width = !width ? z.width : width; height = !height ? z.height : height; div.parentNode.removeChild(div); } //adjust container if mobile or width is small var devicePR = window.devicePixelRatio || window.screen.deviceXDPI / window.screen.logicalXDPI; //if (width <= (500 * devicePR)) { // var cntr = getMyScriptReference().parentNode; // cntr.style.width = '100%'; // cntr.style.clear = 'both'; // cntr.style.display = 'block'; // cntr.style.margin = '2em 0 0 0'; //} var iframe = document.createElement("iframe"); iframe.id = "zpeBusinessWidgetIframe"; iframe.src = url; iframe.width = width + 'px'; iframe.height =height + 'px'; iframe.style['width'] = '100%'; //iframe.style['height'] = '100%'; iframe.scrolling = 'no'; iframe['frameBorder'] = '0'; iframe['border'] = '0'; iframe.style['border'] = '0'; iframe.referrerPolicy = "no-referrer-when-downgrade"; return iframe; } function getTrueBrowserSize() { var w = 0; var h = 0; var x = getMyScriptReference().parentNode; if (x.currentStyle) { w = x.clientWidth - parseFloat(x.currentStyle['paddingLeft']) - parseFloat(x.currentStyle['paddingRight']); h = (x.offsetHeight <= 0 ? window.innerHeight : x.clientHeight) - parseFloat(x.currentStyle['paddingTop']) - parseFloat(x.currentStyle['paddingBottom']); } else if (window.getComputedStyle) { w = x.clientWidth - parseFloat(document.defaultView.getComputedStyle(x, null).getPropertyValue('padding-left')) - parseFloat(document.defaultView.getComputedStyle(x, null).getPropertyValue('padding-right')); h = (x.offsetHeight <= 0 ? window.innerHeight : x.clientHeight) - parseFloat(document.defaultView.getComputedStyle(x, null).getPropertyValue('padding-top')) - parseFloat(document.defaultView.getComputedStyle(x, null).getPropertyValue('padding-bottom')); } return { width: w, height: h }; } function registerWindowHandler() { var resizeId; var scrollFixAttempts; var sendMessage = function () { window.stopResizeEvent = true; scrollFixAttempts++; var iframe = document.getElementById('zpeBusinessWidgetIframe'); var pos = iframe.style.position; iframe.style.position = 'fixed'; var container = document.getElementById('zpeBusinessWidgetContainer'); var pos2 = container.style.position; container.style.position = 'fixed'; container.style.width = '100%'; container.style.height = '100%'; var z = getTrueBrowserSize(); var width = z.width var height = z.height; iframe.style.position = pos; container.style.position = pos2; var querystring = getQueryStringOfScript(); // parse the options var qsobj = parseQueryString(querystring); // parse querystring for parent window and append qsobj = parseParentQueryStringAndAddToScriptQSObject(qsobj); var bIgnoreScroll = (scrollFixAttempts > 5) ? true : false; if (qsobj.width && parseInt(qsobj.width)) { width = parseInt(qsobj.width); bIgnoreScroll = true; } if (qsobj.height && parseInt(qsobj.height)) { height = parseInt(qsobj.height); bIgnoreScroll = true; } var params = {}; params.name = 'businesswidget'; params.message = JSON.stringify({ height: height, width: width }); iframe.width = width + 'px'; iframe.height = height + 'px'; container.style.width = width + 'px'; //container.style.height = height + 'px'; iframe.contentWindow.postMessage(params, "*"); if ((!bIgnoreScroll) && (window.document.body.scrollHeight > window.innerHeight || window.document.body.scrollWidth > window.innerWidth)) setTimeout(sendMessage, 200); window.stopResizeEvent = false; }; var resizeHandler = function () { if (window.stopResizeEvent) return; clearTimeout(resizeId); scrollFixAttempts = 0; resizeId = setTimeout(sendMessage, 500); }; if (typeof window.addEventListener !== 'undefined') { window.addEventListener('resize', resizeHandler, false); } else { // Support for ie8 window.attachEvent('onresize', resizeHandler); } } function TriggerResizeOnLoad() { var evt = window.document.createEvent('UIEvents'); evt.initUIEvent('resize', true, false, window, 0); window.dispatchEvent(evt); } registerWindowHandler(); (function () { var handleTrackingCrumbs = function (event) { try { if (event.data && event.data.indexOf('crumb_') > -1) { //this will decode the html in the string var txt = document.createElement('textarea'); txt.innerHTML = event.data.slice(event.data.indexOf('_') + 1); var div = document.createElement('div'); //now we can insert the decoded html string div.innerHTML = txt.value; getMyScriptReference().parentNode.appendChild(div); } } catch (error) { } }; if (window.addEventListener) { window.addEventListener("message", handleTrackingCrumbs); } else if (window.attachEvent) { window.attachEvent('onmessage', handleTrackingCrumbs); } })(); var querystring = getQueryStringOfScript(); // parse the options var parsedQueryString = parseQueryString(querystring); // parse querystring for parent window and append parsedQueryString = parseParentQueryStringAndAddToScriptQSObject(parsedQueryString); function validClientSuccess() { // build the iframe html var iframeObj = buildIframe(parsedQueryString); var div = document.createElement("div"); div.id = "zpeBusinessWidgetContainer"; div.style.cssText = 'overflow: hidden; height: ' + iframeObj.height + '; width: ' + iframeObj.width + '; position: relative; margin: 0px auto;'; div.appendChild(iframeObj); getMyScriptReference().parentNode.appendChild(div); setTimeout(TriggerResizeOnLoad, 2000); } //check for valid client checkValidClient(parsedQueryString, validClientSuccess); (function () { var handleResizeEvent = function (event) { if (event.data) { var heightRegex = /height_([0-9]+)/; if (heightRegex.test(event.data)) { //parse the height var height = heightRegex.exec(event.data)[1]; var iframes = document.getElementsByTagName('iframe'); for (var i = 0; i < iframes.length; i++) { if (iframes[i].src && (iframes[i].src.match(/zoomprospector/i) || iframes[i].src.match(/localhost/i))) iframes[i].height = height + 'px'; } } else if (event.data.indexOf('resetreturn_') > -1) { var url = event.data.split('_')[1]; window.location.href = url; } } }; if (window.addEventListener) { window.addEventListener("message", handleResizeEvent); } else if (window.attachEvent) { window.attachEvent('onmessage', handleResizeEvent); } })();