
// ****************************************
// webim.js ver 1.0
// ****************************************

// ****************************************
// 公共变量定义
// ****************************************
var visitorZoneIdStr 	= '5011.';	// 用于检测对方是否是游客的GID区号头
var SP1 				= String.fromCharCode(1);
var SP2 				= String.fromCharCode(2);
var SP3 				= String.fromCharCode(3);
var oXmlHttpAlive 		= null;     // 保持在线和接收消息的长连Ajax
var oXmlHttpSend		= null;		// 发送消息的Ajax
var	language			= 'chs';	// 界面语言
var toGID 				= '';		// 对话对方GID
var toName 				= '';		// 对话对方名称
var fromGID 			= '';		// 对话本方GID
var fromName 			= '';		// 对话本方名称
var passport 			= '';		// 对话本方登录后的passport
var password			= '';		// 对话本方的Password MD5
var isLoginOK 			= false;	// 登录成功？
var isVisitor 			= false;	// 是游客身份？
var chatBuddyCount 		= 0;		// 正在聊天的打开窗口数
var showOnlineOnly 		= false;	// 用户切换是否仅显示在线者
var initBuddyListOK 	= false;	// Ajax获取我的好友列表成功？
var arrBuddyList 		= null;		// 我的好友信息、状态数组
var arrGroupList 		= null;		// 我的好友分组数组
var webim_test_lava_ver	= 0;		// 用于检查客户端的版本
var windowName			= '';		// 用户写Cookie以便在同一域不同网页时，多个对话能在同一窗口
var mainWindow			= window;	// 只有联系人和对话分成2个不同的窗口时，对话窗口需要将mainWindow设为opener，主窗口需要将chatWindow=window.open
var chatWindow			= window;	//
var goLoginPage			= false;	// 为了避免进入登录页时刷新网页的多余提醒
var RING_CAPABILITY_VIDEO 	= 0x00008000;
var RING_CAPABILITY_AUDIO 	= 0x00004000;
var RING_CAPABILITY_PTT 	= 0x00002000;
var RING_CAPABILITY_LAVAME 	= 0x00000800;
var RING_CAPABILITY_PHONE 	= 0x00000100;
var RING_CAPABILITY_VISITOR = 0x00000004;
var RING_CAPABILITY_WEBIM 	= 0x00000002;

// 可OEM配置项初始化，每个项必须在此定义，可优化
if (typeof(allowVisitor)	=="undefined")	{ var allowVisitor=null; }
if (typeof(autoVisitor)		=="undefined")	{ var autoVisitor=null; }
if (typeof(allowLogin)		=="undefined")	{ var allowLogin=null; }
if (typeof(displayBuddyList)=="undefined")	{ var displayBuddyList=null; }
if (typeof(displayTopArea)	=="undefined")	{ var displayTopArea=null; }
if (typeof(displayBottomArea)=="undefined")	{ var displayBottomArea=null; }
if (typeof(displayTopAD)	=="undefined")	{ var displayTopAD=null; }
if (typeof(displayRightAD)	=="undefined")	{ var displayRightAD=null; }
if (typeof(downloadClientUrl)	=="undefined")	{ var downloadClientUrl = 'http://www.lava-lava.com/download/'; }
if (typeof(userRegisterUrl)	=="undefined")		{ var userRegisterUrl = 'http://www.lava-lava.com/register/'; }
if (typeof(webimApiBase)	=="undefined")		{ var webimApiBase = "http://api1.lava-lava.com/webim"; }
if (typeof(webimVisitorApiBase)	=="undefined")	{ var webimVisitorApiBase = "http://api1.lava-lava.com/webim2";	}
if (typeof(webimBuddyListApiBase)	=="undefined")	{ var webimBuddyListApiBase = "http://api1.lava-lava.com/sapi/getbl"; }
if (typeof(webimOnlineStatApiBase)	=="undefined")	{ var webimOnlineStatApiBase = "http://api1.lava-lava.com/cgi-bin/chkonline"; }
if (typeof(topAD)			=="undefined")	{ var topAD=null; }
if (typeof(rightAD)			=="undefined")	{ var rightAD=null; }
if (typeof(defaultBuddyList)=="undefined")	{ var defaultBuddyList=null; }
if (typeof(defaultGroupList)=="undefined")	{ var defaultGroupList=null; }
if (typeof(lavaoemid)	=="undefined")	 	{ var lavaoemid = 0;}
if (typeof(userLoginUrl)=="undefined")		{ var userLoginUrl = null; }	

// 多语言有关的变量初始化，每个多语言串必须在此先定义，可优化
// *****************************
// 主界面元素部分
var langTxt_btn_OK;
var langTxt_btn_Cancel;
var langTxt_btn_Close;

var langTxt_btn_login;
var langTxt_btn_logout;
var langTxt_btn_register;
var langTxt_btn_emotion;
var langTxt_btn_sharefile;
var langTxt_btn_savecontent;
var langTxt_caption_contactlist;
var langTxt_btn_onlineonly;
var langTxt_btn_refresh;
var langTxt_tip_refreshing;
var langTxt_btn_send;

var langTxt_dlgAddchatbuddy_cation;
var langTxt_dlgLoginarea_caption;
var langTxt_label_gid;
var langTxt_label_account;
var langTxt_label_buddyname;
var langTxt_label_password;
var langTxt_btn_doLogin;
var langTxt_btn_doLoginVisitor;
var langTxt_btn_regNewUser;

// 提示信息
var langTxt_appTitle;
var langTxt_tipBottomArea;

var langTxt_tipStranger;
var langTxt_tipUnknowMsg;
var langTxt_tipBuddyOffline;
var langTxt_tipClientVersion;
var langTxt_tipLogoutInfo;
var langTxt_myinfoInputTip;
var langTxt_myinfoLoginTip;
var langTxt_Word_say;
var langTxt_tipNoChatContentToSave;
var langTxt_tipLneNotRunning;
var langTxt_tipUnfitNavi4Saving;
var langTxt_tipErrWindow4Saving;
var langTxt_SaveContentPageTitle;
var langTxt_visitorNameStr;
var langTxt_tipLoginOvertime;
var langTxt_tipNetworkBreak;
var langTxt_tipAccountOrPassBlank;
var langTxt_tipLoginFailed;
var langTxt_tipLoginInProgress;
var langTxt_tipLogoutFailed;
var langTxt_tipOffLineAndReLogin;
var langTxt_tipLoginInOtherComputer;
var langTxt_tipNotLoginOK;
var langTxt_tipNoChatWindow;
var langTxt_tipSendInputBlank;
var langTxt_tipSendInputOverLength;
var langTxt_tipNewMsgTaskbar;
var langTxt_tipWindowsOverMax;
var langTxt_tipTalkto;
var langTxt_buddyVisitorName;
var langTxt_buddyStrangerName;
var langTxt_tipTalktoGidError;
var langTxt_tipTalktoUserNotExists;
var langTxt_tipUserExistsChecking;
var langTxt_notifyOtherUsingWebIM;

// 在线状态信息
var langTxt_stat_0;
var langTxt_stat_1;
var langTxt_stat_2;
var langTxt_stat_3;
var langTxt_stat_4;
var langTxt_stat_5;
var langTxt_stat_51;
var langTxt_stat_52;
var langTxt_stat_53;
var langTxt_stat_54;
var langTxt_stat_55;
var langTxt_stat_100;

// 整个 js 的初始化，主要是做网页传入参数的准备处理
jsInit();

// ******************************************
// 【界面布局/显示】调整有关的函数
// ******************************************

