﻿if(typeof E9=='undefined')E9={}; //new object   面向对象的javascript基础库

E9.userAgent=(function () {         //检查浏览器
	var vie,vff,vopera,vsf,vapple,wintype,mactype,vair,vchrome;
	var discerned=false;
	var agent=(/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel|Minefield).(\d+\.\d+))|(?:Opera.(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))/).exec(navigator.userAgent);
	var os=(/(Windows.*?;)|(MacOSX.*?;)/).exec(navigator.userAgent);
	if(agent) {
		vie=agent[1]?parseFloat(agent[1]):NaN;
		vff=agent[2]?parseFloat(agent[2]):NaN;
		vopera=agent[3]?parseFloat(agent[3]):NaN;
		vsf=agent[4]?parseFloat(agent[4]):NaN;
		if(!isNaN(vsf)) {
			var _ua=navigator.userAgent;
			if(/AdobeAIR/.test(_ua)) {
				vair=1;
			}else if(/Chrome/.test(_ua)) {
				vchrome=1;
			}else {
				vapple=parseFloat((/Version\/(\d+(?:\.\d+)?)/).exec(_ua)[1]);
			}
		}
	}else {
		vie=vff=vopera=vsf=vapple=vair=NaN;
	}
	if(os) {
		wintype=!!os[1];
		mactype=!!os[2];
	}else {
		wintype=mactype=false;
	}
	function adjustBehaviors() {
		if(ua.ie<7) {
			try{
				document.execCommand('BackgroundImageCache',false,true);
			}catch(ignored) {
			}
		}
		adjusted=true;
	}
	return {
		firefox:vff,ie:window.XDomainRequest?8:vie,opera:vopera,air:vair,safari:vsf,safariV:vapple,windows:wintype,macs:mactype,chrome:vchrome,adjustBehaviors:adjustBehaviors
	};
})();
var ua=E9.userAgent;
E9.lang={       //判断对象
	isString:function (o) {
		return (typeof(o)!='undefined')&&(o!==null)&&(typeof(o)=='string'||!!o.toString );
	},isArray:function (o) {
		return (typeof(o)=='object'&&(oinstanceofArray));
	},isHashMap:function (o) {
		return ((o!==null)&&(typeof(o)=='object'));
	},isNode:function (o) {
		if(typeof(Node)=='undefined') {
			Node=null;
		}
		try{
			if(!o||!((Node!=undefined&&oinstanceofNode)||o.nodeName)) {
				return false;
			}
		}catch(ignored) {
			return false;
		}
		return true;
	},isElement:function (o) {
		return o&&o.nodeType==1;
	},isValidXMLdom:function (o) {
		if(!o) {
			return false;
		}
		if(!o.xml) {
			return false;
		}
		if(o.xml=="") {
			return false;
		}
		if(!(/^<\?xml/.test(o.xml))) {
			return false;
		}
		return true;
	},arg2arr:function (refArgs,start) {
		if(typeofstart=='undefined') {
			start=0;
		}
		return Array.prototype.slice.apply(refArgs,[start,refArgs.length]);
	},getObjByNameSpace:function (ns) {
		if(typeof(ns)=='undefined')
		return ns;
		var l=ns.split(".");
		var r=window;
		try{
			for(var i=0,len=l.length;i<len;++i) {
				r=r[l[i]];
				if(typeof(r)=='undefined')
				return void(0);
			}
			return r;
		}catch(ignore) {
			return void(0);
		}
	},objectClone:function (obj,preventName) {
		if((typeofobj)=='object') {
			var res=(E9.lang.isArray(obj)||!!obj.sort)?[]:{
			};
			for(var i in obj) {
				if(i!=preventName)
				res[i]=objectClone(obj[i],preventName);
			}
			return res;
		}else if((typeofobj)=='function') {
			return (new obj()).constructor ;
		}
		return obj;
	},propertieCopy:function (s,b,propertiSet) {
		if(typeofpropertiSet=='undefined') {
			for(var p in b) {
				s[p]=b[p];
			}
		}else {
			for(var p in propertiSet) {
				s[p]=b[p];
			}
		}
		return s;
	},tryThese:function () {
		var res;
		for(var ii=0,len=arguments.length;ii<len;ii++) {
			try{
				res=arguments[ii]();
				return res;
			}catch(ignore) {
			}
		}
		return res;
	},chain:function (u,v) {
		var calls=[];
		for(var ii=0,len=arguments.length;ii<len;ii++) {
			calls.push(arguments[ii]);
		}
		return (function () {
			for(var ii=0,len=calls.length;ii<len;ii++) {
				if(calls[ii]&&calls[ii].apply(null,arguments)===false) {
					return false;
				}
			}
			return true;
		});
	},uniqueArray:function (arr) {
		var flag={
		};
		var index=0;
		while(index<arr.length) {
			if(flag[arr[index]]==typeof(arr[index])) {
				arr.splice(index,1);
				continue;
			}
			flag[arr[index].toString ()]=typeof(arr[index]);
			++index;
		}
		return arr;
	}
};
E9.config={
	defaultDataCharacterSet:"UTF-8",
	DCCookieDomain:"localhost",
	domainPrefix:"localhost",
	gbEncoderPath:"",
	FSHelperPage:"",
	defaultShareObject:""
};
E9.event={      // 事件
	KEYS:{
		BACKSPACE:8,TAB:9,RETURN:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46
	},
	extendType:/(click|mousedown|mouseover|mouseout|mouseup|mousemove|scroll|contextmenu|resize)/i,
	addEvent:function (obj,eventType,fn,argArray) {
		var cfn=fn;
		var res=false;
		if(!obj) {
			return res;
		}
		if(!obj.eventsList) {
			obj.eventsList={
			};
		}
		if(!obj.eventsList[eventType]) {
			obj.eventsList[eventType]={
			};
		}
		if(E9.event.extendType.test(eventType)) {
			argArray=argArray||[];
			cfn=function (e) {
				return fn.apply(null,([E9.event.getEvent(e)]).concat(argArray));
			};
		}
		if(obj.addEventListener) {
			obj.addEventListener(eventType,cfn,false);
			res=true;
		}else if(obj.attachEvent) {
			res=obj.attachEvent("on"+eventType,cfn);
		}else {
			res=false;
		}
		if(res) {
			obj.eventsList[eventType][fn.toString ()]=cfn;
		}
		return res;
	},removeEvent:function (obj,eventType,fn) {
		var cfn=fn;
		var res=false;
		if(!obj) {
			return res;
		}
		if(!obj.eventsList) {
			obj.eventsList={
			};
		}
		if(!obj.eventsList[eventType]) {
			obj.eventsList[eventType]={
			};
		}
		if(!cfn) {
			res=E9.event.purgeEvent(obj,eventType);
			return res;
		}
		if(E9.event.extendType.test(eventType)&&obj.eventsList[eventType]&&obj.eventsList[eventType][fn.toString ()]) {
			cfn=obj.eventsList[eventType][fn.toString ()];
		}
		if(obj.removeEventListener) {
			obj.removeEventListener(eventType,cfn,false);
			res=true;
		}else if(obj.detachEvent) {
			res=obj.detachEvent("on"+eventType,cfn);
		}else {
			alert("Error.");
		}
		if(res&&obj.eventsList[eventType]) {
			delete obj.eventsList[eventType][fn.toString ()];
		}
		return res;
	},purgeEvent:function (obj,type) {
		if(obj.eventsList&&obj.eventsList[type]) {
			for(var i in obj.eventsList[type]) {
				if(obj.removeEventListener) {
					obj.removeEventListener(type,obj.eventsList[type][i],false);
				}else if(obj.detachEvent) {
					obj.detachEvent('on'+type,obj.eventsList[type][i]);
				}
			}
		}
		if(obj['on'+type]) {
			obj['on'+type]=null;
		}
	},getEvent:function (evt) {
		evt=evt||window.event;
		if(!evt&&!E9.userAgent.ie) {
			var c=this.getEvent.caller;
			while(c) {
				evt=c.arguments[0];
				if(evt&&Event==evt.constructor ) {
					break;
				}
				c=c.caller;
			}
		}
		return evt;
	},getButton:function (evt) {
		var e=E9.event.getEvent(evt);
		if(!e) {
			return -1
		}
		if(E9.userAgent.ie) {
			return e.button-Math.ceil(e.button/2);
		}else {
			return e.button;
		}
	},getTarget:function (evt) {
		var e=E9.event.getEvent(evt);
		if(e) {
			return e.target||e.srcElement;
		}else {
			return null;
		}
	},getCurrentTarget:function (evt) {
		var e=E9.event.getEvent(evt);
		if(e) {
			return e.currentTarget||document.activeElement;
		}else {
			return null;
		}
	},cancelBubble:function (evt) {
		evt=E9.event.getEvent();
		if(!evt) {
			return false
		}
		if(evt.stopPropagation) {
			evt.stopPropagation();
		}else {
			if(!evt.cancelBubble) {
				evt.cancelBubble=true;
			}
		}
	},preventDefault:function (evt) {
		evt=E9.event.getEvent();
		if(!evt) {
			return false
		}
		if(evt.preventDefault) {
			evt.preventDefault();
		}else {
			evt.returnValue=false;
		}
	},mouseX:function (evt) {
		evt=E9.event.getEvent();
		return evt.pageX||(evt.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
	},mouseY:function (evt) {
		evt=E9.event.getEvent();
		return evt.pageY||(evt.clientY+(document.documentElement.scrollTop||document.body.scrollTop));
	},getRelatedTarget:function (ev) {
		var t=ev.relatedTarget;
		if(!t) {
			if(ev.type=="mouseout") {
				t=ev.toElement;
			}else if(ev.type=="mouseover") {
				t=ev.fromElement;
			}
		}
		return t;
	},bind:function (obj,method) {
		var args=Array.prototype.slice.call(arguments,2);
		return function () {
			var _obj=obj||this;
			var _args=args.concat(Array.prototype.slice.call(arguments,0));
			if(typeof(method)=="string") {
				if(_obj[method]) {
					return _obj[method].apply(_obj,_args);
				}
			}else {
				return method.apply(_obj,_args);
			}
		}
	}
};
E9.event.on=E9.event.addEvent;
window.addEvent=E9.event.addEvent;
window.removeEvent=E9.event.removeEvent;
window.getEvent=E9.event.getEvent;
E9.emptyFn=function(){};

E9.dom={            //DOM对象处理
	getById:function (id) {
		return document.getElementById(id);
	},getByName:function (name,tagName) {
		if(!tagName)
		return document.getElementsByName(name);
		var arr=[];
		var e=document.getElementsByTagName(tagName);
		for(var i=0;i<e.length;++i) {
			if(!!e[i].getAttribute("name")&&(e[i].getAttribute("name").toLowerCase()==name.toLowerCase())) {
				arr.push(e[i]);
			}
		}
		return arr;
	},get:function (e) {
		if(e&&(e.tagName||e.item)) {
			return e;
		}
		return this.getById(e);
	},removeElement:function (el) {
		if(!el) {
			return ;
		}
		if(el.removeNode) {
			el.removeNode(true);
		}else {
			if(el.childNodes.length>0) {
				for(var ii=el.childNodes.length-1;ii>=0;ii--) {
					E9.dom.removeElement(el.childNodes[ii]);
				}
			}
			if(el.parentNode) {
				el.parentNode.removeChild(el);
			}
		}
		el=null;
		return null;
	},searchElementByClassName:function (el,className) {
		el=this.get(el);
		if(!el) {
			return null
		}
		var re=E9.css.getClassRegEx(className);
		while(el) {
			if(re.test(el.className)) {
				return el;
			}
			el=el.parentNode;
		}
		return null;
	},getElementsByClassName:function (className,tag,root) {
		tag=tag||'*';
		root=(root)?this.get(root):null||document;
		if(!root) {
			return [];
		}
		var nodes=[],elements=root.getElementsByTagName(tag),re=E9.css.getClassRegEx(className);
		for(var i=0,len=elements.length;i<len;++i) {
			if(re.test(elements[i].className)) {
				nodes[nodes.length]=elements[i];
			}
		}
		return nodes;
	},isAncestor:function (node1,node2) {
		if(!node1||!node2) {
			return false;
		}
		if(node1.contains&&node2.nodeType&&!E9.userAgent.Safari) {
			return node1.contains(node2)&&node1!=node2;
		}
		if(node1.compareDocumentPosition&&node2.nodeType) {
			return !!(node1.compareDocumentPosition(node2)&16);
		}else if(node2.nodeType) {
			return !!this.getAncestorBy(node2,function (el) {
				return el==node1;
			});
		}
		return false;
	},getAncestorBy:function (node,method) {
		while(node=node.parentNode) {
			if(node&&node.nodeType==1&&(!method||method(node))) {
				return node;
			}
		}
		return null;
	},getFirstChild:function (node) {
		node=this.get(node);
		if(!node) {
			return null;
		}
		var child=E9.lang.isElement(node)?node.firstChild:null;
		return child||this.getNextSibling(node.firstChild);
	},getNextSibling:function (node) {
		node=this.get(node);
		if(!node) {
			return null;
		}
		while(node) {
			node=node.nextSibling;
			if(E9.lang.isElement(node)) {
				return node;
			}
		}
		return null;
	},createElementIn:function (tagName,el,insertFirst,attributes) {
		tagName=tagName||"div";
		el=this.get(el)||document.body;
		var _doc=el.ownerDocument;
		var _e=_doc.createElement(tagName);
		if(attributes) {
			for(var k in attributes) {
				if(/class/.test(k)) {
					_e.className=attributes[k];
				}else if(/style/.test(k)) {
					_e.style.cssText=attributes[k];
				}else {
					_e[k]=attributes[k];
				}
			}
		}
		if(insertFirst) {
			el.insertBefore(_e,el.firstChild);
		}else {
			el.appendChild(_e);
		}
		return _e;
	},getStyle:function (el,property) {
		el=this.get(el);
		var w3cMode=document.defaultView&&document.defaultView.getComputedStyle;
		var computed=!w3cMode?null:document.defaultView.getComputedStyle(el,'');
		var value="";
		switch(property) {
			case "float":property=w3cMode?"cssFloat":"styleFloat";
			break;
			case "opacity":if(!w3cMode) {
				var val=100;
				try{
					val=el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
				}catch(e) {
					try{
						val=el.filters('alpha').opacity;
					}catch(e) {
					}
				}
				return val/100;
			}
			break;
			case "backgroundPositionX":if(w3cMode) {
				property="backgroundPosition";
				return ((computed||el.style)[property]).split(" ")[0];
			}
			break;
			case "backgroundPositionY":if(w3cMode) {
				property="backgroundPosition";
				return ((computed||el.style)[property]).split(" ")[1];
			}
			break;
		}
		if(w3cMode) {
			return (computed||el.style)[property];
		}else {
			return (el.currentStyle[property]||el.style[property]);
		}
	},setStyle:function (el,property,value) {
		el=this.get(el);
		if(!el) {
			return false;
		}
		var w3cMode=document.defaultView&&document.defaultView.getComputedStyle;
		switch(property) {
			case "float":property=w3cMode?"cssFloat":"styleFloat";
			case "opacity":if(!w3cMode) {
				if(value>=1) {
					el.style.filter="";
					return ;
				}
				el.style.filter='alpha(opacity='+(value*100)+')';
				return true;
			}else {
				el.style[property]=value;
				return true;
			}
			break;
			case "backgroundPositionX":if(w3cMode) {
				var _y=E9.dom.getStyle(el,"backgroundPositionY");
				el.style["backgroundPosition"]=value+" "+(_y||"top");
			}else {
				el.style[property]=value;
			}
			break;
			case "backgroundPositionY":if(w3cMode) {
				var _x=E9.dom.getStyle(el,"backgroundPositionX");
				el.style["backgroundPosition"]=(_x||"left")+" "+value;
			}else {
				el.style[property]=value;
			}
			break;
			default:if(typeof el.style[property]=="undefined") {
				return false
			}
			el.style[property]=value;
			return true;
		}
	},createNamedElement:function (type,name,doc) {
		doc=doc||document;
		var element;
		try{
			element=doc.createElement('<'+type+' name="'+name+'">');
		}catch(ignore) {
		}
		if(!element||!element.name) {
			element=doc.createElement(type);
			element.name=name;
		}
		return element;
	},getPosition:function (el) {
		var xy=E9.dom.getXY(el);
		var size=E9.dom.getSize(el);
		return {
			"top":xy[1],"left":xy[0],"width":size[0],"height":size[1]
		};
	},setPosition:function (el,pos) {
		E9.dom.setXY(el,pos['left'],pos['top']);
		E9.dom.setSize(el,pos['width'],pos['height']);
	},getXY:function (el) {
		var _t=0;
		var _l=0;
		if(document.documentElement.getBoundingClientRect) {
			var box=el.getBoundingClientRect();
			var oDoc=el.ownerDocument;
			_t=box.top-2+this.getScrollTop(oDoc);
			_l=box.left-2+this.getScrollLeft(oDoc);
		}else {
			while(el.offsetParent) {
				_t+=el.offsetTop;
				_l+=el.offsetLeft;
				el=el.offsetParent;
			}
		}
		return [_l,_t];
	},getSize:function (el) {
		var _w=el.offsetWidth;
		var _h=el.offsetHeight;
		return [_w,_h];
	},setXY:function (el,x,y) {
		el=this.get(el);
		var _ml=parseInt(this.getStyle(el,"marginLeft"))||0;
		var _mt=parseInt(this.getStyle(el,"marginTop"))||0;
		this.setStyle(el,"left",parseInt(x)-_ml+"px");
		this.setStyle(el,"top",parseInt(y)-_mt+"px");
	},getScrollLeft:function (doc) {
		doc=doc||document;
		return Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft);
	},getScrollTop:function (doc) {
		doc=doc||document;
		return Math.max(doc.documentElement.scrollTop,doc.body.scrollTop);
	},getScrollHeight:function (doc) {
		doc=doc||document;
		return Math.max(doc.documentElement.scrollHeight,doc.body.scrollHeight);
	},getScrollWidth:function (doc) {
		doc=doc||document;
		return Math.max(doc.documentElement.scrollWidth,doc.body.scrollWidth);
	},setScrollLeft:function (value,doc) {
		doc=doc||document;
		doc[doc.compatMode=="CSS1Compat"&&!E9.userAgent.safari?"documentElement":"body"].scrollLeft=value;
	},setScrollTop:function (value,doc) {
		doc=doc||document;
		doc[doc.compatMode=="CSS1Compat"&&!E9.userAgent.safari?"documentElement":"body"].scrollTop=value;
	},getClientHeight:function (doc) {
		doc=doc||document;
		var height=doc.innerHeight;
		var mode=doc.compatMode;
		if((mode||ua.ie)&&!ua.opera) {
			height=(mode=='CSS1Compat')?doc.documentElement.clientHeight:doc.body.clientHeight;
		}
		return height;
	},getClientWidth:function (doc) {
		doc=doc||document;
		var width=doc.innerWidth;
		var mode=doc.compatMode;
		if(mode||ua.ie) {
			width=(mode=='CSS1Compat')?doc.documentElement.clientWidth:doc.body.clientWidth;
		}
		return width;
	},setSize:function (el,width,height) {
		el=this.get(el);
		var _wFix=/\d+([a-z%]+)/i.exec(width);
		_wFix=_wFix?_wFix[1]:"";
		var _hFix=/\d+([a-z%]+)/i.exec(height);
		_hFix=_hFix?_hFix[1]:"";
		this.setStyle(el,"width",(!width||width<0||/auto/i.test(width))?"auto":(parseInt(width)+(_wFix||"px")));
		this.setStyle(el,"height",(!height||height<0||/auto/i.test(height))?"auto":(parseInt(height)+(_hFix||"px")));
	},getDocumentWindow:function (doc) {
		_doc=doc||document;
		return _doc.parentWindow||_doc.defaultView;
	},getElementsByTagNameNS:function (node,ns,tgn) {
		var res=[];
		if(node) {
			if(node.getElementsByTagNameNS) {
				return node.getElementsByTagName(ns+":"+tgn);
			}else if(node.getElementsByTagName) {
				var n=document.namespaces;
				if(n.length>0) {
					var l=node.getElementsByTagName(tgn);
					for(var i=0,len=l.length;i<len;++i) {
						if(l[i].scopeName==ns) {
							res.push(l[i]);
						}
					}
				}
			}
		}
		return res;
	}
};
E9.cookie={     //cookie处理
	set:function (name,value,domain,path,hour) {
		if(hour) {
			var today=new Date();
			var expire=new Date();
			expire.setTime(today.getTime()+3600000*hour);
		}
		document.cookie=name+"="+value+"; "+(hour?("expires="+expire.toGMTString()+"; "):"")+(path?("path="+path+"; "):"path=/; ")+(domain?("domain="+domain+";"):("domain="+E9.config.domainPrefix+";"));
		return true;
	},get:function (name) {
		var r=new RegExp("(?:^|;+|\\s+)"+name+"=([^;]*)");
		var m=document.cookie.match(r);
		return (!m?"":m[1]);
	},del:function (name,domain,path) {
		document.cookie=name+"=; expires=Mon, 26 Jul 1997 05:00:00 GMT; "+(path?("path="+path+"; "):"path=/; ")+(domain?("domain="+domain+";"):("domain="+E9.config.domainPrefix+";"));
	}
};
E9.JsLoader=function () {       //加载JS
	this.loaded=false;
	this.debug=true;
	this.onload=E9.emptyFn;
	this.onerror=E9.emptyFn;
}
E9.JsLoader.scriptId=1;
E9.JsLoader.prototype.load=function (src,doc,charset) {
	var sId=E9.JsLoader.scriptId;
	E9.JsLoader.scriptId++;
	var o=this;
	setTimeout(function () {
		o._load2.apply(o,[sId,src,doc,charset]);
		o=null;
	},0);
}
E9.JsLoader.prototype._load2=function (sId,src,doc,charset) {
	_doc=doc||document;
	charset=charset||"gb2312";
	var _ie=E9.userAgent.ie;
	var _js=_doc.createElement("script");
	E9.event.addEvent(_js,(_ie?"readystatechange":"load"),(function (o) {
		if(_ie) {
			return (function () {
				if(/(complete|loaded)/.test(_js.readyState)) {
					o.onload();
					if(!o.debug) {
						E9.dom.removeElement(_js);
					}
					_js=null;
				}
			});
		}else {
			return (function () {
				o.onload();
				if(!o.debug) {
					E9.dom.removeElement(_js);
				}
				_js=null;
			});
		}
	})(this));
	if(!_ie) {
		E9.event.addEvent(_js,(_ie?"readystatechange":"load"),(function (o) {
			return (function () {
				o.onerror();
				if(!o.debug) {
					E9.dom.removeElement(_js);
				}
				_js=null;
			});
		})(this));
	}
	_js.id="js_"+sId;
	_js.defer=true;
	_js.charset=charset;
	_js.src=src;
	_doc.getElementsByTagName("head")[0].appendChild(_js);
}
E9.enviroment=(function () {        //模型化处理
	var _p={
	};
	var hookPool={
	};
	function envGet(kname) {
		return _p[kname];
	}
	function envDel(kname) {
		delete _p[kname];
		return true;
	}
	function envSet(kname,value) {
		if(typeof value=='undefined') {
			if(typeof kname=='undefined') {
				return false;
			}else if(!(_p[kname]===undefined)) {
				//E9.runTime.warn("Do you want to set env var {0:q} to 'undefined'",kname);
				return false;
			}
		}else {
			_p[kname]=value;
			return true;
		}
	}
	return {
		get:envGet,set:envSet,del:envDel,hookPool:hookPool
	};
})();
var ENV=E9.enviroment;

