
//下面是兼容IE和Firefox的方法属性
//Firefox下事件处理函数内event对象的捕获 
if(window.Event){ 
	if(window.constructor.prototype.__defineGetter__){
    window.constructor.prototype.__defineGetter__("event", function(){ 
        var o = arguments.callee.caller; 
        var e; 
        while(o != null){ 
			e = o.arguments[0]; 
			if(typeof(e)=="object" && (e.constructor == Event || e.constructor == MouseEvent || e.constructor == KeyboardEvent)){
				return e; 
			}
			o = o.caller; 
		}
		return null;
	}); 
	KeyboardEvent.prototype.__defineSetter__("keyCode",function(b){
		if(!b)this.constructor.which=b;
	});
	KeyboardEvent.prototype.__defineGetter__("keyCode",function(){
		return this.which;
	});
	
	Event.prototype.__defineSetter__("returnValue",function(b){
		if(!b)this.preventDefault();
		return b;
	});
	
	Event.prototype.__defineSetter__("cancelBubble",function(b){
		if(b)this.stopPropagation();
		return b;
	});
	
	Event.prototype.__defineGetter__("srcElement",function(){
		var node=this.target;
		while(node.nodeType!=1)node=node.parentNode;
		return node;
	});
	
	Event.prototype.__defineGetter__("fromElement",function(){
		var node;
		if(this.type=="mouseover")
		node=this.relatedTarget;
		else if(this.type=="mouseout")
		node=this.target;
		if(!node)return;
		while(node.nodeType!=1)node=node.parentNode;
		return node;
	});
	
	Event.prototype.__defineGetter__("toElement",function(){
		var node;
		if(this.type=="mouseout")
		node=this.relatedTarget;
		else if(this.type=="mouseover")
		node=this.target;
		if(!node)return;
		while(node.nodeType!=1)node=node.parentNode;
		return node;
	});
	
	Event.prototype.__defineGetter__("offsetX",function(){
		return this.layerX;
	});
	Event.prototype.__defineGetter__("offsetY",function(){
		return this.layerY;
	});
}
}

if(window.HTMLElement){
	HTMLElement.prototype.attachEvent=function(sType,fHandler){
		var shortTypeName=sType.replace(/on/,"");
		fHandler._ieEmuEventHandler=function(e){
			window.event=e;
			return fHandler();
		}
		this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
	}
	HTMLElement.prototype.detachEvent=function(sType,fHandler){
		var shortTypeName=sType.replace(/on/,"");
		if(typeof(fHandler._ieEmuEventHandler)=="function")
			this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
		else
			this.removeEventListener(shortTypeName,fHandler,true);
	}
}

//自定义绑定事件
function fDOMEventName(eventName){
	eventName = { onkeypress: "onkeydown" } [eventName] || eventName;
	eventName = { onfocusout: "onblur" } [eventName] || eventName;
	eventName = { onfocusin: "onfocus" } [eventName] || eventName;
	return eventName
}
function atEvent(element,eventName,handler){
	if(typeof(element)!="object")var element = $(element)
	if(window.attachEvent){
		element.attachEvent(eventName,handler)
	}
	else if(window.addEventListener){
		eventName = fDOMEventName(eventName)
		eventName = eventName.replace(/^on/ig,"");
		element.addEventListener(eventName,handler,false);
	}
	return element;
}
function deEvent(element,eventName,handler){
	if(typeof(element)!="object")var element = $(element)
	if(window.attachEvent){
		element.detachEvent(eventName,handler)
	}
	else if(window.addEventListener){
		eventName = fDOMEventName(eventName)
		eventName = eventName.replace(/^on/ig,"");
		element.removeEventListener(eventName,handler,false);
	}
	return element;
}

