//free.qq.com活动中常用的函数
var JsLib={};
JsLib.version = "0.0.1",
JsLib.emptyfun = function() {}

//是否是调试模式
var isDebugMode = (typeof __DEBUG__ != "undefined");
if(!isDebugMode){
    var wp = breakpoint = JsLib.emptyfun;
}

//取得浏览器类型信息
var Browser={};
Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
Browser.isIE = window.ActiveXObject ? true : false;
Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
Browser.isSafari = (navigator.userAgent.toLowerCase().indexOf("safari")!=-1);
Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);

//根据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 $O(){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>");}
//window.prompt的别名函数,支持更多参数
//没有参数时:调试模式:显示调试框
//           非调试模式:显示变量名为debug的变量的值,不存在显示undefined
//有一个参数时:显示该参数
//两个参数时: 正常调用prompt
//大于两个时:
function pt(){
    var as=arguments,l=as.length,s="";
    if(l==0){
        if(isDebugMode){
            bp(empty,"");
            s=null;
        }else s=prompt("debug:",typeof debug=="undefined"?"undefined":debug);
    }
    else if(l==1) s=prompt("free.qq.com -Debug prompt",as[0]);
    else if(l==2) s=prompt(as[0],as[1]);
    else{for(var i=0,l=as.length,ar=[];i<l;i++) ar.push(as[i]);s=prompt("free.qq.com -Debug prompt",ar.join(" ^|^ "));}
    return s;
}
//判断是否当前窗口是从Tips来的
function isFromTips(){
    var oSearch = getHrefArgs();
    if(oSearch["clientuin"] && oSearch["clientkey"])
        location.replace("http://ptlogin.qq.com/iedweb?clientuin=" + oSearch["clientuin"] + "&clientkey=" + oSearch["clientkey"] 
                                    +  "&return_url=" + encodeURIComponent(location.href.split("?")[0]));
}

//把URL带的参数(location.search)转为json类型 param string to json
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)); }
/*
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); /*callback(data);*/ i.callback = 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(data)};<\/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);}
    }
}
//按名字取得cookie内容
function getCookie(name){
	var m = document.cookie.match(new RegExp("(^|;|\\b)*"+name+"=([^;]*)(;|$)"));
	return (!m?"":m[2]);
}
//设置指定名字的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";
}
String.prototype.trim=function(){  return this.replace(/(^\s+)|(\s+$)/g,""); }

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);
}
/***************************** free.qq.com活动常用到的一些功能 ***********************************************/

function isLogin(){
    var o={};
	o.uin  = getCookie("uin").replace(/^[o0]+/i,"");
	o.skey = getCookie("skey");
	if(o.uin==""||o.skey=="") return false;
	else return o;
}
//bt:登录后自动点击的button
//ac:登录的自动跳转的页面
//bi:登录框的title背景图
//bc:登录框的边框颜色
function login(arg,src){
    src = (src==null?"/common/login.htm":src);
    arg = (arg==null?"":("?"+arg));
    $("divLogin").style.display = "";
    $("ifrLogin").src = src + arg;
}
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();
}
/***************************** free.qq.com活动常用到的一些功能 * 结束 ********************************************/
var Tag = {
    regeditElement : function(){
        var args=arguments;
        var l = args.length;
        for(var i=0;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 drag(elementToDrag, event) {
    if(!Browser.isIE) return;
    elementToDrag.style.left = elementToDrag.offsetLeft + "px";
    elementToDrag.style.top = elementToDrag.offsetTop + "px";
    elementToDrag.style.marginLeft = "0px";
    elementToDrag.style.marginTop = "0px";
    var startX = event.clientX, startY = event.clientY;
    var origX = elementToDrag.offsetLeft, origY = elementToDrag.offsetTop;
    var deltaX = startX /*- origX*/, deltaY = startY /*- origY*/;
    if (document.addEventListener) {
        document.addEventListener("mousemove", moveHandler, true);
        document.addEventListener("mouseup", upHandler, true);
    }
    else if (document.attachEvent) {
        elementToDrag.setCapture( );
        elementToDrag.attachEvent("onmousemove", moveHandler);
        elementToDrag.attachEvent("onmouseup", upHandler);
        elementToDrag.attachEvent("onlosecapture", upHandler);
    }
    else {
        var oldmovehandler = document.onmousemove;
        var olduphandler = document.onmouseup;
        document.onmousemove = moveHandler;
        document.onmouseup = upHandler;
    }
    if (event.stopPropagation) event.stopPropagation( );
    else event.cancelBubble = true;
    if (event.preventDefault) event.preventDefault( );
    else event.returnValue = false;
    function moveHandler(e) {
        if (!e) e = window.event;
        elementToDrag.style.left = (e.clientX - deltaX)<0?0:(e.clientX - deltaX) + "px";
        elementToDrag.style.top = (e.clientY - deltaY)<0?0:(e.clientY - deltaY) + "px";
        if (e.stopPropagation) e.stopPropagation( );
        else e.cancelBubble = true;
    }
    function upHandler(e) {
        if (!e) e = window.event;
        if (document.removeEventListener) {
            document.removeEventListener("mouseup", upHandler, true);
            document.removeEventListener("mousemove", moveHandler, true);
        }
        else if (document.detachEvent) {
            elementToDrag.detachEvent("onlosecapture", upHandler);
            elementToDrag.detachEvent("onmouseup", upHandler);
            elementToDrag.detachEvent("onmousemove", moveHandler);
            elementToDrag.releaseCapture( );
        }
        else {
            document.onmouseup = olduphandler;
            document.onmousemove = oldmovehandler;
        }
        if (e.stopPropagation) e.stopPropagation( );
        else e.cancelBubble = true;
    }
}