//一些常量

var MSG_ROLE_1 = "发布人";
var MSG_ROLE_2 = "管理员";

var MSG_COMMON_1 = "搜索内容不得包括“#”、“%”、“$”、“/”、“\\”、“?”、“\&”等半角标点符号！";
var MSG_COMMON_2 = "请录入搜索条件！";
var MSG_COMMON_3 = "代理执行错误或你没有执行此项操作的权限。如果重新登录后问题依然存在，请联系管理员。";
var MSG_COMMON_4 = "对不起，您无权进行此操作！";
var MSG_COMMON_5 = "程序执行异常，请联系管理员。";
var MSG_COMMON_6 ="请录入搜索条件！";
var MSG_COMMON_7 ="请选择";
var MSG_COMMON_8 = "文件名称中不得包括“#”、“%”、“$”、“/”、“\\”、“?”、“\&”等半角标点符号！";

//var MSG_WEBCOMMON_1 = "代理执行错误或你没有执行此项操作的权限，请联系管理员！";
var MSG_WEBCOMMON_2 = "模块配置文件不存在，请联系管理员！";
var MSG_WEBCOMMON_3 = "模块配置文件信息缺少，请联系管理员！";
var MSG_WEBCOMMON_4 = "页面占位符不存在，请联系管理员！";
var MSG_WEBCOMMON_5 = "无法创建XmlDOM对象，请联系管理员！";
var MSG_WEBCOMMON_6 = "无法获得请求的数据或数据有误，请联系管理员！";
var MSG_WEBCOMMON_7 = "无法获得请求的XSL或XSL内容有误，请联系管理员！";
var MSG_WEBCOMMON_8 = "以下菜单样式表不存在，请联系管理员！\n";
var MSG_WEBCOMMON_9 = "以下菜单占位符不存在，请联系管理员！\n";
//var MSG_WEBCOMMON_10 = "占位符GflowLocationXML不存在，请联系管理员！";
var MSG_WEBCOMMON_11 = "取得用户基本信息失败，请联系管理员！";
var MSG_WEBCOMMON_12 = "已超时或尚未登录，请重新登录本系统！";
var MSG_WEBCOMMON_13 = "请先选择要删除的信息！";
var MSG_WEBCOMMON_14 = "是否确认删除所选信息？";
var MSG_WEBCOMMON_15 = "没有分类";
var MSG_WEBCOMMON_16 = "目标域名不能为空！";
var MSG_WEBCOMMON_17 = "目标域不存在！";
var MSG_WEBCOMMON_18 = "请先选择要解锁的文件！";
var MSG_WEBCOMMON_19 = "是否确认解锁所选文件？";
var MSG_WEBCOMMON_20 = "无法取得用户信息文档！";
var MSG_WEBCOMMON_21 = "取得RTX登录信息失败！请联系管理员。";
var MSG_WEBCOMMON_22 = "您想查看的文件已经被删除,请您酌情处理此文件或与系统管理员联系！";
var MSG_WEBCOMMON_23 = "起始日期错误，请重新填写！";
var MSG_WEBCOMMON_24 = "结束日期错误，请重新填写！";
var MSG_WEBCOMMON_25 = "结束时间须晚于开始时间，请重新填写！";
var MSG_WEBCOMMON_26 = "日期填写错误，请重新填写！\n日期填写格式如：2004-12-15";
var MSG_WEBCOMMON_27 = "Copyright&copy; 2003-2006  版权所有";
var MSG_WEBCOMMON_28 = " 安装版本：";
var MSG_WEBCOMMON_29 = " 更新版本：";
var MSG_WEBCOMMON_30 = "缺少参数：数据库名称。";
var MSG_WEBCOMMON_31 = "缺少参数：文档ID。";
var MSG_WEBCOMMON_32 = "缺少参数：操作编号。";
var MSG_WEBCOMMON_33 = "操作失败，请查看系统日志。";
var MSG_WEBCOMMON_34 = "&nbsp;<IMG SRC=\"/gflow/images/loading.gif\" BORDER=\"0\" align=\"absmiddle\">&nbsp;数据读取中...";
var MSG_WEBCOMMON_35="还原成功！"
var MSG_WEBCOMMON_36="还原失败！"

//top
var MSG_TOP_1 = "公共菜单XSL文件navigation_menu.xsl有误或不存在，请联系管理员！";
var MSG_TOP_2 = "公共菜单XSL文件navigation_bar.xsl有误或不存在，请联系管理员！";
var MSG_TOP_3 = "公共菜单XML文件navigation.xml有误或不存在，请联系管理员！";
var MSG_TOP_4 = "公共菜单占位符navBar不存在，请联系管理员！";
var MSG_TOP_5 = "无法取得用户邮箱信息！";
var MSG_TOP_6 = "导航菜单装载中...";
var MSG_TOP_7 = "(无标题)";
var MSG_TOP_8 = "《";
var MSG_TOP_9 = "》";
var MSG_TOP_10 = "短消息提示";
var MSG_TOP_11 = ":"

//更改密码
var MSG_CHANGEPASS_1 = "请录入旧密码！";
var MSG_CHANGEPASS_2 = "新密码不能为空，请录入新密码！";
var MSG_CHANGEPASS_3 = "确认新密码不能为空，请录入确认新密码！";
var MSG_CHANGEPASS_4 = "新密码同确认密码不相符，请审核！";
var MSG_CHANGEPASS_5 = "输入的密码与原有密码不相符，请审核！";
var MSG_CHANGEPASS_6 = "用户不存在或信息文档缺失！请联系管理员。";
var MSG_CHANGEPASS_7 = "更改密码成功！\n系统将关闭当前的WEB页面窗口，请您稍后再登录系统！";

//日历
var MSG_CALENDAR_1 = "一月";
var MSG_CALENDAR_2 = "二月";
var MSG_CALENDAR_3 = "三月";
var MSG_CALENDAR_4 = "四月";
var MSG_CALENDAR_5 = "五月";
var MSG_CALENDAR_6 = "六月";
var MSG_CALENDAR_7 = "七月";
var MSG_CALENDAR_8 = "八月";
var MSG_CALENDAR_9 = "九月";
var MSG_CALENDAR_10 = "十月";
var MSG_CALENDAR_11 = "十一月";
var MSG_CALENDAR_12 = "十二月";
var MSG_CALENDAR_13 = "日历";
var MSG_CALENDAR_14 = "年 ";
var MSG_CALENDAR_15 = "日"; //周日
var MSG_CALENDAR_16 = "一"; //周一
var MSG_CALENDAR_17 = "二"; //周二
var MSG_CALENDAR_18 = "三"; //周三
var MSG_CALENDAR_19 = "四"; //周四
var MSG_CALENDAR_20 = "五"; //周五
var MSG_CALENDAR_21 = "六"; //周六

//“更多”
var MSG_MOREFILE_1 = "取得公文信息列表信息失败！";
var MSG_MOREFILE_2 = "公文信息XSL无效或不存在！";
var MSG_MOREFILE_3 = "公文信息占位符不存在！";

//系统短消息提醒
var MSG_REMINDER_1 = "不再提醒此消息";

//公文类 在gflowsource.js
var MSG_GFLOWSOURCE_1 = "页面占位符不存在，请联系管理员！";
var MSG_GFLOWSOURCE_2 = "初始化流程节点信息失败，请与系统管理员联系！";
var MSG_GFLOWSOURCE_3 = "无法成功解锁！";
var MSG_GFLOWSOURCE_4 = "读取主题词失败，请确认主题词库的配置是否正确！";
var MSG_GFLOWSOURCE_5 = "当前文档为新文档，请先点击“保存”按钮！";
var MSG_GFLOWSOURCE_6= "修改登记信息";
var MSG_GFLOWSOURCE_7= "调用检测流程节点状态的代理失败！";
var MSG_GFLOWSOURCE_8= "请签署您的意见，再执行“下一步”操作";

//目录树类
var MSG_TREE_1 = "尚未定义任何节点";

//DHTML编辑器
var MSG_EDITOR_1 = "你没有选择任何图片文件！";
var MSG_EDITOR_2 = "图片描述不能为空！";
var MSG_EDITOR_3 = "宽度只能输入数字！";
var MSG_EDITOR_4 = "高度只能输入数字！";
var MSG_EDITOR_5 = "边框宽度只能输入数字！";


//如果页面上存在eleVersionDiv，则显示版权信息
window.attachEvent("onload", showVersion);


