⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ajax_im.js

📁 ajax 聊天室,实现多人聊天,无刷新!
💻 JS
📖 第 1 页 / 共 4 页
字号:
///////////////////////////////////
//         ajax im v3.1          //
//    AJAX Instant Messenger     //
//   Copyright (c) 2006-2007     //
// unwieldy studios/Joshua Gross //
//  http://unwieldy.net/ajaxim/  //
//   Do not remove this notice   //
///////////////////////////////////

// Configurable Options //

// Notification // 
var useBlinker    = true;           // Show new message in titlebar when window isn't active.
var blinkSpeed    = 1000;           // How fast to change between the titles when "blinking" (in milliseconds).
var pulsateTitles = true;           // Pulsate (blink) IM window titles on new IM when they are not the active window.
var audioNotify   = true;           // By default, play sounds upon getting an IM?

// Server //
var pingFrequency = 2500;           // How often to ping the server (in milliseconds). Best range between 2500 and 3500 ms.
var pingTo        = 'ajax_im.php';  // The file that is the "server".

// Windows //
var imWidth       = 310;            // Default IM window width
var imHeight      = 335;            // Default IM window height
var imHistory     = true;           // "Save" conversations with buddies throughout the session
var imDetachable  = true;           // Enable/Disable ability to detach windows from the application

// Smilies //
var smilies = [                    // Smiley format: 'smiley~imagename.ext',
   ":)~smile.gif",
   ":-)~smile.gif",
   ":D~grin.gif",
   ":-D~grin.gif",
   ";)~wink.gif",
   ";-)~wink.gif",
   ":[~embarassed.gif",
   ":-[~embarassed.gif",
   ":*~love.gif",
   ":-*~love.gif",
   ":(~sad.gif",
   ":-(~sad.gif",
   ":'(~cry.gif",
   ":'-(~cry.gif",
   "8-)~cool.gif",
   ">:o~angry.gif",
   ">:-o~angry.gif",
   ":O~surprised.gif",
   ":-O~surprised.gif",
   ":|~serious.gif",
   ":-|~serious.gif",
   ":-S~sick.gif",
   ":P~tongue.gif",
   ":-P~tongue.gif",
   "<3~heart.gif",
   "<33~heart.gif",
   "<\/3~heartbroken.gif",
   "<\\3~heartbroken.gif"
];

// Other //
var alertCSS      = 'alphacube';    // CSS file for alerts and login/add buddy/IM anyone windows
var alertWidth    = 400;            // Alert window width (see above)
var windowCSS     = 'default';      // CSS file for all other windows (buddylist, IMs)
var buddyListLoc  = 1;              // Buddylist location: 0=left, 1=right

// End Configurable Options //

// Begin Code                                   //
// Note: Do not edit below this line unless you //
//       know what you are doing!               //
var user='';
var pass='';
var isAway=0;
var awayMessage = '';
var curSelected='';
var loggedIn=false;
var IMWindows={};
var titlebarBlinker=false;
var defaultTitle=document.title;
var blinkerTimer;
var pingTimer;
var buddyList = {};
var toWin;
var newWin, newWinRcvd;

window.onbeforeunload = function(event) {
   if(isIE || !event) event = window.event;
   if(event && user.length > 0) {
      var text = "If you do so, you will be signed out of the instant messenger.";
      if(isIE) event.returnValue = text;
      window.onbeforeunload = function() { };
      return text;
   }
}

window.onunload = function() {
   if(user.length > 0) {
      logout();
   }
}

var buddyListWin;

function fixBuddyList() {
   if(buddyListWin && buddyListWin.isVisible()) {
      buddyListWin.setSize(210, (browserHeight() - 50));
      buddyListWin.setLocation((((browserHeight()-40) / 2) - (buddyListWin.getSize()['height'] / 2)), (buddyListLoc == 0 ? 10 : (browserWidth() - buddyListWin.getSize()['width'] - 10)));
      sizeBuddyList();
   }
}