E9.dragdrop={       //拖动
	dragdropPool:{},
	dragTempId:0,
	_scrollRange:0,
	dragGhostStyle:"cursor:move;position:absolute;border:1px solid #06c;background:#6cf;z-index:1000;color:#003",
	registerDragdropHandler:function (handler,target,options) {
		var _e=E9.event;
		var _hDom=E9.dom.get(handler);
		var _tDom=E9.dom.get(target);
		options=options||{
			range:[null,null,null,null],ghost:0
		};
		if(!_hDom) {
			return null
		}
		var targetObject=_tDom||_hDom;
		if(!_hDom.id) {
			_hDom.id="dragdrop_"+this.dragTempId;
			E9.dragdrop.dragTempId++;
		}
		_hDom.style.cursor=options.cursor||"move";
		this.dragdropPool[_hDom.id]=new this.eventController();
		_e.on(_hDom,"mousedown",_e.bind(this,this.startDrag),[_hDom.id,targetObject,options]);
		return this.dragdropPool[_hDom.id];
	},unRegisterDragdropHandler:function (handler) {
		var _hDom=E9.dom.get(handler);
		var _e=E9.event;
		if(!_hDom) {
			return null
		}
		_hDom.style.cursor="default";
		delete this.dragdropPool[_hDom.id];
		_e.removeEvent(_hDom,"mousedown");
	},startDrag:function (e,handlerId,target,options) {
		var _d=E9.dom;
		var _e=E9.event;
		if(_e.getButton()!=0||_e.getTarget().noDrag) {
			return ;
		}
		if(options.ignoreTagName==_e.getTarget().tagName||_e.getTarget().noDragdrop) {
			return ;
		}
		var size=_d.getSize(target);
		var stylePosition=_d.getStyle(target,"position");
		var isAbsolute=stylePosition=="absolute"||stylePosition=="fixed";
		var ghost=null,hasGhost=false;
		var xy=null;
		if(options.rangeElement) {
			var _re=options.rangeElement;
			var _el=E9.dom.get(_re[0]);
			var _elXY=E9.dom.getSize(_el);
			var _r=_re[1];
			options.range=[_r[0]?0:null,_r[1]?0:null,_r[2]?_elXY[1]:null,_r[3]?_elXY[0]:null];
		}
		if(!isAbsolute||options.ghost) {
			xy=isAbsolute?[parseInt(target.style.left),parseInt(target.style.top)]:_d.getXY(target);
			ghost=_d.createElementIn("div",isAbsolute?target.parentNode:document.body,false,{
				style:this.dragGhostStyle
			});
			ghost.id="dragGhost";
			_d.setStyle(ghost,"opacity","0.8");
			setTimeout(function () {
				_d.setStyle(target,"opacity","0.5");
			},0);
			if(options.ghostSize) {
				_d.setSize(ghost,options.ghostSize[0],options.ghostSize[1]);
				xy=[e.clientX+E9.dom.getScrollLeft()-30,e.clientY+E9.dom.getScrollTop()-20];
			}else {
				_d.setSize(ghost,size[0]-2,size[1]-2);
			}
			_d.setXY(ghost,xy[0],xy[1]);
			hasGhost=true;
		}else {
			xy=[parseInt(_d.getStyle(target,"left")),parseInt(_d.getStyle(target,"top"))];
		}
		var dragTarget=ghost||target;
		this.currentDragCache={
			size:size,xy:xy,mXY:xy,dragTarget:dragTarget,target:target,x:e.clientX-parseInt(xy[0]),y:e.clientY-parseInt(xy[1]),ghost:ghost,hasGhost:hasGhost,isAbsolute:isAbsolute,options:options,scrollRangeTop:E9.dragdrop._scrollRange,scrollRangeBottom:E9.dom.getClientHeight()-E9.dragdrop._scrollRange,maxScrollRange:Math.max(E9.dom.getScrollHeight()-E9.dom.getClientHeight(),0)
		}
		_e.on(document,"mousemove",_e.bind(this,this.doDrag),[handlerId,this.currentDragCache,options]);
		_e.on(document,"mouseup",_e.bind(this,this.endDrag),[handlerId,this.currentDragCache,options]);
		this.dragdropPool[handlerId].onStartDrag.apply(null,[e,handlerId,this.currentDragCache,options]);
		_e.preventDefault();
	},doDrag:function (e,handlerId,dragCache,options) {
		var pos={
		};
		if(options.autoScroll) {
			if(e.clientY<dragCache.scrollRangeTop) {
				if(!E9.dragdrop._scrollTop) {
					E9.dragdrop._stopScroll();
					E9.dragdrop._scrollTimer=setTimeout(function () {
						E9.dragdrop._doScroll(true,dragCache)
					},200);
				}
			}else if(e.clientY>dragCache.scrollRangeBottom) {
				if(!E9.dragdrop._scrollBottom) {
					E9.dragdrop._stopScroll();
					E9.dragdrop._scrollTimer=setTimeout(function () {
						E9.dragdrop._doScroll(false,dragCache)
					},200);
				}
			}else {
				E9.dragdrop._stopScroll();
			}
		}
		var mX=e.clientX-dragCache.x;
		var mY=e.clientY-dragCache.y;
		var xy=this._countXY(mX,mY,dragCache.size,options);
		mX=xy.x;
		mY=xy.y;
		E9.dom.setXY(dragCache.dragTarget,mX,mY);
		dragCache.mXY=[mX,mY];
		this.dragdropPool[handlerId].onDoDrag.apply(null,[e,handlerId,dragCache,options]);
		if(E9.userAgent.ie) {
			document.body.setCapture();
		}
		E9.event.preventDefault();
	},endDrag:function (e,handlerId,dragCache,options) {
		var _d=E9.dom;
		if(dragCache.hasGhost) {
			E9.dom.removeElement(dragCache.dragTarget);
			var _t=dragCache.target;
			setTimeout(function () {
				E9.dom.setStyle(_t,"opacity","1");
				_t=null;
			},0);
			if(dragCache.isAbsolute) {
				var x=parseInt(_d.getStyle(dragCache.target,"left"))+(dragCache.mXY[0]-dragCache.xy[0]);
				var y=parseInt(_d.getStyle(dragCache.target,"top"))+(dragCache.mXY[1]-dragCache.xy[1]);
				var xy=this._countXY(x,y,dragCache.size,options);
				E9.dom.setXY(dragCache.target,xy.x,xy.y);
			}
		}
		E9.event.removeEvent(document,"mousemove");
		E9.event.removeEvent(document,"mouseup");
		this.dragdropPool[handlerId].onEndDrag.apply(null,[e,handlerId,dragCache,options]);
		dragCache=null;
		E9.dragdrop._stopScroll();
		if(E9.userAgent.ie) {
			document.body.releaseCapture();
		}
	},_doScroll:function (isUp,dc) {
		step=isUp?-15:15;
		var _st=E9.dom.getScrollTop();
		if(isUp&&_st+step<0) {
			step=0;
		}
		if(!isUp&&_st+step>dc.maxScrollRange) {
			step=0;
		}
		E9.dom.setScrollTop(_st+step);
		dc.y=dc.y-step;
		E9.dragdrop._scrollTop=isUp;
		E9.dragdrop._scrollBottom=!isUp;
		E9.dragdrop._scrollTimer=setTimeout(function () {
			E9.dragdrop._doScroll(isUp,dc)
		},16);
	},_stopScroll:function () {
		E9.dragdrop._scrollTop=E9.dragdrop._scrollBottom=false;
		clearTimeout(E9.dragdrop._scrollTimer);
	},_countXY:function (x,y,size,options) {
		var pos={
			x:x,y:y
		};
		if(options.x) {
			pos["x"]=parseInt(pos["x"]/options.x,10)*options.x+(pos["x"]%options.x<options.x/2?0:options.x);
		}
		if(options.y) {
			pos["y"]=parseInt(pos["y"]/options.y,10)*options.y+(pos["y"]%options.y<options.y/2?0:options.y);
		}
		if(options.range) {
			var _r=options.range;
			var i=0,j=0;
			while(i<_r.length&&j<2) {
				if(typeof _r[i]!="number") {
					i++;
					continue;
				};
				var k=i%2?"x":"y";
				var v=pos[k];
				pos[k]=i<2?Math.max(pos[k],_r[i]):Math.min(pos[k],_r[i]-size[(i+1)%2]);
				if(pos[k]!=v) {
					j++;
				};
				i++;
			}
		}
		return pos;
	}
};
E9.dragdrop.eventController=function () {
	this.onStartDrag=E9.emptyFn
	this.onDoDrag=E9.emptyFn
	this.onEndDrag=E9.emptyFn
};

