/////////////////////////////////////////////////// /* 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 ? " away" : "") + "
"+ //" "+ " "+ " " + onlineUsers[user].username + "
"+ " " + 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 += "
"+ "message" + "
"+ //" "+ //" "+ " "+ " " + msg.username + "
"+ " " + 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(); }