function login() {
   var username = $('username').value;
   var password = $('password').value;
   
   var signonButton = $('signon_button');
   signonButton.onclick = function() { };
   
   var xhConn = new XHConn();
   xhConn.connect(pingTo, "POST", "call=login&from="+username+"&pwd="+hex_md5(password),
      function(xh) {
         if(xh.responseText == 'invalid') {
            $('login_error_msg').innerHTML = 'Username or password incorrect!';
            $('login_error_msg').style.display = 'block'; 
            new Effect.Shake('modal');
            signonButton.onclick = function() { login();return false; };
         } else {
            user = username;
            pass = hex_md5(password);
            defaultTitle = document.title = document.title + ': ' + user;
            window.onresize = fixBuddyList;
            if(!$('bl')) {
               buddyListWin = new Window('bl', {className: "dialog", width: 210, height: (browserHeight() - 60), zIndex: 100, resizable: true, 
                                                title: "Buddy List", draggable: true, closable: false, maximizable: false, detachable: false, minWidth: 205, minHeight: 150,
                                                showEffectOptions: {duration: 0}, hideEffectOptions: {duration: 0}});
            }
            buddyListWin.getContent().innerHTML = '<div id="blTopToolbar"><span class="toolbarButton"><img id="addbuddy" src="images/'+windowCSS+'/addbuddy.png" class="toolbarButton" onclick="new_buddy_dialog();" alt="Add Buddy" title="Add Buddy" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></span><span class="toolbarButton"><img id="joinroom" src="images/'+windowCSS+'/joinroom.png" class="toolbarButton" onclick="new_room_dialog();" alt="Join Chatroom" title="Join Chatroom" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);"/></span><span class="toolbarButton"><img id="removebuddy" src="images/'+windowCSS+'/removebuddy.png" class="toolbarButton" onclick="remove_buddy_dialog();" alt="Remove Buddy" title="Remove Buddy" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></span><span class="toolbarButton"><img id="imanyone" src="images/'+windowCSS+'/imanyone.png" class="toolbarButton" onclick="new_im_dialog();" alt="IM Anyone" title="IM Anyone" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></span><span class="toolbarButton"><img id="changepassword" src="images/'+windowCSS+'/changepassword.png" class="toolbarButton" onclick="change_pass_dialog();" alt="Change Password" title="Change Password" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></span><span class="toolbarButton"><img id="toggleaudio" src="images/'+windowCSS+'/audio_'+(audioNotify ? 'on' : 'off')+'.png" onclick="toggleAudio();" alt="Toggle Audio" title="Toggle Audio" /></span><div id="statusSettings"><input type="text" id="customStatus" onkeypress="processCustomAway(event);" style="display:none" onblur="if($(\'customStatus\').style.display != \'none\') { $(\'customStatus\').style.display = \'none\'; $(\'curStatus\').style.display = \'block\'; }" /><a href="#" id="curStatus" onclick="toggleStatusList();return false;">I\'m available</a></div></div><div id="blContainer"><ul id="buddylist" class="sortable box"><li style="display:none"></li></ul></div><div id="blBottomToolbar"><a href="#" style="-moz-outline-style: none;" onclick="logout();return false;"><img src="images/'+windowCSS+'/signoff.png" style="border:0;" alt="Sign off" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></a></div>';
            buddyListWin.getContent().oncontextmenu = function() { return false; };
            $('bl_minimize').style.left = (buddyListWin.getSize()['width'] - 21) + 'px';
            sizeBuddyList();
            buddyListWin.showCenter(false, (((browserHeight()-40) / 2) - (buddyListWin.getSize()['height'] / 2)), (buddyListLoc == 0 ? 10 : (browserWidth() - buddyListWin.getSize()['width'] - 10)));
            buddyListWin.toFront();

            if(trim(xh.responseText).length == 0) logout();

            var response = xh.responseText.parseJSON();
            
            pingTimer = setInterval(ping, pingFrequency);
            $('modal').style.display = 'none';            
            
            var buddy;
            if(!response.buddy || response.buddy.length == 0) return;
            var budList = response.buddy.parseJSON();
            for(var group in budList) {
               if(!$(group.replace(/\s/, '_')+'_group') && group != 'toJSONString') addGroupToList(group);
               if(!buddyList[group]) buddyList[group] = [];
               for(i=0; i<budList[group].length; i++) {
                     buddy = budList[group][i];
                     buddyList[group][i] = buddy.username;
                     if(!$(buddy.username+'_blItem')) addBuddyToList(buddy.username, group);
                     $(buddy.username+'_blItem').style.display='block';
                     if(buddy.is_online == 0 || buddy.is_online == 50) {
                        moveBuddy(buddy.username, 'Offline');
                        $(buddy.username+'_blImg').src = 'images/offline.png';
                     } else if(buddy.is_online == 2) {
                        moveBuddy(buddy.username, group);
                        $(buddy.username+'_blImg').src = 'images/away.png';            
                     } else {
                        moveBuddy(buddy.username, group);
                        $(buddy.username+'_blImg').src = 'images/online.png';
                     }
               }
            }
         }
      });
}

