﻿//<![CDATA[ 
(function(){

/*******************JSoul原型扩展方法 [方法类型]******************/
//JSoul.fn.extend({
//	instanceFunction:function(arg){
//	/// <summary>方法介绍</summary>
//	/// <param name="arg">参数</param>
//	/// <returns type="JSoul" />
//		this.each(function(i){
//			//Do something...
//		});
//		return this;
//	}
//});
/*******************JSoul静态扩展方法 [方法类型]******************/
//JSoul.extend({
//	staticFunction:function(item, arg){
//	/// <summary>绑定事件</summary>
//	/// <param name="elem">对象</param>
//	/// <param name="arg">参数</param>
//		//Do something...
//	}
//});

String.prototype.trim = function(){
/// <summary>刪除字符串前后空格</summary>
/// <returns type="String" />
	return this.replace(/(^\s*)|(\s*$)/g, "");
}
Array.prototype.Foreach = function(delegate){
/// <summary>遍历數組</summary>
/// <param name="delegate" type="Function">委托表达式</param>
	for(var i=0,j=this.length; i<j ;i++){
		delegate.call(this[i],i);
	}
}
Array.prototype.AddRange = function(itemList){
/// <summary>添加數組</summary>
/// <param name="itemList" type="Array">添加的对象列表</param>
/// <returns type="Array" />
	for(var i=0,j=itemList.length; i<j ;i++){
		this.push(itemList[i]);
	}
	return this;
}
Array.prototype.AddItem = function(item){
/// <summary>添加项</summary>
/// <param name="item" type="Object">添加的对象</param>
/// <returns type="Array" />
	if(item){
		for(var i=0,j=newList.length; i<j ;i++){
			this.push(item);
		}
	}
	return this;
}
Array.prototype.Remove = function(item){
/// <summary>刪除數組子元素</summary>
/// <param name="item" type="Object">删除的对象</param>
/// <returns type="Object" />
	for(var i=0,j=this.length; i<j ;i++){
		if(this[i]==item)
			return this.splice(i,1);
	}
}
Date.prototype.addYear=function (num){
	/// <summary>设置年数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setFullYear(this.getFullYear()+num);
	return this;
}
Date.prototype.addMonth=function (num){
	/// <summary>设置月数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setMonth(this.getMonth()+num);
	return this;
}
Date.prototype.addDay=function (num){
	/// <summary>设置天数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setDate(this.getDate()+num);
	return this;
}
Date.prototype.addHour=function (num){
	/// <summary>设置小时数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setHours(this.getHours()+num);
	return this;
}
Date.prototype.addMinute=function (num){
	/// <summary>设置分钟数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setMinutes(this.getMinutes()+num);
	return this;
}
Date.prototype.addSecond=function (num){
	/// <summary>设置秒数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setSeconds(this.getSeconds()+num);
	return this;
}
Date.prototype.addMS=function (num){
	/// <summary>设置毫秒数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setMilliseconds(this.getMilliseconds()+num);
	return this;
}
Date.prototype.addWeek=function (num){
	/// <summary>设置周数</summary>
	/// <param name="num" type="Number">要添加的时间数</param>
	/// <returns type="Date" />
	this.setDate(this.getDate()+num*7);
	return this;
}
/*******************对象选择器******************/
var JSoul = window.JSoul = function(selector,context){
/// <summary>JSoul对象</summary>
/// <param name="selector" type="String | DocumentNode">选择器表达式</param>
/// <param name="context" type="DocumentNode">上下文对象</param>
/// <returns type="JSoul" />
	return new JSoul.prototype.Init(selector,context);
}
/*******************JSoul核心******************/
JSoul.fn = JSoul.prototype = {
	Init:function(selector,context){
	/// <summary>初始化选择器</summary>
	/// <param name="selector" type="String | DocumentNode">选择器表达式</param>
	/// <param name="context" type="DocumentNode">上下文对象</param>
	/// <returns type="JSoul" />
		//保证有效的选择器
		selector = selector || document;
		//如果为DOM Node
		if (selector.nodeType){
			return this.setSingle(selector);
		//如果为HTML字符串
		}else if(typeof(selector) == "string"){
			return JSoul(context).find(selector);
		}
		return this.setArray(
		// 匹配数组: $(array)
		selector.constructor == Array && selector ||
		// 匹配伪数组DOM nodes: $(arraylike)
		(selector.jsoul || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && JSoul.makeArray( selector ) ||
		// 匹配: $(*)
		[ selector ] );
	},
	setSingle:function(item){
	/// <summary>设置单个对象</summary>
	/// <param name="item" type="DocumentNode">对象</param>
	/// <returns type="JSoul" />
		this[0] = item;
		this.length = 1;
		return this; 
	},
	length: 0,
	jsoul: "1.0.0.0",
	get: function(num) {
		///<summary>得到一个指定索引对象</summary>
		///<param name="num" type="Number" optional="true">(optional) 查询的位置</param>
		///<returns type="JSoul" />
		return num == undefined ?
		///<summary>匹配DOM</summary>
		///<param name="num" type="Number" optional="true">(optional) 查询的位置</param>
		///<returns type="Array" />
			// 返回一个干净的 array
			JSoul.makeArray(this) :
			// 返回匹配对象
			this[num];
	},
	pushStack: function( elems){
		///<summary>使对象继承JSoul</summary>
		///<param name="elems" type="Array" optional="true">(optional) 对象</param>
		///<returns type="JSoul" />
		var ret = JSoul(elems);
		// 添加对象引用
		ret.prevObject = this;
		// 返回一个新的对象
		return ret;
	},
	setArray: function(elems){
	/// <summary>设置为JSoul对象</summary>
	/// <param name="elems" type="Array">对象数组</param>
	/// <returns type="JSoul" />
		this.length = 0;
		Array.prototype.push.apply( this, elems );
		return this;
	},
	find:function(selector){
	/// <summary>查找对象</summary>
	/// <param name="selector" type="String">选择器表达式</param>
	/// <returns type="JSoul" />
		var elems = JSoul.map(this, function(elem){
			return JSoul.find(selector, elem);
		});
		return this.pushStack(elems);
	},
	each:function(func){
	/// <summary>遍历对象</summary>
	/// <param name="func" type="Function">遍历方法</param>
		for(var i=0,j=this.length; i<j ;i++){
			func.call(this[i],i);
		}
	}
};
window.$ = JSoul;
// Give the init function the jQuery prototype for later instantiation
//为JSoul接续的实例得到Init函数
JSoul.prototype.Init.prototype = JSoul.prototype;
JSoul.extend = JSoul.fn.extend = function(properties) {
	/// <summary>静态方法扩展JSoul.extend与原型扩展JSoul.fn.extend</summary>
	/// <param name="properties" type="Collection">方法属性集合</param>
	for(var i in properties){
		this[i] = properties[i];
	}
};
/*******************JSoul核心静态支持方法******************/
//静态方法扩展
JSoul.extend({
	makeArray: function(array){
		///<summary>设置为一个数组</summary>
		///<param name="array" type="Array">数组对象</param>
		///<returns type="Array" />
		var ret = new Array();
		// 将Node list转为array
		if ( typeof(array) != "array" )
			for ( var i = 0, length = array.length; i < length; i++ )
				ret.push( array[ i ] );
		else
			ret = array.slice(0);

		return ret;
	},
	map: function(elems, callback){
	/// <summary>影射对象</summary>
	///<param name="elems" type="Array">对象</param>
	/// <param name="callback" type="Function">回调方法</param>
	/// <returns type="Array" />
		var ret = [];
		for (var i = 0, j = elems.length; i < j; i++) {
			var value = callback( elems[ i ], i );
			if ( value !== null && value != undefined ) {
				if ( value.constructor != Array )
					value = [ value ];

				ret = ret.concat( value );
			}
		}
		return ret;
	},
	find:function(selector,context){
	/// <summary>查找对象</summary>
	/// <param name="selector" type="String">选择器表达式</param>
	/// <param name="context" type="DocumentNode">上下文对象</param>
	/// <returns type="JSoul" />
		context = context || document;
		//匹配ID[#],ATTR[$],TAG[]
		var match = /^(.)/.exec(selector);
		//如果匹配到格式
		if(match && match[1]){
			switch(match[1]){
				case "#": return JSoul.getByID(JSoul.replaceToSplit(selector,"#"),context);
				case "$": return JSoul.getByAttr(JSoul.replaceToSplit(selector,"$"),context);
				case ">": return JSoul.getByFormSub(JSoul.replaceToSplit(selector,">"),context);
				default: return JSoul.getByTag(JSoul.replaceToSplit(selector,""),context);
			}
		}
	},
	getByID:function(names,context){
	/// <summary>设置通过ID得到的对象 $("#aa,bb,cc,dd")</summary>
	/// <param name="names" type="Array">名称数组</param>
	/// <param name="context" type="DocumentNode">上下文对象</param>
	/// <returns type="Array" />
		var ret = new Array();
		for(var i=0,j=names.length; i<j ;i++){
			var item = document.getElementById(JSoul.trim(names[i]));
			if(item){
				ret.push(item);
			}
		}
		return ret;
	},
	getByTag:function(names,context){
	/// <summary>设置通过Tag得到的对象 $("div,a,ul,dl")</summary>
	/// <param name="names" type="Array">名称数组</param>
	/// <param name="context" type="DocumentNode">上下文对象</param>
	/// <returns type="Array" />
		var ret = new Array();
		for(var i=0,j=names.length; i<j ;i++){
			var items = context.getElementsByTagName(JSoul.trim(names[i]));
			for(var m=0,n=items.length; m<n ;m++){
				ret.push(items[m]);
			}
		}
		return ret;
	},
	getByAttr:function(names,context){
	/// <summary>设置通过属性得到的对象 $("$form|div,className|id|name,aa|form1")</summary>
	/// <param name="names" type="Array">名称数组</param>
	/// <param name="context" type="DocumentNode">上下文对象</param>
	/// <returns type="Array" />
		var ret = new Array();
		if(names.length == 3){
			var _tags = names[0].split("|"), _attrNames = names[1].split("|"), _attrValues = names[2].split("|");
			ret = JSoul.getByTag(_tags, context);
			for(var i=0,j=ret.length; i<j ;i++){
				if(!JSoul.checkAttr(ret[i],_attrNames,_attrValues)){
					ret.splice(i, 1);
					i--;j--;
				}
			}
		}
		return ret;
	},
	checkAttr:function(item, attrNames, attrValues){
	/// <summary>检查属性值是否成立</summary>
	/// <param name="item" type="Object">对象</param>
	/// <param name="attrNames" type="String">属性名称</param>
	/// <param name="attrValues" type="Object">属性值</param>
	/// <returns type="Boolean" />
		for(var m=0,n=attrNames.length; m<n ;m++){
			if(item[attrNames[m]]){
				for(var x=0,y=attrValues.length; x<y ;x++){
					if(item[attrNames[m]] == attrValues[x]){
						return true;
					}
				}
			}
		}
		return false;
	},
	getByFormSub:function(names,context){
	/// <summary>设置通过form name得到的对象 form.(">aa,bb,cc,dd")</summary>
	/// <param name="names" type="Array">名称数组</param>
	/// <param name="context" type="DocumentNode">上下文对象</param>
	/// <returns type="Array" />
		var ret = new Array();
		if(context && context.tagName == "FORM"){
			 for(var i=0,j=names.length; i<j ;i++){
				var item = context[JSoul.trim(names[i])];
				if(item){
					ret.push(item);
				}
			}
		}
		return ret;
	}
});
/*******************JSoul静态方法扩展 [浏览器设置]******************/
var userAgent = navigator.userAgent.toLowerCase();
JSoul.extend({
	browser:{
		///<summary>客户端浏览器设置</summary>
		version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
		safari: /webkit/.test( userAgent ),
		opera: /opera/.test( userAgent ),
		msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
		mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
	},
	setCookie:function(id, name, value, days){
	/// <summary>设置客户端Cookie</summary>
	/// <param name="id" type="String">客户端Cookie的ID名称</param>
	/// <param name="name" type="String">Cookie键</param>
	/// <param name="value" type="String">Cookie值</param>
	/// <param name="days" type="Number">记录天数</param>
		document.cookie = CookieName + "=" + typeName + "=" + typeValue + "; expires=" + new Date().addDay(days).toGMTString() + "; path=/";
	},
	root:document.documentElement
});
/*******************JSoul 静态方法扩展 [DOM加载检测]******************/
JSoul.extend({
	DomFuns: [],
	DomArgs: [],
	DomRun: function(){
	/// <summary>执行方法队列</summary>
		if (arguments.callee.done) return;
		arguments.callee.done = true;
		for (i = 0;i < JSoul.DomFuns.length;i++) JSoul.DomFuns[i](JSoul.DomArgs[i]);
	},
	$: function(callback, args){
	/// <summary>加载Onload事件</summary>
	/// <param name="callback" type="Function">需要加载的函数</param>
	/// <param name="args"  type="Object">函数的参数</param>
		this.DomFuns.push(arguments[0]);
		if(arguments.length > 1)this.DomArgs.push(arguments[1]);
		else this.DomArgs.push("");
		if (document.addEventListener) 
			document.addEventListener("DOMContentLoaded", JSoul.DomRun, null);
		if (/KHTML|WebKit/i.test(navigator.userAgent)){
			var _timer = setInterval(function(){
				if (/loaded|complete/.test(document.readyState)){
					clearInterval(_timer);
					delete _timer;
					JSoul.DomRun();
				}
			}, 10);
		}
		if(this.browser.msie){
			var proto = "src='javascript:void(0)'";
			if (location.protocol == "https:") proto = "src=//0";
			document.write("<scr"+"ipt id=__ie_onload defer " + proto + "><\/scr"+"ipt>");
			var script = document.getElementById("__ie_onload");
			script.onreadystatechange = function() {
				if (this.readyState == "complete") {
					JSoul.DomRun();
				}
			};
		}
		window.onload = JSoul.DomRun;
	}
});
/*******************ajax组件 [原型扩展]******************/
JSoul.extend({
	$x:function(url,method,onload,onerror,postStr,relate,stateArray){
		/// <summary>ajax控件</summary>
		/// <param name="url" type="String">服务器接收URL</param>
		/// <param name="method" type="String">发送数据方法 [ POST | GET ]</param>
		/// <param name="onload" type="Function">数据读取完成事件</param>
		/// <param name="onerror" type="Function">错误事件</param>
		/// <param name="postStr" type="String">POST数据</param>
		/// <param name="relate" type="Object">上下文关联对象</param>
		/// <param name="stateArray" type="Array">状态方法</param>
		this.url = url;
		this.req = null;
		this.method = method;
		this.onload = onload;
		this.postStr = postStr;
		this.onerror = (onerror) ? onerror : this.defaultError;
		this.rel = relate;
		this.stateNum = (stateArray) ? stateArray : false;
		this.Init();
	}
});
JSoul.$x.prototype = {
	Init:function(){
	/// <summary>读取数据</summary>
		if(window.XMLHttpRequest){
			this.req = new XMLHttpRequest();
			if(this.req.overrideMimeType){
					this.req.overrideMimeType('text/xml');
			}
		}else if(window.ActiveXObject){
			var MSXML = ["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
			for(var i=0, j=MSXML.length; i<j; i++){
				try{
					this.req = new ActiveXObject(MSXML[i]);break;
				}catch(e){}
			}
		}
		if(this.req){
			try{
				var loader = this;
				this.req.onreadystatechange = function(){
					loader.onReadyState.call(loader)
				}
				this.req.open(this.method,this.url,true);
				this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
				this.req.send(this.postStr);
			}catch(err){
				this.onerror.call(this);
			}
		}
	},
	onReadyState:function(){
	/// <summary>读取状态</summary>
		var req = this.req;
		var ready = req.readyState;
		if(this.stateNum && ready >= 1 && ready <= 3){
			this.stateNum[ready-1].call(this);
		}else if(ready == 4){
			var httpStatus = req.status;
			if(httpStatus == 200 || httpStatus == 0){
				this.onload.call(this);
			}else{
				this.onerror.call(this);
			}
		}
	},
	defaultError:function(){
	/// <summary>读取错误</summary>
		alert("数据连接错误!"
			+ "\n\nreadyState: " + this.req.readyState
			+ "\nstatus: " + this.req.status
			+ "\nheafers: " + this.req.getAllResponseHeaders()
			)
	}
}
/*******************JSoul静态扩展方法 [字符串方法]******************/
JSoul.extend({
	replaceToSplit:function(text, flag, sign){
	/// <summary>分割为名称数组</summary>
	/// <param name="text" type="String">字符串</param>
	/// <param name="flag" type="String">需要删除的标识</param>
	/// <param name="sign" type="String">分割符号</param>
	/// <returns type="Array" />
		return text.replace(flag || "","").split(sign || ",");
	},
	trim: function(text) {
	///<summary>去除前后空格</summary>
	///<param name="text" type="String">字符串</param>
	///<returns type="String" />
		return (text || "").replace( /^\s+|\s+$/g, "" );
	},
	parseXml:function(txt, tagName){
	///<summary>解析XML</summary>
	///<param name="text" type="String">字符串</param>
	///<param name="tagName" type="String">标签名称</param>
	///<returns type="Array" />
		var regexp = new RegExp("<"+tagName+".*>([\\s\\S]*)<\/"+tagName+">","ig");
		text = regexp.exec(text);
		var objArray = new Array();
		for(var i=1,j=text.length; i<j ;i++){
			objArray.push(strObj[i]);
		}
		return objArray;
	},
	parseJson:function(text, tagName){
	///<summary>解析Json</summary>
	///<param name="text" type="String">字符串</param>
	///<param name="tagName" type="String">标签名称</param>
	///<returns type="String" />
		var regexp = new RegExp("<"+tagName+".*>([\\s\\S]*)<\/"+tagName+">","ig");
		text = regexp.exec(text);
		return text ? text[1]: null;
	},
	json:function(txt){
	///<summary>转换Json为对象</summary>
	///<param name="text" type="String">字符串</param>
	///<returns type="Object" />
		return eval("("+this.parseJson(txt,"string")+")");
	},
	rex:{
		///<summary>匹配字符串</summary>
		buttons:/button|submit|reset/ig,//匹配所有按钮
		inputs:/textarea|text/ig,//匹配所有文本输入框
		text:/text/ig,//匹配单行文本输入框
		boxies:/checkbox|radio/ig,//匹配所有选择框
		select:/select/ig//匹配下拉菜单
	}
});
/*******************JSoul原型扩展方法 [事件设置]******************/
JSoul.fn.extend({
	bindEvent:function(pairs){
	/// <summary>绑定事件</summary>
	/// <param name="pairs" type="Array">事件列表[["onclick",click],["onmoseover",moseover]]</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			this["Num"] = i;
			JSoul.bindEvent(this,pairs);
		});
		return this;
	},
	addEvent:function(method, func){
	/// <summary>DOM方法添加事件</summary>
	/// <param name="method" type="String">事件名称 click</param>
	/// <param name="func" type="Function">引用的方法</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			JSoul.addEvent(this, method, func);
		});
		return this;
	},
	run:function(method){
	/// <summary>执行Document Node事件</summary>
	/// <param name="method" type="String">事件名称 click</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			this[method]();
		});
		return this;
	}
});
/*******************JSoul静态扩展方法 [事件设置]******************/
JSoul.extend({
	bindEvent:function(item, pairs){
	/// <summary>绑定事件</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="pairs" type="Array">事件列表[["onclick",click],["onmoseover",moseover]]</param>
		for(var i=0,j=pairs.length;i<j;i++){
			JSoul.attr(item,pairs[i][0], pairs[i][1]);
		}
	},
	addEvent:function(item, method, Func){
	/// <summary>DOM方法添加事件</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="method" type="String">事件名称 click</param>
		if(item.addEventListener){
			item.addEventListener(method, Func, false);	
		}else if(item.attachEvent){
			item.attachEvent("on" + method, Func);
		}else{
			item["on" + method] = Func;
		}
	},
	stopBubble:function(e){
	/// <summary>阻止事件冒泡</summary>
		if(e && e.stopPropagation)
			e.stopPropagation();
		else
			window.event.cancelBubble = true;
	},
	$e:function(e){
	/// <summary>得到事件容器</summary>
	/// <param name="e" type="Event">DOM事件容器</param>
	/// <returns type="Event" />
		return e || window.event;
	},
	$eNode:function(e){
	/// <summary>得到事件对象</summary>
	/// <param name="e" type="Event">DOM事件容器</param>
	/// <returns type="Event" />
		e = this.$e(e);
		return e.target || e.srcElement;
	},
	$eKey:function(e){
	/// <summary>得到键盘按键ID</summary>
	/// <param name="e" type="Event">DOM事件容器</param>
	/// <returns type="Event" />
		e = this.$e(e);
		return e.keyCode || e.which;
	},
	setRelate:function(Main, listA, listB, callback){
	/// <summary>关联对象</summary>
	/// <param name="Main" type="JSoul">JSoul父对象</param>
	/// <param name="listA" type="Array">列表A</param>
	/// <param name="listB" type="Array">列表B</param>
	/// <param name="callback" type="Function">回调方法</param>
	/// <returns type="Boolean" />
		if(listA.length == listB.length){
			for(var i=0,j=listA.length;i<j;i++){
				listA[i].Relate = listB[i];
				listB[i].Relate = listA[i];
				listA[i].Main = listB[i].Main = Main;
				if(callback)callback(listA[i], listB[i]);
			}
			return true;
		}else{
			return false;
		}
	}
});
/*******************JSoul原型扩展方法 [样式设置]******************/
JSoul.fn.extend({
	setAlpha:function(alpha){
	/// <summary>设置对象透明度</summary>
	/// <param name="alpha" type="Number">透明度[1-100]</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			JSoul.setAlpha(this,alpha);
		});
		return this;
	},
	css:function(cssExp){
	/// <summary>设置对象样式 "color:#FFF;font-size: 12px;"</summary>
	/// <param name="cssExp" type="String">样式表达式</param>
	/// <returns type="JSoul" />
		var _pairs = JSoul.spliteCSSExp(cssExp);
		this.each(function(i){
			JSoul.batchSetCss(this, _pairs);
		});
		return this;
	},
	className:function(name){
	/// <summary>设置样式表名称</summary>
	/// <param name="name" type="String">样式表名称<</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			JSoul.attr(this, "className", name);
		});
		return this;
	},
	externalLinks:function(){ 
	/// <summary>设置弹出窗口链接</summary>
	/// <returns type="JSoul" />
		this.each(function(i){
			JSoul.externalLinks(this);
		});
		return this;
	}
});
/*******************JSoul静态扩展方法 [样式设置]******************/
JSoul.extend({
	attr:function(elem, name, value){
	/// <summary>设置对象属性</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="name" type="String">名称</param>
	/// <param name="value" type="Object">值</param>
		elem[name] = value;
	},
	isAttr:function(elem, name, value){
	/// <summary>属性是否成立</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="name" type="String">名称</param>
	/// <param name="value" type="Object">值</param>
	/// <returns type="JSoul" />
		return elem[name] && elem[name] == value;
	},
	attrSet:function(elem, name, value){
	/// <summary>设置对象属性</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="name" type="String">名称</param>
	/// <param name="value" type="Object">值</param>
		elem.setAttribute(name,value);
	},
	batchAttrSet:function(elem,pairs){
	/// <summary>批量设置属性 [[][]]</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="pairs" type="Array">名值对 [[][]]</param>
		for(var i=0,j=pairs.length;i<j;i++){
			JSoul.attrSet(elem,pairs[i][0],pairs[i][1]);
		}
	},
	setAlpha:function(elem, alpha){
	/// <summary>设置对象透明度</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="alpha" type="Number">透明度[1-100]</param>
	/// <returns type="JSoul" />
		if(JSoul.browser.msie)JSoul.attr(elem.style,"filter", "alpha(opacity="+alpha+")");
		else JSoul.attr(elem.style,"opacity",alpha/100);
	},
	spliteCSSExp:function(cssExp){
	/// <summary>设置对象样式 "color:#FFF;font-size: 12px;" [{name:"",value:""}]</summary>
	/// <param name="cssExp" type="String">样式表达式</param>
	/// <returns type="Array" />
		cssExp = JSoul.styleToScript(cssExp);
		var nameValues = cssExp.split(";"), ret = new Array();
		for(var i=0,j=nameValues.length;i<j;i++){
			if(nameValues[i] != ""){
				var pair = nameValues[i].split(":");
				ret.push({name:JSoul.trim(pair[0]),value:JSoul.trim(pair[1])});
			}
		}
		return ret;
	},
	batchSetCss:function(elem,pairs){
	/// <summary>批量设置CSS [{name:"",value:""}]</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="pairs" type="Array">名值对</param>
		for(var i=0,j=pairs.length;i<j;i++){
			JSoul.attr(elem.style,pairs[i].name,pairs[i].value);
		}
	},
	css:function(elem,cssExp){
	/// <summary>批量设置CSS [{name:"",value:""}]</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="cssExp" type="String">样式表达式</param>
		var _pairs = JSoul.spliteCSSExp(cssExp);
		JSoul.batchSetCss(elem,_pairs);
	},
	styleToScript:function(cssExp){
	/// <summary>CSS转换为脚本格式 font-size -》fontSize</summary>
	/// <param name="cssExp" type="String">样式表达式</param>
	/// <returns type="String" />
		return cssExp.replace(/-\w/ig,function(MatchStr){
			return MatchStr.slice(1).toUpperCase();
		});
	},
	externalLinks:function(anchor){ 
	/// <summary>设置弹出窗口链接</summary>
	/// <param name="anchor" type="DocumentNode">链接对象</param>
		if (anchor.getAttribute("href")){
			switch(anchor.getAttribute("rel")){
				case "external": JSoul.batchAttrSet(anchor,[["className", "external"],["target", "_blank"]]);break;
				default: break;
			}
		}
	}
});
/*******************JSoul原型扩展方法 [表单方法]******************/
JSoul.fn.extend({
	clearInputValue:function(){
	/// <summary>绑定事件</summary>
	/// <param name="pairs" type="Array">事件列表[["onclick",click],["onmoseover",moseover]]</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			if(JSoul.rex.inputs.test(this.type || this.tagName))
				JSoul.attr(this,"value", "");
		});
		return this;
	},
	setButton:function(bool){
	/// <summary>设置所有的按钮</summary>
	/// <param name="bool" type="Boolean">按钮状态</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			if(JSoul.rex.buttons.test(this.type))
				JSoul.attr(this,"disabled", bool);
		});
		return this;
	},
	disabledAutoComplete:function(){
	/// <summary>禁止浏览器输入框的自动完成提示</summary>
	/// <returns type="JSoul" />
		this.each(function(i){
			if(JSoul.rex.text.test(this.type))
				JSoul.attrSet(this,"autocomplete","off");
		});
		return this;
	},
	isCheckOn:function(){
	/// <summary>检查当选或多选是否被选中</summary>
	/// <returns type="Boolean" />
		if(JSoul.isFormSub(this,JSoul.rex.boxies)){
			return JSoul.isCheckOn(this[0]);
		}
	},
	checkCount:function(){
	/// <summary>检查多選項目選中數目</summary>
	/// <returns type="Number" />
		if(JSoul.isFormSub(this,JSoul.rex.boxies)){
			return JSoul.checkCount(this[0]);
		}
	},
	selectCount:function(){
	/// <summary>检查下拉多选总数</summary>
	/// <returns type="Number" />
		if(JSoul.isFormSub(this,JSoul.rex.select)){
			return JSoul.selectCount(this[0]);
		}
	}
});
/*******************JSoul静态扩展方法 [表单方法]******************/
JSoul.extend({
	isFormSub:function(item,regx){
	/// <summary>检查是否为表单中的元素</summary>
	/// <param name="item" type="JSoul">对象</param>
	/// <param name="regx" type="RegExp">匹配type的正则表达式</param>
	/// <returns type="Boolean" />
		return item.length > 0 && item[0].form && (regx.test(item[0].type || item[0].tagName));
	},
	isCheckOn:function(item){
	/// <summary>检查当选或多选是否被选中</summary>
	/// <param name="item" type="Object">对象</param>
	/// <returns type="Boolean" />
		if(typeof(item.length) == "undefined"){
			return item.checked;
		}else{
			for(var i=0,j=item.length;i<j;i++){
				if(item[i].checked)
					return true;
			}
			return false;
		}
	},
	checkCount:function(item){
	/// <summary>檢查多選項目選中數目</summary>
	/// <param name="item" type="Object">对象</param>
	/// <returns type="Number" />
		var _count=0;
		if(typeof(item.length) != "undefined"){
			for(var i=0,j=item.length;i<j;i++){
				if(item[i].checked)
					_count++;
			}
		}
		return _count;
	},
	selectCount:function(item){
	/// <summary>检查下拉多选总数</summary>
	/// <param name="item" type="Object">对象</param>
	/// <returns type="Number" />
		var _count = 0;
		for(var i=0,j=item.options.length;i<j;i++){
			if(item.options[i].selected)
			   _count++ 
		}
		return _count;
	}
});
/*******************JSoul原型扩展方法 [DOM方法]******************/
JSoul.fn.extend({
	cleanEmptyNode:function(){
	/// <summary>删除空白节点</summary>
	/// <returns type="JSoul" />
		this.each(function(i){
			JSoul.cleanEmptyNode(this);
		});
		return this;
	},
	insertLast:function(node){
	/// <summary>插入一个节点到最后</summary>
	/// <param name="node" type="DocumentNode">节点</param>
	/// <returns type="JSoul" />
		this.each(function(i){
			JSoul.insertLast(this,node);
		});
		return this;
	},
	partnerShip:function(Args){
	/// <summary>分配对象组</summary>
	/// <param name="Args" type="Array">子对象关系表达式[[],[]]</param>
	/// <returns type="JSoul" />
		var Main = this;
		this.each(function(i){
			JSoul.partnerShip(this,Main,Args[i]);
		});
		return this;
	}
});
/*******************JSoul静态扩展方法 [DOM方法]******************/
JSoul.extend({
	cleanEmptyNode:function(elem) {
	/// <summary>删除空白节点</summary>
	/// <param name="elem" type="DocumentNode">对象</param>
	//遍历element的子结点
		for (var i = 0; i < elem.childNodes.length; i++) {
			var node = elem.childNodes[i];
			//判断是否是空白文本结点，如果是，则删除该结点
			if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) 
				node.parentNode.removeChild(node);
		}
	},
	$b:function(nodeName){
	/// <summary>建立一个节点</summary>
	/// <param name="nodeName" type="String">节点名称</param>
	/// <returns type="node" />
		return document.createElement(nodeName);
	},
	insertLast:function(elem,node){
	/// <summary>插入一个节点到最后</summary>
	/// <param name="elem" type="DocumentNode">对象</param>
	/// <param name="node" type="DocumentNode">节点</param>
		elem.appendChild(node);
	},
	partnerShip:function(elem, oJSoul, Arg){
	/// <summary>特效：滑行显示</summary>
	/// <param name="elem" type="Object">对象</param>
	/// <param name="oJSoul" type="JSoul">JSoul对象</param>
	/// <param name="Arg" type="Array">子对象关系表达式[]</param>
		oJSoul[Arg[0]] = JSoul.find(Arg[1],elem);
	},
	includeCss:function(cssFile,callback){
	/// <summary>动态加载一个CSS</summary>
	/// <param name="cssFile" type="String">CSS URL</param>
	/// <param name="callback" type="Function">回调方法</param>
	/// <returns type="node" />
		var exCss = JSoul.$b("link");
		JSoul.batchAttrSet(exCss, [["rel","stylesheet"],["type","text/css"],["href",cssFile]]);
		JSoul("head").insertLast(exCss);
		if(JSoul.browser.msie || JSoul.browser.opera){
			exCss.onload = function (){
				if(callback)callback();
			};/*
			exCss.onreadystatechange = function () {
				if (this.readyState == "complete") {
					alert('CSS onreadystatechange fired');
				}
			}*/
		}else{
			if(callback)callback();
		}
		return exCss;
	},
	includeJS:function(jsFile,callback){
	/// <summary>动态加载一个JS</summary>
	/// <param name="jsFile" type="String">JS URL</param>
	/// <param name="callback" type="Function">回调方法</param>
	/// <returns type="node" />
		var exJS = JSoul.$b("script");
		JSoul.batchAttrSet(exJS, [["type","text/javascript"],["src",jsFile]]);
		JSoul("head").insertLast(exJS);
		//for IE
		if(JSoul.browser.msie){
			exJS.onreadystatechange = function () {
				if (this.readyState == "loaded") {
					if(callback)callback();
				}
			}
		//for mozilla
		}else if(JSoul.browser.mozilla){
			exJS.onload = function () {
				if(callback)callback();
			}
		//for opera
		}else{
			if(callback)callback();
		}
		return exJS;
	}
});
})();
//]]>