/*
 *功能：取得指定页数数据列表
 *参数：1.pageNum - 指定页数
 			2.searchStr - 搜索条件字符串。如不需要请勿传递此参数。
 			3.xmlFile - 模块配置文件。默认为moduleconfig.xml。如不需要更改请勿传递此参数。
 			4.spanName - 占位符id。默认为GflowFileXML。如不需要更改请勿传递此参数。
 			5.xslFile- 对应的XSL文件，如果不传则取默认配置。
 *备注：如果有分类下拉框，则显示该分类数据。如传递搜索条件参数，则执行搜索。
 */
function GetXMLStr(pageNum, searchStr, xmlFile, spanName,xslFile){
	//取得各参数默认值
	if(! xmlFile || xmlFile.trim() == "")
		xmlFile = "moduleconfig.xml";
	if(! spanName || spanName.trim() == "")
		spanName = "GflowFileXML";

	//首先取得配置文件的参数
	var strDbName, strPageName, strAgentName, strXslName;
	var node, childs, child, strLocation, blnResult;
	strLocation = document.URL;
	if(strLocation.indexOf("?") == -1){
		strLocation = strLocation.substring(strLocation.lastIndexOf("/")+1, strLocation.length);
	} else{
		strLocation = strLocation.substring(strLocation.lastIndexOf("/")+1, strLocation.indexOf("?"));
	}
	var xDoc = new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async = true;
	xDoc.onreadystatechange = _getModuleConfig;
	xDoc.load(xmlFile);


	function _getModuleConfig(){
		if(xDoc.readyState == 4){
			if(xDoc.xml == ""){
				alert(MSG_WEBCOMMON_2 + "\n(" + xmlFile + ")");
				return;
			}
			strDbName = xDoc.selectSingleNode("/GFLOWINTERFACE/DBINFO/DBNAME").text; //数据库名称
			if(strDbName == ""){
				alert(MSG_WEBCOMMON_3);
				return;
			}
			node = xDoc.selectSingleNode("/GFLOWINTERFACE/WEBPAGEINFO");
			if(node == null){
				alert(MSG_WEBCOMMON_3);
				return;
			}
			childs = node.childNodes;
			for(var i = 0; i<childs.length; i++){
				child = childs[i];
				strPageName = child.getAttribute("PAGENAME");
				if(strPageName.toLowerCase() == strLocation.toLowerCase()){
					strAgentName = child.getAttribute("AGENTNAME"); //代理名称
					if(! xslFile || xslFile.trim() == ""){
						strXslName = child.getAttribute("XSLNAME"); //XSL文件名称
					} else{
						strXslName = xslFile;
					}
				}
			}

			//取得页数
			if(! isNumeric(pageNum))
				pageNum = 1;

			//合成生成XML文件的URL链接
			var tmpURL = "/gflow/" + strDbName + "/" + strAgentName + "?OpenAgent&PageNum=" + pageNum;

			if(searchStr && searchStr.trim() != ""){
				//取得搜索条件
				if(searchStr.indexOf("&") != 0)
					searchStr = "&" + searchStr;
				tmpURL += searchStr;
			} else{
				//取得分类信息
				var listItem = document.all.fType;
				if(listItem && listItem.type == "select-one")
				tmpURL += "&type=" + listItem.value;
			}
			//alert(tmpURL);
			//显示数据
			displayData(tmpURL, strXslName, spanName);
		}
	}
}


/*
 *功能：初始化页面菜单
 *参数：xmlFileName - xml文件名。默认为moduleconfig.xml
 		xslFileName - xsl文件名。默认为/gflow/submenu.xsl
 		spanName - 显示菜单的span名。默认为GflowMenuXML
 */
function initSubMenu(xmlFileName, xslFileName, spanName){
	var roleFlag = "ROLE_";
	var menuXML, menuXSL;

	if(! xmlFileName || xmlFileName.trim() == "")
		xmlFileName = "moduleconfig.xml";
	if(! xslFileName || xslFileName.trim() == "")
		xslFileName = "/gflow/submenu.xsl";
	if(! spanName || spanName.trim() == "")
		spanName = "GflowMenuXML";

	menuXML = new ActiveXObject("Microsoft.XMLDOM");
	menuXML.async = false;
	menuXML.load(xmlFileName);
	if(menuXML.xml == ""){
		alert(MSG_WEBCOMMON_2);
		return;
	}

	menuXSL = new ActiveXObject("Microsoft.XMLDOM");
	menuXSL.async = false;
	menuXSL.load(xslFileName);
	if(menuXSL.xml == ""){
		alert(MSG_WEBCOMMON_8 + xslFileName);
		return;
	}

	var container = document.all(spanName);
	if(! container){
		alert(MSG_WEBCOMMON_9 + spanName);
		return;
	}

	container.style.display = "none";
	container.innerHTML = menuXML.transformNode(menuXSL);
	_checkProperty();
	container.style.display = "";

	getLocation(xmlFileName);


	function _checkProperty(){
		var spanName, roleName, roleFlagLength, db;
		roleFlagLength = roleFlag.length;
		db = getDbName();
		var menuItems = container.getElementsByTagName("span");
		for(var i = menuItems.length - 1; i >= 0; i--){
			spanName = menuItems[i].getAttribute("NAME");
			if(spanName.indexOf(roleFlag) == 0){
				roleName = spanName.substring(roleFlagLength);
				if(! _hasProperty(roleName, db)){
					menuItems[i].outerHTML = "";
				}
			}
		}
	}


	function _hasProperty(roleName, db){
		var result = false;
		var attributeName = db + "_" + roleName;
		if(top[attributeName]){
			result = (top[attributeName] == "1"? true: false);
		} else{
			result = isRoleEnabled(roleName, db);
			top[attributeName] = (result? "1": "0");
		}
		return result;
	}
}


/*
 *功能：取得“当前位置”
 *参数：xmlFileName - xml文件名。默认为moduleconfig.xml
 */
function getLocation(xmlFileName){
	var menuXML;

	if(! xmlFileName || xmlFileName.trim() == "")
			xmlFileName = "moduleconfig.xml";
	menuXML = new ActiveXObject("Microsoft.XMLDOM");
	menuXML.async = false;
	menuXML.load(xmlFileName);
	if(menuXML.xml == ""){
		alert(MSG_WEBCOMMON_2);
		return;
	}

	var selfUrl = getSelfPageName();
	var ifFound;
	var moduleTitle, pageTitle, pageNode, pages, pageInfo;
	moduleTitle = menuXML.selectSingleNode("/GFLOWINTERFACE/DBINFO/DBTITLE").text;
	pageNode = menuXML.selectSingleNode("/GFLOWINTERFACE/MENUINFO");
	pages = pageNode.childNodes;

	for(var i = 0; i < pages.length; i++){
		if(pages[i].getAttribute("MENULINK").toLowerCase() == selfUrl){
			pageTitle = pages[i].getAttribute("MENUNAME");
			break;
		}
	}

	var container = document.all.GflowLocationXML;
	if(! container){
		alert(MSG_WEBCOMMON_4 + "\n(GflowLocationXML)");
		return;
	}

	if(pageTitle  && pageTitle != "")
		container.innerHTML = moduleTitle + "<img src='/gflow/images/redarrow2.gif'>" + pageTitle;
	else
		container.innerText = moduleTitle;
}


/*
 *功能：取得moduleconfig.xml中的数据库名
 */
function getDbName(){
	var xDoc=new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async=false;
	xDoc.load("moduleconfig.xml");
	if (xDoc.xml == ""){
		alert(MSG_WEBCOMMON_2);
		return;
	}
	return xDoc.selectSingleNode("/GFLOWINTERFACE/DBINFO/DBNAME").text;
}


/*
 *功能：取得当前登录用户信息
 */
