var widgetUrl = "https://widget.moneyexpert.com/"; //fix for IE 11 if (!String.prototype.startsWith) { String.prototype.startsWith = function (searchString, position) { position = position || 0; return this.indexOf(searchString, position) === position; }; } $.fn.serializeObject = function () { var o = {}; var a = this.serializeArray(); $.each(a, function () { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; function getUrlParameter(name) { name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); var results = regex.exec(location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); }; $(document).ready(function () { var hasWidget = false; var cssWidget = "widget.css"; $("div[data-WidgetFormName$='Form']").each(function () { var elemId = $(this).attr("id"); var queryString = ""; $(this).each(function () { $.each(this.attributes, function () { if (this.specified && this.name.startsWith("data")) { var paramName = this.name.replace("data-", ""); var paramValue = encodeURI(this.value); console.log(paramName, paramValue, getUrlParameter(paramName)); if (paramName === "css") { cssWidget = paramValue; } else if (getUrlParameter(paramName) !== "") { queryString += paramName + "=" + encodeURIComponent(getUrlParameter(paramName)) + "&"; } else { queryString += paramName + "=" + encodeURIComponent(paramValue) + "&"; } } }); }); var urlFormName = getUrlParameter("WidgetFormName"); if (urlFormName !== '') { formName = urlFormName; } if (!queryString.endsWith('&')) { queryString += '&'; } if (!queryString.includes('&landingpage=')) { queryString += 'landingpage=' + encodeURIComponent(location.href); } queryString = queryString.replace('#', ''); console.log("qs", queryString); $.ajax({ url: widgetUrl + "/Widget?" + queryString, type: "GET", cache: false, crossDomain: true, success: function (response) { $('#' + elemId).html(response); InitializeWidget(elemId); } }); hasWidget = true; }); if (hasWidget) { $('head').append(''); } }); function InitializeWidget(elemId) { //read attributes and set form fields $("#" + elemId).each(function () { $.each(this.attributes, function () { if (this.specified) { var paramName = this.name.replace("data-", ""); var paramValue = this.value; $("#" + elemId).find('input').each(function () { if (this.name.toLowerCase() === paramName.toLowerCase()) { if ((this.name.toLowerCase() === "utm_source" || this.name.toLowerCase() === "utm_medium") === false) { console.log("Setting param on the widget -->", paramName, paramValue); $(this).val(paramValue); } } else if (this.name === "strReferrer") { var referrer = getUrlParameter("Referrer") + getUrlParameter("referrer"); if (referrer === "") referrer = getUrlParameter("strReferrer") + getUrlParameter("strreferrer"); $(this).val(referrer); } else if (this.name === "strAgentId") { var agentid = getUrlParameter("AgentId") + getUrlParameter("agentid"); if (agentid === "") referrer = getUrlParameter("strAgentId") + getUrlParameter("stragentid"); $(this).val(agentid); } else if (this.name === "strCallCentreId") { var callcentreid = getUrlParameter("CallCentreId") + getUrlParameter("callcentreid"); if (callcentreid === "") referrer = getUrlParameter("strCallCentreId") + getUrlParameter("strcallcentreid"); $(this).val(callcentreid); } else if ( this.name === "strMarketingOptInDateEmail" || this.name === "strMarketingOptInDatePhone" || this.name === "strMarketingOptInDateSMS" || this.name === "strMarketingOptInDatePost") { var d = new Date(); $(this).val(d.toLocaleDateString()); } }); } }); //replace all images src to the full url $("#" + elemId + ' img').each(function () { var src = $(this).attr('src'); $(this).attr('src', widgetUrl + src); }); //replace all images src to the full url $("#" + elemId + ' input').each(function () { var urlParamValue = getUrlParameter(this.name); if (urlParamValue !== '') { $(this).val(urlParamValue); } }); }); //set button hook event $("#" + elemId).find('#widgetForm').submit(function (e) { e.preventDefault(); var data = $(this).serializeObject(); // Anything with an 'agreement-post-data' class will be picked up and it's text passed as marketing consent var agreementStr = ""; var ageements = $(this).find('.agreement-post-data'); ageements.each(function (index) { agreementStr += $(this).text() + ' ' }); data['strTrackingXML'] = data['strTrackingXML'].replace("[#marketingconsent#]", encodeURIComponent(agreementStr)); data = JSON.stringify(data); $.ajax({ url: widgetUrl + "/Widget/" + $(this).find('#WidgetPostMethod').val(), data: { json: data }, type: "POST", cache: false, crossDomain: true, success: function (response) { eval(response); //$("#" + elemId).html(response); } }); }); $("#" + elemId).find('input').change(function () { ValidateField(this); }); $("#" + elemId).find('input').focusout(function () { ValidateField(this); }); $("#" + elemId).find('select').change(function () { ValidateField(this); }); $("#" + elemId).find('select').focusout(function () { ValidateField(this); }); $("#" + elemId).find('#btnWidgetSubmit').click(function () { $("#" + elemId + ' input').each(function () { ValidateField(this); }); $("#" + elemId + ' select').each(function () { ValidateField(this); }); }); function ValidateField(input) { if ($(input).is(":invalid")) { $(input.parentNode).addClass('input-invalid'); } else { $(input.parentNode).removeClass('input-invalid'); } } } function getAllUrlParams(url) { var queryString = url ? url.split('?')[1] : window.location.search.slice(1); var obj = {}; if (queryString) { queryString = queryString.split('#')[0]; var arr = queryString.split('&'); for (var i = 0; i < arr.length; i++) { var a = arr[i].split('='); var paramName = a[0]; var paramValue = typeof (a[1]) === 'undefined' ? true : a[1]; paramName = paramName.toLowerCase(); if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase(); if (paramName.match(/\[(\d+)?\]$/)) { var key = paramName.replace(/\[(\d+)?\]/, ''); if (!obj[key]) obj[key] = []; if (paramName.match(/\[\d+\]$/)) { var index = /\[(\d+)\]/.exec(paramName)[1]; obj[key][index] = paramValue; } else { obj[key].push(paramValue); } } else { if (!obj[paramName]) { obj[paramName] = paramValue; } else if (obj[paramName] && typeof obj[paramName] === 'string') { obj[paramName] = [obj[paramName]]; obj[paramName].push(paramValue); } else { obj[paramName].push(paramValue); } } } } return obj; }