if(window.Node){// 修正Node的DOM
/*
                       IE5        MacIE5       Mozilla      Konqueror2.2      Opera5
Node.contains          yes        yes           no            no               yes
Node.replaceNode       yes        no            no            no               no
Node.removeNode        yes        no            no            no               no
Node.children          yes        yes           no            no               no
Node.hasChildNodes     yes        yes           yes           yes              no
Node.childNodes        yes        yes           yes           yes              no
Node.swapNode          yes        no            no            no               no
Node.currentStyle      yes        yes           no            no               no
*/
    Node.prototype.replaceNode=function(Node){// 替换指定节点
        this.parentNode.replaceChild(Node,this);
    }
    Node.prototype.removeNode=function(removeChildren){// 删除指定节点
        if(removeChildren)
            return this.parentNode.removeChild(this);
        else{
            var range=document.createRange();
            range.selectNodeContents(this);
            return this.parentNode.replaceChild(range.extractContents(),this);
        }
    }
    Node.prototype.swapNode=function(Node){// 交换节点
        var nextSibling=this.nextSibling;
        var parentNode=this.parentNode;
        node.parentNode.replaceChild(this,Node);
        parentNode.insertBefore(node,nextSibling);
    }
	Node.prototype.__defineGetter__("getAttribute",function(attb){
		if(this.attributes==null){return false;}
		else{return this.attributes[attb].value;}
	});	
	Node.prototype.__defineGetter__("text",function(attb){
		return this.textContent
	});	
}


if(document.implementation && document.implementation.createDocument){
	XMLDocument.prototype.loadXML = function(xmlString){
		var childNodes = this.childNodes;
		for (var i = childNodes.length - 1; i >= 0; i--)
		this.removeChild(childNodes[i]);

		var dp = new DOMParser();
		var newDOM = dp.parseFromString(xmlString, "text/xml");
		var newElt = this.importNode(newDOM.documentElement, true);
		this.appendChild(newElt);
	};

	// check for XPath implementation
	if(document.implementation.hasFeature("XPath", "3.0")){
		// prototying the XMLDocument
		XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
			if(!xNode){xNode = this;}
			var oNSResolver = this.createNSResolver(this.documentElement)
			var aItems = this.evaluate(cXPathString, xNode, oNSResolver,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
			var aResult = [];
			for(var i = 0; i < aItems.snapshotLength; i++){
				aResult[i] = aItems.snapshotItem(i);
			}
			return aResult;
		}

		// prototying the Element
		Element.prototype.selectNodes = function(cXPathString){
			if(this.ownerDocument.selectNodes){
				return this.ownerDocument.selectNodes(cXPathString, this);
			}else{throw "For XML Elements Only";}
		}
	}

	// check for XPath implementation
	if( document.implementation.hasFeature("XPath", "3.0") ){
		// prototying the XMLDocument
		XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
		{
			if( !xNode ) { xNode = this; }
			var xItems = this.selectNodes(cXPathString, xNode);
			if( xItems.length > 0 )
			{
				return xItems[0];
			}
			else
			{
				return null;
			}
		}

		// prototying the Element
		Element.prototype.selectSingleNode = function(cXPathString){
			if(this.ownerDocument.selectSingleNode){
				return this.ownerDocument.selectSingleNode(cXPathString, this);
			}
			else{throw "For XML Elements Only";}
		}
	}
}
//兼容IE、Firefox的parentElement
if(window.HTMLElement){
	HTMLElement.prototype.__defineGetter__("parentElement",function(){
		return this.parentNode
	})
}

//兼容IE/Firefox的insertAjacentHTML方法
if(window.HTMLElement){
	HTMLElement.prototype.insertAdjacentHTML = function(wherepos,html){
		var This=this
		var oRange = This.ownerDocument.createRange();
		var frag;
		switch(wherepos.toLowerCase()){
		case "beforebegin":
			oRange.setStartBefore(This);
			frag = oRange.createContextualFragment(html);
			This.parentNode.insertBefore(frag,This);
			return This.previousSibling;
		case "afterbegin":
			if(This.firstChild){
				oRange.setStartBefore(This.firstChild);
				frag = oRange.createContextualFragment(html);
				This.insertBefore(frag,This.firstChild);
			}else{
				This.innerHTML = html;
			}
			return This.firstChild;
		case "beforeend":
			if(This.lastChild){
				oRange.setStartAfter(This.lastChild);
				frag = oRange.createContextualFragment(html);
				This.appendChild(frag);
			}else{
				This.innerHTML = html;
			}
			return This.lastChild;
		case "afterend":
			oRange.setStartAfter(This);
			frag = oRange.createContextualFragment(html);
			This.parentNode.insertBefore(frag,This.nextSibling);
			return This.nextSibling;
		}
	throw 'Illegal insertion point -> "' + wherepos + '"';
	}
}


