diff --git a/binaries/data/mods/public/gui/common/functions_utility.js b/binaries/data/mods/public/gui/common/functions_utility.js
index 58ef09e397..8a2a75e010 100644
--- a/binaries/data/mods/public/gui/common/functions_utility.js
+++ b/binaries/data/mods/public/gui/common/functions_utility.js
@@ -240,3 +240,49 @@ function sanitizePlayerName(name, stripUnicode, stripSpaces)
// Limit the length to 20 characters
return sanitizedName.substr(0,20);
}
+
+function tryAutoComplete(text, autoCompleteList)
+{
+ if (!text.length)
+ return text;
+
+ var wordSplit = text.split(/\s/g);
+ if (!wordSplit.length)
+ return text;
+
+ var lastWord = wordSplit.pop();
+ if (!lastWord.length)
+ return text;
+
+ for (var word of autoCompleteList)
+ {
+ if (word.toLowerCase().indexOf(lastWord.toLowerCase()) != 0)
+ continue;
+
+ text = wordSplit.join(" ")
+ if (text.length > 0)
+ text += " ";
+
+ text += word;
+ break;
+ }
+ return text;
+}
+
+function autoCompleteNick(guiName, playerList)
+{
+ var input = Engine.GetGUIObjectByName(guiName);
+ var text = input.caption;
+ if (!text.length)
+ return;
+
+ var autoCompleteList = [];
+ for (var player of playerList)
+ autoCompleteList.push(player.name);
+
+ var bufferPosition = input.buffer_position;
+ var textTillBufferPosition = text.substring(0, bufferPosition);
+ var newText = tryAutoComplete(textTillBufferPosition, autoCompleteList);
+ input.caption = newText + text.substring(bufferPosition);
+ input.buffer_position = bufferPosition + (newText.length - textTillBufferPosition.length);
+}
diff --git a/binaries/data/mods/public/gui/lobby/lobby.js b/binaries/data/mods/public/gui/lobby/lobby.js
index 7c83b15e0d..7be33d353e 100644
--- a/binaries/data/mods/public/gui/lobby/lobby.js
+++ b/binaries/data/mods/public/gui/lobby/lobby.js
@@ -752,35 +752,6 @@ function submitChatInput()
}
}
-function completeNick()
-{
- var input = Engine.GetGUIObjectByName("chatInput");
- var text = escapeText(input.caption);
- if (text.length)
- {
- var matched = false;
- for each (var playerObj in Engine.GetPlayerList())
- {
- var player = playerObj.name;
- var breaks = text.match(/(\s+)/g) || [];
- text.split(/\s+/g).reduceRight(function (wordsSoFar, word, index)
- {
- if (matched)
- return null;
- var matchCandidate = word + (breaks[index - 1] || "") + wordsSoFar;
- if (player.toUpperCase().indexOf(matchCandidate.toUpperCase().trim()) == 0)
- {
- input.caption = text.replace(matchCandidate.trim(), player);
- matched = true;
- }
- return matchCandidate;
- }, "");
- if (matched)
- break;
- }
- }
-}
-
function isValidNick(nick)
{
var prohibitedNicks = ["system"];
diff --git a/binaries/data/mods/public/gui/lobby/lobby.xml b/binaries/data/mods/public/gui/lobby/lobby.xml
index e56f513681..fae12bc100 100644
--- a/binaries/data/mods/public/gui/lobby/lobby.xml
+++ b/binaries/data/mods/public/gui/lobby/lobby.xml
@@ -231,7 +231,7 @@
diff --git a/binaries/data/mods/public/gui/session/session.xml b/binaries/data/mods/public/gui/session/session.xml
index 069515db6a..0506016b13 100644
--- a/binaries/data/mods/public/gui/session/session.xml
+++ b/binaries/data/mods/public/gui/session/session.xml
@@ -197,6 +197,7 @@