// 界面布局：根据用户登录状态调整界面表现
function chgLoginStatLayoutView() {
	var e;
	if (mainWindow.isLoginOK) {
		if (mainWindow.isVisitor) {
			if (allowLogin!='no') {
				document.getElementById('tbtn_login').style.display='';
				document.getElementById('tbtn_register').style.display='';
				if (chatWindow == window) {
					document.getElementById('tbtn_login_m').style.display='';
					document.getElementById('tbtn_register_m').style.display='';
				}
			}
		}else{
			document.getElementById('tbtn_login').style.display='none';
			document.getElementById('tbtn_register').style.display='none';
			if (chatWindow == window) {
				document.getElementById('tbtn_login_m').style.display='none';
				document.getElementById('tbtn_register_m').style.display='none';
			}
		}
		if (chatWindow == window) {
			document.getElementById('my_info_m').innerHTML= getLangTxt(langTxt_myinfoInputTip,'"%1"在此输入').replace('%1',unescape(mainWindow.fromName));
		}
		e = document.getElementById('my_info');
		if (chatWindow != window) {
			e.style.display='';
			e.innerHTML = '<img align=absmiddle src="images/buddyStatus/51.gif" /> '+ unescape(fromName)+'('+fromGID+') ['+getLangTxt(langTxt_stat_51,'网页在线')+']';
			e.title = unescape(fromName)+'('+fromGID+') ['+getLangTxt(langTxt_stat_51,'网页在线')+']';
			document.getElementById('tbtn_logout').style.display='';
		}else{
			e.style.display='none';
			document.getElementById('tbtn_logout').style.display='none';
		}
		mainWindow.hide_loginWindow();
	}else{
		mainWindow.show_loginWindow();
		document.getElementById('tbtn_logout').style.display='none';
		if (allowLogin!='no') {
			document.getElementById('tbtn_login').style.display='';
			document.getElementById('tbtn_register').style.display='';
			if (chatWindow == window) {
				document.getElementById('tbtn_login_m').style.display='';
				document.getElementById('tbtn_register_m').style.display='';
				document.getElementById('my_info_m').innerHTML = getLangTxt(langTxt_myinfoLoginTip,'尚未登录');
			}
		}
		document.getElementById('my_info').style.display='none';
	}
	if (chatWindow!=window && chatWindow && !chatWindow.closed) {
		chatWindow.chgLoginStatLayoutView();
	}
}
// 界面布局：根据配置(OEM配置)调整界面表现
function chgConfigLayoutView() {
	var e; 
	if (mainWindow != chatWindow) {
		e =document.getElementById('top_area');
		if (e) {e.style.display = '';}
		e = document.getElementById('top_split');
		if (e) {e.style.display = 'none';}
		e = document.getElementById('right_split');
		if (e) {e.style.display = 'none';}
		e =document.getElementById('top_toolbar_area');
		if (e) {e.style.display = '';}
		if (mainWindow == window) {
			e =document.getElementById('left_area');
			if (e) {e.style.display = 'none';} 
			e =document.getElementById('right_area');
			if (e) {e.style.display = ''; e.style.width="100%";} 
			e =document.getElementById('bottom_area');
			if (e) {e.style.display = 'none';}
			e = document.getElementById('bottom_split');
			if (e) {e.style.display = 'none';}
			e = document.getElementById('right_AD_area');
			if (e) {if(displayRightAD=='no'||!rightAD)  {e.style.display = 'none';}else{e.style.display = '';} }
			e = document.getElementById('top_AD');
			if (e) {e.style.display = 'none';}
			e = document.getElementById('btnVisitorLogin');
			if (e) {if(allowVisitor=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
			e = document.getElementById('tbtn_save');
			if (e) {e.style.display='none';}
			e = document.getElementById('my_info');
			if (e) {e.style.display='';}
		}else{
			e =document.getElementById('left_area');
			if (e) {e.style.display = '';} 
			e =document.getElementById('right_area');
			if (e) {e.style.display = 'none';}
			e =document.getElementById('bottom_area');
			if (e) {if(displayBottomArea=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
			e = document.getElementById('bottom_split');
			if (e) {if(displayBottomArea=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
			e = document.getElementById('right_AD_area');
			if (e) {e.style.display = 'none';}
			e = document.getElementById('top_AD');
			if (e) {if(displayTopAD=='no'||!topAD)  {e.style.display = 'none';}else{e.style.display = '';} }
			e = document.getElementById('btnVisitorLogin');
			if (e) {e.style.display = 'none';}
			e = document.getElementById('tbtn_save');
			if (e) {e.style.display='';}
			e = document.getElementById('my_info');
			if (e) {e.style.display='none';}
			e = document.getElementById('send_area');
			if (e) {e.style.display = '';}
			e = document.getElementById('middle_toolbar');
			if (e) {e.style.display = '';}
			if (allowVisitor!='no' && allowLogin=='no') {
				e = document.getElementById('tbtn_login');
				if (e) { e.style.display = 'none'; }
				e = document.getElementById('tbtn_register');
				if (e) { e.style.display = 'none'; }
				e = document.getElementById('tbtn_login_m');
				if (e) { e.style.display = 'none'; }
				e = document.getElementById('tbtn_register_m');
				if (e) { e.style.display = 'none'; }
			}
		}
	} else {
		e =document.getElementById('right_area');
		if (e) {if(displayBuddyList=='no'){e.style.display = 'none';}else{e.style.display = '';} }
		e = document.getElementById('right_split');
		if (e) {if(displayBuddyList=='no'){e.style.display = 'none';}else{e.style.display = '';} }
		e =document.getElementById('top_area');
		if (e) {if(displayTopArea=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
		e =document.getElementById('top_toolbar_area');
		if (e) {if(displayTopArea=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
		e = document.getElementById('top_split');
		if (e) {if(displayTopArea=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
		e =document.getElementById('bottom_area');
		if (e) {if(displayBottomArea=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
		e = document.getElementById('bottom_split');
		if (e) {if(displayBottomArea=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
		e = document.getElementById('right_AD_area');
		if (e) {if(displayRightAD=='no'||!rightAD)  {e.style.display = 'none';}else{e.style.display = '';} }
		e = document.getElementById('top_AD');
		if (e) {if(displayTopAD=='no'||!topAD)  {e.style.display = 'none';}else{e.style.display = '';} }
		e = document.getElementById('btnVisitorLogin');
		if (e) {if(allowVisitor=='no')  {e.style.display = 'none';}else{e.style.display = '';} }
		e = document.getElementById('my_info');
		if (e) {e.style.display='none';}
		e = document.getElementById('send_area');
		if (e) {e.style.display = '';}
		e = document.getElementById('middle_toolbar');
		if (e) {e.style.display = '';}
		if (allowVisitor!='no' && allowLogin=='no') {
			e = document.getElementById('tbtn_login');
			if (e) { e.style.display = 'none'; }
			e = document.getElementById('tbtn_register');
			if (e) { e.style.display = 'none'; }
			e = document.getElementById('tbtn_login_m');
			if (e) { e.style.display = 'none'; }
			e = document.getElementById('tbtn_register_m');
			if (e) { e.style.display = 'none'; }
		}
	}
}
// 界面语言初始化
function initLangJS(lang) {
    var html_head = document.getElementsByTagName('head')[0];
    var js = document.getElementById('languageJS');
    if (!js) {
	    js = document.createElement('script');
	    js.id = 'languageJS';
	    js.setAttribute('type', 'text/javascript');
    	html_head.appendChild(js);
    }
    js.setAttribute('src', 'lang/'+lang+'.js');
}

// ************************************************
// 【页面初始化】有关的函数
// ************************************************

// 初始化：页面Load后进行初始化
function pageLoadInit() {
	if (webim_test_lava_ver>0) { return; }
	document.title = getLangTxt(langTxt_appTitle,'即时通讯网页版 - Dianji.com');
	chgConfigLayoutView();
	checkAndAddChatBuddy(toGID,toName);
	if (mainWindow!=window) { 
		chgLoginStatLayoutView();
		return; 
	}
	checkLoginStat();
	//chgChatTab(toGID);
	try {document.getElementById('buddyListFilter').addEventListener("input",showBuddyListFilterAuto,false);}
		catch(e){document.getElementById('buddyListFilter').onpropertychange=showBuddyListFilterAuto;}
	setInterval('checkCookieTimer()',1500);
	setTimeout('showAD()',3000);
}
function checkCookieTimer(){
	if (mainWindow != window) { return; }
	var ret;
	if (windowName && windowName!='') { 
		setImCookie(windowName+'_opened','1',3); 
		ret = getCookie_addChatBuddy(windowName);
		if (ret) {
			ret = ret.trim();
			if (ret=='') { return; }
			var i=ret.indexOf('&');
			var toGID = ret.substring(0,i);
			var toName = ret.substring(i+1,ret.length);
			// alert('toGID='+toGID+' | toName='+toName);
			tryAddChatBuddy(toGID,toName);
			window.focus();
		} 
	}
}
// 初始化：根据网页参数做最早的初始化
function jsInit() {
	// 分解参数串，决定显示布局等
	// ?lang=chs&fromGID=2012021&passport=escape(xxx)&password=MD5(xxx)&fromName=2012021&toGID=8001001&toName=lala
	//		&allowVisitor='no'&autoVisitor='no'&displayBuddyList='no'&displayTopArea='no'&displayBottomArea='no'
	var url = location.href.substring(location.href.indexOf('?', 7)+1) ;
	var arr = url.split("&");
	var args = new Array();
	for (var a in arr) { var sa = arr[a].split('=');  args[sa[0].toLowerCase()] = sa[1]; }
	
	if (args['lang']!=null && args['lang']!='') {
		language = args['lang'];
	}
	initLangJS(language);

	if (args['window']!=null && args['window']!='') {
		displayTopArea = '';
		if (args['window']=='main') {
			chatWindow = null;
			displayBuddyList = '';
		}
		if (args['window']=='chat') {
			mainWindow = window.opener;
			displayBuddyList = 'no';
		}
	}else{
		if (args['displaybuddylist']){ 
			displayBuddyList = args['displaybuddylist']; 
		}else{
			if (!displayBuddyList) { displayBuddyList = 'no'; }
		}
		if (args['displaytoparea']){ 
			displayTopArea = args['displaytoparea']; 
		}else{
			if (!displayTopArea) { displayTopArea = 'no'; }
		}
	}
	if (args['fromgid']!=null && args['fromgid']!=''){
		fromGID = args['fromgid'];
		if (args['passport']!=null && args['passport']!=''){
			passport = unescape(args['passport']);
		}else{
			if(args['password']!=null && args['password']!=''){
				password = args['password'];
	}	}	}
	if (args['fromname']!=null && args['fromname']!=''){
		fromName = args['fromname'];
	}else{
		fromName = fromGID;
	}
	if (args['togid']!=null && args['togid']!=''){ toGID = args['togid']; }
	if (args['toname']!=null && args['toname']!=''){
		toName = args['toname'];
	}else{
		toName = toGID;
	}
	if (args['allowvisitor']){ 
		allowVisitor = args['allowvisitor']; 
	}else{
		if (!allowVisitor) { allowVisitor = ''; } 
	}
	if (args['autovisitor']){ 
		autoVisitor = args['autovisitor']; 
	}else{
		if (!autoVisitor) { autoVisitor = ''; }
	}
	if (args['displaybottomarea']){ 
		displayBottomArea = args['displaybottomarea']; 
	}else{
		if (!displayBottomArea) { displayBottomArea = ''; }
	}
	if (!displayRightAD) {
		if (args['displayrightad']){ displayRightAD = args['displayrightad']; }else{ displayRightAD=''; }
	}
	if (!displayTopAD) {
		if (args['displaytopad']){ displayTopAD = args['displaytopad']; }else{ displayTopAD=''; }
	}
	if (!userLoginUrl) {
		if (args['userloginurl']){ userLoginUrl = args['userloginurl']; }else{ userLoginUrl=''; }
	}
	if (window == mainWindow){
		windowName = (args['windowname']) ? args['windowname'] : 'WebIM_'+location.hostname.replace( /\.|:/g , '_');
		var cookieImWinStat = getImCookie(windowName+'_opened');	
		if ( cookieImWinStat && cookieImWinStat=='1' && window.top == window && typeof(window.opener)!='undefined') {
			setCookie_addChatBuddy(windowName,toGID,toName);
			window.opener=null;
			window.close();
			return;
		}
	}
	window.onunload = function() { windowUnload(); } 
	window.onload = function () { pageLoadInit(); }
	if (window == chatWindow) {
		window.onfocus = function() { clearNotifyOnTaskbar(); }
	}
}

// *********************************************
// 【登录】有关函数
// *********************************************

// 登录函数：仅在刷新网页首次用于检查用户的登录状态，主要是针对已经获取passport的检查
// mainWindow
function checkLoginStat() {
	if (mainWindow != window) { return; }
	if (!fromGID || fromGID=='' || !passport || passport==''){
		if (fromGID && fromGID!='' && password && password!=''){
			doLogin(fromGID,password);
			return;
		}else{
			if (allowVisitor!='no' && autoVisitor!='no') {
				doLogin('visitor');
				return;
			} else {
				chgLoginStatLayoutView();
				return;
	}	}	}
	var sUrl= isVisitor ? webimVisitorApiBase : webimApiBase ;
	sUrl+='?act=doCheckStatus&gid='+fromGID+'&passport='+passport+'&kp='+now();
	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("get", sUrl, true);
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				//alert(sUrl+'|'+oXmlHttpAlive.responseText);
				var str=oXmlHttp.responseText.split(SP1);
				if( str[0] == "ONLINE" ) {
					isLoginOK=true;
					fromGID=str[1];
					if ( keepAliveTimer>0 ) { clearTimeout(keepAliveTimer); }
					if ( oXmlHttpAlive && oXmlHttpAlive.readyState != 0 ) { oXmlHttpAlive.abort();	}					
					if (isVisitor) {
						fromName = escape(getLangTxt(langTxt_visitorNameStr,'我(游客%1)').replace('%1',fromGID.substring(fromGID.length-4)));
					}else{
						if (fromName=='') { fromName=fromGID; }
					}
					getBuddyList();
					chgLoginStatLayoutView();
					setTimeout('keepAlive()', 1000);
				} else {
					if( str[0]=="LOGINFAIL") {
						isLoginOK=false;
						document.getElementById('login_stat').innerHTML = getLangTxt(langTxt_tipLoginOvertime,'登录已经超时,请重新登录。');
						document.getElementById('login_stat').style.visibility='visible';
						if (isVisitor==false) { document.getElementById('login_gid').value=fromGID; }
						chgLoginStatLayoutView();
					}
				}
			} else { // oXmlHttpAlive.status != 200
				isLoginOK = false;
				document.getElementById('login_stat').innerHTML = getLangTxt(langTxt_tipNetworkBreak,'服务器无法访问或网络不通，请检查您的网络链接，稍后再试。');
				document.getElementById('login_stat').style.visibility='visible';
				chgLoginStatLayoutView();
			}
		}
	}
	oXmlHttp.send(null);
}
// 登录函数：尝试登录，参数可选使用访客登录
// mainWindow
function doLogin(userId, userPassMD5) {
	if (mainWindow != window) { return; }
	var sGid='';
	var sPass='';
	var loginVisitor=false;
	if (userId && userId.toLowerCase()=='visitor') { 
		if (isLoginOK==true && isVisitor==true) { hide_loginWindow(); return;}
		loginVisitor = true;
	}else{
		if (userId && userPassMD5) {
			sGid = userId.trim();
			sPass = userPassMD5.trim();
		}else{
			sGid=document.getElementById("login_gid").value.trim();
			sPass=document.getElementById("login_pass").value.trim();
			if (sGid==''||sPass==''){
				document.getElementById('login_stat').innerHTML = getLangTxt(langTxt_tipAccountOrPassBlank,'提示: GID和密码不能为空,请重填。');
				document.getElementById('login_stat').style.visibility='visible';
				return;
			}
			sPass = MD5(sPass);
		}
		loginVisitor = false;
	}
	if ( keepAliveTimer>0 ) { clearTimeout(keepAliveTimer); }
	if ( oXmlHttpAlive && oXmlHttpAlive.readyState != 0 ) { oXmlHttpAlive.abort();	}
	isVisitor = loginVisitor;				
	var sUrl= isVisitor ? webimVisitorApiBase : webimApiBase ;
	var oXmlHttp = createXMLHttp();
	sUrl+='?act=doLogin&gid='+sGid+'&pass='+sPass+'&kp='+now();
	oXmlHttp.open("get", sUrl, true);
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				//alert(sUrl+'|'+oXmlHttp.responseText);
				var str=oXmlHttp.responseText.split(SP1);
				if( str[0] == "LOGINOK" ) {
					if ( isLoginOK==true && fromGID!='' && fromGID!=str[1] ) { // 这里说明更换帐号登录了，就要退出原有GID的登录
						doLogout(fromGID,passport);
					}
					isLoginOK=true;
					fromGID=str[1];
					passport=str[2];
					password=sPass;
					if (isVisitor) {
						fromName = escape(getLangTxt(langTxt_visitorNameStr,'我(游客%1)').replace('%1',fromGID.substring(fromGID.length-4)));
					}else{
						if (fromName=='') { fromName=fromGID; }
					}
					getBuddyList();
					chgLoginStatLayoutView();
					setTimeout('keepAlive()', 1000);
				} else {
					if( str[0]=="LOGINFAIL") {
						isLoginOK = false;
						document.getElementById('login_stat').innerHTML = getLangTxt(langTxt_tipLoginFailed,'GID或密码错误，请重新输入后再试。');
						document.getElementById('login_stat').style.visibility='visible';
						chgLoginStatLayoutView();
					}
				}
			} else { // oXmlHttpAlive.status != 200
				isLoginOK = false;
				document.getElementById('login_stat').innerHTML = getLangTxt(langTxt_tipNetworkBreak,'服务器无法访问或网络不通，请稍后再试。');
				document.getElementById('login_stat').style.visibility='visible';
				chgLoginStatLayoutView();
			}
		}
	}
	document.getElementById('login_stat').innerHTML = '<img align=absmiddle src="images/loading.gif" > '+getLangTxt(langTxt_tipLoginInProgress,'正在登录...');
	document.getElementById('login_stat').style.visibility='visible';
	oXmlHttp.send(null);
}
// 登录函数：提交本人状态变化信息(在获取联系人列表得到本人姓名后)
// mainWindow
function setMyPresence(stat) {
	if (mainWindow != window) { return; }
	if (!isLoginOK || isVisitor || fromName=='' ) { return; }
	var myCapability = RING_CAPABILITY_WEBIM;
	if (isVisitor) { myCapability = myCapability | RING_CAPABILITY_VISITOR; }
	var xmlStr = '<?xml version="1.0" encoding="utf-8" ?><presence state="'+stat+'" capability="'+myCapability+'" name="'+unescape(fromName)+'" />';
	var sUrl= webimApiBase+'?act=doSetMyPresence&gid='+fromGID+'&passport='+passport+'&kp='+now();
	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("post", sUrl, true);
	oXmlHttp.setRequestHeader("Content-Type", "text/xml"); 
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				// doNothing
			}
			delete(oXmlHttp);
		}
	};
	oXmlHttp.send(xmlStr);
}

// 登录函数：截获登录密码输入框的键盘回车事件，按回车登录
// mainWindow
function loginEnterHandler(event){
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13) {
		doLogin();
		event.returnValue = false;
	} 
} 
// 登录函数：网页被跳转(包括关闭窗口)
// mainWindow
function windowUnload() {
	if (window==mainWindow) {
		if (windowName && windowName!='') {
			setImCookie(windowName+'_opened','',0);
			delImCookie(windowName+'_opened');
		}
		doLogout();
		if (chatWindow!=mainWindow && chatWindow && !chatWindow.closed) {
			chatWindow.close();
		}
		if (window.top == window && goLoginPage==false) { // "嵌入iframe的WebIM退出时" 不提醒
			alert(getLangTxt(langTxt_tipLogoutInfo,'您正在退出即时通讯网页版，感谢您的使用。'));
		}
	}else{
		mainWindow.chatBuddyCount=0;
		mainWindow.toGID = '';
		mainWindow.chatWindow = null;
		window.opener = null;
		window.close();
	}
}
// 登录函数：退出登录
// mainWindow
function doLogout(sGID, sPassport) {
	if (mainWindow != window) { return; }
	if (!isLoginOK) { return; }
	var logoutCurrentGID = false;
	if (!sGID) { // 说明是退出当前GID的登录，例如关闭窗口时
		logoutCurrentGID = true;
		sGID = fromGID; 
		sPassport = passport;
		if ( keepAliveTimer>0 ) { clearTimeout(keepAliveTimer); }
		if ( oXmlHttpAlive ) { oXmlHttpAlive.abort(); }
		isLoginOK = false;
		initBuddyListOK = false;	
		arrBuddyList 	= null;		
		arrGroupList 	= null;	
		chgLoginStatLayoutView();
	}
	var sUrl= isVisitor ? webimVisitorApiBase : webimApiBase ;
	sUrl+='?act=doLogout&gid='+sGID+'&passport='+sPassport+'&kp='+now();
	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("get", sUrl, true);	
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				if (logoutCurrentGID) {
					var str=oXmlHttp.responseText.split(SP1);
					if( str[0] == "LOGOUTOK" ) {
						isLoginOK = false;
						initBuddyListOK = false;	
						arrBuddyList 	= null;		
						arrGroupList 	= null;	
						chgLoginStatLayoutView();
					}else{
						alert(getLangTxt(langTxt_tipLogoutFailed,'提示: 退出登录失败，请重新登录进入。')); 
					}	
	}	}	}	}
	oXmlHttp.send(null);
}

// *************************************************************
// 【消息收发】有关函数
// *************************************************************

// 消息收发：Ajax保持在线并收取消息
// mainWindow
var keepAliveTimer = 0;
function keepAlive() {	
	if (mainWindow != window) { return; }
	if (isLoginOK && !initBuddyListOK) {
		if ( keepAliveTimer>0 ) { clearTimeout(keepAliveTimer); }
		keepAliveTimer = setTimeout('keepAlive()', 500);
	}
	var sUrl= isVisitor ? webimVisitorApiBase : webimApiBase ;
	sUrl+='?act=doKeepAlive&gid='+fromGID+'&passport='+passport+'&kp='+now();
	if( !oXmlHttpAlive ) {
		oXmlHttpAlive = createXMLHttp();
	} else if (oXmlHttpAlive.readyState != 0) {
		oXmlHttpAlive.abort();
	}
	oXmlHttpAlive.open("get", sUrl, true);
	oXmlHttpAlive.onreadystatechange = function () {
		if (typeof(oXmlHttpAlive) == "undefined" || !oXmlHttpAlive) { return; }
		if (oXmlHttpAlive.readyState == 4) {
			if (oXmlHttpAlive.status==200) {
				var arr=oXmlHttpAlive.responseText.split(SP1);
				for (var i in arr) {
					if (arr[i]==SP3) {break;}
					var arr2 = arr[i].split(SP2);
					switch (arr2[0]) {
						case '0':
							if (arr2[1]!='1000') {
								showImMsg(arr2[1],arr2[1],arr2[2].replaceSpecialSymbol(),arr2[3]);
							}
							break;
						case '1':
							break;
						case '2':
							if (arr2[1]==fromGID) {
								if (arr2[2]=='0'||arr2[2]=='10'){
									if ( oXmlHttpAlive ) { oXmlHttpAlive.abort(); }
									if ( keepAliveTimer>0 ) { clearTimeout(keepAliveTimer); }
									isLoginOK = false;
									initBuddyListOK = false;	
									arrBuddyList 	= null;		
									arrGroupList 	= null;	
									var alertInfo = (arr2[2]=='0')? getLangTxt(langTxt_tipOffLineAndReLogin,'您已离线，请重新登录。') : getLangTxt(langTxt_tipLoginInOtherComputer,'用户"%1(%2)"已经在其他电脑登录，请重新登录。').replace('%1',unescape(fromName)).replace('%2',fromGID);
									if (document.getElementById('loginWindow').style.display=='none') {
										alert(alertInfo);
									}
									chgLoginStatLayoutView();
									return;
								}
							}else{
								var stat = arr2[2];
								if (stat=='5' && !(arr2[3]&RING_CAPABILITY_LAVAME)){
									stat = '0';
								}
								if (parseInt(stat)>0 && arr2[3]&RING_CAPABILITY_WEBIM) {
									stat = '5'+stat;
								}
								var sName = (arr2[3]&RING_CAPABILITY_VISITOR) ? getLangTxt(langTxt_visitorNameStr,'我(游客%1)').replace('%1',arr2[1].substring(arr2[1].length-4)) : arr2[5] ;
								chgBuddyStat(arr2[1],stat,sName.replaceSpecialSymbol());
							}
							break;
			}	}	}
			//if (!isLoginOK) { isLoginOK=true; }
			if ( keepAliveTimer>0 ) { clearTimeout(keepAliveTimer); }
			if (isLoginOK) { 
				keepAliveTimer = setTimeout('keepAlive()', 1000); 
			}else{
				chgLoginStatLayoutView();
	}	}	}
	oXmlHttpAlive.send(null);
}
// 消息收发：发送消息
// mainWindow
function sendImMsg(sGID, sendMsg, notShowResult) {
	if (mainWindow != window) { return; }
	var e;
	if (!sGID || sGID=='' || sGID=='0' || !sendMsg || sendMsg=='') {
		if (!chatWindow || chatWindow.closed) { return; }
		e = chatWindow.document.getElementById('send_content');
		if (!e) { return; }
		sendMsg = e.value.trim();
		sGID = toGID;
		if ( toGID=='' || chatBuddyCount<=0 ) { chatWindow.alert(getLangTxt(langTxt_tipNoChatWindow,'没有选择对话人，请选择一个对话人进入聊天。'));  return; }
	}
	if ( sendMsg==''  && chatWindow && !chatWindow.closed ) { chatWindow.alert(getLangTxt(langTxt_tipSendInputBlank,'输入消息不能为空，请重新输入。'));  return; }
	if ( sendMsg.length>400  && chatWindow && !chatWindow.closed ) { chatWindow.alert(getLangTxt(langTxt_tipSendInputOverLength,'输入消息长度不能超过400字，请重新输入。'));  return; }
	if ( isLoginOK != true  && chatWindow && !chatWindow.closed ) { chatWindow.alert(getLangTxt(langTxt_tipNotLoginOK,'尚未登录，请登录后重复此操作。'));  return; }
	var sUrl= isVisitor ? webimVisitorApiBase : webimApiBase ;
	sendMsg = sendMsg.replaceReturnKey().replaceSpecialSymbol();
	sUrl+='?act=doSendMsg'+'&toGid='+sGID+'&msg='+encodeURIComponent(sendMsg.replace(/\&/g,'&amp;'))+'&msgId='+now()+'&gid='+fromGID+'&passport='+passport+'&kp='+now();

	if( !oXmlHttpSend ) {
		oXmlHttpSend = createXMLHttp();
	} else if (oXmlHttpSend.readyState != 0 && oXmlHttpSend.readyState != 4) {
		return; //oXmlHttpSend.abort();
	}
	oXmlHttpSend.open("get", sUrl, true);
	oXmlHttpSend.onreadystatechange = function () {
		if (oXmlHttpSend.readyState == 4) {
			if (oXmlHttpSend.status == 200) {
				//if (oXmlHttpSend.responseText=='') {alert('Ohh, maybe offline, reLogin please.');}
				var arr=oXmlHttpSend.responseText.split(SP1);
				if( arr[0] == "OK" ) {
					if (!isLoginOK) { isLoginOK=true; }
					var time = new Date();
					if (!notShowResult) {
						showImMsg(sGID,fromGID,sendMsg,arr[4]);
					}
					if (e) { e.value=''; }
				} else {
					// alert('send error:'+oXmlHttpSend.responseText);
			}	}
		}
	};
	oXmlHttpSend.send(null);
}
// 消息收发：截获发消息输入框的键盘回车事件，按回车发送
// chatWindow
function sendEnterHandler(event){
	clearNotifyOnTaskbar();
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13) {
		mainWindow.sendImMsg();
		event.returnValue = false;
	}
} 
// 消息收发：在对话内容区域显示收到或发送的消息
// chatWindow OR mainWindow to chatWindow
var newMsgPopWindowTimer = 0;
function showImMsg(buddyGID,gid,Msg,time) { // gid 是发言者的gid，如果是自己发言，就是自己的 gid。buddyGID是对话方的gid。
	if ( buddyGID=='' || gid=='' ) { return; }
	if ( window != chatWindow ) {  
		if (webImUnknownMSG(Msg)){
			sendImMsg(buddyGID,getLangTxt(langTxt_notifyOtherUsingWebIM,'自动提示：我正在浏览器上使用网页版IM，只能接收文字消息。'),'notShowResult');
		}else{
			if (!chatWindow || chatWindow.closed) { 
				createChatWindow(gid,getBuddyNameByGid(buddyGID));
				if (newMsgPopWindowTimer >0) { clearTimeout(newMsgPopWindowTimer); }
				newMsgPopWindowTimer = setTimeout('showImMsg("'+buddyGID+'","'+gid+'","'+Msg+'","'+time+'")',2000);
			}else{
				chatWindow.showImMsg(buddyGID,gid,Msg,time);
			}
		}
		return;
	}
	
	var sTurn = '';
	var talkerName = '';
	if(gid==mainWindow.fromGID) {					// 是自己的发言
		sTurn = 'myturn'; 
		talkerName = unescape(mainWindow.fromName);
	} else {
		if (findBuddyInChatListByGid(gid)=='') {
			addChatBuddy(buddyGID,mainWindow.getBuddyNameByGid(buddyGID));
			checkBuddyOnlineStat(gid);
		}
		notifyMsgOf(buddyGID);
		if (webImUnknownMSG(Msg)){
			notifyTipOf(gid,getLangTxt(langTxt_tipUnknowMsg,'刚刚收到对方发送的内容网页版IM不支持，请安装 <a href="'+downloadClientUrl+'" target=blank>客户端版本</a>。'),true);
			return;
			//sTurn = 'systurn';
		} else {
			sTurn = 'otherturn';
		}
		talkerName = document.getElementById('chatBuddyName_tab_'+buddyGID).innerHTML;
	}
	var e=document.getElementById('chatContentBottom_'+buddyGID);
	if (!e) { return; }
	Msg = replaceEmoKeyToIcon(Msg);
	var eHis = document.createElement('span');
	eHis.className="chat_content_"+sTurn; 
	var str='';
	if (sTurn!='systurn') {
		str+= '<span class="chat_content_'+sTurn+'_name">'+talkerName+'<font class="chat_content_'+sTurn+'_note"> '+getLangTxt(langTxt_Word_say,'说')+' ('+time+'):</font></span>';
		str+= '<span class="chat_content_'+sTurn+'_content">'+Msg+'</span>';
	}
	eHis.innerHTML = str;
	e.parentNode.insertBefore(eHis,e);	//.appendChild(eHis);
	e.scrollIntoView(false);		//eHis.scrollIntoView(false);
}
// 消息收发：保存当前对话者的对话内容
// chatWindow
function saveChatContent() {
	if (chatWindow != window) { return; }
	var isIE = ( navigator.userAgent.indexOf('MSIE')< 0 || navigator.userAgent.indexOf('Opera')>=0 )? false:true;
	if (mainWindow.chatBuddyCount<=0 || mainWindow.toGID=='') { alert(getLangTxt(langTxt_tipNoChatContentToSave,'您没有选择对话人，没有对话内容可保存。')); return; }
	var e=document.getElementById('chatContent_'+mainWindow.toGID);
	if (!e) { alert(getLangTxt(langTxt_tipErrWindow4Saving,'当前对话窗口不正确，请重新选择对话人后选择保存。')); return; }
	
	var win = window.open('','','width=500,height=460,menubar=1,toolbar=0,scrollbar=1'); 
	var t = new Date();
	var tStr = t.getFullYear()+'-'+(t.getMonth()+1)+'-'+t.getDate();
	var titleStr = getLangTxt(langTxt_SaveContentPageTitle,'对话记录：和 %1(%2)').replace('%1',unescape(mainWindow.toName)).replace('%2',mainWindow.toGID)+'-'+tStr;
	var sHTML = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
	sHTML+= '<title>'+titleStr+'</title><style>';
	sHTML+= '* {font-size:12px; font-family:Tahoma, Arial, Verdana, 宋体;}';
	sHTML+= '.titleStr {width:100%;border:1px solid black;background:#f0f0f0;color:black;font-weight:bold;line-height:20px;}';
	sHTML+= '.relativeFull {position:relative;left:0;top:0;right:0;bottom:0; width:100%;height:100%;}';
	sHTML+= '.chatContent_area {position:absolute;left:0;top:0;right:0;bottom:0;border:1px solid #cccccc; #width:100%;#height:100%;overflow:auto; text-align:left; background:#f9f9f9;}';
	sHTML+= '.chatBuddy_content {position:relative;left:0;top:0;right:0px;bottom:0px;#width:100%;#height:100%; line-height:18px;padding:5px;}';
	sHTML+= '.chat_content_myturn {}';
	sHTML+= '.chat_content_myturn_name {font-weight:bold; color:green; height:18px;display:block;overflow:hidden;}';
	sHTML+= '.chat_content_myturn_note {font-weight:normal; color:#787878;}';
	sHTML+= '.chat_content_myturn_content {margin-left:14px;line-height:22px;display:block;}';
	sHTML+= '.chat_content_otherturn {}';
	sHTML+= '.chat_content_otherturn_name {font-weight:bold; color:blue; height:18px;display:block;overflow:hidden;}';
	sHTML+= '.chat_content_otherturn_note {font-weight:normal; color:#787878;}';
	sHTML+= '.chat_content_otherturn_content {margin-left:14px;line-height:22px;display:block;}';
	sHTML+= '.chat_content_systurn {display:block; line-height:22px;}';
	sHTML+= '</style></head><body>';
	sHTML+= '<div class="titleStr">'+titleStr+'</div>';	
	sHTML+= e.innerHTML;
	sHTML+= '</body></html>';
	if (!isIE) {
		var str = getLangTxt(langTxt_tipUnfitNavi4Saving,'您当前的浏览器不支持保存对话内容，请选择和复制对话内容并自行保存。');
		sHTML += '<script>alert(\''+str+'\')</script>';
	}
	win.document.open(); 
	win.document.write(sHTML); 
	win.document.close(); 
	var fName = unescape(mainWindow.toName)+'('+mainWindow.toGID+') '+tStr+'.html';
	if (isIE) {
		win.document.execCommand('saveas',true,fName); 
		win.window.close(); 
	}
}

// *********************************************************
//【消息提醒】有关函数
// *********************************************************

// 消息提醒：来消息闪烁提醒
// chatWindow
function notifyMsgOf(gid) {
	if (chatWindow != window) { return; }
	if (gid!=mainWindow.toGID) {
		var e=document.getElementById('chatTabAlertIcon_'+gid);
		if(e){ e.style.display=''; }
	}
	if (notifyMsgOnTaskbarTimer > 0) {clearInterval(notifyMsgOnTaskbarTimer);}
	if (window.top == window) {
		notifyMsgOnTaskbarTimer = setInterval('nofityMsgOnTaskbar("'+gid+'")',700);
	}
}
// 消息提醒：清除对话窗口tab的消息闪烁
// chatWindow
function clearNotifyMsgOf(gid){
	if (chatWindow != window) { return; }
	var e=document.getElementById('chatTabAlertIcon_'+gid);
	if(e){ e.style.display='none'; }
	clearNotifyOnTaskbar();
}
// 消息提醒：来消息闪烁在任务栏
// chatWindow
var notifyMsgOnTaskbarTimer = 0;
function nofityMsgOnTaskbar(){
	if (chatWindow != window) { return; }
	var s = '☻ '+getLangTxt(langTxt_tipNewMsgTaskbar,'有新消息')+' ☻';
	document.title = (document.title==s)?'　 '+getLangTxt(langTxt_tipNewMsgTaskbar,'有新消息')+' 　':s;
}
// 消息提醒：清除taskbar上的消息闪烁
// chatWindow
function clearNotifyOnTaskbar() {
	if (chatWindow != window) { return; }
	if (notifyMsgOnTaskbarTimer > 0) {
		clearInterval(notifyMsgOnTaskbarTimer);
		notifyMsgOnTaskbarTimer = 0;
		document.title = getLangTxt(langTxt_appTitle,'即时通讯网页版 - Dianji.com');
	}
}
// 消息提醒：在某对话者的对话记录区域顶部黄条提示，参数允许自动隐藏
// chatWindow
var tipAutoClearTimer =new Array();
function notifyTipOf(gid,tipInfo,autoClear) {
	if (chatWindow != window) { return; }
	if (tipAutoClearTimer[gid]>0) { 
		clearTimeout(tipAutoClearTimer[gid]); 
		tipAutoClearTimer[gid] = 0;
	} 
	var e;
	e = document.getElementById('chatTip_'+gid);
	if (!e) { return; }
	e.innerHTML = '<img src="images/icon_info.gif" align=absmiddle> '+tipInfo;
	e.title = tipInfo.removeHtmlTag();
	e = document.getElementById('chatTip_tr_'+gid);
	if (!e) { return; }
	e.style.display = '';
	if (autoClear==true) {
		tipAutoClearTimer[gid] = setTimeout('clearNotifyTipOf("'+gid+'")',10000);
	}
}
// 消息提醒：清除某对话者的对话记录区域顶部的黄条提示
// chatWindow
function clearNotifyTipOf(gid) {
	if (chatWindow != window) { return; }
	notifyTipOf(gid,getLangTxt(langTxt_tipClientVersion,'网页版IM无法正常收取部落和系统消息，更多功能请安装 <a href="'+downloadClientUrl+'" target=blank>客户端版本</a>。'),false);
}

// ***************************************************
// 【对话窗口】有关函数
// ***************************************************

// 对话窗口：创建独立的chatWindow 
function createChatWindow(sGID,sName) {
	if ( chatWindow==mainWindow || chatWindow == window ) { return; }
	if (!sGID) { 
		sGID=''; sName=''; 
	}else{
		if (!sName) { sName=sGID; }
	}
	var sUrl = location.href.substring(0,location.href.indexOf('?')+1)+"window=chat";
	if ( language!='' )		{ sUrl += '&lang='+language; }
	if ( sGID!='' )	{ sUrl += '&toGID='+sGID+'&toName='+sName; }
	if ( displayBottomArea!='')	{ sUrl += '&displayBottomArea='+displayBottomArea; }
	if ( displayRightAD!='' )	{ sUrl += '&displayRightAD='+displayRightAD; }
	if ( displayTopAD!='' )	{ sUrl += '&displayTopAD='+displayTopAD; }
	chatWindow = window.open(sUrl,'','width=640,height=450,menubar=0,toolbar=0,directories=0,location=0,status=1,scrollbars=0');
}

// 对话窗口：添加一个对话窗口前，先Ajax检查该用户GID是否存在，仅在认为可能出问题的情况下使用
// chatWindow OR mainWindow to chatWindow
function checkAndAddChatBuddy(gid,sName) {
	//if (!gid || gid=='' || gid=='0' || gid==0 ){
	//	gid = document.getElementById('add_chatwith_gid').value.trim();
	//	sName = document.getElementById('add_chatwith_name').value.trim();
	//	if (gid=='') {
	//		document.getElementById('addchatwith_stat').innerHTML = getLangTxt(langTxt_tipTalktoGidError,'请正确填写要对话的联系人GID。');
	//		return;
	//}	}
	if (!gid || gid=='' || gid=='0' || gid==0 ) { return; }
	if ( window!=chatWindow ) {  
		if (!chatWindow || chatWindow.closed) { 
			createChatWindow(gid,sName);
		}else{
			chatWindow.checkAndAddChatBuddy(gid,sName);
		}
		return;
	}
	if (sName=='') { sName=gid; }
	var sUrl= isVisitor ? webimVisitorApiBase : webimApiBase ;
	sUrl+='?act=doCheckUserIdExist&gid='+gid+'&kp='+now();

	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("get", sUrl, true);
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				var arr=oXmlHttp.responseText;
				if (arr == 'Loading') {
					addChatBuddy(gid,sName);
					chgChatTab(gid);
					mainWindow.checkBuddyOnlineStat(gid);
				}else{
					arr=arr.split(SP2);
					document.getElementById('addchatwith_stat').innerHTML = getLangTxt(langTxt_tipTalktoUserNotExists,'GID:%1 的用户不存在，请重新输入对话者的GID。').replace('%1',arr[0]);
			}	}
			delete(oXmlHttp);
			oXmlHttp = null;
		}
	};
	document.getElementById('addchatwith_stat').innerHTML = getLangTxt(langTxt_tipUserExistsChecking,'正在检查GID:%1 的用户是否存在。').replace('%1',gid);
	oXmlHttp.send(null);
}
// 对话窗口：尝试添加一个对话窗口，主要是解决限制8个对话窗口的作用
// chatWindow OR mainWindow to chatWindow
function tryAddChatBuddy(gid,sName) {
	if ( window!=chatWindow ) {  
		if (!chatWindow || chatWindow.closed) {
			if (!sName)  { sName = getBuddyNameByGid(gid); }
			createChatWindow(gid, sName);
		}else{
			chatWindow.tryAddChatBuddy(gid); 
		}
		return;
	}
	if (mainWindow.chatBuddyCount>=8 ) {
		if (confirm(getLangTxt(langTxt_tipWindowsOverMax,'您同时打开的对话窗口太多了，如果要与更多人对话，请点击“确定”按钮下载客户端版本。'))) {
			window.open(downloadClientUrl);
		}
	}else{
		if (!sName || sName=='') { sName = mainWindow.getBuddyNameByGid(gid); }
		addChatBuddy(gid,sName);
		chgChatTab(gid);
		checkBuddyOnlineStat(gid);
	}
}
// 对话窗口：添加一个针对某GID的对话窗口
// chatWindow OR mainWindow to chatWindow
function addChatBuddy(gid,sName) {
	if (!gid || gid=='' || gid=='0' || gid==0) {return;}
	if ( mainWindow!=chatWindow && mainWindow == window ) {  
		if (!chatWindow || chatWindow.closed) { 
			createChatWindow(gid, sName);
		}else{
			chatWindow.addChatBuddy(gid,sName); 
		}
		return;
	}
	var e; var eAdd;
	if (findBuddyInChatListByGid(gid)!='') {
		chgChatTab(gid);
		return;	
	}
	var stat = '0'; 

	e=document.getElementById('chatTabList');
	eAdd = document.createElement('span');
	eAdd.id='chatBuddy_tab_'+gid;
	eAdd.className="chatBuddy_tab";
	eAdd.setAttribute('onclick', 'chgChatTab("'+gid+'")');
	eAdd.setAttribute('gid', gid);
	eAdd.title="GID:"+gid;
	eAdd.innerHTML='<img id="chatTabAlertIcon_'+gid+'" class="chatTabAlert_icon" src="images/notifyMsgFrom.gif" style="display:none"><font id="chatBuddyName_tab_'+gid+'">'+unescape(sName)+'</font><input type=image class="chatTabClose_icon" src=images/tbtn_close.gif onclick=removeChatBuddy("'+gid+'")>';
	e.appendChild(eAdd);
	try {eAdd.attachEvent('onclick',function(){chgChatTab(gid)})} catch(err){}
	
	e=document.getElementById('chat_area');
	eAdd = document.createElement('div');
	eAdd.id='chatBuddy_area_'+gid;
	eAdd.className="relativeFull";
	eAdd.setAttribute('gid',gid);
	var s='<table border=0 cellspacing=0 cellpadding=0 width=100% height=100%>';
	s += '<tr id="chatTip_tr_'+gid+'" style="display:none;"><td height=22><div class="relativeFull"><div id="chatTip_'+gid+'" class="chatTip"></div></div></td></tr>';
	s += '<tr id="chatBuddyInfo_tr_'+gid+'"><td height=22><div class="relativeFull"><div id="chatBuddyInfo_'+gid+'" class="chatBuddyInfo">'+getLangTxt(langTxt_tipTalkto,'对话方：%1').replace('%1','<img id="chatBuddyIcon_'+gid+'" class="chatBuddy_icon" src="images/buddyStatus/'+stat+'.gif" align=absmiddle> <font id="chatBuddyName_title_'+gid+'">'+unescape(sName)+'</font>(GID:'+gid+')')+'</div></div></td></tr>';
	s += '<tr><td><div class="relativeFull"><div id="chatContent_'+gid+'" class="chatContent">';
	if (defaultBuddyList && defaultBuddyList[gid] && defaultBuddyList[gid][2]) {
		s += defaultBuddyList[gid][2]+'<br>';
	}
	s += '<label id="chatContentBottom_'+gid+'"></label></div></div></td></tr></table>';
	eAdd.innerHTML=s;
	e.appendChild(eAdd);
	if(mainWindow.chatBuddyCount>0){ eAdd.style.display = 'none'; }

	mainWindow.chatBuddyCount++;
	if (mainWindow.chatBuddyCount!=1) { eAdd.style.display="none"; } 
	if (mainWindow.toGID=='') { mainWindow.toGID=gid; mainWindow.toName = mainWindow.getBuddyNameByGid(gid); }
	if (mainWindow.chatBuddyCount==2){	e=document.getElementById('chatTabList_area');	if(e){e.style.display='';}  }
	mainWindow.watchBuddyStat(gid);
	mainWindow.checkBuddyOnlineStat(gid); 
	if (initBuddyListOK && findBuddyInBuddyListByGid(gid)==''){
		notifyTipOf(gid,getLangTxt(langTxt_tipStranger,'请不要相信陌生人的中奖信息，不要公布自己的信用卡等卡号密码。'),true);
	}else{
		notifyTipOf(gid,getLangTxt(langTxt_tipClientVersion,'网页版IM无法正常收取部落和系统消息，更多功能请安装 <a href="'+downloadClientUrl+'" target=blank>客户端版本</a>。'),false);
	}
	window.focus();
}
// 对话窗口：关闭一个对话窗口
// chatWindow
function removeChatBuddy(gid) {
	if ( chatWindow != window ) { return; }
	var e = document.getElementById('chatBuddy_tab_'+gid);
	if (e) {e.parentNode.removeChild(e);}
	e = document.getElementById('chatBuddy_area_'+gid);
	if (e) {e.parentNode.removeChild(e);}
	mainWindow.chatBuddyCount--;
	if (mainWindow.chatBuddyCount<=0) { mainWindow.toGID = ''; }
	if (mainWindow.chatBuddyCount<2){e=document.getElementById('chatTabList_area');	if (e) { e.style.display='none'; } 	}
	chgChatTab();
}
// 对话窗口：切换到某GID的对话窗口
// chatWindow
function chgChatTab(gid) {
	if ( chatWindow != window ) { return; }
	clearNotifyMsgOf(gid);
	var e = document.getElementById('chatBuddy_tab_'+mainWindow.toGID);
	if (e) {e.className='chatBuddy_tab';}
	e = document.getElementById('chatBuddy_area_'+mainWindow.toGID);
	if (e) {e.style.display='none';}
	
	e=null;
	if (!gid || gid=='' || gid=='0' || gid<=0) {}else{	e = document.getElementById('chatBuddy_tab_'+gid); }
	if (!e) {
		var arr=document.getElementById('chatTabList').getElementsByTagName('span');
		for (var i in arr) {
			if (arr[i] && arr[i].id && arr[i].id!='chatBuddy_tab_new' && arr[i].id.indexOf('chatBuddy_tab_')>=0) {
				gid =arr[i].getAttribute('gid');
				e = arr[i];
				break;
		}	}
	}
	if (e) {
		e.className='chatBuddy_tab_sel';
		e = document.getElementById('chatBuddy_area_'+gid);
		if (e) {e.style.display='';}
	}
	mainWindow.toGID=gid;
	mainWindow.toName = mainWindow.getBuddyNameByGid(gid);
}

