📄 ajax_im.js
字号:
///////////////////////////////////
// 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 + -