<!--
/**
 * monitor.js
 * @fileoverview 监控功能，实现监控主要功能
 * @author Lynk Li
 */

/**
 * @class Monitor 监控功能类
 * @constructor
 * @author Lynk Li
 */
function Monitor() {
	/**
	 * 访客状态数组
	 */
	this.arrStatus = new Array(_langPackage.monitor.visitorStatus[0],_langPackage.monitor.visitorStatus[1],_langPackage.monitor.visitorStatus[2],_langPackage.monitor.visitorStatus[3],_langPackage.monitor.visitorStatus[4]);
	/**
	 * 排序列序号（备用）
	 */
	this.orderBy = -1;
	/**
	 * 存储9103消息的数组
	 */
	this.msg9103s = new Array();
	this.getMsg9103BySnidPageid = Monitor_getMsg9103BySnidPageid;
	this.deleteMsg9103BySnidPageid = Monitor_deleteMsg9103BySnidPageid;
	
	this.sendMsgLoadedList = Monitor_sendMsgLoadedList;
	this.gotoMonitorInterface = Monitor_gotoMonitorInterface;
	this.resizeUI = Monitor_resizeUI;
	this.showMonitor = Monitor_showMonitor;
	this.showChat = Monitor_showChat;
	this.showChatCanned = Monitor_showChatCanned;
	/**
	 * 记录页面的序号
	 */
	this.pageIndexGlobal = 0;
	this.showVisitorPage = Monitor_showVisitorPage;
	this.visitorFlashInfo = Monitor_visitorFlashInfo;
	this.fviChange = Monitor_fviChange;
	this.getVisitorFlashInfo = Monitor_getVisitorFlashInfo;
	this.visitorIn = Monitor_visitorIn;
	this.chatPageIn = Monitor_chatPageIn;
	this.deleteLeftPages = Monitor_deleteLeftPages;
	this.visitorUpdate = Monitor_visitorUpdate;
	this.changePageStatus = Monitor_changePageStatus;
	this.saveVisitorFlashInfo = Monitor_saveVisitorFlashInfo;
	this.showVisitorInfo = Monitor_showVisitorInfo;
	this.showVisitorMenu = Monitor_showVisitorMenu;
	
	this.sendRequestToVisitor = Monitor_sendRequestToVisitor;
	this.requestVisitorResult = Monitor_requestVisitorResult;
	this.visitorRequestChat = Monitor_visitorRequestChat;
	
	/**
	 * 当前选中的访客页面
	 */
	this.currentFocus = -1;
	this.changeFocusVisitor = Monitor_changeFocusVisitor;
	this.changeHeadButtonStatus = Monitor_changeHeadButtonStatus;
	this.visitorOnDblClick = Monitor_visitorOnDblClick;
	
	/**
	 * 间隔颜色显示标志
	 */
	this.bColor = false;
	this.intervalColor = Monitor_intervalColor;
	this.showReserveList = Monitor_showReserveList;
	this.showReserve = Monitor_showReserve;
	this.timeAdder = Monitor_timeAdder;
	this.removeTimes = Monitor_removeTimes;
	/**
	 * 存放需要不断刷新显示的时间Div ID
	 */
	this.times = new Array();
	/**
	 * 访客过滤对象
	 */
	this.filter = {
		status : [_langPackage.monitor.visitorStatus[0],_langPackage.monitor.visitorStatus[1],_langPackage.monitor.visitorStatus[2],_langPackage.monitor.visitorStatus[3],_langPackage.monitor.visitorStatus[4]]
		};
	this.showStatusFilter = Monitor_showStatusFilter;
	this.saveStatusFilter = Monitor_saveStatusFilter;
	this.setVisitorFilter = Monitor_setVisitorFilter;
	this.doVisitorFilter = Monitor_doVisitorFilter;
	this.deleteAllVisitors = Monitor_deleteAllVisitors;
	this.syncTtitleContentTdWidth = Monitor_syncTtitleContentTdWidth;
	this.removeHeadZeroes = Monitor_removeHeadZeroes;
	this.replaceNull = Monitor_replaceNull;
	this.strToDate = Monitor_strToDate;
	this.addZeroIfLess = Monitor_addZeroIfLess;
	this.changeVisitorInfoInterface = Monitor_changeVisitorInfoInterface;
}

/**
 * @class Msg9103 9103请求类
 * @constructor
 * @author Lynk Li
 */
function Msg9103(groupid, snid, pageid) {
	/**
	 * 交谈组ID
	 */
	this.groupid = groupid;
	/**
	 * 访客ID
	 */
	this.snid = snid;
	/**
	 * 访客页面ID
	 */
	this.pageid = pageid;
	/**
	 * 数据数组
	 */
	this.msgs = new Array();
}

/**
 * 通过snid,pageid获取9103
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 */
function Monitor_getMsg9103BySnidPageid(snid, pageid) {
	for (var i = 0; i < this.msg9103s.length; i++) {
		var obj = this.msg9103s[i];
		if (obj.snid == snid && obj.pageid == pageid) return obj;
	}
	return null;
}

/**
 * 通过snid,pageid删除9103
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 */
function Monitor_deleteMsg9103BySnidPageid(snid, pageid) {
	for (var i = 0; i < this.msg9103s.length; i++) {
		var obj = this.msg9103s[i];
		if (obj.snid == snid && obj.pageid == pageid) {
			this.msg9103s = this.msg9103s.slice(0, i).concat(this.msg9103s.slice(i+1));
			return;
		}
	}
}

/**
 * 发送获取列表消息
 */
function Monitor_sendMsgLoadedList() { 
 	if (typeof webcl == "undefined" || webcl == null) return;
	_common.send("<M><C>9005</C></M>");
   	_common.send("<M><C>9002</C></M>");
	_common.send("<M><C>9003</C></M>");
	_common.send("<M><C>9004</C></M>");
	_common.send("<M><C>9006</C></M>");
	_common.setReceiveTimer(_setting.receiveInteval);
}


/**
 * 跳转到监控界面
 */
function Monitor_gotoMonitorInterface() {
	if (document.getElementById("monitorMain")) {
		document.getElementById("monitorMain").style.display = "";
	} else {
		var monitorMain = document.createElement("div");
		monitorMain.id = "monitorMain";
		document.getElementById("contentRight").insertBefore(monitorMain, null);
		/*
		var cols = new Array();
		for (var i = 0; i < _viewCols.length; i++) {
			if (!_viewCols[i].display) continue;
			var cm = "";
			var title = "";
			if (_viewCols[i].name == "status") {
				cm = "oncontextmenu=\"_monitor.showStatusFilter(event);\"";
				title = _langPackage.monitor.filter.statusTitle;
			}
			var obj = {
				title : title,
				name  : _viewCols[i].name,
				value : _viewCols[i].value,
				cm	  : cm
				};
			cols.push(obj);
		}
		*/
		var enterCheck = "checked=\"checked\"";
		var ctrlCheck = "";
		if (this.sendWay == 1) {
			enterCheck = "";
			ctrlCheck = "checked=\"checked\"";
		}
		var data = {
			images_path	: _setting.imagesPath,
			//cols		: cols,
			enterCheck	: enterCheck,
			ctrlCheck	: ctrlCheck,
			_versionFlag: _versionFlag
			};
		var str = TrimPath.processDOMTemplate("monitor_tpl", data);
		monitorMain.innerHTML = str;
		
		window._mmgrid = new Grid("monitor_monitor", "mmg_titleDiv", "mmg_titleTb", "mmg_dataDiv", "mmg_dataTb", "mmg_titleInner", "mmg_scrollerDiv", "popDiv__list", "_mmgrid", "monitor_monitor_grid_tpl");
		var title = [];
		for (var i = 0; i < _viewCols.length; i++) {
			if (!_viewCols[i].display) continue;
			var obj = {
				id : _viewCols[i].name,
				name  : _viewCols[i].value,
				width : _viewCols[i].width,
				align : "center",
				display : (_viewCols[i].display ? "" : "none")
			};
			title.push(obj);
		}
		var filter = {
			status : [
				{name:_langPackage.monitor.visitorStatus[0], filter:0},
				{name:_langPackage.monitor.visitorStatus[1], filter:0},
				{name:_langPackage.monitor.visitorStatus[2], filter:0},
				{name:_langPackage.monitor.visitorStatus[3], filter:0},
				{name:_langPackage.monitor.visitorStatus[4], filter:0}
			],
			snid : [
				{name:_langPackage.monitor.filter.snid[0], filter:0},
				{name:_langPackage.monitor.filter.snid[1], filter:0}
			]
		};
		_mmgrid.title = title;
		_mmgrid.filter = filter;
		_mmgrid.show();
	}
	if (_common.innerType != "" && _common.innerType != "monitor") {
		document.getElementById(_common.innerType + "Main").style.display = "none";
	}
	_common.setInnerType("monitor");
	//ts_makeSortable(document.getElementById("monitor_monitor_table"));
	this.syncTtitleContentTdWidth();
}

/**
 * 显示/隐藏预存消息Div
 */
function Monitor_showChatCanned() {
	var monitor_chat_splitter = document.getElementById("monitor_chat_splitter");
	
	var monitor_chat_canned = document.getElementById("monitor_chat_canned");
	
	if (monitor_chat_canned.style.display == "none") {
		monitor_chat_canned.style.display = "";
		monitor_chat_splitter.innerHTML = "<a href=\"#\" onclick=\"_monitor.showChatCanned();\"><img src=\"" + _setting.imagesPath + "system_right.gif\" width=\"6\" height=\"76\" border=\"0px\" /></a>";
	} else {
		monitor_chat_canned.style.display = "none";
		monitor_chat_splitter.innerHTML = "<a href=\"#\" onclick=\"_monitor.showChatCanned();\"><img src=\"" + _setting.imagesPath + "left.gif\" width=\"6\" height=\"76\" border=\"0px\" /></a>";
	}
	this.resizeUI();
}

/**
 * 改变监控div的大小
 */
