var lastMessageResponse;
var getMessages = null;
var getTypingThread = null;
var dChatOpen = false;
var lastTimestamp = 0;
var isTyping = false;
var infoOpen = false;
var chatMemberCount;
var lastMessageID = 0;
var ackIds = [];
$(function() {
$(".loadChatList").click(function() {
loadChatList();
removeChatInfoBar();
})
$(".chatOpener").click(function() {
$(".chatContainer").empty();
$(".chatContainer").html("Loading...");
if (dChatOpen == false) {
dChatOpen = true;
$(this).css("top", "calc(100% - 371px)");
$(".chatOpenbackground").css("display", "block");
$(".chatOptions").css("display", "block");
loadChatList();
}else{
dChatOpen = false;
$(this).css("top", "calc(100% - 24px)");
$(".chatOpenbackground").css("display", "none");
$(".chatOptions").css("display", "none");
$(".chatOpener").html("Chat");
stopIntervals();
}
})
if ($(".mobileView").css("display") == "block") {
$(".backandtext").css("top", $(".navbar").css("height"))
}
});
function stopIntervals() {
for (var i = 1; i < 9999; i++) {
window.clearInterval(i);
getMessages = undefined;
}
}
function loadChatList() {
clean();
if ($(".mobileView").css("display") == "block") {
window.history.pushState("", "", "/chat");
var appContainer = $("#appContainer");
appContainer.load("/core/func/views/app/user/chatlist.php", function() {
$.get("/core/func/api/chat/getList.php", function(data) {
var json = JSON.parse(data);
$(".chatContainer").empty();
for (var i = 0; i < json.length; i++) {
var fHTML = json[i].chat_id;
$(".chatContainer").append('
' + json[i].chatName + '');
}
if (data == "[]") {
$(".chatContainer").append("You are in no chats at the moment
");
}
});
});
}else{
$(".chatOpener").html("Chat");
$(".addChatBtn").css("display", "block");
$(".chatOptions").html("");
$.get("/core/func/api/chat/getList.php", function(data) {
var json = JSON.parse(data);
$(".chatContainer").empty();
for (var i = 0; i < json.length; i++) {
var fHTML = json[i].chat_id;
$(".chatContainer").append('' + json[i].chatName + '');
}
if (data == "[]") {
$(".chatContainer").append("You are in no chats at the moment
");
}
});
}
}
function renderChatChoices() {
$("#gModalTitle").html("Add Chat");
$("#gModalBody").html("Do you want to create a new chat or join one?
");
$(".gModalErrorContainer").html("");
$("#gModalBody").append("");
$("#gModalBody").append("");
$("#globalModal2").modal('show');
}
function renderCreateChat() {
$("#gModalTitle").html("Create Chat");
$("#gModalBody").html("Give your chat a name and press create!
");
$(".gModalErrorContainer").html("");
$("#gModalBody").append("");
$("#gModalBody").append("");
}
function renderJoinChat() {
$("#gModalTitle").html("Join Chat");
$("#gModalBody").html("Enter a Chat Code and join a chat
");
$(".gModalErrorContainer").html("");
$("#gModalBody").append("");
$("#gModalBody").append("");
}
function createChat() {
$(".create_chat_name").prop("disabled", true);
$(".create_chat").prop("disabled", true);
var chatName = $(".create_chat_name").val();
$.post('/core/func/api/chat/createChat.php', {
chatName: chatName,
csrfToken: $('meta[name="csrf-token"]').attr('content')
})
.done(function(response) {
$(".create_chat_name").prop("disabled", false);
$(".create_chat").prop("disabled", false);
if (response == "no-name") {
$(".gModalErrorContainer").html('You must have a chat name
');
}else if (response == "chat-name-too-long") {
$(".gModalErrorContainer").html('Your chat name is too long
');
}else if (response == "rate-limit") {
$(".gModalErrorContainer").html('Please wait before making another chat
');
}else{
if ($(".mobileView").css("display") == "none") {
loadChatList();
}
var json = JSON.parse(response);
for (var i = 0; i < json.length; i++) {
loadChat(json[i].chatKey, json[i].chatName, json[i].chat_id);
}
$("#globalModal2").modal('hide');
}
})
.fail(function() {
$(".gModalErrorContainer").html('Could not create a chat because a network error occurred
');
});
}
function joinChat() {
$(".join_code").prop("disabled", true);
$(".join_chat").prop("disabled", true);
var chatCode = $(".join_code").val();
$.post('/core/func/api/chat/joinChat.php', {
chatCode: chatCode,
csrfToken: $('meta[name="csrf-token"]').attr('content')
})
.done(function(response) {
$(".join_code").prop("disabled", false);
$(".join_chat").prop("disabled", false);
if (response == "no-code") {
$(".gModalErrorContainer").html('Please enter a chat code
');
}else if (response == "chat-code-too-long") {
$(".gModalErrorContainer").html('The chat code you entered is too long
');
}else if (response == "invalid-code") {
$(".gModalErrorContainer").html('You have entered an invalid chat code
');
}else if (response == "already-in") {
$(".gModalErrorContainer").html('You are already in this chat
');
}else{
if ($(".mobileView").css("display") == "none") {
loadChatList();
}
var json = JSON.parse(response);
for (var i = 0; i < json.length; i++) {
loadChat(json[i].chatKey, json[i].chatName, json[i].chat_id);
}
$("#globalModal2").modal('hide');
}
})
.fail(function() {
$(".gModalErrorContainer").html('Could not join the chat because a network error occurred
');
});
}
function clean() {
infoOpen = false;
stopIntervals();
lastMessageResponse = undefined;
lastTimestamp = 0;
}
function sendTyping(chatId) {
if (!isTyping) {
isTyping = true;
$.post('/core/func/api/chat/sendTyping.php', {
chatId: chatId,
csrfToken: $('meta[name="csrf-token"]').attr('content')
}).fail(function() {
console.log("Error sending typing status");
});
setTimeout(function() {
isTyping = false;
}, 3000);
}
}
function executeAsync(func) {
setTimeout(func, 0);
}
function chatInfo(chatKey, chatName, chatId) {
if (infoOpen) {
infoOpen = false;
loadChat(chatKey, chatName, chatId);
}else{
clean();
infoOpen = true;
console.log("Got chat info");
$(".backandtext").html("Chat information");
$(".chatContainer").empty();
}
}
function loadChat(chatKey, chatName, chatId) {
ackIds = [];
if ($(".mobileView").css("display") == "none") {
$(".list-group-item").css("background-color", "#fff");
$("."+chatId).css("background-color", "#ddd");
$(".chatOptions").html('');
}
clean();
$(".chatContainer").html('');
$("#chatMessageBox").css("width", "215px");
$("#sendChatButton").css("margin-left", "215px").css("width", "41px")
$(".addChatBtn").css("display", "none");
$('#chatMessageBox').keypress(function (e) {
var key = e.which;
if(key == 13) {
$('#sendChatButton').click();
}
});
$(window).resize(function() {
if ($(".mobileView").css("display") == "block") {
$(window).scrollTop($(document).height());
}
});
$.get("/core/func/api/chat/getChatInfo.php?id=" + chatId, function(data) {
if (data == "error" || data == "[]") {
loadChatList();
throw new Error("An error occurred");
}
var json = JSON.parse(data);
for (var i = 0; i < json.length; i++) {
chatMemberCount = json[i].chatMembers;
if (chatMemberCount == 1) {
var bText = "member";
}else{
var bText = "members";
}
chatJoinKey = json[i].joinKey;
$(".chatOpener").html(json[i].chatName);
}
if ($(".mobileView").css("display") == "block") {
$(".chatBreaker").empty();
times = 0;
while(times < $(".backandtext").height()/24) {
$(".chatBreaker").append("
");
times++;
}
}
executeAsync(loadMessagesInChat(chatKey, chatId));
executeAsync(getTyping(chatId));
getMessages = setInterval(function() {
loadMessagesInChat(chatKey, chatId);
}, 1000);
getTypingThread = setInterval(function() {
getTyping(chatId);
}, 3000);
$(".messageContainer").css("opacity", 0);
$(".loadContainer").append('').hide();
}).fail(function() {
loadChat(chatKey, chatName, chatId);
});
}
function getTyping(chatId) {
$.get("/core/func/api/chat/getTyping.php?chatId=" + chatId, function(data) {
var json = JSON.parse(data);
if (chatMemberCount == 1) {
var bText = "member";
}else{
var bText = "members";
}
//if ($(".mobileView").css("display") == "block") {
if (json.mode == "none") {
$(".chatOptions").html(chatMemberCount + " " + bText + " [Invite code: " + chatJoinKey + "]");
}
if (json.mode == "showTyping") {
var username1 = json.usernames[0];
var username2 = json.usernames[1];
var arrayLength = json.usernames.length;
if (arrayLength == 1) {
$(".chatOptions").html(username1 + " is typing...").css("position", "fixed");
}else{
$(".chatOptions").html(username1 + " and " + username2 + " are typing...");
}
}
if (json.mode == "several") {
$(".chatOptions").html("Several people are typing");
}
//}
});
}
function parseDate(date) {
var dateMessage = new Date(date*1000);
var dateCurrent = new Date();
var dayMessageNum = dateMessage.getDate();
var yearMessage = dateMessage.getFullYear();
var monthMessage = dateMessage.getMonth();
var dateCurrentNum = dateCurrent.getDate();
var currentYear = dateCurrent.getFullYear();
var currentMonth = dateCurrent.getMonth();
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var dayOfWeekMessage = days[dateMessage.getDay()]
var dayOfWeekCurrent = days[dateCurrent.getDay()]
dateCurrent.setDate(dateCurrent.getDate() - 1);
var dayYesterday = days[dateCurrent.getDay()];
if (dayOfWeekCurrent == dayOfWeekMessage && dayMessageNum == dateCurrentNum && yearMessage == currentYear && monthMessage == currentMonth) {
date = intlDate2.format(new Date(1000*date));
}else if (dayOfWeekMessage == dayYesterday && dayMessageNum == dateCurrentNum-1 && yearMessage == currentYear && monthMessage == currentMonth) {
date = "yesterday at " + intlDate2.format(new Date(1000*date));
}else{
date = intlDate.format(new Date(1000*date));
date = date.replace("M01", "Jan");
date = date.replace("M02", "Feb");
date = date.replace("M03", "Mar");
date = date.replace("M04", "Apr");
date = date.replace("M05", "May");
date = date.replace("M06", "Jun");
date = date.replace("M07", "Jul");
date = date.replace("M08", "Aug");
date = date.replace("M09", "Sep");
date = date.replace("M10", "Oct");
date = date.replace("M11", "Nov");
date = date.replace("M12", "Dec");
}
return date;
}
function loadMessagesInChat(chatKey, chatId) {
$.get("/core/func/api/chat/getMessages.php?id=" + chatId + "×tamp=" + lastTimestamp, function(data) {
if (data == "error") {
loadChatList();
throw new Error("An error occurred");
}
if (lastMessageResponse != data) {
if ($(".messageContainer").css("opacity") == 0) {
$("#loadContainer").empty();
$(".messageContainer").animate({opacity: 1});
}
var json = JSON.parse(data);
if (data == "[]" && lastTimestamp == 0) {
createMessage("Welcome to the beginning of this chat.", "GraphictoriaBot", "red", 2, undefined, true, false);
}
for (var i = 0; i < json.length; i++) {
if (lastMessageID != json[i].messageId && ackIds.includes(json[i].messageId) == false) {
lastMessageID = json[i].messageId;
ackIds.push(json[i].messageId);
lastTimestamp = Math.round((new Date()).getTime() / 1000);
if (json[i].userId == 0) {
createMessage(json[i].message, "Graphictoria", "red", 2, json[i].date, true, false, 0);
}else{
createMessage(json[i].message, json[i].username, json[i].userColor, json[i].staff, json[i].date, false, json[i].setRight, json[i].userID);
}
if (lastMessageResponse != undefined && data != "[]" && json[i].setRight == false) {
console.log("New message");
var receiveSound = new Audio('/core/func/api/chat/sounds/send.mp3')
receiveSound.play();
}
}else{
console.log("Caught duplicate message");
}
}
if (data != "[]") {
if ($(".mobileView").css("display") == "block") {
$(window).scrollTop($(document).height());
}else{
$(".chatOpenbackground").scrollTop($(".chatOpenbackground")[0].scrollHeight);
}
}
}
lastMessageResponse = data;
});
}
var options = {
weekday: 'long',
month: 'short',
year: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric'
},intlDate = new Intl.DateTimeFormat(undefined, options);
var options2 = {
hour: 'numeric',
minute: 'numeric'
},intlDate2 = new Intl.DateTimeFormat(undefined, options2);
function createMessage(message, sender, cColor, tagId, date, doCenter, setRight, userID) {
var color = cColor;
var cHTML = "";
if (doCenter == true) {
cHTML = "center";
}
var sHTML = '' + sender + '';
if (setRight == false) {
if (tagId == 1) {
var uHTML = ' ' + sHTML + ':';
}else if (tagId == 2) {
var uHTML = 'BOT ' + sender + ':';
}else{
var uHTML = sHTML + ':';
}
}else{
var uHTML = "";
}
if (setRight == true) {
var style = "style=\"float:right;max-width:100%\"";
}else{
var style = "style=\"width:100%\"";
}
if (date == undefined) {
date = "";
}else{
date = parseDate(date);
}
$(".messageContainer").append('' + uHTML + ' ' + message + ' ' + date + '
');
}
function sendMessageInChat(chatId, chatKey) {
$("#sendChatButton").prop("disabled", true);
$("#chatMessageBox").prop("disabled", true);
var chatMessage = $("#chatMessageBox").val();
$("#chatMessageBox").val("");
$.post('/core/func/api/chat/sendMessage.php', {
message: chatMessage,
chatId: chatId,
csrfToken: $('meta[name="csrf-token"]').attr('content')
})
.done(function(response) {
$("#sendChatButton").prop("disabled", false);
$("#chatMessageBox").prop("disabled", false);
$("#chatMessageBox").focus();
if (response == "message-too-short") {
$("#chatMessageBox").css("border", "1px solid #d9534f");
}else if (response == "message-too-long") {
$("#chatMessageBox").css("border", "1px solid #d9534f");
}else{
$("#chatMessageBox").css("border", "0px solid #F44336");
}
})
.fail(function() {
console.log("Error while sending message");
$("#chatMessageBox").css("border", "0px solid #F44336");
});
}