E9.dialog={     //对话框对象
	items:[],lastFocus:null,tween:true,create:function (title,content,width,height) {
		var _i=this.items;
		_i.push(new E9.DialogHandler(_i.length));
		var dialog=_i[_i.length-1];
		dialog.init(width||300,height||200);
		dialog.fillTitle(title||"无标题");
		dialog.fillContent(content||"");
		return dialog;
	},createBorderNone:function (content,width,height) {
		var _i=this.items;
		var dialog;
		_i.push(dialog=(new E9.DialogHandler(_i.length,true)));
		dialog.init(width||300,height||200,true);
		dialog.fillContent(content||"");
		return dialog;
	}
};
E9.DialogHandler=function (id,isNoBorder) {
	this._id=id;
	this._isIE6=(E9.userAgent.ie&&E9.userAgent.ie<7);
	this.id="dialog_"+id;
	this.mainId="dialog_main_"+id;
	this.headId="dialog_head_"+id;
	this.titleId="dialog_title_"+id;
	this.closeId="dialog_button_"+id;
	this.contentId="dialog_content_"+id;
	this.frameId="dialog_frame_"+id;
	this.useTween=E9.dialog.tween,this.zIndex=6000+this._id;
	this.iconClass="none";
	this.onBeforeUnload=function () {
		return true;
	};
	this.onUnload=E9.emptyFn;
	this.isFocus=false;
	var _t=['<div id="',this.mainId,'" class="',(isNoBorder?"":"layer_global_main"),'">','<div id=',this.headId,' class="',(isNoBorder?"none":"layer_global_title"),'">','<h3><img src="/ac/b.gif" alt="icon" class="',this.iconClass,'"/><span id=',this.titleId,' ></span></h3>','<button id="',this.closeId,'" title="关闭"><span class="none">&#9587;</span></button>','</div>','<div id="',this.contentId,'" class="',(isNoBorder?"":"layer_global_cont"),'"></div>','</div>'];
	if(this._isIE6&&!isNoBorder) {
		_t.push('<iframe id="'+this.frameId+'" style="position:absolute;width:100%;top:0px;z-index:-1;"></iframe>');
	}
	this.temlate=_t.join("");
};
E9.DialogHandler.prototype.init=function (width,height,isNoneBerder) {
	this.dialog=document.createElement("div");
	this.dialog.id=this.id;
	var _l=(E9.dom.getClientWidth()-width)/2+E9.dom.getScrollLeft();
	var _t=Math.max((E9.dom.getClientHeight()-height)/2+E9.dom.getScrollTop(),0);
	with(this.dialog) {
		if(!isNoneBerder) {
			className="layer_global";
		}
		style.position="absolute";
		style.left=_l+"px";
		style.top=_t+"px";
		style.zIndex=this.zIndex;
		innerHTML=this.temlate;
	}
	document.body.appendChild(this.dialog);
	this.dialogClose=E9.dom.get(this.closeId);
	var o=this;
	E9.event.addEvent(this.dialog,"mousedown",E9.event.bind(o,o.focus));
	E9.event.addEvent(this.dialogClose,"click",function () {
		E9.dialog.items[o._id].unload();
	})
	if(E9.dragdrop) {
		E9.dragdrop.registerDragdropHandler(E9.dom.get(this.headId),E9.dom.get(this.id),{
			range:[0,null,null,null],ghost:0
		});
	}
	this.focus();
	this.setSize(width,height);
	if(this.useTween&&E9.Tween) {
		E9.dom.setStyle(this.dialog,"opacity",0);
		var tween1=new E9.Tween(this.dialog,"top",E9.transitions.regularEaseIn,_t-30+"px",_t+"px",0.3);
		tween1.onMotionChange=function () {
			E9.dom.setStyle(o.dialog,"opacity",this.getPercent()/100);
		}
		tween1.onMotionStop=function () {
			E9.dom.setStyle(o.dialog,"opacity",1);
			tween1=null;
		}
		tween1.start();
	}else {
	}
};
E9.DialogHandler.prototype.focus=function (title) {
	if(this.isFocus) {
		return ;
	}
	this.dialog.style.zIndex=this.zIndex+3000;
	if(E9.dialog.lastFocus) {
		E9.dialog.lastFocus.blur();
	};
	this.isFocus=true;
	E9.dialog.lastFocus=this;
};
E9.DialogHandler.prototype.blur=function (title) {
	this.isFocus=false;
	this.dialog.style.zIndex=this.zIndex;
};
E9.DialogHandler.prototype.getZIndex=function () {
	return this.dialog.style.zIndex;
};
E9.DialogHandler.prototype.fillTitle=function (title) {
	var _t=E9.dom.get(this.titleId);
	_t.innerHTML=title;
};
E9.DialogHandler.prototype.fillContent=function (html) {
	var _c=E9.dom.get(this.contentId);
	_c.innerHTML=html;
};
E9.DialogHandler.prototype.setSize=function (width,height) {
	var _m=E9.dom.get(this.id);
	var _c=E9.dom.get(this.contentId);
	height=height-28<0?50:height-28;
	_m.style.width=width+"px";
	_c.style[E9.userAgent.ie<7?"height":"minHeight"]=height+"px";
	if(this._isIE6) {
		var _s=E9.dom.getSize(E9.dom.get(this.mainId));
		var _f=E9.dom.get(this.frameId);
		E9.dom.setSize(_f,_s[0],_s[1]);
	}
};
E9.DialogHandler.prototype.unload=function () {
	if(!this.onBeforeUnload()) {
		return ;
	};
	var o=this;
	if(this.useTween&&E9.Tween) {
		var tween1=new E9.Tween(this.dialog,"opacity",E9.transitions.regularEaseIn,1,0,0.2);
		tween1.onMotionStop=function () {
			o._unload();
			tween1=null;
		};
		tween1.start();
	}else {
		this._unload();
	};
};
E9.DialogHandler.prototype._unload=function () {
	this.onUnload();
	if(E9.dragdrop) {
		E9.dragdrop.unRegisterDragdropHandler(E9.dom.get(this.headId));
	}
	E9.dom.removeElement(this.dialog);
	delete E9.dialog.items[this._id];
};