function Monitor_resizeUI() {
	var groupid = 0;
	if (_chat.currentGroup != null) groupid = _chat.currentGroup.id;
	
	var logoAdv = document.getElementById("logoAdv");	
	var contentLeft = document.getElementById("contentLeft");
	var contentSplitter = document.getElementById("contentSplitter");
	var contentRight = document.getElementById("contentRight");
	var left_vlistTitle = document.getElementById("left_vlistTitle");
	var monitorMain = document.getElementById("monitorMain");
	var monitor_buttons = document.getElementById("monitor_buttons");
	var monitor_monitorTitle = document.getElementById("monitor_monitorTitle");
	var monitor_monitor = document.getElementById("monitor_monitor");
	var monitor_chatTitle = document.getElementById("monitor_chatTitle");
	var monitor_chat = document.getElementById("monitor_chat");
	var monitor_chat_chat = document.getElementById("monitor_chat_chat");
	var monitor_chat_splitter = document.getElementById("monitor_chat_splitter");
	var monitor_chat_canned = document.getElementById("monitor_chat_canned");
	
	var chatwin_log = document.getElementById("chatwin_log_" + groupid);
	var chatwin_id_list = document.getElementById("chatwin_id_list_" + groupid);
	var chat_id_list_splitter = document.getElementById("chat_id_list_splitter_" + groupid);
	var chatwin_msg_box = document.getElementById("chatwin_msg_box_" + groupid);
	var chatwin_msg_box_text = document.getElementById("chatwin_msg_box_text_" + groupid);
	var chatwin_msg_box_predict = document.getElementById("chatwin_msg_box_predict_" + groupid);
	var chatwin_putin_set_splitter = document.getElementById("chatwin_putin_set_splitter_" + groupid);
	var chatwin_putin_set_bg = document.getElementById("chatwin_putin_set_bg_" + groupid);
	var chatwin_putin = document.getElementById("chatwin_putin_" + groupid);
	var chatwin_putin_box = document.getElementById("chatwin_putin_box_" + groupid);
	var chatwin_putin_send = document.getElementById("chatwin_putin_send_" + groupid);
	var monitor_chat_reserve_title = document.getElementById("monitor_chat_reserve_title");
	var monitor_chat_reserve_list = document.getElementById("monitor_chat_reserve_list");
	
	
	var mmScroller = document.getElementById("mmg_scrollerDiv");
	var mmTitle	= document.getElementById("mmg_titleDiv");
	var mmgTitleInner = document.getElementById("mmg_titleInner");
	
	/*width*/
	var winWidth = document.documentElement.clientWidth;
	if (winWidth < _setting.minMainWidth) winWidth = _setting.minMainWidth;
	winWidth -= 2;
	var chatWidth = 4;
	if (contentLeft.style.display == "none") {
		monitor_monitor.style.width = winWidth - contentSplitter.clientWidth - 2;
		
		if (monitor_chat_canned.style.display == "none") {
			chatWidth = winWidth - contentSplitter.clientWidth - monitor_chat_splitter.clientWidth - 2;
		} else {
			chatWidth = winWidth - contentSplitter.clientWidth - monitor_chat_splitter.clientWidth - monitor_chat_canned.clientWidth - 6;
		}
	} else {		
		monitor_monitor.style.width = winWidth - left_vlistTitle.clientWidth - contentSplitter.clientWidth - 8;
		
		if (monitor_chat_canned.style.display == "none") {
			chatWidth = winWidth - contentSplitter.clientWidth - left_vlistTitle.clientWidth - monitor_chat_splitter.clientWidth - 10;
		} else {
			chatWidth = winWidth - contentSplitter.clientWidth - left_vlistTitle.clientWidth - monitor_chat_splitter.clientWidth - monitor_chat_canned.clientWidth - 10;
		}
	}
	monitor_chat_chat.style.width = chatWidth;
	chatwin_msg_box.style.width = chatwin_log.clientWidth - chatwin_id_list.clientWidth - chat_id_list_splitter.clientWidth - 10;
	chatwin_putin.style.width = chatwin_log.clientWidth;
	
	mmScroller.style.width = monitor_monitor.clientWidth;
	mmTitle.style.width = monitor_monitor.clientWidth - 17;
	mmgTitleInner.style.width = monitor_monitor.clientWidth - 17;
	
	
	/*height*/
	var winHeight = document.documentElement.clientHeight;
	if (winHeight < _setting.minMainHeight) winHeight = _setting.minMainHeight;
	winHeight -= 2;
	var chatHeight = 0;
	var monitorHeight = 0;
	if (monitor_monitor.style.display == "none") {
		chatHeight = winHeight - logoAdv.clientHeight - monitor_buttons.clientHeight;
		monitor_chat_splitter.style.height = chatHeight - 100;
		monitor_chat_canned.style.height = chatHeight - 1;
		monitor_chat_reserve_list.style.height = chatHeight - monitor_chat_reserve_title.clientHeight - 1;
	} else if (monitor_chat.style.display == "none") {
		monitorHeight = winHeight - logoAdv.clientHeight - monitor_buttons.clientHeight - monitor_monitorTitle.clientHeight - 3;
		monitor_monitor.style.height = monitorHeight;
	} else {
		monitorHeight = Math.ceil((winHeight - logoAdv.clientHeight - monitor_buttons.clientHeight - monitor_monitorTitle.clientHeight - 3) * 0.3);
		chatHeight = Math.floor((winHeight - logoAdv.clientHeight - monitor_buttons.clientHeight - monitor_monitorTitle.clientHeight - 3) * 0.7);
		monitor_monitor.style.height = monitorHeight;
		monitor_chat_splitter.style.height = chatHeight - 100;
		monitor_chat_canned.style.height = chatHeight - 1;
		monitor_chat_reserve_list.style.height = chatHeight - monitor_chat_reserve_title.clientHeight - 1;
	}
	
	mmScroller.style.height = monitor_monitor.clientHeight;
	
	if (chatHeight > 0) {
		var chatLogHeight = chatHeight - monitor_chatTitle.clientHeight - chatwin_putin_set_splitter.clientHeight - chatwin_putin_set_bg.clientHeight - chatwin_putin.clientHeight - 3;
		chatwin_log.style.height = chatLogHeight;
		chatwin_msg_box.style.height = chatLogHeight - 1;
		chatwin_id_list.style.height = chatLogHeight - 4;
		chat_id_list_splitter.style.height = chatLogHeight;
		chatwin_msg_box_text.style.height = chatLogHeight - chatwin_msg_box_predict.clientHeight - 1;		
	}
	_chat.resizeTitle();
}

/**
 * 显示/隐藏监控界面
 * @param int type 监控类型（备用） 
 */
function Monitor_showMonitor(type) {
	var monitor_monitor = document.getElementById("monitor_monitor");
	var monitor_monitorTitle = document.getElementById("monitor_monitorTitle");
	var monitor_chat = document.getElementById("monitor_chat");
	
	if (monitor_monitor.style.display == "none") {
		monitor_monitorTitle.style.display = "";
		monitor_monitor.style.display = "";
	} else {
		monitor_chat.style.display = "";
		monitor_monitorTitle.style.display = "none";
		monitor_monitor.style.display = "none";
	}
	this.resizeUI();
}

/**
 * 显示/隐藏聊天界面
 */
function Monitor_showChat() {
	var monitor_monitor = document.getElementById("monitor_monitor");
	var monitor_monitorTitle = document.getElementById("monitor_monitorTitle");
	var monitor_chat = document.getElementById("monitor_chat");
	
	if (monitor_chat.style.display == "none") {
		monitor_chat.style.display = "";
	} else {
		monitor_monitorTitle.style.display = "";
		monitor_monitor.style.display = "";
		monitor_chat.style.display = "none";
	}
	this.resizeUI();
} 
 
/**
 * 将字符串头部的0去掉
 * @param String str 处理前的字符串
 * @return 处理后的字符串
 */
function Monitor_removeHeadZeroes(str) {
	while (str.length > 0 && str.substring(0, 1) == "0") {
		str = str.substring(1);
	}
	return str;
}

/**
 * 将null或者undefined替换为""
 * @param String str 处理前的字符串
 * @return 处理后的字符串
 */
function Monitor_replaceNull(str) {
	if (str == null || typeof str == "undefined") return "";
	return str;
}

/**
 * 间隔显示列表中数据的颜色
 */
function Monitor_intervalColor() {
	var trs = document.getElementsByTagName("tr");
	for (var i = 0; i < trs.length; i++) {
		if (trs[i].id.substring(0,22) == "monitor_monitor_list__") {
			if (trs[i].style.display == "none") continue;
			if (this.bColor) {
				trs[i].bgColor = "#f1fdfd";
				this.bColor = false;
			} else {
				trs[i].bgColor = "#ffffff";
				this.bColor = true;
			}
		}
	}
}

/**
 * 显示页面
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @param String visitorStatus 访客状态
 * @param String requestTarget 请求对象
 * @param String servicingOpertor 服务客服ID
 * @param String visitorIp 访客IP
 * @param String livingArea 访客居住地区
 * @param String page 访客访问页面
 * @param String explorer 访客浏览器
 * @param String referrer 来源网页
 * @param String searchEngineId 搜索引擎ID
 * @param String keyword 关键字
 * @param String playerVersion Flash播放器版本
 * @param String visitTimes 浏览次数
 * @param String lastVisitTime 上次浏览时间
 * @param String pageTitle 页面标题
 * @param String xPixels 显示分辨率X
 * @param String yPixels 显示分辨率Y
 * @param String enterTime 进入时间
 * @param String requestTime 请求时间
 * @param String startTalkTime 开始交谈时间
 * @param String leftTime 离开时间
 * @param int fieldIndex 在控件中的索引
 * @param int pageIndex 页面序号
 * @param String chatGroupId 聊天组ID
 * @param boolean bShowLeft 是否显示左边列表
 */