// ************************************************
// 【联系人清单】有关函数
// ************************************************
 
// 联系人清单：根据用户输入自动筛选联系人
// mainWindow
var filterTimer = 0;
function showBuddyListFilterAuto(){
	if ( mainWindow != window ) { return; }
	if (displayBuddyList == 'no' ) { return; }
	show_listRefresh();
	if (filterTimer>0) {clearTimeout(filterTimer); }
	expandAllGroup();	
	filterTimer = setTimeout('showBuddyListFilter()',1500);	
}
// 联系人清单：筛选显示联系人
// mainWindow
function showBuddyListFilter(filterStr) {
	if ( mainWindow != window ) { return; }
	if (displayBuddyList == 'no' || !initBuddyListOK) { return; }
	show_listRefresh();
	expandAllGroup();	
	if (filterTimer>0) {clearTimeout(filterTimer); filterTimer = 0;}
	var arr;
	if (filterStr && filterStr!='') {
		filterStr = filterStr.toLowerCase();
	}else{
		var e=document.getElementById('buddyListFilter');
		if ( e ) { 
			filterStr = e.value.toLowerCase().trim();
			if (filterStr=='' ) {
				document.getElementById('btnClearFilter').src='images/btn_clearfilter_dis.gif';
			}else{
				document.getElementById('btnClearFilter').src='images/btn_clearfilter.gif';
			}
		}else{
			filterStr = '';
		}
	}
	showOnlineOnly = document.getElementById('onlineOnlyFilter').checked;
	if (filterStr!=''){
		if (defaultGroupList) {
			for (var i in defaultGroupList) {
				arr = document.getElementById('buddylist_default'+i).childNodes;
				var count = 0;
				for (var j=0; j<arr.length; j++) {
					try {
						if (arr[j] && arr[j].title) {
							if (arr[j].title.toLowerCase().indexOf(filterStr)>=0) {
								arr[j].style.display='';
							}else{
								arr[j].style.display='none';
								count++;
						}	}
					} catch(e){}
				}
				//document.getElementById('buddylist_default'+i).style.overflow = (count==arr.length) ? 'hidden':''; 
		}	}	
		if (arrGroupList) {
			for (var i in arrGroupList) {
				arr = document.getElementById('buddylist_'+i).childNodes;
				var count = 0;
				for (var j=0; j<arr.length; j++) {
					try {
						if (arr[j] && arr[j].title) {
							if (arr[j].title.toLowerCase().indexOf(filterStr)>=0) {
								arr[j].style.display='';
							}else{
								arr[j].style.display='none';
								count++;
						}	}
					} catch(e){}
				}
				//document.getElementById('buddylist_'+i).style.overflow = (count==arr.length) ? 'hidden':''; 
		}	}
	}else{
		if (defaultGroupList) {
			for (var i in defaultGroupList) {
				arr = document.getElementById('buddylist_default'+i).childNodes;
				var count = 0;
				for (var j=0; j<arr.length; j++) {
					try { 
						if (arr[j]) {
							if (showOnlineOnly!=true || parseInt(arr[j].getAttribute('stat'))>0) {
								arr[j].style.display='';
							}else{
								arr[j].style.display='none';
								count++;
						}	}
					} catch(e) {}
				}
				//document.getElementById('buddylist_default'+i).style.overflow = (count==arr.length) ? 'hidden':''; 
		}	}
		if (arrGroupList) {
			for (var i in arrGroupList) {
				arr = document.getElementById('buddylist_'+i).childNodes;
				var count = 0;
				for (var j=0; j<arr.length; j++) {
					try { 
						if (arr[j]) {
							if (showOnlineOnly!=true || parseInt(arr[j].getAttribute('stat'))>0) {
								arr[j].style.display='';
							}else{
								arr[j].style.display='none';
								count++;
						}	}
					} catch(e) {}
				}	
				//document.getElementById('buddylist_'+i).style.overflow = (count==arr.length) ? 'hidden':''; 
		}	}
	}
	hide_listRefresh();
}
// 联系人清单：刷新显示联系人，包括系统默认推荐人
// mainWindow
function showBuddyList() {
	if ( mainWindow != window ) { return; }
	if (displayBuddyList == 'no' ) { return; }
	if (!arrGroupList && !defaultGroupList) { return; }
	var e=document.getElementById('buddyList');
	if ( !e ) { return; }
	
	show_listRefresh();

	var sName=''; var sGID='';
	var s = '<table border=0 cellspacing=0 cellpadding=0 width=100% height=100%>';
	if (defaultGroupList) {
		for (var i in defaultGroupList) {
			s+= '<tr height=24><td height=24><div id="group_div_default'+i+'" class=buddylist_group onclick=switchGroupStat("default'+i+'")><img id="group_img_default'+i+'" src="images/grp_expand.gif" align=absmiddle> '+defaultGroupList[i][0]+'</div></td></tr>';
			s+= '<tr id="buddylist_area_default'+i+'"><td valign=top height=1><div id="buddylist_default'+i+'" class=buddylist>';
			for (var j in defaultGroupList[i][1]) {
				sGID = defaultGroupList[i][1][j];
				stat = defaultBuddyList[sGID][0];
				sName= defaultBuddyList[sGID][1];
				s += '<div id="listBuddy_'+sGID+'" gid="'+sGID+'" stat="'+stat+'" class=buddylist_buddy title="'+sName+'['+sGID+']" ';
				s += (parseInt(stat)>0 || !showOnlineOnly )? '':' style="display:none" ';
				s += '><img id="listBuddyIcon_'+j+'" class=buddylist_icon src="images/buddyStatus/'+stat+'.gif" align=absmiddle> <a href=javascript:tryAddChatBuddy("'+sGID+'")>'+sName+' ['+sGID+']</a></div>';
			}
			s+= '</div></td></tr>';
	}	}
	
	if (arrGroupList) {
		for (var i in arrGroupList) {
			s+= '<tr><td height=24><div id="group_div_'+i+'" class=buddylist_group onclick=switchGroupStat("'+i+'")><img id="group_img_'+i+'" src="images/grp_expand.gif" align=absmiddle> '+arrGroupList[i][0]+'</div></td></tr>';
			s+= '<tr id="buddylist_area_'+i+'"><td valign=top height=4><div id="buddylist_'+i+'" class=buddylist>';
			for (var j in arrGroupList[i][1]) {
				sGID = arrGroupList[i][1][j];
				try {
					stat = arrBuddyList[sGID][0];
					sName= arrBuddyList[sGID][1];
					s += '<div id="listBuddy_'+sGID+'" gid="'+sGID+'" stat="'+stat+'" class=buddylist_buddy title="'+sName+'['+sGID+']" ';
					s += (parseInt(stat)>0 || !showOnlineOnly )? '':' style="display:none" ';
					s += '><img id="listBuddyIcon_'+j+'" class=buddylist_icon src="images/buddyStatus/'+stat+'.gif" align=absmiddle> <a href=javascript:tryAddChatBuddy("'+sGID+'")>'+sName+' ['+sGID+']</a></div>';
				}catch(e){}
			}
			s+= '</div></td></tr>';
	}	}
	s+= '<tr><td>&nbsp;</td></tr></table>';
	e.innerHTML = s;
	hide_listRefresh();
}

