var dom = (function() {
	function isF(o) {return 'function' == typeof o;}
	function isN(o) {return 'number' == typeof o;}
	function isO(o) {return (o && ('object' == typeof o)) || isF(o);}
	function isS(o) {return 'string' == typeof o;}
	function isU(o) {return 'undefined' == typeof o;}
	return {
		isObject : isO,
		isUndefined : isU,
		events : (function() {
			var DF = (function() {var aEC, cP = '___call', s = {}, sP = '___secret';
				function eC(o, e) {o[cP] = this; return o[cP](e);}
				function DN(l) {var n = null; aEC(l);
					this.a = function(f) {
						if(f != l) {if(n) {n.a(f);} else {n = new DN(f);}}
					};
					this.f = function(o, e) {
						var r = l.call(o, e); if(isU(r)) {r = true;}
						if(n) {r = n.f(o, e) && r;} return r;
					};
				}
				aEC = eC.call ? function() {} : function(l) {l.call = eC;};
				return {
					cD : function(o, t) {var l = o[t], lN = null;
						function D(e) {if(lN) {return lN.f(this, e);}}
						D.a = function(l) {if(lN) {lN.a(l);} else {lN = new DN(l);}};
						D.r = function(l) {if(lN) {lN = lN.r(l);}};
						D[sP] = s; if(isF(l)) {D.a(l);} l = null; return D;
					},
					isD : function(o) {return o && (s == o[sP]);}
				};
			})();
			return {
				addEventListener : function(o, t, l) {
					if(isO(o) && isF(l)) {
						if(isF(o.addEventListener)) {o.addEventListener(t, l, false);}
						else {var d = o[t = 'on' + t];
							if(!DF.isD(d)) {o[t] = d = DF.cD(o, t);} d.a(l);
						}
					}
				}
			};
		})()
	};
})();