//判断浏览器

var B = {
	isIE:     !!(window.attachEvent && !window.opera),
	isOpera:  !!window.opera,
	isWebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
	isGecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
	isMobileSafari: !!navigator.userAgent.match(/iPhone.*Mobile.*Safari/)
};

//$(element)就是document.getElementById(element)，当有多个参数时，返回数组
function $(element) {
	if (arguments.length > 1) {
		for (var i = 0, elements = [], length = arguments.length; i < length; i++)
			elements.push($(arguments[i]));
		return elements;
	}
	if (isString(element))
		element = document.getElementById(element);
	return element;
}

//$N(element)就是document.getElementByName(element)集合，当有多个参数时，返回数组
function $N(element) {
	if (arguments.length > 1) {
		for (var i = 0, elements = [], length = arguments.length; i < length; i++)
			elements.push($(arguments[i]));
		return elements;
	}
	if (isString(element))
		element = document.getElementsByName(element);
	return element;
}

//判断对象类型
function isString(obj){return typeof(obj.valueOf()) == "string";}
function isNumeric(obj){
	if(typeof(obj.valueOf()) == "number")return true;
	if(typeof(obj.valueOf()) == "string")return (/^\d+$/ig).test(obj.valueOf())
	return false;
}
function isNull(obj){return obj == null}
function isArray(obj){return obj.valueOf() && obj.valueOf().constructor === Array;}
function isFunction(obj){return typeof obj.valueOf() == "function"}
function isDate(obj){return obj && obj.valueOf().constructor == Date;}
function isElement(obj){return obj && obj.valueOf().nodeType == 1;}
//修剪字符串
function Trim(args){
	if(!isString(args))return args;
	return args.replace(/^ +| +$/ig,"");
}
function lTrim(args){
	if(!isString(args))return args;
	return args.replace(/^ +/ig,"");
}
function rTrim(args){
	if(!isString(args))return args;
	return args.replace(/ +$/ig,"");
}

//正则特殊符号转义，把字串中所有正则的特殊符号进行特殊处理，使其成为正常符号
function trancharacter(args){
	args=args.replace(/\$|\(|\)|\*|\+|\.|\[|\?|\\|^\|\{|\]|\}|\|/ig,"\\$&")
	return args;
}

//只用来建立XMLDocument对象
function cXML(){
	var objXML=null,xmlStr
	if(window.ActiveXObject){
		var xmlStr=new Array(
			"Msxml2.XMLHTTP.5.0",
			"Msxml2.XMLHTTP.5.0",
			"Msxml2.XMLHTTP.4.0",
			"Msxml2.XMLHTTP.3.0",
			"Msxml2.XMLHTTP",
			"Microsoft.XMLHTTP");
		for(var i=0;i<xmlStr.length;i++){
			try{
				var objXML=new ActiveXObject(xmlStr[i]);
				return objXML;
			}catch(e){}
		}
	}else if(window.XMLHttpRequest){
		objXML=new window.XMLHttpRequest()
		return objXML;
	}
}

//只用来建立XMLDocument对象
function cDOM(){
	var objXML=null,xmlStr
	if(window.ActiveXObject){
		var xmlStr=new Array(
			"Microsoft.XMLDOM",
			"Msxml2.DOMDocument");
		for(var i=0;i<xmlStr.length;i++){
			try{
				var objXML=new ActiveXObject(xmlStr[i]);
				return objXML;
			}catch(e){}
		}
	}
	else if(document.implementation && document.implementation.createDocument){
		objXML=document.implementation.createDocument("text/xml","",null);
		return objXML;
	}
}

