{"version":3,"file":"../../desktop/peoplemedia.js","sources":["desktop/peoplemedia.js"],"sourcesContent":["// has dependencies on jQuery and moment.js\r\nvar PeopleMedia = (function ($jq, moment) {\r\n \"use strict\";\r\n\r\n var Oid = \"PeopleMedia\";\r\n\r\n var _adReloadTimeout = null;\r\n var _resizeTimeout = null;\r\n var _listeningOnResize = false;\r\n var _adjustMainMarginTimeout = null;\r\n var _deviceTypeCookieName = \"DEVICEVIEWTYPE\";\r\n var _mobileDeviceType = \"mobile320x480\";\r\n var _desktopDeviceType = \"fullsite960w\";\r\n\r\n var _adjustMainMargin = function () {\r\n try {\r\n var $main = $jq(\"div.main\");\r\n var mainHeight = $main.outerHeight(true);\r\n var rightColumnHeight = $jq(\"div.right-column\").outerHeight(true);\r\n if (rightColumnHeight > 0 && mainHeight > 0) {\r\n var diff = rightColumnHeight - mainHeight;\r\n if (diff > 0) {\r\n // adjust div.main bottom margin to prevent right-column from overlapping the area below div.main\r\n var newMargin = diff + 10;\r\n var currentMargin = +($main.css(\"margin-bottom\").replace(\"px\", \"\"));\r\n if (newMargin > currentMargin) {\r\n $main.css(\"margin-bottom\", newMargin);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n }\r\n };\r\n\r\n var adjustMainMargin = function () {\r\n clearTimeout(_adjustMainMarginTimeout);\r\n _adjustMainMarginTimeout = setTimeout(_adjustMainMargin, 500);\r\n };\r\n\r\n var adSlotRenderEnded = function (event) {\r\n try {\r\n if (event && !event.isEmpty) {\r\n // var tile = event.slot.getTargeting(\"tile\");\r\n adjustMainMargin();\r\n }\r\n } catch (e) {\r\n }\r\n };\r\n\r\n var amazonAdCallback = function () {\r\n if (typeof (amznads) !== \"undefined\") {\r\n try {\r\n amznads.setTargetingForGPTAsync(PeopleMedia.AmazonAdKey);\r\n } catch (e) {\r\n /* ignore */\r\n }\r\n googletag.pubads().refresh();\r\n }\r\n };\r\n\r\n var _reloadAds = function () {\r\n _adReloadTimeout = null;\r\n try {\r\n if (typeof (googletag) !== \"undefined\") {\r\n googletag.pubads().updateCorrelator();\r\n googletag.pubads().setTargeting(\"ord\", getRandomNumericString(10));\r\n if (typeof (amznads) !== \"undefined\" && PeopleMedia.AmazonAdSourceId && PeopleMedia.AmazonAdKey) {\r\n try {\r\n amznads.getAdsCallback(PeopleMedia.AmazonAdSourceId, PeopleMedia.AmazonAdCallback);\r\n googletag.pubads().clearTargeting(PeopleMedia.AmazonAdKey);\r\n } catch (e) {\r\n /* ignore */\r\n }\r\n } else {\r\n // Clear targeting for DFP slots\r\n var slots = googletag.pubads().getSlots();\r\n if (typeof (slots) !== \"undefined\" && slots !== null) {\r\n slots.forEach(function (slot) {\r\n slot.clearTargeting('amznsz');\r\n slot.clearTargeting('hb_size_appnexus');\r\n slot.clearTargeting('hb_pb_appnexus');\r\n slot.clearTargeting('hb_adid_appnexus');\r\n slot.clearTargeting('hb_bidder_appnexus');\r\n slot.clearTargeting('hb_size');\r\n slot.clearTargeting('hb_pb');\r\n slot.clearTargeting('hb_adid');\r\n slot.clearTargeting('hb_bidder');\r\n slot.clearTargeting('hb_size_aol');\r\n slot.clearTargeting('hb_pb_aol');\r\n slot.clearTargeting('hb_adid_aol');\r\n slot.clearTargeting('hb_bidder_aol');\r\n slot.clearTargeting('hb_size_openx');\r\n slot.clearTargeting('hb_pb_openx');\r\n slot.clearTargeting('hb_adid_openx');\r\n slot.clearTargeting('hb_bidder_openx');\r\n slot.clearTargeting('hb_size_sovrn');\r\n slot.clearTargeting('hb_pb_sovrn');\r\n slot.clearTargeting('hb_adid_sovrn');\r\n slot.clearTargeting('hb_bidder_sovrn');\r\n slot.clearTargeting('hb_size_indexExchang');\r\n slot.clearTargeting('hb_pb_indexExchange');\r\n slot.clearTargeting('hb_adid_indexExchang');\r\n slot.clearTargeting('hb_bidder_indexExcha');\r\n });\r\n }\r\n googletag.pubads().refresh();\r\n }\r\n }\r\n setTimeout(PeopleMedia.RefreshSession, 600);\r\n } catch (e) {\r\n }\r\n };\r\n\r\n var reloadAds = function () {\r\n if (_adReloadTimeout == null) {\r\n _adReloadTimeout = setTimeout(_reloadAds, 400);\r\n }\r\n };\r\n\r\n var _resizeComplete = function () {\r\n _reloadAds();\r\n };\r\n\r\n var resizeHandler = function () {\r\n clearTimeout(_resizeTimeout);\r\n _resizeTimeout = setTimeout(_resizeComplete, 500);\r\n };\r\n\r\n var initializeResizeHandler = function () {\r\n $jq(window).on(\"resize\", resizeHandler);\r\n _listeningOnResize = true;\r\n };\r\n\r\n var initializeOrientationHandler = function () {\r\n $jq(window).on(\"orientationchange\", resizeHandler);\r\n if (_listeningOnResize) {\r\n $jq(window).off(\"orientationchange\", resizeHandler);\r\n _listeningOnResize = false;\r\n }\r\n };\r\n\r\n var getRandomNumericString = function (numberOfDigits) {\r\n var result = \"\";\r\n try {\r\n for (var i = 0; i < +numberOfDigits; i++) {\r\n result += getRandomInt(0, 9);\r\n }\r\n } catch (e) {\r\n }\r\n return result;\r\n };\r\n\r\n var getRandomInt = function (min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n };\r\n\r\n var refreshSession = function () {\r\n if (!PeopleMedia.PersistentLoginEnabled && PeopleMedia.IsLoggedIn) {\r\n var startTime = new Date().getTime();\r\n var url = \"/v3/ajax/RefreshSession\";\r\n var timeoutValue = 60000;\r\n $jq.ajax({\r\n type: \"GET\",\r\n url: url,\r\n data: {},\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response.redirect) {\r\n location.href = response.redirect;\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n if (errorThrown === \"timeout\" || (jqXHR.readyState !== 0 && jqXHR.status !== 0)) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n // PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid:Oid, method: \"refreshSession\", duration: duration }, jqXHR, textStatus, errorThrown, function () {\r\n });\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n PeopleMedia.Timer.StartCountdownTimer();\r\n }\r\n };\r\n\r\n var resolveSessionToken = function () {\r\n if (typeof (PMChat) !== \"undefined\" &&\r\n PMChat !== null &&\r\n typeof (PMChat.Config) !== \"undefined\" &&\r\n PMChat.Config != null &&\r\n typeof (PMChat.Config.DefaultSessionToken) !== \"undefined\" &&\r\n PMChat.Config.DefaultSessionToken) {\r\n return PMChat.Config.DefaultSessionToken;\r\n }\r\n return null;\r\n };\r\n\r\n var initializeChat = function () {\r\n if (typeof (PMChat) !== \"undefined\" && PMChat !== null) {\r\n try {\r\n PMChat.On(\"ready\", function () {\r\n PMChat.On(\"error\", function (e) {\r\n if (!e.Error.Handled) {\r\n var pmError = {\r\n message: e.Error.getMessage(),\r\n name: e.Error.getTitle()\r\n };\r\n if (typeof (PMChat.ChatLoggingEnabled) !== \"undefined\" && PMChat.ChatLoggingEnabled) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(pmError, { method: \"PMChat.OnError\" });\r\n }\r\n }\r\n });\r\n\r\n PMChat.UI.Init({\r\n SiteHostName: PeopleMediaConfig.Configuration.siteHostName,\r\n SiteImagePath: PeopleMediaConfig.Configuration.siteImagePath,\r\n ThemeImagePath: PeopleMediaConfig.Configuration.themeImagePath,\r\n CommonImagePath: PeopleMediaConfig.Configuration.commonImagePath\r\n });\r\n });\r\n\r\n PMChat.On(\"stateloaded\", function (e) {\r\n PMChat.GetNewChats();\r\n });\r\n\r\n PMChat.UI.On(\"togglefavorite\", function (e, data) {\r\n var isFavorite = data.IsFavorite;\r\n var favoriteAction = (isFavorite === true) ? PeopleMedia.Favorite.removeFavorite : PeopleMedia.Favorite.addFavorite;\r\n\r\n favoriteAction({\r\n encodedMemberId: data.MemberId,\r\n suppressErrors: true,\r\n onComplete: function (err, response, data) {\r\n if (err && response === null) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n var favoriteText = $jq(\".chatTab[data-with=\\\"\" + data.MemberId + \"\\\"] > .chatTabSettingsMenu > div > div:first-child\");\r\n if (typeof (favoriteText) === \"undefined\" || favoriteText.length === 0)\r\n favoriteText = $jq(\".chatTabSettingsMenu > div > div:first-child\");\r\n\r\n var miniProfileFavDiv = $jq(\"div.chatTab[data-with=\" + data.MemberId + \"] div.chatTabUser .favorite\");\r\n if (typeof (miniProfileFavDiv) === \"undefined\" || miniProfileFavDiv.length === 0) {\r\n miniProfileFavDiv = $jq(\"div.chatTab[data-with=\" + data.MemberId + \"] div.chatTabUser .favorited\");\r\n }\r\n\r\n if (isFavorite === true) {\r\n favoriteText.html(\"Done!\");\r\n miniProfileFavDiv.addClass(\"favorite\").removeClass(\"favorited\").text(\"Save\");\r\n }\r\n else {\r\n favoriteText.html(\"Done!\");\r\n miniProfileFavDiv.addClass(\"favorited\").removeClass(\"favorite\").text(\"Saved\");\r\n }\r\n\r\n PMChat._Clients[data.MemberId].WithMember.IsFavorite = !isFavorite;\r\n\r\n setTimeout(function () {\r\n if (isFavorite === true) {\r\n favoriteText.html(\"Save\");\r\n }\r\n else {\r\n favoriteText.html(\"Saved\");\r\n }\r\n }, 2000);\r\n }\r\n }\r\n });\r\n \r\n });\r\n\r\n PMChat.UI.On(\"blockmember\", function (e, data) {\r\n PeopleMedia.Popups.BlockUser({\r\n encodedMemberId: data.MemberId,\r\n username: data.NickName\r\n });\r\n });\r\n\r\n PMChat.UI.On(\"reportaconcern\", function (e, data) {\r\n PeopleMedia.Popups.ReportConcern({\r\n encodedMemberId: data.MemberId,\r\n username: data.NickName\r\n });\r\n });\r\n\r\n PMChat.Init({\r\n SiteID: PeopleMediaConfig.Configuration.currentUserSiteId,\r\n MemberID: PeopleMediaConfig.Configuration.profile,\r\n NickName: PeopleMediaConfig.Configuration.username,\r\n ChatLoggingEnabled: PeopleMediaConfig.Configuration.chatLoggingEnabled,\r\n ChatEnabled: (PMChat.ChatEnabled === true),\r\n DefaultSessionToken: PeopleMediaConfig.Configuration.defaultSessionToken,\r\n SessionToken: PeopleMedia.resolveSessionToken,\r\n State: new PMChat.WebStorageState(),\r\n Channel: new PMChat.WebSyncChannel({\r\n Client: function () {\r\n PeopleMedia.WebSyncServer.Init();\r\n return PeopleMedia.WebSyncServer.Client;\r\n },\r\n Channel: PeopleMediaConfig.Configuration.channel\r\n }),\r\n BaseUrl: PeopleMediaConfig.Configuration.chatBasePath,\r\n API: {\r\n BaseUrl: PeopleMediaConfig.Configuration.chatApi\r\n }\r\n });\r\n\r\n PMChat.UI.SetToggleText();\r\n }\r\n catch (ex) {\r\n if (typeof (PMChat) !== \"undefined\" && PMChat !== null && typeof (PMChat.ChatLoggingEnabled) !== \"undefined\" && PMChat.ChatLoggingEnabled) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid:Oid, method: \"PMChat.On\" });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var handleError = function (response) {\r\n if (response) {\r\n if (response.redirect) {\r\n location.href = response.redirect;\r\n } else if (response.message) {\r\n PeopleMedia.Popups.ShowGenericMessage(response.message);\r\n }\r\n }\r\n };\r\n\r\n // needed to offset the scrolling when there is a fixed header\r\n var scrollToItem = function($elem) {\r\n try {\r\n var headerPosition;\r\n var headerAdjustment;\r\n var elemPosition;\r\n var scrollTop;\r\n if ($elem && $elem.length > 0) {\r\n elemPosition = $elem.offset();\r\n if (elemPosition) {\r\n headerPosition = $jq(\".layout-container-fixed .layout-container-header\").css(\"position\");\r\n headerAdjustment = (headerPosition === \"fixed\") ? ($jq(\"div.header\").height() || 0) : 0;\r\n scrollTop = elemPosition.top - headerAdjustment;\r\n $jq(\"html, body\").animate({\r\n scrollTop: scrollTop,\r\n scrollLeft: 0\r\n });\r\n }\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n\r\n var useScrollingForRelativeLinks = function ($container) {\r\n try {\r\n if ($container && $container.length > 0) {\r\n $container.find(\"a[href^='#']\").on(\"click\", function (event) {\r\n var $this = $jq(this);\r\n var href = $this.attr(\"href\");\r\n var $link = $container.find(href);\r\n if ($link && $link.length > 0) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n PeopleMedia.scrollToItem($link);\r\n }\r\n });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n\r\n var sitePostbackHeader = function () {\r\n var header = {};\r\n try {\r\n var tokenName = \"__RequestVerificationToken\";\r\n var $af = $jq(\"#sitervt\");\r\n if ($af.length > 0) {\r\n var $token = $af.find(\"input[name='\" + tokenName + \"']\");\r\n if ($token.length > 0) {\r\n header[tokenName] = $token.val();\r\n }\r\n }\r\n } catch (ex) {\r\n }\r\n return header;\r\n };\r\n\r\n var sitePostback = function ($form) {\r\n try {\r\n var tokenName = \"__RequestVerificationToken\";\r\n if ($form && $form.length > 0) {\r\n var $token = $form.find(\"input[type='hidden'][name='\" + tokenName + \"']\");\r\n if ($token.length === 0) {\r\n var header = PeopleMedia.sitePostbackHeader();\r\n if (header && header[tokenName]) {\r\n $form.prepend($jq(\"\"));\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"sitePostback\" });\r\n }\r\n };\r\n\r\n var createErrorObject = function (prop) {\r\n var errObj;\r\n try {\r\n var errProp = prop || {};\r\n errObj = $jq.extend({}, { reason: \"error\" }, errProp);\r\n } catch (ex) {\r\n errObj = { reason: \"error\" };\r\n }\r\n return errObj;\r\n };\r\n\r\n var createAjaxErrorObject = function (prop) {\r\n var errObj;\r\n try {\r\n var errProp = prop || {};\r\n var generalError = createErrorObject(errProp);\r\n var errorThrown = (typeof (errProp.errorThrown) !== \"undefined\") ? errProp.errorThrown : null;\r\n var isCancelled = false;\r\n var reason = (typeof (errProp.reason) !== \"undefined\" && errProp.reason) ? errProp.reason : null;\r\n var responseText = null;\r\n var statusCode = null;\r\n if (typeof (errProp.jqXHR) !== \"undefined\" && errProp.jqXHR !== null) {\r\n isCancelled = (errorThrown !== 'timeout' && (errProp.jqXHR.readyState === 0 || errProp.jqXHR.status === 0));\r\n reason = reason || errorThrown;\r\n responseText = (!isCancelled && errProp.jqXHR.responseText) ? errProp.jqXHR.responseText : null;\r\n statusCode = errProp.jqXHR.status;\r\n }\r\n errObj = $jq.extend({}, generalError, {\r\n reason: reason || \"error\",\r\n isAjaxError: true,\r\n isCancelled: isCancelled,\r\n responseText: responseText,\r\n statusCode: statusCode\r\n });\r\n } catch (ex) {\r\n errObj = { reason: \"error\", isAjaxError: true };\r\n }\r\n return errObj;\r\n };\r\n\r\n var convertToPositiveInteger = function(input) {\r\n var result = 0;\r\n if (typeof (input) === \"number\") {\r\n result = Math.trunc(input);\r\n } else if (typeof (input) === \"string\") {\r\n result = parseInt(input, 10);\r\n if (isNaN(result)) {\r\n result = 0;\r\n }\r\n }\r\n return (result >= 0) ? result : 0;\r\n };\r\n\r\n // HTML escape\r\n var htmlEscape = function (str) {\r\n return String(str)\r\n .replace(/&/g, '&')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n .replace(//g, '>');\r\n };\r\n\r\n var transitionEndEventName = function () {\r\n var i;\r\n var el = document.createElement('div');\r\n var transitions = {\r\n 'transition': 'transitionend',\r\n 'OTransition': 'otransitionend', // oTransitionEnd in very old Opera\r\n 'MozTransition': 'transitionend',\r\n 'WebkitTransition': 'webkitTransitionEnd'\r\n };\r\n\r\n for (i in transitions) {\r\n if (transitions.hasOwnProperty(i) && typeof (el.style[i]) !== \"undefined\") {\r\n return transitions[i];\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n var getCovidHomeSessionStorageKey = function () {\r\n var CurrentPublicMemberId = null;\r\n if (typeof (PeopleMediaConfig) !== \"undefined\" &&\r\n PeopleMediaConfig !== null &&\r\n typeof (PeopleMediaConfig.Configuration) !== \"undefined\" &&\r\n PeopleMediaConfig.Configuration !== null) {\r\n CurrentPublicMemberId = PeopleMediaConfig.Configuration.publicMemberId;\r\n }\r\n return \"CovidHome_\" + (CurrentPublicMemberId || \"\");\r\n };\r\n\r\n var getMatchstackEventsAdNoThanksClickedStorageKey = function () {\r\n var CurrentPublicMemberId = null;\r\n if (typeof (PeopleMediaConfig) !== \"undefined\" &&\r\n PeopleMediaConfig !== null &&\r\n typeof (PeopleMediaConfig.Configuration) !== \"undefined\" &&\r\n PeopleMediaConfig.Configuration !== null) {\r\n CurrentPublicMemberId = PeopleMediaConfig.Configuration.publicMemberId;\r\n }\r\n return \"Matchstack_EventsAdNoThanksClicked_\" + (CurrentPublicMemberId || \"\");\r\n };\r\n\r\n var getMatchStackSessionStorageKey = function() {\r\n // include current member id as part of key in case someone logs in with a different user in the same session\r\n var CurrentPublicMemberId = null;\r\n if (typeof (PeopleMediaConfig) !== \"undefined\" &&\r\n PeopleMediaConfig !== null &&\r\n typeof (PeopleMediaConfig.Configuration) !== \"undefined\" &&\r\n PeopleMediaConfig.Configuration !== null) {\r\n CurrentPublicMemberId = PeopleMediaConfig.Configuration.publicMemberId;\r\n }\r\n return \"MatchStack_\" + (CurrentPublicMemberId || \"\");\r\n };\r\n\r\n var getSettingsNotificationStorageKey = function () {\r\n // include current member id as part of key in case someone logs in with a different user in the same session\r\n var CurrentPublicMemberId = null;\r\n if (typeof (PeopleMediaConfig) !== \"undefined\" &&\r\n PeopleMediaConfig !== null &&\r\n typeof (PeopleMediaConfig.Configuration) !== \"undefined\" &&\r\n PeopleMediaConfig.Configuration !== null) {\r\n CurrentPublicMemberId = PeopleMediaConfig.Configuration.publicMemberId;\r\n }\r\n return \"NewSettingsNotification_ClearNotification_\" + (CurrentPublicMemberId || \"\");\r\n };\r\n\r\n var findLatestExpiresAt = function (arr) {\r\n var latest = null;\r\n try {\r\n var latestMoment = moment(\"0000-01-01\");\r\n if (Array.isArray(arr) && arr.length > 0) {\r\n for (var i = arr.length - 1; i >= 0; i--) {\r\n if (arr[i] && arr[i].hasOwnProperty(\"expiresAt\") && arr[i].expiresAt) {\r\n var expiresAt = moment(arr[i].expiresAt);\r\n if (!latestMoment.isAfter(expiresAt)) {\r\n latestMoment = expiresAt;\r\n latest = arr[i];\r\n }\r\n }\r\n }\r\n // use last item if no expiresAt values\r\n if (latest === null) {\r\n latest = arr[arr.length - 1];\r\n }\r\n }\r\n } catch (e) {\r\n }\r\n return latest;\r\n };\r\n\r\n // returns array of querystring results as objects with \"key\" and \"value\" properties\r\n // parseQueryStringToArray(\"a=123&b=456&a=789\") \r\n // returns [0] = { key: \"a\", value: \"123\" }\r\n // [1] = { key: \"b\", value: \"456\" }\r\n // [2] = { key: \"a\", value: \"789\" }\r\n var parseQueryStringToArray = function (queryString) {\r\n var result = [];\r\n var qs = (typeof (queryString) === \"undefined\" || queryString === null) ? window.location.search : queryString;\r\n var searchParams = new URLSearchParams(qs); // jshint ignore:line\r\n searchParams.forEach(function (value, key) {\r\n if (key) {\r\n result.push({ key: key, value: value });\r\n }\r\n });\r\n return result;\r\n };\r\n\r\n // finds matching querystring items returned from parseQueryStringToArray\r\n // key comparison is case-insensitive\r\n // allows converting the value to a specific type (boolean, number, int, string)\r\n // getQueryStringItem([{ key: \"A\", value: \"123\" }], \"a\", \"int\")\r\n // returns [0] = 123\r\n var getQueryStringItem = function (qsArray, key, type) {\r\n if (qsArray && Array.isArray(qsArray) && key) {\r\n var keyLower = key.toLowerCase();\r\n var num;\r\n return qsArray.filter(function (item) {\r\n return item && item.key && item.key.toLowerCase() === keyLower;\r\n }).map(function (item) {\r\n if (typeof (item) === \"undefined\" || item === null || typeof (item.value) === \"undefined\" || item.value === null) {\r\n return null;\r\n }\r\n switch (type) {\r\n case \"boolean\":\r\n return !!(item.value);\r\n case \"number\":\r\n num = parseFloat(item.value);\r\n return (!isNaN(num)) ? num : null;\r\n case \"int\":\r\n num = parseInt(item.value, 10);\r\n return (!isNaN(num)) ? num : null;\r\n case \"string\":\r\n return item.value.toString();\r\n default:\r\n return item.value;\r\n }\r\n });\r\n }\r\n return [];\r\n };\r\n\r\n var arrayFirstOrDefault = function(arr) {\r\n return (arr.length > 0) ? arr[0] : null;\r\n };\r\n\r\n var isRushHour = function (date) {\r\n var dateCheck = (date && Object.prototype.toString.call(date) === '[object Date]') ? date : new Date();\r\n var hour = dateCheck.getHours();\r\n if (isNaN(hour)) {\r\n return false;\r\n }\r\n // boost rush hour is 9AM-12PM and 3PM-10PM (PMWEB-6618)\r\n return ((hour >= 9 && hour < 12) || (hour >= 15 && hour < 22));\r\n };\r\n\r\n var rushHourEndsAt = function (date) {\r\n var dateCheck = (date && Object.prototype.toString.call(date) === '[object Date]') ? date : new Date();\r\n var hour = dateCheck.getHours();\r\n if (isNaN(hour) || !isRushHour(dateCheck)) {\r\n return null;\r\n }\r\n var hourEnd = 0;\r\n if (hour >= 9 && hour < 12) {\r\n hourEnd = 12;\r\n } else if (hour >= 15 && hour < 22) {\r\n hourEnd = 22;\r\n }\r\n dateCheck.setHours(hourEnd);\r\n dateCheck.setMinutes(0);\r\n dateCheck.setSeconds(0);\r\n dateCheck.setMilliseconds(0);\r\n return dateCheck;\r\n };\r\n\r\n var isCommandKey = function (key) {\r\n // movement or special keys\r\n // backspace, caps lock, shift, ctrl, alt, end, home, left, right, up, down, pgup, pgdn, ins, del\r\n return (key === 8 || key === 20 || (key >= 16 && key <= 18) || (key >= 33 && key <= 40) || key === 45 || key === 46);\r\n };\r\n\r\n var getDeviceViewTypeCookie = function () {\r\n return PeopleMedia.Cookies.getCookie(_deviceTypeCookieName);\r\n };\r\n\r\n var setDeviceViewTypeCookie = function (value) {\r\n if (value === _desktopDeviceType || value === _mobileDeviceType) {\r\n PeopleMedia.Cookies.setCookie(_deviceTypeCookieName, value, 30, true);\r\n } else {\r\n PeopleMedia.Cookies.removeCookie(_deviceTypeCookieName);\r\n }\r\n };\r\n\r\n var detectIOS = function () {\r\n // IE11 or Android\r\n if (window.MSStream || navigator.userAgent.match(/Android/i)) {\r\n return false;\r\n }\r\n // include Macintosh for iPad after iOS 13\r\n return (navigator.userAgent.match(/iPhone/i)\r\n || navigator.userAgent.match(/iPad/i)\r\n || navigator.userAgent.match(/iPod/i)\r\n || navigator.userAgent.match(/Macintosh/i)\r\n );\r\n };\r\n\r\n var detectAndroid = function () {\r\n return navigator.userAgent.match(/Android/i);\r\n };\r\n\r\n var switchToMobileView = function() {\r\n var current = getDeviceViewTypeCookie();\r\n if (current !== _mobileDeviceType) {\r\n setDeviceViewTypeCookie(_mobileDeviceType);\r\n PeopleMedia.Tracking.trackSwitchDeviceType({\r\n eventName: \"SwitchToMobileView\",\r\n previousValue: current,\r\n onComplete: function () {\r\n window.location.reload();\r\n }\r\n });\r\n }\r\n };\r\n\r\n // removes keys from object while keeping same reference (unlike obj = {} which creates a new reference)\r\n // obj = object to update\r\n // except = array of any property names that should not be removed (optional)\r\n var clearObjectProperties = function (obj, except) {\r\n var keys = Object.keys(obj);\r\n if (Array.isArray(except) && except.length > 0) {\r\n keys = keys.filter(function (key) {\r\n return key && except.indexOf(key) === -1;\r\n });\r\n }\r\n for (var i = 0; i < keys.length; i++) {\r\n delete obj[keys[i]];\r\n }\r\n };\r\n\r\n return {\r\n SiteId: PeopleMediaConfig.Configuration.siteId,\r\n Domain: PeopleMediaConfig.Configuration.domain,\r\n BaseDomain: PeopleMediaConfig.Configuration.baseDomain,\r\n SiteImagePath: PeopleMediaConfig.Configuration.siteImagePath,\r\n SiteRootEnabled: true,\r\n PersistentLoginEnabled: PeopleMediaConfig.Configuration.persistentLoginEnabled,\r\n IsLoggedIn: (PeopleMediaConfig.Configuration.isLoggedIn),\r\n PopupPath: PeopleMediaConfig.Configuration.popupPath,\r\n WebSyncUrl: PeopleMediaConfig.Configuration.webSyncUrl,\r\n ImagePath: PeopleMediaConfig.Configuration.imagePath,\r\n ThemeImagePath: PeopleMediaConfig.Configuration.themeImagePath,\r\n CommonImagePath: PeopleMediaConfig.Configuration.commonImagePath,\r\n BaseImagePath: PeopleMediaConfig.Configuration.baseImagePath || \"https://pmi.peoplemedia.com/pmicontent\",\r\n PageDefinitionId: PeopleMediaConfig.Configuration.pageDefinitionId,\r\n EncodedMemberId: PeopleMediaConfig.Configuration.encodedMemberId,\r\n CombineFlirtsAndLikes: PeopleMediaConfig.Configuration.combineFlirtsAndLikes,\r\n DisableLegacyChat: PeopleMediaConfig.Configuration.disableLegacyChat,\r\n ShowMatchMutualConnections: PeopleMediaConfig.Configuration.showMatchMutualConnections,\r\n ApiSendEnabled: PeopleMediaConfig.Configuration.apiSendEnabled,\r\n AdjustMainMargin: adjustMainMargin,\r\n AdSlotRenderEnded: adSlotRenderEnded,\r\n AmazonAdCallback: amazonAdCallback,\r\n ReloadAds: reloadAds,\r\n ResizeHandler: resizeHandler,\r\n InitializeResizeHandler: initializeResizeHandler,\r\n InitializeOrientationHandler: initializeOrientationHandler,\r\n RefreshSession: refreshSession,\r\n resolveSessionToken: resolveSessionToken,\r\n InitializeChat: initializeChat,\r\n handleError: handleError,\r\n scrollToItem: scrollToItem,\r\n useScrollingForRelativeLinks: useScrollingForRelativeLinks,\r\n sitePostbackHeader: sitePostbackHeader,\r\n sitePostback: sitePostback,\r\n createErrorObject: createErrorObject,\r\n createAjaxErrorObject: createAjaxErrorObject,\r\n convertToPositiveInteger: convertToPositiveInteger,\r\n htmlEscape: htmlEscape,\r\n transitionEndEventName: transitionEndEventName,\r\n getMatchStackSessionStorageKey: getMatchStackSessionStorageKey,\r\n getCovidHomeSessionStorageKey: getCovidHomeSessionStorageKey,\r\n getSettingsNotificationStorageKey: getSettingsNotificationStorageKey,\r\n findLatestExpiresAt: findLatestExpiresAt,\r\n parseQueryStringToArray: parseQueryStringToArray,\r\n getQueryStringItem: getQueryStringItem,\r\n arrayFirstOrDefault: arrayFirstOrDefault,\r\n isRushHour: isRushHour,\r\n rushHourEndsAt: rushHourEndsAt,\r\n getMatchstackEventsAdNoThanksClickedStorageKey: getMatchstackEventsAdNoThanksClickedStorageKey,\r\n isCommandKey: isCommandKey,\r\n detectIOS: detectIOS,\r\n detectAndroid: detectAndroid,\r\n switchToMobileView: switchToMobileView,\r\n clearObjectProperties: clearObjectProperties\r\n };\r\n})(jQuery, moment);\r\n\r\nPeopleMedia.Storage = (function () {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Storage\";\r\n\r\n var storageAvailable = function(type) {\r\n try {\r\n var storage = window[type];\r\n var x = '__storage_test__';\r\n storage.setItem(x, x);\r\n storage.removeItem(x);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n var localOrSessionStorage = storageAvailable(\"localStorage\") ? window.localStorage : (storageAvailable(\"sessionStorage\") ? window.sessionStorage : null);\r\n\r\n var isQuotaError = function(err) {\r\n return (err instanceof DOMException && (\r\n // everything except Firefox\r\n err.code === 22 ||\r\n // Firefox\r\n err.code === 1014 ||\r\n // test name field too, because code might not be present\r\n // everything except Firefox\r\n err.name === 'QuotaExceededError' ||\r\n // Firefox\r\n err.name === 'NS_ERROR_DOM_QUOTA_REACHED'));\r\n };\r\n\r\n var _loadFromStorage = function (storage, key) {\r\n var result = null;\r\n try {\r\n if (typeof (Storage) !== \"undefined\" && storage) {\r\n var value = storage.getItem(key);\r\n if (typeof (value) !== \"undefined\" && value !== null) {\r\n result = JSON.parse(value);\r\n }\r\n }\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { oid: Oid, method: \"_loadFromStorage\", key: key });\r\n throw ex;\r\n }\r\n return result;\r\n };\r\n\r\n var _saveToStorage = function (storage, key, value) {\r\n try {\r\n if (typeof (Storage) !== \"undefined\" && storage) {\r\n storage.setItem(key, JSON.stringify(value));\r\n }\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { oid: Oid, method: \"_saveToStorage\", key: key, value: value });\r\n if (isQuotaError(ex)) {\r\n throw ex;\r\n }\r\n }\r\n };\r\n\r\n var _clearStorage = function (storage, keyPrefix, exceptPrefix) {\r\n try {\r\n if (typeof (Storage) !== \"undefined\" && storage) {\r\n var removeKeys = [];\r\n for (var i = 0; i < storage.length; i++) {\r\n if (storage.key(i) &&\r\n (!keyPrefix || storage.key(i).substring(0, keyPrefix.length) === keyPrefix) &&\r\n (!exceptPrefix || storage.key(i).substring(0, exceptPrefix.length) !== exceptPrefix)) {\r\n removeKeys.push(storage.key(i));\r\n }\r\n }\r\n for (var k = 0; k < removeKeys.length; k++) {\r\n storage.removeItem(removeKeys[k]);\r\n }\r\n }\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { oid: Oid, method: \"_clearStorage\", keyPrefix: keyPrefix, exceptPrefix: exceptPrefix });\r\n }\r\n };\r\n\r\n var loadFromSessionStorage = function (key) {\r\n return _loadFromStorage(window.sessionStorage, key);\r\n };\r\n\r\n var saveToSessionStorage = function (key, value) {\r\n return _saveToStorage(window.sessionStorage, key, value);\r\n };\r\n\r\n var clearSessionStorage = function (keyPrefix, exceptPrefix) {\r\n return _clearStorage(window.sessionStorage, keyPrefix, exceptPrefix);\r\n };\r\n\r\n var loadFromStorage = function (key) {\r\n return _loadFromStorage(localOrSessionStorage, key);\r\n };\r\n\r\n var saveToStorage = function (key, value) {\r\n return _saveToStorage(localOrSessionStorage, key, value);\r\n };\r\n\r\n var clearStorage = function (keyPrefix, exceptPrefix) {\r\n return _clearStorage(localOrSessionStorage, keyPrefix, exceptPrefix);\r\n };\r\n\r\n return {\r\n loadFromSessionStorage: loadFromSessionStorage,\r\n saveToSessionStorage: saveToSessionStorage,\r\n clearSessionStorage: clearSessionStorage,\r\n loadFromStorage: loadFromStorage,\r\n saveToStorage: saveToStorage,\r\n clearStorage: clearStorage,\r\n isQuotaError: isQuotaError\r\n };\r\n})();\r\n\r\nPeopleMedia.Tracking = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Tracking\";\r\n\r\n var AdTracking = function (eventName, featureName, onComplete) {\r\n try {\r\n var encodedMemberId = typeof (PeopleMedia.EncodedMemberId) !== \"undefined\" ? PeopleMedia.EncodedMemberId : null;\r\n var pageDefinitionId = typeof (PeopleMedia.PageDefinitionId) !== \"undefined\" ? PeopleMedia.PageDefinitionId : null;\r\n var url = '/v3/ajax/TrackMobileSearchAd';\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 60000;\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"EventType\": eventName ? eventName : \"\",\r\n \"FeatureName\": featureName ? featureName : \"\",\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null\r\n };\r\n $jq.ajax({\r\n type: 'POST',\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"AdTracking\", duration: duration }, jqXHR, textStatus, errorThrown, function () {\r\n });\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n }).always(function () {\r\n if (onComplete && typeof (onComplete) === \"function\") {\r\n onComplete();\r\n }\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { oid: Oid, method: \"AdTracking\" });\r\n }\r\n };\r\n\r\n var trackCustomMemberEventsComplete = function (err, response, params) {\r\n if (err || !response || response.status !== \"Success\") {\r\n // there was an error\r\n // console.log(\"trackCustomMemberEvents: error\", err);\r\n if (params && typeof (params.onComplete) === \"function\") {\r\n params.onComplete(err, response, params);\r\n }\r\n return;\r\n }\r\n\r\n // console.log(\"trackMemberShown: success\", response);\r\n if (params && typeof (params.onComplete) === \"function\") {\r\n params.onComplete(err, response, params);\r\n }\r\n };\r\n \r\n var trackCustomMemberEvents = function (params) {\r\n try {\r\n var validEvents = null;\r\n if (params && params.events) {\r\n validEvents = params.events.filter(function (ev) {\r\n return ev !== null && typeof (ev) !== \"undefined\";\r\n });\r\n }\r\n if (!validEvents || validEvents.length === 0) {\r\n // do nothing if no events\r\n trackCustomMemberEventsComplete(null, { status: \"Success\" }, params);\r\n return;\r\n }\r\n var startTime = new Date().getTime();\r\n var url = \"/v3/Ajax/TrackCustomMemberEvents\";\r\n var timeoutValue = 60000;\r\n var ajaxData = {\r\n \"events\": validEvents\r\n };\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n trackCustomMemberEventsComplete(null, response, params);\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"trackCustomMemberEvents\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n trackCustomMemberEventsComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"trackCustomMemberEvents\" });\r\n trackCustomMemberEventsComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n };\r\n \r\n // Track single event with callback\r\n var trackMemberEvent = function (eventName, callback) {\r\n var PageDefinitionId = null;\r\n if (typeof (PeopleMedia.PageDefinitionId) !== \"undefined\") {\r\n PageDefinitionId = PeopleMedia.PageDefinitionId;\r\n }\r\n\r\n trackCustomMemberEvents({\r\n events: [\r\n {\r\n otherMemberProfileId: null,\r\n eventName: eventName,\r\n featureSource: \"Match\",\r\n pageId: PageDefinitionId\r\n }\r\n ],\r\n onComplete: callback\r\n });\r\n };\r\n\r\n var trackComplete = function (err, response, params) {\r\n if (err || !response || response.status !== \"Success\") {\r\n // there was an error\r\n if (params && typeof (params.onComplete) === \"function\") {\r\n params.onComplete(err, response, params);\r\n }\r\n return;\r\n }\r\n\r\n if (params && typeof (params.onComplete) === \"function\") {\r\n params.onComplete(err, response, params);\r\n }\r\n };\r\n\r\n // Call as member is being rendered into view\r\n var trackMemberShown = function (params) {\r\n try {\r\n var startTime = new Date().getTime();\r\n var url = \"/v3/Ajax/TrackMemberShown\";\r\n var timeoutValue = 60000;\r\n var ajaxData = {\r\n \"otherMemberPublicGuid\": params.otherMemberPublicGuid,\r\n \"otherMemberProfileId\": params.otherMemberProfileId,\r\n \"eventActionPrefix\": params.eventActionPrefix,\r\n \"viewLocation\": params.viewLocation,\r\n \"featureSource\": params.featureSource,\r\n \"displayModule\": params.displayModule,\r\n \"matchedUserType\": params.matchedUserType,\r\n \"presentationId\": params.presentationId,\r\n \"searchGuid\": params.searchGuid,\r\n \"recordGuid\": params.recordGuid,\r\n \"PageId\": PeopleMedia.PageDefinitionId\r\n };\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n trackComplete(null, response, params);\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"trackMemberShown\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n trackComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"trackMemberShown\" });\r\n trackComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n };\r\n\r\n var trackSwitchDeviceType = function (params) {\r\n try {\r\n var startTime = new Date().getTime();\r\n var url = \"/v3/Ajax/TrackSwitchDeviceType\";\r\n var timeoutValue = 2000;\r\n var ajaxData = {\r\n \"eventName\": params.eventName,\r\n \"previousValue\": params.previousValue,\r\n \"featureSource\": params.featureSource,\r\n \"PageId\": PeopleMedia.PageDefinitionId\r\n };\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n trackComplete(null, response, params);\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"trackSwitchDeviceType\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n trackComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"trackSwitchDeviceType\" });\r\n trackComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n };\r\n\r\n var updateClickThroughFlow = function (params) {\r\n try {\r\n var startTime = new Date().getTime();\r\n var url = \"/v3/Ajax/UpdateClickThroughFlow\";\r\n var timeoutValue = 5000;\r\n var path = params && params.path ? params.path : \"\";\r\n var page = params && typeof (params.page) === \"number\" ? params.page : null;\r\n var pageId = params && typeof (params.pageId) === \"number\" ? params.pageId : PeopleMedia.PageDefinitionId;\r\n var ajaxData = {\r\n \"Path\": path,\r\n \"Page\": page,\r\n \"PageId\": pageId\r\n };\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n trackComplete(null, response, params);\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"trackSwitchDeviceType\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n trackComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"updateClickThroughFlow\" });\r\n trackComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n };\r\n\r\n return {\r\n trackMemberShown: trackMemberShown,\r\n trackCustomMemberEvents: trackCustomMemberEvents,\r\n AdTracking: AdTracking,\r\n trackMemberEvent: trackMemberEvent,\r\n trackSwitchDeviceType: trackSwitchDeviceType,\r\n updateClickThroughFlow: updateClickThroughFlow\r\n };\r\n})(jQuery);\r\n\r\nPeopleMedia.LogAjaxError = function (event, jqXHR, ajaxSettings, thrownError) {\r\n \"use strict\";\r\n if (thrownError !== \"timeout\" && (jqXHR.readyState == 0 || jqXHR.status == 0)) {\r\n $jq(document).one(\"ajaxError\", PeopleMedia.LogAjaxError);\r\n return;\r\n }\r\n\r\n if (ajaxSettings && ajaxSettings.url) {\r\n if (ajaxSettings.url.indexOf(\"/v3/log/logexception\") >= 0 ||\r\n ajaxSettings.url.indexOf(\"/v3/ajax/RefreshSession\") >= 0 ||\r\n ajaxSettings.url.indexOf(\"/keepalive.cfm\") >= 0) {\r\n $jq(document).one(\"ajaxError\", PeopleMedia.LogAjaxError);\r\n return;\r\n }\r\n }\r\n\r\n if (ajaxSettings && ajaxSettings.suppressErrors) {\r\n $jq(document).one(\"ajaxError\", PeopleMedia.LogAjaxError);\r\n return;\r\n }\r\n\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", ajaxSettings.url, { settings: ajaxSettings }, jqXHR, null, thrownError, function() {\r\n $jq(document).one(\"ajaxError\", PeopleMedia.LogAjaxError);\r\n });\r\n};\r\n(function () {\r\n \"use strict\";\r\n $jq.ajaxSetup({ timeout: 60000 });\r\n //$jq(document).one(\"ajaxError\", PeopleMedia.LogAjaxError);\r\n})();\r\n\r\nPeopleMedia.Utility = (function ($jq) {\r\n \"use strict\";\r\n // Returns a function, that, as long as it continues to be invoked, will not\r\n // be triggered. The function will be called after it stops being called for\r\n // N milliseconds. If `immediate` is passed, trigger the function on the\r\n // leading edge, instead of the trailing.\r\n var debounce = function (func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this, args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) {\r\n func.apply(context, args);\r\n }\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) {\r\n func.apply(context, args);\r\n }\r\n };\r\n };\r\n\r\n // detect if passive events are supported by the browser\r\n var passiveSupported = false;\r\n var isPassiveEventListenerOptionSupported = function () {\r\n try {\r\n const options = {\r\n get passive() { // This function will be called when the browser\r\n // attempts to access the passive property.\r\n passiveSupported = true;\r\n return false;\r\n }\r\n };\r\n\r\n window.addEventListener(\"test\", null, options);\r\n window.removeEventListener(\"test\", null, options);\r\n } catch (err) {\r\n passiveSupported = false;\r\n }\r\n\r\n return passiveSupported;\r\n };\r\n\r\n // used by enable/disable scrolling functions to maintain y position on page\r\n var scrollPosition = 0;\r\n\r\n var enableBodyScrolling = function () {\r\n $jq(\"body\").removeClass(\"no-scroll\").removeClass(\"no-scroll-fixed-position\").css(\"top\", \"auto\");\r\n window.scrollTo(0, scrollPosition);\r\n };\r\n\r\n var disableBodyScrolling = function (useFixedPositioning) {\r\n scrollPosition = window.pageYOffset;\r\n if (useFixedPositioning) {\r\n $jq(\"body\").addClass(\"no-scroll-fixed-position\").css(\"top\", \"-\" + scrollPosition + \"px\");\r\n } else {\r\n $jq(\"body\").addClass(\"no-scroll\").css(\"top\", \"-\" + scrollPosition + \"px\");\r\n }\r\n \r\n };\r\n\r\n // use this to determine if an element is fully in view\r\n var isElementInViewport = function (el) {\r\n // Special bonus for those using jQuery\r\n if (typeof jQuery === \"function\" && el instanceof jQuery) {\r\n el = el[0];\r\n }\r\n\r\n var rect = el.getBoundingClientRect();\r\n\r\n return (\r\n (rect.top >= 0 || rect.height > window.innerHeight) &&\r\n rect.left >= 0 &&\r\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /* or $(window).height() */\r\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */\r\n );\r\n };\r\n\r\n // scrolls the page down to bring the bottom of the element into the visible part of the page\r\n var scrollDownElementIntoView = function(element) {\r\n var pageTop = $jq(window).scrollTop();\r\n var pageBottom = pageTop + $jq(window).height();\r\n var elementTop = $jq(element).offset().top;\r\n var elementBottom = elementTop + $jq(element).height();\r\n\r\n // only scroll if element is currently not in view\r\n if (pageBottom < elementBottom) {\r\n var amountToScroll = Math.abs(pageBottom - elementBottom);\r\n $jq(\"html, body\").animate({ scrollTop: pageTop + amountToScroll }, 600);\r\n }\r\n };\r\n\r\n return {\r\n debounce: debounce,\r\n enableBodyScrolling: enableBodyScrolling,\r\n disableBodyScrolling: disableBodyScrolling,\r\n scrollDownElementIntoView: scrollDownElementIntoView,\r\n isElementInViewport: isElementInViewport,\r\n isPassiveEventListenerOptionSupported: isPassiveEventListenerOptionSupported\r\n };\r\n})(jQuery);\r\n\r\nPeopleMedia.Cookies = (function () {\r\n \"use strict\";\r\n\r\n var setCookie = function(name, value, days, useDomain) {\r\n var expires = \"\";\r\n var domain = \"\";\r\n if (useDomain && PeopleMedia.Domain) {\r\n domain = \"; domain=.\" + PeopleMedia.Domain.toLowerCase();\r\n }\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + domain + expires + \"; path=/; secure\";\r\n };\r\n\r\n var getCookie = function(name) {\r\n var nameEQ = name + \"=\";\r\n var ca = document.cookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) === ' ')\r\n c = c.substring(1, c.length);\r\n if (c.indexOf(nameEQ) === 0)\r\n return c.substring(nameEQ.length, c.length);\r\n }\r\n return null;\r\n };\r\n\r\n var eraseCookie = function (name) {\r\n document.cookie = name + '=; Max-Age=-99999999;';\r\n };\r\n\r\n var parseKeyValueString = function (val) {\r\n var hash = [];\r\n try {\r\n var pieces = val.split('&');\r\n for (var i = 0; i < pieces.length; i++) {\r\n var pair = pieces[i].split('=');\r\n if (pair.length > 0) {\r\n var key = decodeURIComponent(pair[0]);\r\n var str = decodeURIComponent(pair[1]);\r\n hash[key] = str;\r\n }\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n return hash;\r\n };\r\n\r\n return {\r\n setCookie: setCookie,\r\n getCookie: getCookie,\r\n eraseCookie: eraseCookie,\r\n parseKeyValueString: parseKeyValueString\r\n };\r\n})();\r\n\r\nPeopleMedia.Timer = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Timer\";\r\n var logoutWarningMinutes = 15;\r\n var logoutWarningTimer = null;\r\n var StartCountdownTimer = function (minutes) {\r\n if (!PeopleMedia.PersistentLoginEnabled && PeopleMedia.IsLoggedIn) {\r\n if (minutes) {\r\n logoutWarningMinutes = minutes;\r\n }\r\n if (logoutWarningTimer) {\r\n clearTimeout(logoutWarningTimer);\r\n }\r\n\r\n logoutWarningTimer = setTimeout(ShowLogoutWarning, logoutWarningMinutes * 60000 - 10000);\r\n }\r\n };\r\n\r\n var autoLogoutInterval = null;\r\n var finalCountdown = 0;\r\n var ShowLogoutWarning = function () {\r\n if (!PeopleMedia.PersistentLoginEnabled && PeopleMedia.IsLoggedIn) {\r\n var html =\r\n \"
Please select the reason:
\" +\r\n \"Please provide comments (optional).
\" +\r\n \"Your concern is taken very seriously and may require a few days to fully investigate.
\" +\r\n \"This user has been blocked.
\" +\r\n \"\" +\r\n \"\" +\r\n \" \" +\r\n \"Loading Members...
\");\r\n });\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 60000;\r\n var url = \"/v3/chat/UpdateShowHideChatPanel\";\r\n var ajaxData = {\r\n \"show\": false\r\n };\r\n $jq.ajax({\r\n url: url,\r\n type: \"POST\",\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n };\r\n var resized = function () {\r\n var win = $jq(window);\r\n var leftColMargin = columnLeft.css(\"margin-left\");\r\n var width = win.width();\r\n if (width > 1330) {\r\n if (leftColMargin != \"-95px\") {\r\n columnLeft.animate({ \"margin-left\": \"-95px\" }, 400);\r\n }\r\n } else if (width > 1280) {\r\n if (leftColMargin != \"-55px\") {\r\n columnLeft.animate({ \"margin-left\": \"-55px\" }, 400);\r\n }\r\n } else {\r\n if (leftColMargin != \"-45px\") {\r\n columnLeft.animate({ \"margin-left\": \"-45px\" }, 400);\r\n }\r\n }\r\n\r\n scrolled();\r\n };\r\n var scrolled = function () {\r\n var win = $jq(window);\r\n var scrollTop = win.scrollTop();\r\n\r\n if (scrollTop > 80) {\r\n if (chatPane.css(\"top\") == \"0\") return;\r\n chatPane.css(\"top\", \"0px\");\r\n } else if (scrollTop >= 0) {\r\n chatPane.css(\"top\", 80 - scrollTop + \"px\");\r\n }\r\n };\r\n\r\n return pub;\r\n})(jQuery);\r\n\r\nPeopleMedia.WebSyncServer = (function () {\r\n \"use strict\";\r\n\r\n var Oid = \"PeopleMedia.WebSyncServer\";\r\n\r\n var _client = null;\r\n\r\n var Init = function () {\r\n if (_client == null &&\r\n !PeopleMediaConfig.Configuration.isUpgradePage &&\r\n typeof (fm) !== \"undefined\") {\r\n if (typeof (fm.websync.client) == \"object\") {\r\n // WSv3\r\n _client = fm.websync.client;\r\n } else {\r\n //WSv4+\r\n _client = new fm.websync.client(PeopleMediaConfig.Configuration.webSyncUrl);\r\n }\r\n\r\n if (_client.initialize)\r\n _client.initialize();\r\n\r\n _client.connect();\r\n }\r\n };\r\n\r\n return {\r\n get Client() { return _client; },\r\n get WebSyncUrl() { return PeopleMediaConfig.Configuration.webSyncUrl; },\r\n get Enabled() { return !PeopleMediaConfig.Configuration.isUpgradePage; },\r\n Init: Init\r\n };\r\n})();\r\n\r\nPeopleMedia.LikeMedia = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.LikeMedia\";\r\n\r\n var likeMedia = function (params) {\r\n params = params || {};\r\n var encodedMemberId = params.encodedMemberId || null;\r\n var publicMemberId = params.publicMemberId || null;\r\n var featureName = params.featureName || null;\r\n var mediaId = params.mediaId || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n var suppressErrors = params.suppressErrors === true;\r\n\r\n try {\r\n var apiSendEnabled = !!PeopleMedia.ApiSendEnabled;\r\n var pageDefinitionId = typeof (PeopleMedia.PageDefinitionId) !== \"undefined\" ? PeopleMedia.PageDefinitionId : null;\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 60000;\r\n var url = (apiSendEnabled) ? \"/v3/Ajax/SendApiPhotoLike\" : \"/v3/Ajax/LikePhoto\";\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"PublicMemberId\": publicMemberId,\r\n \"ObjectId\": mediaId,\r\n \"FeatureName\": featureName,\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null\r\n };\r\n if (params.pageNumber) {\r\n ajaxData.PageNumber = params.pageNumber;\r\n }\r\n if (params.pageDefinitionView) {\r\n ajaxData.PageDefinitionView = params.pageDefinitionView;\r\n }\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n if (response && response.redirect) {\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n var errorMessage = (response && response.message) ? response.message : null;\r\n var isDuplicate = (response && response.isDuplicate);\r\n if (!suppressErrors && !isDuplicate) {\r\n PeopleMedia.Popups.ShowGenericMessage(errorMessage);\r\n }\r\n if (hasOnComplete) {\r\n var errProp = {};\r\n if (response && response.isDuplicate) {\r\n errProp.isDuplicate = true;\r\n }\r\n onComplete(PeopleMedia.createErrorObject(errProp), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n }\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"likeMedia\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"likeMedia\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var commentMedia = function (params) {\r\n params = params || {};\r\n var encodedMemberId = params.encodedMemberId || null;\r\n var publicMemberId = params.publicMemberId || null;\r\n var featureName = params.featureName || null;\r\n var mediaId = params.mediaId || null;\r\n var message = params.message || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n var suppressErrors = params.suppressErrors === true;\r\n\r\n try {\r\n var pageDefinitionId = typeof (PeopleMedia.PageDefinitionId) !== \"undefined\" ? PeopleMedia.PageDefinitionId : null;\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 60000;\r\n var url = \"/v3/Ajax/CommentPhoto\";\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"PublicMemberId\": publicMemberId,\r\n \"ObjectId\": mediaId,\r\n \"Message\": message,\r\n \"FeatureName\": featureName,\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null,\r\n \"SkipCSSVerif\": \"HTMLEditor\"\r\n };\r\n if (params.pageNumber) {\r\n ajaxData.PageNumber = params.pageNumber;\r\n }\r\n if (params.pageDefinitionView) {\r\n ajaxData.PageDefinitionView = params.pageDefinitionView;\r\n }\r\n if (params.upn) {\r\n ajaxData.UPN = params.upn;\r\n }\r\n if (params.fromPage) {\r\n ajaxData.FromPage = params.fromPage;\r\n }\r\n if (params.includeQueryString === true) {\r\n url += window.location.search;\r\n }\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n if (response && response.redirect) {\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n var errorMessage = (response && response.message) ? response.message : null;\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(errorMessage);\r\n }\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n }\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"commentMedia\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"commentMedia\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n likeMedia: likeMedia,\r\n commentMedia: commentMedia\r\n };\r\n})(jQuery);\r\n\r\nPeopleMedia.Messaging = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Messaging\";\r\n var _messagePromptInProgress = false;\r\n var _messagePrompts = [];\r\n var _messagePromptsLegacy = [];\r\n var _messagePromptsAll = [];\r\n var _messagePromptsLegacyAll = [];\r\n var isSendingMessage = false;\r\n var _months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n var _days = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\n\r\n var sendMessage = function (params) {\r\n params = params || {};\r\n var encodedMemberId = params.encodedMemberId || null;\r\n var publicMemberId = params.publicMemberId || null;\r\n var featureName = params.featureName || null;\r\n var fromPage = params.fromPage || null;\r\n var pageDefinitionId = params.pageDefinitionId || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n var suppressErrors = params.suppressErrors === true;\r\n try {\r\n if (isSendingMessage === true) return;\r\n isSendingMessage = true;\r\n\r\n if (!pageDefinitionId && typeof (PeopleMedia.PageDefinitionId) !== \"undefined\") {\r\n pageDefinitionId = PeopleMedia.PageDefinitionId;\r\n }\r\n var apiSendEnabled = !!PeopleMedia.ApiSendEnabled;\t\r\n var url = (apiSendEnabled) ? \"/v3/Ajax/SendApiMessage\" : \"/v3/Ajax/SendMessage\";\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 60000;\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"PublicMemberId\": publicMemberId,\r\n \"FeatureName\": featureName,\r\n \"FromPage\": fromPage,\r\n \"SkipCSSVerif\": \"HTMLEditor\",\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null\r\n };\r\n if (params.pageNumber) {\r\n ajaxData.PageNumber = params.pageNumber;\r\n }\r\n if (params.pageDefinitionView) {\r\n ajaxData.PageDefinitionView = params.pageDefinitionView;\r\n }\r\n if (params.actionType) {\r\n ajaxData.ActionType = params.actionType;\r\n }\r\n if (params.objectId) {\r\n ajaxData.ObjectId = params.objectId;\r\n }\r\n if (params.todaysMatchCurrent) {\r\n ajaxData.TodaysMatchCurrent = params.todaysMatchCurrent;\r\n }\r\n if (params.searchId) {\r\n ajaxData.SearchId = params.searchId;\r\n }\r\n if (params.subject) {\r\n ajaxData.Subject = params.subject;\r\n }\r\n if (params.message) {\r\n ajaxData.Message = params.message;\r\n }\r\n if (params.upn) {\r\n ajaxData.UPN = params.upn;\r\n }\r\n if (params.fromPage) {\r\n ajaxData.FromPage = params.fromPage;\r\n }\r\n if (params.isCannedMessage) {\r\n ajaxData.IsCannedMessage = params.isCannedMessage;\r\n }\r\n if (params.prepopulatedMessageId) {\r\n ajaxData.PrepopulatedMessageId = params.prepopulatedMessageId;\r\n }\r\n if (params.trackingModule) {\r\n ajaxData.TrackingModule = params.trackingModule;\r\n }\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n isSendingMessage = false;\r\n if (response && response.status !== \"Success\" && response.redirect) {\r\n // upgrade\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n var errorMessage = (response && response.message) ? response.message : null;\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(errorMessage);\r\n }\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n isSendingMessage = false;\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n }\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"sendFlirt\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n isSendingMessage = false;\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"sendMessage\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var getMessagePromptsForSite = function (params) {\r\n params = params || {};\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n try {\r\n // skip if already loaded\r\n if (!params.forceRefresh && _messagePrompts && _messagePrompts.length > 0) {\r\n if (hasOnComplete) {\r\n onComplete(null, { status: \"Success\", data: { messagePrompts: _messagePrompts }}, params);\r\n }\r\n return;\r\n }\r\n\r\n // handle case when call is already in progress\r\n if (_messagePromptInProgress) {\r\n // wait .5s and retry once\r\n setTimeout(function() {\r\n if (params.isRetry) {\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), null, params);\r\n }\r\n return;\r\n } else {\r\n params.isRetry = true;\r\n getMessagePromptsForSite(params);\r\n }\r\n }, 500);\r\n return;\r\n }\r\n\r\n _messagePromptInProgress = true;\r\n\r\n var url = \"/v3/Ajax/GetMessagePromptsForSite\";\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 10000;\r\n var ajaxData = {};\r\n $jq.ajax({\r\n type: \"GET\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n _messagePromptInProgress = false;\r\n if (response && response.status === \"Success\" && response.data && response.data.messagePrompts) {\r\n _messagePrompts.length = 0;\r\n _messagePromptsLegacy.length = 0;\r\n _messagePromptsAll.length = 0;\r\n _messagePromptsLegacyAll.length = 0;\r\n Array.prototype.push.apply(_messagePromptsAll, response.data.messagePrompts\r\n .filter(function (obj) {\r\n return obj && obj.text;\r\n }));\r\n Array.prototype.push.apply(_messagePromptsLegacyAll, response.data.messagePrompts\r\n .filter(function (obj) {\r\n return obj && obj.text && obj.isLegacy === true;\r\n }));\r\n Array.prototype.push.apply(_messagePrompts, _messagePromptsAll);\r\n Array.prototype.push.apply(_messagePromptsLegacy, _messagePromptsLegacyAll);\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n _messagePrompts.length = 0;\r\n _messagePromptsLegacy.length = 0;\r\n _messagePromptsAll.length = 0;\r\n _messagePromptsLegacyAll.length = 0;\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n _messagePromptInProgress = false;\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"getMessagePromptsForSite\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n _messagePrompts.length = 0;\r\n _messagePromptsLegacy.length = 0;\r\n _messagePromptsAll.length = 0;\r\n _messagePromptsLegacyAll.length = 0;\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n _messagePromptInProgress = false;\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"getMessagePromptsForSite\" });\r\n _messagePrompts.length = 0;\r\n _messagePromptsLegacy.length = 0;\r\n _messagePromptsAll.length = 0;\r\n _messagePromptsLegacyAll.length = 0;\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var getRandomMessagePrompt = function (params) {\r\n try {\r\n var useLegacy = (params && params.isLegacy === true);\r\n var removeAfterUse = (params && params.removeAfterUse === true);\r\n var values = useLegacy ? _messagePromptsLegacy : _messagePrompts;\r\n var randomNumber = Math.floor(Math.random() * values.length);\r\n var response = values[randomNumber];\r\n if (removeAfterUse) {\r\n // remove message prompt which has been displayed\r\n values.splice(randomNumber, 1);\r\n\r\n // repopulate with all message prompts once they have all been displayed\r\n if (values.length === 0) {\r\n if (useLegacy) {\r\n Array.prototype.push.apply(_messagePromptsLegacy, _messagePromptsLegacyAll);\r\n } else {\r\n Array.prototype.push.apply(_messagePrompts, _messagePromptsAll);\r\n }\r\n }\r\n }\r\n return response;\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { oid: Oid, method: \"getRandomMessagePrompt\" });\r\n }\r\n };\r\n\r\n // returns time in format HH:mm AM/PM\r\n var getFormattedTimeFromTimestamp = function (timestamp) {\r\n var formattedTime = \"\";\r\n\r\n if (timestamp && typeof (timestamp) === \"number\") {\r\n var msgDate = new Date(timestamp);\r\n\r\n var hr = msgDate.getHours();\r\n var min = msgDate.getMinutes();\r\n if (min < 10) {\r\n min = \"0\" + min;\r\n }\r\n var ampm = \"AM\";\r\n if (hr === 12) {\r\n ampm = \"PM\";\r\n } else if (hr > 12) {\r\n hr -= 12;\r\n ampm = \"PM\";\r\n } else if (hr === 0) {\r\n hr = 12;\r\n }\r\n formattedTime = hr + \":\" + min + \" \" + ampm;\r\n }\r\n\r\n return formattedTime;\r\n };\r\n\r\n var formatMessageTimestamp = function (params) {\r\n var timestamp = params.timestamp;\r\n var mrc = params.mrc === true;\r\n var formattedDate = \"\";\r\n var today = new Date();\r\n var yesterday = new Date(today);\r\n yesterday.setDate(today.getDate() - 1);\r\n var lastWeek = new Date(today);\r\n lastWeek.setDate(today.getDate() - 6);\r\n lastWeek.setHours(0, 0, 0, 0);\r\n var lastYear = new Date(today);\r\n lastYear.setFullYear(today.getFullYear() - 1);\r\n lastYear.setHours(23, 59, 59, 999);\r\n\r\n if (timestamp && typeof (timestamp) === \"number\") {\r\n var msgDate = new Date(timestamp);\r\n\r\n // Sent today => Time is displayed (ex. 10:00 AM)\r\n if (msgDate.getFullYear() === today.getFullYear()\r\n && msgDate.getMonth() === today.getMonth()\r\n && msgDate.getDate() === today.getDate()) {\r\n formattedDate = getFormattedTimeFromTimestamp(timestamp);\r\n }\r\n // Sent previous calendar day => Yesterday + time is displayed\r\n else if (msgDate.getFullYear() === yesterday.getFullYear()\r\n && msgDate.getMonth() === yesterday.getMonth()\r\n && msgDate.getDate() === yesterday.getDate()) {\r\n formattedDate = \"Yesterday\";\r\n if (!mrc) {\r\n formattedDate += \", \" + getFormattedTimeFromTimestamp(timestamp);\r\n }\r\n }\r\n // Sent 2 to 7 calendar days ago => Day of the week + time is displayed (ex. Tuesday, 10:00 AM)\r\n else if (msgDate.getTime() >= lastWeek.getTime()) {\r\n formattedDate = _days[msgDate.getDay()];\r\n if (!mrc) {\r\n formattedDate += \", \" + getFormattedTimeFromTimestamp(timestamp);\r\n }\r\n }\r\n // Sent 7+ calendar days to 1 calendar year ago => Month abbreviation and day + time are displayed (ex. Aug 7, 10:00 AM)\r\n else if (msgDate.getTime() > lastYear.getTime()) {\r\n formattedDate = _months[msgDate.getMonth()] + \" \" + msgDate.getDate();\r\n if (!mrc) {\r\n formattedDate += \", \" + getFormattedTimeFromTimestamp(timestamp);\r\n }\r\n }\r\n // Sent more than 1 calendar year ago => MM/DD/YY + time is displayed (ex. 12/24/20, 10:00AM)\r\n else {\r\n var month = msgDate.getMonth();\r\n var day = msgDate.getDay();\r\n var year = msgDate.getFullYear().toString().slice(-2);\r\n formattedDate = month + \"/\" + day + \"/\" + year;\r\n if (!mrc) {\r\n formattedDate += \", \" + getFormattedTimeFromTimestamp(timestamp);\r\n }\r\n }\r\n }\r\n\r\n return formattedDate;\r\n };\r\n\r\n // get time formatted like \"Minutes Ago\", \"Days Ago\", etc.\r\n var formatRelativeTimeFromTimestamp = function(timestamp) {\r\n var text = \"\";\r\n if (timestamp && typeof (timestamp) === \"number\") {\r\n var timeElapsedMins = (Date.now() - timestamp) / 1000 / 60;\r\n var timeElapsedHours = timeElapsedMins > 0 ? timeElapsedMins / 60 : 0;\r\n var timeElapsedDays = timeElapsedHours > 0 ? timeElapsedHours / 24 : 0;\r\n var timeElapsedYears = timeElapsedDays > 0 ? timeElapsedDays / 365 : 0;\r\n if (timeElapsedMins < 60) {\r\n var displayMins = Math.floor(timeElapsedMins);\r\n if (displayMins === 0) {\r\n displayMins = 1; // don't show '0 Minutes'\r\n }\r\n text = displayMins + \" Minute\" + (displayMins === 1 ? \"\" : \"s\") + \" Ago\";\r\n } else if (timeElapsedHours < 24) {\r\n var displayHours = Math.floor(timeElapsedHours);\r\n text = displayHours + \" Hour\" + (displayHours === 1 ? \"\" : \"s\") + \" Ago\";\r\n } else if (timeElapsedDays < 365) {\r\n var displayDays = Math.floor(timeElapsedDays);\r\n text = displayDays + \" Day\" + (displayDays === 1 ? \"\" : \"s\") + \" Ago\";\r\n } else if (timeElapsedYears > 0) {\r\n var displayYears = Math.floor(timeElapsedYears);\r\n text = displayYears + \" Year\" + (displayYears === 1 ? \"\" : \"s\") + \" Ago\";\r\n }\r\n }\r\n\r\n return text;\r\n };\r\n\r\n var getConnectionType = function (params) {\r\n params = params || {};\r\n var publicMemberId = params.publicMemberId || null;\r\n var pageDefinitionId = params.pageDefinitionId || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n try {\r\n if (!pageDefinitionId && typeof (PeopleMedia.PageDefinitionId) !== \"undefined\") {\r\n pageDefinitionId = PeopleMedia.PageDefinitionId;\r\n }\r\n var url = \"/v3/Ajax/GetConnectionType\";\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 5000;\r\n var ajaxData = {\r\n \"PublicMemberId\": publicMemberId,\r\n \"PageDefinitionId\": pageDefinitionId\r\n };\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n if (response && response.status !== \"Success\" && response.redirect) {\r\n // upgrade\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"getConnectionType\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"getConnectionType\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var checkForNewMutualMatch = function (params) {\r\n params = params || {};\r\n var publicMemberId = params.publicMemberId || null;\r\n var previousConnectionType = params.connectionType || null;\r\n var previousThreadType = params.threadType || null;\r\n var refresh = params.refresh === true;\r\n var pageDefinitionId = params.pageDefinitionId || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n\r\n var showMatchMutuals = !!PeopleMedia.ShowMatchMutualConnections;\r\n var isMutualMessageThread = (previousConnectionType === PeopleMedia.Constants.ConnectionType.Mutual &&\r\n previousThreadType === PeopleMedia.Constants.ThreadType.Message);\r\n\r\n // skip calls if Match Mutuals disabled, other member is missing or this is already a mutual message thread\r\n if (!showMatchMutuals || !publicMemberId || !hasOnComplete || (isMutualMessageThread && !refresh)) {\r\n onComplete(null, {\r\n publicMemberId: publicMemberId,\r\n connectionType: previousConnectionType,\r\n threadType: previousThreadType,\r\n newMutualMatch: false\r\n }, params);\r\n return;\r\n }\r\n\r\n getConnectionType({\r\n publicMemberId: publicMemberId,\r\n pageDefinitionId: pageDefinitionId,\r\n onComplete: function (err, response) {\r\n if (!err && response && response.status === \"Success\") {\r\n response.newMutualMatch = response.connectionType === PeopleMedia.Constants.ConnectionType.Mutual &&\r\n response.connectionType !== previousConnectionType;\r\n }\r\n onComplete(err, response, params);\r\n }\r\n });\r\n };\r\n\r\n return {\r\n get MessagePrompts() { return _messagePrompts; },\r\n get MessagePromptsLegacy() { return _messagePromptsLegacy; },\r\n sendMessage: sendMessage,\r\n getMessagePromptsForSite: getMessagePromptsForSite,\r\n getRandomMessagePrompt: getRandomMessagePrompt,\r\n formatMessageTimestamp: formatMessageTimestamp,\r\n formatRelativeTimeFromTimestamp: formatRelativeTimeFromTimestamp,\r\n getConnectionType: getConnectionType,\r\n checkForNewMutualMatch: checkForNewMutualMatch\r\n };\r\n})(jQuery);\r\n\r\nPeopleMedia.Flirt = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Flirt\";\r\n\r\n var sendFlirt = function(params) {\r\n params = params || {};\r\n var encodedMemberId = params.encodedMemberId || null;\r\n var publicMemberId = params.publicMemberId || null;\r\n var featureName = params.featureName || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof(onComplete) === \"function\";\r\n var suppressErrors = params.suppressErrors === true;\r\n try {\r\n var apiSendEnabled = !!PeopleMedia.ApiSendEnabled;\r\n var pageDefinitionId = typeof (PeopleMedia.PageDefinitionId) !== \"undefined\"\r\n ? PeopleMedia.PageDefinitionId\r\n : null;\r\n var url = (apiSendEnabled) ? \"/v3/Ajax/SendApiProfileLike\" : \"/v3/Ajax/SendFlirt\";\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 60000;\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"FeatureName\": featureName,\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null,\r\n \"PublicMemberId\": publicMemberId\r\n };\r\n if (params.pageNumber) {\r\n ajaxData.PageNumber = params.pageNumber;\r\n }\r\n if (params.pageDefinitionView) {\r\n ajaxData.PageDefinitionView = params.pageDefinitionView;\r\n }\r\n if (params.replyToMessageId) {\r\n ajaxData.ReplyToMessageId = params.replyToMessageId;\r\n }\r\n if (params.actionType) {\r\n ajaxData.ActionType = params.actionType;\r\n }\r\n if (params.objectId) {\r\n ajaxData.ObjectId = params.objectId;\r\n }\r\n if (params.todaysMatchCurrent) {\r\n ajaxData.TodaysMatchCurrent = params.todaysMatchCurrent;\r\n }\r\n if (params.searchId) {\r\n ajaxData.SearchId = params.searchId;\r\n }\r\n if (params.flirtId) {\r\n ajaxData.FlirtId = params.flirtId;\r\n }\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function(response) {\r\n if (response && response.redirect) {\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n var errorMessage = (response && response.message) ? response.message : null;\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(errorMessage);\r\n }\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n }\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"sendFlirt\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"sendFlirt\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var sendBirthdayFlirt = function (params) {\r\n params = params || {};\r\n var encodedMemberId = params.encodedMemberId || null;\r\n var publicMemberId = params.publicMemberId || null;\r\n var featureName = params.featureName || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n var suppressErrors = params.suppressErrors === true;\r\n try {\r\n var pageDefinitionId = typeof (PeopleMedia.PageDefinitionId) !== \"undefined\"\r\n ? PeopleMedia.PageDefinitionId\r\n : null;\r\n var url = \"/v3/Ajax/SendBirthdayFlirt\";\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 60000;\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"FeatureName\": featureName,\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null,\r\n \"PublicMemberId\": publicMemberId\r\n };\r\n if (params.pageNumber) {\r\n ajaxData.PageNumber = params.pageNumber;\r\n }\r\n if (params.pageDefinitionView) {\r\n ajaxData.PageDefinitionView = params.pageDefinitionView;\r\n }\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n if (response && response.redirect) {\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n var errorMessage = (response && response.message) ? response.message : null;\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(errorMessage);\r\n }\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n }\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"sendBirthdayFlirt\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"sendBirthdayFlirt\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var sendMissingPhotoFlirt = function (params) {\r\n try {\r\n var missingPhotoParams = $jq.extend({}, params, { flirtId: 7 });\r\n sendFlirt(missingPhotoParams);\r\n\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"sendMissingPhotoFlirt\" });\r\n if (params && typeof (params.onComplete) === \"function\") {\r\n params.onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var sendImInterestedFlirt = function (params) {\r\n try {\r\n var imInterestedParams = $jq.extend({}, params, { flirtId: 8 });\r\n sendFlirt(imInterestedParams);\r\n\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"sendImInterestedFlirt\" });\r\n if (typeof (params.onComplete) === \"function\") {\r\n params.onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n sendFlirt: sendFlirt,\r\n sendBirthdayFlirt: sendBirthdayFlirt,\r\n sendMissingPhotoFlirt: sendMissingPhotoFlirt,\r\n sendImInterestedFlirt: sendImInterestedFlirt\r\n };\r\n})(jQuery);\r\n\r\nPeopleMedia.Favorite = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Favorite\";\r\n\r\n var favoriteAction = function (params) {\r\n params = params || {};\r\n var encodedMemberId = params.encodedMemberId || null;\r\n var featureName = params.featureName || null;\r\n var isAddFavorite = typeof (params.action) !== \"undefined\" && params.action === \"add\";\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n var suppressErrors = params.suppressErrors === true;\r\n\r\n try {\r\n var pageDefinitionId = typeof (PeopleMedia.PageDefinitionId) !== \"undefined\" ? PeopleMedia.PageDefinitionId : null;\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 30000;\r\n var url = (isAddFavorite) ? \"/v3/Ajax/SaveToFavorites\" : \"/v3/Ajax/UnFavorite\";\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"FeatureName\": featureName,\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null\r\n };\r\n if (params.pageNumber) {\r\n ajaxData.PageNumber = params.pageNumber;\r\n }\r\n if (params.pageDefinitionView) {\r\n ajaxData.PageDefinitionView = params.pageDefinitionView;\r\n }\r\n if (params.searchId) {\r\n ajaxData.SearchId = params.searchId;\r\n }\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n if (response && response.redirect) {\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n var errorMessage = (response && response.message) ? response.message : null;\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(errorMessage);\r\n }\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n }\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"favoriteAction\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"favoriteAction\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var addFavorite = function (params) {\r\n var favParams = $jq.extend({}, params, { action: \"add\" });\r\n favoriteAction(favParams);\r\n };\r\n\r\n var removeFavorite = function (params) {\r\n var removeParams = $jq.extend({}, params, { action: \"remove\" });\r\n favoriteAction(removeParams);\r\n };\r\n\r\n return {\r\n addFavorite: addFavorite,\r\n removeFavorite: removeFavorite\r\n };\r\n})(jQuery);\r\n\r\nPeopleMedia.Media = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Media\";\r\n\r\n var getProfilePhotos = function (params) {\r\n params = params || {};\r\n var encodedMemberId = params.encodedMemberId || null;\r\n var publicMemberId = params.publicMemberId || null;\r\n var featureName = params.featureName || null;\r\n var onComplete = params.onComplete || null;\r\n var hasOnComplete = typeof (onComplete) === \"function\";\r\n var suppressErrors = params.suppressErrors === true;\r\n\r\n try {\r\n var pageDefinitionId = typeof (PeopleMedia.PageDefinitionId) !== \"undefined\" ? PeopleMedia.PageDefinitionId : null;\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 30000;\r\n var url = \"/v3/Ajax/ProfilePhotos\";\r\n var ajaxData = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"FeatureName\": featureName,\r\n \"MediaId\": null,\r\n \"MaxResults\": null,\r\n \"ImageSize\": null,\r\n \"PageDefinitionId\": pageDefinitionId,\r\n \"PageDefinitionSubId\": null,\r\n \"PageNumber\": null,\r\n \"PageDefinitionView\": null,\r\n \"PublicMemberId\": publicMemberId\r\n };\r\n if (params.mediaId) {\r\n ajaxData.MediaId = params.mediaId;\r\n }\r\n if (params.maxResults) {\r\n ajaxData.MaxResults = params.maxResults;\r\n }\r\n if (params.imageSize) {\r\n ajaxData.ImageSize = params.imageSize;\r\n }\r\n if (params.pageNumber) {\r\n ajaxData.PageNumber = params.pageNumber;\r\n }\r\n if (params.pageDefinitionView) {\r\n ajaxData.PageDefinitionView = params.pageDefinitionView;\r\n }\r\n $jq.ajax({\r\n headers: PeopleMedia.sitePostbackHeader(),\r\n type: \"POST\",\r\n url: url,\r\n data: JSON.stringify(ajaxData),\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n success: function (response) {\r\n if (response && response.redirect) {\r\n location.href = response.redirect;\r\n return;\r\n }\r\n if (response && response.status === \"Success\") {\r\n if (hasOnComplete) {\r\n onComplete(null, response, params);\r\n }\r\n return;\r\n }\r\n var errorMessage = (response && response.message) ? response.message : null;\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(errorMessage);\r\n }\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({}), response, params);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n if (!suppressErrors) {\r\n PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n }\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"getProfilePhotos\", duration: duration, params: params }, jqXHR, textStatus, errorThrown);\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createAjaxErrorObject({ jqXHR: jqXHR, errorThrown: errorThrown }), null, params);\r\n }\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n } catch (ex) {\r\n PeopleMedia.Logger.LogExceptionWithDetail(ex, { Oid: Oid, method: \"getProfilePhotos\" });\r\n if (hasOnComplete) {\r\n onComplete(PeopleMedia.createErrorObject({ ex: ex }), null, params);\r\n }\r\n }\r\n };\r\n\r\n var getSilhouetteUrl = function (gender, useSquareUrl) {\r\n var intGender = (gender === 1 || gender === \"1\" || gender === \"Male\" || gender === \"male\") ? 1 : 2;\r\n var suffix = (useSquareUrl) ? \"q\" : \"\";\r\n return \"https://pmi.peoplemedia.com/pmicontent/common/stock/noPhoto-\" + intGender.toString() + suffix + \".png\";\r\n };\r\n\r\n var getPhotoInfo = function (apiPhotoData) {\r\n var photoInfo = {\r\n photoId: null,\r\n photoUrl: \"\",\r\n silhouette: false,\r\n photoCount: 0,\r\n errorUrl: \"\"\r\n };\r\n if (apiPhotoData.Photo &&\r\n typeof (apiPhotoData.Photo) === \"object\" &&\r\n apiPhotoData.Photo.SquareUrl &&\r\n typeof (apiPhotoData.Photo.SquareUrl) === \"string\") {\r\n photoInfo.photoUrl = apiPhotoData.Photo.SquareUrl;\r\n photoInfo.photoId = apiPhotoData.Photo.PhotoId;\r\n } else {\r\n // use silhouette photo\r\n photoInfo.silhouette = true;\r\n photoInfo.photoUrl = getSilhouetteUrl(apiPhotoData.Gender, true);\r\n }\r\n photoInfo.errorUrl = getSilhouetteUrl(apiPhotoData.Gender, true);\r\n\r\n // populate photo count (note: primary photo can be a silhouette (unapproved) and still have photos > 0)\r\n if (apiPhotoData.PhotoCount && typeof (apiPhotoData.PhotoCount) === \"number\" && apiPhotoData.PhotoCount > 0) {\r\n photoInfo.photoCount = apiPhotoData.PhotoCount;\r\n }\r\n return photoInfo;\r\n };\r\n\r\n return {\r\n getProfilePhotos: getProfilePhotos,\r\n getSilhouetteUrl: getSilhouetteUrl,\r\n getPhotoInfo: getPhotoInfo\r\n };\r\n})(jQuery);\r\n\r\n// jQuery plugin used by PeopleMedia.ImpressionTracking\r\n(function ($jq) {\r\n \"use strict\";\r\n $jq.fn.onImpression = function (options) {\r\n\r\n var settings = $jq.extend({\r\n offset: 0,\r\n callback: null,\r\n attribute: \"\",\r\n alwayscallback: false,\r\n scrollable: \"\"\r\n },\r\n options);\r\n\r\n var $window = $jq(window),\r\n $scrollable = $jq(settings.scrollable),\r\n onImpressionElements = this,\r\n loaded;\r\n\r\n this.one(\"onImpression\", function () {\r\n if (typeof settings.callback === \"function\") settings.callback.call(this, this.getAttribute(settings.attribute));\r\n });\r\n\r\n this.on(\"alwaysOnImpression\", function () {\r\n if (typeof settings.callback === \"function\") settings.callback.call(this, this.getAttribute(settings.attribute));\r\n });\r\n\r\n function onImpression() {\r\n var inview = onImpressionElements.filter(function () {\r\n var $e = $jq(this);\r\n if ($e.is(\":hidden\")) return;\r\n var wt = $window.scrollTop(),\r\n wb = wt + $window.height(),\r\n et = $e.offset().top,\r\n eb = et + $e.height();\r\n var inScrollable = false;\r\n if ($scrollable.length) {\r\n var scrollTop = $scrollable.scrollTop(),\r\n scrollBottom = scrollTop + $scrollable.height();\r\n inScrollable = (eb >= scrollTop - settings.offset && et <= scrollBottom + settings.offset);\r\n }\r\n return (eb >= wt - settings.offset && et <= wb + settings.offset) || inScrollable;\r\n });\r\n\r\n if (settings.alwayscallback) {\r\n loaded = inview.trigger(\"alwaysOnImpression\");\r\n }\r\n else {\r\n loaded = inview.trigger(\"onImpression\");\r\n onImpressionElements = onImpressionElements.not(loaded);\r\n }\r\n }\r\n\r\n // Only run code if the callback is available, else there is no point\r\n if (typeof settings.callback === \"function\") {\r\n $window.on(\"scroll.onImpression resize.onImpression lookup.onImpression\", onImpression);\r\n if ($scrollable.length) {\r\n $scrollable.on(\"scroll.onImpression resize.onImpression lookup.onImpression\", onImpression);\r\n }\r\n onImpression();\r\n }\r\n\r\n return this;\r\n };\r\n\r\n})(window.jQuery);\r\n\r\n// SetCaptureImpression is looking for items that have data attributes \"data-encodedmemberid\" \"data-pagenumber\" \"data-ordinalposition\"\r\nPeopleMedia.ImpressionTracking = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.ImpressionTracking\";\r\n\r\n var _timeoutTime = 850;\r\n var _captureImpressionTimeout = null;\r\n var _captureImpressionArray = [];\r\n var _searchType = 0;\r\n\r\n var RunCaptureImpression = function () {\r\n if (_captureImpressionArray && _captureImpressionArray.length > 0) {\r\n var startTime = new Date().getTime();\r\n var timeoutValue = 20000;\r\n var url = \"/v3/Ajax/CaptureProfileImpression\";\r\n var ajaxData = {\r\n 'impressionData': _captureImpressionArray,\r\n 'searchType': _searchType\r\n };\r\n // save the impressions!\r\n $jq.ajax({\r\n contentType: 'application/json; charset=utf-8',\r\n url: url,\r\n type: \"post\",\r\n dataType: \"json\",\r\n data: JSON.stringify(ajaxData),\r\n success: function (response) {\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n var endTime = new Date().getTime();\r\n var duration = (endTime - startTime);\r\n // PeopleMedia.Popups.ShowGenericMessage(PeopleMedia.Popups.AjaxErrorMessage());\r\n PeopleMedia.Logger.LogAjaxErrorXHR(\"Ajax request failure\", url, { Oid: Oid, method: \"RunCaptureImpression\", duration: duration }, jqXHR, textStatus, errorThrown);\r\n },\r\n async: true,\r\n cache: false,\r\n timeout: timeoutValue,\r\n suppressErrors: true\r\n });\r\n _captureImpressionArray = [];\r\n }\r\n };\r\n\r\n var SetCaptureImpression = function (impressionClass, searchType) {\r\n _searchType = searchType;\r\n\r\n $jq(impressionClass).onImpression({\r\n offset: -5,\r\n callback: function () {\r\n var $this = $jq(this);\r\n var encodedMemberId = $this.attr(\"data-encodedmemberid\");\r\n var pageNumber = $this.attr(\"data-pagenumber\");\r\n var ordinalPosition = $this.attr(\"data-ordinalposition\");\r\n if (encodedMemberId) {\r\n\r\n // Reset CaptureImpressionTimeout and add the new value before submitting again\r\n clearTimeout(_captureImpressionTimeout);\r\n\r\n var details = {\r\n \"EncodedMemberId\": encodedMemberId,\r\n \"PageNumber\": pageNumber,\r\n \"OrdinalPosition\": ordinalPosition\r\n };\r\n\r\n // add new details to the overall array\r\n _captureImpressionArray.push(details);\r\n\r\n // apply a timeout so we can gather extra Impressions if possible\r\n _captureImpressionTimeout = setTimeout(function () {\r\n RunCaptureImpression();\r\n }, _timeoutTime);\r\n\r\n }\r\n }\r\n });\r\n };\r\n\r\n return {\r\n RunCaptureImpression: RunCaptureImpression,\r\n SetCaptureImpression: SetCaptureImpression\r\n };\r\n})(jQuery);\r\n\r\nPeopleMedia.Pagination = (function ($jq) {\r\n \"use strict\";\r\n var Oid = \"PeopleMedia.Pagination\";\r\n\r\n var calculatePageCount = function (totalRecords, perPage) {\r\n var pageCount = 0;\r\n if (!isNaN(totalRecords) && !isNaN(perPage) && totalRecords > 0 && perPage > 0) {\r\n pageCount = Math.ceil(totalRecords / perPage);\r\n if (pageCount < 1) {\r\n pageCount = 1;\r\n }\r\n }\r\n return pageCount;\r\n };\r\n\r\n var getPaginationContainerInnerHtml = function (currentPage) {\r\n var prevPage = currentPage - 1;\r\n var nextPage = currentPage + 1;\r\n return \" Prev\" + \r\n \"\" +\r\n \"Next \";\r\n };\r\n\r\n var getPageNumberItems = function (params) {\r\n var currentPage = params.currentPage;\r\n var totalPages = params.totalPages;\r\n var pageNum;\r\n var result = [];\r\n\r\n // Logic assumes 7 PageNumberItem slots to fill (where a slot is either a page link or an ellipse)\r\n // since that is the minimum for the format: 1 ... 4 5 6 ... 9\r\n // We want to always show links for first, last, previous and next pages.\r\n if (totalPages <= 7) {\r\n // no ellipsis format: 1 2 3 4 5 6 7\r\n for (pageNum = 1; pageNum <= totalPages; pageNum++) {\r\n result.push({\r\n pageNumber: pageNum,\r\n isCurrentPage: (pageNum === currentPage),\r\n isEllipsis: false\r\n });\r\n }\r\n } else {\r\n // There are more than 7 items with at least one ellipsis\r\n if (currentPage <= 4) {\r\n // Ellipsis at end format: 1 2 3 4 5 ... 9\r\n // Fill first five slots sequentially from 1 to 5\r\n for (pageNum = 1; pageNum <= 5; pageNum++) {\r\n result.push({\r\n pageNumber: pageNum,\r\n isCurrentPage: (pageNum === currentPage),\r\n isEllipsis: false\r\n });\r\n }\r\n\r\n result.push({\r\n isEllipsis: true\r\n });\r\n\r\n // Show single link to last page\r\n result.push({\r\n pageNumber: totalPages,\r\n isCurrentPage: (currentPage === totalPages),\r\n isEllipsis: false\r\n });\r\n } else if (totalPages - currentPage <= 3) {\r\n // Ellipsis at start format: 1 ... 5 6 7 8 9\r\n // Show single link to first page\r\n result.push({\r\n pageNumber: 1,\r\n isCurrentPage: (currentPage === 1),\r\n isEllipsis: false\r\n });\r\n\r\n result.push({\r\n isEllipsis: true\r\n });\r\n\r\n // Fill last 5 slots sequentially starting with last page - 4\r\n for (pageNum = totalPages - 4; pageNum <= totalPages; pageNum++) {\r\n result.push({\r\n pageNumber: pageNum,\r\n isCurrentPage: (pageNum === currentPage),\r\n isEllipsis: false\r\n });\r\n }\r\n } else {\r\n // Two ellipsis format: 1 ... 4 5 6 ... 9\r\n // This format won't be shown if the total pages is 8\r\n // Show single link to first page\r\n result.push({\r\n pageNumber: 1,\r\n isCurrentPage: (currentPage === 1),\r\n isEllipsis: false\r\n });\r\n\r\n // first ellipsis\r\n result.push({\r\n isEllipsis: true\r\n });\r\n\r\n // add three middle links for previous, current and next page\r\n for (pageNum = currentPage - 1; pageNum <= currentPage + 1; pageNum++) {\r\n result.push({\r\n pageNumber: pageNum,\r\n isCurrentPage: (pageNum === currentPage),\r\n isEllipsis: false\r\n });\r\n }\r\n\r\n // second ellipsis\r\n result.push({\r\n isEllipsis: true\r\n });\r\n\r\n // Show single link to last page\r\n result.push({\r\n pageNumber: totalPages,\r\n isCurrentPage: (currentPage === totalPages),\r\n isEllipsis: false\r\n });\r\n }\r\n }\r\n return result;\r\n\r\n };\r\n\r\n var convertPageNumberItemsToHtml = function (pageNumberItems) {\r\n var result = \"\";\r\n if (pageNumberItems && pageNumberItems.length > 0) {\r\n for (var i = 0; i < pageNumberItems.length; i++) {\r\n if (pageNumberItems[i].isEllipsis) {\r\n result += \"...\";\r\n } else if (pageNumberItems[i].isCurrentPage) {\r\n result += \"\" + pageNumberItems[i].pageNumber + \"\";\r\n } else {\r\n result += \"\" + pageNumberItems[i].pageNumber + \"\";\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var getPaginationNamespace = function (namespace) {\r\n var result = namespace || \".pmpagination\";\r\n if (namespace && namespace.substring(0, 1) !== \".\") {\r\n result = \".\" + namespace;\r\n }\r\n return result;\r\n };\r\n\r\n var updatePrevNextButton = function ($button, pageNumber, isActive) {\r\n if (isActive) {\r\n $button.removeClass(\"inactive\");\r\n } else {\r\n $button.addClass(\"inactive\");\r\n }\r\n $button.attr(\"data-pagenumber\", pageNumber);\r\n };\r\n\r\n var updatePageNumbers = function ($pageNumbers, currentPage, totalPages) {\r\n var pageNumberItems = getPageNumberItems({\r\n currentPage: currentPage,\r\n totalPages: totalPages\r\n });\r\n var pageNumberHtml = convertPageNumberItemsToHtml(pageNumberItems);\r\n $pageNumbers.empty().html(pageNumberHtml);\r\n };\r\n\r\n var convertPageNumber = function (pageString) {\r\n var pageNumber = parseInt(pageString, 10);\r\n if (!isNaN(pageNumber)) {\r\n return pageNumber;\r\n }\r\n return null;\r\n };\r\n\r\n var updatePaginationContainer = function (params) {\r\n var $container = params.$container || $jq(\"\");\r\n if (!$container.hasClass(\"pagination-container\")) {\r\n $container.addClass(\"pagination-container\");\r\n }\r\n\r\n var namespace = getPaginationNamespace(params.namespace);\r\n var totalRecords = params.totalRecords;\r\n var perPage = params.perPage;\r\n var currentPage = params.currentPage;\r\n\r\n var totalPages = calculatePageCount(totalRecords, perPage);\r\n if (currentPage < 1) {\r\n currentPage = 1;\r\n }\r\n\r\n if (currentPage > totalPages && totalPages > 0) {\r\n // set to last page if we go over the total number of pages\r\n currentPage = totalPages;\r\n }\r\n\r\n var hasPreviousPage = (currentPage > 1);\r\n var hasNextPage = (currentPage < totalPages);\r\n\r\n $container.empty();\r\n if (totalPages === 0) {\r\n $container.addClass(\"pagination-empty\").html(\"