// 联系人清单：监控联系人的状态，将联系人加入监控提交服务器，在KeepAlive中给与反馈
// mainWindow
function watchBuddyListStat() {
	if ( mainWindow != window ) { return; }
	if (!isLoginOK || (!arrBuddyList && !defaultBuddyList) ) { return; }
	if (isVisitor && defaultBuddyList && defaultBuddyList.length>0) { // 游客没有好友，无法实时监控，只能主动查看状态
		for (var gid in defaultBuddyList) {
			checkBuddyOnlineStatFromSrv(gid);
		}
		return;	
	}
	var xmlStr = '<?xml version="1.0" encoding="utf-8" ?><buddylist>';
	if (arrBuddyList && arrBuddyList.length>0) {
		for (var gid in arrBuddyList) {
			xmlStr += '<buddy id="'+gid+'" GsId="+arrBuddyList[gid][2]+" />';
	}	}
	if (defaultBuddyList && defaultBuddyList.length>0) {
		for (var gid in defaultBuddyList) {
			if (!arrBuddyList || !arrBuddyList[gid]) {
				xmlStr += '<buddy id="'+gid+'" GsId="0" />';
	}	}	}
	xmlStr += '</buddylist>';
	var sUrl= webimApiBase+'?act=doAddBuddy&gid='+fromGID+'&passport='+passport+'&kp='+now();
	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("post", sUrl, true);
	oXmlHttp.setRequestHeader("Content-Type", "text/xml"); 
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				// doNothing
			}
			delete(oXmlHttp);
		}
	};
	oXmlHttp.send(xmlStr);
}
function watchBuddyStat(gid) {
	if ( mainWindow != window ) { return; }
	if (arrBuddyList && arrBuddyList[gid]) { return; }
	if (defaultBuddyList && defaultBuddyList[gid]) { return; }
	var xmlStr = '<?xml version="1.0" encoding="utf-8" ?><buddylist>';
	xmlStr += '<buddy id="'+gid+'" GsId="0" />';
	xmlStr += '</buddylist>';
	var sUrl= webimApiBase+'?act=doAddBuddy&gid='+fromGID+'&passport='+passport+'&kp='+now();
	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("post", sUrl, true);
	oXmlHttp.setRequestHeader("Content-Type", "text/xml"); 
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				// doNothing
			}
			delete(oXmlHttp);
		}
	};
	oXmlHttp.send(xmlStr);
}
// 联系人清单：Ajax获取登录用户的联系人清单
// mainWindow
function getBuddyList() {
	if ( mainWindow != window ) { return; }
	if (isLoginOK!=true || passport=='' || fromGID=='' ) { return; }
	if (isVisitor) {
		if (!initBuddyListOK) {	initBuddyListOK = true; } // 第一次获得本人信息以及BuddyList信息
		showBuddyList();
		watchBuddyListStat();
		return;
	}
	var sUrl= webimBuddyListApiBase +'?gid='+fromGID+'&passport='+passport+'&kp='+now();
	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("get", sUrl, true);
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				var s = oXmlHttp.responseText.removeLowSymbol();
				var xmlDoc = createXMLDom(s);
				var e = xmlDoc.documentElement;
				sName = e.childNodes[0].getAttribute('name').replaceSpecialSymbol();
				if (!fromName || fromName=='' || fromName!=sName ) { 
					fromName = escape(sName);
					chgLoginStatLayoutView();
				}
				setMyPresence(1);
				var bdCount=0;
				var format_ver = parseInt(e.getAttribute('format_ver'));
				if (format_ver==3) {
					var eBdLst=e.childNodes[1];
					if (eBdLst && eBdLst.tagName == 'buddylist'){
						bdCount =eBdLst.childNodes.length;
						arrBuddyList = new Array(bdCount);
						for (var i=0; i<bdCount; i++) {
							arrBuddyList[eBdLst.childNodes[i].getAttribute('id')]= new Array('0',eBdLst.childNodes[i].getAttribute('name').replaceSpecialSymbol(),eBdLst.childNodes[i].getAttribute('GsId'));
					}	}
					e=e.childNodes[2];
				}else{
					arrBuddyList = new Array();
					e=e.childNodes[1];
				}
				if (e && e.tagName =='grpinfo') {
					arrGroupList = new Array(e.childNodes.length);
					for (var i=0; i<e.childNodes.length; i++) {
						arrGroupList[i] = new Array(2);
						arrGroupList[i][0]= e.childNodes[i].getAttribute('name').replaceSpecialSymbol();
						var count = e.childNodes[i].childNodes[0].childNodes.length;
						arrGroupList[i][1] = new Array(count);
						for (var j=0; j<count; j++){
							arrGroupList[i][1][j] = e.childNodes[i].childNodes[0].childNodes[j].getAttribute('id');
							if (format_ver==2) {
								bdCount++;
								arrBuddyList[e.childNodes[i].childNodes[0].childNodes[j].getAttribute('id')]= new Array('0',e.childNodes[i].childNodes[0].childNodes[j].getAttribute('name').replaceSpecialSymbol(),e.childNodes[i].childNodes[0].childNodes[j].getAttribute('GsId'));
							}
				}	}	}
				if (!initBuddyListOK) {	initBuddyListOK = true; } // 第一次获得本人信息以及BuddyList信息
				if (!isVisitor && (displayBuddyList!='no' || mainWindow!=chatWindow) ) {
					showBuddyList();
				}	
				watchBuddyListStat();
				delete(xmlDoc);
			}
			hide_listRefresh();
			delete(oXmlHttp);
		}
	};
	show_listRefresh();
	oXmlHttp.send(null);
}
// 联系人清单：切换组折叠
// mainWindow
function switchGroupStat(i) {
	if ( mainWindow != window ) { return; }
	if (buddyListRefreshing) { return; }
	var e=document.getElementById('group_img_'+i);
	// var e=document.getElementById('buddylist_area_'+i);
	if (e) {
		if (e.src.indexOf('grp_collapse.gif')>=0) {
			e.src='images/grp_expand.gif';
			document.getElementById('buddylist_area_'+i).style.display='';
		} else {
			e.src='images/grp_collapse.gif';
			document.getElementById('buddylist_area_'+i).style.display='none';
	}	}
}
function expandAllGroup() {
	if ( mainWindow != window ) { return; }
	var e;
	if (defaultGroupList) {
		for (var i in defaultGroupList) {
			e=document.getElementById('group_img_default'+i);
			if (e && e.src.indexOf('grp_collapse.gif')>=0){
				e.src='images/grp_expand.gif';
				document.getElementById('buddylist_area_default'+i).style.display='';
	}	}	}
	if (arrGroupList) {
		for (var i in arrGroupList) {
			e=document.getElementById('group_img_'+i);
			if (e && e.src.indexOf('grp_collapse.gif')>=0){
				e.src='images/grp_expand.gif';
				document.getElementById('buddylist_area_'+i).style.display='';
	}	}	}
}

