function formatPopupNotification(input, notificationId)
{
	var pattern1 = /<span class="nitroNotificationTitle">([\?:"'\w\s\|-]+)<\/span>/i;
	var pattern2 = /<span class="nitroNotificationMessage">([\?:"'\{\}\!\._,\w\s\|-]+)<\/span>/i;
	var pattern3 = /<span class="nitroNotificationData">([\?:"'=\w\s\|\-]+)<\/span>/i; // ([=\w\s\|\-]+)
	var notificationMessage = null;
 	var notificationData = null;

	var patternMatch2 = input.match(pattern2);
    if (patternMatch2)
	{
		notificationMessage = patternMatch2[1];
	}

	var patternMatch3 = input.match(pattern3);
    if (patternMatch3)
    {
    	notificationData = patternMatch3[1];      
	}
		
	if (notificationId == 'user_challenge_invite' || notificationId == 'user_challenge_results')
	{
		var profileUUID = '$personUUID';
		if (sn_currentUserData != undefined)
		{
			var viewerUUID = sn_currentUserData.a;
		}
		else
		{
			var viewerUUID = 'anonymous';
		}
		var dataArray = notificationData.split('|||');
		var nitro_winnerUUID = dataArray[0];
        var nitro_winnerFirstName = dataArray[1];
		var nitro_winnerValue = parseInt(dataArray[2]);
		var nitro_winnerPoints = parseInt(dataArray[3]);
		var nitro_loserUUID = dataArray[4];
		var nitro_loserFirstName = dataArray[5];
		var nitro_loserValue = parseInt(dataArray[6]);
		var nitro_loserPoints = parseInt(dataArray[7]);
		var nitro_customDataArray = dataArray[9].split('===');
		var nitro_competitionID = dataArray[8];

		var nitro_challengerUUID = nitro_customDataArray[0];
		var nitro_gameUUID = nitro_customDataArray[1];
		var nitro_gameTitle = nitro_customDataArray[3];
		var nitro_gameURL = nitro_customDataArray[2];

		var challenger = '';
        	var challengerURL = '';
		var opponent = '';
		var opponentURL = '';
        	var challengerPoints = '';
        	var opponentPoints = '';

		if (nitro_winnerUUID == nitro_challengerUUID)
        	{
                	challenger = nitro_winnerFirstName;
                	challengerURL = '/' + challenger;
			opponent = nitro_loserFirstName;
                	opponentURL = '/' + opponent;
			challengerPoints = String(nitro_winnerValue);
			opponentPoints = String(nitro_loserValue);

			if (viewerUUID == nitro_winnerUUID)
                        {
                                challenger = 'You';
                        }
                        else if (viewerUUID == nitro_loserUUID)
                        {
                                opponent = 'You';
                        }
        	}
        	else
        	{
                	challenger = nitro_loserFirstName;
                	challengerURL = '/' + challenger;
			opponent = nitro_winnerFirstName;
                	opponentURL = '/' + opponent;
			challengerPoints = String(nitro_loserValue);
			opponentPoints = String(nitro_winnerValue);

			if (viewerUUID == nitro_winnerUUID)
                        {
                                opponent = 'You';
                        }
                        else if (viewerUUID == nitro_loserUUID)
                        {
                                challenger = 'You';
                        }
        	}
		
		if (notificationId == 'user_challenge_invite')
		{
			// invite
			var msg = notificationMessage.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
        		msg = msg.replace('{carc_score}', challengerPoints);
			msg = msg.replace('{carc_challenger}', '<a href="' + challengerURL + '">' + challenger + '</a>');
			msg = msg.replace('{carc_opponent}', '<a href="' + opponentURL + '">' + opponent + '</a>');
        		input = input.replace(pattern2, '<span class="nitroNotificationMessage">' + msg + '</span>');

        		return input;
		}
		else
		{
			// result
			var pattern1a = /<span class="nitroNotificationTitle_Tie">(['"\{\}\!\._,\w\s\|-]+)<\/span>/i;
			var pattern1b = /<span class="nitroNotificationTitle_Win">(['"\{\}\!\._,\w\s\|-]+)<\/span>/i;
			var pattern1c = /<span class="nitroNotificationTitle_Lose">(['"\{\}\!\._,\w\s\|-]+)<\/span>/i;
			var pattern2a = /<span class="nitroNotificationMessage_Tie">(['"\{\}\!\._,\w\s\|-]+)<\/span>/i;
			var pattern2b = /<span class="nitroNotificationMessage_Win">(['"\{\}\!\._,\w\s\|-]+)<\/span>/i;
			var pattern2c = /<span class="nitroNotificationMessage_Lose">(['"\{\}\!\._,\w\s\|-]+)<\/span>/i;
			
			var patternMatch2a = input.match(pattern2a);
            		if (patternMatch2a)
            		{
                    		var notificationMessageTie = patternMatch2a[1];
            		}
            
            		var patternMatch2b = input.match(pattern2b);
            		if (patternMatch2b)
            		{
                    		var notificationMessageWin = patternMatch2b[1];
            		}

            		var patternMatch2c = input.match(pattern2c);
            		if (patternMatch2c)
            		{
                    		var notificationMessageLose = patternMatch2c[1];
            		}

			if (nitro_winnerValue == nitro_loserValue)
			{
				// tie
				input = input.replace(pattern1a, '<span class="nitroNotificationTitle">$1</span>');
				input = input.replace(pattern1b, '');
				input = input.replace(pattern1c, '');
				
				var msg = notificationMessageTie; 
				msg = msg.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
            			msg = msg.replace('{carc_challenger}', '<a href="' + challengerURL + '">' + challenger + '</a>');
            			msg = msg.replace('{carc_opponent}', '<a href="' + opponentURL + '">' + opponent + '</a>');
				msg = msg.replace('{carc_challengerScore}', challengerPoints);
				input = input.replace(pattern2a, '<span class="nitroNotificationMessage">' + msg + '</span>');
				input = input.replace(pattern2b, '');
				input = input.replace(pattern2c, '');

                		//nitro_winnerPoints;
               
               	 		return input;
			}
			else
			{
				// someone won
				var points = null;
				if (sn_currentUserData.a == nitro_winnerUUID)
				{
					input = input.replace(pattern1a, '');
					input = input.replace(pattern1b, '<span class="nitroNotificationTitle">$1</span>');
					input = input.replace(pattern1c, '');

					var msg = notificationMessageWin; 
					msg = msg.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
                			msg = msg.replace('{carc_challenger}', '<a href="' + challengerURL + '">' + challenger + '</a>');
                			msg = msg.replace('{carc_opponent}', '<a href="' + opponentURL + '">' + opponent + '</a>');
                			msg = msg.replace('{carc_challengerScore}', challengerPoints);
					msg = msg.replace('{carc_opponentScore}', opponentPoints);
					
					if (sn_currentUserData.a != nitro_challengerUUID)
					{
						msg = msg.replace('won', 'lost');
					}

					input = input.replace(pattern2a, '');
                			input = input.replace(pattern2b, '<span class="nitroNotificationMessage">' + msg + '</span>');
                			input = input.replace(pattern2c, '');

					points = nitro_winnerPoints;
				}
				else
				{
					input = input.replace(pattern1a, '');
			                input = input.replace(pattern1b, '');
                    			input = input.replace(pattern1c, '<span class="nitroNotificationTitle">$1</span>');

					var msg = notificationMessageLose;
					msg = msg.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
                    			msg = msg.replace('{carc_challenger}', '<a href="' + challengerURL + '">' + challenger + '</a>');
                    			msg = msg.replace('{carc_opponent}', '<a href="' + opponentURL + '">' + opponent + '</a>');
                    			msg = msg.replace('{carc_challengerScore}', challengerPoints);
					msg = msg.replace('{carc_opponentScore}', opponentPoints);
                    			
					if (sn_currentUserData.a != nitro_challengerUUID)
                                        {
                                                msg = msg.replace('lost', 'won');
                                        }

					input = input.replace(pattern2a, '');
                    			input = input.replace(pattern2b, '');
                    			input = input.replace(pattern2c, '<span class="nitroNotificationMessage">' + msg + '</span>');

					points = nitro_loserPoints;
				}

        			// points;
        		
        			return input;
			}
		}
	}
	else if (notificationId == 'score_user_beat_overall_high_today')	
	{
		if (!notificationData)
		{
			return;
		}
		var dataArray = notificationData.split('===');
        var nitro_gameUUID = dataArray[0];
		var nitro_gameTitle = dataArray[1];
		var nitro_gameURL = dataArray[2];
		var nitro_oldHighScore = dataArray[4];
		var nitro_oldHighScoreUser = dataArray[3];
		var nitro_newHighScore = dataArray[5];
		
		var msg = notificationMessage.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
		msg = msg.replace('{carc_oldHighScore}', nitro_oldHighScore);
		msg = msg.replace('{carc_oldHighScoreUsername}', '<a href="/' + nitro_oldHighScoreUser + '">' + nitro_oldHighScoreUser + '</a>');
		msg = msg.replace('{carc_newHighScore}', nitro_newHighScore);
		input = input.replace(pattern2, '<span class="nitroNotificationMessage">' + msg + '</span>');

        return input;
	}
	else if (notificationId == 'score_user_beat_overall_high')     
    {
        if (!notificationData)
		{
			return;
		}
		var dataArray = notificationData.split('===');
        var nitro_gameUUID = dataArray[0];
        var nitro_gameTitle = dataArray[1];
        var nitro_gameURL = dataArray[2];
        var nitro_newHighScore = dataArray[3];
        
        var msg = notificationMessage.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
		msg = msg.replace('{carc_newHighScore}', nitro_newHighScore);
		input = input.replace(pattern2, '<span class="nitroNotificationMessage">' + msg + '</span>');

        return input;
    }
	else if (notificationId == 'score_user_beat_personal_high')
	{
		if (!notificationData)
        {
                return;
        }
        var dataArray = notificationData.split('===');
        var nitro_gameUUID = dataArray[0];
        var nitro_gameTitle = dataArray[1];
        var nitro_gameURL = dataArray[2];
        var nitro_oldHighScore = dataArray[3];
		var nitro_newHighScore = dataArray[4];
                
        var msg = notificationMessage.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
        msg = msg.replace('{carc_newHighScore}', nitro_newHighScore);
		msg = msg.replace('{carc_oldHighScore}', nitro_oldHighScore);
	    input = input.replace(pattern2, '<span class="nitroNotificationMessage">' + msg + '</span>');
	
	    return input;
	}
	else if (notificationId == 'score_user_lost_overall_high' || notificationId == 'score_user_lost_overall_high_today')
	{
		if (!notificationData)
        {
                return;
        }

        var dataArray = notificationData.split('===');
        var nitro_gameUUID = dataArray[0];
        var nitro_gameTitle = dataArray[1];
        var nitro_gameURL = dataArray[2];
        var nitro_oldHighScore = dataArray[5];
        var nitro_newHighScore = dataArray[3];
        var nitro_newHighScoreUser = dataArray[4];

        var msg = notificationMessage.replace('{carc_game}', '<a href="/games/' + nitro_gameURL + '">' + nitro_gameTitle + '</a>');
        msg = msg.replace('{carc_newHighScore}', nitro_newHighScore);
        msg = msg.replace('{carc_oldHighScore}', nitro_oldHighScore);
        msg = msg.replace('{carc_newHighScoreUsername}', '<a href="/' + nitro_newHighScoreUser + '">' + nitro_newHighScoreUser + '</a>');
		input = input.replace(pattern2, '<span class="nitroNotificationMessage">' + msg + '</span>');

        return input;
	}
	else
	{
		// simple notification
		return input;
	}
}

function formatPopupNotifications(notification, asyncToken)
{
        var pattern1 = /<span class="nitroNotificationId">([\w\s\|-]+)<\/span>/i;
        var patternMatch1 = (notification.html).match(pattern1);
        if (!patternMatch1)
        {
                var notificationId = '';
        }
        else
        {
                var notificationId = patternMatch1[1];
        }

        notification.html = formatPopupNotification(notification.html, notificationId);
}