function UserLogin(){
	var xDoc=new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async=false;
	xDoc.load("/gflow/gsystemconfig.nsf/agentGetUserBasicInfo?OpenAgent&r=" + Math.random());
	if (xDoc.xml == ""){
		alert(MSG_WEBCOMMON_11);
		top.location.replace("/names.nsf?logout");
		return;
	}

	var userName = xDoc.selectSingleNode("/GFLOWINTERFACE/USERINFO/USER_USERNAME").text;
	if(userName == "Anonymous"){
		alert(MSG_WEBCOMMON_12);
		top.location.href = "/names.nsf?logout";
		return;
	}

	var userDept = xDoc.selectSingleNode("/GFLOWINTERFACE/USERINFO/USER_DEPARTMENT").text;
	var mailName = xDoc.selectSingleNode("/GFLOWINTERFACE/USERINFO/USER_MAILNAME").text;
	var infoDocUNID = xDoc.selectSingleNode("/GFLOWINTERFACE/USERINFO/USER_INFODOCUNID").text;
	var rtxSSO = xDoc.selectSingleNode("/GFLOWINTERFACE/USERINFO/USER_OAANDRTXSSO").text;
	var rtxIP = xDoc.selectSingleNode("/GFLOWINTERFACE/USERINFO/USER_RTXSERVERIP").text;
	var rtxPort = xDoc.selectSingleNode("/GFLOWINTERFACE/USERINFO/USER_RTXSERVERPORT").text;

	var doc=document.all;
	doc.UserName.innerText = userName;
	//doc.UserDept.innerText = userDept; //06.06piaoyl去掉用户部门。
	doc.LoginUserName.value = userName;
	doc.LoginUserMailName.value = mailName;
	doc.USERINFODOCUNID.value = infoDocUNID;
	doc.OAAndRTXSSO.value = rtxSSO;
	doc.RTXServerIP.value = rtxIP;
	doc.RTXServerPort.value = rtxPort;
	rtxLogin();
	loginContract();
}


//注销用户
function logOut()
{
  top.location.href = "/names.nsf?Logout&r=" + Math.random();
}


//piao于2006-4-18增加，显示/隐藏左侧树形结构
function HideTree()
{
	GflowLeftTree.style.display = "none";
	ArrowLeft.style.display = "none";
	ArrowRight.style.display = "";
	}
function ShowTree()
{
	GflowLeftTree.style.display = "";
	ArrowLeft.style.display = "";
	ArrowRight.style.display = "none";
	}


/*
 *功能：Web页面批量删除文档
 *参数：dbName - 数据库路径及文件名
 *备注：请先复制代理"agentBatchDelArticle"至数据库中
 */
function delDocument(dbName){
	var frm = event.srcElement.form;
	if(! frm)
		return;
	if(! dbName)
		dbName = getDbName();
	if((! dbName) || dbName == "")
		return;

	var strID = "";
	for (var i=0; i<frm.elements.length; i++){
		if (frm.elements[i].name == "checkbox" && frm.elements[i].checked){
			strID = strID + ";" + frm.elements[i].value;
		}
	}
	strID = strID.substring(1);
	if (strID == ""){
		alert(MSG_WEBCOMMON_13);
		return;
	}
	if (confirm(MSG_WEBCOMMON_14)){
		frm.action = "/gflow/" + dbName + "/agentBatchDelArticle?OpenAgent";
		frm.method = "post";
		frm.submit();
		GetXMLStr(1);
	}
}


/*
 *功能：全部选择
 */
function DelAll(){
	var frm = event.srcElement.form;
	if(! frm)
		return;
	var stat = frm.elements['checkboxall'].checked;
	var e;
	for(var i = 0; i < frm.elements.length; i++){
		e = frm.elements[i];
		if(e.type == "checkbox" && (!e.disabled))
			e.checked = stat;
	}
}


/*
功能：检查操作权限
*/
function CheckRoles(role){
	var strDbName,tmpURL,strRole;
	var xDoc=new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async=false;
	xDoc.load("moduleconfig.xml");
	strDbName=xDoc.selectSingleNode("/GFLOWINTERFACE/DBINFO/DBNAME").text; //数据库名称
	if(strDbName==""){
		alert(MSG_WEBCOMMON_3);
		return;
	}
	var tmpURL="/gflow/"+ strDbName +"/agentCheckRoles?OpenAgent&ROLE=" + role;

	xDoc.load(tmpURL);
	if(xDoc.xml==""){
		alert(MSG_COMMON_3 + "\n(" + tmpURL + ")");
	  top.location.href = "/names.nsf?login";
	}
	strRole=xDoc.selectSingleNode("/GFLOWINTERFACE/ROLES").text;
	if(strRole=="0"){
		return false;
	}else{
		return true;
	}
}


/*
 *功能：检查当前用户是否对某模块具有某角色
 *参数：
 			1.roleName - 要检查的角色
 			2.db - 要检查的模块。不传递此参数表示由模块配置文件取得
 *备注：请先复制代理"agentCheckRoles"至数据库中
 */
function isRoleEnabled(roleName, db){
	if( (! db) || db == "" )
		db = getDbName();
	if( (! db) || db == "" )
		return false;

	var xDoc=new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async=false;
	var tmpURL = "/gflow/" + db + "/agentCheckRoles?OpenAgent&ROLE=" + roleName + "&r=" + Math.random();
	xDoc.load(tmpURL);
	if(xDoc.xml == ""){
		alert(MSG_COMMON_3 + "\n(" + tmpURL + ")");
		return false;
	}
	var strResult = xDoc.selectSingleNode("/GFLOWINTERFACE/ROLES").text;
	if(strResult == "1")
		return true;
	else
		return false;
}


/*
 *功能：检查用户权限
 *参数：
 	1.roleName - 要检查的角色
 	2.targetUrl - 有权限则连接至此URL
 	3.isNotesElement - targetUrl是否为notes设计元素
 */
function checkPermission(roleName, targetUrl, isNotesElement){
	window.moveTo(0, 0);
	//window.resizeTo(800, 600);
	window.resizeTo(screen.availWidth, screen.availHeight);
	if (! isRoleEnabled(roleName)){
		alert(MSG_COMMON_4);
		window.opener = self;
		window.close();
		return;
	}

	if(isNotesElement){
		window.location.href = "/gflow/" + getDbName() + "/" + targetUrl;
	} else{
		window.location.href = targetUrl;
	}
}


/*
 *功能：检查用户权限，如满足则定向至指定页面，否则提示无权限。
 *参数：
 	1.roleName - 要检查的角色
 	2.targetUrl - 有权限则连接至此URL
 	3.isNotesElement - targetUrl是否为notes设计元素
 	4.openNewWindow - 是否新开窗口
 	5.errMsg - 错误提示
 *备注：请先复制代理"agentCheckRoles"至数据库中
 */
function checkAccess(roleName, targetUrl, isNotesElement, openNewWindow, errMsg){
	if (! isRoleEnabled(roleName)){
		if (errMsg && errMsg.length > 0)
			alert(errMsg);
		else
			alert(MSG_COMMON_4);
		return;
	}

	if(isNotesElement)
		targetUrl = "/gflow/" + getDbName() + "/" + targetUrl;

	if(openNewWindow)
		window.open(targetUrl);
	else
		window.location.href = targetUrl;
}



/*
 *功能：初始化类别列表
 *参数：listType - 列表种类。0-所有分类。1-私人分类或其他
 *备注：确保类别列表下拉框为fType
 */
function initTypeList(listType){
	//check the select element
	var listItem = document.all.fType;
	
	if((! listItem) || listItem.type != "select-one")
		return;

	//get db name
	var db = getDbName();
	
	if( (! db) || db == "" )
		return;

	//get type list
	var agentName;
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async=false;
	switch (listType){
		case 0:
			agentName = "agentGetAllTypeList";
			break;
		case 1:
			agentName = "agentGetTypeList";
			break;
		case 2:
			agentName = "agentGetAllTypeListA";//
			break;
		case 3:
			agentName = "agentGetAllTypeListB";
			break;
		case 4:
			agentName = "agentShowSysSort";
			break;
		default:
			agentName = "agentGetAllTypeList";
	}
	xmlDoc.load("/gflow/" + db + "/" + agentName + "?OpenAgent");
//alert("/gflow/" + db + "/" + agentName + "?OpenAgent");
//alert(xmlDoc.xml);
	if(xmlDoc.xml == ""){
		alert(MSG_COMMON_3);
		return;
	}
	var nameList = xmlDoc.selectSingleNode("/GFLOWINTERFACE/TYPELINK/TYPENAME").text;
	var valueList = xmlDoc.selectSingleNode("/GFLOWINTERFACE/TYPELINK/TYPEID").text;

	var names = nameList.split(";");
	var values = valueList.split(";");
//alert(names);
	// init the select element
	listItem.options.length = 0;
	for(var i = 0; i < names.length; i++){
		if(names[i].trim() != ""){
			listItem.options.length++;
			if(names[i] == "#"){
				listItem.options[i].text = MSG_WEBCOMMON_15;
				listItem.options[i].value = MSG_WEBCOMMON_15;
			} else{
				listItem.options[i].text = names[i];
				listItem.options[i].value = values[i];
			}
		}
	}
}


