//Ê×Ò³»ÃµÆ×¨ÓÃ
//////////////////////////////////////
	var BX={
		version: '1.0.10.A',
		encoding: 'utf-8',
		author: 'bigtreexu'
	};
	function $(el) {
		if(!el) {
			return null;
		} else if(typeof el=='string') {
			return document.getElementById(el);
		} else if(typeof el=='object') {
			return el;
		}
	}
	function $A(els) {
		var _els=[];
		if(els instanceof Array) {
			for(var i=0;i!=els.length;i++) {
				_els[_els.length]=$(els[i]);
			}
		} else if(typeof els=='object'&&typeof els['length']!='undefined'&&els['length']>0) {
			for(var i=0;i!=els.length;i++) {
				_els[_els.length]=$(els[i]);
			}
		} else {
			_els[0]=$(els);
		}
		return _els;
	}
	function Dictionary() {
		this.buffer=[];
	}
	Dictionary.prototype={
		get: function (key) {
			if(this.contain(key)) {
				return this.buffer[key];
			} else {
				return null;
			}
		},
		add: function (key,value) {
			if(!this.contain(key)) {
				this.buffer[key]=value;
			}
		},
		remove: function (key) {
			if(this.contain(key)) {
				this.buffer[key]=undefined;
			}
		},
		getKeys: function () {
			var r=[];
			for(var k in this.buffer) {
				r.push(k);
			}
			return r;
		},
		getValues: function () {
			var r=[];
			for(var k in this.buffer) {
				r.push(this.get(k));
			}
			return r;
		},
		contain: function (key) {
			return (typeof this.buffer[key]!='undefined');
		}
	}
	BX.Event={
		_cache: [],
		_batch: function (els,func) {
			try {
				els=$A(els);
				for(var i=0;i<els.length;i++) {
					func(els[i]);
				}
			} catch(e) {
			}
		},
		addListener: function (els,eventName,func,range) {
			var _run=function (el) {
				var _scope=el;
				var _fn=function (e) {
					var _ev=e||window.event;
					if(range) {
						func.apply(range,[_ev,_scope])
					} else {
						func(_ev,_scope);
					}
				};
				if(!BX.Event._cache[el]) {
					BX.Event._cache[el]=[];
				}
				if(BX.Event._cache[el][func]) {
				}
				BX.Event._cache[el][func]=_fn;
				if(el.attachEvent) {
					el.attachEvent('on'+eventName,_fn);
				} else if(el.addEventListener) {
					el.addEventListener(eventName,_fn,false);
				} else {
					el['on'+eventName]=_fn;
				}
			};
			this._batch(els,_run);
		},
		removeListener: function (els,eventName,func) {
			var _run=function (el) {
				if(el.detachEvent) {
					el.detachEvent('on'+eventName,BX.Event._cache[el][func]);
				} else if(el.removeEventListener) {
					el.removeEventListener(eventName,BX.Event._cache[el][func],false);
				} else {
					el['on'+eventName]=null;
				}
				BX.Event._cache[el][func]=null;
			}
			this._batch(els,_run);
		}
	}
	BX.Dom={
		_batch: function (el,func) {
			var _el=$A(el);
			for(var i=0;i!=_el.length;i++) {
				if(_el[i]) {
					func(_el[i]);
				}
			}
		},
		getMouseXY: function (e) {
			var _x=_y=0;
			_x=document.documentElement.scrollLeft;
			_y=document.documentElement.scrollTop;
			if(e.clientX||e.clientY) {
				_x+=e.clientX;
				_y+=e.clientY;
			} else if(e.pageX||e.pageY) {
				_x+=e.pageX;
				_y+=e.pageY;
			}
			return [_x,_y];
		},
		getXY: function (el) {
			var _x=_y=0;
			while(el) {
				_x+=el.offsetLeft;
				_y+=el.offsetTop;
				el=el.parentElement;
			}
			return [_x,_y];
		},
		getWH: function (el) {
			return [el.offsetWidth,el.offsetHeight];
		},
		setOpacity: function (els,val) {
			var _run=function (el) {
				el.style.MozOpacity=''+val/100;
				el.style.filter='Alpha(Opacity='+val+')';
			}
			this._batch(els,_run);
		},
		hide: function (els) {
			var _run=function (el) {
				el.style.display='none';
			}
			this._batch(els,_run);
		},
		show: function (els) {
			var _run=function (el) {
				el.style.display='block';
			}
			this._batch(els,_run);
		},
		getClass: function (el) {
			if($(el)) {
				return $(el).className;
			} else {
				return;
			}
		},
		setClass: function (els,val) {
			var _run=function (el) {
				el.className=val;
			}
			this._batch(els,_run);
		},
		addClass: function (els,val) {
			if(!val) {
				return;
			}
			var _run=function (el) {
				var _cln=el.className.split(' ');
				for(var i=0;i!=_cln.length;i++) {
					if(_cln[i]==val) {
						return;
					}
				}
				if(el.className.length>0) {
					el.className=el.className+' '+val;
				} else {
					el.className=val;
				}
			}
			this._batch(els,_run);
		},
		hasClass: function (el,val) {
			var _bl=false;
			if($(el)) {
				if(!el.className) {
					return;
				}
				var _cln=el.className.split(' ');
				for(var i=0;i!=_cln.length;i++) {
					if(_cln[i]==val) {
						_bl=true;
						break;
					}
				}
			}
			return _bl;
		},
		removeClass: function (els,val) {
			if(!val) {
				return;
			}
			var _run=function (el) {
				var _cln=el.className.split(' ');
				var _s='';
				for(var i=0;i!=_cln.length;i++) {
					if(_cln[i]!=val) {
						_s+=_cln[i]+' ';
					}
				}
				if(_s==' ') {
					_s='';
				}
				if(_s.length!=0) {
					_s=_s.substr(0,_s.length-1);
				}
				el.className=_s;
			}
			this._batch(els,_run);
		},
		replaceClass: function (els,vala,valb) {
			if(!vala||!valb) {
				return;
			}
			var _run=function (el) {
				var _cln=el.className.split(' ');
				for(var i=0;i!=_cln.length;i++) {
					if(_cln[i]==vala) {
						_cln[i]=valb;
					}
				}
				el.className=_cln.join(' ');
			}
			this._batch(els,_run);
		},
		setStyle: function (els,styleName,styleValue) {
			var _run=function (el) {
				el.style[styleName]=styleValue;
			}
			this._batch(els,_run);
		},
		getStyle: function (el,styleName) {
			return el.style[styleName];
		},
		getElementsByClassName: function (parentEl,className,tagName) {
			if(!parentEl||!className) {
				return null;
			}
			var els=cds=[];
			cds=$(parentEl).childNodes;
			className=className.toUpperCase();
			for(var i=0;i<cds.length;i++) {
				var _type=cds[i].nodeType;
				if(_type!=3&&_type!=8&&cds[i].className.toUpperCase()==className) {
					if(!tagName||cds[i].nodeName.toUpperCase()==tagName.toUpperCase()) {
						els[els.length]=cds[i];
					}
				}
			}
			return els;
		}
	}
	BX.Cookie={
		getExpDate: function (days,hours,minutes) {
			var expDate=new Date();
			if(typeof days=="number"&&typeof hours=="number"&&typeof hours=="number") {
				expDate.setDate(expDate.getDate()+parseInt(days));
				expDate.setHours(expDate.getHours()+parseInt(hours));
				expDate.setMinutes(expDate.getMinutes()+parseInt(minutes));
				return expDate.toGMTString();
			}
		},
		getCookieVal: function (offset) {
			var endstr=document.cookie.indexOf(";",offset);
			if(endstr== -1) {
				endstr=document.cookie.length;
			}
			return unescape(document.cookie.substring(offset,endstr));
		},
		getCookie: function (name) {
			var arg=name+"=";
			var alen=arg.length;
			var clen=document.cookie.length;
			var i=0;
			while(i<clen) {
				var j=i+alen;
				if(document.cookie.substring(i,j)==arg) {
					return this.getCookieVal(j);
				}
				i=document.cookie.indexOf(" ",i)+1;
				if(i==0) break;
			}
			return "";
		},
		getCookies: function () {
			_Cookie=new Array();
			if(document.cookie.indexOf(";")!= -1) {
				var _sp,_name,_tp,_tars,_tarslength;
				var _item=document.cookie.split("; ");
				var _itemlength=_item.length;
				for(i=0;i<_itemlength;i++) {
					_sp=_item[i].split("=");
					_name=_sp[0];
					_value=_sp[1];
					_coo=new Array();
					_coo['name']=_name;
					_coo['value']=_value;
					_Cookie.push(_coo);
				}
			}
			return _Cookie;
		},
		setCookie: function (name,value,expires,path,domain,secure) {
			document.cookie=name+"="+escape(value)+((expires)?"; expires="+expires:"")+((path)?"; path="+path:"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");
		},
		deleteCookie: function (name,path,domain) {
			if(this.getCookie(name)) {
				document.cookie=name+"="+((path)?"; path="+path:"")+((domain)?"; domain="+domain:"")+"; expires=Thu, 01-Jan-70 00:00:01 GMT";
			}
		},
		clearCookie: function () {
			cookies=this.getCookies();
			for(i=0;i<cookies.length;i++) {
				this.deleteCookie(cookies[i]['name']);
			}
		},
		getCookieString: function () {
			return document.cookie;
		}
	}
	var O=BX.Dom;
	var V=BX.Event;
	var C=BX.Cookie;
	function Collection() {
		this.items=[];
	}
	Collection.prototype={
		add: function (col) {
			this.items.push(col);
		},
		clear: function () {
			this.items=[];
		},
		getCount: function () {
			return this.items.length;
		},
		each: function (func) {
			for(var i=0;i<this.getCount();i++) {
				func(this.items[i]);
			}
		},
		indexOf: function (item) {
			var r= -1;
			for(i=0;i<this.getCount();i++) {
				if(item==this.items[i]) {
					r=i;
					break;
				}
			}
			return r;
		},
		find: function (func) {
			var r=null;
			for(var i=0;i<this.getCount();i++) {
				if(func(this.items[i])==true) {
					r=this.items[i];
					break;
				}
			}
			return r;
		},
		findAll: function (func) {
			var r=new Collection();
			this.each(function (item) {
				if(func(item)==true) {
					r.add(item);
				}
			});
			return r;
		}
	}
	function TabPage(triggerId,sheetId) {
		this.trigger=$(triggerId);
		this.sheet=$(sheetId);
	}
	function TabControl() {
		this.styleName=null;
		this.tabPages=new Collection();
		this.currentTabPage=null;
		this.triggerType='click';
		this.defaultPage=0;
		this.enableSlide=false;
		this.slideInterval=3000;
		this.onChanging=new Collection();
		this.onChanging.add(this.defaultChangingHandler);
		this.onInit=new Collection();
		this.onInit.add(this.defaultInitHandler);
		this.onInit.add(this.autoSlideInitHandler);
		this.onAdding=new Collection();
		this.onAdding.add(this.defaultAddingHandler);
		this._autoSlideEv=null;
		this._preButton=null;
		this._nextButton=null;
	}
	TabControl.prototype={
		add: function (tabPage) {
			this.tabPages.add(tabPage);
			var handler=function (func) {
				func(tabPage);
			};
			this.onAdding.each(handler);
		},
		addRange: function (triggers,sheets) {
			if(triggers.length==0||triggers.length!=sheets.length) {
				return;
			}
			for(var i=0;i<triggers.length;i++) {
				var tabPage=new TabPage(triggers[i],sheets[i]);
				this.add(tabPage);
			}
		},
		preButton: function (id) {
			this._preButton=$(id);
		},
		nextButton: function (id) {
			this._nextButton=$(id);
		},
		pre: function (id) {
			this.select(this.currentTabPage-1);
		},
		next: function (id) {
			this.select(this.currentTabPage+1);
		},
		defaultAddingHandler: function (tabPage) {
		},
		init: function () {
			var _=this;
			var handler=function (func) {
				func(_);
			}
			if(this.tabPages.getCount()==0) {
				return;
			}
			if(this.currentTabPage==null) {
				this.currentTabPage=this.tabPages.items[this.defaultPage];
			}
			this.onInit.each(handler);
			if(this._preButton) this._preButton.onclick=this.pre;
			if(this._nextButton) this._nextButton.onclick=this.next;
		},
		defaultInitHandler: function (obj) {
			var handler=function (item) {
				V.addListener(item.trigger,obj.triggerType,obj.selectHanlder,obj);
				O.hide(item.sheet);
			};
			obj.tabPages.each(handler);
			obj.select(obj.defaultPage);
		},
		autoSlideInitHandler: function (o) {
			if(!o.enableSlide) {
				return;
			}
			var delayStartEv=null;
			var delayStartHandler=function () {
				delayStartEv=setTimeout(function () {
					o.autoSlideHandler(o);
				},300);
			};
			var clearHandler=function () {
				clearTimeout(delayStartEv);
				clearInterval(o._autoSlideEv);
			};
			var handler=function (item) {
				V.addListener(item.trigger,o.triggerType,clearHandler,o);
				V.addListener(item.sheet,'mouseover',clearHandler,o);
				V.addListener([item.trigger,item.sheet],'mouseout',delayStartHandler,o);
			};
			o.tabPages.each(handler);
			o.autoSlideHandler(o);
		},
		autoSlideHandler: function (o) {
			var count=o.tabPages.getCount();
			clearInterval(o._autoSlideEv);
			o._autoSlideEv=setInterval(function () {
				var i=o.indexOf(o.currentTabPage.trigger);
				if(i== -1) {
					return;
				}
				i++;
				if(i>=count) {
					i=0;
				}
				o.select(i);
			},o.slideInterval);
		},
		selectHanlder: function (e,o) {
			var i=this.indexOf(o);
			this.select(i);
		},
		select: function (i) {
			if(i<0||i>=this.tabPages.getCount()) {
				return;
			}
			var _=this;
			var page=this.tabPages.items[i];
			var handler=function (func) {
				func(_.currentTabPage,page);
			};
			this.onChanging.each(handler);
			this.currentTabPage=page;
		},
		defaultChangingHandler: function (oldTabPage,newTabPage) {
			if(oldTabPage.sheet) {
				O.hide(oldTabPage.sheet);
			}
			if(newTabPage.sheet) {
				O.show(newTabPage.sheet);
			}
			O.removeClass(oldTabPage.trigger,'current');
			O.addClass(newTabPage.trigger,'current');
		},
		indexOf: function (trigger) {
			var r= -1;
			var handler=function (item) {
				return item.trigger==trigger;
			};
			var item=this.tabPages.find(handler);
			if(item!=null) {
				r=this.tabPages.indexOf(item);
			}
			return r;
		}
	}
