/* * Silverpop, Omniture, DGAnalytics Integration * version 1 * */ /* The starter site has already WMG declared in the 'Site Configuration' * javascriopt block in the header, which defines static site specific * configuration */ var WMG = WMG || {}; /* * Omniture classes */ WMG.Omniture = function(){ var init = function(){ } return {init:init} }(); WMG.OmnitureHelper = function(){ var populate = function(DrupalObj,OmnitureObj){ }; return { populate:populate } }(); /* * Silverpop classes */ WMG.SilverPop = function(){ var config = { server:"https://signup.wmg.com/register", siteName:"", siteId:"", keywordId : "", newsletterId : "" }; var spObj = { "email":"", "sex":"", "js":"true", "newsletterId" : "", "keywordId" :"", "signuptype" : "", "EosUserDisplayName" : "", "EosSiteAccountId" : "", "EosMasterAccountId" : "", "siteName" : "", "SiteId" : "", "postalcode":"", "TwitterHandle":"", "state":"", "phone":"", "lastname":"", "firstname":"", "dobYear":"", "dobDay":"", "dobMonth":"", "city":"", "age":"", "country":"", "address1":"", "address2":"", "address3":"" }; //controller for this class. Uses datapreparation method to prepar the data. // Uses submitData to submit the data to the server. var mergeSiteLevelVars = function(userData){ if (typeof config.siteId !== "undefined"){ userData.siteId = config.siteId; } if (typeof config.siteName !== "undefined"){ userData.siteName = config.siteName; } if (typeof config.newsletterId !== "undefined"){ userData.newsletterId = config.newsletterId ; } if (typeof config.keywordId !== "undefined"){ userData.keywordId = config.keywordId; } return userData; }; var submit = function(userData){ userData = mergeSiteLevelVars (userData); var validate = validateObj(userData); if (validate.status === true){ ping (userData); return true; }else { var errors = validate.errors; return errors; } }; var validateObj = function(userData){ /* List of thing to check before we can send the data. Essentially we check only the user input data, that can be corrected.*/ var emailFilter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; var mobileFilter = /^[.]{0}$|^\d{10,15}$/; var mobileFilterUS = /^[.]{0}$|^\d{10}$/; var mobileFilterOTHER = /^[.]{0}$|^\d{10,15}$/; var retObj = { status:true } var errors = {}; if (!emailFilter.test(userData.email)){ errors.email="Email Format is invalid"; } if (typeof userData.mobile !== "undefined"){ if (userData.country === "United States"){ mobileFilter = mobileFilterUS; } if (!mobileFilter.test(userData.mobile)){ errors.mobile = "Mobile Number is invalid"; } } var mobile = userData.mobile; if (!jQuery.isEmptyObject(errors)){ retObj.errors = errors; retObj.status = false; } return retObj; }; var getObj = function (){ var silverPopObj = spObj; return silverPopObj; }; var ping = function(userData){ var qStr = ""; jQuery.each(userData, function(key, value){ if (value !== "" && typeof value !== "undefined"){ qStr += key + "=" + value + "&"; } }); qStr = qStr.slice(0, -1); jQuery.ajax({ url: config.server, data: qStr, dataType : "script", success: function(data){ /* Ignore this now */ } }); }; var callback = function (a,b){ /* Errors are supressed. * The problem is there is no way, * to report back to the calling function, * that there are errors. */ }; var init = function(userConfig){ if (typeof userConfig !== "undefined"){ jQuery.extend (config,userConfig); } }; return { init:init, submit:submit, callback:callback, getObj:getObj } }(); if (typeof callback === "undefined"){ /* Variable hoisted intended */ callback = function (a,b){ WMG.SilverPop.callback(a,b); } } WMG.SilverPopHelper = function(){ var dateFormatter = function(dateString){ var dateString = dateString.split(" "); var regexDate = /^((?:19|20)\d\d)[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/ var result = regexDate.exec(dateString[0]); if (jQuery.isArray(result)){ var output = {}; output.year = result[1]; output.month = result[2]; output.day = result[3]; }else { output = false; } return output; } var genderFormatter = function(gender){ var retGender = ""; if (typeof gender === "string" ){ switch(jQuery.trim(gender.toLowerCase())){ case "male": retGender = 2; break; case "female": retGender = 1; break; } } return retGender; } var populate = function (spObj,serverVars) { /* Take care of newsletterID, signup Type */ if (serverVars.user_email !== null){ spObj.email=serverVars.user_email; } if (serverVars.user_gender !== null){ spObj.sex = genderFormatter(serverVars.user_gender); } if (serverVars.user_eos_wide_id !== null){ spObj.EosMasterAccountId = serverVars.user_eos_wide_id; } if (serverVars.user_eos_site_id !== null){ spObj.EosSiteAccountId = serverVars.user_eos_site_id; } if (serverVars.site_name !== null){ spObj.siteName = serverVars.site_name; } if (serverVars.user_postal_code !== null){ spObj.postalcode = serverVars.user_postal_code; } if (serverVars.user_twitter !== null){ spObj.TwitterHandle = serverVars.user_twitter; } if (serverVars.user_state !== null){ spObj.state = serverVars.user_state; } if (serverVars.user_eos_display_name!==null){ spObj.EosUserDisplayName = serverVars.user_eos_display_name; } if (serverVars.user_birthdate !== null){ var dateObj = dateFormatter(serverVars.user_birthdate); if (dateObj !== false){ spObj.dobYear = dateObj.year; spObj.dobDay = dateObj.day; spObj.dobMonth = dateObj.month; } } if (serverVars.user_city !== null){ spObj.city = serverVars.user_city; } if (serverVars.user_country !== null){ spObj.country = serverVars.user_country; } if (serverVars.spUpdate === true){ spObj.updateprofile="yes"; } return spObj; } return { populate:populate } }(); WMG.AnalyticsController = function(){ var config = { omniture:WMG.Omniture, silverpop:WMG.SilverPop, serverVars:"" } var sendToSilverPop = function(){ var spObj = WMG.SilverPop.getObj(); spObj = WMG.SilverPopHelper.populate(spObj,config.serverVars); config.silverpop.submit(spObj); } var sendToOmniture = function (){ } var processAnalytics = function(){ if (config.serverVars === ""){ return; } if (config.serverVars.action === "update"){ /* This is an update scenario. */ config.serverVars.spUpdate = true; sendToSilverPop(); sendToOmniture(); } /* This is a sign-up scenario. Commenting it out. if (config.serverVars.action === "insert"){ config.serverVars.spUpdate = false; sendToSilverPop(); sendToOmniture(); } */ if (location.href.indexOf("pass-reset-token") !== -1){ config.serverVars.spUpdate = false; sendToSilverPop(); sendToOmniture(); } }; var init = function(userConfig){ /*Check for validity of serverVariable. If it does not come back. Just ignore it.*/ if (typeof userConfig !== "undefined"){ jQuery.extend(config,userConfig); processAnalytics(); } } return { init:init } }(); /* Invoking silverpop */ WMG.SilverPop.init({ siteName:Drupal.settings.server_variables.site_name, siteId:WMG.siteID, /*Legacy EOS IDS*/ keywordId : WMG.MailingList.MobileKeywordIds["United States"], newsletterId : WMG.MailingList.EmailListIds["United States"] }); WMG.Omniture.init(); if (typeof Drupal.settings.server_variables !== "undefined"){ /*Pass Omniture, MailingList class. So that this is configurable. We can truly configure our variables. */ WMG.AnalyticsController.init({ serverVars:Drupal.settings.server_variables, omniture:WMG.Omniture, silverpop:WMG.SilverPop }); }