// #####################################################################################
// ##  COMMON_SCRIPT    Copyright (C) 1998 - 2007 TENCENT Inc. All Rights Reserved    ##
// #####################################################################################

// ########################################################
// ##  for ie.version < 5.5
// ########################################################

// ########################################################
function _$(x) {return document.getElementById(x);}
// 生成 [0, nMax) 的随机整数
Math.randomInt = function(nMax) { return parseInt(Math.random()*nMax); };
// 数字转为定长串 长度不足的以前面加0
function LENFix(i, n){ var sRet = i.toString(); while (sRet.length < n) { sRet = "0"+sRet; } return sRet;};



Array.prototype.find = function(e) { for (var i=0; i<this.length; ++i) { if (this[i]==e) { return i; } } return null; };
//Array.prototype.findmul = function(e) { var a = []; for (var i=0; i<this.length; ++i) { if (this[i]==e) { a.push(i); } } return a; };
//Array.prototype.find_if = function(fnEQ) { for (var i=0; i<this.length; ++i) { if (fnEQ(this[i])) { return i; } } return null; };
//Array.prototype.findmul_if = function(fnEQ) { var a = []; for (var i=0; i<this.length; ++i) { if (fnEQ(this[i])) { a.push(i); } } return a; };
//Array.prototype.push_not = function(e) { if (this.find(e)==null) { return this.push(e); } return null; };
//Array.prototype.push_not_if = function(e, fnEQ) { if (this.find_if(fnEQ)==null) { return this.push(e); } return null; };
//Array.prototype.remove = function(e) { var a = this.findmul(e); for (var i=a.length-1; i>=0; --i) { this.splice(a[i], 1); } return a.length; };
//Array.prototype.remove_if = function(fnEQ) { vaer a = this.findmul_if(fnEQ); for (var i=a.length-1; i>=0; --i) { this.splice(a[i], 1); } return a.length; };


RegExp.showCharSet = /[\x00-\x09\x0B-\x0C\x0E-\x1F\x80-\xFF]/g;

