﻿window.isIE=navigator.appName.indexOf("Microsoft")==0;
if(isIE){
    document.documentElement.addBehavior("#default#userdata");
    document.execCommand("BackgroundImageCache",false,true);
}

//前后空格
String.prototype.Trim = function(){ return this.replace(/^\s+|\s+$/g,"")} 
//前空格
String.prototype.TrimL = function(){ return this.replace(/^\s+/g,"")} 
//后空格
String.prototype.TrimR = function(){ return this.replace(/\s+$/g,"")}
//所有空格
String.prototype.TrimA = function(){ return this.replace(/ /g,"")}

var TS_Class = { create: function() {return function() {this.initialize.apply(this, arguments);}}}
var TS_BindAsEventListener = function(object, fun) {
	var args = Array.prototype.slice.call(arguments).slice(2);
	return function(event) {
		return fun.apply(object, [event || window.event].concat(args));
	}
}
function TS_addEventHandler(oTarget, sEventType, fnHandler) {
    oTarget = TS.$(oTarget);
	if (oTarget.addEventListener) {
		oTarget.addEventListener(sEventType, fnHandler, false);
	} else if (oTarget.attachEvent) {
		oTarget.attachEvent("on" + sEventType, fnHandler);
	} else {
		oTarget["on" + sEventType] = fnHandler;
	}
};

function TS_removeEventHandler(oTarget, sEventType, fnHandler) {
    if (oTarget.removeEventListener) {
        oTarget.removeEventListener(sEventType, fnHandler, false);
    } else if (oTarget.detachEvent) {
        oTarget.detachEvent("on" + sEventType, fnHandler);
    } else { 
        oTarget["on" + sEventType] = null;
    }
};