// **************************************************
// 【联系人信息】有关函数
// **************************************************

// 联系人信息：Ajax从服务器检查某GID用户的在线状态，返回数值 0:离线 1-5:在线
// mainWindow
function checkBuddyOnlineStatFromSrv(gid) {
	if ( mainWindow != window ) { return; }
	var stat='0';
	var sUrl = webimOnlineStatApiBase + '/' + gid + ':100';
	var oXmlHttp = createXMLHttp();
	oXmlHttp.open("get", sUrl, true);
	oXmlHttp.onreadystatechange = function () {
		if (oXmlHttp.readyState == 4) {
			if (oXmlHttp.status == 200) {
				stat = oXmlHttp.responseText;
				if ( arrBuddyList && arrBuddyList[gid]) {
					arrBuddyList[gid][0]=stat;
				}	
				if ( defaultBuddyList && defaultBuddyList[gid]) {
					defaultBuddyList[gid][0]=stat;
				}
				chgBuddyStat(gid,stat);
			}
			delete(oXmlHttp);
	}	}
	oXmlHttp.send(null);
}
// 联系人信息：得到联系人的在线状态，如果不在联系人列表就调用从服务器检查在线状态
// mainWindow
function checkBuddyOnlineStat(gid){
	if ( mainWindow != window ) { return; }
	if ( arrBuddyList && arrBuddyList[gid]) {
		chgBuddyStat(gid, arrBuddyList[gid][0]);
	}else{
		try { checkBuddyOnlineStatFromSrv(gid); } catch(err) {  }
	}	
}
// 联系人信息：根据GID获取用户名称。如果是游客号段，为游客；如果在自己的联系人中，从中获取；否则都是一般陌生人。
// mainWindow
function getBuddyNameByGid(gid) {
	if ( mainWindow!=window ) { return; }
	if (gid.indexOf(visitorZoneIdStr)>=0) {
		return escape(getLangTxt(langTxt_buddyVisitorName,'游客%1').replace('%1',gid.substring(gid.length-4)) );
	}
	if (initBuddyListOK && arrBuddyList){
		for (var i in arrBuddyList) {
			if (gid == i) {
				return escape(arrBuddyList[gid][1]);
	}	}	}
	if (defaultBuddyList){
		for (var i in defaultBuddyList) {
			if (gid == i) {
				return escape(defaultBuddyList[gid][1]);
	}	}	}
	if (chatWindow && !chatWindow.closed) {
		var e = chatWindow.document.getElementById('chatBuddyName_tab_'+gid);
		if (e) { 
			return escape(e.innerHTML); 
		}
	}
	return escape(getLangTxt(langTxt_buddyStrangerName,'陌生人(%1)').replace('%1',gid) );
}
// 联系人信息：返回一个GID是否在当前对话人中,是则返回GID，否则返回''（判断是否正在对话）
// chatWindow
function findBuddyInChatListByGid(gid) {
	if ( chatWindow!=window ) { return; }
	var e = document.getElementById('chatBuddy_tab_'+gid);
	if (e) { return gid; }else{	return '';	}
}
// 联系人信息：返回一个GID是否在我的联系人列表中,是则返回GID，否则返回''（判断是否为好友）
// mainWIndow
function findBuddyInBuddyListByGid(gid) {
	if ( mainWindow!=window ) { return; }
	if (arrBuddyList && arrBuddyList[gid]) { return gid; }
	if (defaultBuddyList && defaultBuddyList[gid]) { return gid; }
	return '';
}
// 联系人信息：刷新显示某GID用户的在线状态显示
// mainWindow AND mainWindow to chatWindow
function chgBuddyStat(gid, stat, sName) {
	if (mainWindow != window) { return; }
	if (!sName || sName.trim()=='') { sName = ''; }

	if ( window!=chatWindow) {
		if (chatWindow && !chatWindow.closed ) {
			try {
				chatWindow.chgChatBuddyStat(gid, stat, sName);
			}catch(err){}
		}
	}else{
		chgChatBuddyStat(gid, stat, sName);
	}
	if (arrBuddyList && arrBuddyList[gid]) {
		if (sName!='') { arrBuddyList[gid][1] = sName; }
		if (parseInt(stat)>=0) { arrBuddyList[gid][0] = stat;  }
	}	

	if (displayBuddyList=='no') { return; }
	var e; var arr;
	for ( var i in defaultGroupList) {
		arr = document.getElementById('buddylist_default'+i).childNodes;
		for (var j in arr) {
			try {
				if (arr[j] && arr[j].getAttribute('gid') == gid) {
					arr[j].setAttribute('stat',stat); 
					if (showOnlineOnly!=true || parseInt(stat)>0) {
						arr[j].style.display = '';
					} else {
						arr[j].style.display= 'none';
					}
					arr[j].getElementsByTagName('img')[0].src = 'images/buddyStatus/'+stat+'.gif';
				}
			}catch(e){}
	}	}
	for ( var i in arrGroupList) {
		arr = document.getElementById('buddylist_'+i).childNodes;
		for (var j in arr) {
			try {
				if (arr[j] && arr[j].getAttribute('gid') == gid) {
					if (sName!='') {
						arr[j].setAttribute('title',sName+'['+gid+']');
						arr[j].getElementsByTagName('a')[0].innerHTML = sName+'['+gid+']';
					}
					arr[j].setAttribute('stat',stat); 
					if (showOnlineOnly!=true || parseInt(stat)>0) {
						arr[j].style.display = '';
					} else {
						arr[j].style.display= 'none';
					}
					arr[j].getElementsByTagName('img')[0].src = 'images/buddyStatus/'+stat+'.gif';
				}
			}catch(e){}
	}	}	
}
// 联系人信息：刷新显示某正在对话的用户的对话窗口tab的用户在线状态显示
// chatWindow
function chgChatBuddyStat(gid, stat, sName) {
	if ( chatWindow != window ) { return; }
	if (!gid || gid=='' || gid=='0' || gid==0 ) {return;}
	var e=document.getElementById('chatBuddyIcon_'+gid);
	if (!e) { return; }
	e.src='images/buddyStatus/'+stat+'.gif'; 
	if (sName && sName!='') {
		e = document.getElementById('chatBuddyName_tab_'+gid);
		if (e) { e.innerHTML = sName; }
		e = document.getElementById('chatBuddyName_title_'+gid);
		if (e) { e.innerHTML = sName; }
	}
	if (stat=='0') { notifyTipOf(gid,getLangTxt(langTxt_tipBuddyOffline,'对方离线，发送的消息将在对方下次上线后收到。'),true); }
}


