Topics: 155 Replies: 3414
Development
Post: #12044 PT: #1/1
|
Replace the existing JS code for the chat system with this: Code
<script language='javascript'>
var sendReq = getXmlHttpRequestObject();
var receiveReq = getXmlHttpRequestObject();
var base_addr = '$this->base_addr';
base_addr = base_addr.replace(/\&\;/ig, '&');
var lastMessage = 0;
var mTimer;
var nTimer;
var status_mess;
var alert_mess;
var status_orig;
var current_mess = 1;
var can_private;
var can_mod;
var skin_img;
var total_mem = new Array();
var ignore = new Array();
//Function for initializating the page.
function startChat(stat_mess,alt_mess,can_priv, skin, mod) {
status_mess = stat_mess;
alert_mess = alt_mess;
can_private = can_priv;
can_mod = mod;
skin_img = skin;
//Set the focus to the Message Box.
document.getElementById('message').focus();
status_orig = document.getElementById('p_status').innerHTML;
document.getElementById('p_status').innerHTML = status_mess;
//Start Recieving Messages.
getChatText();
}
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
if (window.XMLHttpRequest ) {
return new XMLHttpRequest();
} else if(window.ActiveXObject ) {
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
status_mess = status_orig;
document.getElementById('p_status').innerHTML = status_mess;
}
}
//Gets the current messages from the server
function getChatText() {
if (lastMessage > -1 && (receiveReq.readyState == 4 || receiveReq.readyState == 0)) {
receiveReq.open("GET", base_addr + 'a=cht&header=0&last=' + lastMessage, true);
receiveReq.onreadystatechange = handleReceiveChat;
receiveReq.send(null);
}
clearInterval(mTimer);
mTimer = setTimeout('getChatText();',3000); //Refresh our chat in 3 seconds
}
//Add a message to the chat server.
function sendChatText() {
if(document.getElementById('message').value == '') {
alert(alert_mess);
return;
}
var timing = new Date();
if( nTimer > timing.getTime()-3100 ){ //will wait 3 seconds before it can send another message
document.getElementById('message').focus();
return;
}
document.getElementById('message').focus();
if (sendReq.readyState == 4 || sendReq.readyState == 0) {
nTimer = timing.getTime();
sendReq.open("POST", base_addr + 'a=cht&last=' + lastMessage, true);
sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
sendReq.onreadystatechange = handleSendChat;
var param = 'message=' + document.getElementById('message').value;
sendReq.send(param);
document.getElementById('input_text').innerHTML = '<input type="text" id="message" name="message" id="message" style="width: 50em;" class="forminput" onClick="storeCaret(this);" onKeyup="storeCaret(this); javascript:expendinput();" onChange="storeCaret(this);" onFocus="storeCaret(this);" onSelect="storeCaret(this);" ONDBLCLICK="storeCaret(this);"/>';
if(document.getElementById('expend_box').checked){
expendinput();
}
}
CurOffset;
CurLine;
TagStack = new Array();
}
//When our message has been sent, update our page.
function handleSendChat() {
//Clear out the existing timer so we don't have
//multiple timer instances running.
clearInterval(mTimer);
getChatText();
}
//Function for handling the return of chat text
function handleReceiveChat() {
if (receiveReq.readyState == 4) {
var chat_div = document.getElementById('div_chat');
var xmldoc = receiveReq.responseXML;
var member_nodes = xmldoc.getElementsByTagName("member");
var me = xmldoc.getElementsByTagName("me");
var message_nodes = xmldoc.getElementsByTagName("message");
var n_messages = message_nodes.length;
var add_lines = '';
var lnti = ignore.length;
for (i = 0; i < n_messages; i++) {
var user_node = message_nodes[i].getElementsByTagName("user");
var user_id_node = message_nodes[i].getElementsByTagName("user_id");
var text_node = message_nodes[i].getElementsByTagName("text");
var time_node = message_nodes[i].getElementsByTagName("time");
var color_node = message_nodes[i].getElementsByTagName("color");
var ign = 0;
for(j=0;j<lnti;j++){
if(ignore[j] == user_id_node[0].firstChild.nodeValue){
ign = 1;
}
}
if(ign == 0){
add_lines += '<table width="98%"><tr><td align="left" colspan="3" id="chat_messages">' + text_node[0].firstChild.nodeValue + '</td></tr><tr><td><font color="' + color_node[0].firstChild.nodeValue + '">' + user_node[0].firstChild.nodeValue + '</font></td><td><font class="chat_time">' + time_node[0].firstChild.nodeValue + '</font></td><td align="center" width="10%"><input type="image" onclick="javascript:deletemess(' + current_mess + ')" src="' + skin_img + 'postv/delete.gif" border="0" ></td></tr></table><hr /><!-- mess -->';
}
lastMessage = (message_nodes[i].getAttribute('id'));
current_mess++;
}
if( add_lines != '' ){
chat_div.innerHTML += add_lines;
chat_div.scrollTop += (chat_div.offsetHeight * i);
document.getElementById('message').focus();
}
var n_member = member_nodes.length;
if(n_member>0){
total_mem = new Array();
}
for (i = 0; i < n_member; i++) {
var name_node = member_nodes[i].getElementsByTagName("name");
var me_node = member_nodes[i].getElementsByTagName("me");
var member_id_node = member_nodes[i].getElementsByTagName("member_id");
var color_node = member_nodes[i].getElementsByTagName("color");
var mem_arr = new Array(member_id_node[0].firstChild.nodeValue, name_node[0].firstChild.nodeValue, color_node[0].firstChild.nodeValue, 0);
total_mem[i] = mem_arr;
if(me_node.length){
document.getElementById('moi').innerHTML = '<font color="' + color_node[0].firstChild.nodeValue + '">' + name_node[0].firstChild.nodeValue + '</font>';
}
}
if(n_member>0){
render_mem();
}
}
}
//Function that handles the member in the chat room.
function render_mem(){
var n_member = total_mem.length;
document.getElementById('n_member').innerHTML = n_member;
var lines_m = '';
var lines_mi = '';
var ling = ignore.length;
var mod;
for (i = 0; i < n_member; i++) {
var ing = 0;
for(j=0; j < ling; j++){
if(ignore[j] == total_mem[i][0]){
ing = 1;
}
}
if(ing == 0){
if( lines_m != '' ){
lines_m += ', ';
}
if( can_private == 1 ){
lines_m += '<a href="javascript:privateMessage(' + total_mem[i][0] + ', \'' + total_mem[i][1] + '\' );"><font color=' + total_mem[i][2] + ' >' + total_mem[i][1] + '</font></a>';
}else{
lines_m += '<font color=' + total_mem[i][2] + ' >' + total_mem[i][1] + '</font>';
}
}else{
if( lines_mi != '' ){
lines_mi += ', ';
}
if( can_private == 1 ){
lines_mi += '<a href="javascript:remIgnore(' + total_mem[i][0] + ' );"><font color=' + total_mem[i][2] + ' >' + total_mem[i][1] + '</font></a>';
}else{
lines_mi += '<font color=' + total_mem[i][2] + ' >' + total_mem[i][1] + '</font>';
}
}
if(can_mod == 1){
mod += '<option value="' + total_mem[i][0] + '">' + total_mem[i][1] + '</option>';
}
}
if(can_private == 0){
document.getElementById('ignore').disabled = true
}
if(can_mod == 1){
document.getElementById('members_mod').innerHTML = '<select name="member">' + mod + '</select>';
}
document.getElementById('members').innerHTML = lines_m;
document.getElementById('imembers').innerHTML = lines_mi;
return;
}
//Delete a specific message in the chat_div
function deletemess( num ){
var splitmess = document.getElementById('div_chat').innerHTML.split( '<!-- mess -->' );
var ln = splitmess.length;
var tot = "";
for( i=0; i < ln; i++ ){
if( i != (num-1) ){
tot += splitmess[i] + '<!-- mess -->';
}else{
tot += '<!-- mess -->';
}
}
document.getElementById('div_chat').innerHTML = tot;
document.getElementById('message').focus();
}
//This functions handles when the user presses enter. Instead of submitting the form, we
//send a new message to the server and return false.
function blockSubmit() {
sendChatText();
return false;
}
//This sends a private message to someone in the chat room.
//It adds the [private=n]@name: in front of the message.
function privateMessage( id, name ){
if(id != '' ){
if(document.getElementById('ignore').checked){
document.getElementById('ignore').checked = false;
var lnt = ignore.length;
ignore[lnt] = id;
render_mem();
document.getElementById('message').focus();
}else{
var re = new RegExp("^\\\\[private=");
if( document.getElementById('message').value == '' || !document.getElementById('message').value.match( re ) ){
document.getElementById('message').value = '[private=' + id + ']@' + name + ': ' + document.getElementById('message').value;
document.getElementById('message').focus();
}else{
document.getElementById('message').focus();
}
}
}
}
//Removes an member from the Ignore list
function remIgnore(id){
var lnt = ignore.length;
var temp_arr = new Array();
var j = 0;
for(i=0; i < lnt; i++){
if( ignore[i] != id ){
temp_arr[j] = ignore[i];
j++;
}
}
ignore = temp_arr;
render_mem();
document.getElementById('message').focus();
}
//This function is used to add more input element for more space..
function expendinput(){
var le = document.getElementById('message').value;
l1 = le.length;
if(l1 > 80 || document.getElementById('expend_box').checked ){
var text = document.getElementById('message').value;
document.getElementById('input_text').innerHTML = '<textarea cols="75" rows="10" id="message" name="message" class="forminput" onClick="storeCaret(this);" onKeyup="storeCaret(this);" onChange="storeCaret(this);" onFocus="storeCaret(this);" onSelect="storeCaret(this);" ONDBLCLICK="storeCaret(this);">' + document.getElementById('message').value + '</textarea>';
document.getElementById('message').focus();
document.getElementById('message').focus();
return true;
}
}
</script> The bug is with the Google Chrome browser. It did not work with it... now it does.
|