var stopxml=false
//使用load方式取数据，urlStr为链接，myFunction为自定义函数
//当参数只有一个时，为同步执行xml载入文件，并反回xml对象
//当参数为2个以上，则异步执行，第一个参数为文本链接，
//第二个参数为字符串时，把字符当成JS命令操作，不返回对象
//第二个参数是函数时，执行函数，并且把xml对象作为函数的第一个参数，第叁个开始的参数作为函数的第二个开始的参数
function useloadXML(urlStr,myFunction){
	var myxml=cDOM()
	var This=arguments
	if(arguments.length <= 1){myxml.async="false"}
	else{myxml.async="true"}
	if(arguments.length <= 1)myxml.load(urlStr)
	if(arguments.length <= 1)return myxml
	myxml.onreadystatechange=function(){
		if(stopxml){
			myxml.abort();
			stopxml=false
			return false;
		}
		if(myxml.readyState!=4)return false;
		if(myxml.parseError!=0){
			if(typeof($("bar_block"))=="object"){
				if($("bar_block").style.display=="block")statebar.noshow();
			}
			alert('数据处理出错，发生错误行号为：'+myxml.parseError.line)
			delete(myxml)
			return false
		}
		if(!isFunction(myFunction)){eval(myFunction);return false}
		//myFunction(myxml)
		var newArg = new Array()
		var argsStr=""
		for(var i=2; i<This.length; i++){
			eval("var newArg" + (i-2)+" = " + "This[i]")
			argsStr+= ",newArg" + (i-2)
		}
		eval("myFunction(myxml" + argsStr + ")");
	}
	myxml.load(urlStr);
}

//使用get方式取数据，urlStr为链接，myFunction为自定义函数
//当参数为2个以上，则异步执行，第一个参数为文本链接，
//第二个参数为字符串时，把字符当成JS命令操作，不返回对象
//第二个参数是函数时，执行函数，并且把xml对象作为函数的第一个参数，第叁个开始的参数作为函数的第二个开始的参数
function usegetXML(urlStr,myFunction){
	var myxml=cXML()
	var This=arguments
	myxml.open("GET",urlStr,true)
	myxml.setRequestHeader("If-Modified-Since","Last-Modified")
	myxml.onreadystatechange=function(){
		if(stopxml){
			stopxml=false
			myxml.abort();
			return false;
		}
		if(myxml.readyState!=4)return false;
		if(myxml.status!=200)return false;
		if(myFunction == null)return false;
		if(!isFunction(myFunction)){
			eval(myFunction);
			return true;
		}
		var argsStr=""
		for(var i=2; i<This.length; i++){
			eval("var newArg" + (i-2)+" = " + "This[i]")
			argsStr+= ",newArg" + (i-2)
		}
		eval("myFunction(myxml" + argsStr + ")");
	}
	myxml.send(null)
}

//使用post方式取数据，urlStr为链接，myFunction为自定义函数
function usepostXML(urlStr,sendStr,myFunction){
	var myxml=cXML()
	myxml.open("post",urlStr,true)
	myxml.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
	myxml.onreadystatechange=function(){
		if(stopxml){
			myxml.abort();
			stopxml=false
			return false;
		}
		if(myxml.readyState!=4)return false;
		if(myxml.status!=200)return false;
		if(!myFunction)return false;
		myFunction(myxml)
	}
	myxml.send(sendStr)
}