/*
 *功能：检查当前用户是否匿名
 */
function isAnonymous(){
	switch(getUsername("fullname")){
		case "Anonymous":
		case "":
			return true;
		default:
			return false;
	}
}

/*
 *功能：检查当前用户是否匿名，匿名则要求重新登录，非匿名则重定向至系统首页。
 */
function loginRedirect(){
	if (isAnonymous()){
		top.location.replace("/names.nsf?Login");
	} else{
		var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		xmlHttp.Open("Get", "/gflow/gsystemconfig.nsf/agentCheckPersonalIndex?OpenAgent&r=" + Math.random(), false);
		xmlHttp.Send();
		if(xmlHttp.ResponseXML.text == "True")
			top.location.replace("/gflow/personalhome.htm");
		else
			top.location.replace("/gflow/home.htm");
	}
}


/*
 *功能：取得当前用户登录名
 *参数：nameType - 名称种类。shortname/fullname/lastname/abbname
 */
function getUsername(nameType){
	var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	xmlHttp.Open("Get", "/GFlow/gsystemconfig.nsf/agentGetUsername?OpenAgent&type=" + nameType.toUpperCase() + "&r=" + Math.random(), false);
	xmlHttp.Send();
	return xmlHttp.ResponseXML.text;
}


//更新数据库全文索引
function updateFTindex(){
	var db = getDbName();
	if(! db || db == "")
		return;
	var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	xmlhttp.Open("Get","/GFlow/" + db + "/UpdateFTIndexAgent?OpenAgent" , false);
	xmlhttp.Send();
}


/*
功能：选择人员或者部门
*参数：
	1.nameType - people,dept,all任选其一，对应仅选人、仅选部门、都选，其余值均认为all
	2.type - multi, single。多选或者单选。其余值均认为multi
	3.fieldName - 将选择结果回传给父窗口本域值
	4.info - 显示在选择表单上的提示语，不需要请传空值
*/
function selectName(nameType, type, fieldName, info){
	var n, t, f;
	if(fieldName.trim() == ""){
		alert(MSG_WEBCOMMON_16);
		return;
	}
	if(! document.all[fieldName]){
		alert(MSG_WEBCOMMON_17);
		return;
	}
	switch(nameType){
		case "people":
			n = "0";
			break;
		case "dept":
			n = "1";
			break;
		case "all":
			n = "2";
		default:
			n = "2";
	}
	switch(type){
		case "single":
			t = "0";
			break;
		case "multi":
			t = "1";
		default:
			t = "1";
	}
	var url = "/gflow/gflowsetting.nsf/selectNameForm?OpenForm&t="
				 + t + "&n=" + n + "&f=" + fieldName + "&i=" + info;
	window.open(url,'selName','resizable=no,top=150,left=200,width=600,height=400,scrollbars=no,status=no');
	/*
	var popWin = window.open(url,'selName','resizable,width=600,height=400,scrollbars=no,status=no');
	popWin.moveTo(100,100);
	*/

}


/*
 *功能：判断给定内容是否为数字
 *参数：sourceStr - 要检查的内容
 */
function isNumeric(sourceStr){
	sourceStr += "";
	var condition = /[^0-9]/;
	if ((!sourceStr) || sourceStr == "" || sourceStr.match(condition) != null)
		return false;
	else
		return true;
}


/*
 *功能：定义了String的一个方法用于去掉字符串两边的空格
 */
String.prototype.trim = function(){
    return this.replace(/(^\s*)|(\s*$)/g, "");
}


/*
 *功能：定义了String的一个方法用于转换HTML敏感字符
 */
String.prototype.escapeHTML = function(){
    return this.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("'", "&apos;").replace("\"", "&quot;");
}


/*
 *功能：去掉字符串两边的空格
 *参数：sourceStr - 源字符串
 */
function trim(sourceStr){
	return sourceStr.replace(/(^\s*)|(\s*$)/g, "");
}



/*
 *功能：取得URL中传递的给定变量的值
 *参数：param - 变量名
 */
function getUrlParam(param){
 var params = decodeURI(window.location.search.substring(1)).split("&");
 var pos;
 for(var i = 0; i < params.length; i++){
  pos = params[i].indexOf("=");
  if(params[i].substring(0, pos) == param)
   return params[i].substring(pos + 1);
 }
 return "";
}


/*
 *功能：取得当前页面的名称
 */
function getSelfPageName(){
	var path = window.location.pathname;
	path = path.substring(path.lastIndexOf("/") + 1);
	var pos = path.indexOf("?")
	if(pos >= 0)
		path = path.substring(0, pos);
	return path.toLowerCase();
}


//取得IE版本 piaoyl于2006-4-30
function getIeVersion(){
	/*
   if(navigator.appVersion.indexOf("MSIE 6")==-1 && navigator.appVersion.indexOf("MSIE 7")==-1){
    //window.open("needie6.htm","needie6popup","menu=no,scroll=no,width=300,height=200,left=150,top=150");
    top.location.href="/gflow/needie6.htm";
  }
  */
  /*
  else
  { alert("IE6"); }
  */
}



//版权信息 piaoyl于2006-4-30
function showVersion(){
	var versionDiv = document.all.eleVersionDiv;
	//如果页面上存在eleVersionDiv，则显示版权信息
	if(versionDiv){
		versionDiv.innerHTML = MSG_WEBCOMMON_27 + getGflowVersion();
	}
}


/*
 *功能：Web页面批量解锁文档（删除文章锁）
 *参数：dbName - 数据库路径及文件名
 *备注：请先复制代理"agentBatchUnlockArticle"至数据库中
 */
function unlockDocument(dbName){
	var frm = document.delForm;
	if(! frm)
		return;
	if(! dbName)
		dbName = getDbName();
	if((! dbName) || dbName == "")
		return;

	var strID = "";
	for (var i=0; i<frm.elements.length; i++){
		if (frm.elements[i].name == "checkbox" && frm.elements[i].checked){
			strID = strID + ";" + frm.elements[i].value;
		}
	}
	strID = strID.substring(1);
	if (strID == ""){
		alert(MSG_WEBCOMMON_18);
		return;
	}
	if (confirm(MSG_WEBCOMMON_19)){
		frm.action = "/gflow/" + dbName + "/agentBatchUnlockArticle?OpenAgent";
		frm.method = "post";
		frm.submit();
		GetXMLStr(1);
	}
}



/*
 * 功能：用户个人设置
 */
function personalSetting(){
	var item = top.frames["gflowtop"].document.all.USERINFODOCUNID;
	if(item){
		var docID = item.value.toUpperCase();
		if(docID == "#" || docID.trim() == "")
			//window.open("/gflow/gflowsetting.nsf/UserInfoform?OpenForm");
			window.pesonalForm.location = "/gflow/gflowsetting.nsf/UserInfoform?OpenForm";
		else
			//window.open("/gflow/gflowsetting.nsf/1/"+ docID + "?EditDocument");
			window.pesonalForm.location  = "/gflow/gflowsetting.nsf/1/"+ docID + "?EditDocument";
	} else
		alert(MSG_WEBCOMMON_20);
}


function rtxLogin(){
	var doc = document.all;
	try{
		if(doc.OAAndRTXSSO.value != 1)
			return;
		if(isAnonymous())
			return;
		if (document.cookie.indexOf("RTXLogined") >= 0)
			return;

		var xDoc = new ActiveXObject("Microsoft.XMLDOM");
		xDoc.async = false;
		xDoc.load("/gflow/gsystemconfig.nsf/agentGetUserLoginInfo?OpenAgent");
		if(xDoc.xml == ""){
			alert(MSG_WEBCOMMON_21);
			return;
		}
		var shortName = xDoc.selectSingleNode("/GFLOWINTERFACE/SHORTNAME").text;
		var pwd = xDoc.selectSingleNode("/GFLOWINTERFACE/PWD").text;
		var rtxAPI=new ActiveXObject("RTXClient.RTXAPI");
		var objProp = rtxAPI.GetObject("Property");

    objProp.Value("RTXUsername") = shortName.trim();
    objProp.Value("Password")  = pwd.trim();
    objProp.Value("ServerAddress")  = doc.RTXServerIP.value.trim();
    objProp.Value("ServerPort")  = doc.RTXServerPort.value.trim();
    rtxAPI.Call(2, objProp);
    document.cookie = "RTXLogined";
	}
    catch(err) {
		//alert("rtxLogin函数错误！\n错误名称: " + err.name+" \n错误信息: " + err.message);
	}
}