// ********************************************************
// 【浮动层/对话框】有关函数
// ********************************************************

// 浮动层：显示添加新对话人的模态层(一般不使用)
function show_statusWindow(infoText) {
	document.getElementById('alertWindow').style.display = '';
}
// 浮动层：隐藏添加新对话人的模态层(一般不使用)
function hide_statusWindow() {
	//document.getElementById('add_chatwith_gid').value = '';
	document.getElementById('add_chatwith_name').value = '';
	document.getElementById('addchatwith_stat').innerHTML='';
	document.getElementById('alertWindow').style.display = 'none';
}
// 浮动层：显示登录界面的模态层或第三方登录网页
// mainWindow
function show_loginWindow() {
	if ( mainWindow!=window ) { return; }
	if (typeof(userLoginUrl)=='string' && userLoginUrl.trim()!='') {
		var sUrl = location.href.substring(0,location.href.indexOf('?')+1);
		if ( language!='' )		{ sUrl += 'lang='+language; }
		if ( toGID!='' )		{ sUrl += '&toGID='+toGID;  sUrl += '&toName='+getBuddyNameByGid(toGID); }
		//if ( allowVisitor!='')	{ sUrl += '&allowVisitor='+allowVisitor; }
		//if ( autoVisitor!='' )	{ sUrl += '&autoVisitor='+autoVisitor; }
		//if ( displayBuddyList!='' )	{ sUrl += '&displayBuddyList='+displayBuddyList; }
		//if ( displayTopArea!='' )	{ sUrl += '&displayTopArea='+displayTopArea; }
		//if ( displayBottomArea!='')	{ sUrl += '&displayBottomArea='+displayBottomArea; }
		//if ( displayRightAD!='' )	{ sUrl += '&displayRightAD='+displayRightAD; }
		//if ( displayTopAD!='' )	{ sUrl += '&displayTopAD='+displayTopAD; }
		//if ( userLoginUrl!='' )	{ sUrl += '&userLoginUrl='+userLoginUrl; }
		sUrl = userLoginUrl+'?url='+encodeURIComponent(sUrl);
		//if ( fromGID!='' )		{ sUrl += '&fromGID='+fromGID+'&fromName='+fromName; }
		goLoginPage = true;
		window.location.href = sUrl;
	}else{
		document.getElementById('btnCancel_dlgLogin').disabled = !isLoginOK;
		document.getElementById('loginWindow').style.display='';
	}
}
// 浮动层：隐藏登录界面的模态层
// mainWindow
function hide_loginWindow() {
	if ( mainWindow!=window ) { return; }
	document.getElementById('login_gid').value='';
	document.getElementById('login_pass').value='';
	document.getElementById('login_stat').innerHTML='';
	document.getElementById('login_stat').style.visibility='hidden';
	document.getElementById('loginWindow').style.display='none';
}
// 浮动层：显示联系人清单的刷新提示条
// mainWindow
var buddyListRefreshing = false;
function show_listRefresh() {
	if ( mainWindow!=window ) { return; }
	buddyListRefreshing = true;
	document.getElementById('listRefreshTip_area').style.display='';
}
// 浮动层：隐藏联系人清单的刷新提示条
// mainWindow
function hide_listRefresh() {
	if ( mainWindow!=window ) { return; }
	buddyListRefreshing = false;
	document.getElementById('listRefreshTip_area').style.display='none';
}

