///////////////////////////////////////////////////
/*
Online users stuff:
todo: organize
*/
// local list of online users
var onlineUsers = new Array();
var stateSignature = 0; /* simple update mechanism:
sum all the ids of online users.
if it changed, means an id left or
joined, so only then resend the list
saves on traffic and mysql resources */
var updateTimerID = 0;
function getOnlineUsers() {
onlineUsers = Array();
var xml = new JKL.ParseXML("v2/api/users.php?cmd=getOnlineUsers&option=fullList");
var data = xml.parse();
tmp_str = "";
if (data.nCube.userlist.response != "ERROR") {
if (data.nCube.userlist.response) {
for (user in data.nCube.userlist.response.user) {
// for readability's sake
cur = data.nCube.userlist.response.user[user];
newUser = new Object();
newUser.id = trim(cur.id);
newUser.username = trim(cur.username);
newUser.status = trim(cur.status);
newUser.gender = trim(cur.gender);
newUser.account_type = trim(cur.account_type);
newUser.default_pic = trim(cur.default_pic);
newUser.age = trim(cur.age);
newUser.srch_city_nm = trim(cur.srch_city_nm);
newUser.province = trim(cur.province);
newUser.lastlogin = trim(cur.lastlogin);
// push that user object in the list
onlineUsers.push(newUser);
stateSignature += parseInt(data.nCube.userlist.response.user[user].id); // sum the ids to make current state signature
}
onlineUsers.sort(userSortLastLogin);
buildUserList();
} else { tmp_str = "Une erreur est survenue.
Message:
"+data.nCube.userlist.description + "
"; }
} else { tmp_str = "Une erreur est survenue.
Message:"+data.nCube.userlist.description + "
"; }
document.getElementById("userlist").innerHTML = tmp_str;
}
function updateUserList() {
var xml = new JKL.ParseXML("v2/api/users.php?cmd=getOnlineUsers&stateSig="+stateSignature);
var data = xml.parse();
if (trim(data.nCube.userlist.response) != "ERROR") {
if (trim(data.nCube.userlist.response) != "NO_CHG") { // our state signature is the same as the server's, no update needed
if (data.nCube.userlist.response) {
updatedUsers = Array(); // new list of users
getDetailsList = ""; // if we get new users that popped online, their id's will go here
stateSignature = 0; // reset state sig
for (userIDX in data.nCube.userlist.response.user) {
// for readability's sake
tmpusr = data.nCube.userlist.response.user[userIDX];
stateSignature += parseInt(tmpusr.id); // update our state signature by adding the user's id
// was this user already online ?
isKnownUser = findUserBy("id", trim(tmpusr.id), onlineUsers, true);
// user just got online - if more than one, make it a comma-delimited list of ids
if (!isKnownUser) {
getDetailsList += (getDetailsList != "" ? "," : "")+trim(tmpusr.id);
// add to updated list anyway, we'll add missing infos later - see line 285
newUser = new Object();
newUser.id = trim(tmpusr.id);
newUser.username = "";
newUser.status = trim(tmpusr.status);
newUser.gender = "";
newUser.account_type = "";
newUser.default_pic = "";
newUser.age = "";
newUser.srch_city_nm = "";
newUser.province = "";
newUser.lastlogin = "";
newUser.nln = 1; // animation marker - is resetted on next refresh
updatedUsers.push(newUser);
} else {
// update status first
isKnownUser.status = trim(tmpusr.status);
// add to updated list.. see if we can just pop in an out entries off onlineUsers instead of rebuilding the whole thing
updatedUsers.push(isKnownUser);
}
}
glowList = Array(); // hilight the users that just came online
// new users popped online, fetch their info and add them to onlineUsers
if (getDetailsList) {
newUsers = getUserInfo(getDetailsList);
if (newUsers) { // found anything ?
// single user ?
if (newUsers.id != undefined) {
// add the missing info the the prepared object from line 242
IDX = findUserBy("id", trim(newUsers.id), updatedUsers, false, true);
if (IDX != undefined) {
glowList.push("nln_"+trim(newUsers.id));
updatedUsers[IDX].username = trim(newUsers.username);
updatedUsers[IDX].gender = trim(newUsers.gender);
updatedUsers[IDX].account_type = trim(newUsers.account_type);
updatedUsers[IDX].default_pic = trim(newUsers.default_pic);
updatedUsers[IDX].age = trim(newUsers.age);
updatedUsers[IDX].srch_city_nm = trim(newUsers.srch_city_nm);
updatedUsers[IDX].province = trim(newUsers.province);
updatedUsers[IDX].lastlogin = trim(newUsers.lastlogin);
updatedUsers[IDX].nln = 1; // animation marker - is resetted on next refresh
} else {
$("debug").innerHTML += "Error trying to find partial info from updateUsers for id #" + newUser.id + " [single user]
";
}
} else {
i = 0;
for (i in newUsers) {
// add the missing info the the prepared object from line 223
IDX = findUserBy("id", trim(newUsers[i].id), updatedUsers, false, true);
if (IDX != undefined) {
glowList.push("nln_"+trim(newUsers[i].id));
updatedUsers[IDX].username = trim(newUsers[i].username);
updatedUsers[IDX].gender = trim(newUsers[i].gender);
updatedUsers[IDX].account_type = trim(newUsers[i].account_type);
updatedUsers[IDX].default_pic = trim(newUsers[i].default_pic);
updatedUsers[IDX].age = trim(newUsers[i].age);
updatedUsers[IDX].srch_city_nm = trim(newUsers[i].srch_city_nm);
updatedUsers[IDX].province = trim(newUsers[i].province);
updatedUsers[IDX].lastlogin = trim(newUsers[i].lastlogin);
updatedUsers[IDX].nln = 1; // animation marker - is resetted on next refresh
} else {
$("debug").innerHTML += "Error trying to find partial info from updateUsers for id #" + newUser.id + " [multi user]
";
}
}
}
} // fail silently ?
}
onlineUsers = updatedUsers;
// onlineUsers.sort(userAlphabetical);
// onlineUsers.sort(userSortOnline);
onlineUsers.sort(userSortLastLogin);
buildUserList();
if (glowList.length) {
window.setTimeout(function(){
animateObjects(glowList, "grow_v", 0, 55, 0.8, Tween.regularEaseOut, undefined);
}, 100);
window.setTimeout(function(){
animateObjects(glowList, "opacity", 0, 100, 1.5, Tween.regularEaseOut, undefined);
}, 100);
window.setTimeout(function(){
animateObjects(glowList, "background", 'FFFFFF','eeff8d', 2, Tween.backEaseInOut, "rewind");
}, 200);
} // hilight newly added users
} else { $("userlist").innertHTML = "ERROR:
"+data.nCube.userlist.description+""; }
} else { } // no change
} else { $("userlist").innertHTML = "ERROR:
"+data.nCube.userlist.description+""; }
}
function buildUserList() {
tmp_str = "";
if (onlineUsers) {
tmp_str +=""+
" Utilisateurs en ligne
";
if (!onlineUsers.length) { onlineUsers = Array(onlineUsers); }
for (user in onlineUsers) {
userimg = getDefPic(
cleanText(onlineUsers[user].username),
onlineUsers[user].default_pic,
onlineUsers[user].gender,
(onlineUsers[user].account_type == "frisky" ? true : false)
);
tmp_str += ""+
(parseInt(onlineUsers[user].status) != 1 ? "

" : "") +
"
"+
"
" + onlineUsers[user].username + ""+
" "+getGender(onlineUsers[user].gender)+", "+onlineUsers[user].age+" ans
"+
" "+onlineUsers[user].srch_city_nm+", "+(trim(onlineUsers[user].province) == "QC2" ? "QC" : onlineUsers[user].province)+"
"+
"
Clavarder"+
"
"+
"
\n\n";
onlineUsers[user].nln = undefined;
}
} else {
tmp_str = "Hmm...
Personne n'est en ligne..!?";
}
document.getElementById("userlist").innerHTML = tmp_str;
}
function update() {
updateUserList();
}
function stopUpdates() {
clearInterval(updateTimerID);
}
////// messaging functions -- TODO: modify builduserlist to be generic for both online and chats/messages //////////
var lastMsgCount = 0;
function getMessages() {
var resp = new JKL.ParseXML.Text("v2/api/mail.php?cmd=newMessages");
var func = function (data) {
data = parseInt(data);
if (data > 0 && data != lastMsgCount) {
if (data > lastMsgCount) { newMessageSound(); }
lastMsgCount = data;
tmp_str =""+
data+ " nouveau" + (data >= 2 ? "x" : "") + " message" + (data >= 2 ? "s" : "") + " !
";
$("msg_counter").innerHTML = ""+data+"";
$("msg_count_bubble").style.display = "inline";
var resp = new JKL.ParseXML("v2/api/mail.php?cmd=newMessagesInfos");
var func2 = function (data) {
if (data.nCube.mail.response != "ERROR") {
if (data.nCube.mail.response != "No Match") {
if (data.nCube.mail.response) {
if (data.nCube.mail.response.message.id != undefined) {
// blah.
msg = data.nCube.mail.response.message;
data.nCube.mail.response.message = Array();
data.nCube.mail.response.message[0] = msg;
}
for (i in data.nCube.mail.response.message) {
var msg = data.nCube.mail.response.message[i];
userimg = getDefPic(
cleanText(msg.username),
msg.default_pic,
msg.gender,
(msg.account_type == "frisky" ? true : false)
);
tmp_str += ""+
"

" +
"
"+
"
" + msg.username + ""+
" "+getGender(msg.gender)+", "+msg.age+" ans
"+
" "+msg.srch_city_nm+", "+(trim(msg.province) == "QC2" ? "QC" : msg.province)+
"
"+
"
\n\n";
}
} else { return "No Match"; }
} else { return "No Match"; }
} else { return "ERROR"; }
if($("usermsgs") != undefined) {
$("usermsgs").innerHTML = tmp_str;
animateObject("msgs_notice", "opacity", 100, 25, 1, Tween.regularEaseInOut, "rewind");
}
}
resp.async(func2);
resp.parse();
} else {
if (data == 0 && lastMsgCount > 0) {
lastMsgCount = 0;
if($("usermsgs") != undefined) { $("usermsgs").innerHTML = ""; }
$("msg_counter").innerHTML = "";
$("msg_count_bubble").style.display = "none";
}
}
}
resp.async(func)
resp.parse();
}