/*
 * 功能：防止页面显示“单击以激活并使用此控件”
 */
function LoadFlash(url,wmode,width,Height){
	document.write(
	'<embed src="' + url + '" wmode=' + wmode +
	' quality="high" pluginspage=http://www.macromedia.com/go/getflashplayer type="application/x-shockwave-flash" width="' + width +
	'" height="' + Height + '"></embed>');
}


/*
 * 功能：添加至“我的桌面”
 */
function addToMyDesk(sourceUrl){
	var targetUrl = "/gflow/gflowevent.nsf/frmDraftLink?OpenForm";
	if(sourceUrl && sourceUrl != "")
		targetUrl += "&url=" + sourceUrl;
	window.open(targetUrl, "myjoblink", "left=200,top=200,width=500,height=200");
}


/*
 *功能：检查当前用户是否具有后台管理角色
 */
function checkManageAccess(){
	if(! isRoleEnabled(MSG_ROLE_2, "gflowsetting.nsf")){
		alert(MSG_COMMON_4);
		top.location.href = "/names.nsf?Logout";
		//top.close();
	}
}



function DrafterFlowFile()
{
  //起草文件
  for(i = 0; i < document.DraftForm.elements.length; i++ )
  {
    var e = document.DraftForm.elements[i];
    //读取选中的起草文件形式
    if(e.type == "radio" & e.checked == true)
    {
       window.open(e.value);
    }
  }

}


/*
功能：得到文档的URL，并通过代理对其进行分析
*/
function getDocUrl(urlStr){
	// 声明一个XMLHTTP对象。
	var xmlHTTP = new ActiveXObject ("Microsoft.XMLHTTP");
	var tmpURL="/gflow/gflowsetting.nsf/agentExplainUrl?OpenAgent&DOCURL=" + urlStr;
  xmlHTTP.Open("Get", tmpURL, false);
	xmlHTTP.Send();
	var rt = xmlHTTP.responseXML.text;
	if (rt == "True"){
			window.open(urlStr);
	 }else{
	 	if (rt == "Fail"){
				 alert(MSG_WEBCOMMON_22);
	 		}
	}
}



/*
 *功能：读取指定xml数据并用指定xsl解析，将得到的html片段注入指定id的页面容器内
 *参数：1.xmlName - 指定xml，一般为xml路径及文件名或者可返回xml的代理。
 		2.xslName - 指定xsl，一般为xsl路径文件名。
 		3.containerID_or_Obj - 要注入html片段的页面容器的id/name或该容器对象本身。
 */
function displayData(xmlName, xslName, containerID_or_Obj){
	/* Create a new XMLDOM object to talk to the Web server */
	var xmlDoc = false;
	xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

	if(! xmlDoc){
		alert(MSG_WEBCOMMON_5);
		return;
	}

	//Build the URL to connect to
	var url = xmlName.trim();
	var xsl = xslName.trim();
	var xslDoc = false;

	//Get container
	var container = null;
	switch(typeof(containerID_or_Obj)){
		case "object":
			container = containerID_or_Obj;
			break;
		case "string":
			var cID = containerID_or_Obj.trim();
			container = document.getElementById(containerID_or_Obj);
			if(! container)
				container = document.all(containerID_or_Obj);
			break;
		default:
	}
	if(! container){
		alert(MSG_WEBCOMMON_4 + "\n(" + containerID_or_Obj + ")");
		return;
	}
	container.innerHTML = MSG_WEBCOMMON_34;

	//avoid browser cache
	if(url.indexOf("?") > 0)
		url += "&r=" + Math.random();

	// Setup a function for the server to run when it's done
	xmlDoc.onreadystatechange = _loadXSL;

	// Open a connection to the server
	xmlDoc.async = true;
	xmlDoc.load(url);


	//load XSL
	function _loadXSL(){
		if (xmlDoc.readyState == 4) {
			if(xmlDoc.xml == ""){
				alert(MSG_WEBCOMMON_6 + "\n(" + url + ")");
				return;
			}

			xslDoc = new ActiveXObject("Microsoft.XMLDOM");
			xslDoc.async = true;
			xslDoc.onreadystatechange = _updatePage;
			xslDoc.load(xsl);
		}
	}

	//Update page content
	function _updatePage() {
		if (xslDoc.readyState == 4) {
			if(xslDoc.xml == ""){
				alert(MSG_WEBCOMMON_7 + "\n(" + xsl + ")");
				return;
			}
			container.innerHTML = xmlDoc.transformNode(xslDoc);

			try{

			} catch(ex){
				//读取当前的用户信息
				if(document.isLoginForm){
					var strLoginUserName = document.isLoginForm.LoginUserName.value;
					if (strLoginUserName == "Anonymous")	{
						//当前登录的用户为Anonymous时跳转到登录页面
						top.location.href = "/names.nsf?login";
						blnResult = false;
					} else{
						blnResult = true;
					}
				}
			}
		}
	}
}




/*
 *功能：检查给定值是否为空
 *参数：1.fieldValue -- 要检查的值
	   2.msg -- 提示信息
 *返值：true/false
 */
function checkEmpty(fieldValue,msg){
	if (trim(fieldValue) == ""){
		alert(msg);
		return false;
	}
	return true;
}


/*
 *功能：检查给定值是否为数值
 *参数：1.fieldValue -- 要检查的值
	   2.msg -- 提示信息
 *返值：true/false
 */
function checkNum(fieldValue,msg){
	var tempStr = "";
	var checkStr = "0123456789.";
	var dotNum = 0;
	if (fieldValue.indexOf(".") == 0){
		alert(msg);
		return false;
	}
	for (var i=0;i<fieldValue.length;i++){
		tempStr = fieldValue.substring(i,i+1);
		if (checkStr.indexOf(tempStr) < 0){
			alert(msg);
			return false;
		}
		if (tempStr == "."){
			dotNum = dotNum + 1;
			if (dotNum > 1){ //出现了多个小数点
				alert(msg);
				return false;
			}
		}
	}
	return true;
}


/*
 *功能：检查所选日期有效性
 *返值：true/false
 */
function checkDate(){
	var doc = document.all;
	//检查起始时间
	var startYear = doc.fStartYear.value;
	var startMonth = doc.fStartMonth.value;
	var startDay = doc.fStartDay.value;
	var startHour = doc.fStartHour.value;
	var startMinute = doc.fStartMinute.value;
	var d1 = new Date(startYear,startMonth - 1,startDay,startHour,startMinute);
	var newStr = d1.getFullYear() + "-" + (d1.getMonth() + 1) + "-" + d1.getDate() + " " + d1.getHours() + ":" + d1.getMinutes();
	var oldStr = startYear + "-" + startMonth + "-" + startDay + " " + startHour + ":" + startMinute;
	if (newStr != oldStr){
		alert(MSG_WEBCOMMON_23);
		return false;
	}
	//检查结束时间
	var endYear = doc.fEndYear.value;
	var endMonth = doc.fEndMonth.value;
	var endDay = doc.fEndDay.value;
	var endHour = doc.fEndHour.value;
	var endMinute = doc.fEndMinute.value;
	var d2 = new Date(endYear, endMonth - 1,endDay,endHour,endMinute);
	var newStr = d2.getFullYear() + "-" + (d2.getMonth() + 1) + "-" + d2.getDate() + " " + d2.getHours() + ":" + d2.getMinutes();
	var oldStr = endYear + "-" + endMonth + "-" + endDay + " " + endHour + ":" + endMinute;
	if (newStr != oldStr){
		alert(MSG_WEBCOMMON_24);
		return false;
	}
	//检查时间先后
	if (d2 - d1 <= 0){
		alert(MSG_WEBCOMMON_25);
		return false;
	}
	return true;
}


/*
 *功能：检查手工输入的日期格式是否正确。格式2004-5-8 or 2004-05-08
 *参数：fieldName -- 要检查的域名
 *返值：true/false
 */