//限制输入的字符，args为0只能输入数字，args为a只能输入字母，args为_只能输入“字母、数字和_
//可允许回车键13，回删键8和删除键46，取消键27，shift键16；方向键37-40；字母65－90；_189；数字48-57或96-105
//注意，此过程响应onkeypress事件方有效
function limitcharacter(args){
	if(event.keyCode==13||event.keyCode==8||event.keyCode==46||event.keyCode==27)return true
	switch(args.toString()){
	case "a" :
		if(event.keyCode<65 || event.keyCode>90 && event.keyCode<97 || event.keyCode>122 )return false
		break;
	case "0" :
		if(event.keyCode<48 && event.keyCode!=45 || event.keyCode>57)return false
		break;
	case "_" :
		if(/^\W+$/ig.test(String.fromCharCode(event.keyCode)))return false;
		break;
	}
}

//XML转义符转成HTML
function xmltohtml(args){
	var xml_str
	xml_str=args
	if(!xml_str)return "";
	xml_str=xml_str.replace(/&/ig,"&amp;")
	xml_str=xml_str.replace(/</ig,"&lt;")
	xml_str=xml_str.replace(/>/ig,"&gt;")
	xml_str=xml_str.replace(/"/ig,"&quot;")
	xml_str=xml_str.replace(/'/ig,"&apos;")
	return xml_str
}


//文件大小的各种单位转换成字节
function unitTosize(num,unitArgs){
	var n=0
	num=num.replace(/^ *| *$/i,"")
	switch(unitArgs.replace(/^ *| *$/ig,"")){
	case "B" :
		n=num;
		break;
	case "KB" :
		n=num*1024;
		break;
	case "MB" :
		n=num*1024*1024;
		break;
	case "GB" :
		n=num*1024*1024*1024;
		break;
	case "TB" :
		n=num*1024*1024*1024*1024;
		break;
	}
	return parseInt(n);
}
//字节大小转换成带各种单位表示法
function sizeTounit(num,unitArgs){
	var n=0,autosize,unitStr
	if(isNull(num))return "";
	num=num.replace(/^\D+$/i,"")
	if(unitArgs==null)unitArgs=""
	switch(unitArgs.replace(/^ *| *$/ig,"")){
	case "" :
		autosize=true
	case "B" :
		n=num;
		if(n/1024<1 || !autosize){unitStr="B";break;}
	case "KB" :
		n=num/1024;
		if(n/1024<1 || !autosize){unitStr="KB";break;}
	case "MB" :
		n=num/1024/1024;
		if(n/1024<1 || !autosize){unitStr="MB";break;}
	case "GB" :
		n=num/1024/1024/1024;
		if(n/1024<1 || !autosize){unitStr="GB";break;}
	case "TB" :
		n=num/1024/1024/1024/1024;
		unitStr="TB";
	}
	return parseFloat(n).toFixed(2)+unitStr;
}


/*此段程序是状态界面程序，功能是显示等待提示。
程序默认对象：statebar；
1.属性：statebar.cstring=str；
给界面赋于显示提示字符串；
2.方法：statebar.cancel(str)；
用户单击取消时的动作，str为要执行的字符串；
3.方法：statebar.show(x,y,w,h)；
其中x、y、w、h分别界面的top、left、width和height，整型，默认在文档中间，宽度为300px，高度为100px。
4.方法：statebar.noshow()；
清除隐藏界面
*/
var statebar=new stateBar()
var sb_id
function stateBar(){
	if(!document.body){
		setTimeout("stateBar()",200)
		return false;
	}
	this.cstring="程序正在运行中，请稍后";
	var stateBarStr='<iframe style="z-index:10;position:absolute;width:0px;height:0px;left:0px;top:0px;" frameborder="0"></iframe><div id="bar_block" style="position:absolute;z-index:100;width:300px;height:100px;background-color:#66CCFF;text-align:center; vertical-align:middle;display:none;border-width:1px;border-style:dotted;border-color:#333333;cursor:default" oncontextmenu="return false" onselectstart="return false" onpropertychange="this.previousSibling.style.left=this.offsetLeft;this.previousSibling.style.top=this.offsetTop;this.previousSibling.style.width=this.offsetWidth;this.previousSibling.style.height=this.offsetHeight;"><table width="100%" height="100px" border="0" align="center" cellpadding="0" cellspacing="0">	<tr><td align="center" nowrap><span id="bar_string" style="color:#454545;font-size:14px;">程序正在运行中，请稍后</span><span id="spn_Status_bar" style="width:80px;font-size:14px;text-align:left;color:#454545;">．．．．．</span></td><td width="30px" align="center" valign="bottom"><span id="bar_cancel" style="font-size:16px;font-weight:bold;cursor:pointer;" onclick="document.getElementById(\'bar_block\').style.display=\'none\'">&#215;</span></td></tr></table></div>';
	document.body.insertAdjacentHTML("afterBegin",stateBarStr)
	var tmpBB = document.getElementById("bar_block");
	var tmpBB_left=document.body.scrollLeft+(parseInt(document.body.clientWidth)-parseInt(tmpBB.style.width))/2
	var tmpBB_top=document.body.scrollTop+(parseInt(document.body.clientHeight)-parseInt(tmpBB.style.height))/2
	tmpBB.style.left=parseInt(tmpBB_left)+"px";
	tmpBB.style.top=parseInt(tmpBB_top)+"px";
}
stateBar.prototype.show=function(x,y,w,h){
	if(!document.getElementById("bar_block")){return false}
	with(document.getElementById("bar_block")){
		if(style.display=="block")return;
		if(x!=undefined){style.left=document.body.scrollLeft+x+"px"}
		else{style.left=document.body.scrollLeft+(parseInt(document.body.clientWidth)-parseInt(style.width))/2+"px"}
		if(y!=undefined){style.top=document.body.scrollTop+y+"px"}
		else{style.top=document.body.scrollTop+(parseInt(document.body.clientHeight)-parseInt(style.height))/2+"px"}
		if(w!=undefined){style.width=w+"px"}
		if(h!=undefined){style.height=h+"px"}
		document.getElementById("bar_string").innerHTML=this.cstring
		var runSTR='document.getElementById("bar_block").style.display="block";'
		runSTR+='sb_id=window.setInterval("sb_nerver_go()",500)'
		sb_id=window.setTimeout(runSTR,1000)
	}
}

stateBar.prototype.cancel=function(args){
	if(!document.getElementById("bar_block")){return false}
	var This=this
	document.getElementById("bar_cancel").onclick = function(){
		if(args)eval(args);
		This.noshow();
		alert("用户已取消操作！");
	}
}
stateBar.prototype.noshow=function(){
	if(!document.getElementById("bar_block")){return false}
	document.getElementById("bar_block").style.display="none"
	document.getElementById("bar_string").innerHTML=this.cstring
	if(sb_id!=null)clearInterval(sb_id)
}
function sb_nerver_go(){
	with(document.getElementById("spn_Status_bar")){
		if(innerHTML.length>=5)innerHTML=""
		innerHTML+="．"
	}
}


//主功能：JS语言书的读写cookie操作，包含了cookie、多个子键、到期时间、路径、跨域的增、删、修改操作。
/*cookies所有方法：
  cookies([name][,value][,path]) *****读写cooie*****
      name 可选，字符型，cookie的名称；
      value 可选，字符型，写cookie的值，须指定name。
      path 可选，字符型，写cookie的共享路径，须指定value，只有在创建时有效，修改时无效。
      说明：无参数读所有cookie名及值；只指定了name读主键值；指定value时写cookie，写cookie时name不能为空。
      
  cookies.key([name][,childname][,value][,path]) ******读写cookie的子键*******
      name 可选，字符型，cookie的名称；
      childname 可选，字符型，cookie的子键名称；
      value 可选，字符型，cookie的子键值；须指定name和childname；
      path 可选，字符型，cookie的共享路径；须先指定value，只有在创建时有效，修改时无效。
      说明：无参数读所有cookie名及值；只指定了name读主键值，指定name和childname读子键值；指定value时写cookie，写cookie时name和childname不能为空。
      
  cookies.expires(name[,date]) *****修改cookie到期时间 *****
      name 必选，字符型，cookie的名称；
      date 可选，日期型或字符型的日期，cookie到期时间。
      说明：设置名为name的cookie到期时间，当未指定参数或参数无效时，该cookie1天后到期。
      
  cookies.domain(name[,domain]) *****修改cookie到期时间 *****
      把名为name的域domain写到cookie，若未定name或指定的name不存在或未指定domain则操作无效。
      
  cookies.del(name[,childname]) *****删除cookie或cookie子键*****
      name 必选，字符型，cookie的名称；
      childname 可选，字符型，cookie的子键名，须指定name；
      说明：无参数时删除所有cookie；只指定name删除主键；指定了childname只删除子键。
*/
//测试环境：符合W3C标准，已测试支持IE4+、Firefox1.0+、Opera7+。
//作者:白风；QQ：29628988；MSN：phenlit@hotmail.com；skype：phenlit
//Blog：http://lwb.szdb.net
//szdb.net@gmail.com；http://www.szdb.net；
//<!--
function cookies(){
	var aPath="";
	if(arguments.length == 0)return document.cookie; //无参数，读所有cookie
	if(arguments.length >= 2){ //在写cookie时，名字不能为空
		if(arguments[0] == ""){alert("不能写空名字的cookie！");return false}
	}
	if(arguments.length >= 3){ //存在第叁个路径参数时，赋于路径
		aPath = "; path=" + arguments[2];
		if(!(/^[\s\S]*\/$/ig.test(aPath)))aPath += "/";
	}
	var cookieAry=document.cookie.split("; ");
	for(var i in cookieAry){
		var start_poin=cookieAry[i].indexOf("=");
		if(start_poin == -1)start_poin = arguments[0] .length
		if(arguments[0] == cookieAry[i].substring(0,start_poin)){
			if(arguments.length >= 2){ //写cookie
				document.cookie = arguments[0] + "=" + arguments[1];
				return arguments[1];
			}
			return cookieAry[i].substr(start_poin + 1); //读得cookie
		};
	};
	if(arguments.length >= 2){ //创建cookie时设置了路径
		document.cookie = arguments[0] + "=" + arguments[1] + aPath;
		return arguments[1];
	}
	return "";
};
cookies.key = function(){ //读写cookie子键
	switch(arguments.length){
		case 0: //读所有cookie
			return this();
		case 1: //读cookie
			return this(arguments[0]);
		default: //读cookie子键值
			var aPath="";
			var cookieAry = this(arguments[0]).split("&");
			if(arguments.length >= 4){ //存在第叁个路径参数时，赋路径
				aPath = "; path=" + arguments[3];
				if(!(/^[\s\S]*\/$/ig.test(aPath)))aPath += "/";
			}
			if(arguments.length >= 3){ //在写cookie时，名字不能为空
				if(arguments[0] == ""){alert("不能写空名字的cookie！");return false}
				if(arguments[1] == ""){alert("不能写子关键字为空的cookie！");return false;}
			};
			for(var i in cookieAry){
				var start_poin = cookieAry[i].indexOf("=");
				if(start_poin == -1){cookieAry[0] = "";break;}
				if(arguments[1] == cookieAry[i].substring(0,start_poin)){
					if(arguments.length >= 3){ //写cookie子键
						cookieAry[i] = arguments[1] + "=" + arguments[2]
						document.cookie = arguments[0] + "=" + cookieAry.join("&");
					}
					return cookieAry[i].substr(start_poin+1);
				};
			};
			if(arguments.length >= 3){ //创建cookie子键时设置了路径
				var keywordstr = cookieAry.join("&")
				if(keywordstr != "") keywordstr += "&";
				document.cookie = arguments[0] + "=" + keywordstr + arguments[1] + "=" + arguments[2] + aPath;
				return arguments[2];
			};
			return "";
	};
};
cookies.expires=function(){ //设置cookie时间，若未指定时间则1天后到期
	if(arguments.length == 0 || arguments[0] == ""){
		alert("设置cookie时间，cookie名字不能为空！");return false;
	}
	var atterm=new Date();
	var cookieAry=document.cookie.split("; ");
	atterm.setTime(atterm.getTime()+(24*3600*1000))
	if(typeof(arguments[1]) == "object"){
		if(!isNaN(arguments[1].toGMTString())){atterm = arguments[1];};
	}
	else if(arguments[1] != null){
		if(!isNaN(Date.parse(arguments[1]))){atterm.setTime(Date.parse(arguments[1]))};
	};
	for(var i in cookieAry){
		var start_poin = cookieAry[i].indexOf("=");
		if(start_poin == -1)start_poin = arguments[0].length;
		if(arguments[0] == cookieAry[i].substring(0,start_poin)){
			document.cookie = cookieAry[i] + "; expires=" + atterm.toGMTString() + "; "
			return true;
		};
	};
	return false;
};
cookies.domain = function(domain_args,domain_args1){
	document.cookie = domain_args + "; domain=" + domain_args1 + ";"
};
cookies.del = function(){
	var atterm=new Date();
	atterm.setTime(atterm.getTime() - 1000)
	switch(arguments.length ){
		case 0:
			var cookieAry=document.cookie.split("; ");
			for(var i in cookieAry){
				document.cookie = cookieAry[i] + "=; expires=" + atterm.toGMTString() + "; ";
			};
			return true
		case 1:
			document.cookie = arguments[0] + "=; expires=" + atterm.toGMTString() + "; ";
			return true
		default:
			var cookieAry = this(arguments[0]).split("&");
			for(var i in cookieAry){
				var start_poin = cookieAry[i].indexOf("=");
				if(start_poin == -1){cookieAry[0] = "";break;}
				if(arguments[1] == cookieAry[i].substring(0,start_poin)){
					cookieAry.splice(i,1)
					document.cookie = arguments[0] + "=" + cookieAry.join("&") + "; ";
					return true
				};
			};
	}
	return false
};
//-->

//打开窗口，写入地址浏览，url是链接地址，winname窗口名，wd为窗口宽度，hg为窗口高度
function openurlwin(url,winname,wd,hg){
	if(url==undefined||url=="")return false;
	if(winname==undefined)winname=""
	if(wd==undefined){var wd=600;}else{wd=wd.toString().replace(/\D/ig,"")}
	if(hg==undefined){var hg=400;}else{hg=hg.toString().replace(/\D/ig,"")}
	var argstate='scrollbars=yes,resizable=yes,location=no,menubar=no,status=yes,toolbar=yes,width=';
	argstate+=wd+',height='+hg+',left='+(screen.availWidth-wd)/2+',top='+(screen.availHeight-hg-80)/2;
	var openwindow=window.open(url,winname,argstate)
	openwindow.focus()
}

//打开窗口，写入文档预览，winname窗口名，args是写入内容，wd为窗口宽度，hg为窗口高度
function viewdocwin(winname,args,wd,hg){
	if(winname==undefined)winname=""
	if(args==undefined)args=""
	if(wd==undefined){var wd=600;}else{wd=wd.toString().replace(/\D/ig,"")}
	if(hg==undefined){var hg=400;}else{hg=hg.toString().replace(/\D/ig,"")}
	var argstate='scrollbars=yes,resizable=yes,status=yes,location=no,menubar=no,toolbar=yes,width=';
	argstate+=wd+',height='+hg+',left='+(screen.availWidth-wd)/2+',top='+(screen.availHeight-hg-80)/2;
	var openwindow=window.open("about:blank",winname,argstate)
	openwindow.document.write(args)
	openwindow.focus()
}

//最小化时释放内存
function freedoc(obj){
	for(var i in obj){
		try{
			
		}catch(e){}
	}
	setTimeout(CollectGarbage,1)
	CollectGarbage();
}

window.document.onunload=freedoc(document);

onerror=function(){return false;}