TS = {};
TS.$ = function(obj){
    return TS.$Id(obj);
}
//根据id获取对象
TS.$Id = function(obj){
    return typeof obj == "string" ? document.getElementById(obj) : obj;
}
//根据name获取对象
TS.$Name = function(obj){
    return typeof obj == "string" ? document.getElementsByName(obj) : obj;
}
//根据tagname获取对象
TS.$TagName = function(obj){
    return typeof obj == "string" ? document.getElementsByTagName(obj) : obj;
}
//根据classname获取对象
TS.$ClassName = function(className, parentElement){
    var elems = ($(parentElement)||document.body).getElementsByTagName("*");
    var result=[];
    for (i=0; j=elems[i]; i++){
        if ((" "+j.className+" ").indexOf(" "+className+" ")!=-1){
            result.push(j);
        }
    }
    return result;
}
//获取或设置对象的Enable状态
TS.Enable = function(obj,status){
    obj = TS.$Id(obj);
    if(obj){        
        if(status != null){
			status = status ? '' : 'disabled';
            setTimeout(function(){obj.disabled = status;},50);
        }else{
            return obj.disabled=='disabled'?false:true;
        }
    }
}
//获取或设置对象的readOnly
TS.Readonly = function(obj,status){
    obj = TS.$Id(obj);
    if(status != null){
        obj.readOnly = status
    }else{
        return obj.readOnly;
    }
}
//获取或设置对象的display
TS.Show = function(obj,status){
    obj = TS.$Id(obj);
    if(status != null){
        obj.style.display = status ? "" : "none";
    }else{
        return obj.style.display == "" ? true : false;
    }
}
//设置对象的Toggle
TS.Toggle = function(obj){
    obj = TS.$Id(obj);    
    obj.style.display = obj.style.display == "" ? "none" : "";
    var dis = obj.style.display;
    TS.Alpha(obj,obj.style.display == "" ? true : false);
    return dis;
}
//获取或设置select对象的value
TS.SelectValue = function(obj,value){
    obj = TS.$Id(obj);
    if(value != null){
        obj.value = value;
    }else{
        return obj.value;
    }
}
//获取或设置select对象的text
TS.SelectText = function(obj,text){
    obj = TS.$Id(obj);
    if(text != null){
        obj.options[TS.SelectIndex(obj)].text = text;
    }else{
        return obj.options[TS.SelectIndex(obj)].text;
    }
}
//获取或设置select对象的index
TS.SelectIndex = function(obj,index){
    obj = TS.$Id(obj);
    if(index != null){
        obj.selectedIndex = index;
    }else{
        return obj.selectedIndex;
    }
}
//查找select选项
TS.SelectFind = function(obj, text, value){
    var arr = new Array();
    obj = TS.$Id(obj);
    var options = obj.getElementsByTagName("option");
    for(var i=0; i<options.length; i++){
        if(text != null){
            if(options[i].text == text){
                arr.push(options[i]);
            }
        }
        if(value != null){
            if(options[i].value == value){
                arr.push(options[i]);
            }
        }
    }
    if(text == null && value == null){
        arr = options;
    }
    return arr;
}
//根据text查找select选项
TS.SelectFindByText = function(obj,text){
    return TS.SelectFind(obj,text);
}
//根据text查询select选项
TS.SelectFindByValue = function(obj,value){
    return TS.SelectFind(obj,null,value);
}
//添加select选项
TS.SelectAdd = function(obj,text,value){
    obj = TS.$Id(obj);
    obj.options.add(new Option(text,value)); 
}
//移除select所有选项
TS.SelectRemove = function(obj){
    obj = TS.$Id(obj);
    while(obj.options.length > 0){
        obj.removeChild(obj.options[0]);
    }
    //obj.options.length = 0;
}
//根据text移除select选项
TS.SelectRemoveByText = function(obj,text){
    obj = TS.$Id(obj);
    var items = TS.SelectFind(obj, text, null);
    for(var i=0; i<items.length; i++){
        obj.removeChild(items[i]);
    }
}
//根据value移除select选项
TS.SelectRemoveByValue = function(obj,value){
    obj = TS.$Id(obj);
    var items = TS.SelectFind(obj, null, value);
    for(var i=0; i<items.length; i++){
        obj.removeChild(items[i]);
    }
}
//根据index移除select选项
TS.SelectRemoveByIndex = function(obj,index){
    obj = TS.$Id(obj);
    obj.removeChild(obj.options[index]);
}
//交换select项
TS.SwapSelectNode = function (select,sequence){
	select = TS.$(select);
    if (!select||select.selectedIndex==-1) return false; 
	with (select){
		var newIndex = selectedIndex + sequence;
		var oldIndex = selectedIndex;
		if (newIndex>=options.length||newIndex<0||sequence==0||newIndex<0){
			return false;
		}
		options[newIndex].swapNode(options[oldIndex]) 
	}
	return true;
}
//获取或设置RadioButtonList选中项的值
TS.RadioValue = function(obj, value){
    var radios = TS.$Name(obj);
    for(var i=0; i<radios.length; i++){
        if(value != null){
            if(radios[i].value == value){
                radios[i].checked = true;
                break;
            }
        }else{
            if(radios[i].checked){
                return radios[i].value;
                break;
            }
        }
    }
    return null;
}
//获取或设置RadioButtonList选中项索引
TS.RadioIndex = function(obj, index){
    var radios = TS.$Name(obj);
    for(var i=0; i<radios.length; i++){
        if(index != null){
            if(i == index){
                radios[i].checked = true;
                break;
            }
        }else{
            if(radios[i].checked){
                return i;
                break;
            }
        }
    }
}
TS.CheckBoxRegisterLimit = function(obj,option){
    if(!option){
        return;
    }
    if(option.length<0){
        return;
    }
    var chks = TS.$Id(obj).getElementsByTagName("input");
    for(var i=0; i<chks.length; i++){
        if(chks[i].type == "checkbox"){
            TS_addEventHandler(chks[i],"click",TS_BindAsEventListener(this,TS.CheckBoxLimitHandler,obj,chks[i],option));
        }
    }
}
TS.CheckBoxLimitHandler = function(evt,obj,_this,option){
    if(option){
        if(TS.CheckBoxValue(obj).split(",").length > option.length){
            _this.checked = false;
            if(option.handler){
                option.handler();
            }            
        }
    }
}
//获取或设置CheckBoxList选中项的值
TS.CheckBoxValue = function(obj, value, clear){
    if(clear){
        TS.Uncheck(obj);
    }
    var v = "," + value + ",";
    var str = "";
    var cbs = TS.$Id(obj).getElementsByTagName("input");
    for(var i=0; i<cbs.length; i++){
        if(cbs[i].type == "checkbox"){
            if(value != null){
                if(v.indexOf("," + cbs[i].value + ",") > -1){
                    cbs[i].checked = true;
                }
            }else{
                if(cbs[i].checked){
                    str += cbs[i].value + ",";
                }
            }
        }
    }
    if(str.length > 0){
        return str.substring(0, str.length - 1);
    }else{
        return "";
    }
}
//全选
TS.CheckAll = function(obj,type){
    var cbs = TS.$Id(obj).getElementsByTagName("input");
    for(var i=0; i<cbs.length; i++){
        if(cbs[i].type == "checkbox" && cbs[i].disabled == false){
            if(type == -1){
                cbs[i].checked = cbs[i].checked ? false : true;
            }
            else if(type == 0){
                cbs[i].checked = false;
            }
            else{
                cbs[i].checked = true;
            }
        }
    }
}
//反选
TS.CheckInverse = function(obj){
    TS.CheckAll(obj, -1);
}
//不选
TS.Uncheck = function(obj){
    TS.CheckAll(obj, 0);
}
//文件类型，扩展名
TS.FileType = function(str){
    if(str.indexOf(".")<0){
        return "";
    }else{
        return TS.ToLower(str.substring(str.lastIndexOf(".")));
    }
}
//转换成小写
TS.ToLower = function(str){
    return str.toLowerCase()
}
//转换成大写
TS.ToUpper = function(str){
    return str.toUpperCase()
}
//Url编码
TS.UrlEncode = function(str){
    return encodeURIComponent(str);
}
//Url解码
TS.UrlDecode = function(str){
    return decodeURIComponent(str);
}
//Html编码
TS.HtmlEncode = function(str){
    if(str.length == 0){
        return "";
    }else{
         return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/ /g,"&nbsp;").replace(/\'/g,"&#39;").replace(/\"/g,"&quot;");
    }
}
//Html解码
TS.HtmlDecode = function(str){
    if(str.length == 0){
         return "";
    }else{
        return str.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&nbsp;/g," ").replace(/&#39;/g,"\'").replace(/&quot;/g,"\"");
    }
}
//不能被框架
TS.CannotBeFrame = function(){
    if (window!=top){
        window.parent.location.replace(location.href); 
    }
}
//加入收藏
TS.AddFavorite = function(url, title){ 
    if(!url){
        url = location.href;
    }
    if(!title){
        title = document.title;
    }
    try{ 
        window.external.addFavorite(url, title); 
    }catch (e){ 
        try{
            window.sidebar.addPanel(title, url, ""); 
        }catch (e){ 
            alert("加入收藏失败，请使用Ctrl+D进行添加"); 
        } 
    } 
} 
//设为首页
TS.SetHome = function(obj,url){
    if(!url){
        url = location.href;
    }
    try{ 
        obj.style.behavior='url(#default#homepage)';obj.setHomePage(url); 
    }catch(e){
        if(window.netscape) {
            try {
                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
            }catch (e) {
                alert("此操作被浏览器拒绝！\n请在浏览器地址栏输入“about:config”并回车\n然后将 [signed.applets.codebase_principal_support]的值设置为'true',双击即可。"); 
            }
            var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
            prefs.setCharPref('browser.startup.homepage',url); 
        } 
    } 
}
//复制到剪切板
TS.CopyToClipboard = function(text){
    if(window.clipboardData){
        window.clipboardData.clearData(); 
        window.clipboardData.setData("Text", text);
    }else if(navigator.userAgent.indexOf("Opera") != -1){
        window.location = text;
    }else if (window.netscape){
        try{
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        }catch (e){
            alert("您的当前浏览器设置已关闭此功能！请按以下步骤开启此功能！\n新开一个浏览器，在浏览器地址栏输入'about:config'并回车。\n然后找到'signed.applets.codebase_principal_support'项，双击后设置为'true'。\n声明：本功能不会危及您计算机或数据的安全！"); 
        }
        var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
        if (!clip) return;
        var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
        if (!trans) return;
        trans.addDataFlavor('text/unicode');
        var str = new Object(); 
        var len = new Object();
        var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
        var copytext = text;
        str.data = copytext; 
        trans.setTransferData("text/unicode",str,copytext.length*2);
        var clipid = Components.interfaces.nsIClipboard;
        if (!clip) return false;
        clip.setData(trans,null,clipid.kGlobalClipboard);
    }   
}
//Cookie操作
TS.Cookie = new function(){
    this.Set = function(name,value,option){
        var str = name + "=" + escape(value);
        if(!option){
            option = [];
            option.expireMinute = null;
            option.path = null;
            option.domain = null;
        }
		if(option.expireMinute){
			var date = new Date();
            var ms=option.expireMinute * 60 * 1000;
            date.setTime(date.getTime() + ms);
            str += ";expires="+date.toGMTString();
		}
        if(option.path){
			str += ";path="+path;
		}
		else{
			str += ";path=/";
		}
        if(option.domain){
            str += ";doman="+domain;
        }
        if(option.secure){
            str += ";true";
        }
        document.cookie = str;
    };
    this.Get = function(name){
        /*var cookieArray = document.cookie.split(";");
        for(var i=0;i<cookieArray.length;i++){
            var arr=cookieArray[i].split("=");
            if(arr[0]==name){
                return unescape(arr[1]);
            }
        }
        return "";*/
		var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
		if(arr != null) {
			return unescape(arr[2]); 
		}else{
			return null;
		}
    };
    this.Delete=function(name){ 
        this.Set(name,"",{expireMinute:-1000});
    };
}
//正则验证
TS.Validator = new function(){
    this.Empty = function(expression){
        if(expression==null||expression==""){
            return true;
        }else{
            return false;
        }
    }
    this.Integer=function(expression){	
    	var reg = /^[+-]{0,1}[0-9]{1,}$/;
    	return reg.test(expression);
	};
	this.SignInteger = function(expression){	
    	var reg = /^[+]?[1-9][0-9]*$/;
    	return reg.test(expression);
	};
	this.Number=function(expression,decimals){
	    if(!decimals){
    	    var reg = /^[+-]?\d{1,}([\.]?\d{1,}|)$/;
    	    return reg.test(expression);
    	}else{
    	    var reg = "^[+-]?\\d{1,}[\\.]\\d{"+decimals+"}$";
    	    var regE = new RegExp(reg);
    	    return regE.test(expression);
    	}
	};
	this.SignNumber=function(expression,decimals){	
    	if(!decimals){
    	    var reg = /^[+]?\d{1,}([\.]?\d{1,}|)$/;
    	    return reg.test(expression);
    	}else{
    	    var reg = "^[+]?\\d{1,}[\\.]\\d{"+decimals+"}$";
    	    var regE = new RegExp(reg);
    	    return regE.test(expression);
    	}
	};
	this.ZHCN=function(expression){	
    	var reg = /[\u4e00-\u9fa5]/;
    	return reg.test(expression);
	};
	this.AllZHCN=function(expression){	
    	var reg = /^[\u4e00-\u9fa5]{0,}$/;
    	return reg.test(expression);
	};
	this.Email = function(expression){
	    var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
	    return reg.test(expression)
	};
	this.Money = function(expression){
	    var reg= /^[0-9]+([\.][0-9]{1,3}|)$/;
	    return reg.test(expression);
	};
	this.Phone = function(expression){
	    var reg_areacode = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
	    var reg = /^(((\()?\d{2,4}(\))?[-(\s)*]){0,2})?(\d{7,8})$/;
	    return (reg.test(expression) || reg_areacode.test(expression));
	}
	this.Mobile = function(expression){
	    var reg =/^1[358]{1}\d{9}$/;
	    return reg.test(expression)
	}
	this.IP = function(expression){
	    var reg=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
	    return reg.test(expression)
	}
	this.NumberOrLetter = function(expression){
	    var reg = /^[0-9a-zA-Z\_]+$/;
	    return reg.test(expression)
	},
	this.DateTime = function(expression){
	    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; 
        var r = expression.match(reg); 
        if(r==null){
            return false; 
        }else{
            var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]); 
            return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&& d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r [6]&&d.getSeconds()==r[7]);
        }
	},
	this.SmallDateTime = function(expression){
		expression = expression.replace(/年|月/g,"-");
		expression = expression.replace(/日/g,"");
	    var r = expression.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
        if(r == null){
            return false;
        }else{         
            var d = new Date(r[1], r[3]-1, r[4]); 
            return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3]&&d.getDate() == r[4]);
        }
	}
	this.Length = function(expression,b,e){
	    if(!e){
	        e = "";
	    }
	    eval("var reg = /^[\\s\\S]{"+b+","+e+"}$/");
	    return reg.test(expression)
	}
	this.ByteLength = function(expression,b,e){
	    if(!e){
	        e = "";
	    }
	    expression = expression.replace(/[^\x00-\xff]/g,"aa");
	    eval("var reg = /^[\\s\\S]{"+b+","+e+"}$/");
	    return reg.test(expression)
	}
	this.Idcard = function (idcard){
		var Errors=new Array(
			true,//验证通过
			false,//"身份证号码位数不对",
			false,//"身份证号码出生日期超出范围或含有非法字符",
			false,//"身份证号码校验错误",
			false//"身份证地区非法"
		);
		var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
		var idcard,Y,JYM;
		var S,M;
		var idcard_array = new Array();
		idcard_array = idcard.split("");
		if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
		switch(idcard.length){
			case 15:
				if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
					ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;
				} else {
					ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;
				}
				if(ereg.test(idcard)) return Errors[0];
					else return Errors[2];
				break;
			case 18:
				if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
					ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;
				} else {
				ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;
				}
				if(ereg.test(idcard)){
					S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
						+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
						+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
						+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
						+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
						+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
						+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
						+ parseInt(idcard_array[7]) * 1
						+ parseInt(idcard_array[8]) * 6
						+ parseInt(idcard_array[9]) * 3 ;
					Y = S % 11;
					M = "F";
					JYM = "10X98765432";
					M = JYM.substr(Y,1);
					if(M == idcard_array[17]) 
						return Errors[0];
					else return Errors[3];
				}
				else return Errors[2];
				break;
			default:
				return Errors[1];
			break;
		}
	}
	this.Zipcode = function(str){
	    return(new RegExp(/^\d{6}$/).test(str));
	}
}
//获取字节长度
TS.ByteLength = function(text){
    return text.replace(/[^\x00-\xff]/g,"**").length; 
}
//字符串截取
TS.Substring = function(text,begin,len,type){
    if(type=="byte"){
        if(!text || !len) { return ""; }
        var a = 0;
        var i = 0;
        var temp = '';
        for (i=0;i<text.length;i++){
            if (text.charCodeAt(i)>255){
                a+=2;
            }else{
                a++;
            }
            if(a > len) { return temp; }
            temp += text.charAt(i);
        }
        return str;
    }else{
        return text.substr(begin,len);
    }
}
TS.StrictMode = function(){
    return document.compatMode != "BackCompat";
}
//获取页面全文高度
TS.PageHeight = function(){
    return TS.StrictMode() ? 
        Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight) 
        : 
        Math.max(document.body.scrollHeight, document.body.clientHeight);
}
//获取页面全文宽度
TS.PageWidth = function(){
    return TS.StrictMode() ? 
        Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth) 
        : 
        Math.max(document.body.scrollWidth, document.body.clientWidth);
}
//获取鼠标坐标
TS.MousePosition = function(evt){
    evt = evt || window.event;
    var x,y;
    if (evt.pageX || evt.pageY){
        x = evt.pageX;
        y = evt.pageY;
    }else{
        x = evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
        y = evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    }
    return {x:x,y:y};
}
//获取对象绝对坐标
TS.ObjPosition = function(obj){
    var target = obj;
    var pos = {x:target.offsetLeft,y:target.offsetTop};
    var target = target.offsetParent; 
    while (target) { 
        pos.x += target.offsetLeft; 
        pos.y += target.offsetTop; 
        target = target.offsetParent;
    }
    return pos;
}
String.prototype.format=function(){
    var args=arguments;
    var result=this.replace(/\{(\d+)\}/g,function($0,$1){return args[parseInt($1)].toString();});
    return result;
}
//获取url参数
TS.QueryString = function (name){    
    var sReg = "[\\?\\&]({0})=([^\\&]+)";
    var reg=new RegExp(sReg.format(name));
    var match = location.search.match(reg);
    if(match != null){
        var result=match[2];
        return result;
    }
    return null;
}
TS.Sort = function (column,type){
    var url = location.href;
    var _column = TS.QueryString("sort");
    var _type = TS.QueryString("sorttype");
    if(_column == null){
        url = url + ( url.indexOf("?") > 0 ? "&" : "?" )+"sort="+column;
    }else{
        url = url.replace("sort="+_column,"sort="+column);
    }
    if(_type == null){
        url = url + ( url.indexOf("?") > 0 ? "&" : "?" ) + "sorttype="+type;
    }else{
        url = url.replace("sorttype="+_type,"sorttype="+type);
    }
    location.href = url;
}
TS.SetSort = function (tab){
    var column = TS.QueryString("sort");
    var type = TS.QueryString("sorttype");            
    if(column == null || type == null){
        return;
    }
    var ths = TS.$(tab).getElementsByTagName("th");  
    for(var j=0; j<ths.length; j++){
        if(ths[j].getElementsByTagName("a").length>0){
            var a = ths[j].getElementsByTagName("a")[0];
            if(a.href.indexOf("javascript:TS.Sort('"+column)>-1){
                a.href = a.href.replace("'desc'","'"+(type=="desc"?"asc":"desc")+"'");
                a.innerHTML = a.innerHTML.replace(/↑|↓/g,"") + (type == "desc" ? "<span>↓</span>" : "<span>↑</span>");
                return;
            }
        }
    }
}
//生成Guid值
TS.Guid = function(){
    var guid = "{";
    for(var i=1;i<=32;i++){
        var n=Math.floor(Math.random()*16.0).toString(16);
        guid+=n;
        if((i==8)||(i==12)||(i==16)||(i==20)){
            guid += "-";
        }
    }
    guid += "}";
    return guid;
}
//根据索引移除数组项
TS.ArrayRemove = function(obj,index){
    var arr = [];
    for(var i=0; i<obj.length; i++){
        if(index != i){
            arr.push(obj[i]);
        }
    }
    return arr;
}
//字符串格式化
TS.Stringformat = function(){
    var i = 0 , args = arguments;
    var str = args[0];
    args = TS.ArrayRemove(args,0);
    var re = /\{(\d+)\}/g;
    return str.replace(re,function(){return args[i++]});
};
//windows对话框
TS.WDialog = new function(){
    this.Show = function(url,options,data){
        if(url.indexOf("?")>0){
            url += "&SESSIONID=";
        }else{
            url += "?SESSIONID=";
        }
        url += TS.Guid();
        var o = this.SetOptions(options);
        this.options = o;
        if(options.type == "General"){
            var params = TS.Stringformat("height={0},width={1},top={2},left={3},toolbar={4},menubar={5},scrollbars={6},resizable={7},location={8},status={9},directories={10}",o.height,o.width,o.top,o.left,o.toolbar,o.menubar,o.scrollbars,o.resizable,o.location,o.status,o.directories);
            this.window = window.open(url,o.name,params); 
        }else{
            var _data = window;
            for(d in data){
                _data[d] = data[d];
            }
            var params = TS.Stringformat("dialogHeight:{0}px;dialogWidth:{1}px;dialogTop:{2};dialogLeft:{3};center:{4};help:{5};resizable:{6};status:{7};scroll:{8}",o.height,o.width,o.top,o.left,o.center,o.help,o.resizable,o.status,o.scroll);
            this.value = window.showModalDialog(url,_data,params);
			if(this.value==null){
                return;//"javascript:;";
            }
        }
        return this;
    };
    this.SetOptions = function(options){
        if(!options){options = [];}
        options.name = options.name || TS.Guid();
        options.type = options.type || "General";
        options.width = options.width || 800;
        options.height = options.height || 600;
        if(options.max==true){
            options.width = window.screen.availWidth;
            options.height = window.screen.availHeight;
        }
        if(!options.top){
            options.top = (window.screen.availHeight - options.height) / 2;            
        }
        if(!options.left){
            options.left = (window.screen.availWidth - options.width) / 2;
        }
        options.toolbar = options.toolbar || "0";
        options.menubar = options.menubar || "0";
        options.scrollbars = options.scrollbars || "0";
        options.resizable = options.resizable || "0";
        options.location = options.location || "0";
        options.status = options.status || "0";
        options.directories = options.directories || "0";
        options.help = options.help || "0";
        options.center = options.center || "1";
        return options;
    }
    this.Close = function(){
        this.window.close();
    }
}
//提示框
TS.Tips=function(obj,tip,text){
    obj = TS.$(obj);
    tip = TS.$(tip);
    if(text){
        tip.getElementsByTagName("span")[3].innerHTML = text;
    }
    var pos = TS.ObjPosition(obj);
    tip.style.display = "block";
    tip.style.top = pos.y - 45 + "px";
    tip.style.left = pos.x + obj.offsetWidth + 5 + "px";
}
TS.RegisterInput = function(obj){
    obj = TS.$(obj);
	if(obj){
		if(obj.getAttribute("focustext")){
			TS_addEventHandler(obj,"click",TS_BindAsEventListener(obj,TS._showtips,obj,"focus"));
		}
		if(obj.getAttribute("validator")){
			TS_addEventHandler(obj,"blur",TS_BindAsEventListener(obj,TS._showvalidator,obj));
		}
	}
}
TS.ValidateForm = function(form){
    form = TS.$(form)
    var elements;
	try{elements = form.elements;}catch(e){	alert(e.message);return false;}
	var element;
	for(var i=0; i<elements.length; i++) {
		element=elements[i];
		if(element.getAttribute("validator")){
		    var code = element.getAttribute("validator");
			var value = element.value.replace(/\r\n/g,"__").replace(/\"/g,"'").replace(/\\/g,"_");
            code = code.replace(/this.value/g,"\""+value+"\"");
            if(!eval(code)){
                TS._showtips(null,element,"error");
                try{
                    element.focus();
                }catch(e){
                    
                }
                return false;
            }
        }
	}
	return true;
}
var _inputtipscache=[];
function inputtipscache(obj1,obj2){
    if(obj2){
        _inputtipscache.push({obj1:obj1,obj2:obj2});
    }else{
        for(var i=0;i<_inputtipscache.length;i++){
            if(_inputtipscache[i].obj1==obj1){
                return _inputtipscache[i].obj2;
            }
        }
    }
}
TS._showtips = function(evn,obj,t){
    var objtext = obj.id || obj.name;
    var obj2 = inputtipscache(objtext+"-"+t);
    if(obj2){
        obj2.style.display = "block";
        return;
    }
    var div = document.createElement("div");
    div.className = "infotip";
    var close = document.createElement("span");
    close.className = "close";
    TS_addEventHandler(close,"click",TS_BindAsEventListener(close,TS._closetips,div));
    var text = document.createElement("span");
    text.className = "text";
    var ico = document.createElement("span");
    if(t=="focus"){
        var txt = obj.getAttribute("focustext");
        ico.className = "icon info";        
    }else{
        var txt = obj.getAttribute("errortext");
        ico.className = "icon error";
    }
    text.appendChild(ico);
    text.appendChild(document.createTextNode(txt));
    div.appendChild(close);
    div.appendChild(text);
    document.body.appendChild(div);
    var pos = TS.ObjPosition(obj);
    div.style.display = "block";
    div.style.top = pos.y - 45 + "px";
    div.style.left = pos.x + obj.offsetWidth + 5 + "px";
    TS_addEventHandler(obj,"blur",TS_BindAsEventListener(obj,TS._closetips,div));
    inputtipscache(objtext+"-"+t,div);
}
TS._showvalidator = function(evn,obj){
    var code = obj.getAttribute("validator");
    var value = obj.value.replace(/\r\n/g,"__").replace(/\"/g,"'").replace(/\\/g,"_");
    code = code.replace(/this.value/g,"\""+value+"\"");
    if(!eval(code)){
        TS._showtips(null,obj,"error");
    }
}
TS._closetips = function(evn,obj){
    obj.style.display = "none";
}
TS.GridView = new function(){
    this.Sort = function(obj,where){
        if(where!=""){
            //where = where.replace(/(\?|\&)(sort|sorttype)=\w\&/g,"&");
            //where = where.replace(/(\?|\&)(sort|sorttype)=\w/g,"");
			where = where.replace(/(\?|\&|)(sort=|sorttype=)\w*[^\?\&]/g,"")
        }
        var params = where + TS.Stringformat("&sort={0}&sorttype={1}",obj.getAttribute("sort"),obj.getAttribute("sorttype"));
        obj.setAttribute("sorttype",(obj.getAttribute("sorttype") == "desc" ? "asc" : "desc"));
        var th = obj.parentNode.parentNode.getElementsByTagName("th");
        for(var i=0;i<th.length;i++){
            if(th[i].getElementsByTagName("a")[0]){
                th[i].getElementsByTagName("a")[0].innerHTML = th[i].getElementsByTagName("a")[0].innerHTML.replace(/↓|↑/g,"");
            }
        }
//      obj.className = obj.getAttribute("sorttype")=="desc" ? "asc" : "desc";
//		obj.setAttribute("class",obj.className);
		obj.innerHTML = obj.innerHTML+(obj.getAttribute("sorttype")=="desc"?"↑":"↓");
        return params;
    }
}

TS.PageTip = function(text,options){
    if(!options){
        options = [];        
    }
    options.top = options.top || "10px";
    options.right = options.right || "10px";
    options.left = options.left || "auto";
    options.color = options.color || "yellowinfo";
    options.second = options.second || 3;
    var box = document.createElement("div");
    box.style.position = "absolute";
    if(options.bottom){
        box.style.bottom = options.bottom; 
    }else{
        box.style.top = options.top;
    }    
    box.style.right = options.right;
    box.style.left = options.left;
    if(options.target && TS.$(options.target)){
        options.target = TS.$(options.target);
        var pos = TS.ObjPosition(options.target);
        if(!options.x){
            options.x = 10;
        }
        if(!options.y){
            options.y = 0;
        }
        box.style.left = (pos.x + options.target.offsetWidth + options.x) + "px";
        box.style.top = pos.y + options.y + "px";
        box.style.right = "auto";
        box.style.bottom = "auto";
    }
    box.className = options.color;
    box.innerHTML = "<span class=\"icon "+options.color+"\"></span>" + text;
    document.body.appendChild(box);
    lastScrollY = 0;
    var val1 = window.setInterval(heartBeat,1);
    setTimeout(function(){window.clearInterval(val1);try{box.removeNode(true);}catch(e){document.body.removeChild(box);}},options.second*1000);
    function heartBeat(){ 
        var diffY;
        if (document.documentElement && document.documentElement.scrollTop)
	        diffY = document.documentElement.scrollTop;
        else if (document.body)
	        diffY = document.body.scrollTop
        else
            {/*Netscape stuff*/}    	
        percent=.1*(diffY - lastScrollY); 
        if(percent>0){
            percent=Math.ceil(percent);
        }
        else{
            percent=Math.floor(percent);
        }
        if(options.bottom){
            box.style.top = box.offsetTop + percent+"px";
        }else{
            box.style.top=parseInt(box.style.top)+percent+"px";
        }
        lastScrollY = lastScrollY + percent;
    }
}
var FormChangeListener = TS_Class.create();
FormChangeListener.prototype = {
    initialize:function(_form,_text,_state){
        this.form = TS.$(_form);        
        this.text = _text;
        this.formchanged = _state;
        this.AddListener();
    },
    AddListener:function(){
        var elements;
        try{elements = this.form.elements;}catch(e){alert(e.message);return false;}
        for(var i=0; i<elements.length; i++) {
	        TS_addEventHandler(elements[i],"change",TS_BindAsEventListener(this,this.SetChanged,true));
        }
        TS_addEventHandler(window,"beforeunload",TS_BindAsEventListener(this,this.Beforeunload));
    },
    SetChanged : function(evt,state){
        this.formchanged = state;
    },
    Beforeunload : function(){
        if(this.formchanged){
            event.returnValue = this.text || "页面中有内容发生改变，你确定要关闭吗？";
        }
    }
}
var _tscolorbox;
TS.Color = function(target,options){
    if(!options){
        options = [];
        options.x = 0;
        options.y = 0;
    }
    target = TS.$(target);
    if(!target){
        return;
    }
    if(!_tscolorbox){
        init();
    }else{
        _tscolorbox.style.display = "block";
    }
    function init() {
        var ColorHex=new Array("00","33","66","99","CC","FF") ;
        var SpColorHex=new Array("FF0000","00FF00","0000FF","FFFF00","00FFFF","FF00FF");
        var current=null;    
        var tbody = document.createElement("tbody");
        for (i=0;i<2;i++) { 
            for (j=0;j<6;j++) { 
                var row = document.createElement("tr");
                var c1 = document.createElement("td");
                c1.style.backgroundColor = "#000000";
                c1.onclick = function(){select(this);}
                row.appendChild(c1);
                if (i==0){ 
                    var c = document.createElement("td");
                    c.style.backgroundColor = "#"+ColorHex[j]+ColorHex[j]+ColorHex[j];
                    c.onclick = function(){select(this);}
                    row.appendChild(c);
                }else{ 
                    var c = document.createElement("td");
                    c.style.backgroundColor = "#"+SpColorHex[j];
                    c.onclick = function(){select(this);}
                    row.appendChild(c);
                }
                var c2 = document.createElement("td");
                c2.style.backgroundColor = "#000000";
                c2.onclick = function(){select(this);}
                row.appendChild(c2);
                for (k=0;k<3;k++){
                    for (l=0;l<6;l++){ 
                        var c = document.createElement("td");
                        c.style.backgroundColor = "#"+ColorHex[k+i*3]+ColorHex[l]+ColorHex[j];
                        c.onclick = function(){select(this);}
                        row.appendChild(c);
                    } 
                } 
                tbody.appendChild(row);
            } 
        } 
        _tscolorbox = document.createElement("div");
        _tscolorbox.className = "ColorBox";
        _tscolorbox.innerHTML = "<div class=\"title\"><span class=\"left\">颜色选择器</span><span class=\"right\">×关闭</span></div>";
        var pos = TS.ObjPosition(target);
        _tscolorbox.style.top = pos.y + target.offsetHeight + options.y + "px";
        _tscolorbox.style.left = pos.x + options.x + "px";
        _tscolorbox.getElementsByTagName("span")[1].onclick = function(){
            close();
        }
        var tab = document.createElement("table");
        tab.appendChild(tbody);
        _tscolorbox.appendChild(tab);        
        document.body.appendChild(_tscolorbox);
    }
    function close(){
        _tscolorbox.style.display = "none";
    }
    function select(obj){
         var c = obj.style.backgroundColor;
         target.style.color = c;
         target.value = c;
         close();
    }
}
TS.Alpha = function(obj,b){
    obj = TS.$(obj);
    if(!obj){
        return;
    }
    obj.style.display = "";
    if(b){
        tmp = 0;
        obj.style.filter = "alpha(opacity=0)"; 
        obj.style.MozOpacity = "0";
    }else{
        tmp = 100;        
        obj.style.filter = "alpha(opacity=100)"; 
        obj.style.MozOpacity = "1";
    }
    var interval = setInterval(handler,30);
    function handler(){
        if(b){
            tmp += 8;
        }else{
            tmp -= 8;
        }
        obj.style.filter = "alpha(opacity="+tmp+")"; 
        obj.style.MozOpacity = "" +tmp/100;
        if(tmp>100 || tmp<0){
            window.clearInterval(interval);
            obj.style.display = b ? "" : "none";
            obj.style.filter="Alpha(Opacity=100)";   
            obj.style.MozOpacity="1"; 
        }
    }
}
function listComplete(_gvid){
	var gvid = _gvid || "gridview";
	var gv = TS.$(gvid);
	if(gv){
		if(gv.childNodes.length >=2){
			if(gv.childNodes[0].getElementsByTagName("table").length>0){
				var tab = gv.childNodes[0].getElementsByTagName("table")[0];
				var ws = 0;
				for(var i=0;i<tab.rows[1].cells.length; i++){
					if(tab.rows[1].cells[i].style.width){
						ws += parseInt(tab.rows[1].cells[i].style.width);
					}
				}
				tab.style.width = ws + "px";
				gv.childNodes[0].style.cssText = "overflow-x: auto;width:733px;height:"+(tab.offsetHeight + 20)+"px;";
			}
		}
	}
}
function dialog_body_onload(){
	if(parseInt(window.dialogHeight)<parseInt(document.body.clientHeight)+25){
		window.dialogHeight = (document.body.clientHeight + 25) + 'px'
	}
}
if(window.dialogHeight){
	TS_addEventHandler(window,"load",dialog_body_onload);
}