function checkInputDate(fieldName){
	var oldStr = fieldName.value;
	if (oldStr == ""){
		return true;
	}
	var dateArray = oldStr.split("-");
	for (var i = 0;i<dateArray.length;i++){
		if (dateArray[i].length == 2 && dateArray[i].indexOf("0") == 0){
			dateArray[i] = dateArray[i].substring(1,3)
		}
	}
	var d1 = new Date(dateArray[0],dateArray[1] - 1,dateArray[2]);
	oldStr = dateArray[0] + "-" + dateArray[1] + "-" + dateArray[2];
	var newStr = d1.getFullYear() + "-" + (d1.getMonth() + 1) + "-" + d1.getDate();
	if (newStr != oldStr){
		alert(MSG_WEBCOMMON_26);
		return false;
	}
	return true;
}


/*
 功能：去掉域值两边的空格，返回处理后的字符串。
 参数：fileName 域值名称
*/
function TrimValue(fieldName){
	strVa=document.all(fieldName).value;
	document.all(fieldName).value=trim(strVa);
}


/*
 功能：去掉域值两边的空格并转换成小写，返回处理后的字符串。
 参数：fileName 域值名称
*/
function TrimLcase(fieldName){
	strVa=document.all(fieldName).value;
	document.all(fieldName).value=trim(strVa).toLowerCase();
}


/*
 *功能：弹出新窗口显示给定表单
 *参数：1.formName -- 指定表单
	   2.widthValue -- 窗口宽度
	   3.heightValue -- 窗口高度
 */
function popWin(formName,widthValue,heightValue){
	var doc = window.document.forms[0];
	var databasePath = document.URL.substring(0,document.URL.indexOf(".nsf")+4);
	var url = databasePath + "/" + formName + "?OpenForm";
	PopWin = window.open(url,'selectWin','resizable,width='+widthValue+',height='+heightValue+",scrollbars=no,status=no");
	PopWin.moveTo(200,150);
}


/*
 *功能：更改表单上所有按钮的样式
 */
function changeButtonClass(){
	for (var i=0;i<document.forms.length;i++){
		for (var j=0;j<document.forms[i].elements.length;j++){
			if (document.forms[i].elements[j].type == "button"){
				document.forms[i].elements[j].className = "buttonface";
			}
		}
	}
}


/*
 *功能：表单上所有单元格插入0*0的图像，防止内容未填写时单元格显示错误
 */
function insertImg(){
	for(j = 0; j < document.all.tags("TABLE").length; j++){
		Table = document.all.tags("TABLE")[j];
		Cells = Table.cells;
		for(i = 0; i < Cells.length; i++) {
			var eImg = new Image();
			eImg.width = 0;
			eImg.height = 0;
			Cells[i].appendChild(eImg);
		}
	}
}


/*
 *功能：添加日程安排
 *参数：
	1.subject - 标题
	2.startTime - 开始时间（yyyy-mm-dd hh:MM）
	3.endTime - 结束时间（yyyy-mm-dd hh:MM）
	4.place - 地点
 */
function addPlan(subject, startTime, endTime, place){
	var url = "/gflow/gdateplan.nsf/Calendar?OpenForm&s="
				 + subject +  "&st=" + startTime + "&et=" + endTime + "&p=" + place;
	var popWin = window.open(url,'addPlan','resizable,width=600,height=500,scrollbars=no,status=no');
	popWin.moveTo(100,100);
}


function haveIllegalValue(StringToCheck){
	//check illegal charactor
	var illegalValue;
	illegalValue = StringToCheck.indexOf("#")>=0 || StringToCheck.indexOf("/")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("%")>=0 || StringToCheck.indexOf("\\")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("?")>=0 || StringToCheck.indexOf("&")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("\"")>=0 || StringToCheck.indexOf("$")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("{")>=0 || StringToCheck.indexOf("}")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("[")>=0 || StringToCheck.indexOf("]")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("<")>=0 || StringToCheck.indexOf(">")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("(")>=0 || StringToCheck.indexOf(")")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("!")>=0 || StringToCheck.indexOf(",")>=0;
	illegalValue = illegalValue || StringToCheck.indexOf("\=")>=0;
	return illegalValue;
}


function getGflowVersion(){
	var topWin = top.frames[0];
	var resultStr = "";
	if(topWin.setupVer)
		resultStr += MSG_WEBCOMMON_28 + topWin.setupVer;
	if(topWin.updateVer)
		resultStr += MSG_WEBCOMMON_29 + topWin.updateVer;
	return resultStr;
}
/*
	功能：记录操作日志。
	参数：dbName-当前数据库名称。
		 docID-当前文档的UNID。
	 	 ActionNu-当前的操作编号。
*/
function RecordAction(dbName,docID,ActionNu){

	if(!dbName || dbName==""){
		alert(MSG_WEBCOMMON_30);
		return false;
	}
	/*
	if(!docID || docID==""){
		alert(MSG_WEBCOMMON_31);
		return false;
	}
	*/
	if(!ActionNu || ActionNu==""){
		alert(MSG_WEBCOMMON_32);
		return false;
	}
	var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
	var tmpURL="/gflow/gdictionary.nsf/agentSaveActionLog?OpenAgent&DN="+ dbName +"&ID="+ docID+"&NB="+ActionNu+"&R="+Math.random();
	xmlHTTP.Open("Get",tmpURL,false);
	xmlHTTP.Send();
	return true;
}

/*
 *功能：记录操作日志。
 */
function RecordLog(){
	this.strDb=""; //数据库名称
	this.strId=""; //文档ID
	this.strNum=""; //操作编号
	this.strRemark=""; //备注

	this.Record=function(){
			if(this.strDb==""){
					alert(MSG_WEBCOMMON_30);
					return false;
				}

			if(this.strNum==""){
					alert(MSG_WEBCOMMON_32);
					return false;
				}
				var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
				var tmpURL="/gflow/gdictionary.nsf/agentSaveActionLog?OpenAgent&DN="
					+ this.strDb +"&ID="+ this.strId +"&NB="+ this.strNum
					+"&RM="	+ this.strRemark + "&r=" + Math.random();
				xmlHTTP.Open("Get",tmpURL,false);
				xmlHTTP.Send();
				return true;
		}
}


function hideAllMenu(){
	var oPopup = top.frames["gflowtop"].createPopup();
	oPopup.show(0, 0, 1, 1, document);
	oPopup.hide();
}


//#################
//## 以下为选择日期的函数 ##
//#################
var weekend = [0,6];
var weekendColor = "#FFFFD7";
var fontface = "Verdana";
var fontsize = 2;

var gNow = new Date();
var ggWinCal;
isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;

Calendar.Months = [MSG_CALENDAR_1, MSG_CALENDAR_2, MSG_CALENDAR_3, MSG_CALENDAR_4, MSG_CALENDAR_5, MSG_CALENDAR_6,
MSG_CALENDAR_7, MSG_CALENDAR_8, MSG_CALENDAR_9, MSG_CALENDAR_10, MSG_CALENDAR_11, MSG_CALENDAR_12];


Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
	if ((p_month == null) && (p_year == null))	return;

	if (p_WinCal == null)
		this.gWinCal = ggWinCal;
	else
		this.gWinCal = p_WinCal;

	if (p_month == null) {
		this.gMonthName = null;
		this.gMonth = null;
		this.gYearly = true;
	} else {
		this.gMonthName = Calendar.get_month(p_month);
		this.gMonth = new Number(p_month);
		this.gYearly = false;
	}

	this.gYear = p_year;
	this.gFormat = p_format;
	this.gBGColor = "white";
	this.gFGColor = "black";
	this.gTextColor = "black";
	this.gHeaderColor = "black";
	this.gReturnItem = p_item;
}

Calendar.get_month = Calendar_get_month;
Calendar.get_daysofmonth = Calendar_get_daysofmonth;
Calendar.calc_month_year = Calendar_calc_month_year;
Calendar.print = Calendar_print;

function Calendar_get_month(monthNo) {
	return Calendar.Months[monthNo];
}

function Calendar_get_daysofmonth(monthNo, p_year) {
	if ((p_year % 4) == 0) {
		if ((p_year % 100) == 0 && (p_year % 400) != 0)
			return Calendar.DOMonth[monthNo];

		return Calendar.lDOMonth[monthNo];
	} else
		return Calendar.DOMonth[monthNo];
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	var ret_arr = new Array();

	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}

	return ret_arr;
}

function Calendar_print() {
	ggWinCal.print();
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	var ret_arr = new Array();

	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}

	return ret_arr;
}


new Calendar();