String.prototype.chsetReplace = function() { return this.replace(RegExp.showCharSet , "?"); };
String.prototype.chsetAlert = function(v) { if (!this.chsetCheck()) { alert((v?v+"中":"")+'请不要使用"'+this.match(RegExp.showCharSet).toString()+'"等字符。'); return false; }else{ return true; } };
String.prototype.chsetCheck = function() { return !this.match(RegExp.showCharSet); };
String.prototype.between = function(b, e) { var bp = this.indexOf(b); if (bp==-1) { return (""); } bp += b.length; var ep = this.indexOf(e, bp); if (ep==-1) { return (""); } return this.substr(bp, ep-bp); };
String.prototype.replaceAll = function(s, t) { return this.split(s).join(t); };
String.prototype.asclen = function() { return this.replace(/[\u0100-\uffff]/g, "  ").length; };
String.prototype.asccut = function(n) { var i = 0; while (n>0 && i<this.length) { n -= this.charCodeAt(i)>=256 ? 2 : 1; i += (n>=0); } return this.substr(0, i); };
String.prototype.asccutex = function(n) { var i = 0; while (n>0 && i<this.length) { n -= this.charCodeAt(i)>=256 ? 2 : 1; i += (n>=0); } return i<this.length ? this.substr(0, i)+"..." : this.substr(0, i); };
//String.prototype.escHtmlEp = function() { return this.replace(/[&'"<>\/\\\-\x00-\x1f\x80-\xff]/g, function(r){ return "&#"+r.charCodeAt(0)+";" }); };
//用做过滤HTML标签里面的东东 比如这个例子里的<input value="XXXX">  XXXX就是要过滤的
String.prototype.escHtmlEp = function() { return this.replace(/[&'"<>\/\\\-\x00-\x1f\x80-\xff]/g, function(r){ return "&#"+r.charCodeAt(0)+";" }); };
//String.prototype.escHtml = function() { return this.replace(/[&'"<>\/\\\-\x00-\x09\x0b-\x0c\x1f\x80-\xff]/g, function(r){ return "&#"+r.charCodeAt(0)+";" }).replace(/\r\n/g, "<BR>").replace(/\n/g, "<BR>").replace(/\r/g, "<BR>").replace(/ /g, "&nbsp;"); };
//用做过滤直接放到HTML里的
String.prototype.escHtml = function() { return this.replace(/[&'"<>\/\\\-\x00-\x09\x0b-\x0c\x1f\x80-\xff]/g, function(r){ return "&#"+r.charCodeAt(0)+";" }).replace(/\r\n/g, "<BR>").replace(/\n/g, "<BR>").replace(/\r/g, "<BR>").replace(/ /g, "&nbsp;"); };
//String.prototype.escScript = function() { return this.replace(/[\\"']/g, function(r){ return "\\"+r; }).replace(/%/g, "\\x25").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\x01/g, "\\x01"); };
//用做过滤直接放到HTML里js中的
String.prototype.escScript = function() { return this.replace(/[\\"']/g, function(r){ return "\\"+r; }).replace(/%/g, "\\x25").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\x01/g, "\\x01"); };
//String.prototype.escUrl = function() { return escape(this).replace(/\+/g, "%2B"); };
//用做过滤直接URL参数里的  比如 http://show8.qq.com/abc_cgi?a=XXX  XXX就是要过滤的
String.prototype.escUrl = function() { return escape(this).replace(/\+/g, "%2B"); };
//String.prototype.escMiniUrl = function() { return this.replace(/[\x00-\xff]/g, escape).replace(/\+/g, "%2B"); };
String.prototype.escMiniUrl = function() { return this.replace(/%/g, "%25"); };
//String.prototype.escHrefScript = function() { return this.escScript().escMiniUrl().escHtmlEp(); };
//用做过滤直接放到<a href="javascript:XXXX">中的
String.prototype.escHrefScript = function() { return this.escScript().escMiniUrl().escHtmlEp(); };
//String.prototype.escRegexp = function() { return this.replace(/[\\\^\$\*\+\?\{\}\.\(\)\[\]]/g, function(a,b){ return "\\"+a; }); };
//用做过滤直接放到正则表达式中的
String.prototype.escRegexp = function() { return this.replace(/[\\\^\$\*\+\?\{\}\.\(\)\[\]]/g, function(a,b){ return "\\"+a; }); };
String.prototype.escape = function() { return escape(this); };
String.prototype.unescape = function() { return unescape(this); };
Date.prototype.format = function(v) { var a={"Y":this.getFullYear(), "m":LENFix(this.getMonth()+1, 2), "d":LENFix(this.getDate(), 2), "H":LENFix(this.getHours(), 2), "M":LENFix(this.getMinutes(), 2), "S":LENFix(this.getSeconds(), 2)}; return v.replace(/%[YmdHMS]/g, function(v){ return (a[v.substr(1)]); }); };
Date.prototype.toCommonString = function(){ var a=[this.getFullYear(), LENFix(this.getMonth()+1,2),LENFix(this.getDate(),2)];return a.join('-');}
//Date.prototype.DayInterval=function(vStart,vEnd){var miStart = Date.parse(vStart.replace(/\-/g, /)); var miEnd   = Date.parse(vEnd.replace(/\-/g, /)); return (miEnd-miStart)/(1000*24*3600);};
function parseDate(s) {  s=s.replace(/^(\d{4})-(\d+)-(\d+).*$/,"$1/$2/$3");return new Date(Date.parse(s));}
function distanceDate(d1,d2){return (d2.getTime()-d1.getTime())/(24*60*60*1000)}
function getBeginMonthDate(d){ return new Date(d.getYear(), d.getMonth(), 1);}
function getNextBeginMonthDate(d, n) { return d.getMonth()+n > 11 ? new Date(d.getFullYear()+1, (d.getMonth()+n)%12, 1): new Date(d.getFullYear(), d.getMonth()+n,1);}
function getPreBeginMonthDate(d, n) { return d.getMonth()-n <0 ? new Date(d.getFullYear()-parseInt((n+11)/12), (d.getMonth()-n%12+12)%12, 1): new Date(d.getFullYear(), d.getMonth()-n,1);}
function getValueByArray(array, value)
{
    if (array[0]>value) return 0;
    var i;
    for(i=0; i<array.length; ++i){ if (array[i] > value) break;}
   
    return i >= array.length ? i-1 : i+(value - array[i]+0.0)/(array[i] - array[i-1]) ;
}
function getNextDay(d,n) { return new Date(d.getTime()+1000*60*60*24*n);}
function xml2array(x,names)
{
    var a=[];
    for(var i=0;i<names.length;++i) a[names[i]]=x.getAttribute(names[i]);
    return a ;
}
function getChartBaseColor(index){ return ["736AFF","F736AF","7F36AF","73F6AF","736FAF","A736FF","7A36FF","73A6FF","736AFF","376AFF"][index];}
function getChartColor(index){ return '#'+getChartBaseColor(index)};
function ShowDisplay(id,bShow){ return _$(id).style.display= bShow ? "" : "none"}; 
function ShowRangeDisplay(ids,bShow) { for(var i=0; i<ids.length;++i) ShowDisplay(ids[i],bShow);}
function GetUin(){return getParam(GetCookie("youhpuser"),"userid","&","=");}
//根据数组和个数n，生成一个能平均分配的数组
function GetAverageRandArray(ary, n)
{
    ary.sort(function(a,b){return a-b;});
    var array=[0];
    for(var i=0;i<ary.length;++i)
    {
        if (array[array.length-1] == ary[i]) continue ;
        array.push(ary[i]);
    }
    
    if(n >= array.length ){ array.push(1.5*array[array.length-1]+1);return array ; }
    var midValue = array[array.length/2];
    var tmp=[0];
    var rankValue=Math.log(midValue-array[0])/Math.log(n/2);
    for(var i=1; i<n/2; ++i)
    {
        tmp.push(array[0]+Math.pow(rankValue,i-1));  
    }
    rankValue=Math.log(array[array.length-1]-midValue)/Math.log(n/2);
    for(var i=n/2; i< n ; ++i)
    {
        tmp.push(midValue+Math.pow(rankValue, i-n/2));
    }
    return tmp ;
}
function setDialogParam(frame, frameWidth, frameHeight, dlg, dlgWidth, dlgHeight, title)
{
	frame.width = frameWidth; 
	frame.height = frameHeight;
	dlg.dialog('option', 'width', dlgWidth);
	dlg.dialog('option', 'height', dlgHeight);
	dlg.dialog('option', 'title', title);
}
/*
对需要出现在一个URI的一部分的不信任输入进行编码 
例如:
<a href="http://search.msn.com/results.aspx?q1=[Un-trusted-input]& q2=[Un-trusted-input]">Click Here!</a>
以下字符将会被编码: 
除[a-zA-Z0-9.-_]以外的字符都会被替换成URL编码
*/
function UriComponentEncode(sStr)
{
	sStr = encodeURIComponent(sStr);
	sStr = sStr.replace(/~/g,"%7E");
	sStr = sStr.replace(/!/g,"%21");
	sStr = sStr.replace(/\*/g,"%2A");
	sStr = sStr.replace(/\(/g,"%28");
	sStr = sStr.replace(/\)/g,"%29");
	sStr = sStr.replace(/'/g,"%27");
	sStr = sStr.replace(/\?/g,"%3F");
	sStr = sStr.replace(/;/g,"%3B");
	return sStr;
}

// 注:以下所有转义(包括对应的对象方法)都是直接填充模板时使用,不一定适用于属性设置
function escUrl(v) { return v.escUrl(); };
function escHtml(v) { return v.escHtml(); };
function escHtmlEp(v) { return v.escHtmlEp(); };
function escScript(v) { return v.escScript(); };
function escHrefScript(v) { return v.escHrefScript(); };
// ########################################################

// ########################################################

// var _Prm = new PARAM("a=1&b=2", "&", "="); var a = _Prm["a"]; var b = _Prm["b"]
function PARAM(valPairs, elemSep, pairSep)
{
	if (valPairs)
	{
		var aElem = valPairs.toString().split(elemSep);
		for (var i=0; i<aElem.length; ++i)
		{
			var aPair = aElem[i].split(pairSep);
			(aPair.length>1) && (this[aPair[0]] = unescape(aPair[1]));
		}
	}
};

// var a = getParam("a=1&b=2", "a", "&", "=");
function getParam(valPairs, sName, elemSep, pairSep)
{
	var xParam = new PARAM(valPairs, elemSep, pairSep);
	return xParam[sName] ? xParam[sName] : "";
};

// var sParam = setParam("a=1", "b", "2");
function setParam(valPairs, n, v)
{
	valPairs = valPairs.toString();
	n = n.toString();
	v = v.toString().escUrl();
	var r = new RegExp("(^|\\W)"+n+"=[^&]*", "g");
	return (valPairs.match(r)) ? valPairs.replace(r, "$1"+n+"="+v) : valPairs+(valPairs ? "&" : "")+n+"="+v;
};

// var sParam = getURLParam("a", "http://w.w.w/?a=1&b=2);
function getURLParam(sName, sUrl)
{
	(!sUrl) && (sUrl = window.location.href);
	sUrl = sUrl.toString();
	var nIndex = sUrl.indexOf("?");
	return (nIndex>=0) ? getParam(sUrl.substr(nIndex+1), sName, "&", "=") : "";
};

// var sUrl = setURLParam("http://w.w.w/?a=1", "b", "2");
function setURLParam(u, n, v)
{
	u = u.toString();
	n = n.toString();
	v = v.toString().escUrl();
	var r = new RegExp("(^|\\W)"+n+"=[^&]*", "g");
	
	return (u.match(r)) ? u.replace(r, "$1"+n+"="+v) : u+(u.indexOf("?")==-1 ? "?" : "&")+n+"="+v;
};

// var sParam = getHashParam("b", window.location);
function getHashParam(n, l)
{
	l || (l=window.location);
	return l.hash ? getParam(unescape(l.hash.substr(1)), n, "&", "=") : "";
};

// setHashParam("b", "2", window.location);
function setHashParam(n, v, l)
{
	l || (l=window.location);
	v = v.toString().escUrl();
	var u = unescape(l.hash.substr(1));
	var r = new RegExp("(^|\\W)"+n+"=[^&]*", "g");
	l.hash = 	escape((u.match(r)) ? u.replace(r, "$1"+n+"="+v) : u+(u.length ? "&" : "")+n+"="+v);
};

function setCookie(sName, sValue, nExpireSec, sDomain, sPath) 
{ 
	var sCookie = sName+"="+escape(sValue)+";";  
	
	//如果添加此cookie会导致cookie超长，则不添加。
	if((document.cookie.length+sCookie.length) >= 4096)
	{
		return false;
	}

	if (nExpireSec) 
	{ 
		var oDate = new Date(); 
		oDate.setTime(oDate.getTime()+parseInt(nExpireSec)*1000); 
		sCookie += "expires="+oDate.toUTCString()+";"; 
	}
	if (sDomain) 
	{
		sCookie += "domain="+sDomain+";"; 
	}
	if (sPath) 
	{
		sCookie += "path="+sPath+";" 
	}
	document.cookie = sCookie;	
	return true;
};

// ########################################################

function getCookie(sName)
{
	return getParam(document.cookie, sName, "; ", "=");
};

function GetCookie(cookie_name){
    var allcookies = document.cookie;
    var cookie_pos = allcookies.indexOf(cookie_name);
    // 如果找到了索引，就代表cookie存在，
    // 反之，就说明不存在。
    if (cookie_pos != -1){
        // 把cookie_pos放在值的开始，只要给值加1即可。
        cookie_pos += cookie_name.length + 1;
        var cookie_end = allcookies.indexOf(";", cookie_pos);
        if (cookie_end == -1){
            cookie_end = allcookies.length;
        }
        var value = unescape(allcookies.substring(cookie_pos, cookie_end));
    }
    return value;
}

// 检查是否可信任URL
function CheckUrlCredit(sUrl)
{
	//return sUrl.match(/^https{0,1}:\/\/[a-zA-Z0-9_\-.]+.qq.com(\/|$)/) ? true : sUrl.charAt(0)=="/" ? true : false;
	return (/^(https?:\/\/)?[\w\-.]+\.(qq|paipai|soso|taotao)\.com($|\/|\\)/i).test(sUrl)||(/^[\w][\w\/\.\-_%]+$/i).test(sUrl)||(/^[\/\\][^\/\\]/i).test(sUrl) ? true : false;
};

// ########################################################

function _MSIE() { return (window.navigator.appName.toUpperCase().indexOf("MICROSOFT")>=0); };

function _FireFox() { return (window.navigator.appName.toUpperCase().indexOf("NETSCAPE")>=0); };

function _MSIEUSERDATA()
{
	function _USERData(oObj, sName, sCookie)
	{
		this._Object = oObj;
		this._svName = sName;
		this._Cookie = sCookie;
		this._Object.addBehavior("#default#userData");			
		
		this._Object.load(this._svName);

		if (!getCookie(this._Cookie) || parseInt(this._Object.getAttribute(this._Cookie)) < parseInt(getCookie(this._Cookie)))
		{
			this.expiresDiscard();
		}  

		if (!getCookie(this._Cookie))
		{
			QSCookie(this._Cookie, new Date().getTime());
		}
	};
	_USERData.prototype.expiresDiscard = function()
	{
		this._Object.expires = new Date(new Date().getTime()-365*86400000).toUTCString();
		this._Object.save(this._svName);
		this._Object.load(this._svName);
		this._Object.expires = new Date(new Date().getTime()+365*86400000).toUTCString();
	};
	
	// ########################################################
	var _userData_ = null;
	// ########################################################
	
	window.getUserData = function(sName)
	{
		if (!_userData_)
		{
			_userData_ = new _USERData(document.documentElement, "QQSHOW", "QSUDTMmilliSeconds");
		}
		return _userData_._Object.getAttribute(sName);
	};
	window.setUserData = function(sName, sValue)
	{
		if (!_userData_)
		{
			_userData_ = new _USERData(document.documentElement, "QQSHOW", "QSUDTMmilliSeconds");
		}
		_userData_._Object.setAttribute(sName, sValue);
		_userData_._Object.setAttribute(_userData_._Cookie, new Date().getTime());
		_userData_._Object.save(_userData_._svName);
	};
};

function _FF2XUSERDATA()
{
	window.getUserData = function(sName)
	{
		return window.sessionStorage.getItem(sName);
	};
	window.setUserData = function(sName, sValue)
	{
		return window.sessionStorage.setItem(sName, sValue);
	};
};

function _NOUSERDATA()
{
	window.getUserData = function(sName)
	{
		return alert("your browser does not support this feature.\nwe suggest you to use Internet Explorer 5.0+ or Firefox 2.0+");
	};
	window.setUserData = function(sName, sValue)
	{
		return alert("your browser does not support this feature.\nwe suggest you to use Internet Explorer 5.0+ or Firefox 2.0+");
	};
};

// ########################################################
_MSIE() ? _MSIEUSERDATA() : (window.sessionStorage) ? _FF2XUSERDATA() : _NOUSERDATA();
// ########################################################

// ########################################################

function XMLREQ(fnCall, fnFail)
{
	this._XmlREQ = (window.XMLHttpRequest) ? (new XMLHttpRequest()) : (window.ActiveXObject) ? ((function(){try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){return new ActiveXObject("Microsoft.XMLHTTP")};})()) : null;
	var this__XmlREQ = this._XmlREQ;
	this._XmlREQ.onreadystatechange = function() { if (this__XmlREQ.readyState==4) { this__XmlREQ.status==200 ? (fnCall ? fnCall(this__XmlREQ) : null) :  (fnFail ? fnFail(this__XmlREQ) : null); } };
};
XMLREQ.prototype.open = function(sUrl,type)
{
	var aDat = sUrl.split("?");
	this._XmlREQ.open("POST", aDat[0], type);
    aDat[1] && this._XmlREQ.setRequestHeader("Content-length", aDat[1].length);
	this._XmlREQ.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	this._XmlREQ.setRequestHeader("If-Modified-Since", "0");
	this._XmlREQ.send(aDat[1] ? aDat[1] : null);
};
XMLREQ.prototype.close = function()
{
	this._XmlREQ.abort();
};

// 请求XML并以回调函数处理请求成功及失败的情况
// function fnCall(xmlReq){} function fnFail(xmlReq){}
function getXml(sUrl, fnCall, fnFail, type)
{
	var xmlReq = new XMLREQ(fnCall , fnFail);	
	xmlReq.open(sUrl,type);
	return xmlReq;
};

// 请求XML并以回调函数处理请求失败及逻辑返回成功失败的情况
// function fnSucc(xmlDoc){} function fnFail(xmlDoc){} function fnError(xmlReq){}
function getResultXml(sUrl, fnSucc, fnFail, fnError)
{
	function fnCall(xmlReq)
	{
		var xmlDoc = xmlReq.responseXML;
		(xmlDoc.getElementsByTagName("result")[0].getAttribute("code")==0) ? (fnSucc ? fnSucc(xmlDoc) : null) : (fnFail ? fnFail(xmlDoc) : null);
	};
	return getXml(sUrl, fnCall, fnError,true);
};

//以同步方式调用ajax,在某些ff的情况下需要应用
function getResultSyncXml(sUrl, fnSucc, fnFail, fnError)
{
	function fnCall(xmlReq)
	{
		var xmlDoc = xmlReq.responseXML;
		(xmlDoc.getElementsByTagName("result")[0].getAttribute("code")==0) ? (fnSucc ? fnSucc(xmlDoc) : null) : (fnFail ? fnFail(xmlDoc) : null);
	};
	return getXml(sUrl, fnCall, fnError,false);
}
function getResultDataXml(url, data, fnSucc, fnFail, FnError) {
    $.post(url, data, function(xmlDoc){
        (xmlDoc.getElementsByTagName("result")[0].getAttribute("code") == 0) ? (fnSucc ? fnSucc(xmlDoc) : null) : (fnFail ? fnFail(xmlDoc) : null);
        }, "xml");
}
// 以mapName映射规则用XML节点内容替换字符串
// mapName = [[xmlName, htmlName(, fnTrans(xmlValue))](, ...)]
function replaceHtmlWithXml(xmlNode, sHtml, mapName, iAbsIndex, iRltIndex)
{
    Array.prototype.transform = function(fnOp) { for (var i=0; i<this.length; ++i) { this[i] = fnOp(this[i]); } return this; };
	var eData = {"@abs(I)":iAbsIndex && iAbsIndex.toString() || "0", "@rlt(I)":iRltIndex && iRltIndex.toString() || "0"};
	for (var i=0; i<mapName.length; ++i)
	{
		var vData = (mapName[i][0].constructor!=Array) ? 
		(eData[mapName[i][0]]||xmlNode.getAttribute(mapName[i][0])) :
		 ([].concat(mapName[i][0]).transform(function(v){ return (eData[v]||xmlNode.getAttribute(v)); }));
		sHtml = sHtml.replace(new RegExp(mapName[i][1].escRegexp(), "g"), (mapName[i][2] ? mapName[i][2](vData) : vData).toString().replace(/\$/g, "$$$$"));
	}
	return sHtml;
};

// 以XML内容替换并显示HTML文档
// sHtml = "<%HD%>...<%--LB--%>...<%--EB--%>...<%--EE--%>...<%--LE--%>...<%--TL--%>";
function showXmlNode(xmlDoc, oParent, xmlNodeName, sHtml, mapName, bi, ei, ne)
{
	var xmlNode = xmlDoc.getElementsByTagName(xmlNodeName);
	(!bi || bi<0) && (bi=0);
	(!ei || ei<0) && (ei=xmlNode.length);
	(!ne || ne<0) && (ne=1);
	var sHtmlHd = sHtml.between("<%HD%>", "<%LB%>");
	var sHtmlTl = sHtml.between("<%LE%>", "<%TL%>");
	var sHtmlLB = sHtml.between("<%LB%>", "<%EB%>");
	var sHtmlLE = sHtml.between("<%EE%>", "<%LE%>");
	var sHtmlEM = sHtml.between("<%EB%>", "<%EE%>");
	var aHtml = [];
	for (var i=bi; i<ei; i+=ne)
	{
		aHtml.push(sHtmlLB);
		for (var n=0; n<Math.min(ei-i, ne); ++n)
		{
			aHtml.push(replaceHtmlWithXml(xmlNode[i+n], sHtmlEM, mapName, i+n, i-bi+n));
		}
		aHtml.push(sHtmlLE);
	}
	oParent.innerHTML = sHtmlHd+aHtml.join("")+sHtmlTl;
	
};

// 请求并显示Xml数据
function showXml(sUrl, oParent, xmlNodeName, sHtml, mapName, bi, ei, ne, fnSucc, fnFail, fnError)
{
	return getXml(sUrl, function(xmlDoc){ showQQSHOWXmlNode(xmlDoc, oParent, xmlNodeName, sHtml, mapName, bi, ei, ne); fnSucc&&fnSucc(xmlDoc); }, fnFail, fnError);
};


// mapName = [[xmlName, htmlName(, fnTrans(xmlValue))](, ...)]
function replaceHtmlWithData(xData, sHtml, mapName, iAbsIndex, iRltIndex)
{
    Array.prototype.transform = function(fnOp) { for (var i=0; i<this.length; ++i) { this[i] = fnOp(this[i]); } return this; };
	var eData = {"@abs(I)":iAbsIndex && iAbsIndex.toString() || "0", "@rlt(I)":iRltIndex && iRltIndex.toString() || "0"};
	for (var i=0; i<mapName.length; ++i)
	{
		var vData = (mapName[i][0].constructor!=Array) ? 
		(eData[mapName[i][0]]||xData[mapName[i][0]]) : 
		([].concat(mapName[i][0]).transform(function(v){ return (eData[v]||xData[v]); }));
		sHtml = sHtml.replace(new RegExp(mapName[i][1].escRegexp(), "g"), (mapName[i][2] ? mapName[i][2](vData) : vData).toString().replace(/\$/g, "$$$$"));
	}
	return sHtml;
};
function showData(xData, oParent, sHtml, mapName, bi, ei, ne)
{
	(!bi || bi<0) && (bi=0);
	(!ei || ei<0) && (ei=xData.length);
	(!ne || ne<0) && (ne=1);
	var sHtmlHd = sHtml.between("<%HD%>", "<%LB%>");
	var sHtmlTl = sHtml.between("<%LE%>", "<%TL%>");
	var sHtmlLB = sHtml.between("<%LB%>", "<%EB%>");
	var sHtmlLE = sHtml.between("<%EE%>", "<%LE%>");
	var sHtmlEM = sHtml.between("<%EB%>", "<%EE%>");
	var aHtml = [];
	for (var i=bi; i<ei; i+=ne)
	{
		aHtml.push(sHtmlLB);
		for (var n=0; n<Math.min(ei-i, ne); ++n)
		{
		    if(xData[i+n]==null) continue ;
			aHtml.push(replaceHtmlWithData(xData[i+n], sHtmlEM, mapName, i+n, i-bi+n));
		}
		aHtml.push(sHtmlLE);
	}
	//document.write(sHtmlHd+aHtml.join("")+sHtmlTl);
	oParent.innerHTML = sHtmlHd+aHtml.join("")+sHtmlTl;
};

// 页码样式
function stylePage(nIndex)
{
	this.linkHtml = function(u, t) { return t.toString().link(u); };
	this.activeHtml = function(u, t) { return '<a href="'+u.escMiniUrl().escHtmlEp()+'" class="em">'+t.toString().escHtml()+'</a>'; };
	this.separate = function() { return ('|'); };
	this.positionHtml = function(n, a) { return ('第'+n+'/'+a+'页 '); };
	this.randomHtml = function(u, a) { return (' 跳到<input type="text" id="page_no" name="page_no" class="page_no" size="3" maxlength="4" onkeydown="if(event.keyCode != 13) return;else {var v = parseInt(this.value,10);if((isNaN(v))||(v<=0||v>'+a+')) { alert(\'您输入的页码不正确。\'); } else { window.location=(\''+u('[@_pno]')+'\'.replace(/\\\[@_pno\\\]/g, Math.max(1, Math.min('+a+', parseInt(v))))); };void(0);}"/>页<a onclick="javascript:var v=parseInt(this.parentNode.getElementsByTagName(\'INPUT\')[0].value, 10);if((isNaN(v))||(v<=0||v>'+a+')) { alert(\'您输入的页码不正确。\'); } else { window.location=(\''+u('[@_pno]')+'\'.replace(/\\\[@_pno\\\]/g, Math.max(1, Math.min('+a+', parseInt(v))))); };void(0);" class="go_page"><img src="/support/Alpha/images/btn_go.gif" alt="GO" /></a>'); };
	this.prevHtml = function(u) { return (u ? "上一页".link(u) : "<a>上一页</a>"); };
	this.nextHtml = function(u) { return (u ? "下一页".link(u) : "<a>下一页</a>"); };
};


// 显示页面内容信息
function showPage(pno, pall, fnUrl, oParent, nStyle ,thin)
{
	if(thin)
	{
		var iDisPage = thin;
	}else
	{
	  var iDisPage = pno < 10 ? 10 : (pno < 100 ? 8 : 6);
  }
	pno = parseInt(pno);
	pall = parseInt(pall);
	var oStyle = new stylePage(nStyle);
	var aHtml = [];
	aHtml.push(oStyle.prevHtml((pno>1) && fnUrl(pno-1)));
	var bi = Math.min(Math.max(pno - iDisPage / 2 , 1), Math.max(1, pall - iDisPage));
	var ei = Math.max(Math.min(pno + iDisPage / 2, pall), Math.min( bi + iDisPage, pall));
	while (bi <= ei)
	{
		aHtml.push(bi==pno ? oStyle.activeHtml(fnUrl(bi), bi++) : oStyle.linkHtml(fnUrl(bi), bi++));
	}
	aHtml.push(oStyle.nextHtml((pno<pall) && fnUrl(pno+1)));
	oParent.innerHTML = oStyle.positionHtml(pno, pall)+aHtml.join(oStyle.separate())+oStyle.randomHtml(fnUrl, pall);
};



// 是否闰年
function isleapyear(y)
{
	return (y%4==0 && y%100!=0 || y%400==0);
};

// 某年某月有多少天
function DAYOfMonth(y, m)
{
	return [31, isleapyear(y)?29:28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m-1];
};

// 共用功能显示[进度屏蔽/浮动窗口/...]

function DivCreate(oWin, oParent, sID, zIndex, iLeft, iTop, sWidth, sHeight, sDisplay)
{
	if (oWin && oWin.document && !oWin.document.getElementById(sID))
	{
		var e = oWin.document.createElement("div");
		e.id = sID;
		e.style.position = "absolute";
		e.style.zIndex = zIndex;
		e.style.left = iLeft;
		e.style.top = iTop;
		e.style.height = sHeight;
		e.style.width = sHeight;
		
		e.style.display = sDisplay;
		try{ oParent && oParent.appendChild(e); } catch(e) { }
		return e;
	}
	if (oWin.document.getElementById(sID)) return oWin.document.getElementById(sID);
	else return null;
};

function PageMaskCreate(oWin)
{
	if(oWin && oWin.document)
	{
		if (!oWin.document.getElementById("ID_QQSHOW_WAIT_BACKGND"))
		{		   
			var ebg = DivCreate(oWin, oWin.document.body, "ID_QQSHOW_WAIT_BACKGND", 65529, 0, 0,"100%","100%","none");
			ebg.style.backgroundColor = "#0000FF";
			ebg.style.opacity = 0.35;
			ebg.style.filter = "alpha(opacity=35)";
		}
		return oWin.document.getElementById("ID_QQSHOW_WAIT_BACKGND");
	}
	else return null;
};

function ProcessCreate(oWin)
{
	if(oWin && oWin.document && oWin.document.body)
	{
		if (!oWin.document.getElementById("ID_QQSHOW_WAIT_PROCESS"))
		{
			var epr = DivCreate(oWin, oWin.document.body, "ID_QQSHOW_WAIT_PROCESS", 65530, 0, 0, "100%", "100%", "none");
			//epr.innerHTML = '<table width="100%" height="200" border="0"><tr><td align="center" valign="bottom"><img src="http://show8.qq.com/img/base/wait.gif" /></td></tr></table>';
			//epr.innerHTML = '<table width="100%" height="200" border="0"><tr><td>&nbsp;</td><td width="308" valign="bottom"><div style="width:308px;height:54px;"><span style="display:block;float:left;width:58px;height:54px;background:url(http://imgcache.qq.com/qqshow/v2/img/loading_bg_l.gif);"></span><span style="display:block;float:left;width:250px;height:54px;background:url(http://imgcache.qq.com/qqshow/v2/img/loading_bg_m.gif);line-height:54px;color:#fff;text-indent:10px;font-size:12px;font-weight:bold;">处理中，请稍候...</span></div></td><td>&nbsp;</td></tr></table>';
		}
		return oWin.document.getElementById("ID_QQSHOW_WAIT_PROCESS");
	}
	else return null;
};

function PageMaskShow(oWin)
{
	var e = PageMaskCreate(oWin);
	if(e)
	{
		e.style.height = oWin.document.body.scrollHeight+"px";
		e.style.display = "block";
	}
};

function ProcessShow(oWin, lTxt)
{
	var e = ProcessCreate(oWin);
	if(!lTxt) lTxt = ["处理中，请稍候..."];
	if(e && oWin.document.body)
	{
		(lTxt) && (e.getElementsByTagName("SPAN")[1].innerHTML = lTxt[0]);
		e.style.height = (oWin.document.body.offsetHeight)+"px";
		e.getElementsByTagName("TABLE")[0].height = Math.max(Math.min(oWin.document.documentElement.scrollTop+150, 	oWin.document.body.offsetHeight-100), 100);
		e.style.display = "block";
	}
};

function PageMaskHide(oWin)
{
	var e = PageMaskCreate(oWin);
	e.style.display = "none";
};

function ProcessHide(oWin)
{
	var e = ProcessCreate(oWin);
	e.style.display = "none";
};

function MaskStart(lWin)
{
	for (var i=0; i<arguments[0].length; ++i)
	{
		try{ PageMaskShow(arguments[0][i]); } catch(e) { }
	}
};

function MaskEnd(lWin)
{
	for (var i=0; i<arguments[0].length; ++i)
	{
		try{ PageMaskHide(arguments[0][i]); } catch(e) { }
	}
};

function WaitStart(lWin, lTxt, bTxt)
{
	for (var i=0; i<arguments[0].length; ++i)
	{
		if(arguments[0][i])
		{
			PageMaskShow(arguments[0][i]);
		}
	}
	if(arguments[0][0] && !bTxt) ProcessShow(arguments[0][0], lTxt);
};

function WaitEnd(lWin)
{
	for (var i=0; i<arguments[0].length; ++i)
	{
		try{ PageMaskHide(arguments[0][i]);} catch(e){ }
	}
	try{ ProcessHide(arguments[0][0]); } catch(e) { }
};

function FloatShow(sUrl, iWidth, iHeight, OnOK, OnCancel, iLeft, iTop, oWin, fras, zIndex)
{
	var izIndex = zIndex?zIndex:65530;
	oWin = oWin || window;
	iLeft = typeof(iLeft)=="number" ? iLeft : (oWin.document.body.scrollWidth-iWidth)/2;
	iTop = typeof(iTop)=="number" ? iTop : (oWin.document.body.scrollHeight-iHeight)/2;
	var ifras = null;
	if (typeof(fras) != "undefined" && fras != null && fras != "null")
	{
	  ifras = fras;
	}else
	{
		ifras = [window, top];
	}
	FloatShow.Show = function(sUrl, iWidth, iHeight, iLeft, iTop)
	{
		MaskStart(ifras);
		var e = DivCreate(oWin, oWin.document.body, "ID_QQSHOW_FLOAT_WIN", izIndex, 0, 50,'100%','100%', "none");
		if(e && "object" == typeof(e) && "div" == e.tagName.toString().toLowerCase())
		{
		e.style.top = (Math.max(Math.min(oWin.document.documentElement.scrollTop, Math.max(oWin.document.body.offsetHeight,0)), 0))+"px";
		e.innerHTML = '<table id="w_head" align="center" style="position:absolute;left:'+iLeft+'px;top:'+iTop+'px;"><tr><td align="center"><iframe allowtransparency=true id="ID_QQSHOW_FLOAT_IFRAME" name="ID_QQSHOW_FLOAT_IFRAME" width="'+iWidth+'" height="'+iHeight+'" frameborder="0" scrolling="no"></iframe></td></tr></table><div id="d_border" style="display:none;border:1px dotted #000000; position:absolute;"></div>';
		e.getElementsByTagName("IFRAME")[0].src = sUrl;
		e.style.display = "block";
		}
		else throw "create div failed ";
	};
	
	FloatShow.Hide = function()
	{
	  MaskEnd([window, top.mainfra, top.leftfra, top.topfra]);
	  
		if (arguments[0])
		{
		  var fra = arguments[0];
		  if (fra && fra.document)
		  {
		    if(fra.document.getElementById("ID_QQSHOW_FLOAT_WIN"))
				fra.document.getElementById("ID_QQSHOW_FLOAT_WIN").style.display = "none";	
		  }
		}else
		{
			if(document.getElementById("ID_QQSHOW_FLOAT_WIN"))
				document.getElementById("ID_QQSHOW_FLOAT_WIN").style.display = "none";	
		}
	};
	
	FloatShow.DireOnCancel = function()
	{
		OnCancel && OnCancel(arguments[0]);
	};

	FloatShow.OnOK = function()
	{
		FloatShow.Hide();
		OnOK && OnOK(arguments[0]);
	};

	FloatShow.OnCancel = function()
	{
		FloatShow.Hide();
		OnCancel && OnCancel(arguments[0]);
	};

	FloatShow.AutoSize = function()
	{
		try
		{
			function FindIFrame(sName) { for (var i=0; i<window.frames.length; ++i) { if (window.frames[i].name==sName) { return window.frames[i]; } } return null; };
			var e = document.getElementById("ID_QQSHOW_FLOAT_IFRAME");
			var w = _MSIE() ? window.frames["ID_QQSHOW_FLOAT_IFRAME"] : FindIFrame("ID_QQSHOW_FLOAT_IFRAME");
			if ((w.document.documentElement.scrollTop=500) && (w.document.documentElement.scrollTop!=0))
			{
				e.height = parseInt(e.height)+w.document.documentElement.scrollTop+"px";
				w.document.documentElement.scrollTop = 0;
			}
			if ((w.document.documentElement.scrollLeft=500) && (w.document.documentElement.scrollLeft!=0))
			{
				e.width = parseInt(e.width)+w.document.documentElement.scrollLeft+"px";
				w.document.documentElement.scrollLeft = 0;
			}
		}
		catch(e)
		{
		}
	};

	FloatShow.Show(sUrl, iWidth, iHeight, iLeft, iTop);
};

// ########################################################

//floatshow 移动事件处理

function EventRouter(event)
{
	var sType = event.type;
	var oEle = event.srcElement || event.target;
	var oWindow = document.getElementById("w_head");
	var oBorder = document.getElementById("d_border");
	switch (sType)
	{
	case "mousedown":
        if(oEle.tagName.toUpperCase() == "A")
        {
            return;
        }
        oWindow.m_bDown = true;
        oBorder.style.width = oWindow.offsetWidth + 2 + "px";
        oBorder.style.height = oWindow.offsetHeight + 2 + "px";
        oBorder.style.left =  oWindow.offsetLeft + "px";
        oBorder.style.top =  oWindow.offsetTop  +"px";
        oBorder.style.display = "";
        addEventListener(document.body,"onmousemove",EventRouter);
        addEventListener(document.body,"onmouseup",EventRouter);
        if(document.all)
            oBorder.setCapture(true);
		break;
		
	case "mouseup":
		if(!oWindow.m_bDown ) return;
		oWindow.style.left = oBorder.style.left;
		oWindow.style.top = oBorder.style.top;
		oBorder.style.display = "none";
		removeEventListener(document.body,"onmousemove",EventRouter);
		removeEventListener(document.body,"onmouseup",EventRouter);
		//oDebug.value += "removeEvent ok! \n";
		oWindow.m_bDown = false;
		if(document.all)
			oBorder.releaseCapture(true);
		break;
	case "mousemove":
        if(!oWindow.m_bDown) return;
        var iM_x = event.clientX;
        var iM_y;
        var iScrollTop = document.body.scrollTop + document.documentElement.scrollTop;
        iM_y = event.clientY + iScrollTop;
        var oMask = document.getElementById("ID_QQSHOW_FLOAT_WIN");
        var _left = iM_x - oWindow.clientWidth / 2;
        var _top = iM_y - 20;
        
        var iW = oWindow.clientWidth ;
        var iH = oWindow.clientHeight ; 
		var oWin;
		if(window.frameElement) oWin = window.frameElement;
		else oWin = document.body;
        _left = _left < 15 ? 0 : (_left + iW > oWin.offsetWidth ? (oWin.offsetWidth - iW) : _left);
        _top = _top < 15 ? 0 : (_top + iH - iScrollTop > (document.all ? oWin.clientHeight : document.body.clientHeight ) ? ( (document.all ? oWin.clientHeight :document.body.clientHeight ) - iH  + iScrollTop) : _top );
       
        _top = _top - oMask.offsetTop;
        //当父窗口过小时 处理。
        _top = _top < (-oMask.offsetTop) ? (-oMask.offsetTop):_top;
        oBorder.style.left = _left + "px";
        oBorder.style.top =  _top + "px";
		break;
	default:
		break;
	}
};

function addEventListener (oElem, oEvents, fnHandler) {
	if (!oElem || !oEvents || !fnHandler) return;
	
	if ((typeof oEvents == "string" || oEvents instanceof String)) {
		_addEventListener(oElem, oEvents, fnHandler);
	} else {
		for (var i=0,nLen=oEvents.length; i<nLen; i++) {
			_addEventListener(oElem, oEvents[i], fnHandler);
		}
	}
};
function _addEventListener(oElem, sEvent, fnHandler) {
	if (!oElem || !sEvent || !fnHandler) return;
	
	if (oElem.attachEvent) {
		if (sEvent.indexOf("on") == -1)
			sEvent = "on" + sEvent;
		oElem.attachEvent(sEvent, fnHandler);
	} else {
		if (sEvent.indexOf("on") == 0)
			sEvent = sEvent.substr(2);
		oElem.addEventListener(sEvent, fnHandler, false);
	}
};

function removeEventListener (oElem, oEvents, fnHandler) {
	if (!oElem || !oEvents || !fnHandler) return;
	
	if ((typeof oEvents == "string" || oEvents instanceof String)) {
		_removeEventListener(oElem, oEvents, fnHandler);
	} else {
		for (var i=0,nLen=oEvents.length; i<nLen; i++) {
			_removeEventListener(oElem, oEvents[i], fnHandler);
		}
	}
};

function _removeEventListener(oElem, sEvent, fnHandler) {
	if (!oElem || !sEvent || !fnHandler) return;
	
	if (oElem.detachEvent) {
		if (sEvent.indexOf("on") == -1)
			sEvent = "on" + sEvent;
		oElem.detachEvent(sEvent, fnHandler);
	} else {
		if (sEvent.indexOf("on") == 0)
			sEvent = sEvent.substr(2);
		oElem.removeEventListener(sEvent, fnHandler, false);
	}
};

// ########################################################
function GetJs(url,loadFn)
{
	this.bExec = false;
	this.sUrl = url;
	this.fnOnload = function()
	{
		if(!this.bExec)
		{
			loadFn();
			this.bExec = true;
		}
	};
};
GetJs.prototype.init = function()
{
	var t = this;
	var oScript = document.createElement("SCRIPT");
	oScript.onload = function()
	{
		t.fnOnload();	
	};
	oScript.onerror = function()
	{
		t.bExec = true;
	};
	oScript.onreadystatechange = function()
	{
		if((oScript.readyState!="loaded")&&(oScript.readyState!="complete")) return;
		oScript.onreadystatechange = null;		
		t.fnOnload();
	}; 
	oScript.setAttribute("TYPE","text/javascript");	
	oScript.src = t.sUrl;
	document.getElementsByTagName("HEAD")[0].appendChild(oScript);
};

//检查客户端分辨率
function CheckClientScreen()
{
	var iScreenW = parseInt(screen.width);
	var iScreenH = parseInt(screen.height);
	if( iScreenW <= 800 || iScreenH <=600 )
	{
		alert("对不起，您的电脑分辨率太低，无法正常浏览商城，请调整电脑分辨率到1024*768以上！");
		return -1;
	}
	return 0;
};



/*
	QQ秀系统对话框
	分为三种模式。
*/

function ShowDialog( iType , sMsg , sTitle , fnOk , fnNo , fnCancel, oWin, iWidth, iHeight, bTxt)
{
	var m_itype = iType ? iType :  1 ;
	var m_sMsg  = sMsg ? sMsg: "";
	var m_sTitle = sTitle ?sTitle : "提示";
	var m_func_ok = fnOk? fnOk: function(){};
	var m_func_no = fnNo ?fnNo: function(){};
	var m_func_cancel = fnCancel ?fnCancel: function(){};	
	var _width = iWidth?iWidth:504;	
	var _height = iHeight?iHeight:198;
	
	ShowDialog.Show = function ()
	{		
		if(oWin)
			oWin.FloatShow('/inc/alert.html',  _width,  _height);			
		else if(top.mainfra)
			top.mainfra.FloatShow('/inc/alert.html', _width,  _height);
		else
			FloatShow('/inc/alert.html', _width,  _height);
	};
	ShowDialog.OnOk = function ()
	{
		try{
			m_func_ok();
		}catch(e){};
		FloatShow.Hide();
		WaitEnd([top.mainfra, top.leftfra, top.topfra]);
	};
	
	ShowDialog.OnNo = function ()
	{
		try{
			m_func_no();
		}catch(e){};
		FloatShow.Hide();
		WaitEnd([top.mainfra, top.leftfra, top.topfra]);
	};
	ShowDialog.OnCancel = function ()
	{
		try{
			m_func_cancel();
		}catch(e){};
		FloatShow.Hide();
		WaitEnd([top.mainfra, top.leftfra, top.topfra]);
		
	};
	ShowDialog.AddListener = function(oEle , fnEvt)
	{
		if(oEle){
			addEventListener(oEle ,"onclick" , fnEvt );
		}
	};
	ShowDialog.init = function(oDoc)
	{
		//	oDoc.getElementById("b_ok").innerHTML = 
		//	oDoc.getElementById("b_no").innerHTML = 
		//	oDoc.getElementById("b_cancel").innerHTML = 
		oDoc.getElementById("title").innerHTML = m_sTitle.escHtml();
		oDoc.getElementById("msg").innerHTML = m_sMsg.escHtml();
		var oBok = oDoc.getElementById("b_ok");
		var oBno = oDoc.getElementById("b_no");
		var oBcancel = oDoc.getElementById("b_cancel");
		
		QQShowDialog.AddListener(oBok,QQShowDialog.OnOk);
		QQShowDialog.AddListener(oBno,QQShowDialog.OnNo);
		QQShowDialog.AddListener(oBcancel,QQShowDialog.OnCancel);
		
		if(m_itype == 1)		
		{
			oBok.className="left_btn_1";	
		}
		else if(m_itype == 2){
			oBno.style.display = "";
		}else if(m_itype == 3){
			oBno.style.display = "";
			oBcancel.style.display = "";
		}
		
	};
	WaitStart([top.mainfra, top.leftfra, top.topfra],null,bTxt);
	QQShowDialog.Show();
};


function conv64(instr)
{
	var mapSymbol =["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E",
					"F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T",
					"U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i",
					"j","k","l","m","n","o","p","q","r","s","t","u","v","w","x",
					"y","z","-","_"];
	var sSrc = instr;
	//alert("src length ="+sSrc.length+"<br/>"+sSrc+"<br/>")
	var curbyte = 0;
	var curbit  = 0;
	var encode  = "";
	for (i=0;i<sSrc.length ;i++ )
	{
		for (j=0;j< 8;j++ )
		{ 
			curbyte |=(sSrc.charCodeAt(i)>>(7-j)&1)<<(5-curbit);
			if (++curbit==6)
			{ //alert("soyml =" + curbyte)
				encode +=  mapSymbol[curbyte];
				curbyte = 0;
				curbit  = 0;
			}
		}
	}
	if (curbit>0)
	{
		encode += mapSymbol[curbyte];
	}
	return encode;
};
function huffcompress(str)
{
	return "Z2"+conv64(encodehuffman(str));
};

//html正文编码：对需要出现在HTML正文里(除了HTML属性外)的不信任输入进行编码
function HtmlEncode(sStr)
{
	sStr = sStr.replace(/&/g,"&amp;");
	sStr = sStr.replace(/>/g,"&gt;");
	sStr = sStr.replace(/</g,"&lt;");
	sStr = sStr.replace(/"/g,"&quot;");
	sStr = sStr.replace(/'/g,"&#39;");
	return sStr;
};

//html正文解码：对HtmlEncode函数的结果进行解码
function HtmlUnEncode(sStr)
{
	sStr = sStr.replace(/&amp;/g,"&");
	sStr = sStr.replace(/&gt;/g,">");
	sStr = sStr.replace(/&lt;/g,"<");
	sStr = sStr.replace(/&quot;/g,'"');
	sStr = sStr.replace(/&#39;/g,"'");
	return sStr;
};

/*
html属性编码：对需要出现在HTML属性里的不信任输入进行编码
注意:
(1)该函数不适用于属性为一个URL地址的编码.这些标记包括:a/img/frame/iframe/script/xml/embed/object...
属性包括:href/src/lowsrc/dynsrc/background/...
(2)该函数不适用于属性名为 style="[Un-trusted input]" 的编码
*/
function HtmlAttributeEncode(sStr)
{
	sStr = sStr.replace(/&/g,"&amp;");
	sStr = sStr.replace(/>/g,"&gt;");
	sStr = sStr.replace(/</g,"&lt;");
	sStr = sStr.replace(/"/g,"&quot;");
	sStr = sStr.replace(/'/g,"&#39;");
	sStr = sStr.replace(/=/g,"&#61;");
	sStr = sStr.replace(/`/g,"&#96;");
	return sStr;
};




/*下拉框*/

function gbid(oid)
{
 return document.getElementById(oid)
}


function getDropdownPoint(obj)
{
 var x=obj.offsetLeft;
 var y=obj.offsetTop+obj.offsetHeight;

 var parent = obj;
 while (parent.offsetParent) {
 parent = parent.offsetParent;
 x += parent.offsetLeft;
 y += parent.offsetTop ;
 }
 return [x, y];
}


function dropdown(x, y, content, right, block)
{
var popupObj=gbid('popup');
popupObj.innerHTML='';
var pS=popupObj.style;
pS.position="relative";
pS.width=pS.height="0px";
pS.zIndex=-1;
pS.display="none";

pS.position="absolute";
 pS.width = '';
 pS.height = '';
 pS.zIndex = 10000;
 pS.left = x+'px';
 pS.top = y+'px';
 pS.color = '#333';
 pS.textAlign="left";
 pS.overflow="hidden";
 pS.display = "block";
 pS.fontFamily = "Arial";
 pS.backgroundColor="transparent";

 iframe='<iframe id="_mypopupiFrame" style="position:absolute; z-index:-1;background-color:transparent" scrolling="no" frameborder="0" src="about:blank"></iframe>';

 if(right) {
 gbid('popup').innerHTML=iframe+'<table border="0" cellspacing="0" cellpadding"0" style="margin:0;"><tr><td valign="top" style="margin:0;padding:0 0 0 8px"><img src="/support/Alpha/images/dropdown_pointer1.gif" border="0" style="display:block;margin:0 8px 0 0;padding:0;float:right"></td></tr><tr><td valign="top" style="margin:0;padding:0;border:3px solid #54BCB6;background:#f7f7ff;border-top:8px solid #54BCB6;"><div style="border:1px solid #308A85;padding:6px;"><pre style="margin:0;padding:0">'+content+'</pre></div></div></td></tr></table>';
 pS.left = (x-popupObj.offsetWidth+46)+'px';
 //gbid('_mypopupiFrame').style.left = (x-popupObj.offsetWidth+46)+'px';
 } else {
 gbid('popup').innerHTML=iframe+'<table border="0" cellspacing="0" cellpadding"0" style="background:transparent;margin:0;"><tr><td valign="top" style="background:transparent;margin:0;padding:0 0 0 8px"><img src="/support/Alpha/images/dropdown_pointer1.gif" border="0" style="display:block;margin:0;padding:0;float:left"></td></tr><tr><td valign="top" style="margin:0;padding:0;border:3px solid #54BCB6;background:#f7f7ff;border-top:8px solid #54BCB6;"><div style="border:1px solid #308A85;padding:6px;"><pre style="margin:0;padding:0">'+content+'</pre></div></div></td></tr></table>';
 }
 gbid('_mypopupiFrame').style.top = gbid('_mypopupiFrame').style.top + 15;
 //gbid('_mypopupiFrame').style.width=popupObj.offsetWidth;
 //gbid('_mypopupiFrame').style.height=popupObj.offsetHeight-15;
}
