document.domain = "qq.com";
var g_iUin="";
var g_iLoginUin;//登录号码
var g_iStatUin=0;//统计非登录用户听歌的随机数uin
var g_actId=0;//活动号
var g_Vip=-1;//主人绿钻身份位
var g_LeftTicket=-1;//剩余投票数
var g_strSongName = "";
var g_strUpPicUrl = "";
var g_iActStep = 0;//0:还没有开始 1,2 海选阶段 3:任务赛阶段 4: 结束
//全局变量
var g_aParams;
var g_XDoc = {};
var g_JData = {};
var g_Templet = {};
var g_Mod = {};
var g_ModuleFunction = {};

//浏览器对象，包括类别属性
var Browser = new Object(); 
//判断是否为IE旧版浏览器
Browser.isIE = window.ActiveXObject ? true : false;
//判断是否为IE7浏览器
Browser.isIE7 = Browser.isIE && window.XMLHttpRequest;
Browser.isIE8 = window.XDomainRequest ? true : false,
//判断是否为Mozilla浏览器
Browser.isMozilla = Browser.isIE?false:(typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
if(Browser.isMozilla)
{
	Node.prototype.__defineGetter__("xml",function(){var oSerializer=new XMLSerializer();return oSerializer.serializeToString(this,"text/xml");});
	Element.prototype.selectNodes=function(sXPath){var oEvaluator=new XPathEvaluator();var oResult=oEvaluator.evaluate(sXPath,this,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);var aNodes=new Array;if(oResult!=null){var oElement=oResult.iterateNext();while(oElement){aNodes.push(oElement);oElement=oResult.iterateNext();}};return aNodes;}
	Element.prototype.selectSingleNode=function(sXPath){var oEvaluator=new XPathEvaluator();var oResult=oEvaluator.evaluate(sXPath,this,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);if(oResult!=null){return oResult.singleNodeValue;}else{return null;}}
}
function $(id){return document.getElementById(id);}
function $n(n){return document.getElementsByName(n);}
function $t(name){return document.getElementsByTagName(name);}
function hideElement(e){$(e).style.display="none";}
function showElement(e){$(e).style.display="";}

var ToArray = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0, length = iterable.length; i < length; i++)
      results.push(iterable[i]);
    return results;
  }
}
Function.prototype.bind = function() {
  var __method = this, args = ToArray(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat(ToArray(arguments)));
  }
}

/**
 * 设置Cookie
 * @param {String} name 字段名称
 * @param {Object} value 值
 * @param {String} path 路径
 * @param {String} 域名,默认域名为"qq.com"
 */
function setCookie(name,value,path,domain){
	if(!path)
		path="/";
	if(!domain)
		domain="qq.com";
	document.cookie = name + "=" + value + "; path="+path+"; domain="+domain;
}

/**
 * 获取Cookie
 * @param {String} name 字段名称
 */ 
function getCookie(name){
    var r = new RegExp("(\\b)"+name+"=([^;]*)(;|$)");
    var m = document.cookie.match(r);
    return (!m?"":m[2]);
}
/**
 * 清除Cookie
 * @param {String} name 字段名称
 * @param {String} path 路径
 * @param {String} 域名,默认域名为"qq.com"
 */ 
function deleteCookie(name, path, domain){
    if(!path)
        path="/";
    if(!domain)
        domain="qq.com";
    document.cookie = name + "=" + "; path=" + path + "; domain=" + domain + "; expires=Thu, 1 Jan 1970 00:00:01 UTC";
}

/**
 * 引用新的JS脚本
 * @param {Object} src
 * @param {Object} option 可以为回调函数或者延迟回收时间
 * @param {Object} _doc 指定创建script的document
 */
function includeJS(src,option,_doc){
	if(!_doc)
		_doc=document;
    var callback;

    var s = _doc.createElement("script");
    s.id="includeScript"+Math.round(Math.random()*10000);

    if(typeof option=="function") 
        callback=option;
    else if(typeof option=="number")
        callback=new Function("setTimeout(\"try{removeElement(_doc.getElementById('"+s.id+"'))}catch(ex){}\","+option+")");
    if (callback){ 	
        if (Browser.isIE) {
            s.onreadystatechange = function(){
                if (s.readyState != "loaded" && s.readyState != "complete")
                    return;
                s.onreadystatechange = null;
                setTimeout(callback,50);
            };
        }else{
            s.onload = callback;
        }
    }
     if(!!src)s.src = src;
    _doc.getElementsByTagName("head")[0].appendChild(s);
    return s;
}
/**
 * 获取对象坐标
 * @param {Object} obj
 * @return 坐标数组，["top","left","width","height"]
 * @type Array
 */ 
