	/*********************
	 字符串对象原型方法，返回字符串
	*/
	String.prototype.trim = function(){
		return this.replace(/(^\s*)|(\s*$)/g,"")
	}
	
	String.prototype.rtrim = function(){ 
		return this.replace(/(\s*$)/g, ""); 
	}
	
	String.prototype.ltrim = function(){ 
		return this.replace(/(^\s*)/g, ""); 
	}
	
	/*********************
	日期：2002-01-31或者2009/12/04格式为正确格式
	时间：2002-1-31 12:34:56
	*/
	String.prototype.isdate = function(){  
        var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);    
        if(r==null)return false; 
		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]);  
    }
	String.prototype.istime = function(){  
        var   r   =   this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})   (\d{1,2}):(\d{1,2}):(\d{1,2})$/);    
        if(r==null)return   false;
		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]);  
    }
	/*********************
	 得到24小时制的小时，分钟，秒的格式是否正确
	 str为时间字符串
	*/
	function ChkHMS(str){
		if (!/^\d\d:\d\d:\d\d$/.test(str)) return false;
		d=str.split(':');
		if (d[0]<0||d[0]>23) return false;
		if (d[1]<0||d[1]>59) return false;
		if (d[2]<0||d[2]>59) return false;
		return true;
	}
	
	/*********************
	 得到24小时制的 小时:分钟 的格式是否正确
	 str为时间字符串
	*/
	function ChkHM(str){
		if (!/^\d\d:\d\d$/.test(str)) return false;
		d=str.split(':');
		if (d[0]<0||d[0]>23) return false;
		if (d[1]<0||d[1]>59) return false;
		return true;
	}
	
	/*********************
	 字符串对象原型方法，若字符串为空则返回true
	*/
	String.prototype.isnull = function(){ 
		if(this.trim() == ""){ 
			return true; 
		}else{ 
			return false; 
		} 
	}
	
	/*********************
	 字符串对象原型方法，若字符串为整形数字符则返回true
	*/
	String.prototype.isint = function(){
		var regu = /^[-]{0,1}[0-9]{1,}$/;
		return regu.test(this);
	}
	
	/*********************
	 字符串对象原型方法，若字符串为IP地址则返回true
	*/
	String.prototype.isip = function () {
		if (isNull(this)) return false;
		var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g;
		if(re.test(this)){
			if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256) return true;
		}
		return false;
	}
	
	/*********************
	 字符串对象原型方法，若字符串为金额格式则返回true
	 正数，小数点后最多3位
	*/
	String.prototype.ismoney = function (){
		var regu = "^[0-9]+[\.][0-9]{0,3}$";
		var re = new RegExp(regu);
		if (re.test(this)){
			return true;
		}else{
			return false;
		}
	}
	
	/*********************
	 字符串对象原型方法，返回字符串的长度
	*/
	String.prototype.len = function(){
		var len;
		var i;
		len = 0; 
		for (i=0;i<this.length;i++){
			if (this.charCodeAt(i)>255) len+=2; else len++; 
		} 
		return len;
	}
	
	/*********************
	 判断是否是数字或字母
	*/
	function isNumberOrLetter(s){
		var regu = "^[0-9a-zA-Z]+$";
		var re = new RegExp(regu);
		if(re.test(s)){
			return true;
		}else{
			return false;
		}
	}
	
	/*********************
	 判断是否是汉字、字母、数字组成
	*/
	function isChinaOrNumbOrLett(s){
		var regu = "^[0-9a-zA-Z\u4e00-\u9fa5]+$";  
		var re = new RegExp(regu);
		if (re.test(s)){
			return true;
		}else{
			return false;
		}
	}
	
	/*********************
	 确认对话框
	*/
	var confirmChange = function(url,caption){
		if(confirm(caption))
			window.location = url;
	}
	
	/*********************
	 若email为邮件地址，则返回true
	*/
	var isEmail = function(email){
        var rec = /\b(^(\S+@).+((\.com)|(\.com.cn)|(\.cn)|(\.net)|(\.net.cn)|(\.org)|(\.org.cn)|(\.info)|(\.edu)|(\.edu.cn)|(\.mil)|(\.gov)|(\.gov.cn)|(\.biz)|(\.ws)|(\.us)|(\.tv)|(\.cc)|(\..{2,2}))$)\b/;
  		return  rec.test(email);
    }

	/*********************
	 得到小写的文件后缀名
	*/
	function getFileExt(fileNameStr){
		var fileExt = fileNameStr.substring(fileNameStr.lastIndexOf(".")+1,fileNameStr.length)
        fileExt = fileExt.toLowerCase()
		return fileExt;
	}
	
	/*********************
	 返回对象的关联数组arrObjName
	 str为对象的ID，若多个对象需要用”,"分隔
	*/
	function $(str){
        var arrObjName = new Array();
		var arrObj = new Array();
		if(arguments.length==0){
			return arrObj=null;
		}else{
			str = str.replace(" ","");
			arrObjName = str.split(",");
			for(i=0 ; i<arrObjName.length ; i++){
				arrObj[arrObjName[i]] = document.getElementById(arrObjName[i]);
			}
			return arrObj;
		}
    }
	
	/**********************
		为对象添加事件侦听
		调用方法：addObjEvent('objID','onclick',function(){test1('parm');});
	*/
	function addObjEvent(objId,eventName,eventFunc){
		var targetObj = document.getElementById(objId);
		if(targetObj){
			if(targetObj.attachEvent){
				targetObj.attachEvent(eventName,eventFunc);
			}else if(targetObj.addEventListener){
				var eventName = eventName.toString().replace(/on(.*)/i,'$1');
				targetObj.addEventListener(eventName,eventFunc,false);
			}
		}
	}
	
	/*
		得到对象RGB值
		str=s.style.color;
        obj=getRGB(str);
        alert("十进制RGB值为:\n\tR:"+obj.R+"\n\tG:"+obj.G+"\n\tB:"+obj.B);
	*/
	function getRGB(colorStr){
		var RGB={"R":0,"G":0,"B":0};  //RGB对象3属性R；G；B
		var p0=/\s*/;
		var p1=/#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i;
		var p2=/#([\da-f]{1})([\da-f]{1})([\da-f]{1})$/i;
		var p3=/(\d{1,3}),(\d{1,3}),(\d{1,3})/;
		var ptns=new Array(p0,p1,p2,p3);
		var n=3;
		do {
			i=colorStr.match(ptns[n]);
			n--;
		} while (!i)
		switch(n+1){
			case 0:
				 break;
			case 1:
				 RGB.R=parseInt(i[1],16);RGB.G=parseInt(i[2],16);RGB.B=parseInt(i[3],16);
				 break;
			case 2:
				 RGB.R=parseInt(i[1]+i[1],16);RGB.G=parseInt(i[2]+i[2],16);RGB.B=parseInt(i[3]+i[3],16);
				 break;
			case 3:
				 RGB.R=parseInt(i[1],10);RGB.G=parseInt(i[2],10);RGB.B=parseInt(i[3],10);
				 break;
			default:
				 alert("exception");
		}
		return RGB;
	}
	
	/*
		弹出窗口
	*/
	var pop=null
	function popWindow(url,name,w,h){
		if (pop==null || pop.closed){
			pop=window.open(url,name,'width='+w+',height='+h+',status=no,menubar=no,scrollbars=no,resizable=no,left='+ (screen.width-w)/2 +',top='+ (screen.height-h)/2);
		}else{
			pop.focus();
		}
	}
	function popWindow2(url,name,w,h){
		if (pop==null || pop.closed){
			 pop=window.open(url,name,'width='+w+',height='+h+',status=yes,menubar=yes,scrollbars=yes,resizable=yes,left='+ (screen.width-w)/2 +',top='+ (screen.height-h)/2);
		}else{
			 pop.focus();
		}
	}

	/*
		以下为ajax应用部分
		req(url,sID)后还需要实现disposal(xmlDom,sFlag)函数对返回的xml数据进行处理
		加入返回的xml格式如<root><title></title><content></content></root>；那么disposal:
		function disposal(xmlDom,sFlag){
			if (sFlag == "show"){
				var sDivID = document.getElementById("title");
				var getTitle = xmlDom.getElementsByTagName("title")[0].childNodes[0].nodeValue;
				sDivID.innerHTML = getTitle;
				var sDivID = document.getElementById("content");
				var getContent = xmlDom.getElementsByTagName("content")[0].childNodes[0].nodeValue;
				sDivID.innerHTML = getContent;
			}
		}
	*/
	var navName = (function (){ //得到用户使用的浏览器类型
		var u = navigator.userAgent.toLowerCase();
		if (/gecko/i.test(u)) return "moz";
		if (/msie/i.test(u)) return "ie";
		return "other";
	})();
	var ie = navName=="ie";
	var moz = navName=="moz";

	var maxPoolLength = 6; //xmlhttp对象池长度


	var xmlhttpPool = new Array();
	var ac = new Object();

	function ReqObj(){
		var xmlhttp = null;
		var pool = xmlhttpPool;
		for ( var i=0 ; i < pool.length ; ++i ){
			if ( pool[i].readyState == 4 || pool[i].readyState == 0 ){
				xmlhttp = pool[i];
				break;
			}
		}
		if ( xmlhttp == null ){
			return createReq();
		}
		return xmlhttp;
	}

	function createReq(){
		if ( xmlhttpPool.length < maxPoolLength ){
			var xmlhttp = false;
			if(moz){
				xmlhttp = new XMLHttpRequest();
				xmlhttp.overrideMimeType('text/xml');
			}else if(ie){
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
				if(xmlhttp){
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
				}
			}
			if (xmlhttp){
				xmlhttpPool.push(xmlhttp);
			}
			return xmlhttp;
		}
	}

	function req(url,sID){ 
		ac.insertwhere = sID;
		//alert(url);
		xmlhttp = ReqObj(); 
		var strURL = url;
		if (strURL.indexOf("?") > 0){
			strURL += "&randnum=" + Math.random();
		}else{
			strURL += "?randnum=" + Math.random();
		}
		//alert(strURL);
		xmlhttp.open("POST",strURL , true);
		xmlhttp.onreadystatechange = callBack;
		xmlhttp.send(null);
	}

	function callBack(){
		var state = xmlhttp.readyState;
		var sFlag = ac.insertwhere;

		if (state == 4){
			var xmlDom = xmlhttp.responseXML;
			//alert(xmlDom);
			xmlDom.async=false;
			//xmlDom.validateOnParse=false;

			disposal(xmlDom,sFlag); //需要实现的处理函数
		}
	}