var JsLib=JL={};
JL.version = "v08325",
JL.emptyfun = function(){}
JL.ua=navigator.userAgent.toLowerCase();
//取得浏览器类型信息
var Browser={};
Browser.isMZ = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
Browser.isIE = window.ActiveXObject ? true : false;
Browser.isFF = (JL.ua.indexOf("firefox")!=-1);
Browser.isOP = (JL.ua.indexOf("opera")!=-1);
Browser.isSF = (JL.ua.indexOf("safari")!=-1);

String.prototype.trim=function(){  return this.replace(/(^\s+)|(\s+$)/g,""); }
//根据id返回元素的引用,是document.getElementById的别名
function $(id){ return document.getElementById(id);}
//根据name返回元素的引用数组,是document.getElementsByName的别名
function $N(name){ return document.getElementsByName(name);}
//根据参数中的多个id,返回元素的引用数组
function $A(){  for(var i=0, els= [],l=arguments.length;i <l; i++) els.push($(arguments[i])); return els;}
//根据参数中的多个id,返回对象,key为元素的id,value为元素的引用
function $R(){for(var i=0, o={},l=arguments.length;i<l; i++) o[arguments[i]]=$(arguments[i]); return o;}
//根据参数中的多个id,返回对象,key为元素的id,value为元素的值
function $V(){for(var i=0, o={},l=arguments.length;i<l; i++) o[arguments[i]]=$(arguments[i]).value; return o;}
//显示一个alert,参数用逗号分隔,当参数被转换成boolen类型为false时,该参数被替换成换行\n
function al(){for(var i=0, s="",l=arguments.length;i<l; i++)  s+=arguments[i]; alert(s);}
//document.write,参数用逗号分隔,当参数被转换成boolen类型为false时,该参数被替换成换行<br>
function dw(){for(var i=0,l=arguments.length;i<l;i++)  document.write(arguments[i]?arguments[i]:"<br>");}
function htmlEncode(str){var r=str;if(typeof str=='string'){var a=[[/&/g,"&amp;"],[/</g,"&lt;"],[/>/g,"&gt;"],[/ /g,"&nbsp;"],[/\"/g,"&quot;"],[/\'/g,"&#39;"],[/\r/g,"<br>"],[/\n/g,"<br>"]];for(var i=0;i<a.length;i++){r = r.replace(a[i][0],a[i][1]);}}return r;};
function htmlDecode(str){var r=str;if(typeof str=='string'){var a=[[/<br>/g,"\n"],[/&#39;/g,"'"],[/&quot;/g,"\""],[/&nbsp;/g," "],[/&gt;/g,">"],[/&lt;/g,"<"],[/&amp;/g,"&"]];	for(var i=0;i<a.length;i++){r = r.replace(a[i][0],a[i][1]); }}return r;};
//把URL带的参数(location.search)转为json类型 param string to json
function toQueryArgs(obj) {
	var ar = [];
	for(var p in obj)
		ar.push(p + "=" + encodeURIComponent(obj[p].toString()));
    return ar.join('&');
}
function getArgs(query) {
    query = query==null?"":query;
    var args = {},pairs = query.split("&");
    for(var i = 0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('=')
        if ( pos == -1) continue;
        args[pairs[i].substring(0,pos)] = decodeURIComponent(pairs[i].substring(pos+1));
    }
    return args;
}
//把location.search中的参数转成json格式
function getHrefArgs() { return getArgs(location.search.substring(1)); }
//按名字取得cookie内容
function parseCookie(str){
    var ar = str.split(/\s*;\s*/);
    var len = ar.length;
    for(var i=0,oRslt = {};i<len; i++){
        var at = ar[i].split(/\s*=\s*/);
        if(!at[0] || !at[1]) continue;
        oRslt[at[0]] = at[1];;
    }
    return oRslt;
}
function getCookie(name){
    return parseCookie(document.cookie)[name]||"";
}
//设置指定名字的cookie内容
function setCookie(name,value,path,domain){
    if(!path) path="/";
    if(!domain) domain="qq.com";
    document.cookie = name + "=" + value + "; path="+path+"; domain="+domain;
}
//删除cookie内容
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";
}
function getRdosValue(rdoName, txtId, msgNoSel, msgDigital){
    var rsltValue = "none";
    var rdos = document.getElementsByName(rdoName);
    for(var i=0,l=rdos.length;i<l;i++)
        if(rdos[i].checked == true)
            rsltValue = rdos[i].value;
    if(rsltValue == "none"){ alert(msgNoSel?msgNoSel:"请选择月份数!"); rdos[0].checked=true; rdos[0].focus(); return false;}
    if(rsltValue == "" || rsltValue == "0" || rsltValue == "on"){
        var txt = document.getElementById(txtId);
        var val = parseInt(txt.value,10);
        if(!/^\d+$/.test(txt.value) || isNaN(val) || val <=0 ){ alert(msgDigital?msgDigital:"月份数为正整数类型,请输入数字!");txt.value=1; txt.focus(); return false;}
        rsltValue = txt.value;
    }
    return parseInt(rsltValue,10);
}
function valid(rule,text){
    if(rule instanceof RegExp) return rule.test(text);
    else if(rule instanceof Function) return rule(text);
    else return true;
}
function bindIntFilter(el,cbf,nscbf){
    function intKeyPressFilter(e){
        var evt = window.event || e;
        var src = evt.srcElement || evt.target;
        var code =  evt.charCode || evt.keyCode;
        if (evt.charCode == 0) return true;       // Function key (Firefox only)
        if (evt.ctrlKey || evt.altKey) return true; // Ctrl or Alt held down
        if (code < 32) return true;             // ASCII control character
        if(/^\d$/.test(String.fromCharCode(code))) return true;
        evt.returnValue = false;
        if(evt.preventDefault) evt.preventDefault();
        return false;
    }
    function v(o){var n=parseInt(o.value,10);o.value=(isNaN(n)?0:n);}
    if(!(cbf instanceof Function)) cbf=function(){};
    if(Browser.isIE){
        el.attachEvent("onkeypress",function(){intKeyPressFilter();setTimeout(function(){cbf(el);v(el);},0);} );
        el.attachEvent("onkeydown",function(){ var code = event.keyCode; if(code!=8 && code!=46) return; setTimeout(function(){cbf(el);v(el);},0);} );
        el.attachEvent("ondrop",function(){if(!valid(/^\d*$/,event.dataTransfer.getData("text"))){event.returnValue=false;return;}; setTimeout(function(){cbf(el);v(el);},0);} );
        el.attachEvent("onpaste",function(){ try{ if(!valid(/^\d*$/,event.dataTransfer.getData("text"))){event.returnValue=false;return;}; setTimeout(function(){cbf(el);v(el);},0); }catch(e){event.returnValue=false;return;}});
        el.attachEvent("oncut",function(){ setTimeout(function(){cbf(el);v(el);},0);} );
    }else if(Browser.isFF || Browser.isOP || Browser.isSF){
        el.addEventListener("keypress",function(evt){intKeyPressFilter(evt); setTimeout(function(){cbf(el);v(el);},0);} ,false);
        el.addEventListener("contextmenu",function (evt){evt.preventDefault();return false;},false);
        //el.addEventListener("input",function (evt){if(!valid(/^\d*$/,evt.target.value)){ evt.preventDefault(); evt.stopPropagation();return false;};setTimeout(function(){cbf(el);},0);},false);
        el.addEventListener("dragenter",function (evt){this.setAttribute("bakValue",this.value);},false);
        el.addEventListener("dragdrop",function (evt){if(!valid(/^\d*$/,this.value)){this.value=this.getAttribute("bakValue")};setTimeout(function(){cbf(el);v(el);},0); },false);
    }else{
        if(nscbf instanceof Function) nscbf();
    }
}
function isFromTips(){
    var o = getHrefArgs();
    if(o["clientuin"] && o["clientkey"]){
        location.replace("http://ptlogin.qq.com/iedweb?clientuin=" + o["clientuin"] + "&clientkey=" + o["clientkey"] 
                                    +  "&return_url=" + encodeURIComponent(location.href.split("?")[0]));
        return true;
    }
    return false;
}
function isLogin(){
    var o={"uin":getCookie("uin").replace(/^[o0]+/i,""),"skey":getCookie("skey")};
	if(o.uin==""||o.skey=="") return false;
	return o["uin"];
}
function logout(f){
    setCookie("uin","");
    setCookie("skey","");
    if(f instanceof Function) f();
}
function nchangeImg(act,idx){
    if(idx==null)idx="";
    $("imgVerify"+idx).src="http://ptlogin2.qq.com/getimage/"+act+idx+"?aid=20000201&"+Math.random();
    $("txtVerify"+idx).focus();
}
//url,id,width,height,bgcolor,flashid
function renderFlash(o){
	var div = $(o.id||"divFlash");
	var sp = document.createElement('div');
	div.appendChild(sp);
	sp.id = sp.name = 'div'+Math.random().toString().replace(/^0\./,'');
	swfobject.embedSWF(o.url,sp.id, parseInt(o.width,10)||"100%",  
					parseInt(o.height,10)||"100%", o.version||"9.0.124",'http://free.qq.com/js325/expressinstall.swf', {},
					{'wmode':"transparent",'allowScriptAccess':'always','salign':'t'}, {});
}
function renderFlashs(ar){
	if(typeof swfobject =="undefined"){alert("加载swfobject.js失败！");return;}
	for(var i=0,l=ar.length;i<l;i++) renderFlash(ar[i]);
}
//BUG:在Opera下复制中文时会把中文的unicode编码放到clipboard上
function copyToClipboard(txt,cbf){
	if(window.clipboardData && window.clipboardData.setData){
		if(!window.clipboardData.setData("Text",txt)){
			alert("复制文本内容失败!"); return false;}
	}else if(Browser.isOP && navigator.mimeTypes["application/x-shockwave-flash"]){
		var d = document.createElement("div");
		document.getElementsByTagName("body")[0].appendChild(d);
		d.innerHTML="<embed src='/js325/clipboard.swf' FlashVars='clipboard="+escape(txt)+"' width='0' height='0' type='application/x-shockwave-flash'></embed>";
	}else if(window.netscape){
		try{
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
		}catch(e){
			alert('您的firefox安全限制限制您进行剪贴板操作!\n您可以在地址栏中输入"about:config"将"signed.applets.codebase_principal_support"设置为"true"来开启此功能!');
			return false;
		}
		try{
			clip=Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard)
			trans=Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable)
		}catch(e){return false;}
		trans.addDataFlavor("text/unicode");
		var oStr=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
		oStr.data=txt;
		trans.setTransferData("text/unicode",oStr,txt.length*2);
		try{clipid=Components.interfaces.nsIClipboard}catch(e){return false;}
		clip.setData(trans,null,clipid.kGlobalClipboard);
	}else{
		alert("该功能只支持MSIE，firefox和opera浏览器！");
		return false;
	}
	if(cbf instanceof Function) cbf();
}

var Tag = {
    regeditElement : function(){
        var args=arguments;
        for(var i=0,l = args.length;i<l;i++)
            this.dealTag($(args[i]));
    },
    dealTag:function(el){
        if(el.getAttribute("opcode") == "set")  this.dealTagSet(el);
        else   this.dealTagForeach(el);
    },
    dealTagSet:function(el){
        var data = this.getObjByNs(el.getAttribute("ns"));
        if(!data) return;
        for(var p in data)
            el.innerHTML = el.innerHTML.replace(new RegExp("\\[%=\\s*"+p+"\\s*%\\]","g"),data[p]);
    },
    dealTagForeach:function(el){
        var data = this.getObjByNs(el.getAttribute("ns"));
        if(!data) return;
        var l = data.length;
        if(l > 0){
            var html = el.innerHTML;
            el.innerHTML = "";
            for(var i=0;i<l;i++){
                var htmlfrag = html.replace(/\[%=\s*index\s*%\]/g,i+1);
                for(var p in data[i])
                    htmlfrag=htmlfrag.replace(new RegExp("\\[%=\\s*"+p+"\\s*%\\]","g"),data[i][p]);
                el.innerHTML+=htmlfrag;
            }
        }else{
            var p = el.getAttribute("emptyns").replace(/^\s+|\s+$/g,"");
            if(p==""){ el.innerHTML = ""; return ;}
            el.setAttribute("ns",p);
            el.setAttribute("emptyns","");
            this.dealTagForeach(el);
        }
    },
    getObjByNs : function(s){try{for(var ar = s.split(/\./),o=window,i=0,l=ar.length;i<l;o = o[ar[i++]]);return o;}catch(e){ return null;}}
};
function getPosition(obj) {
	var top=0,left=0,width=obj.offsetWidth,height=obj.offsetHeight;
	while (obj.offsetParent) {top += obj.offsetTop; left += obj.offsetLeft; obj = obj.offsetParent; }
	return {"top":top,"left":left,"width":width,"height":height};
}
//拖动函数
function drag(d, e) {
    e = e || window.event;
	var doc = document,omm="onmousemove",omu="onmouseup",mm="mousemove",mu="mouseup",olc="onlosecapture";
    var sX = e.clientX, sY = e.clientY;
    var oX = d.offsetLeft, oY = d.offsetTop;
    var dX = sX - oX, dY = sY - oY;
    if (doc.addEventListener) {
        doc.addEventListener(mm, mh, true);
        doc.addEventListener(mu, uh, true);
    }
    else if (doc.attachEvent) {
        d.setCapture( );
        d.attachEvent(omm, mh);
        d.attachEvent(omu, uh);
        d.attachEvent(olc, uh);
    }
    else {
        var oldmh = doc[omm];
        var olduh = doc[omu];
        doc[omm] = mh;
        doc[omu] = uh;
    }
    if (e.stopPropagation) e.stopPropagation( );
    else e.cancelBubble = true;
    if (e.preventDefault) e.preventDefault( );
    else e.returnValue = false;

    function mh(e) {
        if (!e) e = window.event;
        d.style.left = (e.clientX - dX) + "px";
        d.style.top = (e.clientY - dY) + "px";
        if (e.stopPropagation) e.stopPropagation( );
        else e.cancelBubble = true;
    }
    function uh(e) {
        if (!e) e = window.event;
        if (doc.removeEventListener) {
            doc.removeEventListener(mu, uh, true);
            doc.removeEventListener(mm, mh, true);
        }
        else if (doc.detachEvent) {
            d.detachEvent(olc, uh);
            d.detachEvent(omu, uh);
            d.detachEvent(omm, mh);
            d.releaseCapture( );
        }
        else {
            doc[omu] = olduh;
            doc[omm] = oldmh;
        }
        if (e.stopPropagation) e.stopPropagation( );
        else e.cancelBubble = true;
    }
}
/*
url:要请求的脚本地址
callback:成功回调函数
errcallback:失败回调函数
charset:脚本字符集
callbackFunctionName:返回脚本中回调函数的名字
*/
function loadJs(url,callback,errcallback,charset,callbackFunctionName){
    charset = charset?charset:"GB2312";
    var cFN = callbackFunctionName?callbackFunctionName:"callback";

    if(Browser.isIE){
        var df = document.createDocumentFragment();
        df[cFN] = function(data){
            s.onreadystatechange = df =null;
            try{if(callback) callback.apply(null,arguments); //callback(data);
            }catch(e){if(e.number == -2146823277){ return;} status = e.message;setTimeout("status=''",3000);}
        }
        var s = df.createElement("SCRIPT");
        s.charset = charset;
        df.appendChild(s);
        s.onreadystatechange = function(){
            if(s.readyState=="loaded") {
                s.onreadystatechange = df = null;
                try{if (errcallback) errcallback({error:{msg:"服务器繁忙，请稍后再试.",type:900}});
                }catch(e){if(e.number != -2146823277){status=e.message; }   setTimeout("status=''",3000);}
            }
        }
        s.src = url;
    }else{
        var i = document.createElement("IFRAME");
        i.style.display = "none";
        i.callback = function(data){callback.apply(null,arguments);i.callback = null;i.errcallback=null;i.src="about:blank";i.parentNode.removeChild(i);i = null;};
        i.errcallback = errcallback;
        try{
            document.body.appendChild(i);
            var doc = i.contentWindow.document;
            doc.write("<script>function " + cFN + "(data){frameElement.callback.apply(null,arguments)}<\/script><script src='"+url+"' charset='" + charset + "'><\/script>" 
                + '<script>setTimeout("frameElement.errcallback({error:{msg:\\"服务器繁忙，请稍后再试.\\",type:900}})",0);<\/script>');
            doc.close();
        }catch(e){status="请等待网页加载完成再进行操作!";setTimeout("status=''",3000);}
    }
}
//need return : (function(){frameElement.callback();})()
function submitByFrm(data,cbf,action){
    var i = document.createElement("iframe");
    i.width=i.height=0;
    i.callback = function(data){cbf.apply(null,arguments);i.callback = null;i.src="about:blank";i.parentNode.removeChild(i);i = null;};
    try{
        document.getElementsByTagName("body")[0].appendChild(i);
        var doc = i.contentWindow.document;
        var strFormEl = "";
        for(var p in data) strFormEl+='<input type="hidden" name="'+p+'" value="'+data[p].replace(/\"/g,"\\\"")+'"/>';
        var strHTML = '<body><form method="post" accept-charset="GB2312" enctype="multipart/form-data" action="'+action+'">'+strFormEl+'<\/form><\/body>';
        doc.write(strHTML);
        doc.close();
        doc.charset = "GB2312";
        setTimeout(function(){doc.forms[0].submit();},0);
    }catch(e){status="请等待网页加载完成再进行操作!";setTimeout("status=''",3000);}
}
//inspect(function(__$) { return eval(__$); });
function inspect(inspector, title) {
    var expression, result;
    if ("ignore" in arguments.callee) return;
    while(true) {
        var message = "";
        if (title) message = title + "\n";
        if (expression) message += "\n" + expression + " ==> " + result + "\n\n";
        else expression = "";
        message += "Enter an expression to evaluate:";
        expression = prompt(message, expression);
        if (!expression) return;
        result = inspector(expression);
    }
}
function addFavorite(name,url,desc)
{
	if (Browser.isIE)
		window.external.addFavorite(url,name);
	else if(Browser.isFF)
		window.sidebar.addPanel(name, url,desc||"");
	else
		alert("您当前使用的浏览器不支持此功能！");
	return false;
}