// ************************************************
// 【广告】有关的函数
// ************************************************

// 广告：启动循环播放广告，1次切换/分钟
// mainWindow AND mainWindow to chatWindow
function showAD() {
	var e; var w; var h; var s; var i;
	if (mainWindow == window) {
		if (!mainWindow.isLoginOK) {
			setTimeout('showAD()',5000);
			return; 
		} else {
			if ((displayTopArea!='no' && displayTopAD!='no' && topAD && topAD.length>1)||(displayBuddyList!='no' && displayRightAD!='no' && rightAD && rightAD.length>1)) {
				setTimeout('showAD()',60000);	// 一分钟刷新一次广告,如果是多组广告
			}
			if (chatWindow !=window && chatWindow && !chatWindow.closed) {	chatWindow.showAD(); }
		}
	}
	
	if (mainWindow == window) {
		if (displayBuddyList!='no' && displayRightAD!='no' && rightAD && rightAD.length>0) {
			i= ( rightAD.length==1 )?0:Math.floor(Math.random()*(rightAD.length));
			e=document.getElementById('right_AD');
			w=e.clientWidth-4;
			h=e.clientHeight-4;
			if (e) {
				if (rightAD[i][0].trim().toLowerCase() =='image' ){
					e.innerHTML = '<a target=blank href="'+rightAD[i][2]+'"><img src="'+rightAD[i][1]+'" height="'+h+'"></a>';
				};
				if  (rightAD[i][0].trim().toLowerCase() =='flash' ){
					s='';
					s += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+w+'" height="'+h+'">';
					s += '<param name="movie" value="'+rightAD[i][1]+'" />';
					s += '<param name="quality" value="high" />';
					s += '<embed src="'+rightAD[i][1]+'" quality="high" type="application/x-shockwave-flash" width="'+w+'" height="'+h+'"></embed>';
					s += '</object>';
					e.innerHTML = s;
		}	}	}
	}
	if (chatWindow == window) {
		if (displayTopArea!='no' && displayTopAD!='no' && topAD && topAD.length>0) {
			i= ( topAD.length==1 )?0:Math.floor(Math.random()*(topAD.length));
			e=document.getElementById('top_AD');
			w=e.clientWidth-2;
			h=e.clientHeight-2;
			if (e) {
				if (topAD[i][0].trim().toLowerCase() =='image' ){
					e.innerHTML = '<a target=blank href="'+topAD[i][2]+'"><img src="'+topAD[i][1]+'" height="'+h+'" style="position:absolute;right:1px;"></a>';
				};
				if  (topAD[i][0].trim().toLowerCase() =='flash' ){
					s='';
					s += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+w+'" height="'+h+'">';
					s += '<param name="movie" value="'+topAD[i][1]+'" />';
					s += '<param name="quality" value="high" />';
					s += '<embed src="'+topAD[i][1]+'" quality="high" type="application/x-shockwave-flash" width="'+w+'" height="'+h+'"></embed>';
					s += '</object>';
					e.innerHTML = s;
		}	}	}
	}
}