Calendar.prototype.getMonthlyCalendarCode = function() {
	var vCode = "";
	var vHeader_Code = "";
	var vData_Code = "";

	vCode = vCode + "<TABLE width=100% height='75%' BORDER=1 CELLSPACING=0 CELLPADDING=0 bordercolor='#FFFFD7' BGCOLOR='#FFE8A2'";

	vHeader_Code = this.cal_header();
	vData_Code = this.cal_data();
	vCode = vCode + vHeader_Code + vData_Code;

	vCode = vCode + "</TABLE>";

	return vCode;
}

Calendar.prototype.show = function() {
	var vCode = "";

	this.gWinCal.document.open();

	this.wwrite("<html>");
	this.wwrite("<head><title>" + MSG_CALENDAR_13 + "</title>");
	this.wwrite("<style type=\"text/css\"><!-- a {  font-size: 11px; color: #00 0000; text-decoration: none} a:hover {  font-size: 11px; color: #FF0000} --></style>");
	this.wwrite("</head>");

	this.wwrite("<body topmargin=2 leftmargin=4 " +
		"link=\"" + this.gLinkColor + "\" " +
		"vlink=\"" + this.gLinkColor + "\" " +
		"alink=\"" + this.gLinkColor + "\" " +
		"text=\"" + this.gTextColor + "\">");
	this.wwriteA("<FONT FACE='" + fontface + "' SIZE=2><B>");
	this.wwriteA(this.gYear + MSG_CALENDAR_14 + " " + this.gMonthName); //这里要按照不同语种进行调整
	this.wwriteA("</B><BR>");

	var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
	var prevMM = prevMMYYYY[0];
	var prevYYYY = prevMMYYYY[1];

	var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
	var nextMM = nextMMYYYY[0];
	var nextYYYY = nextMMYYYY[1];

	this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#FFCCCC' bordercolor='#FFFFD7'><TR><TD ALIGN=center>");
	this.wwrite("<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)-1) + "', '" + this.gFormat + "'" +
		");" +
		"\"><<<\/A></TD><TD ALIGN=center>");
	this.wwrite("<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\"><<\/A></TD><TD ALIGN=center>");
	this.wwrite("<A HREF=\"javascript:window.print();\">打印</A></TD><TD ALIGN=center>");
	this.wwrite("<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\">><\/A></TD><TD ALIGN=center>");
	this.wwrite("<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)+1) + "', '" + this.gFormat + "'" +
		");" +
		"\">>><\/A></TD></TR></TABLE>");

	vCode = this.getMonthlyCalendarCode();
	this.wwrite(vCode);

	this.wwrite("</font></body></html>");
	this.gWinCal.document.close();
}

Calendar.prototype.showY = function() {
	var vCode = "";
	var i;
	var vr, vc, vx, vy;		// Row, Column, X-coord, Y-coord
	var vxf = 285;			// X-Factor
	var vyf = 200;			// Y-Factor
	var vxm = 10;			// X-margin
	var vym;				// Y-margin
	if (isIE)	vym = 75;
	else if (isNav)	vym = 25;

	this.gWinCal.document.open();

	this.wwrite("<html>");
	this.wwrite("<head><title>Calendar</title>");
	this.wwrite("<style type='text/css'>\n<!--");
	for (i=0; i<12; i++) {
		vc = i % 3;
		if (i>=0 && i<= 2)	vr = 0;
		if (i>=3 && i<= 5)	vr = 1;
		if (i>=6 && i<= 8)	vr = 2;
		if (i>=9 && i<= 11)	vr = 3;

		vx = parseInt(vxf * vc) + vxm;
		vy = parseInt(vyf * vr) + vym;

		this.wwrite(".lclass" + i + " {position:absolute;top:" + vy + ";left:" + vx + ";}");
	}
	this.wwrite("-->\n</style>");
	this.wwrite("</head>");

	this.wwrite("<body " +
		"link=\"" + this.gLinkColor + "\" " +
		"vlink=\"" + this.gLinkColor + "\" " +
		"alink=\"" + this.gLinkColor + "\" " +
		"text=\"" + this.gTextColor + "\">");
	this.wwrite("<FONT FACE='" + fontface + "' SIZE=2><B>");
	this.wwrite("Year : " + this.gYear);
	this.wwrite("</B><BR>");

	var prevYYYY = parseInt(this.gYear) - 1;
	var nextYYYY = parseInt(this.gYear) + 1;

	this.wwrite("<TABLE WIDTH='100% BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\" alt='Prev Year'><<<\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', null, '" + nextYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\">>><\/A>]</TD></TR></TABLE><BR>");

	var j;
	for (i=11; i>=0; i--) {
		if (isIE)
			this.wwrite("<DIV ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
		else if (isNav)
			this.wwrite("<LAYER ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");

		this.gMonth = i;
		this.gMonthName = Calendar.get_month(this.gMonth);
		vCode = this.getMonthlyCalendarCode();
		this.wwrite(this.gMonthName + "/" + this.gYear + "<BR>");
		this.wwrite(vCode);

		if (isIE)
			this.wwrite("</DIV>");
		else if (isNav)
			this.wwrite("</LAYER>");
	}

	this.wwrite("</font><BR></body></html>");
	this.gWinCal.document.close();
}

Calendar.prototype.wwrite = function(wtext) {
	this.gWinCal.document.writeln(wtext);
}

Calendar.prototype.wwriteA = function(wtext) {
	this.gWinCal.document.write(wtext);
}

Calendar.prototype.cal_header = function() {
	var vCode = "";

	vCode = vCode + "<TR>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + MSG_CALENDAR_15 + "</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + MSG_CALENDAR_16 + "</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + MSG_CALENDAR_17 + "</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + MSG_CALENDAR_18 + "</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + MSG_CALENDAR_19 + "</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + MSG_CALENDAR_20 + "</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='16%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>" + MSG_CALENDAR_21 + "</B></FONT></TD>";
	vCode = vCode + "</TR>";

	return vCode;
}

Calendar.prototype.cal_data = function() {
	var vDate = new Date();
	vDate.setDate(1);
	vDate.setMonth(this.gMonth);
	vDate.setFullYear(this.gYear);

	var vFirstDay=vDate.getDay();
	var vDay=1;
	var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
	var vOnLastDay=0;
	var vCode = "";

	vCode = vCode + "<TR>";
	for (i=0; i<vFirstDay; i++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(i) + "><FONT SIZE='2' FACE='" + fontface + "'> </FONT></TD>";
	}

	// Write rest of the 1st week
	for (j=vFirstDay; j<7; j++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
			"<A HREF='#' " +
				"onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
				this.format_data(vDay) +
				"';window.close();\">" +
				this.format_day(vDay) +
			"</A>" +
			"</FONT></TD>";
		vDay=vDay + 1;
	}
	vCode = vCode + "</TR>";

	for (k=2; k<7; k++) {
		vCode = vCode + "<TR>";

		for (j=0; j<7; j++) {
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
				"<A HREF='#' " +
					"onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
					this.format_data(vDay) +
					"';window.close();\">" +
				this.format_day(vDay) +
				"</A>" +
				"</FONT></TD>";
			vDay=vDay + 1;

			if (vDay > vLastDay) {
				vOnLastDay = 1;
				break;
			}
		}

		if (j == 6)
			vCode = vCode + "</TR>";
		if (vOnLastDay == 1)
			break;
	}


	for (m=1; m<(7-j); m++) {
		if (this.gYearly)
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
			"><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'> </FONT></TD>";
		else
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
			"><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'>" + m + "</FONT></TD>";
	}

	return vCode;
}

Calendar.prototype.format_day = function(vday) {
	var vNowDay = gNow.getDate();
	var vNowMonth = gNow.getMonth();
	var vNowYear = gNow.getFullYear();

	if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
		return ("<FONT COLOR=\"RED\"><B>" + vday + "</B></FONT>");
	else
		return (vday);
}

Calendar.prototype.write_weekend_string = function(vday) {
	var i;


	for (i=0; i<weekend.length; i++) {
		if (vday == weekend[i])
			return (" BGCOLOR=\"" + weekendColor + "\"");
	}

	return "";
}

Calendar.prototype.format_data = function(p_day) {
	var vData;
	var vMonth = 1 + this.gMonth;
	vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
	var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
	var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
	var vY4 = new String(this.gYear);
	var vY2 = new String(this.gYear.substr(2,2));
	var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;

	switch (this.gFormat) {
		case "MM\/DD\/YYYY" :
			vData = vMonth + "\/" + vDD + "\/" + vY4;
			break;
		case "MM\/DD\/YY" :
			vData = vMonth + "\/" + vDD + "\/" + vY2;
			break;
		case "MM-DD-YYYY" :
			vData = vMonth + "-" + vDD + "-" + vY4;
			break;
		case "MM-DD-YY" :
			vData = vMonth + "-" + vDD + "-" + vY2;
			break;

		case "DD\/MON\/YYYY" :
			vData = vDD + "\/" + vMon + "\/" + vY4;
			break;
		case "DD\/MON\/YY" :
			vData = vDD + "\/" + vMon + "\/" + vY2;
			break;
		case "DD-MON-YYYY" :
			vData = vDD + "-" + vMon + "-" + vY4;
			break;
		case "DD-MON-YY" :
			vData = vDD + "-" + vMon + "-" + vY2;
			break;

		case "DD\/MONTH\/YYYY" :
			vData = vDD + "\/" + vFMon + "\/" + vY4;
			break;
		case "DD\/MONTH\/YY" :
			vData = vDD + "\/" + vFMon + "\/" + vY2;
			break;
		case "DD-MONTH-YYYY" :
			vData = vDD + "-" + vFMon + "-" + vY4;
			break;
		case "DD-MONTH-YY" :
			vData = vDD + "-" + vFMon + "-" + vY2;
			break;

		case "DD\/MM\/YYYY" :
			vData = vDD + "\/" + vMonth + "\/" + vY4;
			break;
		case "DD\/MM\/YY" :
			vData = vDD + "\/" + vMonth + "\/" + vY2;
			break;
		case "DD-MM-YYYY" :
			vData = vDD + "-" + vMonth + "-" + vY4;
			break;
		case "DD-MM-YY" :
			vData = vDD + "-" + vMonth + "-" + vY2;
			break;

		default :
			//vData = vMonth + "\/" + vDD + "\/" + vY4;
			vData = vY4 + "-" + vMonth + "-" + vDD;
	}

	return vData;
}

function Build(p_item, p_month, p_year, p_format) {
	var p_WinCal = ggWinCal;
	gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format);

	gCal.gBGColor="white";
	gCal.gLinkColor="black";
	gCal.gTextColor="black";
	gCal.gHeaderColor="darkgreen";

	if (gCal.gYearly)	gCal.showY();
	else	gCal.show();
}

function show_calendar() {

	p_item = arguments[0];
	if (arguments[1] == null)
		p_month = new String(gNow.getMonth());
	else
		p_month = arguments[1];
	if (arguments[2] == "" || arguments[2] == null)
		p_year = new String(gNow.getFullYear().toString());
	else
		p_year = arguments[2];
	if (arguments[3] == null)
		p_format = "YYYY/MM/DD";
	else
		p_format = arguments[3];

	vWinCal = window.open("", "Calendar",
		"width=250,height=180,status=no,resizable=no,top=200,left=200");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, p_month, p_year, p_format);
}

function show_yearly_calendar(p_item, p_year, p_format) {

	if (p_year == null || p_year == "")
		p_year = new String(gNow.getFullYear().toString());
	if (p_format == null || p_format == "")
		p_format = "MM/DD/YYYY";

	var vWinCal = window.open("", "Calendar", "scrollbars=yes");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, null, p_year, p_format);
}

//----------------------------------------------------------------

/*
 *功能：生成更新文件并下载.
*/
function GetUpdateFile(){
		var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
		var urlTemp="/gflow/gflowupdate.nsf/agentCreateModuleXML?OpenAgent";
		xmlHTTP.open("Get",urlTemp,false);
		xmlHTTP.Send();
		var rt=xmlHTTP.responseXML.text;

		if(rt=="False"){
				alert(MSG_WEBCOMMON_33);
		}else{
				window.open(rt)
		}
}


/*
 *功能：根据浏览器版本不同关闭网页.
*/
function WinClose(){
	if(navigator.appVersion.indexOf("MSIE 6.0")!=-1){
		window.open('','_parent','');
		window.close();
	}
	if(navigator.appVersion.indexOf("MSIE 7.0")!=-1){
		window.open('','_parent','');
		window.close();
	}
}


/*
 *功能：当前文档的还原功能
*/
function RevertOneDoc(){
	var doc=document.all;
	var strDb=doc.fSourceDbName.value;
	var strId=doc.fSourceUnid.value;
	var itemL=document.getElementsByName("fSourceUnid");
	if (itemL.length>1){
			strId=itemL[0].value;
	}
	var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	var strURL="/gflow/gpersonrecycle.nsf/agentRevertDoc?OpenAgent&UNID="+ strDb+"*"+strId +"&r=" + Math.random();
	xmlHttp.Open("Get",strURL, false);
	xmlHttp.Send();
	var rt=xmlHttp.ResponseXML.text;
	switch (rt){
		case "True":
			alert(MSG_WEBCOMMON_35);
			opener.location.reload();
			WinClose();
			break;
		case "False":
			alert(MSG_WEBCOMMON_36);
			break;
	}
}


/*
 *功能：类——哈希表
*/
function HashTable(){
	this._hash = new Object();
	this.add = function (key, value){
		if(typeof(key) != "undefined"){
			if(this.contains(key) == false){
				this._hash[key] = typeof(value) == "undefined" ? null : value;
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
	this.remove = function (key){
		delete this._hash[key];
	}
	this.count = function (){
		var i = 0;
		for(var k in this._hash){
			i++;
		}
		return i;
	}
	this.items = function (key){
		return this._hash[key];
	}
	this.contains = function (key){
		return typeof(this._hash[key]) != "undefined";
	}
	this.clear = function (){
		for(var k in this._hash){
			delete this._hash[k];
		}
	}
}


/*
 *功能：更改页面上所有链接的目标(_blank,_self,...)
*/
function changeLinkTarget(targetType){
	var links = document.getElementsByTagName("A");
	for(var i = 0; i < links.length; i++){
		links[i].target = targetType;
	}
}


/////单点登陆
function openContract(){
	var xDoc = new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async = false;
	xDoc.load("/gflow/gsystemconfig.nsf/agentGetUserLoginInfo?OpenAgent");
	if(xDoc.xml == ""){
		alert(MSG_WEBCOMMON_21);
		return;
	}
	var shortName = xDoc.selectSingleNode("/GFLOWINTERFACE/SHORTNAME").text;
	var pwd = xDoc.selectSingleNode("/GFLOWINTERFACE/PWD").text;
        //alert(shortName + pwd );
	var win = window.open("http://www.ecspc.com:81/login.aspx?username=" + shortName
		+ "&password=" + pwd);
}
/////单点登陆查询所有合同
function openContractList(){
	var xDoc = new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async = false;
	xDoc.load("/gflow/gsystemconfig.nsf/agentGetUserLoginInfo?OpenAgent");
	if(xDoc.xml == ""){
		alert(MSG_WEBCOMMON_21);
		return;
	}
	var shortName = xDoc.selectSingleNode("/GFLOWINTERFACE/SHORTNAME").text;
	var pwd = xDoc.selectSingleNode("/GFLOWINTERFACE/PWD").text;
        //alert(shortName + pwd );
	var win = window.open("http://www.ecspc.com:81/login.aspx?username=" + shortName
		+ "&password=" + pwd);
	win.location = "http://www.ecspc.com:81/ContractsList.aspx";
}
////登陆合同库
function loginContract(){

	var xDoc = new ActiveXObject("Microsoft.XMLDOM");
	xDoc.async = false;
	xDoc.load("/gflow/gsystemconfig.nsf/agentGetUserLoginInfo?OpenAgent");
	if(xDoc.xml == ""){
		alert(MSG_WEBCOMMON_21);
		return;
	}
	var shortName = xDoc.selectSingleNode("/GFLOWINTERFACE/SHORTNAME").text;
	var pwd = xDoc.selectSingleNode("/GFLOWINTERFACE/PWD").text;

  var strURL = "http://www.ecspc.com:81/ForOA/OALogin.aspx?username=" + shortName	+ "&password=" + pwd;
	var win = window.open(strURL,'合同库', 'height=50, width=50, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
  top.window.focus();
  /*
  var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  var strURL = "http://www.ecspc.com:81/login.aspx?username=" + shortName	+ "&password=" + pwd;
	xmlHttp.Open("Get",strURL, false);
	xmlHttp.Send();
	 */ 

}