function getPosition(obj) {
    var top=0;
    var left=0;
    var width=obj.offsetWidth;
    var height=obj.offsetHeight;
    while (obj.offsetParent) {
        top += obj.offsetTop;
        left += obj.offsetLeft;
        obj = obj.offsetParent;
    }
    
    return {"top":top,"left":left,"width":width,"height":height};
}
/**
 * 删除Dom对象
 */
function removeElement(element)
{
	if((typeof element)=="string")
		element=$(element);
	if(!!element && (typeof element)=="object"){
		element.parentNode.removeChild(element);
	}
}
/**
 * 过滤特殊符号
 * @param {String} srcString
 * @type String
 */
function htmlReplace(srcString)
{
	return srcString.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\n/g,"<br/>").replace(/\"/g,"&quot;");
}

/**
 * 还原特殊符号
 * @param {String} srcString
 */
function unReplaceStr(srcString)
{
	return srcString.replace(/&amp;/g,"&").replace(/&#45;/g,"-").replace(/&#95;/g,"_").replace(/&#63;/g,"?").replace(/&#61;/g,"=").replace(/&#37;/g,"%").replace(/&#58;/g,":").replace(/&#32;/g," ").replace(/&#64;/g,".");
}
/**
 * 过滤注入脚本
 * @param {String} srcString
 */
function ScriptReplace(srcString)
{
	srcString = srcString.replace(/&#(\d+);?/g,function(a,b){return String.fromCharCode(b)}).replace(/&#x(\d+);?/ig,function(a,b){return String.fromCharCode(parseInt(b,16))}).replace(/(\Won)(\w+\s*=)/ig,"$1<wbr>$2").replace(/(\Wexpres)(sion\()/ig,"$1<wbr>$2").replace(/(\Wbehav)(ior\s*:)/ig,"$1<wbr>$2").replace(/(obj)(ect)/ig,"$1<wbr>$2").replace(/(scr)(ipt)/ig,"$1<wbr>$2").replace(/(emb)(ed)/ig,"$1<wbr>$2").replace(/\n|\r/g,"<br>").replace(/\t/g," &nbsp; &nbsp;");
	return srcString;
}

/**
 * 校验url地址合法性,一般用来判断get方式获得的url地址
 * @param {String} url
 * @author 安全中心
 */
function vaildUrl(sUrl)
{
	return (/^(https?:\/\/)?[\w\-.]+\.(qq|paipai|soso|taotao|ied)\.com($|\/|\\)/i).test(sUrl)||(/^[\w][\w\/\.\?\-_=,]+$/i).test(sUrl)||(/^[\/\\][^\/\\]/i).test(sUrl) ? true : false;
}

/**
 * 过滤关键脚本
 * @param {String} str
 */
function ScriptSearch(str)
{
	var reg = new RegExp("Location|onload|meta|iframe|cookie|craker|innerHTML|object|script", "gi");
	var returnStr = str.match(reg);
	return returnStr;
}
    

//Ajax 异步调用方法
var callBackHsmp=new Array();
function getXMLDOM()
{
	if(!Browser.isIE) return null;
	var xmldomversions = ['MSXML2.DOMDocument.5.0', 'MSXML2.DOMDocument.4.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument', 'Microsoft.XMLDOM'];
	for(var i=xmldomversions.length-1;i>=0;i--)
	{
		try{
			return new ActiveXObject(xmldomversions[i]);
		}catch(e){}
	}
	return null;
}

function getXMLHTTP()
{
	if(window.XMLHttpRequest) return new XMLHttpRequest();
	if(Browser.isIE){
		var xmlhttpversions=['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
		for(var i=xmlhttpversions.length-1;i>=0;i--){
			try{
				return new ActiveXObject(xmlhttpversions[i]);
			}catch(e){
			}
		};
		var s="对不起，您浏览器设置不支持XML打开，请尝试在IE菜单中打开\n“工具”-“Internet选项”-“安全”-“自定义级别”，将\n“对标记为可安全执行脚本的ActiveX控件执行脚本”和\n“运行ActiveX控件和插件”\n这两项选项更改为“允许”，再重新打开空间。";
		if(document.cookie.indexOf("xmlhttp_fail")>-1)
			alert(s);
		status = s;
		for(var i=1;i<32;i++){
			setTimeout("status=\""+s.substring(0,123).replace(/\n/g,"").substr(i)+"\"", i*300+3000);
		}
		document.cookie="xmlhttp_fail=prompted";
		return null;
	}
}

/**
 * parse XML
 * @param {Object} st
 */ 
function parseXML(st)
{
	if(Browser.isIE){
		var result = getXMLDOM();
		result.loadXML(st);
	}else{
		var parser = new DOMParser();
		var result = parser.parseFromString(st, "text/xml");
	}
	return result;
}


/**
 * 获取XML节点的文本  
 * @param {Document} doc XML文档对象
 * @param {Object} xpath 结点路径
 * @return 文本内容
 * @type String
 */ 
function getElementText(doc, xpath)
{
	var retval="";
	if (!doc) return "";
	var v = doc.selectSingleNode(xpath);
	if (v) retval = v.text;
	return retval;
}

/**
* @see #loadXMLAsync
*/
function loadXMLAsyncNoCache(xID, xUrl, callback, err_callback,data,returnType){return loadXMLAsync(xID, xUrl, callback, err_callback,true,data,returnType);};
	
/**
* @see #loadXMLAsync
*/
function LoadXMLDataEx(itemno,url,callback,err_callback,data){return loadXMLAsync(itemno, url, callback, err_callback,false,data);};
	
/**
* 用XMLHTTP加载异步加载数据
* @param {String} xID
* @param {String} xUrl
* @param {Function} callback
* @param {Function} err_callback
* @param {Boolean} nocache
* @param {String} data
* @param {String} returnType
* @see #LoadXMLDataEx
* @see #loadXMLAsyncNoCache
*/
function loadXMLAsync(xID, xUrl, callback, err_callback,nocache,data,returnType)
{
	var m=xUrl.match(/(^http:\/\/([a-z,A-Z,0-9,\-,_,\.]+\.qq\.com:8080)\/)/); // todo by hyc
	if(!m){
		m=xUrl.match(/(^http:\/\/([a-z,A-Z,0-9,\-,_,\.]+\.qq\.com)\/)/);
		if(!m) {
			alert("不能访问非qq.com域的资源");
			return;
		}
	}
	var domain = m[0];
	var host = m[2];
	var proxyPageURL =	"http://users.qzone.qq.com/proxy.html";
	var proxyFrame=document.getElementById('bottomFrame');
	var isRightProxy=false;
	try{isRightProxy=proxyFrame.src.indexOf(proxyPageURL)==0}catch(e){}
	if(isRightProxy)
	{
		//找到了代理页面
		if(!callBackHsmp[host] && typeof callBackHsmp[host] != "undefined")
		{
			//代理页面没用回调等待队列（初始化已经完成）
			if(top.Browser.isMozilla)
			{
				document.getElementById('bottomFrame').contentWindow.loadXMLAsync(xID, xUrl, callback, err_callback,nocache,data,returnType);
			}
			else
			{
				document.frames[1].loadXMLAsync(xID, xUrl, callback, err_callback,nocache,data,returnType);
			}
		}
		else
		{
			if (typeof callBackHsmp[host] == "undefined") callBackHsmp[host] = [];
			callBackHsmp[host][callBackHsmp[host].length]={
				"callback":callback,
				"xID":xID,
				"xUrl":xUrl,
				"err_callback":err_callback,
				"nocache":nocache,
				"data":data,
				"returnType":returnType
			};
		}
		return;
	}
	if (!callBackHsmp[host])
	{
		callBackHsmp[host]=[{
			"callback":callback,
			"xID":xID,
			"xUrl":xUrl,
			"err_callback":err_callback,
			"nocache":nocache,
			"data":data,
			"returnType":returnType
		}];
		//createProxy(proxyPageURL);
		proxyFrame.src=proxyPageURL;
	}
}

/**
 * 创建proxy页面
 * @param {String} src
 */
function createProxy(src)
{
	var f = document.getElementsByTagName("iframe");
	for(var i=0;i<f.length;i++)
		if (f[i].src.indexOf(src)!= -1) return;
	
	var i = document.createElement("iframe");
	var proxyDiv = $("proxy");
	if (!proxyDiv) document.body.insertBefore(i,null); else $("proxy").appendChild(i);
	i.width=0;
	i.height=0;
	i.src=src;
	i = null;
}

/**
 * 在创建Document Element时指定名字
 * @param {DocumentElement} element
 * @param {String} name，名字为null时操作和document.createElement相同
 * @type DocumentElement
 */
document.createElementByName = function (element,name)
{
	if (!name) return document.createElement(element);
	if (Browser.isIE){
		return document.createElement("<" + element + " name=\""+name+"\"/>");
	} else {
		element = document.createElement(element);
		element.name=name;
		return element;
	}
}

/**
 * 获取字符串的真实长度
 */
String.prototype.getRealLength = function(){return this.replace(/[^\x00-\xff]/g,"aa").length;};

/**
 * 去掉字符串前后空格
 */
String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g,"");};

/**
 * 编码需要post的字符串
 */
String.prototype.encode = function(){return this.replace(/[\x09\x0A\x0D\x21-\x29\x2B\x2C\x2F\x3A-\x3F\x5B-\x5E\x60\x7B-\x7E]/g,function(a){return "%"+((a.charCodeAt(0)<16)?("0"+a.charCodeAt(0).toString(16)):(a.charCodeAt(0).toString(16)))}).replace(/[\x00-\x20 ]/g,"+");};

/**
 * 解码实体化的字符串，包括 " < > ' &
 */
String.prototype.decode = function(){return this.replace(/&quot;/g,"\"").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#39;/g,"'").replace(/&amp;/g,"&")};

/**
 * 编码字符串成实体，包括 " < > &
 */
String.prototype.encode2 = function(){return this.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")};

/**
 * 解码字符串中的换行以及空格
 */
String.prototype.decodeHtml = function(){return this.replace(/\x0a/g,"<br/>").replace(/\x20\x20/g,"&nbsp;&nbsp;");}

/**
* 转换文本内容为html
*/
String.prototype.Text2HTML=function(){
	var d=document.createElement("DIV");
	if(Browser.isIE) {d.innerText=this.replace(/\n/g,"");return d.innerHTML}
	d.textContent=this.replace(/\n/g,"");
	return d.innerHTML.decodeHtml();
};

/**
 * 日期转换
 * @param {String} expression 日期表达式例如: "yyyy-MM-dd hh:mm:ss"
 * @author zishunchen
 */
Date.prototype.format = function(expression){
	var str = expression?expression:"yyyy-MM-dd hh:mm:ss";
	str = str.replace(/yyyy/g,this.getFullYear());
	str = str.replace(/yy/g,this.getFullYear().toString().substr(2));

	str = str.replace(/MM/g,(this.getMonth() + 1).fixDigit(2));
	str = str.replace(/dd/g,this.getDate().fixDigit(2));
	str = str.replace(/hh/g,this.getHours().fixDigit(2));
	str = str.replace(/mm/g,this.getMinutes().fixDigit(2));
	str = str.replace(/ss/g,this.getSeconds().fixDigit(2));

	return str;
}

/**
 * 数值补位
 * @param {Number} len 字符传直接显示长度
 * @return 补位后的字符传
 * @type String
 * @deprecated 注意数值不能为非负数
 * @author zishunchen
 */
Number.prototype.fixDigit = function(len){
	var fixLen = len - this.toString().length + 1;
	return new Array(fixLen<0?0:fixLen).join("0") + this;
}

// Mozilla 兼容处理
if(Browser.isMozilla) includeJS("http://"+document.domain+"/js/mozilla.js");

var _st = window.setTimeout;
if(!window.setTimeout.constructor){
	window.setTimeout = function(fRef, mDelay) {
	    if(typeof fRef == 'function'){
	        var argu = Array.prototype.slice.call(arguments,2);
	        var f = (function(){ fRef.apply(null, argu); });
	        return _st(f, mDelay);
	    }
	    return _st(fRef,mDelay);
	}
}

var _int = window.setInterval;
if(!window.setInterval.constructor){
	window.setInterval = function(fRef, mDelay) {
	    if(typeof fRef == 'function'){
	        var argu = Array.prototype.slice.call(arguments,2);
	        var f = (function(){ fRef.apply(null, argu); });
	        return _int(f, mDelay);
	    }
	    return _int(fRef,mDelay);
	}
}

// json支持
function objSelectNodes(obj,oPath){
	if(/^\//.test(oPath)) oPath = oPath.substr(1);
	var a = oPath.split("/");
	var o = obj[a.shift()];
	if(!o) return [];
	if(!o.sort) o = [o];
	if(a.length==0)	return o;
	var subPath = a.join("/");
	var result = [];
	for(var i=0;i<o.length;i++){
		var a = objSelectNodes(o[i],subPath);
		if(a && a.length>0)
			result = result.concat(a);
	}
	return result;
}

function objSelectSingleNode(obj,oPath){
	var o = objSelectNodes(obj,oPath);
	return (o.length>=1)?(o[0]):(null);
}

function isValidXMLdom(o){
	if(!o)
		return false;
	if(!o.xml)
		return false;
	if(o.xml=="")
		return false;
	if(!(/^<\?xml/.test(o.xml)))
		return false;
	//if(!o.selectNodes("error").length>0)
	//	return false;
	return true;
}
/**
 * 获取xmlnode的指定子节点的text
 * @param {domnode} xmlnode
 * @param {String} subnodename 指定字节点的name(path)
 */
function getSubNodeText(xmlnode,subnodename){
	with(xmlnode){
		try{
			return selectSingleNode(subnodename).text;
		}catch(e){
			return "";
		}
	}
}
/**
*JSON对象克隆方法
*@param {Object/Array/String/Number/Function} obj 入值
*@return 克隆出来的新对象
*/
function objectClone(obj,preventName){
	if((typeof obj)=='object'){
		var res=(!obj.sort)?{}:[];
		for(var i in obj){
			if(i!=preventName)
				res[i]=objectClone(obj[i],preventName);
		}
		return res;
	}else if((typeof obj)=='function'){
		return (new obj()).constructor;
	}
	return obj;
}
//上传图片到相册的cgi程序会调用closePopup，modify by seven，只用来进行上传成功后的回调
function closePopup()
{
	try{if (window.popupCallback) window.popupCallback();
	window.popupCallback = null;
	}catch(e){}
}

/**
 * 判断是否为合法的qq号码
 */
function checkUin(uin){
	var R=/^[1-9]\d{4,11}$/;
	return R.test(uin);
}

/**
 * 检查登录态
 * @return int，用户QQ帐号
 */
function checkLogin(){
	if(g_iLoginUin>10000){
		return g_iLoginUin;
	}else{
		var t=parseInt(getCookie("zzpaneluin"),10);
		if(checkUin(t)&&(t>10000))
			return t;
		t=parseInt(getCookie("uin").replace(/[^\d]/g,""),10);
		if(checkUin(t)&&(t>10000))
			return t;
		else
			return 0;
	}
}

/**
 * 显示 tips 提示
 * @param {Object} obj
 * @param {String} html
 * @author zishunchen
 * @see #hideTitle
 */
function showTitle(obj,html){
	var sT = document.getElementById("sTitle");
	if (!sT)	{
		sT = document.createElement("div");
		sT.id = "sTitle";
		sT.style.cssText = "position:absolute;border:1px solid #000;padding:2px;background:#FFFFCC;font-size:12px";
		document.body.appendChild(sT);
	}
	sT.style.display = "";
	sT.style.left = getPosition(obj).left;//event.clientX;
	sT.style.top = getPosition(obj).top-25-document.scrollTop;
	sT.innerHTML = html;
	clearTimeout(window._stTimeout);
}
/**
 * 隐藏 tips 提示
 * @see #showTitle
 */
function hideTitle(){
	var sT = document.getElementById("sTitle");
	if(!!sT)
		sT.style.display = "none";
}
var r_index = /<%=index%>/g
var r_text = /<%=text%>/g
var r_attribute_global = /<%=@[#~&]?(\w+)%>/g
var r_escape_text = /<%=#text%>/g
//#表示内容需要进行escape后插入到页面中间的脚本中去
var r_plain_text = /<%=~text%>/g
//~表示需要无格式内容，即去除所有的换行、制表符、单双引号
var r_entity_text = /<%=&text%>/g
//&表示内容需要进行text2HTML转换，吧符号转义为实体。
//modify by seven,去掉不必要的明博和普通播客的判断，因为k歌不是Qzone
function fillDIV(divId,xDoc,bOptimize){
	var div;
	if(typeof(divId) == "object")
		div = divId;
	else
		div = $(divId);
	if (!div) {alert("指定的模版容器"+divId+"不存在");return;}
	
	var templetHTML;
	if (div.oldHTML) {
		templetHTML = div.oldHTML;
	}else{
		templetHTML = div.oldHTML = div.innerHTML;
	}
	templetHTML = templetHTML.replace(/\[%/g,"<%").replace(/%\]/g,"%>").replace(/\{%/g,"<%").replace(/%\}/g,"%>").replace(/\<!--%/g,"<%").replace(/%-->/g,"%>").replace(/%5B%/g,"<%").replace(/%%5D/g,"%>");
	div.innerHTML = doFill(templetHTML,xDoc,0,bOptimize);
	div.style.display = "";
}

/**
 * 执行div填充操作
 * @param {String} templetHTML
 * @param {Document} xDoc
 * @param {Int} xLevel>=0，为0是第一级页面模板
 * @type string
 */
function doFill(templetHTML,xDoc,xLevel,bOptimize){
	xLevel = xLevel?xLevel:0;
	var r_index = /<%=index%>/g;
	var r_text = /<%=text%>/g;
	var r_attribute_global = /<%=@([#~&\w]+)%>/g;
	var r_escape_text = /<%=#text%>/g;
	//#表示内容需要进行escape后插入到页面中间的脚本中去
	var r_plain_text = /<%=~text%>/g;
	//~表示需要无格式内容，即去除所有的换行、制表符、单双引号
	var r_entity_text = /<%=&text%>/g;
	//&表示内容需要进行text2HTML转换，吧符号转义为实体。
	var isXML = !!xDoc.xml;
	var stRegPrefix = "<%repeat_"+xLevel+"\\s*match=\"([^\"]+)\"[^%]*%>";
	var stRegContent = "<%repeat_"+xLevel+"[^>]*%>((.|\\n)+)<%_repeat_"+xLevel+"%>";

	var r_repeat_match = new RegExp(stRegPrefix);
	var r_repeat_match_global = new RegExp(stRegPrefix,"g");
	var r_repeat_content = new RegExp(stRegContent);
	var r_repeat_match_next_level = new RegExp("<%repeat_"+(xLevel+1)+" match=\"([^\"]+)\"");

	if (templetHTML.match(r_repeat_match)==null){
		alert("没有找到xml节点<%repeat_"+(xLevel)+"%>");
		return;
	}

	var arPrefix = templetHTML.match(r_repeat_match_global);
	var startPosition = 0;
	for (var i=0;i<arPrefix.length;i++){
		var st = arPrefix[i];
		var nodePath = st.replace(/^.*match=\"|\".*$/g,""); //获得xml节点路径
		if (st.indexOf("preCallback")>0)
			var fnPreCallBack = eval(st.replace(/^.*preCallback=\"|\".*$/g,"")); //获得预回调函数
		if (st.indexOf("callback")>0)
			var fnCallBack = eval(st.replace(/^.*callback=\"|\".*$/g,"")); //获得回调函数
		startPosition = templetHTML.indexOf(st);
		var endPosition = templetHTML.indexOf("<%_repeat_"+xLevel+"%>",startPosition);
		var replaceContent = templetHTML.substring(startPosition,endPosition+13);
		startPosition += st.length;
		var repeatContent = templetHTML.substring(startPosition,endPosition); //获得内容模板
		var nodes = isXML?xDoc.selectNodes(nodePath):objSelectNodes(xDoc,nodePath); //获得xml节点
		var arContent = [];
		var repeatTimes = nodes.length;
		if (st.indexOf("repeat_num")>0){
			var sTimes = st.replace(/^.*repeat_num=\"|\".*$/g,"");
			if(!isNaN(sTimes))
				repeatTimes=Math.min(repeatTimes,parseInt(sTimes,10));
		}

		for (var j=0;j<repeatTimes;j++){
			var node = nodes[j];
			if(fnPreCallBack)fnPreCallBack(node,j);//预处理节点
			var content = repeatContent;
			if (repeatContent.match(r_repeat_match_next_level)!=null) //处理子节点
				content = doFill(repeatContent,node,xLevel+1,bOptimize); // 递归调用
			var st = isXML?node.text:node;
			var s = content.replace(r_index,(j+1));
			if(typeof st=="string"){
				s=s.replace(r_text,st);
				if(r_escape_text.test(s))
					s=s.replace(r_escape_text,escape(st));//需要escape的内容
				if(r_plain_text.test(s))
					s=s.replace(r_plain_text,st.replace(/[\r\n\t'"]/g," "));//需要去除换行和制表符的内容
				if(r_entity_text.test(s))
					s=s.replace(r_entity_text,st.Text2HTML());//需要进行text2html转换的内容
			}
			if(0 == j){
				var attributes = content.match(r_attribute_global);
				if (attributes == null) {
					attributes = [];
				}
				else if(bOptimize){
					var tempArray = [],oPushed={};
					for(var m=0,mLen = attributes.length;m<mLen;m++){
						if(m==0 || !oPushed[attributes[m]]){
							tempArray.push(attributes[m]);
							oPushed[attributes[m]] = true;
						}
					}
					attributes = tempArray.sort().reverse();
				}
			}
			
			for (var k=0;k<attributes.length;k++){
				var attrTag = attributes[k].replace(/\W/g,"");
				var attrValue = isXML?nodes[j].getAttribute(attrTag):nodes[j][attrTag];
				if (attrValue==null && isXML && nodes[j].selectSingleNode(attrTag)!=null)
					attrValue = nodes[j].selectSingleNode(attrTag).text;
				if (attrValue==null) attrValue = "";
				attrValue = attrValue.toString();
				if(/@#/.test(attributes[k])) attrValue=escape(attrValue);//需要escape的属性
				if(/@~/.test(attributes[k])) attrValue=attrValue.replace(/[\r\n\t'"]/g," ");//需要去除换行和制表符的属性
				if(/@&/.test(attributes[k])) attrValue=attrValue.Text2HTML();//需要进行text2html转换的属性
				var reg = new RegExp(attributes[k],"g");
				s = s.replace(reg, attrValue.replace(/\$/g,"$$$$"));
			}
			
			arContent[j] = s;
			if (fnCallBack) fnCallBack(node,arContent,j);
		}
		templetHTML = templetHTML.replace(replaceContent,arContent.join(""));
	}
	return templetHTML;
}
/**
 * @param {Int} templetID 模版编号
 * @param {XMLDocumentElement} xDoc xml数据源 
 * @param {Boolean} limit 是否采用带循环次数的Fill
 * @type string
 * @see #doFill
 * @version 1.0
 * 从模板数组g_Templet中获取制定编号的模板，调用doFill或者doFill_Limit生成目标html字符串
 * @author zishunchen
 * 去除对已弃用的doFill_Limit的依赖，同时不再接收limit布尔参数。
 * @version 1.1
 * @author stonehuang
 */
function doFillEx(templetID,xDoc,bOptimize) {	
	if (!g_Templet[templetID]) {return "<div style='margin:4px'>无法获取模块样板</div>"}
	if (!xDoc){return "<div style='margin:4px'>对不起，现在服务器忙</div>"}
	return doFill(g_Templet[templetID],xDoc,0,bOptimize);
}

/**
 * JsTemplate类//
 */
var JsTemplate = {
	Reg: {
		text: /\$(\w+)\$/ig, //标签
		repeat: /<!--\$list (\w+) begin\$--((.|\n)+?)--\$list (\w+) end\$-->/i, //循环
		repeat_g: /<!--\$list (\w+) begin\$--((.|\n)+?)--\$list (\w+) end\$-->/ig //循环全局
	},
	transTemplate: function(sHtml, oJson, bRepeat)
	{
		//add by seven，replace函数的替换文本如果为函数，则接收的第一个参数为整个匹配字符串，如果匹配正则
		//表达式中有小括号，假设捕获了m个小括号的反向引用，则第二个参数到第m+1个参数是捕获的反向引用，
		//第 m+2 个参数是在 stringObj 中匹配出现的偏移量，而第 m+3 个参数为 stringObj
		//所以替换函数的参数列表最好为$0开始，否则容易混淆正则表达式的反向引用的表示
		//firefox会把模版中＞转为&gt;所以先转回来
		function _transRepeat($0, $1, $2)
		{
			return JsTemplate.transTemplate($2, oJson[$1], true);
		}
		if (this.Reg.repeat.test(sHtml))
		{
			sHtml = sHtml.replace(this.Reg.repeat_g, _transRepeat);
		}
		var nIndex = 0;
		var sReturnValue = "";
		function _transText($0, $1)
		{
			if (bRepeat)
			{
				return oJson[nIndex][$1];
			}
			else
			{
				return oJson[$1];
			}
		}
		if (bRepeat)
		{
			while (nIndex < oJson.length)
			{
				sReturnValue += sHtml.replace(this.Reg.text, _transText);
				nIndex++;
			}
		}
		else
		{
			sReturnValue = sHtml.replace(this.Reg.text, _transText);
		}
		return sReturnValue;
	}
};

function query_string_parse(s)
{
	var queryHash = {};
	if(!!s)
	{
		s = s.replace(/&amp;/g, "&");
		var re  = /(\w+)=([^&]*|)/g;
		while ((arr = re.exec(s)) !=null)
		{
			queryHash[arr[1]] = arr[2];
		}
		return queryHash;
	}
	else
	{
		queryHash["isSearch"]=(location.search.substr(1)=="")?false:true;
		var se=queryHash["isSearch"]?location.search.substr(1):false;
		if(se)
		{
			var re=/(\w+)=([^&]*|)/g;
			var cnt=0;
			while ((arr = re.exec(se)) !=null)
			{
				queryHash[arr[1]] = arr[2];
				cnt++;
			}
			if(cnt==0 && !((/[\=\?\&]/).test(se)))
			{
				queryHash[se] = true;
			}
		}
		return queryHash;
	}
}

//发送读统计状态请求
// @param {string} url
// @param {int} t 超时时间(ms)
function statImgSend(url,t)
{
	if (!top.tmpMusicStat)
	{
		top.tmpMusicStat=[];
	}
	var l = top.tmpMusicStat.length;
	top.tmpMusicStat[l] = new Image();
	with(top.tmpMusicStat[l])
	{
		onload=onerror=new Function('this.ready=true;this.onload=this.onerror=null;top.statImgClean();');
	}
	top.setTimeout("top.tmpMusicStat["+l+"].src = '"+url+"';",t);
}

//清理统计状态请求所使用的图片
function statImgClean()
{
	for(var i=0,l=top.tmpMusicStat.length;i<l;i++)
	{
		if(!!top.tmpMusicStat[i] && !!top.tmpMusicStat[i].ready)
		{
			delete top.tmpMusicStat[i];
		}
	}
}
//获取统计用uin或随机数
function r_GetRUin()
{
	if (g_iLoginUin && g_iLoginUin>10000)
	{
		return g_iLoginUin;
	}
	else
	{
		g_iLoginUin=checkLogin();
		if(g_iLoginUin>10000)
		{
			return g_iLoginUin;
		}
	}
	var uin=top.g_iStatUin;
	if(uin!=null && uin>0)
	{
		return uin;
	}
	var ruv=(""+(Math.random()*1000000000)).split('.')[0];
	top.g_iStatUin=ruv;
	return ruv;
}
function rpt_url(url,data)
{
	var pul = url+"?"+"t="+Math.random()+"&"+data;
	var tt = new Image();
	tt.src = pul;
	tt.onload=tt.onerror=function(){this.onload=this.onerror=null;};
}
var rpt_f = false;
function rpt_ksong(uin,songid)
{
	if(!rpt_f)
	{
		rpt_f = true;
		setTimeout("rpt_f=false;",1000*60);
		rpt_url("http://shopcgi.qqmusic.qq.com/fcgi-bin/ksong/fcg_ksong_stat.fcg","type=1&uin="+r_GetRUin()+"&listenuin="+uin+"&songid="+songid);
	}
}
function closePopup()
{
}/*  |xGv00|8e710f12dc66e49537407f1788bf0aaa */