// ***************************************
// 【多语言】函数
// ***************************************

// 多语言：显示一个语言定义的文字串，调用时还需提供默认文字串(找不到语言定义文字串时使用)
//		   eId为目标显示位置，如果未提供，就是直接write在网页中
function displayLangTxt(txtVar,defaultTxt,eId,showTip) {
	var txt = getLangTxt(txtVar, defaultTxt);
	if (!eId || eId==null) {
		document.write(txt);
	}else{
		var e=(typeof(eId)=="string")?document.getElementById(eId):eId;
		if (e){
			if (showTip) {
				e.title=txt.removeHtmlTag();
			} else {
				if (e.tagName.toLowerCase()=="input") {
					e.value=txt;
				}else{
					e.innerHTML=txt;
	}	}	}	}
}
function getLangTxt(txtVar, defaultTxt) {
	return (typeof(txtVar)=="string")?txtVar:defaultTxt;
}

// ***************************************
// 【系统】通用函数
// ***************************************

String.prototype.trim = function(){ return this.replace(/(^\s*)|(\s*$)/g, ""); }
String.prototype.removeLowSymbol = function() { // 去除20以下的非法字符
	var s = escape(this);
	var reg = /%00|%01|%02|%03|%04|%05|%06|%07|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%10|%11|%12|%13|%14|%15|%16|%17|%18|%19|%1A|%1B|%1C|%1D|%1E|%1F/g ;
	return unescape(s.replace(reg,'%20'));
}
String.prototype.replaceSpecialSymbol = function() {
	var s = this;
	s = s.replace(/\</g, '&lt;');
	s = s.replace(/\>/g, '&gt;');
	s = s.replace(/\'/g, '&#39;');
	s = s.replace(/\"/g, '&quot;');
	return s;
}
String.prototype.replaceReturnKey = function() {
	return this.replaceSpecialSymbol().replace(/\r\n/g,"<br/>");
}
String.prototype.replaceSpecialSymbol2 = function() {
	return this.replaceSpecialSymbol().replace(/\&/g,'&amp;');
}
String.prototype.removeHtmlTag = function() { 
	return this.replace(/<[^>]+>/g,"");//去掉所有的html标记 
} 


function createXMLHttp() {
	if (typeof XMLHttpRequest != "undefined") {
		return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
		var aVersions = [ "MSXML2.XMLHttp.5.0",
			"MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
			"MSXML2.XMLHttp","Microsoft.XMLHttp"
		];
		for (var i = 0; i < aVersions.length; i++) {
			try {
				var oXmlHttp = new ActiveXObject(aVersions[i]);
				return oXmlHttp;
			} catch (oError) { }
	}	}
	throw new Error("XMLHttp object could be created.");
}
function createXMLDom(s){   
	var aVersions = new Array( "MSXML2.DOMDocument",
				   "Microsoft.XMLDOM",
				   "MSXML.DOMDocument");   
	var xmlDoc = null;
	for (var i=0;i<aVersions.length;i++){   
		try{
			var xmlDoc =  new ActiveXObject(aVersions[i]); 
			break;  
		}   
		catch(oError){}   
	}   
    if (xmlDoc!=null) {
		xmlDoc.async="false";
		xmlDoc.loadXML(s);
	} else {
	  	try { //Firefox, Mozilla, Opera, etc.
	  		parser=new DOMParser();
	  		xmlDoc=parser.parseFromString(s,"text/xml");
	  	}catch(e){
	  		alert(e.message);
	  		return false;
	  	}
	}
	return xmlDoc;
}

function webImUnknownMSG(Msg) {
	return (Msg=='[图片]' || Msg=='' || Msg.indexOf('[voice]')>=0);
}   

function getDirPath(URL) {
	var result = unescape(URL.substring(0,(URL.lastIndexOf("/")) + 1));
	return result;
}

function now() {
	var d = new Date();
	return d.getTime();
}