function Monitor_showVisitorPage(snid, pageid, visitorStatus, requestTarget, servicingOpertor, visitorIp, livingArea, page, explorer, referrer, searchEngineId, keyword, playerVersion, visitTimes, lastVisitTime, pageTitle, xPixels, yPixels, enterTime, requestTime, startTalkTime, leftTime, fieldIndex, pageIndex, chatGroupId, bShowLeft) {
	var vfiObj = _vfiManage.getVfiObj(snid);
	if (vfiObj == null) {
		vfiObj = new VisitorFlashInfo(snid, "", "", "", "", "", "", "", "", "", "");
		//setTimeout("_monitor.showVisitorPage('" + snid + "','" + pageid + "','" + visitorStatus + "','" + requestTarget + "','" + servicingOpertor + "','" + visitorIp + "','" + livingArea + "','" + page + "','" + explorer + "','" + referrer + "','" + searchEngineId + "','" + keyword + "','" + playerVersion + "','" + visitTimes + "','" + lastVisitTime + "','" + pageTitle + "','" + xPixels + "','" + yPixels + "','" + enterTime + "','" + requestTime + "','" + startTalkTime + "','" + leftTime + "'," + fieldIndex + "," + pageIndex + "," + bShowLeft + ")", 50);
		//return;
	}
	var id = this.removeHeadZeroes(snid.substring(4));//"SN" + snid.substring(2,3) + this.removeHeadZeroes(snid.substring(4));
	var name = id;
	if (vfiObj.name != "")  name = vfiObj.name;
	
	if (bShowLeft) {
		var parent = document.getElementById("left_vlist");
		parent.style.textAlign = "left";
		var child = document.createElement("div");
		child.id = "left_vlist__" + pageIndex;
		if (visitorStatus == 1) {
			child.style.color = _setting.requestBgColor;
		} else if (visitorStatus == 2) {
			child.style.color = _setting.chatBgColor;
		} else if (visitorStatus == 3) {
			child.style.color = _setting.leftBgColor;
		} else if (visitorStatus == 4) {
			child.style.color = _setting.inviteBgColor;
		} else {
			child.style.color = _setting.defaultBgColor;
		}
		eval("child.onclick = function() {_monitor.showVisitorInfo(" + pageIndex + ",'" + snid + "','" + pageid + "', event);};");
		eval("child.ondblclick = function() {_monitor.visitorOnDblClick('" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "','" + visitorStatus + "');};");
		eval("child.oncontextmenu = function() {_monitor.showVisitorMenu(" + pageIndex + ",'" + snid + "','" + pageid + "','" + _personSession.id + "','" + chatGroupId + "',event);};");
		child.innerHTML = "<span id='left_vlist__" + pageIndex + "_status_img'><img src=\"" + _setting.imagesPath + "viS" + visitorStatus + ".gif\" alt=\"" + this.arrStatus[visitorStatus] + "\" /></span>&nbsp;<span id=\"left_vlist__name_" + snid + "_" + pageIndex + "\" title=\"" + this.arrStatus[visitorStatus] + "\">" + name + "</span>";
		try {
			var lastIndex = this.pageIndexGlobal - 1;
			var lastDiv = document.getElementById("left_vlist__" + lastIndex);
			while (!lastDiv && lastIndex > 0) {
				lastIndex--;
				lastDiv = document.getElementById("left_vlist__" + lastIndex);
			}
			if (!lastDiv)  lastDiv = null;
			parent.insertBefore(child, lastDiv);
		} catch (exc) {
			parent.insertBefore(child, null);
		}
	}
	
	var monitorTable = document.getElementById("mmg_dataTb");
	var oTr = monitorTable.insertRow(0);

	oTr.id = "monitor_monitor_list__" + pageIndex;
	if (visitorStatus == 1) {
		oTr.style.color = _setting.requestBgColor;
	} else if (visitorStatus == 2) {
		oTr.style.color = _setting.chatBgColor;
	} else if (visitorStatus == 3) {
		oTr.style.color = _setting.leftBgColor;
	} else if (visitorStatus == 4) {
		oTr.style.color = _setting.inviteBgColor;
	} else {
		oTr.style.color = _setting.defaultBgColor;
	}
	
	for (var i = 0; i < _mmgrid.filter.status.length; i++) {
		if (this.arrStatus[visitorStatus] == _mmgrid.filter.status[i].name && _mmgrid.filter.status[i].filter == 1) oTr.style.display = "none";
	}
	eval("oTr.onclick = function() {_common.clearPopDiv();_monitor.changeFocusVisitor(" + pageIndex + ",'" + snid + "','" + pageid + "'," + parseInt(visitorStatus) + ",'" + chatGroupId + "');};");
	eval("oTr.ondblclick = function() {_monitor.visitorOnDblClick('" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "','" + visitorStatus + "');};");
	eval("oTr.oncontextmenu = function() {_monitor.showVisitorMenu(" + pageIndex + ",'" + snid + "','" + pageid + "','" + _personSession.id + "','" + chatGroupId + "', event);};");
	eval("oTr.onmouseover = function() {};");
	eval("oTr.onmouseout = function() {};");
	var oVisitor = {};
	for (var i = 0; i < _viewCols.length; i++) {
		if (!_viewCols[i].display) continue;
		/*
		if (!_viewCols[i].display) continue;
		var oTd = oTr.insertCell();
		oTd.id = "monitor_monitor_list__" + pageIndex + "_" + _viewCols[i].name;
		oTd.noWrap = true;
		oTd.className = "td_web_chat_jail_2";
		oTd.align = "center";
		*/
		var strInner = Monitor_showVisitorPage.arguments[_viewCols[i].index];
		var iEnd = (new Date()).getTime();
		switch (_viewCols[i].name) {
			case "status":
				oVisitor.status = this.arrStatus[strInner];
				break;
			case "page":
				try {
					strInner = _urlCoder.decode(strInner, "UTF-8");
				} catch (e) {
					_common.alertDebug("Monitor_showVisitorPage:_urlCoder.decode:page:$message=" + e.message + ";$name=" + e.name);
				}
				
				var strPageName = strInner;
				if (strInner != "") {
					var pageIndexTmp = _common.findTableField (9004, 0, 1, strInner, -1, "");
					if (pageIndexTmp != -1) strPageName = _common.lists.l9004[pageIndexTmp][2];
				}
				
				var strShort = strPageName;
				//if (strShort.length > 20) strShort = strShort.substring(0, 17) + "...";
				if (strInner.length > 0) strInner = "<a href='" + strInner + "' target='_blank' title='" + strInner + "'>" + strShort + "</a>";
				oVisitor.page = strInner;
				break;
			case "snid":
				strInner = name;//this.removeHeadZeroes(strInner.substring(4));
				oVisitor.snid = strInner;
				break;
			case "pageTitle":
				try {
					strInner = _urlCoder.decode(strInner, "UTF-8");
				} catch (e) {
					_common.alertDebug("Monitor_showVisitorPage:_urlCoder.decode:pageTitle:$message=" + e.message + ";$name=" + e.name);
				}
				var strShort = strInner;
				//if (strShort.length > 20) strShort = strShort.substring(0, 17) + "...";
				if (strInner.length > 0) strInner = "<span title='" + strInner + "'>" + strShort + "</span>";
				oVisitor.pageTitle = strInner;
				break;
			case "referrer":
				try {
					strIner = _urlCoder.decode(strInner, "UTF-8");
				} catch (e) {
					_common.alertDebug("Monitor_showVisitorPage:_urlCoder.decode:referrer:$message=" + e.message + ";$name=" + e.name);
				}
				var strShort = strInner;
				//if (strShort.length > 20) strShort = strShort.substring(0, 17) + "...";
				if (strInner.length > 0) strInner = "<a href='" + strInner + "' target='_blank' title='" + strInner + "'>" + strShort + "</a>";
				oVisitor.referrer = strInner;
				break;
			case "request":
				if (strInner != "") {
					var aRequest = strInner.split(":");
					if (aRequest.length == 2) {
						var depId = aRequest[0];
						var opId = aRequest[1];
						if (depId != "0") {
							var depIndex = _common.findTableField (9003, 0, 0, depId, -1, "");
							if (depIndex != -1) strInner = _common.lists.l9003[depIndex][2];
						} else if (opId != "0") {
							var op = _common.getArrayObject(_operators.operators, "id", opId);
							if (op != null) strInner = op.name;
						} else {
							strInner = _langPackage.monitor.exchange;
						}
					}
				}
				oVisitor.request = strInner;
				break;
			case "operator":
				if (strInner != "") {
					var op = _common.getArrayObject(_operators.operators, "id", strInner);
					if (op != null) strInner = op.name;
					else strInner = "";
				}
				oVisitor.operator = strInner;
				break;
			case "engineid":
				if (strInner != "") strInner = _searchEngineArr[strInner].name;
				oVisitor.engineid = strInner;
				break;
			case "stayTime":
				if (strInner != "") {
					var start = strInner;
					var iStart = Date.parse(start.substring(5, 7) + '-' + start.substring(8, 10) + '-' + start.substring(0, 4) + start.substring(10, 19));
					if (visitorStatus == 3) {
						var end = Monitor_showVisitorPage.arguments[21];
						if (end == "") end = start;
						iEnd = Date.parse(end.substring(5, 7) + '-' + end.substring(8, 10) + '-' + end.substring(0, 4) + end.substring(10, 19));
					}
					strInner = _common.countSecondsByTime(iStart, iEnd);
					if (visitorStatus != 3) {
						if (iEnd <= iStart) this.times.push({type:"stayTime", snid:snid, pageIndex:pageIndex, start:iEnd});
						else this.times.push({type:"stayTime",snid:snid,pageIndex:pageIndex,start:iStart});
					}
				}
				oVisitor.stayTime = strInner;
				break;
			case "waitTime":
				if (strInner != "") {
					var start = strInner;
					var iStart = Date.parse(start.substring(5, 7) + '-' + start.substring(8, 10) + '-' + start.substring(0, 4) + start.substring(10, 19));
					if (visitorStatus == 2) {
						var end = Monitor_showVisitorPage.arguments[20];
						if (end == "") end = start;
						iEnd = Date.parse(end.substring(5, 7) + '-' + end.substring(8, 10) + '-' + end.substring(0, 4) + end.substring(10, 19));
					} else if (visitorStatus == 3) {
						var end = Monitor_showVisitorPage.arguments[20];
						if (end == "") end = Monitor_showVisitorPage.arguments[21];
						if (end == "") end = start;
						iEnd = Date.parse(end.substring(5, 7) + '-' + end.substring(8, 10) + '-' + end.substring(0, 4) + end.substring(10, 19));
					}
					strInner = _common.countSecondsByTime(iStart, iEnd);
					if (visitorStatus != 2 && visitorStatus != 3) {
						if (iEnd <= iStart) this.times.push({type:"waitTime", snid:snid, pageIndex:pageIndex, start:iEnd});
						else this.times.push({type:"waitTime",snid:snid,pageIndex:pageIndex,start:iStart});
					}
				}
				oVisitor.waitTime = strInner;
				break;
			case "chatTime":
				if (strInner != "") {
					var start = strInner;
					var iStart = Date.parse(start.substring(5, 7) + '-' + start.substring(8, 10) + '-' + start.substring(0, 4) + start.substring(10, 19));					
					if (visitorStatus == 3) {
						var end = Monitor_showVisitorPage.arguments[21];
						if (end == "") end = start;
						iEnd = Date.parse(end.substring(5, 7) + '-' + end.substring(8, 10) + '-' + end.substring(0, 4) + end.substring(10, 19));
					}
					strInner = _common.countSecondsByTime(iStart, iEnd);
					if (visitorStatus != 3) {
						if (iEnd <= iStart) this.times.push({type:"chatTime", snid:snid, pageIndex:pageIndex, start:iEnd});
						else this.times.push({type:"chatTime",snid:snid,pageIndex:pageIndex,start:iStart});
					}
				}
				oVisitor.chatTime = strInner;
				break;
			default:
				eval("oVisitor." + _viewCols[i].name + " = strInner;");
		}
		/*
		if (_viewCols[i].name == "visitTimes") {
			if (strInner == "") strInner = 0;
			oTd.innerHTML = strInner;
		} else {
			oTd.innerHTML = "&nbsp;<span id='monitor_monitor_list__" + _viewCols[i].name + "_" + snid + "_" + pageIndex + "'>" + strInner + "</span>&nbsp;";
		}
		*/
	}
	
	var mmg_titleTb = document.getElementById("mmg_titleTb");
	for (var i = 0; i < _mmgrid.title.length; i++) {
		if (_mmgrid.title[i].display == "none") continue;
		var oTd = oTr.insertCell();
		eval("var value = oVisitor." + _mmgrid.title[i].id + ";");
		var width = mmg_titleTb.rows[0].cells[i].clientWidth;
		if (width == 0) width = parseInt(_mmgrid.title[i].width) + 2;
		oTd.id = "monitor_monitor_list__" + pageIndex + "_" + _mmgrid.title[i].id;
		oTd.innerHTML = '<div id="monitor_monitor_list__' + _mmgrid.title[i].id + '_' + snid + '_' + pageIndex + '" style="width:' + width + 'px; margin-right:1px; overflow:hidden; cursor:default; white-space:nowrap; color:' + oTr.style.color + ';" unselectable="on">' + value + '</div>';
		oTd.className = "td_web_chat_jail_2";
		oTd.align = "center";
		oTd.style.height = "18";
	}
	
	if (bShowLeft) {
		if (visitorStatus == 1) _common.soundPrompt(1);
		else _common.soundPrompt(0);
	}
	if (chatGroupId == 0 && bShowLeft) {	
		var promptStr = "";
		if (vfiObj.name == "") {
			promptStr = _langPackage.monitor.visitor + "[" + id + "]";
		} else {
			promptStr = vfiObj.name + "[" + id + "]";
		}
		var livingStr = "";
		if (livingArea != "") livingStr = _langPackage.monitor.livingArea + livingArea;
		if (_versionFlag.get(2) == 1) {
			_common.popPrompt(0, "<a href='#' onclick=\"_monitor.sendRequestToVisitor('" + _personSession.id + "', '" + snid + "', '" + pageid + "');\">" + promptStr + _langPackage.monitor.loginSite + livingStr + "</a>");			
			_common.ocxPrompt(0, promptStr + _langPackage.monitor.loginSite + livingStr, "_monitor.sendRequestToVisitor('" + _personSession.id + "', '" + snid + "', '" + pageid + "');");
		} else {
			_common.popPrompt(0, "" + promptStr + _langPackage.monitor.loginSite + livingStr + "");
			_common.ocxPrompt(0, promptStr + _langPackage.monitor.loginSite + livingStr, "");
		}
	} else if (bShowLeft && visitorStatus == 1) {
		var promptStr = "";
		if (vfiObj.name == "") {
			promptStr = _langPackage.monitor.visitor + "[" + id + "]";
		} else {
			promptStr = vfiObj.name + "[" + id + "]";
		}
		var livingStr = "";
		if (livingArea != "") livingStr = _langPackage.monitor.livingArea + livingArea;
		if (_versionFlag.get(3) == 1) {
			_common.popPrompt(1, "<a href='#' onclick=\"_chat.replyVisitorRequest(2, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "');\">" + promptStr + " " + _langPackage.monitor.requestChat + livingStr + "</a>");
			_common.ocxPrompt(1, promptStr + " " + _langPackage.monitor.requestChat + livingStr, "_chat.replyVisitorRequest(2, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "');");
		} else {
			_common.popPrompt(1, "" + promptStr + " " + _langPackage.monitor.requestChat + livingStr + "");
			_common.ocxPrompt(1, promptStr + " " + _langPackage.monitor.requestChat + livingStr, "");
		}
	}
	
	//this.syncTtitleContentTdWidth();
}

/**
 * 同步监控列表内容及标题的表格宽度
 */
function Monitor_syncTtitleContentTdWidth() {
	/*
	var monitor_monitor_table = document.getElementById("monitor_monitor_table");
	var monitor_monitor_table_title = document.getElementById("monitor_monitor_table_title");
	for (var i = 0; i < monitor_monitor_table.rows[0].cells.length; i++) {
		monitor_monitor_table_title.rows[0].cells[i].style.width = monitor_monitor_table.rows[0].cells[i].clientWidth + 2;
	}
	*/
}

/**
 * 删除时间刷新显示ID，不再刷新显示
 * @param String snid 访客ID
 * @param int pageIndex 页面序号
 * @param String type 时间类型
 */
function Monitor_removeTimes(snid, pageIndex, type) {
	for (var i = 0; i < this.times.length; i++) {
		if (snid == this.times[i].snid && pageIndex == this.times[i].pageIndex && type == this.times[i].type) {
			this.times = this.times.slice(0, i).concat(this.times.slice(i+1));
			break;
		}
	}
}

/**
 * 定时刷新 {@link #times} 中的时间显示
 */
function Monitor_timeAdder() {
	var iEnd = (new Date()).getTime();
	for (var i = 0; i < this.times.length; i++) {
		var spanid = "monitor_monitor_list__" + this.times[i].type + "_" + this.times[i].snid + "_" + this.times[i].pageIndex;
		var obj = document.getElementById(spanid);
		if (!obj) {
			this.times = this.times.slice(0, i).concat(this.times.slice(i+1));
			i--;
		} else {
			obj.innerHTML = _common.countSecondsByTime(this.times[i].start, iEnd);
		}
	}
}

/**
 * 访客Flash固定信息修改
 * @param HJWebClMsgStringMsg msg9301 &lt;M>&lt;C>9301;SNID;操作码;操作结果;参数[;参数...]&lt;/C>&lt;M>
 */
function Monitor_fviChange(msg9301) {
	var snid = msg9301.commands[0];
	var opCode = msg9301.commands[1];
	var opRs = msg9301.commands[2];
	var name = msg9301.commands[3];
	var note = msg9301.commands[4];
	var modifyPerson = msg9301.commands[5];
	var modifyTime = msg9301.commands[6];
	
	if (opCode != 1) return false;
	
	var vfiObj = _vfiManage.getVfiObj(snid);
	if (vfiObj == null) {
		vfiObj = new VisitorFlashInfo(snid, "", "", "", "", name, note, "", "", modifyTime, modifyPerson);
		_vfiManage.vfiArr.push(vfiObj);
	} else {
		vfiObj.name = name;
		vfiObj.note = note;
		vfiObj.modifyTime = modifyTime;
		vfiObj.modifyPerson = modifyPerson;
	}
	
	var name = vfiObj.name;
	if (name == "") name = this.removeHeadZeroes(snid.substring(4));
	
	var spans = document.getElementsByTagName("span");
	eval("var reSpanTd = /monitor_monitor_list__snid_" + snid + "_[0-9]+/ig;");
	eval("var reSpanList = /left_vlist__name_" + snid + "_[0-9]+/ig;");
	for (var i = 0; i < spans.length; i++) {
		var span = spans[i];
		if (reSpanTd.test(span.id) || reSpanList.test(span.id)) {
			span.innerHTML = name;
		}
	}
}

/**
 * 访客Flash固定信息
 * @param HJWebClMsgStringMsg  &lt;M>                           
  &lt;C>9070;ErrId;1&lt;/C>                
  &lt;D>                          
   &lt;R>                            
    &lt;F>SNID&lt;/F>                
    &lt;F>PageId&lt;/F>            
    &lt;F>Language&lt;/F>         
    &lt;F>OS&lt;/F>           
    &lt;F>VisiterCustomName&lt;/F>   
    &lt;F>VisiterNick&lt;/F>         
   &lt;F>VisiterNote&lt;/F>    
   &lt;F>FirstVisitTime&lt;/F>            
   &lt;F>TalkTimes&lt;/F>   
   &lt;F>LastModifyTime&lt;/F>       
   &lt;F>LastModifyPerson&lt;/F>   
  &lt;/R>                         
  &lt;/D>                         
 &lt;/M> 
 */
function Monitor_visitorFlashInfo(msg9070) {
	var snid = msg9070.datas[0][0];
	var pageid = msg9070.datas[0][1];
	var language = msg9070.datas[0][2];
	var os = msg9070.datas[0][3];
	var self = msg9070.datas[0][4];
	var name = msg9070.datas[0][5];
	var note = msg9070.datas[0][6];
	var fistVisiteTime = msg9070.datas[0][7];
	var talkTimes = msg9070.datas[0][8];
	var modifyTime = msg9070.datas[0][9];
	var modifyPerson = msg9070.datas[0][10];
	var vfiObj = _vfiManage.getVfiObj(snid);
	if (vfiObj == null) {
		vfiObj = new VisitorFlashInfo(snid, pageid, language, os, self, name, note, fistVisiteTime, talkTimes, modifyTime, modifyPerson);
		_vfiManage.vfiArr.push(vfiObj);
	} else {
		last = vfiObj.name;
		vfiObj.snid = snid;
		vfiObj.pageid = pageid;
		vfiObj.language = language;
		vfiObj.os = os;
		vfiObj.self = self;
		vfiObj.name = name;
		vfiObj.note = note;
		vfiObj.fistVisiteTime = fistVisiteTime;
		vfiObj.talkTimes = talkTimes;
		vfiObj.modifyTime = modifyTime;
		vfiObj.modifyPerson = modifyPerson;
	}
	
	var name = vfiObj.name;
	if (name == "") name = this.removeHeadZeroes(snid.substring(4));
	
	var spans = document.getElementsByTagName("span");
	var divs = document.getElementsByTagName("div");
	eval("var reSpanTd = /monitor_monitor_list__snid_" + snid + "_[0-9]+/ig;");
	eval("var reSpanList = /left_vlist__name_" + snid + "_[0-9]+/ig;");
	for (var i = 0; i < spans.length; i++) {
		var span = spans[i];
		if (reSpanTd.test(span.id) || reSpanList.test(span.id)) {
			span.innerHTML = name;
		}
	}
	for (var i = 0; i < divs.length; i++) {
		var div = divs[i];
		if (reSpanTd.test(div.id) || reSpanList.test(div.id)) {
			div.innerHTML = name;
		}
	}
}

/**
 * 发送消息获取Flash固定信息
 * @param String snid 访客ID
 */
function Monitor_getVisitorFlashInfo(snid) {
	_common.send("<M><C>9070;" + _setting.companyCodeReplace + ";" + snid + "</C></M>");
}

/**
 * 访客进入
 * @param HJWebClMsgStringMsg msg9070 &lt;M>   
 &lt;C>9070;0&lt;/C>  
 &lt;D>   
  &lt;R>   
   &lt;F>SNID&lt;/F>  
   &lt;F>PageId&lt;/F> 
   &lt;F>VisitState&lt;/F> 
   &lt;F>RequestTarget&lt;/F> 
   &lt;F>ServicingOP&lt;/F> 
   &lt;F>VisiterIp&lt;/F>
   &lt;F>LivingArea&lt;/F> 
   &lt;F>Page&lt;/F>  
   &lt;F>Explorer&lt;/F> 
   &lt;F>ReferedPageUrl&lt;/F>
   &lt;F>SearchEngineId&lt;/F>
   &lt;F>Keyword&lt;/F> 
   &lt;F>PlayerVersion&lt;/F> 
   &lt;F>VisitTimes&lt;/F> 
   &lt;F>LastVisiteTime&lt;/F>           
   &lt;F>Xscreen&lt;/F>             
   &lt;F>Yscreen&lt;/F>   
   &lt;F>EnterTime&lt;/F> 
   &lt;F>RequestTime&lt;/F> 
   &lt;F>StartTalkTime&lt;/F> 
   &lt;F>LeftTime&lt;/F> 
  &lt;/R>   
 &lt;/D>   
&lt;/M>
 */
function Monitor_visitorIn(msg9070) {
	if (_versionFlag.get(1) == 0) return;
	
	var snid = msg9070.datas[0][0];
	var pageid = msg9070.datas[0][1];
	var visitorStatus = msg9070.datas[0][2];
	var requestTarget = msg9070.datas[0][3];
	var servicingOpertor = msg9070.datas[0][4];
	var visitorIp = msg9070.datas[0][5];
	var livingArea = msg9070.datas[0][6];
	var page = _urlCoder.decode(msg9070.datas[0][7], "UTF-8");
	var explorer = msg9070.datas[0][8];
	var referrer = _urlCoder.decode(msg9070.datas[0][9], "UTF-8");
	var searchEngineId = msg9070.datas[0][10];
	var keyword = msg9070.datas[0][11];//_urlCoder.decode(msg9070.datas[0][11], "UTF-8");
	if (keyword.length > 0) {
		var type = parseInt(keyword.substring(0, 1));
		keyword = keyword.substring(1);
		if (type == 1) {
			try {
				keyword = _urlCoder.decode(keyword, "GB2312");
			} catch (egb) {
				_common.alertDebug("Monitor_visitorIn:keyword:gb2312:$message=" + egb.message + ";$name=" + egb.name);
			}
		} else {
			try {
				keyword = _urlCoder.decode(keyword, "UTF-8");
			} catch (eutf) {
				_common.alertDebug("Monitor_visitorIn:keyword:utf-8:$message=" + eutf.message + ";$name=" + eutf.name);
			}
		}
	}
	var playerVersion = msg9070.datas[0][12];
	var visitTimes = msg9070.datas[0][13];
	var lastVisitTime = msg9070.datas[0][14];
	var pageTitle = msg9070.datas[0][15];//_urlCoder.decode(msg9070.datas[0][15], "UTF-8");
	try {
		pageTitle = _urlCoder.decode(pageTitle, "UTF-8");
	} catch (eutf) {
		try {
			pageTitle = _urlCoder.decode(pageTitle, "GB2312");
		} catch (egb) {
			_common.alertDebug("Monitor_visitorIn:pageTitle:gb2312:$message=" + egb.message + ";$name=" + egb.name);
		}
	}
	var xPixels = msg9070.datas[0][16];
	var yPixels = msg9070.datas[0][17];
	var enterTime = msg9070.datas[0][18];
	var requestTime = msg9070.datas[0][19];
	var startTalkTime = msg9070.datas[0][20];
	var leftTime = msg9070.datas[0][21];
	this.pageIndexGlobal++;
	
	var vfiObj = _vfiManage.getVfiObj(snid);
	if (vfiObj == null) {
		this.getVisitorFlashInfo(snid);
	}

	var aTmp = [];
	for (var i = 0; i <= 21; i++) aTmp.push(this.replaceNull(msg9070.datas[0][i]));
	aTmp.push(this.pageIndexGlobal);
	aTmp.push(0);
	_common.lists.l9070.push(aTmp);
	var fieldIndex = _common.lists.length - 1;
	
	this.showVisitorPage(snid, pageid, visitorStatus, requestTarget, servicingOpertor, visitorIp, livingArea, page, explorer, referrer, searchEngineId, keyword, playerVersion, visitTimes, lastVisitTime, pageTitle, xPixels, yPixels, enterTime, requestTime, startTalkTime, leftTime, fieldIndex, this.pageIndexGlobal, 0, true);
	
	this.deleteLeftPages(snid);
	this.intervalColor();
}

/**
 * 聊天页面进入
 * @param HJWebClMsgStringMsg msg9072 &lt;M>   
 &lt;C>9072;0;ChatGroupID&lt;/C>  
 &lt;D>   
  &lt;R>   
   &lt;F>SNID&lt;/F>  
   &lt;F>PageId&lt;/F> 
   &lt;F>VisitState&lt;/F> 
   &lt;F>RequestTarget&lt;/F> 
   &lt;F>ServicingOP&lt;/F> 
   &lt;F>VisiterIp&lt;/F>
   &lt;F>LivingArea&lt;/F> 
   &lt;F>Page&lt;/F>  
   &lt;F>Explorer&lt;/F> 
   &lt;F>ReferedPageUrl&lt;/F>
   &lt;F>SearchEngineId&lt;/F>
   &lt;F>Keyword&lt;/F> 
   &lt;F>PlayerVersion&lt;/F> 
   &lt;F>VisitTimes&lt;/F> 
   &lt;F>LastVisiteTime&lt;/F>           
   &lt;F>Xscreen&lt;/F>             
   &lt;F>Yscreen&lt;/F>   
   &lt;F>EnterTime&lt;/F> 
   &lt;F>RequestTime&lt;/F> 
   &lt;F>StartTalkTime&lt;/F> 
   &lt;F>LeftTime&lt;/F> 
  &lt;/R>   
 &lt;/D>   
&lt;/M>
 */
function Monitor_chatPageIn(msg9072) {
	if (_versionFlag.get(1) == 0) return;
	if (typeof webcl == "undefined" || webcl == null) return false;
	
	var chatGroupId = msg9072.commands[1];
	var snid = msg9072.datas[0][0];
	var pageid = msg9072.datas[0][1];
	var visitorStatus = msg9072.datas[0][2];
	var requestTarget = msg9072.datas[0][3];
	var servicingOpertor = msg9072.datas[0][4];
	var visitorIp = msg9072.datas[0][5];
	var livingArea = msg9072.datas[0][6];
	var page = _urlCoder.decode(msg9072.datas[0][7], "UTF-8");
	var explorer = msg9072.datas[0][8];
	var referrer = _urlCoder.decode(msg9072.datas[0][9], "UTF-8");
	
	var tmp = msg9072.datas[0][10];
	msg9072.datas[0][10] = msg9072.datas[0][11];
	msg9072.datas[0][11] = tmp;
	
	var searchEngineId = msg9072.datas[0][10];
	var keyword = msg9072.datas[0][11];//_urlCoder.decode(msg9072.datas[0][11], "UTF-8");
	if (keyword.length > 0) {
		var type = parseInt(keyword.substring(0, 1));
		keyword = keyword.substring(1);
		if (type == 1) {
			try {
				keyword = _urlCoder.decode(keyword, "GB2312");
			} catch (egb) {
				_common.alertDebug("Monitor_chatPageIn:keyword:gb2312:$message=" + egb.message + ";$name=" + egb.name);
			}
		} else {
			try {
				keyword = _urlCoder.decode(keyword, "UTF-8");
			} catch (eutf) {
				_common.alertDebug("Monitor_chatPageIn:keyword:utf-8:$message=" + eutf.message + ";$name=" + eutf.name);
			}
		}
	}
	var playerVersion = msg9072.datas[0][12];
	var visitTimes = msg9072.datas[0][13];
	var lastVisitTime = msg9072.datas[0][14];
	var pageTitle = msg9072.datas[0][15];//_urlCoder.decode(msg9072.datas[0][15], "UTF-8");
	try {
		pageTitle = _urlCoder.decode(pageTitle, "UTF-8");
	} catch (eutf) {
		try {
			pageTitle = _urlCoder.decode(pageTitle, "GB2312");
		} catch (egb) {
			_common.alertDebug("Monitor_chatPageIn:pageTitle:gb2312:$message=" + egb.message + ";$name=" + egb.name);
		}
	}
	var xPixels = msg9072.datas[0][16];
	var yPixels = msg9072.datas[0][17];
	var enterTime = msg9072.datas[0][18];
	var requestTime = msg9072.datas[0][19];
	var startTalkTime = msg9072.datas[0][20];
	var leftTime = msg9072.datas[0][21];
	
	this.pageIndexGlobal++;
	
	this.deleteLeftPages(snid);
	
	var aTmp = [];
	for (var i = 0; i <= 21; i++) aTmp.push(this.replaceNull(msg9072.datas[0][i]));
	aTmp.push(this.pageIndexGlobal);
	aTmp.push(chatGroupId);
	_common.lists.l9070.push(aTmp);	
	var fieldIndex = _common.lists.length - 1;

	this.showVisitorPage(snid, pageid, visitorStatus, requestTarget, servicingOpertor, visitorIp, livingArea, page, explorer, referrer, searchEngineId, keyword, playerVersion, visitTimes, lastVisitTime, pageTitle, xPixels, yPixels, enterTime, requestTime, startTalkTime, leftTime, fieldIndex, this.pageIndexGlobal, chatGroupId, true);
}

/**
 * 更新访客信息
 * @param HJWebClMsgStringMsg msg9071 
 * visitState = 0(浏览)	&lt;M>&lt;C>9071;SNID;PageId;VisitState&lt;/C>&lt;/M>
 * visitState = 1(等待)	&lt;M>&lt;C>9071;SNID;PageId;VisitState;RequestTarget;RequestTime&lt;/C>&lt;/M>
 * visitState = 2(交谈)	&lt;M>&lt;C>9071;SNID;PageId;VisitState;ServicingOP;RequestTime&lt;/C>&lt;/M>
 * visitState = 3(离开)	&lt;M>&lt;C>9071;SNID;PageId;VisitState;空位[原ServicingOP位];LeftTime&lt;/C>&lt;/M>
 */
function Monitor_visitorUpdate(msg9071) {
	var snid = msg9071.commands[0];
	var pageid = msg9071.commands[1];
	var visitorStatus = msg9071.commands[2];
	var objId = msg9071.commands[3];
	var time = msg9071.commands[4];
	this.changePageStatus(snid, pageid, visitorStatus, objId, time);
	
	if (visitorStatus == 3) this.deleteMsg9103BySnidPageid(snid, pageid);
}

/**
 * 更新页面状态显示
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @param String status 访客状态
 * @param String objId 客服ID
 * @param String time 时间
 */
function Monitor_changePageStatus(snid, pageid, status, objId, time) {
	var fieldIndex = _common.findTableField(9070, 0, 0, snid, 1, pageid);
	if (fieldIndex == -1) return;
	var pageIndex = _common.lists.l9070[fieldIndex][22];
	var chatGroupId = _common.lists.l9070[fieldIndex][23];
	
	_common.lists.l9070[fieldIndex][2] = status;
	
	try {
		var statusSpan = document.getElementById("monitor_monitor_list__status_" + snid + "_" + pageIndex);
		var currentStatus = statusSpan.innerHTML;
		if (this.arrStatus[status] == _langPackage.monitor.visitorStatus[3] || currentStatus != _langPackage.monitor.visitorStatus[2]) statusSpan.innerHTML = this.arrStatus[status];
	} catch (e) {
		_common.alertDebug("Monitor_changePageStatus 1:$message=" + e.message + ";$name=" + e.name);
	}
	
	if (status == 3) {
		try {
			var leftListDiv = document.getElementById("left_vlist__" + pageIndex);
			if (leftListDiv) leftListDiv.removeNode(true);
		} catch (e) {
			_common.alertDebug("Monitor_deleteLeftPages 1:left_vlist__" + pageIndex + ":$message=" + e.message + ";$name=" + e.name);
		}
	} else {
		try {
			var leftListDiv = document.getElementById("left_vlist__" + pageIndex);
			var name = document.getElementById("left_vlist__name_" + snid + "_" + pageIndex).innerHTML;
			leftListDiv.innerHTML = "<span id='left_vlist__" + pageIndex + "_status_img'><img src=\"" + _setting.imagesPath + "viS" + status + ".gif\" alt=\"" + this.arrStatus[status] + "\" /></span>&nbsp;<span id=\"left_vlist__name_" + snid + "_" + pageIndex + "\" title=\"" + this.arrStatus[status] + "\">" + name + "</span>";
		} catch (e) {
			_common.alertDebug("Monitor_changePageStatus 2:$message=" + e.message + ";$name=" + e.name);
		}
	}
	
	if (status == 3) {
		_common.lists.l9070[fieldIndex][21] = time;
		/*已經沒有離開時間字段***
		try {
			var leftTimeSpan = document.getElementById("monitor_monitor_list__leftTime_" + snid + "_" + pageIndex);
			leftTimeSpan.innerHTML = time;
		} catch (e) {
			_common.alertDebug("Monitor_changePageStatus 3:" + e);
		}
		*/
		this.removeTimes(snid, pageIndex, "stayTime");
		this.removeTimes(snid, pageIndex, "waitTime");
		this.removeTimes(snid, pageIndex, "chatTime");
	} else if (status == 2) {
		_common.lists.l9070[fieldIndex][20] = time;
		this.removeTimes(snid, pageIndex, "waitTime");
		this.times.push({type:"chatTime", snid:snid, pageIndex:pageIndex, start: (new Date()).getTime()});
		var serviceSpan = document.getElementById("monitor_monitor_list__operator_" + snid + "_" + pageIndex);
		if (serviceSpan) {
			var op = _common.getArrayObject(_operators.operators, "id", objId);
			if (op != null) serviceSpan.innerHTML = op.name;
		}
	} else if (status == 4) {
		var serviceSpan = document.getElementById("monitor_monitor_list__operator_" + snid + "_" + pageIndex);
		if (serviceSpan) {
			var op = _common.getArrayObject(_operators.operators, "id", objId);
			if (op != null) serviceSpan.innerHTML = op.name;
		}
	}
	//"浏览","请求","对话","离开","邀请"
	var vListTr = document.getElementById("monitor_monitor_list__" + pageIndex);
	var vListDiv = document.getElementById("left_vlist__" + pageIndex);
	if (status == 1) {
		if (vListTr) vListTr.style.color = _setting.requestBgColor;
		if (vListDiv) vListDiv.style.color = _setting.requestBgColor;
	} else if (status == 2) {
		if (vListTr) vListTr.style.color = _setting.chatBgColor;
		if (vListDiv) vListDiv.style.color = _setting.chatBgColor;
	} else if (status == 3) {
		if (vListTr) vListTr.style.color = _setting.leftBgColor;
		if (vListDiv) vListDiv.style.color = _setting.leftBgColor;
	} else if (status == 4) {
		if (vListTr) vListTr.style.color = _setting.inviteBgColor;
		if (vListDiv) vListDiv.style.color = _setting.inviteBgColor;
	} else {
		if (vListTr) vListTr.style.color = _setting.defaultColor;
		if (vListDiv) vListDiv.style.color = _setting.defaultColor;
	}
	
	if (vListTr) {
		for (var i = 0; i < vListTr.cells.length; i++) {
			vListTr.cells[i].childNodes(0).style.color = vListTr.style.color;
		}
		for (var i = 0; i < _mmgrid.filter.status.length; i++) {
			if (this.arrStatus[status] == _mmgrid.filter.status[i].name) {
				if (_mmgrid.filter.status[i].filter == 1) vListTr.style.display = "none";
				else vListTr.style.display = "";
				break;
			}
		}
	}
	
	if (pageIndex == this.currentFocus) this.changeFocusVisitor(pageIndex, snid, pageid, parseInt(status), chatGroupId);
}

/**
 * change str format like "1900-01-01 01:01:01" or "1900-1-1 1:1:1" to Date
 * @param String str 时间字符串
 * @return Date 时间对象
 */
function Monitor_strToDate(str) {
	var a = str.split(" ");
	var aDate = a[0].split("-");
	var aTime = a[1].split(":");
	var date = new Date(parseInt(aDate[0]), parseInt(aDate[1]) - 1, parseInt(aDate[2]), parseInt(aTime[0]), parseInt(aTime[1]), parseInt(aTime[2]));
	return date;
}

/**
 * 删除离开状态的页面
 * 同一访客新的页面进入，或者离开10分钟，或者进入超过30分钟
 * @param String p_snid 访客ID
 */
function Monitor_deleteLeftPages(p_snid) {
	var aDelete = new Array();
	var aLeft = new Array();
	var timeNow = (new Date()).getTime();
	for (var fieldIndex = 0; fieldIndex < _common.lists.l9070.length; fieldIndex++) {
		var snid = _common.lists.l9070[fieldIndex][0];
		var visitorStatus = _common.lists.l9070[fieldIndex][2];
		var enterTime = _common.lists.l9070[fieldIndex][18];
		var leftTime = _common.lists.l9070[fieldIndex][21];
		
		if (visitorStatus == 3) {
			aLeft.push(fieldIndex);
			if (snid == p_snid) {
				aDelete.push(fieldIndex);
				continue;
			}
			
			var timeLeft = this.strToDate(leftTime).getTime();
			if (timeNow - timeLeft >= 600000) {
				aDelete.push(fieldIndex);
				continue;
			}
		
			var timeEnter = this.strToDate(enterTime).getTime();			
			if (timeNow - timeEnter >= 1800000) {
				aLeft.push(fieldIndex);
				aDelete.push(fieldIndex);
				continue;
			}
		}

	}
	while (aLeft.length > 0) {
		var fi = aLeft.pop();

		var snid = _common.lists.l9070[fi][0];
		var pageIndex = _common.lists.l9070[fi][22];
		
		try {
			var vlistDiv = document.getElementById("left_vlist__" + pageIndex);
			if (vlistDiv) vlistDiv.removeNode(true);
		} catch (e) {
			_common.alertDebug("Monitor_deleteLeftPages 1:left_vlist__" + pageIndex + ":$message=" + e.message + ";$name=" + e.name);
		}
		
		if (aDelete.has(fi)) {
			
			/**
			 * 如果监控列表中此访客没有其他页面，那么删除此访客的的固定信息
			 */
			_common.lists.l9070 = _common.lists.l9070.slice(0, fi).concat(_common.lists.l9070.slice(fi + 1));
			/*		
			var fis = _common.findTableField (9070, 0, 0, snid, -1, "");
			if (fis == -1) {
				_vfiManage.deleteVfiObj(snid);
			}
			*/
			try {
				var vlistTr = document.getElementById("monitor_monitor_list__" + pageIndex);
				vlistTr.removeNode(true);
			} catch (e) {
				_common.alertDebug("Monitor_deleteLeftPages 2::$message=" + e.message + ";$name=" + e.name);
			}
		}
	}
	this.syncTtitleContentTdWidth();
}

/**
 * 切换访客信息
 * @param int index 访客信息页标 
 */
function Monitor_changeVisitorInfoInterface(index) {
	var info_1 = document.getElementById("popDiv__list_vinfo_1");
	var info_2 = document.getElementById("popDiv__list_vinfo_2");
	if (index == 1) {
		info_1.style.display = "";
		info_2.style.display = "none";
	} else {
		info_1.style.display = "none";
		info_2.style.display = "";
	}
}

/**
 * 当数字小于10的时候，在前面补个0，例如4->'04'
 * @param int i 处理前的数字
 * @return 处理后的数字/字符串
 */
function Monitor_addZeroIfLess(i) {
	if (i < 10) return "0" + i;
	return i;
}

/**
 * 保存访客的Flash固定信息，相应消息格式：&lt;M>&lt;C>9300;" + snid + ";" + pageid + ";" + 1 + ";" + name + ";" + note + ";" + operator + ";" + time + "&lt;/C>&lt;/M>
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @see Common#clearPopDiv
 */
function Monitor_saveVisitorFlashInfo(snid, pageid) {
	var name = document.getElementById("popDiv__list_vinfo_name").value;
	var operator = _personSession.nick;
	var note = document.getElementById("popDiv__list_vinfo_note").value;
	var date = new Date();
	var time = this.addZeroIfLess(date.getYear()) + "-" + this.addZeroIfLess((date.getMonth() + 1)) + "-" + this.addZeroIfLess(date.getDate()) + " " + this.addZeroIfLess(date.getHours()) + ":" + this.addZeroIfLess(date.getMinutes()) + ":" + this.addZeroIfLess(date.getSeconds());
	var msg = "<M><C>9300;" + snid + ";" + pageid + ";" + 1 + ";" + name + ";" + note + ";" + operator + ";" + time + "</C></M>";
	_common.send(msg);
	_common.clearPopDiv();
}




/**
 * 显示客服详细信息
 * @param fieldIndex field of 9070 table
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @param e onclick event
 */
function Monitor_showVisitorInfo(pageIndex, snid, pageid, e) {
	//, pageid, visitorStatus, requestTarget, servicingOpertor, visitorIp, livingArea, page, explorer, referrer, searchEngineId, keyword, playerVersion, visitTimes, lastVisitTime, pageTitle, xPixels, yPixels, enterTime, requestTime, startTalkTime, leftTime
	_common.clearPopDiv();
	var fieldIndex = _common.findTableField (9070, 0, 0, snid, 1, pageid);
	if (fieldIndex == -1) return false;
	
	var snid = _common.lists.l9070[fieldIndex][0];
	var pageid = _common.lists.l9070[fieldIndex][1];
	var visitorStatus = _common.lists.l9070[fieldIndex][2];
	var requestTarget = _common.lists.l9070[fieldIndex][3];
	var servicingOpertor = _common.lists.l9070[fieldIndex][4];
	var visitorIp = _common.lists.l9070[fieldIndex][5];
	var livingArea = _common.lists.l9070[fieldIndex][6];
	var page = _common.lists.l9070[fieldIndex][7];
	var explorer = _common.lists.l9070[fieldIndex][8];
	var referrer = _urlCoder.decode(_common.lists.l9070[fieldIndex][9], "UTF-8");
	if (referrer != "") {
		var sRef = referrer;
		if (referrer.length > 15) {
			sRef = referrer.substring(0, 12) + "...";
		}
		referrer = "<a id='popDiv__list_ref_href' href='" + referrer + "' title='" + referrer + "' target='_blank'>" + sRef + "</a>";
	}
	var searchEngineId = _common.lists.l9070[fieldIndex][10];
	var searchEngine = "";
	if (searchEngineId != "") searchEngine = _searchEngineArr[searchEngineId].name;
	var keyword = _common.lists.l9070[fieldIndex][11];
	if (keyword.length > 0) {
		var type = parseInt(keyword.substring(0, 1));
		keyword = keyword.substring(1);
		if (type == 1) {
			try {
				keyword = _urlCoder.decode(keyword, "GB2312");
			} catch (egb) {
				_common.alertDebug("Monitor_showVisitorInfo :$message=" + egb.message + ";$name=" + egb.name);
			}
		} else {
			try {
				keyword = _urlCoder.decode(keyword, "UTF-8");
			} catch (eutf) {
				_common.alertDebug("Monitor_showVisitorInfo :$message=" + eutf.message + ";$name=" + eutf.name);
			}
		}
	}
	if (keyword.length > 15) {
		keyword = "<span id='popDiv__list_keyword_span' title='" + keyword + "'>" + keyword.substring(0, 12) + "...</span>";
	}
	var playerVersion = _common.lists.l9070[fieldIndex][12];
	var visitTimes = _common.lists.l9070[fieldIndex][13];
	var lastVisitTime = _common.lists.l9070[fieldIndex][14];
	var pageTitle = _common.lists.l9070[fieldIndex][15];
	try {
		pageTitle = _urlCoder.decode(pageTitle, "UTF-8");
	} catch (eutf) {
		try {
			pageTitle = _urlCoder.decode(pageTitle, "GB2312");
		} catch (egb) {
			_common.alertDebug("Monitor_showVisitorInfo :$message=" + egb.message + ";$name=" + egb.name);
		}
	}
	var xPixels = _common.lists.l9070[fieldIndex][16];
	var yPixels = _common.lists.l9070[fieldIndex][17];
	var enterTime = _common.lists.l9070[fieldIndex][18];
	var requestTime = _common.lists.l9070[fieldIndex][19];
	var startTalkTime = _common.lists.l9070[fieldIndex][20];
	var leftTime = _common.lists.l9070[fieldIndex][21];
	var chatGroupId = _common.lists.l9070[fieldIndex][23];
	
	this.changeFocusVisitor(pageIndex, snid, pageid, parseInt(visitorStatus), chatGroupId);
	
	var vfiObj = _vfiManage.getVfiObj(snid);

	if (vfiObj == null) {
		vfiObj = new VisitorFlashInfo(snid, "", "", "", "", "", "", "", "", "", "");
	}
	
	snid = this.removeHeadZeroes(snid.substring(4));//"SN" + snid.substring(2,3) + this.removeHeadZeroes(snid.substring(4));
	
	var popDiv = document.getElementById("popDiv__list");
	var pageTitleShort = pageTitle;
	if (pageTitleShort.length > 15) pageTitleShort = pageTitleShort.substring(0, 12) + "...";
	
	var strStatus = "";
	try {
		strStatus = document.getElementById("monitor_monitor_list__status_" + snid + "_" + pageIndex).innerHTML;
	} catch (exc) {
		_common.alertDebug("Monitor_showVisitorInfo :$message=" + exc.message + ";$name=" + exc.name);
	}
	
	var data = {
		images_path : _setting.imagesPath,
		snid 		: snid,
		vfiObj		: vfiObj,
		visitTimes	: visitTimes,
		lastVisitTime	: lastVisitTime,
		referrer	: referrer,
		searchEngine: searchEngine,
		keyword		: keyword,
		livingArea	: livingArea,
		visitorIp	: visitorIp,
		pageid		: pageid
		};
	var str = TrimPath.processDOMTemplate("visitor_info_tpl", data);
	str += TrimPath.processDOMTemplate("visitor_info_tpl2", data);
	popDiv.innerHTML = str;
	popDiv.className = "v_b_bg";
	popDiv.style.position = "absolute";

	
	if (document.documentElement.clientHeight > 280 && e.y > document.documentElement.clientHeight - 280) {
		popDiv.style.top = document.documentElement.clientHeight - 280;
	} else {
		popDiv.style.top = e.y;
	}
	if (document.documentElement.clientWidth > 280 && e.x > document.documentElement.clientWidth - 280) {
		popDiv.style.left = document.documentElement.clientWidth - 280;
	} else {
		popDiv.style.left = e.x + 2;
	}
	
	popDiv.style.display = "";
}

/**
 * 主动邀请，相应消息&lt;M>&lt;C>9101;" + _setting.companyCodeReplace + ";" + op_id + ";" + vi_snid + ";" + page_id + ";" + msg + ";0&lt;/C>&lt;/M>
 * @param String op_id 客服ID
 * @param String vi_snid 访客ID
 * @param String page_id 访客页面ID
 */
function Monitor_sendRequestToVisitor(op_id, vi_snid, page_id) {
	var msg = _urlCoder.encode(_langPackage.monitor.inviteWelcome, "UTF-8");
	_common.send("<M><C>9101;" + _setting.companyCodeReplace + ";" + op_id + ";" + vi_snid + ";" + page_id + ";" + msg + ";0</C></M>");
}

/**
 * 主动邀请访客结果返回处理
 * @param HJWebClMsgStringMsg msg9102 9102,ErrId,pageid,result,groupid
 */
function Monitor_requestVisitorResult(msg9102)
{
	var pageid = msg9102.commands[1];
	var result = parseInt(msg9102.commands[2]);
	var groupid = msg9102.commands[3];
	
	//访客接受
	if (result == 1)
	{
		//...
	}
	//访客拒绝
	else
	{
		_common.popPrompt(2, _langPackage.monitor.viRejectChat);
		_common.ocxPrompt(2, _langPackage.monitor.viRejectChat, "");
	}
}

/**
 * 访客请求客服进行交谈
 * @param HJWebClMsgStringMsg msg9103 9103,sn_id,pageid(访客),chat_ground_id,text
 */
function Monitor_visitorRequestChat(msg9103) {
	var snid = msg9103.commands[0];
	var pageid = msg9103.commands[1];
	var groupid = msg9103.commands[2];
	var text = msg9103.commands[3];
	
	var m9103 = null;
	m9103 = _common.getArrayObjByPropertyValue(this.msg9103s, "groupid", groupid);
	if (m9103 == null) {
		m9103 = new Msg9103(groupid, snid, pageid);
		this.msg9103s.push(m9103);
	}
	
	m9103.msgs.push(text);
	
	var vfiObj = _vfiManage.getVfiObj(snid);
	var id = this.removeHeadZeroes(snid.substring(4));
	var name = "";
	if (vfiObj != null) {
		name = vfiObj.name + "[" + id + "]";
	} else {
		name =  _langPackage.monitor.visitor + "[" + id + "]";
	}
	
	_common.soundPrompt(1);	
	if (text != "") {
		_common.popPrompt(1, "<a href='#' onclick=\"_chat.replyVisitorRequest(2, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + groupid + "');\">" + name  + _langPackage.monitor.visitorReqSaid + _urlCoder.decode(text, "UTF-8") + "</a>");		
		_common.ocxPrompt(1, name  + _langPackage.monitor.visitorReqSaid + _urlCoder.decode(text, "UTF-8"), "_chat.replyVisitorRequest(2, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + groupid + "');");
	} else {
		//_common.popPrompt(1, "<a href='#' onclick=\"_chat.replyVisitorRequest(2, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + groupid + "');\">" + name  + " 请求交谈!</a>");
	}
}

/**
 * 显示访客操作菜单
 * @param int pageIndex 页面序号
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @param String op_id 客服ID
 * @param String chatGroupId 交谈组ID
 * @param event e 鼠标右键事件
 */
function Monitor_showVisitorMenu(pageIndex, snid, pageid, op_id, chatGroupId, e) {
	_common.clearPopDiv();
	
	var fieldIndex = _common.findTableField (9070, 0, 0, snid, 1, pageid);
	if (fieldIndex == -1) return false;
	
	var snid = _common.lists.l9070[fieldIndex][0];
	var pageid = _common.lists.l9070[fieldIndex][1];
	var visitorStatus = _common.lists.l9070[fieldIndex][2];
	
	this.changeFocusVisitor(pageIndex, snid, pageid, parseInt(visitorStatus), chatGroupId);
	//snid = "SN" + snid.substring(2,3) + this.removeHeadZeroes(snid.substring(4));
	
	var popDiv = document.getElementById("popDiv__list");
	var strMenu = "";
	if (_versionFlag.get(7) == 1) strMenu += "<div id='popDiv__list_menu_info' class=\"menu_r_text_align_o\" onmouseover=\"this.className='menu_r_on_bg_o'\" onmouseout=\"this.className='menu_r_text_align_o'\" onclick=\"_monitor.showVisitorInfo(" + pageIndex + ",'" + snid + "','" + pageid + "', event);\">" + _langPackage.monitor.visitorInfo + "</div>";
	strMenu += "<div id='popDiv__list_menu_line' class=\"menu_r_line\"></div>";	
	var statusSpan = document.getElementById("monitor_monitor_list__status_" + snid + "_" + pageIndex);
	try {
		var currentStatus = statusSpan.innerHTML;
		if (currentStatus == _langPackage.monitor.visitorStatus[0]) {
			if (_versionFlag.get(2) == 1) strMenu += "<div id='popDiv__list_menu_invite' class=\"menu_r_text_align_o\" onmouseover=\"this.className='menu_r_on_bg_o'\" onmouseout=\"this.className='menu_r_text_align_o'\" onclick=\"_monitor.sendRequestToVisitor('" + op_id + "', '" + snid + "', '" + pageid + "');_common.clearPopDiv();\">" + _langPackage.monitor.opInvite + "</div>";
		} else if (currentStatus == _langPackage.monitor.visitorStatus[1]) {
			//9104,reply_status,g_chat_id,co_id,op_id,sn_id,page_op_id
			if (_versionFlag.get(3) == 1) strMenu += "<div id='popDiv__list_menu_accept' class=\"menu_r_text_align_o\" onmouseover=\"this.className='menu_r_on_bg_o'\" onmouseout=\"this.className='menu_r_text_align_o'\" onclick=\"_chat.replyVisitorRequest(2, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "');_common.clearPopDiv();\">" + _langPackage.monitor.opAccept + "</div>";
			if (_versionFlag.get(4) == 1) strMenu += "<div id='popDiv__list_menu_refuse' class=\"menu_r_text_align_o\" onmouseover=\"this.className='menu_r_on_bg_o'\" onmouseout=\"this.className='menu_r_text_align_o'\" onclick=\"_chat.replyVisitorRequest(1, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "');_common.clearPopDiv();\">" + _langPackage.monitor.opReject + "</div>";
		}
	} catch (ex) {
		_common.alertDebug("Monitor_showVisitorMenu::$message=" + ex.message + ";$name=" + ex.name);
	}
	//strMenu += "<div id='popDiv__list_menu_banned' class=\"menu_r_text_align_o\" onmouseover=\"this.className='menu_r_on_bg_o'\" onmouseout=\"this.className='menu_r_text_align_o'\" onclick=\"_common.clearPopDiv();\">封锁访客</div>";
	popDiv.innerHTML = strMenu;
	popDiv.className = "menu_r";
	popDiv.style.position = "absolute";
	popDiv.style.top = e.y;
	popDiv.style.left = e.x;
	popDiv.style.display = "";
}

/**
 * 改变当前选中的访客
 * @param int pageIndex 页面序号
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @param String status 访客状态
 * @param String chatGroupId 交谈组ID
 */
function Monitor_changeFocusVisitor(pageIndex, snid, pageid, status, chatGroupId) {
	if (pageIndex != this.currentFocus) {
		try {
			if (this.currentFocus != -1) {
				var lastVlistTr = document.getElementById("monitor_monitor_list__" + this.currentFocus);
				lastVlistTr.className='';
			}
			if (pageIndex != -1) {
				var vlistTr = document.getElementById("monitor_monitor_list__" + pageIndex);
				vlistTr.className='form_bd_bottom_o';
			}
		} catch (ex) {
			_common.alertDebug("Monitor_changeFocusVisitor :$message=" + ex.message + ";$name=" + ex.name);
		}
		this.currentFocus = pageIndex;
	}
	this.changeHeadButtonStatus(snid, pageid, status, chatGroupId);
}

/**
 * 当前选中的访客/访客状态发生改变的时候，改变 主动邀请/接受请求/拒绝请求 3个按钮的状态
 * "浏览","请求","对话","离开","邀请"
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @param String status 访客状态
 * @param String chatGroupId 交谈组ID
 */
function Monitor_changeHeadButtonStatus(snid, pageid, status, chatGroupId) {
	var inviteDiv = document.getElementById("head_invite_div");
	var acceptDiv = document.getElementById("head_accept_div");
	var refuseDiv = document.getElementById("head_refuse_div");
	
	var fieldIndex = _common.findTableField(9070, 0, 0, snid, 1, pageid);
	if (fieldIndex == -1) return false;
	var newStatus = parseInt(_common.lists.l9070[fieldIndex][2]);
	switch(newStatus) {
		//浏览
		case 0:
			if (_versionFlag.get(2) == 1) inviteDiv.innerHTML = "<a id=\"head_invite_href\" href=\"#\" onclick=\"_monitor.sendRequestToVisitor('" + _personSession.id + "', '" + snid + "', '" + pageid + "');\"><img src=\"" + _setting.imagesPath + "web_chat_top_request.gif\" name=\"invite\" width=\"113\" height=\"21\" border=\"0\" /></a>";
			else inviteDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_request_off.gif\" name=\"accept\" width=\"113\" height=\"21\" border=\"0\" />";
			acceptDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_accept_off.gif\" name=\"accept\" width=\"100\" height=\"21\" border=\"0\" />";
			refuseDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_decline_off.gif\" name=\"refuse\" width=\"73\" height=\"21\" border=\"0\" />";
			break;
		//请求
		case 1:
			inviteDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_request_off.gif\" name=\"accept\" width=\"113\" height=\"21\" border=\"0\" />";
			if (_versionFlag.get(3) == 1) acceptDiv.innerHTML = "<a id=\"head_accept_href\" href=\"#\" onclick=\"_chat.replyVisitorRequest(2, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "');\"><img src=\"" + _setting.imagesPath + "web_chat_top_accept.gif\" name=\"accept\" width=\"100\" height=\"21\" border=\"0\" /></a>";
			else acceptDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_accept_off.gif\" name=\"accept\" width=\"100\" height=\"21\" border=\"0\" />";
			if (_versionFlag.get(3) == 1) refuseDiv.innerHTML = "<a id=\"head_refuse_href\" href=\"#\" onclick=\"_chat.replyVisitorRequest(1, '" + _personSession.id + "', '" + snid + "', '" + pageid + "','" + chatGroupId + "');\"><img src=\"" + _setting.imagesPath + "web_chat_top_decline.gif\" name=\"refuse\" width=\"73\" height=\"21\" border=\"0\" /></a>";
			else refuseDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_decline_off.gif\" name=\"refuse\" width=\"73\" height=\"21\" border=\"0\" />";
			break;
		//对话
		case 2:
			inviteDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_request_off.gif\" name=\"accept\" width=\"113\" height=\"21\" border=\"0\" />";
			acceptDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_accept_off.gif\" name=\"accept\" width=\"100\" height=\"21\" border=\"0\" />";
			refuseDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_decline_off.gif\" name=\"refuse\" width=\"73\" height=\"21\" border=\"0\" />";
			break;
		//离开
		case 3:
			inviteDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_request_off.gif\" name=\"accept\" width=\"113\" height=\"21\" border=\"0\" />";
			acceptDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_accept_off.gif\" name=\"accept\" width=\"100\" height=\"21\" border=\"0\" />";
			refuseDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_decline_off.gif\" name=\"refuse\" width=\"73\" height=\"21\" border=\"0\" />";
			break;
		//邀请
		case 4:
			inviteDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_request_off.gif\" name=\"accept\" width=\"113\" height=\"21\" border=\"0\" />";
			acceptDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_accept_off.gif\" name=\"accept\" width=\"100\" height=\"21\" border=\"0\" />";
			refuseDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_decline_off.gif\" name=\"refuse\" width=\"73\" height=\"21\" border=\"0\" />";
			break;
		default:
			inviteDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_request_off.gif\" name=\"accept\" width=\"113\" height=\"21\" border=\"0\" />";
			acceptDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_accept_off.gif\" name=\"accept\" width=\"100\" height=\"21\" border=\"0\" />";
			refuseDiv.innerHTML = "<img src=\"" + _setting.imagesPath + "web_chat_top_decline_off.gif\" name=\"refuse\" width=\"73\" height=\"21\" border=\"0\" />";
			break;
	}
}

/**
 * 访客被双击
 * @param String opid 客服ID
 * @param String snid 访客ID
 * @param String pageid 访客页面ID
 * @param String chatGroupId 交谈组ID
 * @param String visitorStatus 访客状态
 */
function Monitor_visitorOnDblClick(opid, snid, pageid, chatGroupId, visitorStatus) {
	switch (parseInt(visitorStatus)) {
		case 0:
			if (_versionFlag.get(2) == 1) _monitor.sendRequestToVisitor(opid, snid, pageid);
			break;
		case 1:
			if (_versionFlag.get(3) == 1) _chat.replyVisitorRequest(2, opid, snid, pageid, chatGroupId);
			break;
		default:
			break;
	}
}

/**
 * 显示预存消息列表
 */
function Monitor_showReserveList() {
	var div = document.getElementById("monitor_chat_reserve_list");
	if (!div) return false;
	var msgs = new Array();
	for (var i = 0; i < _reserve.arr[0].length; i++) {
		var res = _reserve.arr[0][i];
		if (res[2] != "B") {
			var title = _urlCoder.decode(res[5], "UTF-8").replace(/\+/g, " ").replace(/\"/g, "&quot;");
			var shortTitle = title;
			if (title.length > 10) shortTitle = title.substring(0, 7) + "...";
			var msg = _urlCoder.decode(res[6], "UTF-8");
			msg = msg.replace(/'/g, "&#039;");
			msg = msg.replace(/"/g, "&quot;");
			msg = msg.replace(/\+/g, " ");
			msg = msg.replace(/&/g, "&amp;");
			msg = msg.replace(/\n/g, "");
			msg = msg.replace(/\r/g, "");
			var obj = {msg : msg, shortTitle : shortTitle};
			msgs.push(obj);
		}
	}
	var urls = new Array();
	for (var i = 0; i < _reserve.arr[1].length; i++) {
		var res = _reserve.arr[1][i];
		if (res[2] != "B") {
			var title = _urlCoder.decode(res[5], "UTF-8").replace(/\+/g, " ");
			var shortTitle = title;
			if (title.length > 10) shortTitle = title.substring(0, 7) + "...";
			var url = _urlCoder.decode(res[6], "UTF-8").replace(/\+/g, " ");
			if (url.substring(0, 4).toLowerCase() != "http" && url.substring(0, 3).toLowerCase() != "ftp" && url.substring(0, 7).toLowerCase() != "mailto:") url = "http://" + url;
			var msg = "<a href=\"" + url + "\" target=\"_blank\">" + url + "</a>";
			msg = msg.replace(/'/g, "&#039;");
			msg = msg.replace(/"/g, "&quot;");
			msg = msg.replace(/\+/g, " ");
			msg = msg.replace(/&/g, "&amp;");
			msg = msg.replace(/\n/g, "");
			msg = msg.replace(/\r/g, "");
			var obj = {msg : msg, shortTitle : shortTitle};
			urls.push(obj);
		}
	}
	var files = new Array();
	for (var i = 0; i < _reserve.arr[2].length; i++) {
		var res = _reserve.arr[2][i];
		if (res[2] != "B") {
			var title = _urlCoder.decode(res[6], "UTF-8").replace(/\+/g, " ");
			var shortTitle = title;
			if (title.length > 10) shortTitle = title.substring(0, 7) + "...";
			var url = _urlCoder.decode(res[5], "UTF-8").replace(/\+/g, " ");
			url = _urlCoder.encode(_setting.reserveBaseUrl + url, "UTF-8");
			var obj = {url : url, shortTitle : shortTitle};
			files.push(obj);
		}
	}
	
	var data = {
		msgs 	: msgs,
		urls 	: urls,
		files 	: files,
		_versionFlag : _versionFlag
		};
	var str = TrimPath.processDOMTemplate("reserve_tpl", data);	
	div.innerHTML = str;
}

/**
 * 显示/隐藏聊天界面的预存消息列表
 */
function Monitor_showReserve(type) {
	var oTr = document.getElementById("monitor_chat_reserve_" + type + "Tr");
	if (oTr.style.display == "none") {
		oTr.style.display = "";
	} else {
		oTr.style.display = "none";
	}
}

/**
 * 显示状态过滤
 * @param event e 点击事件
 */
function Monitor_showStatusFilter(e) {
	if (_versionFlag.get(14) == 0) return false;
	_common.clearPopDiv();
	var status = new Array();
	for (var i = 0; i < this.arrStatus.length; i++) {
		var obj = {
			id		: i,
			name	: this.arrStatus[i],
			schecked: this.filter.status.has(this.arrStatus[i]) ? "checked='checked'" : ""
			};
		status.push(obj);
	}
	var data = {
		images_path	: _setting.imagesPath,
		status 	: status
		};
	var str = TrimPath.processDOMTemplate("monitor_filter_status_tpl", data);	
	var popDiv = document.getElementById("popDiv__list");
	popDiv.innerHTML = str;
	popDiv.className = "";
	popDiv.style.position = "absolute";
	popDiv.style.top = e.y;
	popDiv.style.left = e.x;
	popDiv.style.display = "";
}

/**
 * 保存状态过滤设置
 */
function Monitor_saveStatusFilter() {
	var checks = document.getElementsByName("monitor_filter__status_check[]");
	var a = new Array();
	for (var i = 0; i < checks.length; i++) {
		if (checks[i].checked) {
			a.push(this.arrStatus[checks[i].value]);
		}
	}
	this.setVisitorFilter("status", a);
	_common.clearPopDiv();
}

/**
 * 设置访客过滤条件
 * @param String type 过滤类型
 * @param String value 过滤值
 * @see #doVisitorFilter
 */
function Monitor_setVisitorFilter(type, value) {
	eval("this.filter." + type + " = value;");
	this.doVisitorFilter();
}

/**
 * 执行访客过滤
 */
function Monitor_doVisitorFilter() {
	var trs = document.getElementsByTagName("tr");
	for (var i = 0; i < trs.length; i++) {
		if (trs[i].id.substring(0,22) == "monitor_monitor_list__") {
			var idTd = trs[i].cells[0];
			var aId = idTd.innerHTML.split("{#}");
			if (aId.length < 4) continue;
			var statusSpan = document.getElementById("monitor_monitor_list__status_" + aId[0] + "_" + aId[3]);
			if (this.filter.status.has(statusSpan.innerHTML)) trs[i].style.display = "";
			else trs[i].style.display = "none";
		}
	}
}

/**
 * 删除所有访客
 */
function Monitor_deleteAllVisitors() {
	_common.lists.l9070 = [];
	document.getElementById("left_vlist").innerHTML = "";
	var monitor_monitor_table = document.getElementById("monitor_monitor_table");
	while (monitor_monitor_table.rows.length > 1) {
		monitor_monitor_table.deleteRow(1);
	}
	this.syncTtitleContentTdWidth();
}

var _monitor = new Monitor();
setInterval("_monitor.timeAdder()", 1000);
//-->