function logout() {
   if(user == '' || pass == '') return;
   //var xhConn = new XHConn();
   //xhConn.connect(pingTo, 'POST', 'call=logout&from='+user+'&pwd='+pass, null);

   var xmlhttp=false;
   /*@cc_on @*/
   /*@if (@_jscript_version >= 5)
   // JScript gives us Conditional compilation, we can cope with old IE versions.
   // and security blocked creation of the objects.
    try {
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
     try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     } catch (E) {
      xmlhttp = false;
     }
    }
   @end @*/
   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
     xmlhttp = new XMLHttpRequest();
   }
   
   xmlhttp.open('POST', pingTo, false);   xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   xmlhttp.send('call=logout&from='+user+'&pwd='+pass);
   
   clearTimeout(pingTimer);

   defaultTitle = document.title = document.title.replace(': ' + user, '');
   user = '';
   pass = '';
   
   isAway = 0;
   awayMessage = '';
   window.onresize = function() { };
   buddyListWin.hide();
   for(var name in IMWindows) {
      if(typeof($(name + '_im')) != 'undefined') {
         try {
            if(IMWindows[name].popup)
               IMWindows[name].popup.close();
            else
               IMWindows[name].destroy();
         } catch(e) { }
      }
   }
   Dialog.alert('<span class="dialog_long_label">You have signed off!</span>',
                { windowParameters: {className:alertCSS, width:alertWidth, height: 85}, 
                  okLabel: "Reconnect",
                  ok:function(win) {
                     try {
                        window.location.reload();
                     } catch(e) { }
                  }
                });
}

function register() {
   var error = '';
   
   var registerButton = $('register_button');
   registerButton.onclick = function() { };
   
   if(($('newpassword').value == $('newpassword2').value)) {
      if(checkEmailAddr($('newemail').value)) {
         if($('newpassword').value.length >= 4 && $('newpassword').value.length <= 16) {
            if($('newusername').value.isAlphaNumeric() && $('newusername').value.length >= 3 && $('newusername').value.length <= 16) {
               var xhConn = new XHConn();
               
               var username = $('newusername').value;
               var password = $('newpassword').value;
               var email    = $('newemail').value;
               xhConn.connect(pingTo, "POST", "call=register&from="+username+"&pwd="+password+"&email="+email,
                  function(xh) {
                     switch(xh.responseText) {
                        case 'user_registered':
                           Dialog.alert('<span class="dialog_long_label">Registration Successful!</span><div style="clear:both"></div>',
                                        {windowParameters: {className:alertCSS, width:alertWidth},
                                         ok:function(win) { clearInputs(); Dialog.closeInfo(); login_dialog(); }});
                           registerButton.onclick = function() { register();return false; };
                           return;
                        case 'username_taken':
                           error = 'The username you have chosen is already in use.';
                           break;
                        case 'username_bad':
                           error = 'Usernames may only contain letters, numbers, _,<br />and be 3 to 16 characters long.';
                           break;
                        case 'password_bad_length':
                           error = 'Passwords must be 4 to 16 characters long!';
                           break;
                        case 'invalid_email':
                           error = 'Invalid Email Address!';
                           break;
                        case 'email_already_used':
                           error = 'A username is already registered with that email address!';
                           break;
                        default:
                           error = 'Registration Failed! Please try again later.';
                     }
                     $('register_error_msg').innerHTML = error;
                     $('register_error_msg').style.display = 'block';
                     new Effect.Shake('modal');
                     registerButton.onclick = function() { register();return false; };
                  });
                  return;
            } else {
               error = 'Usernames may only contain letters, numbers, _,<br />and be 3 to 16 characters long.';
            }
         } else {
            error = 'Passwords must be 4 to 16 characters long!';
         }
      } else {
         error = 'Invalid Email Address!';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -