﻿/* 定义全局变量 */
var sAgt=navigator.userAgent.toLowerCase();
var Microsoft_IE=(sAgt.indexOf("msie")!=-1 && document.all) ? true : false;

var CurrentBodyWidth=0;				/* 当前页面宽度 */
var CurrentBodyHeight=0;			/* 当前页面高度 */

var sExec=0;					/* 停止执行命令 */
var jzError=0;					/* 连接到服务器出错 */
var jzErrorID=0;				/* 连接到服务器出错的ID */
var zOverLoad=false;				/* 页面是否加载完毕 */
var zTimerOut=60;				/* 网络超时时间(秒) */
var zTimeCounter=new Array();			/* 定时器计数器 */
var zTimerProc=new Array();			/* 时钟定时器 */
var WorkProgress=new Array();			/* BICQ请求队列 */
/* ########################################################################################################################### */
function $(id) {
	return document.getElementById(id);
};

function $get_(id) {
	return document.getElementById(id);
};

function StartTimerEx(objID,Proc) {
	zTimeCounter[objID]--;
	if (zTimeCounter[objID]<=0) {
		window.clearInterval(zTimerProc[objID]);
		zTimerProc[objID]=null;
		zTimeCounter[objID]=zTimerOut;
		$(objID).style.visibility="hidden";
		WorkProgress["id_"+zTimeCounter["ProcessID"+objID]]=null;// 注销ID
		if (Proc) eval(Proc);
	}
	$(objID).innerHTML=zTimeCounter[objID];
};

function StartTimer(objID,Proc) {
	zTimeCounter[objID]=zTimerOut;
	$(objID).style.visibility="inherit";
	zTimerProc[objID]=setInterval("StartTimerEx(\""+objID+"\",\""+Proc+"\");",1000);
};

/* 取得Cookie的值 */
function get_cookie(Name) {
	var search = Name + "=";
	var returnvalue = "";
	if (document.cookie.length > 0) {
		offset = document.cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = document.cookie.indexOf(";", offset);
			if (end == -1)
			end = document.cookie.length;
			returnvalue=unescape(document.cookie.substring(offset, end));
		}
	}
	return returnvalue;
};

/* 设置Cookie值 */
function set_cookie(Name,Value) {
	var UTime=new Date();
	UTime.setTime(UTime.getTime() + 1000*3600*24*365);
	document.cookie=Name+"="+Value+";expires="+UTime.toGMTString();
};

/* 将数据保存到UserData区域 */
function zSaveUserData(name,value) {
	if (!Microsoft_IE) return false;

	var oObj=$("__globalUserData");
	oObj.setAttribute(name,value);		//设置name属性值为value
	oObj.save(BICQ_UserDataVersion);	//存储到UserData区域
	return true;
};

/* 从UserData区域读取数据 */
function zLoadUserData(name) {
	if (!Microsoft_IE) return null;

	var oObj=$("__globalUserData");
	oObj.load(BICQ_UserDataVersion);	//从UserData区域载入
	return oObj.getAttribute(name);		//读取name属性值并返回
};

/* 保存客户端帐号信息 */
function SetUserCookieData(keyName,kData) {
	set_cookie(keyName,kData);
	zSaveUserData(keyName,kData);
};

/* 取得客户端帐号信息 */
function GetUserCookieData(keyName) {
	var sKey=get_cookie(keyName);
	sKey=(sKey=="" ? zLoadUserData(keyName) : sKey);
	return (sKey==null ? "" : sKey);
};

/*获取本地时间*/
function GetCurrentTime() {
	var TimeObj=new Date();
	var Time_Year=TimeObj.getYear();
	var Time_Month=TimeObj.getMonth()+1;
	var Time_Date=TimeObj.getDate();
	var Time_Hours=TimeObj.getHours();
	var Time_Minutes=TimeObj.getMinutes();
	var Time_Seconds=TimeObj.getSeconds();

	if (Time_Month<10) Time_Month="0"+Time_Month;
	if (Time_Date<10) Time_Date="0"+Time_Date;
	if (Time_Hours<10) Time_Hours="0"+Time_Hours;
	if (Time_Minutes<10) Time_Minutes="0"+Time_Minutes;
	if (Time_Seconds<10) Time_Seconds="0"+Time_Seconds;

	return (Time_Year+"-"+Time_Month+"-"+Time_Date+" "+Time_Hours+":"+Time_Minutes+":"+Time_Seconds);
};

/* 取得随机数 */
function GetRandom(N) {
	var Rand=Math.round(Math.random()*(N/2));
	return parseInt(Rand);
};

function GetOptionsValue(ID) {
	if ($(ID)) {
		return $(ID).options[$(ID).selectedIndex].value;
	}
	else {
		return null;
	}
};

/* 关闭主窗口 */
function WinClose() {
	if (Microsoft_IE) {
		parent.window.opener="xxx";
		parent.window.close();
	}
	else {
		window.open("","_parent","");
		window.close();
	}
};

/* 产生唯一队列ID */
function GetUniqueProgressKeyID() {
	var TimeObj=new Date();
	return TimeObj.getTime()+"_"+Math.ceil(Math.random()*1000000000000000);
};

/* 特殊字符过滤 */
function ReplaceAjaxWord(Msg) {
	Msg=Msg.replace(/&/gi,"\x7fa\x7f");
	Msg=Msg.replace(/\+/gi,"\x7fb\x7f");
	return Msg;
};

/* 输出JS错误 */
function JsErrorDebug(jsErr) {
	alert("Error:\r\n\r\n"+jsErr);
};

/* 执行JS脚本 */
function RunJavaScript(jStr) {
	/*在末尾添加;*/
	if (jStr.substr((jStr.length-3),3)!="\r;\n") jStr+="\r;\n";
	var jEnd=0;
	var jReStr="";
	while((jEnd=jStr.indexOf("\r;\n"))!=-1) {
		jReStr=jStr.substr(0,(jEnd+3));
		jStr=jStr.replace(jReStr,"");
		if (jReStr!="" && jReStr.length>4) {
			/*执行并返回结果*/
			if ((jReStr.substr(0,3)=="\r;\n") || (jReStr.substr(0,4)=="\r;;\n")) {
				var key_start=jReStr.indexOf("\n/*\x7f")+4;
				var key_end=jReStr.indexOf("\x7f*/");
				//alert(jReStr);
				var ProcessID=jReStr.substr(key_start,key_end-key_start);
				//window.status=ProcessID+"_"+WorkProgress["id_"+ProcessID];
				if (WorkProgress["id_"+ProcessID]==true) {
					WorkProgress["id_"+ProcessID]=null;// 注销ID
					try {
						eval(jReStr);
					}
					catch(e) {
						//IE@description,message,name,number
						//Fire Fox@message,fileName,lineNumber,stack,name

						if (Microsoft_IE) {
							var err=e.message;
							var url=e.name;
							var line=e.number;
						}
						else {
							var err=e.message;
							var url=e.fileName;
							var line=e.lineNumber;
						}
						httpconnect("index.php","action=error&agt="+sAgt+"&err=eval@"+err+"&url="+url+"&line="+line);
						if (JsAllErrorDebug==1) {
							JsErrorDebug("type=eval@\r\nurl="+url+"\r\nline="+line+"\r\nerror="+err+"\r\n");
							alert(jReStr);
						}
					}
				}
			}
			else {
				/*错误处理*/
				if (JsAllErrorDebug=="1") JsErrorDebug(jReStr.substr(0,jReStr.length-3));
			}
		}
	}
};

/* 显示系统错误窗口 */
function ShowAjaxErrorWindow() {
	CreateWindows("zAjaxError",0,0,320,200,"images/skins/bicq/title.gif","网络错误",1,1,0,0,zAjaxErrorHtml,"",0);
	ShowWindow("zAjaxError");
};

/* Ajax对象 */
function httpconnect(sURL,sVars,objID) {
	/* 如果连接到网络出现中断，则返回。 */
	// 此处去掉，否则断开后就不会再有连接了。断开自动重连
	//if (jzErrorID==12029 || jzErrorID==404) return;

	var sArg = null;
	var argv = httpconnect.arguments;
	var argc = httpconnect.arguments.length;
	var xmlHttp=null;
	if (window.XMLHttpRequest) {
		xmlHttp=new XMLHttpRequest();
	}
	else {
		var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
		for (var n = 0; n < MSXML.length; n ++) {
			try {
				xmlHttp = new ActiveXObject(MSXML[n]);
				break;
			}
			catch(e) {
				//JsErrorDebug(e.message);
			}
		}
	}

	try {
		if (argc>3) sArg=argv[3];
		if (sArg=="wait") {
			xmlHttp.open("POST",sURL,false);
		}
		else {
			xmlHttp.open("POST",sURL,true);
		}

		//var ProcessID=GetUniqueProgressKeyID();
		var ProcessID=11;
		WorkProgress["id_"+ProcessID]=true;
		zTimeCounter["ProcessID"+objID]=ProcessID;
		//alert(sURL+'---'+sVars);
		xmlHttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		//xmlHttp.setRequestHeader("Content-Type","text/html");
		xmlHttp.send("process_id="+ProcessID+"&"+sVars);

		xmlHttp.onreadystatechange = function() {
			if (xmlHttp.readyState==4) {
				if (xmlHttp.status=="200") {
					var ajaxText=xmlHttp.responseText;
					ajaxText=ajaxText.replace(/\xEF\xBB\xBF/g, "");
					if (sArg=="debug") {
						alert(ajaxText);
						//eval(ajaxText);
						//alert(xmlHttp.responseBody);
					}
					else {
						if (sExec==0) {
							window.clearInterval(zTimerProc[objID]);
							zTimerProc[objID]=null;
							zTimeCounter[objID]=zTimerOut;
							if (objID) {
								$(objID).style.visibility="hidden";
								$(objID).innerHTML=zTimeCounter[objID];
							}
							if(ajaxText.length)
							{
								//alert(sURL+'?'+sVars+'=='+ajaxText);
								eval(ajaxText);
							}
							//RunJavaScript(ajaxText);
						}
					}
				}
				else {
					jzErrorID=xmlHttp.status;
					if (jzError==1) return;

					/* 创建错误窗口 */
					if (jzErrorID==12029) {//发生网络中断错误
						//ShowAjaxErrorWindow();
					}
					else {
						CreateWindows("AjaxError",0,0,320,200,"images/skins/bicq/title.gif","系统错误",1,1,0,0,AjaxErrorHtml.replace(/ReplaceErrorID/gi,xmlHttp.status),"",0);
						ShowWindow("AjaxError");
					}
					jzError=1;
				}
			}
		}
	}
	catch(e) {
		if (sExec==0) alert('浏览器禁止跨域使用Ajax。');
		sExec=1;
	}
};

/* 系统帮助F1键 */
window.onhelp = function() {
	return false;
};

/* 错误捕获 */
window.onerror = function(err,url,line) {
	httpconnect("index.php","action=error&agt="+sAgt+"&err=error@"+err+"&url="+url+"&line="+line);
	if (JsAllErrorDebug==1) {
		JsErrorDebug("type=error@\r\nurl="+url+"\r\nline="+line+"\r\nerror="+err+"\r\n");
	}
	return true;
};
if(!Microsoft_IE){ //firefox innerText define
	HTMLElement.prototype.__defineGetter__("innerText",
		function() {
			return this.textContent;
		}
	);
	HTMLElement.prototype.__defineSetter__("innerText",
		function(sText) {
			this.textContent=sText;
		}
	);
};
