/* Fehlerhaft (siehe http://forums.ext.net/showthread.php?12837-FIXED-createContextualFragment-error-in-IE9 )
if (typeof Range.prototype.createContextualFragment == "undefined") {
	Range.prototype.createContextualFragment = function(html) {
		var doc = this.startContainer.ownerDocument;
		var container = doc.createElement("div");
		container.innerHTML = html;
		var frag = doc.createDocumentFragment(), n;
		while ((n = container.firstChild)) {
			frag.appendChild(n);
		}
		return frag;
	};
}
*/
if ((typeof Range !== "undefined") && !Range.prototype.createContextualFragment)
{
    Range.prototype.createContextualFragment = function(html)
    {
        var frag = document.createDocumentFragment(),
        div = document.createElement("div");
        frag.appendChild(div);
        div.outerHTML = html;
        return frag;
    };
}

Ext = {
	version : "2.2"
};
window["undefined"] = window["undefined"];
Ext.apply = function(C, D, B) {
	if (B) {
		Ext.apply(C, B)
	}
	if (C && D && typeof D == "object") {
		for ( var A in D) {
			C[A] = D[A]
		}
	}
	return C
};
(function() {
	var idSeed = 0;
	var ua = navigator.userAgent.toLowerCase();
	var isStrict = document.compatMode == "CSS1Compat", isOpera = ua
			.indexOf("opera") > -1, isSafari = (/webkit|khtml/).test(ua), isSafari3 = isSafari
			&& ua.indexOf("webkit/5") != -1,
	// Hotfix Ext2 und IE9
	isIE = !isOpera && ua.indexOf("msie") > -1 && !(ua.indexOf("msie 9") >= -1), isIE7 = !isOpera
			&& (ua.indexOf("msie 7") > -1 || ua.indexOf("msie 8") > -1), isGecko = !isSafari
			&& ua.indexOf("gecko") > -1,
	// Hotfix Ext2 und IE9
	isGecko3 = !isSafari && ua.indexOf("rv:1.9") > -1, isBorderBox = isIE
			&& !isStrict, isWindows = (ua.indexOf("windows") != -1 || ua
			.indexOf("win32") != -1), isMac = (ua.indexOf("macintosh") != -1 || ua
			.indexOf("mac os x") != -1), isAir = (ua.indexOf("adobeair") != -1), isLinux = (ua
			.indexOf("linux") != -1), isSecure = window.location.href
			.toLowerCase().indexOf("https") === 0;
	if (isIE && !isIE7) {
		try {
			document.execCommand("BackgroundImageCache", false, true)
		} catch (e) {
		}
	}
	Ext
			.apply(
					Ext,
					{
						isStrict : isStrict,
						isSecure : isSecure,
						isReady : false,
						enableGarbageCollector : true,
						enableListenerCollection : false,
						SSL_SECURE_URL : "javascript:false",
						BLANK_IMAGE_URL : "http:/" + "/extjs.com/s.gif",
						emptyFn : function() {
						},
						applyIf : function(o, c) {
							if (o && c) {
								for ( var p in c) {
									if (typeof o[p] == "undefined") {
										o[p] = c[p]
									}
								}
							}
							return o
						},
						addBehaviors : function(o) {
							if (!Ext.isReady) {
								Ext.onReady(function() {
									Ext.addBehaviors(o)
								});
								return
							}
							var cache = {};
							for ( var b in o) {
								var parts = b.split("@");
								if (parts[1]) {
									var s = parts[0];
									if (!cache[s]) {
										cache[s] = Ext.select(s)
									}
									cache[s].on(parts[1], o[b])
								}
							}
							cache = null
						},
						id : function(el, prefix) {
							prefix = prefix || "ext-gen";
							el = Ext.getDom(el);
							var id = prefix + (++idSeed);
							return el ? (el.id ? el.id : (el.id = id)) : id
						},
						extend : function() {
							var io = function(o) {
								for ( var m in o) {
									this[m] = o[m]
								}
							};
							var oc = Object.prototype.constructor;
							return function(sb, sp, overrides) {
								if (typeof sp == "object") {
									overrides = sp;
									sp = sb;
									sb = overrides.constructor != oc ? overrides.constructor
											: function() {
												sp.apply(this, arguments)
											}
								}
								var F = function() {
								}, sbp, spp = sp.prototype;
								F.prototype = spp;
								sbp = sb.prototype = new F();
								sbp.constructor = sb;
								sb.superclass = spp;
								if (spp.constructor == oc) {
									spp.constructor = sp
								}
								sb.override = function(o) {
									Ext.override(sb, o)
								};
								sbp.override = io;
								Ext.override(sb, overrides);
								sb.extend = function(o) {
									Ext.extend(sb, o)
								};
								return sb
							}
						}(),
						override : function(origclass, overrides) {
							if (overrides) {
								var p = origclass.prototype;
								for ( var method in overrides) {
									p[method] = overrides[method]
								}
								if (Ext.isIE) {
									var rp = [ 'valueOf', 'toString',
											'toLocaleString' ];
									for ( var i = 0, l = rp.length; i < l; i++) {
										m = rp[i];
										if (overrides.hasOwnProperty(m)) {
											p[m] = overrides[m];
										}
									}
								}
							}
						},
						namespace : function() {
							var a = arguments, o = null, i, j, d, rt;
							for (i = 0; i < a.length; ++i) {
								d = a[i].split(".");
								rt = d[0];
								eval("if (typeof " + rt + " == \"undefined\"){"
										+ rt + " = {};} o = " + rt + ";");
								for (j = 1; j < d.length; ++j) {
									o[d[j]] = o[d[j]] || {};
									o = o[d[j]]
								}
							}
						},
						urlEncode : function(o) {
							if (!o) {
								return ""
							}
							var buf = [];
							for ( var key in o) {
								var ov = o[key], k = encodeURIComponent(key);
								var type = typeof ov;
								if (type == "undefined") {
									buf.push(k, "=&")
								} else {
									if (type != "function" && type != "object") {
										buf.push(k, "=",
												encodeURIComponent(ov), "&")
									} else {
										if (Ext.isArray(ov)) {
											if (ov.length) {
												for ( var i = 0, len = ov.length; i < len; i++) {
													buf
															.push(
																	k,
																	"=",
																	encodeURIComponent(ov[i] === undefined ? ""
																			: ov[i]),
																	"&")
												}
											} else {
												buf.push(k, "=&")
											}
										}
									}
								}
							}
							buf.pop();
							return buf.join("")
						},
						urlDecode : function(string, overwrite) {
							if (!string || !string.length) {
								return {}
							}
							var obj = {};
							var pairs = string.split("&");
							var pair, name, value;
							for ( var i = 0, len = pairs.length; i < len; i++) {
								pair = pairs[i].split("=");
								name = decodeURIComponent(pair[0]);
								value = decodeURIComponent(pair[1]);
								if (overwrite !== true) {
									if (typeof obj[name] == "undefined") {
										obj[name] = value
									} else {
										if (typeof obj[name] == "string") {
											obj[name] = [ obj[name] ];
											obj[name].push(value)
										} else {
											obj[name].push(value)
										}
									}
								} else {
									obj[name] = value
								}
							}
							return obj
						},
						each : function(array, fn, scope) {
							if (typeof array.length == "undefined"
									|| typeof array == "string") {
								array = [ array ]
							}
							for ( var i = 0, len = array.length; i < len; i++) {
								if (fn.call(scope || array[i], array[i], i,
										array) === false) {
									return i
								}
							}
						},
						combine : function() {
							var as = arguments, l = as.length, r = [];
							for ( var i = 0; i < l; i++) {
								var a = as[i];
								if (Ext.isArray(a)) {
									r = r.concat(a)
								} else {
									if (a.length !== undefined && !a.substr) {
										r = r.concat(Array.prototype.slice
												.call(a, 0))
									} else {
										r.push(a)
									}
								}
							}
							return r
						},
						escapeRe : function(s) {
							return s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1")
						},
						callback : function(cb, scope, args, delay) {
							if (typeof cb == "function") {
								if (delay) {
									cb.defer(delay, scope, args || [])
								} else {
									cb.apply(scope, args || [])
								}
							}
						},
						getDom : function(el) {
							if (!el || !document) {
								return null
							}
							return el.dom ? el.dom
									: (typeof el == "string" ? document
											.getElementById(el) : el)
						},
						getDoc : function() {
							return Ext.get(document)
						},
						getBody : function() {
							return Ext.get(document.body
									|| document.documentElement)
						},
						getCmp : function(id) {
							return Ext.ComponentMgr.get(id)
						},
						num : function(v, defaultValue) {
							if (typeof v != "number") {
								return defaultValue
							}
							return v
						},
						destroy : function() {
							for ( var i = 0, a = arguments, len = a.length; i < len; i++) {
								var as = a[i];
								if (as) {
									if (typeof as.destroy == "function") {
										as.destroy()
									} else {
										if (as.dom) {
											as.removeAllListeners();
											as.remove()
										}
									}
								}
							}
						},
						removeNode : isIE ? function() {
							var d;
							return function(n) {
								if (n && n.tagName != "BODY") {
									d = d || document.createElement("div");
									d.appendChild(n);
									d.innerHTML = ""
								}
							}
						}() : function(n) {
							if (n && n.parentNode && n.tagName != "BODY") {
								n.parentNode.removeChild(n)
							}
						},
						type : function(o) {
							if (o === undefined || o === null) {
								return false
							}
							if (o.htmlElement) {
								return "element"
							}
							var t = typeof o;
							if (t == "object" && o.nodeName) {
								switch (o.nodeType) {
								case 1:
									return "element";
								case 3:
									return (/\S/).test(o.nodeValue) ? "textnode"
											: "whitespace"
								}
							}
							if (t == "object" || t == "function") {
								switch (o.constructor) {
								case Array:
									return "array";
								case RegExp:
									return "regexp"
								}
								if (typeof o.length == "number"
										&& typeof o.item == "function") {
									return "nodelist"
								}
							}
							return t
						},
						isEmpty : function(v, allowBlank) {
							return v === null || v === undefined
									|| (!allowBlank ? v === "" : false)
						},
						value : function(v, defaultValue, allowBlank) {
							return Ext.isEmpty(v, allowBlank) ? defaultValue
									: v
						},
						isArray : function(v) {
							return v && typeof v.length == "number"
									&& typeof v.splice == "function"
						},
						isDate : function(v) {
							return v && typeof v.getFullYear == "function"
						},
						isOpera : isOpera,
						isSafari : isSafari,
						isSafari3 : isSafari3,
						isSafari2 : isSafari && !isSafari3,
						isIE : isIE,
						isIE6 : isIE && !isIE7,
						isIE7 : isIE7,
						isGecko : isGecko,
						isGecko2 : isGecko && !isGecko3,
						isGecko3 : isGecko3,
						isBorderBox : isBorderBox,
						isLinux : isLinux,
						isWindows : isWindows,
						isMac : isMac,
						isAir : isAir,
						useShims : ((isIE && !isIE7) || (isMac && isGecko && !isGecko3))
					});

	Ext.ns = Ext.namespace
})();
Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data",
		"Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout",
		"Ext.app", "Ext.ux");
Ext.apply(Function.prototype, {
	createCallback : function() {
		var A = arguments;
		var B = this;
		return function() {
			return B.apply(window, A)
		}
	},
	createDelegate : function(C, B, A) {
		var D = this;
		return function() {
			var F = B || arguments;
			if (A === true) {
				F = Array.prototype.slice.call(arguments, 0);
				F = F.concat(B)
			} else {
				if (typeof A == "number") {
					F = Array.prototype.slice.call(arguments, 0);
					var E = [ A, 0 ].concat(B);
					Array.prototype.splice.apply(F, E)
				}
			}
			return D.apply(C || window, F)
		}
	},
	defer : function(C, E, B, A) {
		var D = this.createDelegate(E, B, A);
		if (C) {
			return setTimeout(D, C)
		}
		D();
		return 0
	},
	createSequence : function(B, A) {
		if (typeof B != "function") {
			return this
		}
		var C = this;
		return function() {
			var D = C.apply(this || window, arguments);
			B.apply(A || this || window, arguments);
			return D
		}
	},
	createInterceptor : function(B, A) {
		if (typeof B != "function") {
			return this
		}
		var C = this;
		return function() {
			B.target = this;
			B.method = C;
			if (B.apply(A || this || window, arguments) === false) {
				return
			}
			return C.apply(this || window, arguments)
		}
	}
});
Ext.applyIf(String, {
	escape : function(A) {
		return A.replace(/('|\\)/g, "\\$1")
	},
	leftPad : function(D, B, C) {
		var A = new String(D);
		if (!C) {
			C = " "
		}
		while (A.length < B) {
			A = C + A
		}
		return A.toString()
	},
	format : function(B) {
		var A = Array.prototype.slice.call(arguments, 1);
		return B.replace(/\{(\d+)\}/g, function(C, D) {
			return A[D]
		})
	}
});
String.prototype.toggle = function(B, A) {
	return this == B ? A : B
};
String.prototype.trim = function() {
	var A = /^\s+|\s+$/g;
	return function() {
		return this.replace(A, "")
	}
}();
Ext.applyIf(Number.prototype, {
	constrain : function(B, A) {
		return Math.min(Math.max(this, B), A)
	}
});
Ext.applyIf(Array.prototype, {
	indexOf : function(C) {
		for ( var B = 0, A = this.length; B < A; B++) {
			if (this[B] == C) {
				return B
			}
		}
		return -1
	},
	remove : function(B) {
		var A = this.indexOf(B);
		if (A != -1) {
			this.splice(A, 1)
		}
		return this
	}
});
Date.prototype.getElapsed = function(A) {
	return Math.abs((A || new Date()).getTime() - this.getTime())
};
(function() {
	var B;
	Ext.lib.Dom = {
		getViewWidth : function(E) {
			return E ? this.getDocumentWidth() : this.getViewportWidth()
		},
		getViewHeight : function(E) {
			return E ? this.getDocumentHeight() : this.getViewportHeight()
		},
		getDocumentHeight : function() {
			var E = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight
					: document.documentElement.scrollHeight;
			return Math.max(E, this.getViewportHeight())
		},
		getDocumentWidth : function() {
			var E = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth
					: document.documentElement.scrollWidth;
			return Math.max(E, this.getViewportWidth())
		},
		getViewportHeight : function() {
			if (Ext.isIE) {
				return Ext.isStrict ? document.documentElement.clientHeight
						: document.body.clientHeight
			} else {
				return self.innerHeight
			}
		},
		getViewportWidth : function() {
			if (Ext.isIE) {
				return Ext.isStrict ? document.documentElement.clientWidth
						: document.body.clientWidth
			} else {
				return self.innerWidth
			}
		},
		isAncestor : function(F, G) {
			F = Ext.getDom(F);
			G = Ext.getDom(G);
			if (!F || !G) {
				return false
			}
			if (F.contains && !Ext.isSafari) {
				return F.contains(G)
			} else {
				if (F.compareDocumentPosition) {
					return !!(F.compareDocumentPosition(G) & 16)
				} else {
					var E = G.parentNode;
					while (E) {
						if (E == F) {
							return true
						} else {
							if (!E.tagName || E.tagName.toUpperCase() == "HTML") {
								return false
							}
						}
						E = E.parentNode
					}
					return false
				}
			}
		},
		getRegion : function(E) {
			return Ext.lib.Region.getRegion(E)
		},
		getY : function(E) {
			return this.getXY(E)[1]
		},
		getX : function(E) {
			return this.getXY(E)[0]
		},
		getXY : function(G) {
			var F, K, M, N, J = (document.body || document.documentElement);
			G = Ext.getDom(G);
			if (G == J) {
				return [ 0, 0 ]
			}
			if (G.getBoundingClientRect) {
				M = G.getBoundingClientRect();
				N = C(document).getScroll();
				return [ M.left + N.left, M.top + N.top ]
			}
			var O = 0, L = 0;
			F = G;
			var E = C(G).getStyle("position") == "absolute";
			while (F) {
				O += F.offsetLeft;
				L += F.offsetTop;
				if (!E && C(F).getStyle("position") == "absolute") {
					E = true
				}
				if (Ext.isGecko) {
					K = C(F);
					var P = parseInt(K.getStyle("borderTopWidth"), 10) || 0;
					var H = parseInt(K.getStyle("borderLeftWidth"), 10) || 0;
					O += H;
					L += P;
					if (F != G && K.getStyle("overflow") != "visible") {
						O += H;
						L += P
					}
				}
				F = F.offsetParent
			}
			if (Ext.isSafari && E) {
				O -= J.offsetLeft;
				L -= J.offsetTop
			}
			if (Ext.isGecko && !E) {
				var I = C(J);
				O += parseInt(I.getStyle("borderLeftWidth"), 10) || 0;
				L += parseInt(I.getStyle("borderTopWidth"), 10) || 0
			}
			F = G.parentNode;
			while (F && F != J) {
				if (!Ext.isOpera
						|| (F.tagName != "TR" && C(F).getStyle("display") != "inline")) {
					O -= F.scrollLeft;
					L -= F.scrollTop
				}
				F = F.parentNode
			}
			return [ O, L ]
		},
		setXY : function(E, F) {
			E = Ext.fly(E, "_setXY");
			E.position();
			var G = E.translatePoints(F);
			if (F[0] !== false) {
				E.dom.style.left = G.left + "px"
			}
			if (F[1] !== false) {
				E.dom.style.top = G.top + "px"
			}
		},
		setX : function(F, E) {
			this.setXY(F, [ E, false ])
		},
		setY : function(E, F) {
			this.setXY(E, [ false, F ])
		}
	};
	Ext.lib.Event = function() {
		var F = false;
		var G = [];
		var K = [];
		var I = 0;
		var H = [];
		var E = 0;
		var J = null;
		return {
			POLL_RETRYS : 200,
			POLL_INTERVAL : 20,
			EL : 0,
			TYPE : 1,
			FN : 2,
			WFN : 3,
			OBJ : 3,
			ADJ_SCOPE : 4,
			_interval : null,
			startInterval : function() {
				if (!this._interval) {
					var L = this;
					var M = function() {
						L._tryPreloadAttach()
					};
					this._interval = setInterval(M, this.POLL_INTERVAL)
				}
			},
			onAvailable : function(N, L, O, M) {
				H.push( {
					id : N,
					fn : L,
					obj : O,
					override : M,
					checkReady : false
				});
				I = this.POLL_RETRYS;
				this.startInterval()
			},
			addListener : function(Q, M, P) {
				Q = Ext.getDom(Q);
				if (!Q || !P) {
					return false
				}
				if ("unload" == M) {
					K[K.length] = [ Q, M, P ];
					return true
				}
				var O = function(R) {
					return typeof Ext != "undefined" ? P(Ext.lib.Event
							.getEvent(R)) : false
				};
				var L = [ Q, M, P, O ];
				var N = G.length;
				G[N] = L;
				this.doAdd(Q, M, O, false);
				return true
			},
			removeListener : function(S, O, R) {
				var Q, N;
				S = Ext.getDom(S);
				if (!R) {
					return this.purgeElement(S, false, O)
				}
				if ("unload" == O) {
					for (Q = 0, N = K.length; Q < N; Q++) {
						var M = K[Q];
						if (M && M[0] == S && M[1] == O && M[2] == R) {
							K.splice(Q, 1);
							return true
						}
					}
					return false
				}
				var L = null;
				var P = arguments[3];
				if ("undefined" == typeof P) {
					P = this._getCacheIndex(S, O, R)
				}
				if (P >= 0) {
					L = G[P]
				}
				if (!S || !L) {
					return false
				}
				this.doRemove(S, O, L[this.WFN], false);
				delete G[P][this.WFN];
				delete G[P][this.FN];
				G.splice(P, 1);
				return true
			},
			getTarget : function(N, M) {
				N = N.browserEvent || N;
				var L = N.target || N.srcElement;
				return this.resolveTextNode(L)
			},
			resolveTextNode : function(L) {
				if (Ext.isSafari && L && 3 == L.nodeType) {
					return L.parentNode
				} else {
					return L
				}
			},
			getPageX : function(M) {
				M = M.browserEvent || M;
				var L = M.pageX;
				if (!L && 0 !== L) {
					L = M.clientX || 0;
					if (Ext.isIE) {
						L += this.getScroll()[1]
					}
				}
				return L
			},
			getPageY : function(L) {
				L = L.browserEvent || L;
				var M = L.pageY;
				if (!M && 0 !== M) {
					M = L.clientY || 0;
					if (Ext.isIE) {
						M += this.getScroll()[0]
					}
				}
				return M
			},
			getXY : function(L) {
				L = L.browserEvent || L;
				return [ this.getPageX(L), this.getPageY(L) ]
			},
			getRelatedTarget : function(M) {
				M = M.browserEvent || M;
				var L = M.relatedTarget;
				if (!L) {
					if (M.type == "mouseout") {
						L = M.toElement
					} else {
						if (M.type == "mouseover") {
							L = M.fromElement
						}
					}
				}
				return this.resolveTextNode(L)
			},
			getTime : function(N) {
				N = N.browserEvent || N;
				if (!N.time) {
					var M = new Date().getTime();
					try {
						N.time = M
					} catch (L) {
						this.lastError = L;
						return M
					}
				}
				return N.time
			},
			stopEvent : function(L) {
				this.stopPropagation(L);
				this.preventDefault(L)
			},
			stopPropagation : function(L) {
				L = L.browserEvent || L;
				if (L.stopPropagation) {
					L.stopPropagation()
				} else {
					L.cancelBubble = true
				}
			},
			preventDefault : function(L) {
				L = L.browserEvent || L;
				if (L.preventDefault) {
					L.preventDefault()
				} else {
					L.returnValue = false
				}
			},
			getEvent : function(M) {
				var L = M || window.event;
				if (!L) {
					var N = this.getEvent.caller;
					while (N) {
						L = N.arguments[0];
						if (L && Event == L.constructor) {
							break
						}
						N = N.caller
					}
				}
				return L
			},
			getCharCode : function(L) {
				L = L.browserEvent || L;
				return L.charCode || L.keyCode || 0
			},
			_getCacheIndex : function(Q, N, P) {
				for ( var O = 0, M = G.length; O < M; ++O) {
					var L = G[O];
					if (L && L[this.FN] == P && L[this.EL] == Q
							&& L[this.TYPE] == N) {
						return O
					}
				}
				return -1
			},
			elCache : {},
			getEl : function(L) {
				return document.getElementById(L)
			},
			clearCache : function() {
			},
			_load : function(M) {
				F = true;
				var L = Ext.lib.Event;
				if (Ext.isIE) {
					L.doRemove(window, "load", L._load)
				}
			},
			_tryPreloadAttach : function() {
				if (this.locked) {
					return false
				}
				this.locked = true;
				var R = !F;
				if (!R) {
					R = (I > 0)
				}
				var Q = [];
				for ( var M = 0, L = H.length; M < L; ++M) {
					var P = H[M];
					if (P) {
						var O = this.getEl(P.id);
						if (O) {
							if (!P.checkReady || F || O.nextSibling
									|| (document && document.body)) {
								var N = O;
								if (P.override) {
									if (P.override === true) {
										N = P.obj
									} else {
										N = P.override
									}
								}
								P.fn.call(N, P.obj);
								H[M] = null
							}
						} else {
							Q.push(P)
						}
					}
				}
				I = (Q.length === 0) ? 0 : I - 1;
				if (R) {
					this.startInterval()
				} else {
					clearInterval(this._interval);
					this._interval = null
				}
				this.locked = false;
				return true
			},
			purgeElement : function(P, Q, N) {
				var R = this.getListeners(P, N);
				if (R) {
					for ( var O = 0, L = R.length; O < L; ++O) {
						var M = R[O];
						this.removeListener(P, M.type, M.fn)
					}
				}
				if (Q && P && P.childNodes) {
					for (O = 0, L = P.childNodes.length; O < L; ++O) {
						this.purgeElement(P.childNodes[O], Q, N)
					}
				}
			},
			getListeners : function(M, R) {
				var P = [], L;
				if (!R) {
					L = [ G, K ]
				} else {
					if (R == "unload") {
						L = [ K ]
					} else {
						L = [ G ]
					}
				}
				for ( var O = 0; O < L.length; ++O) {
					var T = L[O];
					if (T && T.length > 0) {
						for ( var Q = 0, S = T.length; Q < S; ++Q) {
							var N = T[Q];
							if (N && N[this.EL] === M
									&& (!R || R === N[this.TYPE])) {
								P.push( {
									type : N[this.TYPE],
									fn : N[this.FN],
									obj : N[this.OBJ],
									adjust : N[this.ADJ_SCOPE],
									index : Q
								})
							}
						}
					}
				}
				return (P.length) ? P : null
			},
			_unload : function(S) {
				var R = Ext.lib.Event, P, O, M, L, N;
				for (P = 0, L = K.length; P < L; ++P) {
					M = K[P];
					if (M) {
						var Q = window;
						if (M[R.ADJ_SCOPE]) {
							if (M[R.ADJ_SCOPE] === true) {
								Q = M[R.OBJ]
							} else {
								Q = M[R.ADJ_SCOPE]
							}
						}
						M[R.FN].call(Q, R.getEvent(S), M[R.OBJ]);
						K[P] = null;
						M = null;
						Q = null
					}
				}
				K = null;
				if (G && G.length > 0) {
					O = G.length;
					while (O) {
						N = O - 1;
						M = G[N];
						if (M) {
							R.removeListener(M[R.EL], M[R.TYPE], M[R.FN], N)
						}
						O = O - 1
					}
					M = null;
					R.clearCache()
				}
				R.doRemove(window, "unload", R._unload)
			},
			getScroll : function() {
				var L = document.documentElement, M = document.body;
				if (L && (L.scrollTop || L.scrollLeft)) {
					return [ L.scrollTop, L.scrollLeft ]
				} else {
					if (M) {
						return [ M.scrollTop, M.scrollLeft ]
					} else {
						return [ 0, 0 ]
					}
				}
			},
			doAdd : function() {
				if (window.addEventListener) {
					return function(O, M, N, L) {
						O.addEventListener(M, N, (L))
					}
				} else {
					if (window.attachEvent) {
						return function(O, M, N, L) {
							O.attachEvent("on" + M, N)
						}
					} else {
						return function() {
						}
					}
				}
			}(),
			doRemove : function() {
				if (window.removeEventListener) {
					return function(O, M, N, L) {
						O.removeEventListener(M, N, (L))
					}
				} else {
					if (window.detachEvent) {
						return function(N, L, M) {
							N.detachEvent("on" + L, M)
						}
					} else {
						return function() {
						}
					}
				}
			}()
		}
	}();
	var D = Ext.lib.Event;
	D.on = D.addListener;
	D.un = D.removeListener;
	if (document && document.body) {
		D._load()
	} else {
		D.doAdd(window, "load", D._load)
	}
	D.doAdd(window, "unload", D._unload);
	D._tryPreloadAttach();
	Ext.lib.Ajax = {
		request : function(K, I, E, J, F) {
			if (F) {
				var G = F.headers;
				if (G) {
					for ( var H in G) {
						if (G.hasOwnProperty(H)) {
							this.initHeader(H, G[H], false)
						}
					}
				}
				if (F.xmlData) {
					if (!G || !G["Content-Type"]) {
						this.initHeader("Content-Type", "text/xml", false)
					}
					K = (K ? K : (F.method ? F.method : "POST"));
					J = F.xmlData
				} else {
					if (F.jsonData) {
						if (!G || !G["Content-Type"]) {
							this.initHeader("Content-Type", "application/json",
									false)
						}
						K = (K ? K : (F.method ? F.method : "POST"));
						J = typeof F.jsonData == "object" ? Ext
								.encode(F.jsonData) : F.jsonData
					}
				}
			}
			return this.asyncRequest(K, I, E, J)
		},
		serializeForm : function(F) {
			if (typeof F == "string") {
				F = (document.getElementById(F) || document.forms[F])
			}
			var G, E, H, J, K = "", M = false;
			for ( var L = 0; L < F.elements.length; L++) {
				G = F.elements[L];
				J = F.elements[L].disabled;
				E = F.elements[L].name;
				H = F.elements[L].value;
				if (!J && E) {
					switch (G.type) {
					case "select-one":
					case "select-multiple":
						for ( var I = 0; I < G.options.length; I++) {
							if (G.options[I].selected) {
								if (Ext.isIE) {
									K += encodeURIComponent(E)
											+ "="
											+ encodeURIComponent(G.options[I].attributes["value"].specified ? G.options[I].value
													: G.options[I].text) + "&"
								} else {
									K += encodeURIComponent(E)
											+ "="
											+ encodeURIComponent(G.options[I]
													.hasAttribute("value") ? G.options[I].value
													: G.options[I].text) + "&"
								}
							}
						}
						break;
					case "radio":
					case "checkbox":
						if (G.checked) {
							K += encodeURIComponent(E) + "="
									+ encodeURIComponent(H) + "&"
						}
						break;
					case "file":
					case undefined:
					case "reset":
					case "button":
						break;
					case "submit":
						if (M == false) {
							K += encodeURIComponent(E) + "="
									+ encodeURIComponent(H) + "&";
							M = true
						}
						break;
					default:
						K += encodeURIComponent(E) + "="
								+ encodeURIComponent(H) + "&";
						break
					}
				}
			}
			K = K.substr(0, K.length - 1);
			return K
		},
		headers : {},
		hasHeaders : false,
		useDefaultHeader : true,
		defaultPostHeader : "application/x-www-form-urlencoded; charset=UTF-8",
		useDefaultXhrHeader : true,
		defaultXhrHeader : "XMLHttpRequest",
		hasDefaultHeaders : true,
		defaultHeaders : {},
		poll : {},
		timeout : {},
		pollInterval : 50,
		transactionId : 0,
		setProgId : function(E) {
			this.activeX.unshift(E)
		},
		setDefaultPostHeader : function(E) {
			this.useDefaultHeader = E
		},
		setDefaultXhrHeader : function(E) {
			this.useDefaultXhrHeader = E
		},
		setPollingInterval : function(E) {
			if (typeof E == "number" && isFinite(E)) {
				this.pollInterval = E
			}
		},
		createXhrObject : function(I) {
			var H, E;
			try {
				E = new XMLHttpRequest();
				H = {
					conn : E,
					tId : I
				}
			} catch (G) {
				for ( var F = 0; F < this.activeX.length; ++F) {
					try {
						E = new ActiveXObject(this.activeX[F]);
						H = {
							conn : E,
							tId : I
						};
						break
					} catch (G) {
					}
				}
			} finally {
				return H
			}
		},
		getConnectionObject : function() {
			var F;
			var G = this.transactionId;
			try {
				F = this.createXhrObject(G);
				if (F) {
					this.transactionId++
				}
			} catch (E) {
			} finally {
				return F
			}
		},
		asyncRequest : function(I, F, H, E) {
			var G = this.getConnectionObject();
			if (!G) {
				return null
			} else {
				G.conn.open(I, F, true);
				if (this.useDefaultXhrHeader) {
					if (!this.defaultHeaders["X-Requested-With"]) {
						this.initHeader("X-Requested-With",
								this.defaultXhrHeader, true)
					}
				}
				if (E && this.useDefaultHeader
						&& (!this.hasHeaders || !this.headers["Content-Type"])) {
					this.initHeader("Content-Type", this.defaultPostHeader)
				}
				if (this.hasDefaultHeaders || this.hasHeaders) {
					this.setHeader(G)
				}
				this.handleReadyState(G, H);
				G.conn.send(E || null);
				return G
			}
		},
		handleReadyState : function(F, G) {
			var E = this;
			if (G && G.timeout) {
				this.timeout[F.tId] = window.setTimeout(function() {
					E.abort(F, G, true)
				}, G.timeout)
			}
			this.poll[F.tId] = window.setInterval(function() {
				if (F.conn && F.conn.readyState == 4) {
					window.clearInterval(E.poll[F.tId]);
					delete E.poll[F.tId];
					if (G && G.timeout) {
						window.clearTimeout(E.timeout[F.tId]);
						delete E.timeout[F.tId]
					}
					E.handleTransactionResponse(F, G)
				}
			}, this.pollInterval)
		},
		handleTransactionResponse : function(I, J, E) {
			if (!J) {
				this.releaseObject(I);
				return
			}
			var G, F;
			try {
				if (I.conn.status !== undefined && I.conn.status != 0) {
					G = I.conn.status
				} else {
					G = 13030
				}
			} catch (H) {
				G = 13030
			}
			if (G >= 200 && G < 300) {
				F = this.createResponseObject(I, J.argument);
				if (J.success) {
					if (!J.scope) {
						J.success(F)
					} else {
						J.success.apply(J.scope, [ F ])
					}
				}
			} else {
				switch (G) {
				case 12002:
				case 12029:
				case 12030:
				case 12031:
				case 12152:
				case 13030:
					F = this.createExceptionObject(I.tId, J.argument, (E ? E
							: false));
					if (J.failure) {
						if (!J.scope) {
							J.failure(F)
						} else {
							J.failure.apply(J.scope, [ F ])
						}
					}
					break;
				default:
					F = this.createResponseObject(I, J.argument);
					if (J.failure) {
						if (!J.scope) {
							J.failure(F)
						} else {
							J.failure.apply(J.scope, [ F ])
						}
					}
				}
			}
			this.releaseObject(I);
			F = null
		},
		createResponseObject : function(E, K) {
			var H = {};
			var M = {};
			try {
				var G = E.conn.getAllResponseHeaders();
				var J = G.split("\n");
				for ( var I = 0; I < J.length; I++) {
					var F = J[I].indexOf(":");
					if (F != -1) {
						M[J[I].substring(0, F)] = J[I].substring(F + 2)
					}
				}
			} catch (L) {
			}
			H.tId = E.tId;
			H.status = E.conn.status;
			H.statusText = E.conn.statusText;
			H.getResponseHeader = M;
			H.getAllResponseHeaders = G;
			H.responseText = E.conn.responseText;
			H.responseXML = E.conn.responseXML;
			if (typeof K !== undefined) {
				H.argument = K
			}
			return H
		},
		createExceptionObject : function(L, H, E) {
			var J = 0;
			var K = "communication failure";
			var G = -1;
			var F = "transaction aborted";
			var I = {};
			I.tId = L;
			if (E) {
				I.status = G;
				I.statusText = F
			} else {
				I.status = J;
				I.statusText = K
			}
			if (H) {
				I.argument = H
			}
			return I
		},
		initHeader : function(E, H, G) {
			var F = (G) ? this.defaultHeaders : this.headers;
			if (F[E] === undefined) {
				F[E] = H
			} else {
				F[E] = H + "," + F[E]
			}
			if (G) {
				this.hasDefaultHeaders = true
			} else {
				this.hasHeaders = true
			}
		},
		setHeader : function(E) {
			if (this.hasDefaultHeaders) {
				for ( var F in this.defaultHeaders) {
					if (this.defaultHeaders.hasOwnProperty(F)) {
						E.conn.setRequestHeader(F, this.defaultHeaders[F])
					}
				}
			}
			if (this.hasHeaders) {
				for ( var F in this.headers) {
					if (this.headers.hasOwnProperty(F)) {
						E.conn.setRequestHeader(F, this.headers[F])
					}
				}
				this.headers = {};
				this.hasHeaders = false
			}
		},
		resetDefaultHeaders : function() {
			delete this.defaultHeaders;
			this.defaultHeaders = {};
			this.hasDefaultHeaders = false
		},
		abort : function(F, G, E) {
			if (this.isCallInProgress(F)) {
				F.conn.abort();
				window.clearInterval(this.poll[F.tId]);
				delete this.poll[F.tId];
				if (E) {
					delete this.timeout[F.tId]
				}
				this.handleTransactionResponse(F, G, true);
				return true
			} else {
				return false
			}
		},
		isCallInProgress : function(E) {
			if (E.conn) {
				return E.conn.readyState != 4 && E.conn.readyState != 0
			} else {
				return false
			}
		},
		releaseObject : function(E) {
			E.conn = null;
			E = null
		},
		activeX : [ "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ]
	};
	Ext.lib.Region = function(G, H, E, F) {
		this.top = G;
		this[1] = G;
		this.right = H;
		this.bottom = E;
		this.left = F;
		this[0] = F
	};
	Ext.lib.Region.prototype = {
		contains : function(E) {
			return (E.left >= this.left && E.right <= this.right
					&& E.top >= this.top && E.bottom <= this.bottom)
		},
		getArea : function() {
			return ((this.bottom - this.top) * (this.right - this.left))
		},
		intersect : function(I) {
			var G = Math.max(this.top, I.top);
			var H = Math.min(this.right, I.right);
			var E = Math.min(this.bottom, I.bottom);
			var F = Math.max(this.left, I.left);
			if (E >= G && H >= F) {
				return new Ext.lib.Region(G, H, E, F)
			} else {
				return null
			}
		},
		union : function(I) {
			var G = Math.min(this.top, I.top);
			var H = Math.max(this.right, I.right);
			var E = Math.max(this.bottom, I.bottom);
			var F = Math.min(this.left, I.left);
			return new Ext.lib.Region(G, H, E, F)
		},
		constrainTo : function(E) {
			this.top = this.top.constrain(E.top, E.bottom);
			this.bottom = this.bottom.constrain(E.top, E.bottom);
			this.left = this.left.constrain(E.left, E.right);
			this.right = this.right.constrain(E.left, E.right);
			return this
		},
		adjust : function(G, F, E, H) {
			this.top += G;
			this.left += F;
			this.right += H;
			this.bottom += E;
			return this
		}
	};
	Ext.lib.Region.getRegion = function(H) {
		var J = Ext.lib.Dom.getXY(H);
		var G = J[1];
		var I = J[0] + H.offsetWidth;
		var E = J[1] + H.offsetHeight;
		var F = J[0];
		return new Ext.lib.Region(G, I, E, F)
	};
	Ext.lib.Point = function(E, F) {
		if (Ext.isArray(E)) {
			F = E[1];
			E = E[0]
		}
		this.x = this.right = this.left = this[0] = E;
		this.y = this.top = this.bottom = this[1] = F
	};
	Ext.lib.Point.prototype = new Ext.lib.Region();
	Ext.lib.Anim = {
		scroll : function(H, F, I, J, E, G) {
			return this.run(H, F, I, J, E, G, Ext.lib.Scroll)
		},
		motion : function(H, F, I, J, E, G) {
			return this.run(H, F, I, J, E, G, Ext.lib.Motion)
		},
		color : function(H, F, I, J, E, G) {
			return this.run(H, F, I, J, E, G, Ext.lib.ColorAnim)
		},
		run : function(I, F, K, L, E, H, G) {
			G = G || Ext.lib.AnimBase;
			if (typeof L == "string") {
				L = Ext.lib.Easing[L]
			}
			var J = new G(I, F, K, L);
			J.animateX(function() {
				Ext.callback(E, H)
			});
			return J
		}
	};
	function C(E) {
		if (!B) {
			B = new Ext.Element.Flyweight()
		}
		B.dom = E;
		return B
	}
	if (Ext.isIE) {
		function A() {
			var E = Function.prototype;
			delete E.createSequence;
			delete E.defer;
			delete E.createDelegate;
			delete E.createCallback;
			delete E.createInterceptor;
			window.detachEvent("onunload", A)
		}
		window.attachEvent("onunload", A)
	}
	Ext.lib.AnimBase = function(F, E, G, H) {
		if (F) {
			this.init(F, E, G, H)
		}
	};
	Ext.lib.AnimBase.prototype = {
		toString : function() {
			var E = this.getEl();
			var F = E.id || E.tagName;
			return ("Anim " + F)
		},
		patterns : {
			noNegatives : /width|height|opacity|padding/i,
			offsetAttribute : /^((width|height)|(top|left))$/,
			defaultUnit : /width|height|top$|bottom$|left$|right$/i,
			offsetUnit : /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i
		},
		doMethod : function(E, G, F) {
			return this.method(this.currentFrame, G, F - G, this.totalFrames)
		},
		setAttribute : function(E, G, F) {
			if (this.patterns.noNegatives.test(E)) {
				G = (G > 0) ? G : 0
			}
			Ext.fly(this.getEl(), "_anim").setStyle(E, G + F)
		},
		getAttribute : function(E) {
			var G = this.getEl();
			var I = C(G).getStyle(E);
			if (I !== "auto" && !this.patterns.offsetUnit.test(I)) {
				return parseFloat(I)
			}
			var F = this.patterns.offsetAttribute.exec(E) || [];
			var J = !!(F[3]);
			var H = !!(F[2]);
			if (H || (C(G).getStyle("position") == "absolute" && J)) {
				I = G["offset" + F[0].charAt(0).toUpperCase() + F[0].substr(1)]
			} else {
				I = 0
			}
			return I
		},
		getDefaultUnit : function(E) {
			if (this.patterns.defaultUnit.test(E)) {
				return "px"
			}
			return ""
		},
		animateX : function(G, E) {
			var F = function() {
				this.onComplete.removeListener(F);
				if (typeof G == "function") {
					G.call(E || this, this)
				}
			};
			this.onComplete.addListener(F, this);
			this.animate()
		},
		setRuntimeAttribute : function(F) {
			var K;
			var G;
			var H = this.attributes;
			this.runtimeAttributes[F] = {};
			var J = function(L) {
				return (typeof L !== "undefined")
			};
			if (!J(H[F]["to"]) && !J(H[F]["by"])) {
				return false
			}
			K = (J(H[F]["from"])) ? H[F]["from"] : this.getAttribute(F);
			if (J(H[F]["to"])) {
				G = H[F]["to"]
			} else {
				if (J(H[F]["by"])) {
					if (K.constructor == Array) {
						G = [];
						for ( var I = 0, E = K.length; I < E; ++I) {
							G[I] = K[I] + H[F]["by"][I]
						}
					} else {
						G = K + H[F]["by"]
					}
				}
			}
			this.runtimeAttributes[F].start = K;
			this.runtimeAttributes[F].end = G;
			this.runtimeAttributes[F].unit = (J(H[F].unit)) ? H[F]["unit"]
					: this.getDefaultUnit(F)
		},
		init : function(G, L, K, E) {
			var F = false;
			var H = null;
			var J = 0;
			G = Ext.getDom(G);
			this.attributes = L || {};
			this.duration = K || 1;
			this.method = E || Ext.lib.Easing.easeNone;
			this.useSeconds = true;
			this.currentFrame = 0;
			this.totalFrames = Ext.lib.AnimMgr.fps;
			this.getEl = function() {
				return G
			};
			this.isAnimated = function() {
				return F
			};
			this.getStartTime = function() {
				return H
			};
			this.runtimeAttributes = {};
			this.animate = function() {
				if (this.isAnimated()) {
					return false
				}
				this.currentFrame = 0;
				this.totalFrames = (this.useSeconds) ? Math
						.ceil(Ext.lib.AnimMgr.fps * this.duration)
						: this.duration;
				Ext.lib.AnimMgr.registerElement(this)
			};
			this.stop = function(O) {
				if (O) {
					this.currentFrame = this.totalFrames;
					this._onTween.fire()
				}
				Ext.lib.AnimMgr.stop(this)
			};
			var N = function() {
				this.onStart.fire();
				this.runtimeAttributes = {};
				for ( var O in this.attributes) {
					this.setRuntimeAttribute(O)
				}
				F = true;
				J = 0;
				H = new Date()
			};
			var M = function() {
				var Q = {
					duration : new Date() - this.getStartTime(),
					currentFrame : this.currentFrame
				};
				Q.toString = function() {
					return ("duration: " + Q.duration + ", currentFrame: " + Q.currentFrame)
				};
				this.onTween.fire(Q);
				var P = this.runtimeAttributes;
				for ( var O in P) {
					this.setAttribute(O,
							this.doMethod(O, P[O].start, P[O].end), P[O].unit)
				}
				J += 1
			};
			var I = function() {
				var O = (new Date() - H) / 1000;
				var P = {
					duration : O,
					frames : J,
					fps : J / O
				};
				P.toString = function() {
					return ("duration: " + P.duration + ", frames: " + P.frames
							+ ", fps: " + P.fps)
				};
				F = false;
				J = 0;
				this.onComplete.fire(P)
			};
			this._onStart = new Ext.util.Event(this);
			this.onStart = new Ext.util.Event(this);
			this.onTween = new Ext.util.Event(this);
			this._onTween = new Ext.util.Event(this);
			this.onComplete = new Ext.util.Event(this);
			this._onComplete = new Ext.util.Event(this);
			this._onStart.addListener(N);
			this._onTween.addListener(M);
			this._onComplete.addListener(I)
		}
	};
	Ext.lib.AnimMgr = new function() {
		var G = null;
		var F = [];
		var E = 0;
		this.fps = 1000;
		this.delay = 1;
		this.registerElement = function(J) {
			F[F.length] = J;
			E += 1;
			J._onStart.fire();
			this.start()
		};
		this.unRegister = function(K, J) {
			K._onComplete.fire();
			J = J || I(K);
			if (J != -1) {
				F.splice(J, 1)
			}
			E -= 1;
			if (E <= 0) {
				this.stop()
			}
		};
		this.start = function() {
			if (G === null) {
				G = setInterval(this.run, this.delay)
			}
		};
		this.stop = function(L) {
			if (!L) {
				clearInterval(G);
				for ( var K = 0, J = F.length; K < J; ++K) {
					if (F[0].isAnimated()) {
						this.unRegister(F[0], 0)
					}
				}
				F = [];
				G = null;
				E = 0
			} else {
				this.unRegister(L)
			}
		};
		this.run = function() {
			for ( var L = 0, J = F.length; L < J; ++L) {
				var K = F[L];
				if (!K || !K.isAnimated()) {
					continue
				}
				if (K.currentFrame < K.totalFrames || K.totalFrames === null) {
					K.currentFrame += 1;
					if (K.useSeconds) {
						H(K)
					}
					K._onTween.fire()
				} else {
					Ext.lib.AnimMgr.stop(K, L)
				}
			}
		};
		var I = function(L) {
			for ( var K = 0, J = F.length; K < J; ++K) {
				if (F[K] == L) {
					return K
				}
			}
			return -1
		};
		var H = function(K) {
			var N = K.totalFrames;
			var M = K.currentFrame;
			var L = (K.currentFrame * K.duration * 1000 / K.totalFrames);
			var J = (new Date() - K.getStartTime());
			var O = 0;
			if (J < K.duration * 1000) {
				O = Math.round((J / L - 1) * K.currentFrame)
			} else {
				O = N - (M + 1)
			}
			if (O > 0 && isFinite(O)) {
				if (K.currentFrame + O >= N) {
					O = N - (M + 1)
				}
				K.currentFrame += O
			}
		}
	};
	Ext.lib.Bezier = new function() {
		this.getPosition = function(I, H) {
			var J = I.length;
			var G = [];
			for ( var F = 0; F < J; ++F) {
				G[F] = [ I[F][0], I[F][1] ]
			}
			for ( var E = 1; E < J; ++E) {
				for (F = 0; F < J - E; ++F) {
					G[F][0] = (1 - H) * G[F][0] + H * G[parseInt(F + 1, 10)][0];
					G[F][1] = (1 - H) * G[F][1] + H * G[parseInt(F + 1, 10)][1]
				}
			}
			return [ G[0][0], G[0][1] ]
		}
	};
	(function() {
		Ext.lib.ColorAnim = function(I, H, J, K) {
			Ext.lib.ColorAnim.superclass.constructor.call(this, I, H, J, K)
		};
		Ext.extend(Ext.lib.ColorAnim, Ext.lib.AnimBase);
		var F = Ext.lib;
		var G = F.ColorAnim.superclass;
		var E = F.ColorAnim.prototype;
		E.toString = function() {
			var H = this.getEl();
			var I = H.id || H.tagName;
			return ("ColorAnim " + I)
		};
		E.patterns.color = /color$/i;
		E.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;
		E.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
		E.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
		E.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/;
		E.parseColor = function(H) {
			if (H.length == 3) {
				return H
			}
			var I = this.patterns.hex.exec(H);
			if (I && I.length == 4) {
				return [ parseInt(I[1], 16), parseInt(I[2], 16),
						parseInt(I[3], 16) ]
			}
			I = this.patterns.rgb.exec(H);
			if (I && I.length == 4) {
				return [ parseInt(I[1], 10), parseInt(I[2], 10),
						parseInt(I[3], 10) ]
			}
			I = this.patterns.hex3.exec(H);
			if (I && I.length == 4) {
				return [ parseInt(I[1] + I[1], 16), parseInt(I[2] + I[2], 16),
						parseInt(I[3] + I[3], 16) ]
			}
			return null
		};
		E.getAttribute = function(H) {
			var J = this.getEl();
			if (this.patterns.color.test(H)) {
				var K = C(J).getStyle(H);
				if (this.patterns.transparent.test(K)) {
					var I = J.parentNode;
					K = C(I).getStyle(H);
					while (I && this.patterns.transparent.test(K)) {
						I = I.parentNode;
						K = C(I).getStyle(H);
						if (I.tagName.toUpperCase() == "HTML") {
							K = "#fff"
						}
					}
				}
			} else {
				K = G.getAttribute.call(this, H)
			}
			return K
		};
		E.doMethod = function(I, M, J) {
			var L;
			if (this.patterns.color.test(I)) {
				L = [];
				for ( var K = 0, H = M.length; K < H; ++K) {
					L[K] = G.doMethod.call(this, I, M[K], J[K])
				}
				L = "rgb(" + Math.floor(L[0]) + "," + Math.floor(L[1]) + ","
						+ Math.floor(L[2]) + ")"
			} else {
				L = G.doMethod.call(this, I, M, J)
			}
			return L
		};
		E.setRuntimeAttribute = function(I) {
			G.setRuntimeAttribute.call(this, I);
			if (this.patterns.color.test(I)) {
				var K = this.attributes;
				var M = this.parseColor(this.runtimeAttributes[I].start);
				var J = this.parseColor(this.runtimeAttributes[I].end);
				if (typeof K[I]["to"] === "undefined"
						&& typeof K[I]["by"] !== "undefined") {
					J = this.parseColor(K[I].by);
					for ( var L = 0, H = M.length; L < H; ++L) {
						J[L] = M[L] + J[L]
					}
				}
				this.runtimeAttributes[I].start = M;
				this.runtimeAttributes[I].end = J
			}
		}
	})();
	Ext.lib.Easing = {
		easeNone : function(F, E, H, G) {
			return H * F / G + E
		},
		easeIn : function(F, E, H, G) {
			return H * (F /= G) * F + E
		},
		easeOut : function(F, E, H, G) {
			return -H * (F /= G) * (F - 2) + E
		},
		easeBoth : function(F, E, H, G) {
			if ((F /= G / 2) < 1) {
				return H / 2 * F * F + E
			}
			return -H / 2 * ((--F) * (F - 2) - 1) + E
		},
		easeInStrong : function(F, E, H, G) {
			return H * (F /= G) * F * F * F + E
		},
		easeOutStrong : function(F, E, H, G) {
			return -H * ((F = F / G - 1) * F * F * F - 1) + E
		},
		easeBothStrong : function(F, E, H, G) {
			if ((F /= G / 2) < 1) {
				return H / 2 * F * F * F * F + E
			}
			return -H / 2 * ((F -= 2) * F * F * F - 2) + E
		},
		elasticIn : function(G, E, K, J, F, I) {
			if (G == 0) {
				return E
			}
			if ((G /= J) == 1) {
				return E + K
			}
			if (!I) {
				I = J * 0.3
			}
			if (!F || F < Math.abs(K)) {
				F = K;
				var H = I / 4
			} else {
				var H = I / (2 * Math.PI) * Math.asin(K / F)
			}
			return -(F * Math.pow(2, 10 * (G -= 1)) * Math.sin((G * J - H)
					* (2 * Math.PI) / I))
					+ E
		},
		elasticOut : function(G, E, K, J, F, I) {
			if (G == 0) {
				return E
			}
			if ((G /= J) == 1) {
				return E + K
			}
			if (!I) {
				I = J * 0.3
			}
			if (!F || F < Math.abs(K)) {
				F = K;
				var H = I / 4
			} else {
				var H = I / (2 * Math.PI) * Math.asin(K / F)
			}
			return F * Math.pow(2, -10 * G)
					* Math.sin((G * J - H) * (2 * Math.PI) / I) + K + E
		},
		elasticBoth : function(G, E, K, J, F, I) {
			if (G == 0) {
				return E
			}
			if ((G /= J / 2) == 2) {
				return E + K
			}
			if (!I) {
				I = J * (0.3 * 1.5)
			}
			if (!F || F < Math.abs(K)) {
				F = K;
				var H = I / 4
			} else {
				var H = I / (2 * Math.PI) * Math.asin(K / F)
			}
			if (G < 1) {
				return -0.5
						* (F * Math.pow(2, 10 * (G -= 1)) * Math
								.sin((G * J - H) * (2 * Math.PI) / I)) + E
			}
			return F * Math.pow(2, -10 * (G -= 1))
					* Math.sin((G * J - H) * (2 * Math.PI) / I) * 0.5 + K + E
		},
		backIn : function(F, E, I, H, G) {
			if (typeof G == "undefined") {
				G = 1.70158
			}
			return I * (F /= H) * F * ((G + 1) * F - G) + E
		},
		backOut : function(F, E, I, H, G) {
			if (typeof G == "undefined") {
				G = 1.70158
			}
			return I * ((F = F / H - 1) * F * ((G + 1) * F + G) + 1) + E
		},
		backBoth : function(F, E, I, H, G) {
			if (typeof G == "undefined") {
				G = 1.70158
			}
			if ((F /= H / 2) < 1) {
				return I / 2 * (F * F * (((G *= (1.525)) + 1) * F - G)) + E
			}
			return I / 2 * ((F -= 2) * F * (((G *= (1.525)) + 1) * F + G) + 2)
					+ E
		},
		bounceIn : function(F, E, H, G) {
			return H - Ext.lib.Easing.bounceOut(G - F, 0, H, G) + E
		},
		bounceOut : function(F, E, H, G) {
			if ((F /= G) < (1 / 2.75)) {
				return H * (7.5625 * F * F) + E
			} else {
				if (F < (2 / 2.75)) {
					return H * (7.5625 * (F -= (1.5 / 2.75)) * F + 0.75) + E
				} else {
					if (F < (2.5 / 2.75)) {
						return H * (7.5625 * (F -= (2.25 / 2.75)) * F + 0.9375)
								+ E
					}
				}
			}
			return H * (7.5625 * (F -= (2.625 / 2.75)) * F + 0.984375) + E
		},
		bounceBoth : function(F, E, H, G) {
			if (F < G / 2) {
				return Ext.lib.Easing.bounceIn(F * 2, 0, H, G) * 0.5 + E
			}
			return Ext.lib.Easing.bounceOut(F * 2 - G, 0, H, G) * 0.5 + H * 0.5
					+ E
		}
	};
	(function() {
		Ext.lib.Motion = function(K, J, L, M) {
			if (K) {
				Ext.lib.Motion.superclass.constructor.call(this, K, J, L, M)
			}
		};
		Ext.extend(Ext.lib.Motion, Ext.lib.ColorAnim);
		var H = Ext.lib;
		var I = H.Motion.superclass;
		var F = H.Motion.prototype;
		F.toString = function() {
			var J = this.getEl();
			var K = J.id || J.tagName;
			return ("Motion " + K)
		};
		F.patterns.points = /^points$/i;
		F.setAttribute = function(J, L, K) {
			if (this.patterns.points.test(J)) {
				K = K || "px";
				I.setAttribute.call(this, "left", L[0], K);
				I.setAttribute.call(this, "top", L[1], K)
			} else {
				I.setAttribute.call(this, J, L, K)
			}
		};
		F.getAttribute = function(J) {
			if (this.patterns.points.test(J)) {
				var K = [ I.getAttribute.call(this, "left"),
						I.getAttribute.call(this, "top") ]
			} else {
				K = I.getAttribute.call(this, J)
			}
			return K
		};
		F.doMethod = function(J, N, K) {
			var M = null;
			if (this.patterns.points.test(J)) {
				var L = this
						.method(this.currentFrame, 0, 100, this.totalFrames) / 100;
				M = H.Bezier.getPosition(this.runtimeAttributes[J], L)
			} else {
				M = I.doMethod.call(this, J, N, K)
			}
			return M
		};
		F.setRuntimeAttribute = function(S) {
			if (this.patterns.points.test(S)) {
				var K = this.getEl();
				var M = this.attributes;
				var J;
				var O = M["points"]["control"] || [];
				var L;
				var P, R;
				if (O.length > 0 && !Ext.isArray(O[0])) {
					O = [ O ]
				} else {
					var N = [];
					for (P = 0, R = O.length; P < R; ++P) {
						N[P] = O[P]
					}
					O = N
				}
				Ext.fly(K, "_anim").position();
				if (G(M["points"]["from"])) {
					Ext.lib.Dom.setXY(K, M["points"]["from"])
				} else {
					Ext.lib.Dom.setXY(K, Ext.lib.Dom.getXY(K))
				}
				J = this.getAttribute("points");
				if (G(M["points"]["to"])) {
					L = E.call(this, M["points"]["to"], J);
					var Q = Ext.lib.Dom.getXY(this.getEl());
					for (P = 0, R = O.length; P < R; ++P) {
						O[P] = E.call(this, O[P], J)
					}
				} else {
					if (G(M["points"]["by"])) {
						L = [ J[0] + M["points"]["by"][0],
								J[1] + M["points"]["by"][1] ];
						for (P = 0, R = O.length; P < R; ++P) {
							O[P] = [ J[0] + O[P][0], J[1] + O[P][1] ]
						}
					}
				}
				this.runtimeAttributes[S] = [ J ];
				if (O.length > 0) {
					this.runtimeAttributes[S] = this.runtimeAttributes[S]
							.concat(O)
				}
				this.runtimeAttributes[S][this.runtimeAttributes[S].length] = L
			} else {
				I.setRuntimeAttribute.call(this, S)
			}
		};
		var E = function(J, L) {
			var K = Ext.lib.Dom.getXY(this.getEl());
			J = [ J[0] - K[0] + L[0], J[1] - K[1] + L[1] ];
			return J
		};
		var G = function(J) {
			return (typeof J !== "undefined")
		}
	})();
	(function() {
		Ext.lib.Scroll = function(I, H, J, K) {
			if (I) {
				Ext.lib.Scroll.superclass.constructor.call(this, I, H, J, K)
			}
		};
		Ext.extend(Ext.lib.Scroll, Ext.lib.ColorAnim);
		var F = Ext.lib;
		var G = F.Scroll.superclass;
		var E = F.Scroll.prototype;
		E.toString = function() {
			var H = this.getEl();
			var I = H.id || H.tagName;
			return ("Scroll " + I)
		};
		E.doMethod = function(H, K, I) {
			var J = null;
			if (H == "scroll") {
				J = [
						this.method(this.currentFrame, K[0], I[0] - K[0],
								this.totalFrames),
						this.method(this.currentFrame, K[1], I[1] - K[1],
								this.totalFrames) ]
			} else {
				J = G.doMethod.call(this, H, K, I)
			}
			return J
		};
		E.getAttribute = function(H) {
			var J = null;
			var I = this.getEl();
			if (H == "scroll") {
				J = [ I.scrollLeft, I.scrollTop ]
			} else {
				J = G.getAttribute.call(this, H)
			}
			return J
		};
		E.setAttribute = function(H, K, J) {
			var I = this.getEl();
			if (H == "scroll") {
				I.scrollLeft = K[0];
				I.scrollTop = K[1]
			} else {
				G.setAttribute.call(this, H, K, J)
			}
		}
	})()
})();

Ext.DomHelper = function() {
	var L = null;
	var F = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
	var B = /^table|tbody|tr|td$/i;
	var A = function(T) {
		if (typeof T == "string") {
			return T
		}
		var O = "";
		if (Ext.isArray(T)) {
			for ( var R = 0, P = T.length; R < P; R++) {
				O += A(T[R])
			}
			return O
		}
		if (!T.tag) {
			T.tag = "div"
		}
		O += "<" + T.tag;
		for ( var N in T) {
			if (N == "tag" || N == "children" || N == "cn" || N == "html"
					|| typeof T[N] == "function") {
				continue
			}
			if (N == "style") {
				var S = T["style"];
				if (typeof S == "function") {
					S = S.call()
				}
				if (typeof S == "string") {
					O += " style=\"" + S + "\""
				} else {
					if (typeof S == "object") {
						O += " style=\"";
						for ( var Q in S) {
							if (typeof S[Q] != "function") {
								O += Q + ":" + S[Q] + ";"
							}
						}
						O += "\""
					}
				}
			} else {
				if (N == "cls") {
					O += " class=\"" + T["cls"] + "\""
				} else {
					if (N == "htmlFor") {
						O += " for=\"" + T["htmlFor"] + "\""
					} else {
						O += " " + N + "=\"" + T[N] + "\""
					}
				}
			}
		}
		if (F.test(T.tag)) {
			O += "/>"
		} else {
			O += ">";
			var U = T.children || T.cn;
			if (U) {
				O += A(U)
			} else {
				if (T.html) {
					O += T.html
				}
			}
			O += "</" + T.tag + ">"
		}
		return O
	};
	var M = function(T, O) {
		var S;
		if (Ext.isArray(T)) {
			S = document.createDocumentFragment();
			for ( var R = 0, P = T.length; R < P; R++) {
				M(T[R], S)
			}
		} else {
			if (typeof T == "string") {
				S = document.createTextNode(T)
			} else {
				S = document.createElement(T.tag || "div");
				var Q = !!S.setAttribute;
				for ( var N in T) {
					if (N == "tag" || N == "children" || N == "cn"
							|| N == "html" || N == "style"
							|| typeof T[N] == "function") {
						continue
					}
					if (N == "cls") {
						S.className = T["cls"]
					} else {
						if (Q) {
							S.setAttribute(N, T[N])
						} else {
							S[N] = T[N]
						}
					}
				}
				Ext.DomHelper.applyStyles(S, T.style);
				var U = T.children || T.cn;
				if (U) {
					M(U, S)
				} else {
					if (T.html) {
						S.innerHTML = T.html
					}
				}
			}
		}
		if (O) {
			O.appendChild(S)
		}
		return S
	};
	var I = function(S, Q, P, R) {
		L.innerHTML = [ Q, P, R ].join("");
		var N = -1, O = L;
		while (++N < S) {
			O = O.firstChild
		}
		return O
	};
	var J = "<table>", E = "</table>", C = J + "<tbody>", K = "</tbody>" + E, H = C
			+ "<tr>", D = "</tr>" + K;
	var G = function(N, O, Q, P) {
		if (!L) {
			L = document.createElement("div")
		}
		var R;
		var S = null;
		if (N == "td") {
			if (O == "afterbegin" || O == "beforeend") {
				return
			}
			if (O == "beforebegin") {
				S = Q;
				Q = Q.parentNode
			} else {
				S = Q.nextSibling;
				Q = Q.parentNode
			}
			R = I(4, H, P, D)
		} else {
			if (N == "tr") {
				if (O == "beforebegin") {
					S = Q;
					Q = Q.parentNode;
					R = I(3, C, P, K)
				} else {
					if (O == "afterend") {
						S = Q.nextSibling;
						Q = Q.parentNode;
						R = I(3, C, P, K)
					} else {
						if (O == "afterbegin") {
							S = Q.firstChild
						}
						R = I(4, H, P, D)
					}
				}
			} else {
				if (N == "tbody") {
					if (O == "beforebegin") {
						S = Q;
						Q = Q.parentNode;
						R = I(2, J, P, E)
					} else {
						if (O == "afterend") {
							S = Q.nextSibling;
							Q = Q.parentNode;
							R = I(2, J, P, E)
						} else {
							if (O == "afterbegin") {
								S = Q.firstChild
							}
							R = I(3, C, P, K)
						}
					}
				} else {
					if (O == "beforebegin" || O == "afterend") {
						return
					}
					if (O == "afterbegin") {
						S = Q.firstChild
					}
					R = I(2, J, P, E)
				}
			}
		}
		Q.insertBefore(R, S);
		return R
	};
	return {
		useDom : false,
		markup : function(N) {
			return A(N)
		},
		applyStyles : function(P, Q) {
			if (Q) {
				P = Ext.fly(P);
				if (typeof Q == "string") {
					var O = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
					var R;
					while ((R = O.exec(Q)) != null) {
						P.setStyle(R[1], R[2])
					}
				} else {
					if (typeof Q == "object") {
						for ( var N in Q) {
							P.setStyle(N, Q[N])
						}
					} else {
						if (typeof Q == "function") {
							Ext.DomHelper.applyStyles(P, Q.call())
						}
					}
				}
			}
		},
		insertHtml : function(P, R, Q) {
			P = P.toLowerCase();
			if (R.insertAdjacentHTML) {
				if (B.test(R.tagName)) {
					var O;
					if (O = G(R.tagName.toLowerCase(), P, R, Q)) {
						return O
					}
				}
				switch (P) {
				case "beforebegin":
					R.insertAdjacentHTML("BeforeBegin", Q);
					return R.previousSibling;
				case "afterbegin":
					R.insertAdjacentHTML("AfterBegin", Q);
					return R.firstChild;
				case "beforeend":
					R.insertAdjacentHTML("BeforeEnd", Q);
					return R.lastChild;
				case "afterend":
					R.insertAdjacentHTML("AfterEnd", Q);
					return R.nextSibling
				}
				throw "Illegal insertion point -> \"" + P + "\""
			}
			var N = R.ownerDocument.createRange();
			var S;
			switch (P) {
			case "beforebegin":
				N.setStartBefore(R);
				S = N.createContextualFragment(Q);
				R.parentNode.insertBefore(S, R);
				return R.previousSibling;
			case "afterbegin":
				if (R.firstChild) {
					N.setStartBefore(R.firstChild);
					S = N.createContextualFragment(Q);
					R.insertBefore(S, R.firstChild);
					return R.firstChild
				} else {
					R.innerHTML = Q;
					return R.firstChild
				}
			case "beforeend":
				if (R.lastChild) {
					N.setStartAfter(R.lastChild);
					S = N.createContextualFragment(Q);
					R.appendChild(S);
					return R.lastChild
				} else {
					R.innerHTML = Q;
					return R.lastChild
				}
			case "afterend":
				N.setStartAfter(R);
				S = N.createContextualFragment(Q);
				R.parentNode.insertBefore(S, R.nextSibling);
				return R.nextSibling
			}
			throw "Illegal insertion point -> \"" + P + "\""
		},
		insertBefore : function(N, P, O) {
			return this.doInsert(N, P, O, "beforeBegin")
		},
		insertAfter : function(N, P, O) {
			return this.doInsert(N, P, O, "afterEnd", "nextSibling")
		},
		insertFirst : function(N, P, O) {
			return this.doInsert(N, P, O, "afterBegin", "firstChild")
		},
		doInsert : function(Q, S, R, T, P) {
			Q = Ext.getDom(Q);
			var O;
			if (this.useDom) {
				O = M(S, null);
				(P === "firstChild" ? Q : Q.parentNode).insertBefore(O,
						P ? Q[P] : Q)
			} else {
				var N = A(S);
				O = this.insertHtml(T, Q, N)
			}
			return R ? Ext.get(O, true) : O
		},
		append : function(P, R, Q) {
			P = Ext.getDom(P);
			var O;
			if (this.useDom) {
				O = M(R, null);
				P.appendChild(O)
			} else {
				var N = A(R);
				O = this.insertHtml("beforeEnd", P, N)
			}
			return Q ? Ext.get(O, true) : O
		},
		overwrite : function(N, P, O) {
			N = Ext.getDom(N);
			N.innerHTML = A(P);
			return O ? Ext.get(N.firstChild, true) : N.firstChild
		},
		createTemplate : function(O) {
			var N = A(O);
			return new Ext.Template(N)
		}
	}
}();
Ext.Template = function(E) {
	var B = arguments;
	if (Ext.isArray(E)) {
		E = E.join("")
	} else {
		if (B.length > 1) {
			var C = [];
			for ( var D = 0, A = B.length; D < A; D++) {
				if (typeof B[D] == "object") {
					Ext.apply(this, B[D])
				} else {
					C[C.length] = B[D]
				}
			}
			E = C.join("")
		}
	}
	this.html = E;
	if (this.compiled) {
		this.compile()
	}
};
Ext.Template.prototype = {
	applyTemplate : function(B) {
		if (this.compiled) {
			return this.compiled(B)
		}
		var A = this.disableFormats !== true;
		var E = Ext.util.Format, C = this;
		var D = function(G, I, L, H) {
			if (L && A) {
				if (L.substr(0, 5) == "this.") {
					return C.call(L.substr(5), B[I], B)
				} else {
					if (H) {
						var K = /^\s*['"](.*)["']\s*$/;
						H = H.split(",");
						for ( var J = 0, F = H.length; J < F; J++) {
							H[J] = H[J].replace(K, "$1")
						}
						H = [ B[I] ].concat(H)
					} else {
						H = [ B[I] ]
					}
					return E[L].apply(E, H)
				}
			} else {
				return B[I] !== undefined ? B[I] : ""
			}
		};
		return this.html.replace(this.re, D)
	},
	set : function(A, B) {
		this.html = A;
		this.compiled = null;
		if (B) {
			this.compile()
		}
		return this
	},
	disableFormats : false,
	re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
	compile : function() {
		var fm = Ext.util.Format;
		var useF = this.disableFormats !== true;
		var sep = Ext.isGecko ? "+" : ",";
		var fn = function(m, name, format, args) {
			if (format && useF) {
				args = args ? "," + args : "";
				if (format.substr(0, 5) != "this.") {
					format = "fm." + format + "("
				} else {
					format = "this.call(\"" + format.substr(5) + "\", ";
					args = ", values"
				}
			} else {
				args = "";
				format = "(values['" + name + "'] == undefined ? '' : "
			}
			return "'" + sep + format + "values['" + name + "']" + args + ")"
					+ sep + "'"
		};
		var body;
		if (Ext.isGecko) {
			body = "this.compiled = function(values){ return '"
					+ this.html.replace(/\\/g, "\\\\").replace(/(\r\n|\n)/g,
							"\\n").replace(/'/g, "\\'").replace(this.re, fn)
					+ "';};"
		} else {
			body = [ "this.compiled = function(values){ return ['" ];
			body.push(this.html.replace(/\\/g, "\\\\").replace(/(\r\n|\n)/g,
					"\\n").replace(/'/g, "\\'").replace(this.re, fn));
			body.push("'].join('');};");
			body = body.join("")
		}
		eval(body);
		return this
	},
	call : function(C, B, A) {
		return this[C](B, A)
	},
	insertFirst : function(B, A, C) {
		return this.doInsert("afterBegin", B, A, C)
	},
	insertBefore : function(B, A, C) {
		return this.doInsert("beforeBegin", B, A, C)
	},
	insertAfter : function(B, A, C) {
		return this.doInsert("afterEnd", B, A, C)
	},
	append : function(B, A, C) {
		return this.doInsert("beforeEnd", B, A, C)
	},
	doInsert : function(C, E, B, A) {
		E = Ext.getDom(E);
		var D = Ext.DomHelper.insertHtml(C, E, this.applyTemplate(B));
		return A ? Ext.get(D, true) : D
	},
	overwrite : function(B, A, C) {
		B = Ext.getDom(B);
		B.innerHTML = this.applyTemplate(A);
		return C ? Ext.get(B.firstChild, true) : B.firstChild
	}
};
Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;
Ext.DomHelper.Template = Ext.Template;
Ext.Template.from = function(B, A) {
	B = Ext.getDom(B);
	return new Ext.Template(B.value || B.innerHTML, A || "")
};
Ext.DomQuery = function() {
	var cache = {}, simpleCache = {}, valueCache = {};
	var nonSpace = /\S/;
	var trimRe = /^\s+|\s+$/g;
	var tplRe = /\{(\d+)\}/g;
	var modeRe = /^(\s?[\/>+~]\s?|\s|$)/;
	var tagTokenRe = /^(#)?([\w-\*]+)/;
	var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/;
	function child(p, index) {
		var i = 0;
		var n = p.firstChild;
		while (n) {
			if (n.nodeType == 1) {
				if (++i == index) {
					return n
				}
			}
			n = n.nextSibling
		}
		return null
	}
	function next(n) {
		while ((n = n.nextSibling) && n.nodeType != 1) {
		}
		return n
	}
	function prev(n) {
		while ((n = n.previousSibling) && n.nodeType != 1) {
		}
		return n
	}
	function children(d) {
		var n = d.firstChild, ni = -1;
		while (n) {
			var nx = n.nextSibling;
			if (n.nodeType == 3 && !nonSpace.test(n.nodeValue)) {
				d.removeChild(n)
			} else {
				n.nodeIndex = ++ni
			}
			n = nx
		}
		return this
	}
	function byClassName(c, a, v) {
		if (!v) {
			return c
		}
		var r = [], ri = -1, cn;
		for ( var i = 0, ci; ci = c[i]; i++) {
			if ((" " + ci.className + " ").indexOf(v) != -1) {
				r[++ri] = ci
			}
		}
		return r
	}
	function attrValue(n, attr) {
		if (!n.tagName && typeof n.length != "undefined") {
			n = n[0]
		}
		if (!n) {
			return null
		}
		if (attr == "for") {
			return n.htmlFor
		}
		if (attr == "class" || attr == "className") {
			return n.className
		}
		return n.getAttribute(attr) || n[attr]
	}
	function getNodes(ns, mode, tagName) {
		var result = [], ri = -1, cs;
		if (!ns) {
			return result
		}
		tagName = tagName || "*";
		if (typeof ns.getElementsByTagName != "undefined") {
			ns = [ ns ]
		}
		if (!mode) {
			for ( var i = 0, ni; ni = ns[i]; i++) {
				cs = ni.getElementsByTagName(tagName);
				for ( var j = 0, ci; ci = cs[j]; j++) {
					result[++ri] = ci
				}
			}
		} else {
			if (mode == "/" || mode == ">") {
				var utag = tagName.toUpperCase();
				for ( var i = 0, ni, cn; ni = ns[i]; i++) {
					cn = ni.children || ni.childNodes;
					for ( var j = 0, cj; cj = cn[j]; j++) {
						if (cj.nodeName == utag || cj.nodeName == tagName
								|| tagName == "*") {
							result[++ri] = cj
						}
					}
				}
			} else {
				if (mode == "+") {
					var utag = tagName.toUpperCase();
					for ( var i = 0, n; n = ns[i]; i++) {
						while ((n = n.nextSibling) && n.nodeType != 1) {
						}
						if (n
								&& (n.nodeName == utag || n.nodeName == tagName || tagName == "*")) {
							result[++ri] = n
						}
					}
				} else {
					if (mode == "~") {
						for ( var i = 0, n; n = ns[i]; i++) {
							while ((n = n.nextSibling)
									&& (n.nodeType != 1 || (tagName == "*" || n.tagName
											.toLowerCase() != tagName))) {
							}
							if (n) {
								result[++ri] = n
							}
						}
					}
				}
			}
		}
		return result
	}
	function concat(a, b) {
		if (b.slice) {
			return a.concat(b)
		}
		for ( var i = 0, l = b.length; i < l; i++) {
			a[a.length] = b[i]
		}
		return a
	}
	function byTag(cs, tagName) {
		if (cs.tagName || cs == document) {
			cs = [ cs ]
		}
		if (!tagName) {
			return cs
		}
		var r = [], ri = -1;
		tagName = tagName.toLowerCase();
		for ( var i = 0, ci; ci = cs[i]; i++) {
			if (ci.nodeType == 1 && ci.tagName.toLowerCase() == tagName) {
				r[++ri] = ci
			}
		}
		return r
	}
	function byId(cs, attr, id) {
		if (cs.tagName || cs == document) {
			cs = [ cs ]
		}
		if (!id) {
			return cs
		}
		var r = [], ri = -1;
		for ( var i = 0, ci; ci = cs[i]; i++) {
			if (ci && ci.id == id) {
				r[++ri] = ci;
				return r
			}
		}
		return r
	}
	function byAttribute(cs, attr, value, op, custom) {
		var r = [], ri = -1, st = custom == "{";
		var f = Ext.DomQuery.operators[op];
		for ( var i = 0, ci; ci = cs[i]; i++) {
			var a;
			if (st) {
				a = Ext.DomQuery.getStyle(ci, attr)
			} else {
				if (attr == "class" || attr == "className") {
					a = ci.className
				} else {
					if (attr == "for") {
						a = ci.htmlFor
					} else {
						if (attr == "href") {
							a = ci.getAttribute("href", 2)
						} else {
							a = ci.getAttribute(attr)
						}
					}
				}
			}
			if ((f && f(a, value)) || (!f && a)) {
				r[++ri] = ci
			}
		}
		return r
	}
	function byPseudo(cs, name, value) {
		return Ext.DomQuery.pseudos[name](cs, value)
	}
	var isIE = window.ActiveXObject ? true : false;
	eval("var batch = 30803;");
	var key = 30803;
	function nodupIEXml(cs) {
		var d = ++key;
		cs[0].setAttribute("_nodup", d);
		var r = [ cs[0] ];
		for ( var i = 1, len = cs.length; i < len; i++) {
			var c = cs[i];
			if (!c.getAttribute("_nodup") != d) {
				c.setAttribute("_nodup", d);
				r[r.length] = c
			}
		}
		for ( var i = 0, len = cs.length; i < len; i++) {
			cs[i].removeAttribute("_nodup")
		}
		return r
	}
	function nodup(cs) {
		if (!cs) {
			return []
		}
		var len = cs.length, c, i, r = cs, cj, ri = -1;
		if (!len || typeof cs.nodeType != "undefined" || len == 1) {
			return cs
		}
		if (isIE && typeof cs[0].selectSingleNode != "undefined") {
			return nodupIEXml(cs)
		}
		var d = ++key;
		cs[0]._nodup = d;
		for (i = 1; c = cs[i]; i++) {
			if (c._nodup != d) {
				c._nodup = d
			} else {
				r = [];
				for ( var j = 0; j < i; j++) {
					r[++ri] = cs[j]
				}
				for (j = i + 1; cj = cs[j]; j++) {
					if (cj._nodup != d) {
						cj._nodup = d;
						r[++ri] = cj
					}
				}
				return r
			}
		}
		return r
	}
	function quickDiffIEXml(c1, c2) {
		var d = ++key;
		for ( var i = 0, len = c1.length; i < len; i++) {
			c1[i].setAttribute("_qdiff", d)
		}
		var r = [];
		for ( var i = 0, len = c2.length; i < len; i++) {
			if (c2[i].getAttribute("_qdiff") != d) {
				r[r.length] = c2[i]
			}
		}
		for ( var i = 0, len = c1.length; i < len; i++) {
			c1[i].removeAttribute("_qdiff")
		}
		return r
	}
	function quickDiff(c1, c2) {
		var len1 = c1.length;
		if (!len1) {
			return c2
		}
		if (isIE && c1[0].selectSingleNode) {
			return quickDiffIEXml(c1, c2)
		}
		var d = ++key;
		for ( var i = 0; i < len1; i++) {
			c1[i]._qdiff = d
		}
		var r = [];
		for ( var i = 0, len = c2.length; i < len; i++) {
			if (c2[i]._qdiff != d) {
				r[r.length] = c2[i]
			}
		}
		return r
	}
	function quickId(ns, mode, root, id) {
		if (ns == root) {
			var d = root.ownerDocument || root;
			return d.getElementById(id)
		}
		ns = getNodes(ns, mode, "*");
		return byId(ns, null, id)
	}
	return {
		getStyle : function(el, name) {
			return Ext.fly(el).getStyle(name)
		},
		compile : function(path, type) {
			type = type || "select";
			var fn = [ "var f = function(root){\n var mode; ++batch; var n = root || document;\n" ];
			var q = path, mode, lq;
			var tk = Ext.DomQuery.matchers;
			var tklen = tk.length;
			var mm;
			var lmode = q.match(modeRe);
			if (lmode && lmode[1]) {
				fn[fn.length] = "mode=\"" + lmode[1].replace(trimRe, "")
						+ "\";";
				q = q.replace(lmode[1], "")
			}
			while (path.substr(0, 1) == "/") {
				path = path.substr(1)
			}
			while (q && lq != q) {
				lq = q;
				var tm = q.match(tagTokenRe);
				if (type == "select") {
					if (tm) {
						if (tm[1] == "#") {
							fn[fn.length] = "n = quickId(n, mode, root, \""
									+ tm[2] + "\");"
						} else {
							fn[fn.length] = "n = getNodes(n, mode, \"" + tm[2]
									+ "\");"
						}
						q = q.replace(tm[0], "")
					} else {
						if (q.substr(0, 1) != "@") {
							fn[fn.length] = "n = getNodes(n, mode, \"*\");"
						}
					}
				} else {
					if (tm) {
						if (tm[1] == "#") {
							fn[fn.length] = "n = byId(n, null, \"" + tm[2]
									+ "\");"
						} else {
							fn[fn.length] = "n = byTag(n, \"" + tm[2] + "\");"
						}
						q = q.replace(tm[0], "")
					}
				}
				while (!(mm = q.match(modeRe))) {
					var matched = false;
					for ( var j = 0; j < tklen; j++) {
						var t = tk[j];
						var m = q.match(t.re);
						if (m) {
							fn[fn.length] = t.select.replace(tplRe, function(x,
									i) {
								return m[i]
							});
							q = q.replace(m[0], "");
							matched = true;
							break
						}
					}
					if (!matched) {
						throw "Error parsing selector, parsing failed at \""
								+ q + "\""
					}
				}
				if (mm[1]) {
					fn[fn.length] = "mode=\"" + mm[1].replace(trimRe, "")
							+ "\";";
					q = q.replace(mm[1], "")
				}
			}
			fn[fn.length] = "return nodup(n);\n}";
			eval(fn.join(""));
			return f
		},
		select : function(path, root, type) {
			if (!root || root == document) {
				root = document
			}
			if (typeof root == "string") {
				root = document.getElementById(root)
			}
			var paths = path.split(",");
			var results = [];
			for ( var i = 0, len = paths.length; i < len; i++) {
				var p = paths[i].replace(trimRe, "");
				if (!cache[p]) {
					cache[p] = Ext.DomQuery.compile(p);
					if (!cache[p]) {
						throw p + " is not a valid selector"
					}
				}
				var result = cache[p](root);
				if (result && result != document) {
					results = results.concat(result)
				}
			}
			if (paths.length > 1) {
				return nodup(results)
			}
			return results
		},
		selectNode : function(path, root) {
			return Ext.DomQuery.select(path, root)[0]
		},
		selectValue : function(path, root, defaultValue) {
			path = path.replace(trimRe, "");
			if (!valueCache[path]) {
				valueCache[path] = Ext.DomQuery.compile(path, "select")
			}
			var n = valueCache[path](root);
			n = n[0] ? n[0] : n;
			var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
			return ((v === null || v === undefined || v === "") ? defaultValue
					: v)
		},
		selectNumber : function(path, root, defaultValue) {
			var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
			return parseFloat(v)
		},
		is : function(el, ss) {
			if (typeof el == "string") {
				el = document.getElementById(el)
			}
			var isArray = Ext.isArray(el);
			var result = Ext.DomQuery.filter(isArray ? el : [ el ], ss);
			return isArray ? (result.length == el.length) : (result.length > 0)
		},
		filter : function(els, ss, nonMatches) {
			ss = ss.replace(trimRe, "");
			if (!simpleCache[ss]) {
				simpleCache[ss] = Ext.DomQuery.compile(ss, "simple")
			}
			var result = simpleCache[ss](els);
			return nonMatches ? quickDiff(result, els) : result
		},
		matchers : [
				{
					re : /^\.([\w-]+)/,
					select : "n = byClassName(n, null, \" {1} \");"
				},
				{
					re : /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
					select : "n = byPseudo(n, \"{1}\", \"{2}\");"
				},
				{
					re : /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
					select : "n = byAttribute(n, \"{2}\", \"{4}\", \"{3}\", \"{1}\");"
				},
				{
					re : /^#([\w-]+)/,
					select : "n = byId(n, null, \"{1}\");"
				},
				{
					re : /^@([\w-]+)/,
					select : "return {firstChild:{nodeValue:attrValue(n, \"{1}\")}};"
				} ],
		operators : {
			"=" : function(a, v) {
				return a == v
			},
			"!=" : function(a, v) {
				return a != v
			},
			"^=" : function(a, v) {
				return a && a.substr(0, v.length) == v
			},
			"$=" : function(a, v) {
				return a && a.substr(a.length - v.length) == v
			},
			"*=" : function(a, v) {
				return a && a.indexOf(v) !== -1
			},
			"%=" : function(a, v) {
				return (a % v) == 0
			},
			"|=" : function(a, v) {
				return a && (a == v || a.substr(0, v.length + 1) == v + "-")
			},
			"~=" : function(a, v) {
				return a && (" " + a + " ").indexOf(" " + v + " ") != -1
			}
		},
		pseudos : {
			"first-child" : function(c) {
				var r = [], ri = -1, n;
				for ( var i = 0, ci; ci = n = c[i]; i++) {
					while ((n = n.previousSibling) && n.nodeType != 1) {
					}
					if (!n) {
						r[++ri] = ci
					}
				}
				return r
			},
			"last-child" : function(c) {
				var r = [], ri = -1, n;
				for ( var i = 0, ci; ci = n = c[i]; i++) {
					while ((n = n.nextSibling) && n.nodeType != 1) {
					}
					if (!n) {
						r[++ri] = ci
					}
				}
				return r
			},
			"nth-child" : function(c, a) {
				var r = [], ri = -1;
				var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1"
						|| !nthRe2.test(a) && "n+" + a || a);
				var f = (m[1] || 1) - 0, l = m[2] - 0;
				for ( var i = 0, n; n = c[i]; i++) {
					var pn = n.parentNode;
					if (batch != pn._batch) {
						var j = 0;
						for ( var cn = pn.firstChild; cn; cn = cn.nextSibling) {
							if (cn.nodeType == 1) {
								cn.nodeIndex = ++j
							}
						}
						pn._batch = batch
					}
					if (f == 1) {
						if (l == 0 || n.nodeIndex == l) {
							r[++ri] = n
						}
					} else {
						if ((n.nodeIndex + l) % f == 0) {
							r[++ri] = n
						}
					}
				}
				return r
			},
			"only-child" : function(c) {
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					if (!prev(ci) && !next(ci)) {
						r[++ri] = ci
					}
				}
				return r
			},
			"empty" : function(c) {
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					var cns = ci.childNodes, j = 0, cn, empty = true;
					while (cn = cns[j]) {
						++j;
						if (cn.nodeType == 1 || cn.nodeType == 3) {
							empty = false;
							break
						}
					}
					if (empty) {
						r[++ri] = ci
					}
				}
				return r
			},
			"contains" : function(c, v) {
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					if ((ci.textContent || ci.innerText || "").indexOf(v) != -1) {
						r[++ri] = ci
					}
				}
				return r
			},
			"nodeValue" : function(c, v) {
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					if (ci.firstChild && ci.firstChild.nodeValue == v) {
						r[++ri] = ci
					}
				}
				return r
			},
			"checked" : function(c) {
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					if (ci.checked == true) {
						r[++ri] = ci
					}
				}
				return r
			},
			"not" : function(c, ss) {
				return Ext.DomQuery.filter(c, ss, true)
			},
			"any" : function(c, selectors) {
				var ss = selectors.split("|");
				var r = [], ri = -1, s;
				for ( var i = 0, ci; ci = c[i]; i++) {
					for ( var j = 0; s = ss[j]; j++) {
						if (Ext.DomQuery.is(ci, s)) {
							r[++ri] = ci;
							break
						}
					}
				}
				return r
			},
			"odd" : function(c) {
				return this["nth-child"](c, "odd")
			},
			"even" : function(c) {
				return this["nth-child"](c, "even")
			},
			"nth" : function(c, a) {
				return c[a - 1] || []
			},
			"first" : function(c) {
				return c[0] || []
			},
			"last" : function(c) {
				return c[c.length - 1] || []
			},
			"has" : function(c, ss) {
				var s = Ext.DomQuery.select;
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					if (s(ss, ci).length > 0) {
						r[++ri] = ci
					}
				}
				return r
			},
			"next" : function(c, ss) {
				var is = Ext.DomQuery.is;
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					var n = next(ci);
					if (n && is(n, ss)) {
						r[++ri] = ci
					}
				}
				return r
			},
			"prev" : function(c, ss) {
				var is = Ext.DomQuery.is;
				var r = [], ri = -1;
				for ( var i = 0, ci; ci = c[i]; i++) {
					var n = prev(ci);
					if (n && is(n, ss)) {
						r[++ri] = ci
					}
				}
				return r
			}
		}
	}
}();
Ext.query = Ext.DomQuery.select;
Ext.util.Observable = function() {
	if (this.listeners) {
		this.on(this.listeners);
		delete this.listeners
	}
};
Ext.util.Observable.prototype = {
	fireEvent : function() {
		if (this.eventsSuspended !== true) {
			var A = this.events[arguments[0].toLowerCase()];
			if (typeof A == "object") {
				return A.fire
						.apply(A, Array.prototype.slice.call(arguments, 1))
			}
		}
		return true
	},
	filterOptRe : /^(?:scope|typeOf|delay|buffer|single)$/,
	addListener : function(A, C, B, F) {
		if (typeof A == "object") {
			F = A;
			for ( var E in F) {
				if (this.filterOptRe.test(E)) {
					continue
				}
				if (typeof F[E] == "function") {
					this.addListener(E, F[E], F.scope, F)
				} else {
					this.addListener(E, F[E].fn, F[E].scope, F[E])
				}
			}
			return
		}
		F = (!F || typeof F == "boolean") ? {} : F;
		A = A.toLowerCase();
		var D = this.events[A] || true;
		if (typeof D == "boolean") {
			D = new Ext.util.Event(this, A);
			this.events[A] = D
		}
		D.addListener(C, B, F)
	},
	removeListener : function(A, C, B) {
		var D = this.events[A.toLowerCase()];
		if (typeof D == "object") {
			D.removeListener(C, B)
		}
	},
	purgeListeners : function() {
		for ( var A in this.events) {
			if (typeof this.events[A] == "object") {
				this.events[A].clearListeners()
			}
		}
	},
	relayEvents : function(F, D) {
		var E = function(G) {
			return function() {
				return this.fireEvent.apply(this, Ext.combine(G,
						Array.prototype.slice.call(arguments, 0)))
			}
		};
		for ( var C = 0, A = D.length; C < A; C++) {
			var B = D[C];
			if (!this.events[B]) {
				this.events[B] = true
			}
			F.on(B, E(B), this)
		}
	},
	addEvents : function(D) {
		if (!this.events) {
			this.events = {}
		}
		if (typeof D == "string") {
			for ( var C = 0, A = arguments, B; B = A[C]; C++) {
				if (!this.events[A[C]]) {
					this.events[A[C]] = true
				}
			}
		} else {
			Ext.applyIf(this.events, D)
		}
	},
	hasListener : function(A) {
		var B = this.events[A];
		return typeof B == "object" && B.listeners.length > 0
	},
	suspendEvents : function() {
		this.eventsSuspended = true
	},
	resumeEvents : function() {
		this.eventsSuspended = false
	},
	getMethodEvent : function(G) {
		if (!this.methodEvents) {
			this.methodEvents = {}
		}
		var F = this.methodEvents[G];
		if (!F) {
			F = {};
			this.methodEvents[G] = F;
			F.originalFn = this[G];
			F.methodName = G;
			F.before = [];
			F.after = [];
			var C, B, D;
			var E = this;
			var A = function(J, I, H) {
				if ((B = J.apply(I || E, H)) !== undefined) {
					if (typeof B === "object") {
						if (B.returnValue !== undefined) {
							C = B.returnValue
						} else {
							C = B
						}
						if (B.cancel === true) {
							D = true
						}
					} else {
						if (B === false) {
							D = true
						} else {
							C = B
						}
					}
				}
			};
			this[G] = function() {
				C = B = undefined;
				D = false;
				var I = Array.prototype.slice.call(arguments, 0);
				for ( var J = 0, H = F.before.length; J < H; J++) {
					A(F.before[J].fn, F.before[J].scope, I);
					if (D) {
						return C
					}
				}
				if ((B = F.originalFn.apply(E, I)) !== undefined) {
					C = B
				}
				for ( var J = 0, H = F.after.length; J < H; J++) {
					A(F.after[J].fn, F.after[J].scope, I);
					if (D) {
						return C
					}
				}
				return C
			}
		}
		return F
	},
	beforeMethod : function(D, B, A) {
		var C = this.getMethodEvent(D);
		C.before.push( {
			fn : B,
			scope : A
		})
	},
	afterMethod : function(D, B, A) {
		var C = this.getMethodEvent(D);
		C.after.push( {
			fn : B,
			scope : A
		})
	},
	removeMethodListener : function(F, D, C) {
		var E = this.getMethodEvent(F);
		for ( var B = 0, A = E.before.length; B < A; B++) {
			if (E.before[B].fn == D && E.before[B].scope == C) {
				E.before.splice(B, 1);
				return
			}
		}
		for ( var B = 0, A = E.after.length; B < A; B++) {
			if (E.after[B].fn == D && E.after[B].scope == C) {
				E.after.splice(B, 1);
				return
			}
		}
	}
};
Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
Ext.util.Observable.capture = function(C, B, A) {
	C.fireEvent = C.fireEvent.createInterceptor(B, A)
};
Ext.util.Observable.releaseCapture = function(A) {
	A.fireEvent = Ext.util.Observable.prototype.fireEvent
};
(function() {
	var B = function(F, G, E) {
		var D = new Ext.util.DelayedTask();
		return function() {
			D.delay(G.buffer, F, E, Array.prototype.slice.call(arguments, 0))
		}
	};
	var C = function(F, G, E, D) {
		return function() {
			G.removeListener(E, D);
			return F.apply(D, arguments)
		}
	};
	var A = function(E, F, D) {
		return function() {
			var G = Array.prototype.slice.call(arguments, 0);
			setTimeout(function() {
				E.apply(D, G)
			}, F.delay || 10)
		}
	};
	Ext.util.Event = function(E, D) {
		this.name = D;
		this.obj = E;
		this.listeners = []
	};
	Ext.util.Event.prototype = {
		addListener : function(G, F, E) {
			F = F || this.obj;
			if (!this.isListening(G, F)) {
				var D = this.createListener(G, F, E);
				if (!this.firing) {
					this.listeners.push(D)
				} else {
					this.listeners = this.listeners.slice(0);
					this.listeners.push(D)
				}
			}
		},
		createListener : function(G, F, H) {
			H = H || {};
			F = F || this.obj;
			var D = {
				fn : G,
				scope : F,
				options : H
			};
			var E = G;
			if (H.delay) {
				E = A(E, H, F)
			}
			if (H.single) {
				E = C(E, this, G, F)
			}
			if (H.buffer) {
				E = B(E, H, F)
			}
			D.fireFn = E;
			return D
		},
		findListener : function(I, H) {
			H = H || this.obj;
			var F = this.listeners;
			for ( var G = 0, D = F.length; G < D; G++) {
				var E = F[G];
				if (E.fn == I && E.scope == H) {
					return G
				}
			}
			return -1
		},
		isListening : function(E, D) {
			return this.findListener(E, D) != -1
		},
		removeListener : function(F, E) {
			var D;
			if ((D = this.findListener(F, E)) != -1) {
				if (!this.firing) {
					this.listeners.splice(D, 1)
				} else {
					this.listeners = this.listeners.slice(0);
					this.listeners.splice(D, 1)
				}
				return true
			}
			return false
		},
		clearListeners : function() {
			this.listeners = []
		},
		fire : function() {
			var F = this.listeners, I, D = F.length;
			if (D > 0) {
				this.firing = true;
				var G = Array.prototype.slice.call(arguments, 0);
				for ( var H = 0; H < D; H++) {
					var E = F[H];
					if (E.fireFn
							.apply(E.scope || this.obj || window, arguments) === false) {
						this.firing = false;
						return false
					}
				}
				this.firing = false
			}
			return true
		}
	}
})();
Ext.EventManager = function() {
	var X, Q, M = false;
	var N, W, H, S;
	var P = Ext.lib.Event;
	var R = Ext.lib.Dom;
	var A = "Ex" + "t";
	var J = {};
	var O = function(b, E, a, Z, Y) {
		var d = Ext.id(b);
		if (!J[d]) {
			J[d] = {}
		}
		var c = J[d];
		if (!c[E]) {
			c[E] = []
		}
		var D = c[E];
		D.push( {
			id : d,
			ename : E,
			fn : a,
			wrap : Z,
			scope : Y
		});
		P.on(b, E, Z);
		if (E == "mousewheel" && b.addEventListener) {
			b.addEventListener("DOMMouseScroll", Z, false);
			P.on(window, "unload", function() {
				b.removeEventListener("DOMMouseScroll", Z, false)
			})
		}
		if (E == "mousedown" && b == document) {
			Ext.EventManager.stoppedMouseDownEvent.addListener(Z)
		}
	};
	var I = function(Y, a, e, g) {
		Y = Ext.getDom(Y);
		var D = Ext.id(Y), f = J[D], E;
		if (f) {
			var c = f[a], Z;
			if (c) {
				for ( var b = 0, d = c.length; b < d; b++) {
					Z = c[b];
					if (Z.fn == e && (!g || Z.scope == g)) {
						E = Z.wrap;
						P.un(Y, a, E);
						c.splice(b, 1);
						break
					}
				}
			}
		}
		if (a == "mousewheel" && Y.addEventListener && E) {
			Y.removeEventListener("DOMMouseScroll", E, false)
		}
		if (a == "mousedown" && Y == document && E) {
			Ext.EventManager.stoppedMouseDownEvent.removeListener(E)
		}
	};
	var F = function(a) {
		a = Ext.getDom(a);
		var c = Ext.id(a), b = J[c], E;
		if (b) {
			for ( var Z in b) {
				if (b.hasOwnProperty(Z)) {
					E = b[Z];
					for ( var Y = 0, D = E.length; Y < D; Y++) {
						P.un(a, Z, E[Y].wrap);
						E[Y] = null
					}
				}
				b[Z] = null
			}
			delete J[c]
		}
	};
	var C = function() {
		if (!M) {
			M = Ext.isReady = true;
			if (Ext.isGecko || Ext.isOpera) {
				document.removeEventListener("DOMContentLoaded", C, false)
			}
		}
		if (Q) {
			clearInterval(Q);
			Q = null
		}
		if (X) {
			X.fire();
			X.clearListeners()
		}
	};
	var B = function() {
		X = new Ext.util.Event();
		if (Ext.isReady) {
			return
		}
		P.on(window, "load", C);
		if (Ext.isGecko || Ext.isOpera) {
			document.addEventListener("DOMContentLoaded", C, false)
		} else {
			if (Ext.isIE) {
				Q = setInterval(function() {
					try {
						Ext.isReady
								|| (document.documentElement.doScroll("left"))
					} catch (D) {
						return
					}
					C()
				}, 5);
				document.onreadystatechange = function() {
					if (document.readyState == "complete") {
						document.onreadystatechange = null;
						C()
					}
				}
			} else {
				if (Ext.isSafari) {
					Q = setInterval(function() {
						var D = document.readyState;
						if (D == "complete") {
							C()
						}
					}, 10)
				}
			}
		}
	};
	var V = function(E, Y) {
		var D = new Ext.util.DelayedTask(E);
		return function(Z) {
			Z = new Ext.EventObjectImpl(Z);
			D.delay(Y.buffer, E, null, [ Z ])
		}
	};
	var T = function(a, Z, D, Y, E) {
		return function(b) {
			Ext.EventManager.removeListener(Z, D, Y, E);
			a(b)
		}
	};
	var G = function(D, E) {
		return function(Y) {
			Y = new Ext.EventObjectImpl(Y);
			setTimeout(function() {
				D(Y)
			}, E.delay || 10)
		}
	};
	var L = function(Y, E, D, c, b) {
		var d = (!D || typeof D == "boolean") ? {} : D;
		c = c || d.fn;
		b = b || d.scope;
		var a = Ext.getDom(Y);
		if (!a) {
			throw "Error listening for \"" + E + "\". Element \"" + Y
					+ "\" doesn't exist."
		}
		var Z = function(g) {
			if (!window[A]) {
				return
			}
			g = Ext.EventObject.setEvent(g);
			var f;
			if (d.delegate) {
				f = g.getTarget(d.delegate, a);
				if (!f) {
					return
				}
			} else {
				f = g.target
			}
			if (d.stopEvent === true) {
				g.stopEvent()
			}
			if (d.preventDefault === true) {
				g.preventDefault()
			}
			if (d.stopPropagation === true) {
				g.stopPropagation()
			}
			if (d.normalized === false) {
				g = g.browserEvent
			}
			c.call(b || a, g, f, d)
		};
		if (d.delay) {
			Z = G(Z, d)
		}
		if (d.single) {
			Z = T(Z, a, E, c, b)
		}
		if (d.buffer) {
			Z = V(Z, d)
		}
		O(a, E, c, Z, b);
		return Z
	};
	var K = /^(?:scope|typeOf|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
	var U = {
		addListener : function(Y, D, a, Z, E) {
			if (typeof D == "object") {
				var c = D;
				for ( var b in c) {
					if (K.test(b)) {
						continue
					}
					if (typeof c[b] == "function") {
						L(Y, b, c, c[b], c.scope)
					} else {
						L(Y, b, c[b])
					}
				}
				return
			}
			return L(Y, D, E, a, Z)
		},
		removeListener : function(E, D, Z, Y) {
			return I(E, D, Z, Y)
		},
		removeAll : function(D) {
			return F(D)
		},
		onDocumentReady : function(Y, E, D) {
			if (!X) {
				B()
			}
			if (M || Ext.isReady) {
				D || (D = {});
				Y.defer(D.delay || 0, E)
			} else {
				X.addListener(Y, E, D)
			}
		},
		onWindowResize : function(Y, E, D) {
			if (!N) {
				N = new Ext.util.Event();
				W = new Ext.util.DelayedTask(function() {
					N.fire(R.getViewWidth(), R.getViewHeight())
				});
				P.on(window, "resize", this.fireWindowResize, this)
			}
			N.addListener(Y, E, D)
		},
		fireWindowResize : function() {
			if (N) {
				if ((Ext.isIE || Ext.isAir) && W) {
					W.delay(50)
				} else {
					N.fire(R.getViewWidth(), R.getViewHeight())
				}
			}
		},
		onTextResize : function(Z, Y, D) {
			if (!H) {
				H = new Ext.util.Event();
				var E = new Ext.Element(document.createElement("div"));
				E.dom.className = "x-text-resize";
				E.dom.innerHTML = "X";
				E.appendTo(document.body);
				S = E.dom.offsetHeight;
				setInterval(function() {
					if (E.dom.offsetHeight != S) {
						H.fire(S, S = E.dom.offsetHeight)
					}
				}, this.textResizeInterval)
			}
			H.addListener(Z, Y, D)
		},
		removeResizeListener : function(E, D) {
			if (N) {
				N.removeListener(E, D)
			}
		},
		fireResize : function() {
			if (N) {
				N.fire(R.getViewWidth(), R.getViewHeight())
			}
		},
		ieDeferSrc : false,
		textResizeInterval : 50
	};
	U.on = U.addListener;
	U.un = U.removeListener;
	U.stoppedMouseDownEvent = new Ext.util.Event();
	return U
}();
Ext.onReady = Ext.EventManager.onDocumentReady;
(function() {
	var A = function() {
		var C = document.body || document.getElementsByTagName("body")[0];
		if (!C) {
			return false
		}
		var B = [
				" ",
				Ext.isIE ? "ext-ie " + (Ext.isIE6 ? "ext-ie6" : "ext-ie7")
						: Ext.isGecko ? "ext-gecko "
								+ (Ext.isGecko2 ? "ext-gecko2" : "ext-gecko3")
								: Ext.isOpera ? "ext-opera"
										: Ext.isSafari ? "ext-safari" : "" ];
		if (Ext.isMac) {
			B.push("ext-mac")
		}
		if (Ext.isLinux) {
			B.push("ext-linux")
		}
		if (Ext.isBorderBox) {
			B.push("ext-border-box")
		}
		if (Ext.isStrict) {
			var D = C.parentNode;
			if (D) {
				D.className += " ext-strict"
			}
		}
		C.className += B.join(" ");
		return true
	};
	if (!A()) {
		Ext.onReady(A)
	}
})();
Ext.EventObject = function() {
	var B = Ext.lib.Event;
	var A = {
		3 : 13,
		63234 : 37,
		63235 : 39,
		63232 : 38,
		63233 : 40,
		63276 : 33,
		63277 : 34,
		63272 : 46,
		63273 : 36,
		63275 : 35
	};
	var C = Ext.isIE ? {
		1 : 0,
		4 : 1,
		2 : 2
	} : (Ext.isSafari ? {
		1 : 0,
		2 : 1,
		3 : 2
	} : {
		0 : 0,
		1 : 1,
		2 : 2
	});
	Ext.EventObjectImpl = function(D) {
		if (D) {
			this.setEvent(D.browserEvent || D)
		}
	};
	Ext.EventObjectImpl.prototype = {
		browserEvent : null,
		button : -1,
		shiftKey : false,
		ctrlKey : false,
		altKey : false,
		BACKSPACE : 8,
		TAB : 9,
		NUM_CENTER : 12,
		ENTER : 13,
		RETURN : 13,
		SHIFT : 16,
		CTRL : 17,
		CONTROL : 17,
		ALT : 18,
		PAUSE : 19,
		CAPS_LOCK : 20,
		ESC : 27,
		SPACE : 32,
		PAGE_UP : 33,
		PAGEUP : 33,
		PAGE_DOWN : 34,
		PAGEDOWN : 34,
		END : 35,
		HOME : 36,
		LEFT : 37,
		UP : 38,
		RIGHT : 39,
		DOWN : 40,
		PRINT_SCREEN : 44,
		INSERT : 45,
		DELETE : 46,
		ZERO : 48,
		ONE : 49,
		TWO : 50,
		THREE : 51,
		FOUR : 52,
		FIVE : 53,
		SIX : 54,
		SEVEN : 55,
		EIGHT : 56,
		NINE : 57,
		A : 65,
		B : 66,
		C : 67,
		D : 68,
		E : 69,
		F : 70,
		G : 71,
		H : 72,
		I : 73,
		J : 74,
		K : 75,
		L : 76,
		M : 77,
		N : 78,
		O : 79,
		P : 80,
		Q : 81,
		R : 82,
		S : 83,
		T : 84,
		U : 85,
		V : 86,
		W : 87,
		X : 88,
		Y : 89,
		Z : 90,
		CONTEXT_MENU : 93,
		NUM_ZERO : 96,
		NUM_ONE : 97,
		NUM_TWO : 98,
		NUM_THREE : 99,
		NUM_FOUR : 100,
		NUM_FIVE : 101,
		NUM_SIX : 102,
		NUM_SEVEN : 103,
		NUM_EIGHT : 104,
		NUM_NINE : 105,
		NUM_MULTIPLY : 106,
		NUM_PLUS : 107,
		NUM_MINUS : 109,
		NUM_PERIOD : 110,
		NUM_DIVISION : 111,
		F1 : 112,
		F2 : 113,
		F3 : 114,
		F4 : 115,
		F5 : 116,
		F6 : 117,
		F7 : 118,
		F8 : 119,
		F9 : 120,
		F10 : 121,
		F11 : 122,
		F12 : 123,
		setEvent : function(D) {
			if (D == this || (D && D.browserEvent)) {
				return D
			}
			this.browserEvent = D;
			if (D) {
				this.button = D.button ? C[D.button] : (D.which ? D.which - 1
						: -1);
				if (D.type == "click" && this.button == -1) {
					this.button = 0
				}
				this.type = D.type;
				this.shiftKey = D.shiftKey;
				this.ctrlKey = D.ctrlKey || D.metaKey;
				this.altKey = D.altKey;
				this.keyCode = D.keyCode;
				this.charCode = D.charCode;
				this.target = B.getTarget(D);
				this.xy = B.getXY(D)
			} else {
				this.button = -1;
				this.shiftKey = false;
				this.ctrlKey = false;
				this.altKey = false;
				this.keyCode = 0;
				this.charCode = 0;
				this.target = null;
				this.xy = [ 0, 0 ]
			}
			return this
		},
		stopEvent : function() {
			if (this.browserEvent) {
				if (this.browserEvent.type == "mousedown") {
					Ext.EventManager.stoppedMouseDownEvent.fire(this)
				}
				B.stopEvent(this.browserEvent)
			}
		},
		preventDefault : function() {
			if (this.browserEvent) {
				B.preventDefault(this.browserEvent)
			}
		},
		isNavKeyPress : function() {
			var D = this.keyCode;
			D = Ext.isSafari ? (A[D] || D) : D;
			return (D >= 33 && D <= 40) || D == this.RETURN || D == this.TAB
					|| D == this.ESC
		},
		isSpecialKey : function() {
			var D = this.keyCode;
			return (this.type == "keypress" && this.ctrlKey) || D == 9
					|| D == 13 || D == 40 || D == 27 || (D == 16) || (D == 17)
					|| (D >= 18 && D <= 20) || (D >= 33 && D <= 35)
					|| (D >= 36 && D <= 39) || (D >= 44 && D <= 45)
		},
		stopPropagation : function() {
			if (this.browserEvent) {
				if (this.browserEvent.type == "mousedown") {
					Ext.EventManager.stoppedMouseDownEvent.fire(this)
				}
				B.stopPropagation(this.browserEvent)
			}
		},
		getCharCode : function() {
			return this.charCode || this.keyCode
		},
		getKey : function() {
			var D = this.keyCode || this.charCode;
			return Ext.isSafari ? (A[D] || D) : D
		},
		getPageX : function() {
			return this.xy[0]
		},
		getPageY : function() {
			return this.xy[1]
		},
		getTime : function() {
			if (this.browserEvent) {
				return B.getTime(this.browserEvent)
			}
			return null
		},
		getXY : function() {
			return this.xy
		},
		getTarget : function(E, F, D) {
			return E ? Ext.fly(this.target).findParent(E, F, D) : (D ? Ext
					.get(this.target) : this.target)
		},
		getRelatedTarget : function() {
			if (this.browserEvent) {
				return B.getRelatedTarget(this.browserEvent)
			}
			return null
		},
		getWheelDelta : function() {
			var D = this.browserEvent;
			var E = 0;
			if (D.wheelDelta) {
				E = D.wheelDelta / 120
			} else {
				if (D.detail) {
					E = -D.detail / 3
				}
			}
			return E
		},
		hasModifier : function() {
			return ((this.ctrlKey || this.altKey) || this.shiftKey) ? true
					: false
		},
		within : function(E, F) {
			var D = this[F ? "getRelatedTarget" : "getTarget"]();
			return D && Ext.fly(E).contains(D)
		},
		getPoint : function() {
			return new Ext.lib.Point(this.xy[0], this.xy[1])
		}
	};
	return new Ext.EventObjectImpl()
}();
(function() {
	var D = Ext.lib.Dom;
	var E = Ext.lib.Event;
	var A = Ext.lib.Anim;
	var propCache = {};
	var camelRe = /(-[a-z])/gi;
	var camelFn = function(m, a) {
		return a.charAt(1).toUpperCase()
	};
	var view = document.defaultView;
	Ext.Element = function(element, forceNew) {
		var dom = typeof element == "string" ? document.getElementById(element)
				: element;
		if (!dom) {
			return null
		}
		var id = dom.id;
		if (forceNew !== true && id && Ext.Element.cache[id]) {
			return Ext.Element.cache[id]
		}
		this.dom = dom;
		this.id = id || Ext.id(dom)
	};
	var El = Ext.Element;
	El.prototype = {
		originalDisplay : "",
		visibilityMode : 1,
		defaultUnit : "px",
		setVisibilityMode : function(visMode) {
			this.visibilityMode = visMode;
			return this
		},
		enableDisplayMode : function(display) {
			this.setVisibilityMode(El.DISPLAY);
			if (typeof display != "undefined") {
				this.originalDisplay = display
			}
			return this
		},
		findParent : function(simpleSelector, maxDepth, returnEl) {
			var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl;
			maxDepth = maxDepth || 50;
			if (typeof maxDepth != "number") {
				stopEl = Ext.getDom(maxDepth);
				maxDepth = 10
			}
			while (p && p.nodeType == 1 && depth < maxDepth && p != b
					&& p != stopEl) {
				if (dq.is(p, simpleSelector)) {
					return returnEl ? Ext.get(p) : p
				}
				depth++;
				p = p.parentNode
			}
			return null
		},
		findParentNode : function(simpleSelector, maxDepth, returnEl) {
			var p = Ext.fly(this.dom.parentNode, "_internal");
			return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null
		},
		up : function(simpleSelector, maxDepth) {
			return this.findParentNode(simpleSelector, maxDepth, true)
		},
		is : function(simpleSelector) {
			return Ext.DomQuery.is(this.dom, simpleSelector)
		},
		animate : function(args, duration, onComplete, easing, animType) {
			this.anim(args, {
				duration : duration,
				callback : onComplete,
				easing : easing
			}, animType);
			return this
		},
		anim : function(args, opt, animType, defaultDur, defaultEase, cb) {
			animType = animType || "run";
			opt = opt || {};
			var anim = Ext.lib.Anim[animType](this.dom, args,
					(opt.duration || defaultDur) || 0.35,
					(opt.easing || defaultEase) || "easeOut", function() {
						Ext.callback(cb, this);
						Ext.callback(opt.callback, opt.scope || this, [ this,
								opt ])
					}, this);
			opt.anim = anim;
			return anim
		},
		preanim : function(a, i) {
			return !a[i] ? false : (typeof a[i] == "object" ? a[i] : {
				duration : a[i + 1],
				callback : a[i + 2],
				easing : a[i + 3]
			})
		},
		clean : function(forceReclean) {
			if (this.isCleaned && forceReclean !== true) {
				return this
			}
			var ns = /\S/;
			var d = this.dom, n = d.firstChild, ni = -1;
			while (n) {
				var nx = n.nextSibling;
				if (n.nodeType == 3 && !ns.test(n.nodeValue)) {
					d.removeChild(n)
				} else {
					n.nodeIndex = ++ni
				}
				n = nx
			}
			this.isCleaned = true;
			return this
		},
		scrollIntoView : function(container, hscroll) {
			var c = Ext.getDom(container) || Ext.getBody().dom;
			var el = this.dom;
			var o = this.getOffsetsTo(c), l = o[0] + c.scrollLeft, t = o[1]
					+ c.scrollTop, b = t + el.offsetHeight, r = l
					+ el.offsetWidth;
			var ch = c.clientHeight;
			var ct = parseInt(c.scrollTop, 10);
			var cl = parseInt(c.scrollLeft, 10);
			var cb = ct + ch;
			var cr = cl + c.clientWidth;
			if (el.offsetHeight > ch || t < ct) {
				c.scrollTop = t
			} else {
				if (b > cb) {
					c.scrollTop = b - ch
				}
			}
			c.scrollTop = c.scrollTop;
			if (hscroll !== false) {
				if (el.offsetWidth > c.clientWidth || l < cl) {
					c.scrollLeft = l
				} else {
					if (r > cr) {
						c.scrollLeft = r - c.clientWidth
					}
				}
				c.scrollLeft = c.scrollLeft
			}
			return this
		},
		scrollChildIntoView : function(child, hscroll) {
			Ext.fly(child, "_scrollChildIntoView")
					.scrollIntoView(this, hscroll)
		},
		autoHeight : function(animate, duration, onComplete, easing) {
			var oldHeight = this.getHeight();
			this.clip();
			this.setHeight(1);
			setTimeout(function() {
				var height = parseInt(this.dom.scrollHeight, 10);
				if (!animate) {
					this.setHeight(height);
					this.unclip();
					if (typeof onComplete == "function") {
						onComplete()
					}
				} else {
					this.setHeight(oldHeight);
					this.setHeight(height, animate, duration, function() {
						this.unclip();
						if (typeof onComplete == "function") {
							onComplete()
						}
					}.createDelegate(this), easing)
				}
			}.createDelegate(this), 0);
			return this
		},
		contains : function(el) {
			if (!el) {
				return false
			}
			return D.isAncestor(this.dom, el.dom ? el.dom : el)
		},
		isVisible : function(deep) {
			var vis = !(this.getStyle("visibility") == "hidden" || this
					.getStyle("display") == "none");
			if (deep !== true || !vis) {
				return vis
			}
			var p = this.dom.parentNode;
			while (p && p.tagName.toLowerCase() != "body") {
				if (!Ext.fly(p, "_isVisible").isVisible()) {
					return false
				}
				p = p.parentNode
			}
			return true
		},
		select : function(selector, unique) {
			return El.select(selector, unique, this.dom)
		},
		query : function(selector) {
			return Ext.DomQuery.select(selector, this.dom)
		},
		child : function(selector, returnDom) {
			var n = Ext.DomQuery.selectNode(selector, this.dom);
			return returnDom ? n : Ext.get(n)
		},
		down : function(selector, returnDom) {
			var n = Ext.DomQuery.selectNode(" > " + selector, this.dom);
			return returnDom ? n : Ext.get(n)
		},
		initDD : function(group, config, overrides) {
			var dd = new Ext.dd.DD(Ext.id(this.dom), group, config);
			return Ext.apply(dd, overrides)
		},
		initDDProxy : function(group, config, overrides) {
			var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config);
			return Ext.apply(dd, overrides)
		},
		initDDTarget : function(group, config, overrides) {
			var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config);
			return Ext.apply(dd, overrides)
		},
		setVisible : function(visible, animate) {
			if (!animate || !A) {
				if (this.visibilityMode == El.DISPLAY) {
					this.setDisplayed(visible)
				} else {
					this.fixDisplay();
					this.dom.style.visibility = visible ? "visible" : "hidden"
				}
			} else {
				var dom = this.dom;
				var visMode = this.visibilityMode;
				if (visible) {
					this.setOpacity(0.01);
					this.setVisible(true)
				}
				this.anim( {
					opacity : {
						to : (visible ? 1 : 0)
					}
				}, this.preanim(arguments, 1), null, 0.35, "easeIn",
						function() {
							if (!visible) {
								if (visMode == El.DISPLAY) {
									dom.style.display = "none"
								} else {
									dom.style.visibility = "hidden"
								}
								Ext.get(dom).setOpacity(1)
							}
						})
			}
			return this
		},
		isDisplayed : function() {
			return this.getStyle("display") != "none"
		},
		toggle : function(animate) {
			this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
			return this
		},
		setDisplayed : function(value) {
			if (typeof value == "boolean") {
				value = value ? this.originalDisplay : "none"
			}
			this.setStyle("display", value);
			return this
		},
		focus : function() {
			try {
				this.dom.focus()
			} catch (e) {
			}
			return this
		},
		blur : function() {
			try {
				this.dom.blur()
			} catch (e) {
			}
			return this
		},
		addClass : function(className) {
			if (Ext.isArray(className)) {
				for ( var i = 0, len = className.length; i < len; i++) {
					this.addClass(className[i])
				}
			} else {
				if (className && !this.hasClass(className)) {
					this.dom.className = this.dom.className + " " + className
				}
			}
			return this
		},
		radioClass : function(className) {
			var siblings = this.dom.parentNode.childNodes;
			for ( var i = 0; i < siblings.length; i++) {
				var s = siblings[i];
				if (s.nodeType == 1) {
					Ext.get(s).removeClass(className)
				}
			}
			this.addClass(className);
			return this
		},
		removeClass : function(className) {
			if (!className || !this.dom.className) {
				return this
			}
			if (Ext.isArray(className)) {
				for ( var i = 0, len = className.length; i < len; i++) {
					this.removeClass(className[i])
				}
			} else {
				if (this.hasClass(className)) {
					var re = this.classReCache[className];
					if (!re) {
						re = new RegExp(
								"(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
						this.classReCache[className] = re
					}
					this.dom.className = this.dom.className.replace(re, " ")
				}
			}
			return this
		},
		classReCache : {},
		toggleClass : function(className) {
			if (this.hasClass(className)) {
				this.removeClass(className)
			} else {
				this.addClass(className)
			}
			return this
		},
		hasClass : function(className) {
			return className
					&& (" " + this.dom.className + " ").indexOf(" " + className
							+ " ") != -1
		},
		replaceClass : function(oldClassName, newClassName) {
			this.removeClass(oldClassName);
			this.addClass(newClassName);
			return this
		},
		getStyles : function() {
			var a = arguments, len = a.length, r = {};
			for ( var i = 0; i < len; i++) {
				r[a[i]] = this.getStyle(a[i])
			}
			return r
		},
		getStyle : function() {
			return view && view.getComputedStyle ? function(prop) {
				var el = this.dom, v, cs, camel;
				if (prop == "float") {
					prop = "cssFloat"
				}
				if (v = el.style[prop]) {
					return v
				}
				if (cs = view.getComputedStyle(el, "")) {
					if (!(camel = propCache[prop])) {
						camel = propCache[prop] = prop
								.replace(camelRe, camelFn)
					}
					return cs[camel]
				}
				return null
			}
					: function(prop) {
						var el = this.dom, v, cs, camel;
						if (prop == "opacity") {
							if (typeof el.style.filter == "string") {
								var m = el.style.filter
										.match(/alpha\(opacity=(.*)\)/i);
								if (m) {
									var fv = parseFloat(m[1]);
									if (!isNaN(fv)) {
										return fv ? fv / 100 : 0
									}
								}
							}
							return 1
						} else {
							if (prop == "float") {
								prop = "styleFloat"
							}
						}
						if (!(camel = propCache[prop])) {
							camel = propCache[prop] = prop.replace(camelRe,
									camelFn)
						}
						if (v = el.style[camel]) {
							return v
						}
						if (cs = el.currentStyle) {
							return cs[camel]
						}
						return null
					}
		}(),
		setStyle : function(prop, value) {
			if (typeof prop == "string") {
				var camel;
				if (!(camel = propCache[prop])) {
					camel = propCache[prop] = prop.replace(camelRe, camelFn)
				}
				if (camel == "opacity") {
					this.setOpacity(value)
				} else {
					this.dom.style[camel] = value
				}
			} else {
				for ( var style in prop) {
					if (typeof prop[style] != "function") {
						this.setStyle(style, prop[style])
					}
				}
			}
			return this
		},
		applyStyles : function(style) {
			Ext.DomHelper.applyStyles(this.dom, style);
			return this
		},
		getX : function() {
			return D.getX(this.dom)
		},
		getY : function() {
			return D.getY(this.dom)
		},
		getXY : function() {
			return D.getXY(this.dom)
		},
		getOffsetsTo : function(el) {
			var o = this.getXY();
			var e = Ext.fly(el, "_internal").getXY();
			return [ o[0] - e[0], o[1] - e[1] ]
		},
		setX : function(x, animate) {
			if (!animate || !A) {
				D.setX(this.dom, x)
			} else {
				this.setXY( [ x, this.getY() ], this.preanim(arguments, 1))
			}
			return this
		},
		setY : function(y, animate) {
			if (!animate || !A) {
				D.setY(this.dom, y)
			} else {
				this.setXY( [ this.getX(), y ], this.preanim(arguments, 1))
			}
			return this
		},
		setLeft : function(left) {
			this.setStyle("left", this.addUnits(left));
			return this
		},
		setTop : function(top) {
			this.setStyle("top", this.addUnits(top));
			return this
		},
		setRight : function(right) {
			this.setStyle("right", this.addUnits(right));
			return this
		},
		setBottom : function(bottom) {
			this.setStyle("bottom", this.addUnits(bottom));
			return this
		},
		setXY : function(pos, animate) {
			if (!animate || !A) {
				D.setXY(this.dom, pos)
			} else {
				this.anim( {
					points : {
						to : pos
					}
				}, this.preanim(arguments, 1), "motion")
			}
			return this
		},
		setLocation : function(x, y, animate) {
			this.setXY( [ x, y ], this.preanim(arguments, 2));
			return this
		},
		moveTo : function(x, y, animate) {
			this.setXY( [ x, y ], this.preanim(arguments, 2));
			return this
		},
		getRegion : function() {
			return D.getRegion(this.dom)
		},
		getHeight : function(contentHeight) {
			var h = this.dom.offsetHeight || 0;
			h = contentHeight !== true ? h : h - this.getBorderWidth("tb")
					- this.getPadding("tb");
			return h < 0 ? 0 : h
		},
		getWidth : function(contentWidth) {
			var w = this.dom.offsetWidth || 0;
			w = contentWidth !== true ? w : w - this.getBorderWidth("lr")
					- this.getPadding("lr");
			return w < 0 ? 0 : w
		},
		getComputedHeight : function() {
			var h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
			if (!h) {
				h = parseInt(this.getStyle("height"), 10) || 0;
				if (!this.isBorderBox()) {
					h += this.getFrameWidth("tb")
				}
			}
			return h
		},
		getComputedWidth : function() {
			var w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
			if (!w) {
				w = parseInt(this.getStyle("width"), 10) || 0;
				if (!this.isBorderBox()) {
					w += this.getFrameWidth("lr")
				}
			}
			return w
		},
		getSize : function(contentSize) {
			return {
				width : this.getWidth(contentSize),
				height : this.getHeight(contentSize)
			}
		},
		getStyleSize : function() {
			var w, h, d = this.dom, s = d.style;
			if (s.width && s.width != "auto") {
				w = parseInt(s.width, 10);
				if (Ext.isBorderBox) {
					w -= this.getFrameWidth("lr")
				}
			}
			if (s.height && s.height != "auto") {
				h = parseInt(s.height, 10);
				if (Ext.isBorderBox) {
					h -= this.getFrameWidth("tb")
				}
			}
			return {
				width : w || this.getWidth(true),
				height : h || this.getHeight(true)
			}
		},
		getViewSize : function() {
			var d = this.dom, doc = document, aw = 0, ah = 0;
			if (d == doc || d == doc.body) {
				return {
					width : D.getViewWidth(),
					height : D.getViewHeight()
				}
			} else {
				return {
					width : d.clientWidth,
					height : d.clientHeight
				}
			}
		},
		getValue : function(asNumber) {
			return asNumber ? parseInt(this.dom.value, 10) : this.dom.value
		},
		adjustWidth : function(width) {
			if (typeof width == "number") {
				if (this.autoBoxAdjust && !this.isBorderBox()) {
					width -= (this.getBorderWidth("lr") + this.getPadding("lr"))
				}
				if (width < 0) {
					width = 0
				}
			}
			return width
		},
		adjustHeight : function(height) {
			if (typeof height == "number") {
				if (this.autoBoxAdjust && !this.isBorderBox()) {
					height -= (this.getBorderWidth("tb") + this
							.getPadding("tb"))
				}
				if (height < 0) {
					height = 0
				}
			}
			return height
		},
		setWidth : function(width, animate) {
			width = this.adjustWidth(width);
			if (!animate || !A) {
				this.dom.style.width = this.addUnits(width)
			} else {
				this.anim( {
					width : {
						to : width
					}
				}, this.preanim(arguments, 1))
			}
			return this
		},
		setHeight : function(height, animate) {
			height = this.adjustHeight(height);
			if (!animate || !A) {
				this.dom.style.height = this.addUnits(height)
			} else {
				this.anim( {
					height : {
						to : height
					}
				}, this.preanim(arguments, 1))
			}
			return this
		},
		setSize : function(width, height, animate) {
			if (typeof width == "object") {
				height = width.height;
				width = width.width
			}
			width = this.adjustWidth(width);
			height = this.adjustHeight(height);
			if (!animate || !A) {
				this.dom.style.width = this.addUnits(width);
				this.dom.style.height = this.addUnits(height)
			} else {
				this.anim( {
					width : {
						to : width
					},
					height : {
						to : height
					}
				}, this.preanim(arguments, 2))
			}
			return this
		},
		setBounds : function(x, y, width, height, animate) {
			if (!animate || !A) {
				this.setSize(width, height);
				this.setLocation(x, y)
			} else {
				width = this.adjustWidth(width);
				height = this.adjustHeight(height);
				this.anim( {
					points : {
						to : [ x, y ]
					},
					width : {
						to : width
					},
					height : {
						to : height
					}
				}, this.preanim(arguments, 4), "motion")
			}
			return this
		},
		setRegion : function(region, animate) {
			this.setBounds(region.left, region.top, region.right - region.left,
					region.bottom - region.top, this.preanim(arguments, 1));
			return this
		},
		addListener : function(eventName, fn, scope, options) {
			Ext.EventManager
					.on(this.dom, eventName, fn, scope || this, options)
		},
		removeListener : function(eventName, fn, scope) {
			Ext.EventManager.removeListener(this.dom, eventName, fn, scope
					|| this);
			return this
		},
		removeAllListeners : function() {
			Ext.EventManager.removeAll(this.dom);
			return this
		},
		relayEvent : function(eventName, observable) {
			this.on(eventName, function(e) {
				observable.fireEvent(eventName, e)
			})
		},
		setOpacity : function(opacity, animate) {
			if (!animate || !A) {
				var s = this.dom.style;
				if (Ext.isIE) {
					s.zoom = 1;
					s.filter = (s.filter || "")
							.replace(/alpha\([^\)]*\)/gi, "")
							+ (opacity == 1 ? "" : " alpha(opacity=" + opacity
									* 100 + ")")
				} else {
					s.opacity = opacity
				}
			} else {
				this.anim( {
					opacity : {
						to : opacity
					}
				}, this.preanim(arguments, 1), null, 0.35, "easeIn")
			}
			return this
		},
		getLeft : function(local) {
			if (!local) {
				return this.getX()
			} else {
				return parseInt(this.getStyle("left"), 10) || 0
			}
		},
		getRight : function(local) {
			if (!local) {
				return this.getX() + this.getWidth()
			} else {
				return (this.getLeft(true) + this.getWidth()) || 0
			}
		},
		getTop : function(local) {
			if (!local) {
				return this.getY()
			} else {
				return parseInt(this.getStyle("top"), 10) || 0
			}
		},
		getBottom : function(local) {
			if (!local) {
				return this.getY() + this.getHeight()
			} else {
				return (this.getTop(true) + this.getHeight()) || 0
			}
		},
		position : function(pos, zIndex, x, y) {
			if (!pos) {
				if (this.getStyle("position") == "static") {
					this.setStyle("position", "relative")
				}
			} else {
				this.setStyle("position", pos)
			}
			if (zIndex) {
				this.setStyle("z-index", zIndex)
			}
			if (x !== undefined && y !== undefined) {
				this.setXY( [ x, y ])
			} else {
				if (x !== undefined) {
					this.setX(x)
				} else {
					if (y !== undefined) {
						this.setY(y)
					}
				}
			}
		},
		clearPositioning : function(value) {
			value = value || "";
			this.setStyle( {
				"left" : value,
				"right" : value,
				"top" : value,
				"bottom" : value,
				"z-index" : "",
				"position" : "static"
			});
			return this
		},
		getPositioning : function() {
			var l = this.getStyle("left");
			var t = this.getStyle("top");
			return {
				"position" : this.getStyle("position"),
				"left" : l,
				"right" : l ? "" : this.getStyle("right"),
				"top" : t,
				"bottom" : t ? "" : this.getStyle("bottom"),
				"z-index" : this.getStyle("z-index")
			}
		},
		getBorderWidth : function(side) {
			return this.addStyles(side, El.borders)
		},
		getPadding : function(side) {
			return this.addStyles(side, El.paddings)
		},
		setPositioning : function(pc) {
			this.applyStyles(pc);
			if (pc.right == "auto") {
				this.dom.style.right = ""
			}
			if (pc.bottom == "auto") {
				this.dom.style.bottom = ""
			}
			return this
		},
		fixDisplay : function() {
			if (this.getStyle("display") == "none") {
				this.setStyle("visibility", "hidden");
				this.setStyle("display", this.originalDisplay);
				if (this.getStyle("display") == "none") {
					this.setStyle("display", "block")
				}
			}
		},
		setOverflow : function(v) {
			if (v == "auto" && Ext.isMac && Ext.isGecko2) {
				this.dom.style.overflow = "hidden";
				(function() {
					this.dom.style.overflow = "auto"
				}).defer(1, this)
			} else {
				this.dom.style.overflow = v
			}
		},
		setLeftTop : function(left, top) {
			this.dom.style.left = this.addUnits(left);
			this.dom.style.top = this.addUnits(top);
			return this
		},
		move : function(direction, distance, animate) {
			var xy = this.getXY();
			direction = direction.toLowerCase();
			switch (direction) {
			case "l":
			case "left":
				this
						.moveTo(xy[0] - distance, xy[1], this.preanim(
								arguments, 2));
				break;
			case "r":
			case "right":
				this
						.moveTo(xy[0] + distance, xy[1], this.preanim(
								arguments, 2));
				break;
			case "t":
			case "top":
			case "up":
				this
						.moveTo(xy[0], xy[1] - distance, this.preanim(
								arguments, 2));
				break;
			case "b":
			case "bottom":
			case "down":
				this
						.moveTo(xy[0], xy[1] + distance, this.preanim(
								arguments, 2));
				break
			}
			return this
		},
		clip : function() {
			if (!this.isClipped) {
				this.isClipped = true;
				this.originalClip = {
					"o" : this.getStyle("overflow"),
					"x" : this.getStyle("overflow-x"),
					"y" : this.getStyle("overflow-y")
				};
				this.setStyle("overflow", "hidden");
				this.setStyle("overflow-x", "hidden");
				this.setStyle("overflow-y", "hidden")
			}
			return this
		},
		unclip : function() {
			if (this.isClipped) {
				this.isClipped = false;
				var o = this.originalClip;
				if (o.o) {
					this.setStyle("overflow", o.o)
				}
				if (o.x) {
					this.setStyle("overflow-x", o.x)
				}
				if (o.y) {
					this.setStyle("overflow-y", o.y)
				}
			}
			return this
		},
		getAnchorXY : function(anchor, local, s) {
			var w, h, vp = false;
			if (!s) {
				var d = this.dom;
				if (d == document.body || d == document) {
					vp = true;
					w = D.getViewWidth();
					h = D.getViewHeight()
				} else {
					w = this.getWidth();
					h = this.getHeight()
				}
			} else {
				w = s.width;
				h = s.height
			}
			var x = 0, y = 0, r = Math.round;
			switch ((anchor || "tl").toLowerCase()) {
			case "c":
				x = r(w * 0.5);
				y = r(h * 0.5);
				break;
			case "t":
				x = r(w * 0.5);
				y = 0;
				break;
			case "l":
				x = 0;
				y = r(h * 0.5);
				break;
			case "r":
				x = w;
				y = r(h * 0.5);
				break;
			case "b":
				x = r(w * 0.5);
				y = h;
				break;
			case "tl":
				x = 0;
				y = 0;
				break;
			case "bl":
				x = 0;
				y = h;
				break;
			case "br":
				x = w;
				y = h;
				break;
			case "tr":
				x = w;
				y = 0;
				break
			}
			if (local === true) {
				return [ x, y ]
			}
			if (vp) {
				var sc = this.getScroll();
				return [ x + sc.left, y + sc.top ]
			}
			var o = this.getXY();
			return [ x + o[0], y + o[1] ]
		},
		getAlignToXY : function(el, p, o) {
			el = Ext.get(el);
			if (!el || !el.dom) {
				throw "Element.alignToXY with an element that doesn't exist"
			}
			var d = this.dom;
			var c = false;
			var p1 = "", p2 = "";
			o = o || [ 0, 0 ];
			if (!p) {
				p = "tl-bl"
			} else {
				if (p == "?") {
					p = "tl-bl?"
				} else {
					if (p.indexOf("-") == -1) {
						p = "tl-" + p
					}
				}
			}
			p = p.toLowerCase();
			var m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
			if (!m) {
				throw "Element.alignTo with an invalid alignment " + p
			}
			p1 = m[1];
			p2 = m[2];
			c = !!m[3];
			var a1 = this.getAnchorXY(p1, true);
			var a2 = el.getAnchorXY(p2, false);
			var x = a2[0] - a1[0] + o[0];
			var y = a2[1] - a1[1] + o[1];
			if (c) {
				var w = this.getWidth(), h = this.getHeight(), r = el
						.getRegion();
				var dw = D.getViewWidth() - 5, dh = D.getViewHeight() - 5;
				var p1y = p1.charAt(0), p1x = p1.charAt(p1.length - 1);
				var p2y = p2.charAt(0), p2x = p2.charAt(p2.length - 1);
				var swapY = ((p1y == "t" && p2y == "b") || (p1y == "b" && p2y == "t"));
				var swapX = ((p1x == "r" && p2x == "l") || (p1x == "l" && p2x == "r"));
				var doc = document;
				var scrollX = (doc.documentElement.scrollLeft
						|| doc.body.scrollLeft || 0) + 5;
				var scrollY = (doc.documentElement.scrollTop
						|| doc.body.scrollTop || 0) + 5;
				if ((x + w) > dw + scrollX) {
					x = swapX ? r.left - w : dw + scrollX - w
				}
				if (x < scrollX) {
					x = swapX ? r.right : scrollX
				}
				if ((y + h) > dh + scrollY) {
					y = swapY ? r.top - h : dh + scrollY - h
				}
				if (y < scrollY) {
					y = swapY ? r.bottom : scrollY
				}
			}
			return [ x, y ]
		},
		getConstrainToXY : function() {
			var os = {
				top : 0,
				left : 0,
				bottom : 0,
				right : 0
			};
			return function(el, local, offsets, proposedXY) {
				el = Ext.get(el);
				offsets = offsets ? Ext.applyIf(offsets, os) : os;
				var vw, vh, vx = 0, vy = 0;
				if (el.dom == document.body || el.dom == document) {
					vw = Ext.lib.Dom.getViewWidth();
					vh = Ext.lib.Dom.getViewHeight()
				} else {
					vw = el.dom.clientWidth;
					vh = el.dom.clientHeight;
					if (!local) {
						var vxy = el.getXY();
						vx = vxy[0];
						vy = vxy[1]
					}
				}
				var s = el.getScroll();
				vx += offsets.left + s.left;
				vy += offsets.top + s.top;
				vw -= offsets.right;
				vh -= offsets.bottom;
				var vr = vx + vw;
				var vb = vy + vh;
				var xy = proposedXY
						|| (!local ? this.getXY() : [ this.getLeft(true),
								this.getTop(true) ]);
				var x = xy[0], y = xy[1];
				var w = this.dom.offsetWidth, h = this.dom.offsetHeight;
				var moved = false;
				if ((x + w) > vr) {
					x = vr - w;
					moved = true
				}
				if ((y + h) > vb) {
					y = vb - h;
					moved = true
				}
				if (x < vx) {
					x = vx;
					moved = true
				}
				if (y < vy) {
					y = vy;
					moved = true
				}
				return moved ? [ x, y ] : false
			}
		}(),
		adjustForConstraints : function(xy, parent, offsets) {
			return this
					.getConstrainToXY(parent || document, false, offsets, xy)
					|| xy
		},
		alignTo : function(element, position, offsets, animate) {
			var xy = this.getAlignToXY(element, position, offsets);
			this.setXY(xy, this.preanim(arguments, 3));
			return this
		},
		anchorTo : function(el, alignment, offsets, animate, monitorScroll,
				callback) {
			var action = function() {
				this.alignTo(el, alignment, offsets, animate);
				Ext.callback(callback, this)
			};
			Ext.EventManager.onWindowResize(action, this);
			var tm = typeof monitorScroll;
			if (tm != "undefined") {
				Ext.EventManager.on(window, "scroll", action, this, {
					buffer : tm == "number" ? monitorScroll : 50
				})
			}
			action.call(this);
			return this
		},
		clearOpacity : function() {
			if (window.ActiveXObject) {
				if (typeof this.dom.style.filter == "string"
						&& (/alpha/i).test(this.dom.style.filter)) {
					this.dom.style.filter = ""
				}
			} else {
				this.dom.style.opacity = "";
				this.dom.style["-moz-opacity"] = "";
				this.dom.style["-khtml-opacity"] = ""
			}
			return this
		},
		hide : function(animate) {
			this.setVisible(false, this.preanim(arguments, 0));
			return this
		},
		show : function(animate) {
			this.setVisible(true, this.preanim(arguments, 0));
			return this
		},
		addUnits : function(size) {
			return Ext.Element.addUnits(size, this.defaultUnit)
		},
		update : function(html, loadScripts, callback) {
			if (typeof html == "undefined") {
				html = ""
			}
			if (loadScripts !== true) {
				this.dom.innerHTML = html;
				if (typeof callback == "function") {
					callback()
				}
				return this
			}
			var id = Ext.id();
			var dom = this.dom;
			html += "<span id=\"" + id + "\"></span>";
			E.onAvailable(id, function() {
				var hd = document.getElementsByTagName("head")[0];
				var re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
				var srcRe = /\ssrc=([\'\"])(.*?)\1/i;
				var typeRe = /\stype=([\'\"])(.*?)\1/i;
				var match;
				while (match = re.exec(html)) {
					var attrs = match[1];
					var srcMatch = attrs ? attrs.match(srcRe) : false;
					if (srcMatch && srcMatch[2]) {
						var s = document.createElement("script");
						s.src = srcMatch[2];
						var typeMatch = attrs.match(typeRe);
						if (typeMatch && typeMatch[2]) {
							s.type = typeMatch[2]
						}
						hd.appendChild(s)
					} else {
						if (match[2] && match[2].length > 0) {
							if (window.execScript) {
								window.execScript(match[2])
							} else {
								window.eval(match[2])
							}
						}
					}
				}
				var el = document.getElementById(id);
				if (el) {
					Ext.removeNode(el)
				}
				if (typeof callback == "function") {
					callback()
				}
			});
			dom.innerHTML = html.replace(
					/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
			return this
		},
		load : function() {
			var um = this.getUpdater();
			um.update.apply(um, arguments);
			return this
		},
		getUpdater : function() {
			if (!this.updateManager) {
				this.updateManager = new Ext.Updater(this)
			}
			return this.updateManager
		},
		unselectable : function() {
			this.dom.unselectable = "on";
			this.swallowEvent("selectstart", true);
			this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
			this.addClass("x-unselectable");
			return this
		},
		getCenterXY : function() {
			return this.getAlignToXY(document, "c-c")
		},
		center : function(centerIn) {
			this.alignTo(centerIn || document, "c-c");
			return this
		},
		isBorderBox : function() {
			return noBoxAdjust[this.dom.tagName.toLowerCase()]
					|| Ext.isBorderBox
		},
		getBox : function(contentBox, local) {
			var xy;
			if (!local) {
				xy = this.getXY()
			} else {
				var left = parseInt(this.getStyle("left"), 10) || 0;
				var top = parseInt(this.getStyle("top"), 10) || 0;
				xy = [ left, top ]
			}
			var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
			if (!contentBox) {
				bx = {
					x : xy[0],
					y : xy[1],
					0 : xy[0],
					1 : xy[1],
					width : w,
					height : h
				}
			} else {
				var l = this.getBorderWidth("l") + this.getPadding("l");
				var r = this.getBorderWidth("r") + this.getPadding("r");
				var t = this.getBorderWidth("t") + this.getPadding("t");
				var b = this.getBorderWidth("b") + this.getPadding("b");
				bx = {
					x : xy[0] + l,
					y : xy[1] + t,
					0 : xy[0] + l,
					1 : xy[1] + t,
					width : w - (l + r),
					height : h - (t + b)
				}
			}
			bx.right = bx.x + bx.width;
			bx.bottom = bx.y + bx.height;
			return bx
		},
		getFrameWidth : function(sides, onlyContentBox) {
			return onlyContentBox && Ext.isBorderBox ? 0 : (this
					.getPadding(sides) + this.getBorderWidth(sides))
		},
		setBox : function(box, adjust, animate) {
			var w = box.width, h = box.height;
			if ((adjust && !this.autoBoxAdjust) && !this.isBorderBox()) {
				w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
				h -= (this.getBorderWidth("tb") + this.getPadding("tb"))
			}
			this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2));
			return this
		},
		repaint : function() {
			var dom = this.dom;
			this.addClass("x-repaint");
			setTimeout(function() {
				Ext.get(dom).removeClass("x-repaint")
			}, 1);
			return this
		},
		getMargins : function(side) {
			if (!side) {
				return {
					top : parseInt(this.getStyle("margin-top"), 10) || 0,
					left : parseInt(this.getStyle("margin-left"), 10) || 0,
					bottom : parseInt(this.getStyle("margin-bottom"), 10) || 0,
					right : parseInt(this.getStyle("margin-right"), 10) || 0
				}
			} else {
				return this.addStyles(side, El.margins)
			}
		},
		addStyles : function(sides, styles) {
			var val = 0, v, w;
			for ( var i = 0, len = sides.length; i < len; i++) {
				v = this.getStyle(styles[sides.charAt(i)]);
				if (v) {
					w = parseInt(v, 10);
					if (w) {
						val += (w >= 0 ? w : -1 * w)
					}
				}
			}
			return val
		},
		createProxy : function(config, renderTo, matchBox) {
			config = typeof config == "object" ? config : {
				tag : "div",
				cls : config
			};
			var proxy;
			if (renderTo) {
				proxy = Ext.DomHelper.append(renderTo, config, true)
			} else {
				proxy = Ext.DomHelper.insertBefore(this.dom, config, true)
			}
			if (matchBox) {
				proxy.setBox(this.getBox())
			}
			return proxy
		},
		mask : function(msg, msgCls) {
			if (this.getStyle("position") == "static") {
				this.setStyle("position", "relative")
			}
			if (this._maskMsg) {
				this._maskMsg.remove()
			}
			if (this._mask) {
				this._mask.remove()
			}
			this._mask = Ext.DomHelper.append(this.dom, {
				cls : "ext-el-mask"
			}, true);
			this.addClass("x-masked");
			this._mask.setDisplayed(true);
			if (typeof msg == "string") {
				this._maskMsg = Ext.DomHelper.append(this.dom, {
					cls : "ext-el-mask-msg",
					cn : {
						tag : "div"
					}
				}, true);
				var mm = this._maskMsg;
				mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls
						: "ext-el-mask-msg";
				mm.dom.firstChild.innerHTML = msg;
				mm.setDisplayed(true);
				mm.center(this)
			}
			if (Ext.isIE && !(Ext.isIE7 && Ext.isStrict)
					&& this.getStyle("height") == "auto") {
				this._mask.setSize(this.dom.clientWidth, this.getHeight())
			}
			return this._mask
		},
		unmask : function() {
			if (this._mask) {
				if (this._maskMsg) {
					this._maskMsg.remove();
					delete this._maskMsg
				}
				this._mask.remove();
				delete this._mask
			}
			this.removeClass("x-masked")
		},
		isMasked : function() {
			return this._mask && this._mask.isVisible()
		},
		createShim : function() {
			var el = document.createElement("iframe");
			el.frameBorder = "0";
			el.className = "ext-shim";
			if (Ext.isIE && Ext.isSecure) {
				el.src = Ext.SSL_SECURE_URL
			}
			var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));
			shim.autoBoxAdjust = false;
			return shim
		},
		remove : function() {
			Ext.removeNode(this.dom);
			delete El.cache[this.dom.id]
		},
		hover : function(overFn, outFn, scope) {
			var preOverFn = function(e) {
				if (!e.within(this, true)) {
					overFn.apply(scope || this, arguments)
				}
			};
			var preOutFn = function(e) {
				if (!e.within(this, true)) {
					outFn.apply(scope || this, arguments)
				}
			};
			this.on("mouseover", preOverFn, this.dom);
			this.on("mouseout", preOutFn, this.dom);
			return this
		},
		addClassOnOver : function(className) {
			this.hover(function() {
				Ext.fly(this, "_internal").addClass(className)
			}, function() {
				Ext.fly(this, "_internal").removeClass(className)
			});
			return this
		},
		addClassOnFocus : function(className) {
			this.on("focus", function() {
				Ext.fly(this, "_internal").addClass(className)
			}, this.dom);
			this.on("blur", function() {
				Ext.fly(this, "_internal").removeClass(className)
			}, this.dom);
			return this
		},
		addClassOnClick : function(className) {
			var dom = this.dom;
			this.on("mousedown", function() {
				Ext.fly(dom, "_internal").addClass(className);
				var d = Ext.getDoc();
				var fn = function() {
					Ext.fly(dom, "_internal").removeClass(className);
					d.removeListener("mouseup", fn)
				};
				d.on("mouseup", fn)
			});
			return this
		},
		swallowEvent : function(eventName, preventDefault) {
			var fn = function(e) {
				e.stopPropagation();
				if (preventDefault) {
					e.preventDefault()
				}
			};
			if (Ext.isArray(eventName)) {
				for ( var i = 0, len = eventName.length; i < len; i++) {
					this.on(eventName[i], fn)
				}
				return this
			}
			this.on(eventName, fn);
			return this
		},
		parent : function(selector, returnDom) {
			return this.matchNode("parentNode", "parentNode", selector,
					returnDom)
		},
		next : function(selector, returnDom) {
			return this.matchNode("nextSibling", "nextSibling", selector,
					returnDom)
		},
		prev : function(selector, returnDom) {
			return this.matchNode("previousSibling", "previousSibling",
					selector, returnDom)
		},
		first : function(selector, returnDom) {
			return this.matchNode("nextSibling", "firstChild", selector,
					returnDom)
		},
		last : function(selector, returnDom) {
			return this.matchNode("previousSibling", "lastChild", selector,
					returnDom)
		},
		matchNode : function(dir, start, selector, returnDom) {
			var n = this.dom[start];
			while (n) {
				if (n.nodeType == 1
						&& (!selector || Ext.DomQuery.is(n, selector))) {
					return !returnDom ? Ext.get(n) : n
				}
				n = n[dir]
			}
			return null
		},
		appendChild : function(el) {
			el = Ext.get(el);
			el.appendTo(this);
			return this
		},
		createChild : function(config, insertBefore, returnDom) {
			config = config || {
				tag : "div"
			};
			if (insertBefore) {
				return Ext.DomHelper.insertBefore(insertBefore, config,
						returnDom !== true)
			}
			return Ext.DomHelper[!this.dom.firstChild ? "overwrite" : "append"]
					(this.dom, config, returnDom !== true)
		},
		appendTo : function(el) {
			el = Ext.getDom(el);
			el.appendChild(this.dom);
			return this
		},
		insertBefore : function(el) {
			el = Ext.getDom(el);
			el.parentNode.insertBefore(this.dom, el);
			return this
		},
		insertAfter : function(el) {
			el = Ext.getDom(el);
			el.parentNode.insertBefore(this.dom, el.nextSibling);
			return this
		},
		insertFirst : function(el, returnDom) {
			el = el || {};
			if (typeof el == "object" && !el.nodeType && !el.dom) {
				return this.createChild(el, this.dom.firstChild, returnDom)
			} else {
				el = Ext.getDom(el);
				this.dom.insertBefore(el, this.dom.firstChild);
				return !returnDom ? Ext.get(el) : el
			}
		},
		insertSibling : function(el, where, returnDom) {
			var rt;
			if (Ext.isArray(el)) {
				for ( var i = 0, len = el.length; i < len; i++) {
					rt = this.insertSibling(el[i], where, returnDom)
				}
				return rt
			}
			where = where ? where.toLowerCase() : "before";
			el = el || {};
			var refNode = where == "before" ? this.dom : this.dom.nextSibling;
			if (typeof el == "object" && !el.nodeType && !el.dom) {
				if (where == "after" && !this.dom.nextSibling) {
					rt = Ext.DomHelper.append(this.dom.parentNode, el,
							!returnDom)
				} else {
					rt = Ext.DomHelper[where == "after" ? "insertAfter"
							: "insertBefore"](this.dom, el, !returnDom)
				}
			} else {
				rt = this.dom.parentNode.insertBefore(Ext.getDom(el), refNode);
				if (!returnDom) {
					rt = Ext.get(rt)
				}
			}
			return rt
		},
		wrap : function(config, returnDom) {
			if (!config) {
				config = {
					tag : "div"
				}
			}
			var newEl = Ext.DomHelper
					.insertBefore(this.dom, config, !returnDom);
			newEl.dom ? newEl.dom.appendChild(this.dom) : newEl
					.appendChild(this.dom);
			return newEl
		},
		replace : function(el) {
			el = Ext.get(el);
			this.insertBefore(el);
			el.remove();
			return this
		},
		replaceWith : function(el) {
			if (typeof el == "object" && !el.nodeType && !el.dom) {
				el = this.insertSibling(el, "before")
			} else {
				el = Ext.getDom(el);
				this.dom.parentNode.insertBefore(el, this.dom)
			}
			El.uncache(this.id);
			this.dom.parentNode.removeChild(this.dom);
			this.dom = el;
			this.id = Ext.id(el);
			El.cache[this.id] = this;
			return this
		},
		insertHtml : function(where, html, returnEl) {
			var el = Ext.DomHelper.insertHtml(where, this.dom, html);
			return returnEl ? Ext.get(el) : el
		},
		set : function(o, useSet) {
			var el = this.dom;
			useSet = typeof useSet == "undefined" ? (el.setAttribute ? true
					: false) : useSet;
			for ( var attr in o) {
				if (attr == "style" || typeof o[attr] == "function") {
					continue
				}
				if (attr == "cls") {
					el.className = o["cls"]
				} else {
					if (o.hasOwnProperty(attr)) {
						if (useSet) {
							el.setAttribute(attr, o[attr])
						} else {
							el[attr] = o[attr]
						}
					}
				}
			}
			if (o.style) {
				Ext.DomHelper.applyStyles(el, o.style)
			}
			return this
		},
		addKeyListener : function(key, fn, scope) {
			var config;
			if (typeof key != "object" || Ext.isArray(key)) {
				config = {
					key : key,
					fn : fn,
					scope : scope
				}
			} else {
				config = {
					key : key.key,
					shift : key.shift,
					ctrl : key.ctrl,
					alt : key.alt,
					fn : fn,
					scope : scope
				}
			}
			return new Ext.KeyMap(this, config)
		},
		addKeyMap : function(config) {
			return new Ext.KeyMap(this, config)
		},
		isScrollable : function() {
			var dom = this.dom;
			return dom.scrollHeight > dom.clientHeight
					|| dom.scrollWidth > dom.clientWidth
		},
		scrollTo : function(side, value, animate) {
			var prop = side.toLowerCase() == "left" ? "scrollLeft"
					: "scrollTop";
			if (!animate || !A) {
				this.dom[prop] = value
			} else {
				var to = prop == "scrollLeft" ? [ value, this.dom.scrollTop ]
						: [ this.dom.scrollLeft, value ];
				this.anim( {
					scroll : {
						"to" : to
					}
				}, this.preanim(arguments, 2), "scroll")
			}
			return this
		},
		scroll : function(direction, distance, animate) {
			if (!this.isScrollable()) {
				return
			}
			var el = this.dom;
			var l = el.scrollLeft, t = el.scrollTop;
			var w = el.scrollWidth, h = el.scrollHeight;
			var cw = el.clientWidth, ch = el.clientHeight;
			direction = direction.toLowerCase();
			var scrolled = false;
			var a = this.preanim(arguments, 2);
			switch (direction) {
			case "l":
			case "left":
				if (w - l > cw) {
					var v = Math.min(l + distance, w - cw);
					this.scrollTo("left", v, a);
					scrolled = true
				}
				break;
			case "r":
			case "right":
				if (l > 0) {
					var v = Math.max(l - distance, 0);
					this.scrollTo("left", v, a);
					scrolled = true
				}
				break;
			case "t":
			case "top":
			case "up":
				if (t > 0) {
					var v = Math.max(t - distance, 0);
					this.scrollTo("top", v, a);
					scrolled = true
				}
				break;
			case "b":
			case "bottom":
			case "down":
				if (h - t > ch) {
					var v = Math.min(t + distance, h - ch);
					this.scrollTo("top", v, a);
					scrolled = true
				}
				break
			}
			return scrolled
		},
		translatePoints : function(x, y) {
			if (typeof x == "object" || Ext.isArray(x)) {
				y = x[1];
				x = x[0]
			}
			var p = this.getStyle("position");
			var o = this.getXY();
			var l = parseInt(this.getStyle("left"), 10);
			var t = parseInt(this.getStyle("top"), 10);
			if (isNaN(l)) {
				l = (p == "relative") ? 0 : this.dom.offsetLeft
			}
			if (isNaN(t)) {
				t = (p == "relative") ? 0 : this.dom.offsetTop
			}
			return {
				left : (x - o[0] + l),
				top : (y - o[1] + t)
			}
		},
		getScroll : function() {
			var d = this.dom, doc = document;
			if (d == doc || d == doc.body) {
				var l, t;
				if (Ext.isIE && Ext.isStrict) {
					l = doc.documentElement.scrollLeft
							|| (doc.body.scrollLeft || 0);
					t = doc.documentElement.scrollTop
							|| (doc.body.scrollTop || 0)
				} else {
					l = window.pageXOffset || (doc.body.scrollLeft || 0);
					t = window.pageYOffset || (doc.body.scrollTop || 0)
				}
				return {
					left : l,
					top : t
				}
			} else {
				return {
					left : d.scrollLeft,
					top : d.scrollTop
				}
			}
		},
		getColor : function(attr, defaultValue, prefix) {
			var v = this.getStyle(attr);
			if (!v || v == "transparent" || v == "inherit") {
				return defaultValue
			}
			var color = typeof prefix == "undefined" ? "#" : prefix;
			if (v.substr(0, 4) == "rgb(") {
				var rvs = v.slice(4, v.length - 1).split(",");
				for ( var i = 0; i < 3; i++) {
					var h = parseInt(rvs[i]);
					var s = h.toString(16);
					if (h < 16) {
						s = "0" + s
					}
					color += s
				}
			} else {
				if (v.substr(0, 1) == "#") {
					if (v.length == 4) {
						for ( var i = 1; i < 4; i++) {
							var c = v.charAt(i);
							color += c + c
						}
					} else {
						if (v.length == 7) {
							color += v.substr(1)
						}
					}
				}
			}
			return (color.length > 5 ? color.toLowerCase() : defaultValue)
		},
		boxWrap : function(cls) {
			cls = cls || "x-box";
			var el = Ext.get(this.insertHtml("beforeBegin", String.format(
					"<div class=\"{0}\">" + El.boxMarkup + "</div>", cls)));
			el.child("." + cls + "-mc").dom.appendChild(this.dom);
			return el
		},
		getAttributeNS : Ext.isIE ? function(ns, name) {
			var d = this.dom;
			var type = typeof d[ns + ":" + name];
			if (type != "undefined" && type != "unknown") {
				return d[ns + ":" + name]
			}
			return d[name]
		} : function(ns, name) {
			var d = this.dom;
			return d.getAttributeNS(ns, name)
					|| d.getAttribute(ns + ":" + name) || d.getAttribute(name)
					|| d[name]
		},
		getTextWidth : function(text, min, max) {
			return (Ext.util.TextMetrics.measure(this.dom, Ext.value(text,
					this.dom.innerHTML, true)).width).constrain(min || 0,
					max || 1000000)
		}
	};
	var ep = El.prototype;
	ep.on = ep.addListener;
	ep.mon = ep.addListener;
	ep.getUpdateManager = ep.getUpdater;
	ep.un = ep.removeListener;
	ep.autoBoxAdjust = true;
	El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
	El.addUnits = function(v, defaultUnit) {
		if (v === "" || v == "auto") {
			return v
		}
		if (v === undefined) {
			return ""
		}
		if (typeof v == "number" || !El.unitPattern.test(v)) {
			return v + (defaultUnit || "px")
		}
		return v
	};
	El.boxMarkup = "<div class=\"{0}-tl\"><div class=\"{0}-tr\"><div class=\"{0}-tc\"></div></div></div><div class=\"{0}-ml\"><div class=\"{0}-mr\"><div class=\"{0}-mc\"></div></div></div><div class=\"{0}-bl\"><div class=\"{0}-br\"><div class=\"{0}-bc\"></div></div></div>";
	El.VISIBILITY = 1;
	El.DISPLAY = 2;
	El.borders = {
		l : "border-left-width",
		r : "border-right-width",
		t : "border-top-width",
		b : "border-bottom-width"
	};
	El.paddings = {
		l : "padding-left",
		r : "padding-right",
		t : "padding-top",
		b : "padding-bottom"
	};
	El.margins = {
		l : "margin-left",
		r : "margin-right",
		t : "margin-top",
		b : "margin-bottom"
	};
	El.cache = {};
	var docEl;
	El.get = function(el) {
		var ex, elm, id;
		if (!el) {
			return null
		}
		if (typeof el == "string") {
			if (!(elm = document.getElementById(el))) {
				return null
			}
			if (ex = El.cache[el]) {
				ex.dom = elm
			} else {
				ex = El.cache[el] = new El(elm)
			}
			return ex
		} else {
			if (el.tagName) {
				if (!(id = el.id)) {
					id = Ext.id(el)
				}
				if (ex = El.cache[id]) {
					ex.dom = el
				} else {
					ex = El.cache[id] = new El(el)
				}
				return ex
			} else {
				if (el instanceof El) {
					if (el != docEl) {
						el.dom = document.getElementById(el.id) || el.dom;
						El.cache[el.id] = el
					}
					return el
				} else {
					if (el.isComposite) {
						return el
					} else {
						if (Ext.isArray(el)) {
							return El.select(el)
						} else {
							if (el == document) {
								if (!docEl) {
									var f = function() {
									};
									f.prototype = El.prototype;
									docEl = new f();
									docEl.dom = document
								}
								return docEl
							}
						}
					}
				}
			}
		}
		return null
	};
	El.uncache = function(el) {
		for ( var i = 0, a = arguments, len = a.length; i < len; i++) {
			if (a[i]) {
				delete El.cache[a[i].id || a[i]]
			}
		}
	};
	El.garbageCollect = function() {
		if (!Ext.enableGarbageCollector) {
			clearInterval(El.collectorThread);
			return
		}
		for ( var eid in El.cache) {
			var el = El.cache[eid], d = el.dom;
			if (!d || !d.parentNode
					|| (!d.offsetParent && !document.getElementById(eid))) {
				delete El.cache[eid];
				if (d && Ext.enableListenerCollection) {
					Ext.EventManager.removeAll(d)
				}
			}
		}
	};
	El.collectorThreadId = setInterval(El.garbageCollect, 30000);
	var flyFn = function() {
	};
	flyFn.prototype = El.prototype;
	var _cls = new flyFn();
	El.Flyweight = function(dom) {
		this.dom = dom
	};
	El.Flyweight.prototype = _cls;
	El.Flyweight.prototype.isFlyweight = true;
	El._flyweights = {};
	El.fly = function(el, named) {
		named = named || "_global";
		el = Ext.getDom(el);
		if (!el) {
			return null
		}
		if (!El._flyweights[named]) {
			El._flyweights[named] = new El.Flyweight()
		}
		El._flyweights[named].dom = el;
		return El._flyweights[named]
	};
	Ext.get = El.get;
	Ext.fly = El.fly;
	var noBoxAdjust = Ext.isStrict ? {
		select : 1
	} : {
		input : 1,
		select : 1,
		textarea : 1
	};
	if (Ext.isIE || Ext.isGecko) {
		noBoxAdjust["button"] = 1
	}
	Ext.EventManager.on(window, "unload", function() {
		delete El.cache;
		delete El._flyweights
	})
})();
Ext.enableFx = true;
Ext.Fx = {
	slideIn : function(A, C) {
		var B = this.getFxEl();
		C = C || {};
		B.queueFx(C, function() {
			A = A || "t";
			this.fixDisplay();
			var D = this.getFxRestore();
			var I = this.getBox();
			this.setSize(I);
			var F = this.fxWrap(D.pos, C, "hidden");
			var K = this.dom.style;
			K.visibility = "visible";
			K.position = "absolute";
			var E = function() {
				B.fxUnwrap(F, D.pos, C);
				K.width = D.width;
				K.height = D.height;
				B.afterFx(C)
			};
			var J, L = {
				to : [ I.x, I.y ]
			}, H = {
				to : I.width
			}, G = {
				to : I.height
			};
			switch (A.toLowerCase()) {
			case "t":
				F.setSize(I.width, 0);
				K.left = K.bottom = "0";
				J = {
					height : G
				};
				break;
			case "l":
				F.setSize(0, I.height);
				K.right = K.top = "0";
				J = {
					width : H
				};
				break;
			case "r":
				F.setSize(0, I.height);
				F.setX(I.right);
				K.left = K.top = "0";
				J = {
					width : H,
					points : L
				};
				break;
			case "b":
				F.setSize(I.width, 0);
				F.setY(I.bottom);
				K.left = K.top = "0";
				J = {
					height : G,
					points : L
				};
				break;
			case "tl":
				F.setSize(0, 0);
				K.right = K.bottom = "0";
				J = {
					width : H,
					height : G
				};
				break;
			case "bl":
				F.setSize(0, 0);
				F.setY(I.y + I.height);
				K.right = K.top = "0";
				J = {
					width : H,
					height : G,
					points : L
				};
				break;
			case "br":
				F.setSize(0, 0);
				F.setXY( [ I.right, I.bottom ]);
				K.left = K.top = "0";
				J = {
					width : H,
					height : G,
					points : L
				};
				break;
			case "tr":
				F.setSize(0, 0);
				F.setX(I.x + I.width);
				K.left = K.bottom = "0";
				J = {
					width : H,
					height : G,
					points : L
				};
				break
			}
			this.dom.style.visibility = "visible";
			F.show();
			arguments.callee.anim = F.fxanim(J, C, "motion", 0.5, "easeOut", E)
		});
		return this
	},
	slideOut : function(A, C) {
		var B = this.getFxEl();
		C = C || {};
		B.queueFx(C, function() {
			A = A || "t";
			var I = this.getFxRestore();
			var D = this.getBox();
			this.setSize(D);
			var G = this.fxWrap(I.pos, C, "visible");
			var F = this.dom.style;
			F.visibility = "visible";
			F.position = "absolute";
			G.setSize(D);
			var J = function() {
				if (C.useDisplay) {
					B.setDisplayed(false)
				} else {
					B.hide()
				}
				B.fxUnwrap(G, I.pos, C);
				F.width = I.width;
				F.height = I.height;
				B.afterFx(C)
			};
			var E, H = {
				to : 0
			};
			switch (A.toLowerCase()) {
			case "t":
				F.left = F.bottom = "0";
				E = {
					height : H
				};
				break;
			case "l":
				F.right = F.top = "0";
				E = {
					width : H
				};
				break;
			case "r":
				F.left = F.top = "0";
				E = {
					width : H,
					points : {
						to : [ D.right, D.y ]
					}
				};
				break;
			case "b":
				F.left = F.top = "0";
				E = {
					height : H,
					points : {
						to : [ D.x, D.bottom ]
					}
				};
				break;
			case "tl":
				F.right = F.bottom = "0";
				E = {
					width : H,
					height : H
				};
				break;
			case "bl":
				F.right = F.top = "0";
				E = {
					width : H,
					height : H,
					points : {
						to : [ D.x, D.bottom ]
					}
				};
				break;
			case "br":
				F.left = F.top = "0";
				E = {
					width : H,
					height : H,
					points : {
						to : [ D.x + D.width, D.bottom ]
					}
				};
				break;
			case "tr":
				F.left = F.bottom = "0";
				E = {
					width : H,
					height : H,
					points : {
						to : [ D.right, D.y ]
					}
				};
				break
			}
			arguments.callee.anim = G.fxanim(E, C, "motion", 0.5, "easeOut", J)
		});
		return this
	},
	puff : function(B) {
		var A = this.getFxEl();
		B = B || {};
		A.queueFx(B, function() {
			this.clearOpacity();
			this.show();
			var F = this.getFxRestore();
			var D = this.dom.style;
			var G = function() {
				if (B.useDisplay) {
					A.setDisplayed(false)
				} else {
					A.hide()
				}
				A.clearOpacity();
				A.setPositioning(F.pos);
				D.width = F.width;
				D.height = F.height;
				D.fontSize = "";
				A.afterFx(B)
			};
			var E = this.getWidth();
			var C = this.getHeight();
			arguments.callee.anim = this.fxanim( {
				width : {
					to : this.adjustWidth(E * 2)
				},
				height : {
					to : this.adjustHeight(C * 2)
				},
				points : {
					by : [ -(E * 0.5), -(C * 0.5) ]
				},
				opacity : {
					to : 0
				},
				fontSize : {
					to : 200,
					unit : "%"
				}
			}, B, "motion", 0.5, "easeOut", G)
		});
		return this
	},
	switchOff : function(B) {
		var A = this.getFxEl();
		B = B || {};
		A.queueFx(B, function() {
			this.clearOpacity();
			this.clip();
			var D = this.getFxRestore();
			var C = this.dom.style;
			var E = function() {
				if (B.useDisplay) {
					A.setDisplayed(false)
				} else {
					A.hide()
				}
				A.clearOpacity();
				A.setPositioning(D.pos);
				C.width = D.width;
				C.height = D.height;
				A.afterFx(B)
			};
			this.fxanim( {
				opacity : {
					to : 0.3
				}
			}, null, null, 0.1, null, function() {
				this.clearOpacity();
				(function() {
					this.fxanim( {
						height : {
							to : 1
						},
						points : {
							by : [ 0, this.getHeight() * 0.5 ]
						}
					}, B, "motion", 0.3, "easeIn", E)
				}).defer(100, this)
			})
		});
		return this
	},
	highlight : function(A, C) {
		var B = this.getFxEl();
		C = C || {};
		B.queueFx(C, function() {
			A = A || "ffff9c";
			var D = C.attr || "backgroundColor";
			this.clearOpacity();
			this.show();
			var G = this.getColor(D);
			var H = this.dom.style[D];
			var F = (C.endColor || G) || "ffffff";
			var I = function() {
				B.dom.style[D] = H;
				B.afterFx(C)
			};
			var E = {};
			E[D] = {
				from : A,
				to : F
			};
			arguments.callee.anim = this.fxanim(E, C, "color", 1, "easeIn", I)
		});
		return this
	},
	frame : function(A, C, D) {
		var B = this.getFxEl();
		D = D || {};
		B.queueFx(D, function() {
			A = A || "#C3DAF9";
			if (A.length == 6) {
				A = "#" + A
			}
			C = C || 1;
			var G = D.duration || 1;
			this.show();
			var E = this.getBox();
			var F = function() {
				var H = Ext.getBody().createChild( {
					style : {
						visbility : "hidden",
						position : "absolute",
						"z-index" : "35000",
						border : "0px solid " + A
					}
				});
				var I = Ext.isBorderBox ? 2 : 1;
				H.animate( {
					top : {
						from : E.y,
						to : E.y - 20
					},
					left : {
						from : E.x,
						to : E.x - 20
					},
					borderWidth : {
						from : 0,
						to : 10
					},
					opacity : {
						from : 1,
						to : 0
					},
					height : {
						from : E.height,
						to : (E.height + (20 * I))
					},
					width : {
						from : E.width,
						to : (E.width + (20 * I))
					}
				}, G, function() {
					H.remove();
					if (--C > 0) {
						F()
					} else {
						B.afterFx(D)
					}
				})
			};
			F.call(this)
		});
		return this
	},
	pause : function(C) {
		var A = this.getFxEl();
		var B = {};
		A.queueFx(B, function() {
			setTimeout(function() {
				A.afterFx(B)
			}, C * 1000)
		});
		return this
	},
	fadeIn : function(B) {
		var A = this.getFxEl();
		B = B || {};
		A.queueFx(B, function() {
			this.setOpacity(0);
			this.fixDisplay();
			this.dom.style.visibility = "visible";
			var C = B.endOpacity || 1;
			arguments.callee.anim = this.fxanim( {
				opacity : {
					to : C
				}
			}, B, null, 0.5, "easeOut", function() {
				if (C == 1) {
					this.clearOpacity()
				}
				A.afterFx(B)
			})
		});
		return this
	},
	fadeOut : function(B) {
		var A = this.getFxEl();
		B = B || {};
		A.queueFx(B, function() {
			arguments.callee.anim = this.fxanim( {
				opacity : {
					to : B.endOpacity || 0
				}
			}, B, null, 0.5, "easeOut",
					function() {
						if (this.visibilityMode == Ext.Element.DISPLAY
								|| B.useDisplay) {
							this.dom.style.display = "none"
						} else {
							this.dom.style.visibility = "hidden"
						}
						this.clearOpacity();
						A.afterFx(B)
					})
		});
		return this
	},
	scale : function(A, B, C) {
		this.shift(Ext.apply( {}, C, {
			width : A,
			height : B
		}));
		return this
	},
	shift : function(B) {
		var A = this.getFxEl();
		B = B || {};
		A
				.queueFx(
						B,
						function() {
							var E = {}, D = B.width, F = B.height, C = B.x, H = B.y, G = B.opacity;
							if (D !== undefined) {
								E.width = {
									to : this.adjustWidth(D)
								}
							}
							if (F !== undefined) {
								E.height = {
									to : this.adjustHeight(F)
								}
							}
							if (B.left !== undefined) {
								E.left = {
									to : B.left
								}
							}
							if (B.top !== undefined) {
								E.top = {
									to : B.top
								}
							}
							if (B.right !== undefined) {
								E.right = {
									to : B.right
								}
							}
							if (B.bottom !== undefined) {
								E.bottom = {
									to : B.bottom
								}
							}
							if (C !== undefined || H !== undefined) {
								E.points = {
									to : [ C !== undefined ? C : this.getX(),
											H !== undefined ? H : this.getY() ]
								}
							}
							if (G !== undefined) {
								E.opacity = {
									to : G
								}
							}
							if (B.xy !== undefined) {
								E.points = {
									to : B.xy
								}
							}
							arguments.callee.anim = this.fxanim(E, B, "motion",
									0.35, "easeOut", function() {
										A.afterFx(B)
									})
						});
		return this
	},
	ghost : function(A, C) {
		var B = this.getFxEl();
		C = C || {};
		B.queueFx(C, function() {
			A = A || "b";
			var H = this.getFxRestore();
			var E = this.getWidth(), G = this.getHeight();
			var F = this.dom.style;
			var J = function() {
				if (C.useDisplay) {
					B.setDisplayed(false)
				} else {
					B.hide()
				}
				B.clearOpacity();
				B.setPositioning(H.pos);
				F.width = H.width;
				F.height = H.height;
				B.afterFx(C)
			};
			var D = {
				opacity : {
					to : 0
				},
				points : {}
			}, I = D.points;
			switch (A.toLowerCase()) {
			case "t":
				I.by = [ 0, -G ];
				break;
			case "l":
				I.by = [ -E, 0 ];
				break;
			case "r":
				I.by = [ E, 0 ];
				break;
			case "b":
				I.by = [ 0, G ];
				break;
			case "tl":
				I.by = [ -E, -G ];
				break;
			case "bl":
				I.by = [ -E, G ];
				break;
			case "br":
				I.by = [ E, G ];
				break;
			case "tr":
				I.by = [ E, -G ];
				break
			}
			arguments.callee.anim = this.fxanim(D, C, "motion", 0.5, "easeOut",
					J)
		});
		return this
	},
	syncFx : function() {
		this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
			block : false,
			concurrent : true,
			stopFx : false
		});
		return this
	},
	sequenceFx : function() {
		this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
			block : false,
			concurrent : false,
			stopFx : false
		});
		return this
	},
	nextFx : function() {
		var A = this.fxQueue[0];
		if (A) {
			A.call(this)
		}
	},
	hasActiveFx : function() {
		return this.fxQueue && this.fxQueue[0]
	},
	stopFx : function() {
		if (this.hasActiveFx()) {
			var A = this.fxQueue[0];
			if (A && A.anim && A.anim.isAnimated()) {
				this.fxQueue = [ A ];
				A.anim.stop(true)
			}
		}
		return this
	},
	beforeFx : function(A) {
		if (this.hasActiveFx() && !A.concurrent) {
			if (A.stopFx) {
				this.stopFx();
				return true
			}
			return false
		}
		return true
	},
	hasFxBlock : function() {
		var A = this.fxQueue;
		return A && A[0] && A[0].block
	},
	queueFx : function(C, A) {
		if (!this.fxQueue) {
			this.fxQueue = []
		}
		if (!this.hasFxBlock()) {
			Ext.applyIf(C, this.fxDefaults);
			if (!C.concurrent) {
				var B = this.beforeFx(C);
				A.block = C.block;
				this.fxQueue.push(A);
				if (B) {
					this.nextFx()
				}
			} else {
				A.call(this)
			}
		}
		return this
	},
	fxWrap : function(F, D, C) {
		var B;
		if (!D.wrap || !(B = Ext.get(D.wrap))) {
			var A;
			if (D.fixPosition) {
				A = this.getXY()
			}
			var E = document.createElement("div");
			E.style.visibility = C;
			B = Ext.get(this.dom.parentNode.insertBefore(E, this.dom));
			B.setPositioning(F);
			if (B.getStyle("position") == "static") {
				B.position("relative")
			}
			this.clearPositioning("auto");
			B.clip();
			B.dom.appendChild(this.dom);
			if (A) {
				B.setXY(A)
			}
		}
		return B
	},
	fxUnwrap : function(A, C, B) {
		this.clearPositioning();
		this.setPositioning(C);
		if (!B.wrap) {
			A.dom.parentNode.insertBefore(this.dom, A.dom);
			A.remove()
		}
	},
	getFxRestore : function() {
		var A = this.dom.style;
		return {
			pos : this.getPositioning(),
			width : A.width,
			height : A.height
		}
	},
	afterFx : function(A) {
		if (A.afterStyle) {
			this.applyStyles(A.afterStyle)
		}
		if (A.afterCls) {
			this.addClass(A.afterCls)
		}
		if (A.remove === true) {
			this.remove()
		}
		Ext.callback(A.callback, A.scope, [ this ]);
		if (!A.concurrent) {
			this.fxQueue.shift();
			this.nextFx()
		}
	},
	getFxEl : function() {
		return Ext.get(this.dom)
	},
	fxanim : function(D, E, B, F, C, A) {
		B = B || "run";
		E = E || {};
		var G = Ext.lib.Anim[B](this.dom, D, (E.duration || F) || 0.35,
				(E.easing || C) || "easeOut", function() {
					Ext.callback(A, this)
				}, this);
		E.anim = G;
		return G
	}
};
Ext.Fx.resize = Ext.Fx.scale;
Ext.apply(Ext.Element.prototype, Ext.Fx);
Ext.CompositeElement = function(A) {
	this.elements = [];
	this.addElements(A)
};
Ext.CompositeElement.prototype = {
	isComposite : true,
	addElements : function(E) {
		if (!E) {
			return this
		}
		if (typeof E == "string") {
			E = Ext.Element.selectorFunction(E)
		}
		var D = this.elements;
		var B = D.length - 1;
		for ( var C = 0, A = E.length; C < A; C++) {
			D[++B] = Ext.get(E[C])
		}
		return this
	},
	fill : function(A) {
		this.elements = [];
		this.add(A);
		return this
	},
	filter : function(A) {
		var B = [];
		this.each(function(C) {
			if (C.is(A)) {
				B[B.length] = C.dom
			}
		});
		this.fill(B);
		return this
	},
	invoke : function(E, B) {
		var D = this.elements;
		for ( var C = 0, A = D.length; C < A; C++) {
			Ext.Element.prototype[E].apply(D[C], B)
		}
		return this
	},
	add : function(A) {
		if (typeof A == "string") {
			this.addElements(Ext.Element.selectorFunction(A))
		} else {
			if (A.length !== undefined) {
				this.addElements(A)
			} else {
				this.addElements( [ A ])
			}
		}
		return this
	},
	each : function(E, D) {
		var C = this.elements;
		for ( var B = 0, A = C.length; B < A; B++) {
			if (E.call(D || C[B], C[B], this, B) === false) {
				break
			}
		}
		return this
	},
	item : function(A) {
		return this.elements[A] || null
	},
	first : function() {
		return this.item(0)
	},
	last : function() {
		return this.item(this.elements.length - 1)
	},
	getCount : function() {
		return this.elements.length
	},
	contains : function(A) {
		return this.indexOf(A) !== -1
	},
	indexOf : function(A) {
		return this.elements.indexOf(Ext.get(A))
	},
	removeElement : function(D, F) {
		if (Ext.isArray(D)) {
			for ( var C = 0, A = D.length; C < A; C++) {
				this.removeElement(D[C])
			}
			return this
		}
		var B = typeof D == "number" ? D : this.indexOf(D);
		if (B !== -1 && this.elements[B]) {
			if (F) {
				var E = this.elements[B];
				if (E.dom) {
					E.remove()
				} else {
					Ext.removeNode(E)
				}
			}
			this.elements.splice(B, 1)
		}
		return this
	},
	replaceElement : function(D, C, A) {
		var B = typeof D == "number" ? D : this.indexOf(D);
		if (B !== -1) {
			if (A) {
				this.elements[B].replaceWith(C)
			} else {
				this.elements.splice(B, 1, Ext.get(C))
			}
		}
		return this
	},
	clear : function() {
		this.elements = []
	}
};
(function() {
	Ext.CompositeElement.createCall = function(B, C) {
		if (!B[C]) {
			B[C] = function() {
				return this.invoke(C, arguments)
			}
		}
	};
	for ( var A in Ext.Element.prototype) {
		if (typeof Ext.Element.prototype[A] == "function") {
			Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, A)
		}
	}
})();
Ext.CompositeElementLite = function(A) {
	Ext.CompositeElementLite.superclass.constructor.call(this, A);
	this.el = new Ext.Element.Flyweight()
};
Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {
	addElements : function(E) {
		if (E) {
			if (Ext.isArray(E)) {
				this.elements = this.elements.concat(E)
			} else {
				var D = this.elements;
				var B = D.length - 1;
				for ( var C = 0, A = E.length; C < A; C++) {
					D[++B] = E[C]
				}
			}
		}
		return this
	},
	invoke : function(F, B) {
		var D = this.elements;
		var E = this.el;
		for ( var C = 0, A = D.length; C < A; C++) {
			E.dom = D[C];
			Ext.Element.prototype[F].apply(E, B)
		}
		return this
	},
	item : function(A) {
		if (!this.elements[A]) {
			return null
		}
		this.el.dom = this.elements[A];
		return this.el
	},
	addListener : function(B, G, F, E) {
		var D = this.elements;
		for ( var C = 0, A = D.length; C < A; C++) {
			Ext.EventManager.on(D[C], B, G, F || D[C], E)
		}
		return this
	},
	each : function(F, E) {
		var C = this.elements;
		var D = this.el;
		for ( var B = 0, A = C.length; B < A; B++) {
			D.dom = C[B];
			if (F.call(E || D, D, this, B) === false) {
				break
			}
		}
		return this
	},
	indexOf : function(A) {
		return this.elements.indexOf(Ext.getDom(A))
	},
	replaceElement : function(D, C, A) {
		var B = typeof D == "number" ? D : this.indexOf(D);
		if (B !== -1) {
			C = Ext.getDom(C);
			if (A) {
				var E = this.elements[B];
				E.parentNode.insertBefore(C, E);
				Ext.removeNode(E)
			}
			this.elements.splice(B, 1, C)
		}
		return this
	}
});
Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
if (Ext.DomQuery) {
	Ext.Element.selectorFunction = Ext.DomQuery.select
}
Ext.Element.select = function(A, D, B) {
	var C;
	if (typeof A == "string") {
		C = Ext.Element.selectorFunction(A, B)
	} else {
		if (A.length !== undefined) {
			C = A
		} else {
			throw "Invalid selector"
		}
	}
	if (D === true) {
		return new Ext.CompositeElement(C)
	} else {
		return new Ext.CompositeElementLite(C)
	}
};
Ext.select = Ext.Element.select;
Ext.data.Connection = function(A) {
	Ext.apply(this, A);
	this.addEvents("beforerequest", "requestcomplete", "requestexception");
	Ext.data.Connection.superclass.constructor.call(this)
};
Ext.extend(Ext.data.Connection, Ext.util.Observable, {
	timeout : 30000,
	autoAbort : false,
	disableCaching : true,
	disableCachingParam : "_dc",
	request : function(E) {
		if (this.fireEvent("beforerequest", this, E) !== false) {
			var C = E.params;
			if (typeof C == "function") {
				C = C.call(E.scope || window, E)
			}
			if (typeof C == "object") {
				C = Ext.urlEncode(C)
			}
			if (this.extraParams) {
				var G = Ext.urlEncode(this.extraParams);
				C = C ? (C + "&" + G) : G
			}
			var B = E.url || this.url;
			if (typeof B == "function") {
				B = B.call(E.scope || window, E)
			}
			if (E.form) {
				var D = Ext.getDom(E.form);
				B = B || D.action;
				var J = D.getAttribute("enctype");
				if (E.isUpload
						|| (J && J.toLowerCase() == "multipart/form-data")) {
					return this.doFormUpload(E, C, B)
				}
				var I = Ext.lib.Ajax.serializeForm(D);
				C = C ? (C + "&" + I) : I
			}
			var K = E.headers;
			if (this.defaultHeaders) {
				K = Ext.apply(K || {}, this.defaultHeaders);
				if (!E.headers) {
					E.headers = K
				}
			}
			var F = {
				success : this.handleResponse,
				failure : this.handleFailure,
				scope : this,
				argument : {
					options : E
				},
				timeout : E.timeout || this.timeout
			};
			var A = E.method || this.method
					|| ((C || E.xmlData || E.jsonData) ? "POST" : "GET");
			if (A == "GET"
					&& (this.disableCaching && E.disableCaching !== false)
					|| E.disableCaching === true) {
				var H = E.disableCachingParam || this.disableCachingParam;
				B += (B.indexOf("?") != -1 ? "&" : "?") + H + "="
						+ (new Date().getTime())
			}
			if (typeof E.autoAbort == "boolean") {
				if (E.autoAbort) {
					this.abort()
				}
			} else {
				if (this.autoAbort !== false) {
					this.abort()
				}
			}
			if ((A == "GET" || E.xmlData || E.jsonData) && C) {
				B += (B.indexOf("?") != -1 ? "&" : "?") + C;
				C = ""
			}
			this.transId = Ext.lib.Ajax.request(A, B, F, C, E);
			return this.transId
		} else {
			Ext.callback(E.callback, E.scope, [ E, null, null ]);
			return null
		}
	},
	isLoading : function(A) {
		if (A) {
			return Ext.lib.Ajax.isCallInProgress(A)
		} else {
			return this.transId ? true : false
		}
	},
	abort : function(A) {
		if (A || this.isLoading()) {
			Ext.lib.Ajax.abort(A || this.transId)
		}
	},
	handleResponse : function(A) {
		this.transId = false;
		var B = A.argument.options;
		A.argument = B ? B.argument : null;
		this.fireEvent("requestcomplete", this, A, B);
		Ext.callback(B.success, B.scope, [ A, B ]);
		Ext.callback(B.callback, B.scope, [ B, true, A ])
	},
	handleFailure : function(A, C) {
		this.transId = false;
		var B = A.argument.options;
		A.argument = B ? B.argument : null;
		this.fireEvent("requestexception", this, A, B, C);
		Ext.callback(B.failure, B.scope, [ A, B ]);
		Ext.callback(B.callback, B.scope, [ B, false, A ])
	},
	doFormUpload : function(E, A, B) {
		var C = Ext.id();
		var F = document.createElement("iframe");
		F.id = C;
		F.name = C;
		F.className = "x-hidden";
		if (Ext.isIE) {
			F.src = Ext.SSL_SECURE_URL
		}
		document.body.appendChild(F);
		if (Ext.isIE) {
			document.frames[C].name = C
		}
		var D = Ext.getDom(E.form);
		D.target = C;
		D.method = "POST";
		D.enctype = D.encoding = "multipart/form-data";
		if (B) {
			D.action = B
		}
		var L, J;
		if (A) {
			L = [];
			A = Ext.urlDecode(A, false);
			for ( var H in A) {
				if (A.hasOwnProperty(H)) {
					J = document.createElement("input");
					J.type = "hidden";
					J.name = H;
					J.value = A[H];
					D.appendChild(J);
					L.push(J)
				}
			}
		}
		function G() {
			var M = {
				responseText : "",
				responseXML : null
			};
			M.argument = E ? E.argument : null;
			try {
				var O;
				if (Ext.isIE) {
					O = F.contentWindow.document
				} else {
					O = (F.contentDocument || window.frames[C].document)
				}
				if (O && O.body) {
					M.responseText = O.body.innerHTML
				}
				if (O && O.XMLDocument) {
					M.responseXML = O.XMLDocument
				} else {
					M.responseXML = O
				}
			} catch (N) {
			}
			Ext.EventManager.removeListener(F, "load", G, this);
			this.fireEvent("requestcomplete", this, M, E);
			Ext.callback(E.success, E.scope, [ M, E ]);
			Ext.callback(E.callback, E.scope, [ E, true, M ]);
			setTimeout(function() {
				Ext.removeNode(F)
			}, 100)
		}
		Ext.EventManager.on(F, "load", G, this);
		D.submit();
		if (L) {
			for ( var I = 0, K = L.length; I < K; I++) {
				Ext.removeNode(L[I])
			}
		}
	}
});
Ext.Ajax = new Ext.data.Connection( {
	autoAbort : false,
	serializeForm : function(A) {
		return Ext.lib.Ajax.serializeForm(A)
	}
});
Ext.Updater = Ext.extend(Ext.util.Observable, {
	constructor : function(B, A) {
		B = Ext.get(B);
		if (!A && B.updateManager) {
			return B.updateManager
		}
		this.el = B;
		this.defaultUrl = null;
		this.addEvents("beforeupdate", "update", "failure");
		var C = Ext.Updater.defaults;
		this.sslBlankUrl = C.sslBlankUrl;
		this.disableCaching = C.disableCaching;
		this.indicatorText = C.indicatorText;
		this.showLoadIndicator = C.showLoadIndicator;
		this.timeout = C.timeout;
		this.loadScripts = C.loadScripts;
		this.transaction = null;
		this.refreshDelegate = this.refresh.createDelegate(this);
		this.updateDelegate = this.update.createDelegate(this);
		this.formUpdateDelegate = this.formUpdate.createDelegate(this);
		if (!this.renderer) {
			this.renderer = this.getDefaultRenderer()
		}
		Ext.Updater.superclass.constructor.call(this)
	},
	getDefaultRenderer : function() {
		return new Ext.Updater.BasicRenderer()
	},
	getEl : function() {
		return this.el
	},
	update : function(B, F, G, D) {
		if (this.fireEvent("beforeupdate", this.el, B, F) !== false) {
			var A, C;
			if (typeof B == "object") {
				A = B;
				B = A.url;
				F = F || A.params;
				G = G || A.callback;
				D = D || A.discardUrl;
				C = A.scope;
				if (typeof A.nocache != "undefined") {
					this.disableCaching = A.nocache
				}
				if (typeof A.text != "undefined") {
					this.indicatorText = "<div class=\"loading-indicator\">"
							+ A.text + "</div>"
				}
				if (typeof A.scripts != "undefined") {
					this.loadScripts = A.scripts
				}
				if (typeof A.timeout != "undefined") {
					this.timeout = A.timeout
				}
			}
			this.showLoading();
			if (!D) {
				this.defaultUrl = B
			}
			if (typeof B == "function") {
				B = B.call(this)
			}
			var E = Ext.apply( {}, {
				url : B,
				params : (typeof F == "function" && C) ? F.createDelegate(C)
						: F,
				success : this.processSuccess,
				failure : this.processFailure,
				scope : this,
				callback : undefined,
				timeout : (this.timeout * 1000),
				disableCaching : this.disableCaching,
				argument : {
					"options" : A,
					"url" : B,
					"form" : null,
					"callback" : G,
					"scope" : C || window,
					"params" : F
				}
			}, A);
			this.transaction = Ext.Ajax.request(E)
		}
	},
	formUpdate : function(C, A, B, D) {
		if (this.fireEvent("beforeupdate", this.el, C, A) !== false) {
			if (typeof A == "function") {
				A = A.call(this)
			}
			C = Ext.getDom(C);
			this.transaction = Ext.Ajax.request( {
				form : C,
				url : A,
				success : this.processSuccess,
				failure : this.processFailure,
				scope : this,
				timeout : (this.timeout * 1000),
				argument : {
					"url" : A,
					"form" : C,
					"callback" : D,
					"reset" : B
				}
			});
			this.showLoading.defer(1, this)
		}
	},
	refresh : function(A) {
		if (this.defaultUrl == null) {
			return
		}
		this.update(this.defaultUrl, null, A, true)
	},
	startAutoRefresh : function(B, C, D, E, A) {
		if (A) {
			this.update(C || this.defaultUrl, D, E, true)
		}
		if (this.autoRefreshProcId) {
			clearInterval(this.autoRefreshProcId)
		}
		this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [
				C || this.defaultUrl, D, E, true ]), B * 1000)
	},
	stopAutoRefresh : function() {
		if (this.autoRefreshProcId) {
			clearInterval(this.autoRefreshProcId);
			delete this.autoRefreshProcId
		}
	},
	isAutoRefreshing : function() {
		return this.autoRefreshProcId ? true : false
	},
	showLoading : function() {
		if (this.showLoadIndicator) {
			this.el.update(this.indicatorText)
		}
	},
	processSuccess : function(A) {
		this.transaction = null;
		if (A.argument.form && A.argument.reset) {
			try {
				A.argument.form.reset()
			} catch (B) {
			}
		}
		if (this.loadScripts) {
			this.renderer.render(this.el, A, this, this.updateComplete
					.createDelegate(this, [ A ]))
		} else {
			this.renderer.render(this.el, A, this);
			this.updateComplete(A)
		}
	},
	updateComplete : function(A) {
		this.fireEvent("update", this.el, A);
		if (typeof A.argument.callback == "function") {
			A.argument.callback.call(A.argument.scope, this.el, true, A,
					A.argument.options)
		}
	},
	processFailure : function(A) {
		this.transaction = null;
		this.fireEvent("failure", this.el, A);
		if (typeof A.argument.callback == "function") {
			A.argument.callback.call(A.argument.scope, this.el, false, A,
					A.argument.options)
		}
	},
	setRenderer : function(A) {
		this.renderer = A
	},
	getRenderer : function() {
		return this.renderer
	},
	setDefaultUrl : function(A) {
		this.defaultUrl = A
	},
	abort : function() {
		if (this.transaction) {
			Ext.Ajax.abort(this.transaction)
		}
	},
	isUpdating : function() {
		if (this.transaction) {
			return Ext.Ajax.isLoading(this.transaction)
		}
		return false
	}
});
Ext.Updater.defaults = {
	timeout : 30,
	loadScripts : false,
	sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"),
	disableCaching : false,
	showLoadIndicator : true,
	indicatorText : "<div class=\"loading-indicator\">Loading...</div>"
};
Ext.Updater.updateElement = function(D, C, E, B) {
	var A = Ext.get(D).getUpdater();
	Ext.apply(A, B);
	A.update(C, E, B ? B.callback : null)
};
Ext.Updater.BasicRenderer = function() {
};
Ext.Updater.BasicRenderer.prototype = {
	render : function(C, A, B, D) {
		C.update(A.responseText, B.loadScripts, D)
	}
};
Ext.UpdateManager = Ext.Updater;
(function() {
	Date.formatCodeToRegex = function(character, currentGroup) {
		var p = Date.parseCodes[character];
		if (p) {
			p = Ext.type(p) == "function" ? p() : p;
			Date.parseCodes[character] = p
		}
		return p ? Ext.applyIf( {
			c : p.c ? String.format(p.c, currentGroup || "{0}") : p.c
		}, p) : {
			g : 0,
			c : null,
			s : Ext.escapeRe(character)
		}
	};
	var $f = Date.formatCodeToRegex;
	Ext
			.apply(
					Date,
					{
						parseFunctions : {
							count : 0
						},
						parseRegexes : [],
						formatFunctions : {
							count : 0
						},
						daysInMonth : [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
								30, 31 ],
						y2kYear : 50,
						MILLI : "ms",
						SECOND : "s",
						MINUTE : "mi",
						HOUR : "h",
						DAY : "d",
						MONTH : "mo",
						YEAR : "y",
						dayNames : [ "Sunday", "Monday", "Tuesday",
								"Wednesday", "Thursday", "Friday", "Saturday" ],
						monthNames : [ "January", "February", "March", "April",
								"May", "June", "July", "August", "September",
								"October", "November", "December" ],
						monthNumbers : {
							Jan : 0,
							Feb : 1,
							Mar : 2,
							Apr : 3,
							May : 4,
							Jun : 5,
							Jul : 6,
							Aug : 7,
							Sep : 8,
							Oct : 9,
							Nov : 10,
							Dec : 11
						},
						getShortMonthName : function(month) {
							return Date.monthNames[month].substring(0, 3)
						},
						getShortDayName : function(day) {
							return Date.dayNames[day].substring(0, 3)
						},
						getMonthNumber : function(name) {
							return Date.monthNumbers[name.substring(0, 1)
									.toUpperCase()
									+ name.substring(1, 3).toLowerCase()]
						},
						formatCodes : {
							d : "String.leftPad(this.getDate(), 2, '0')",
							D : "Date.getShortDayName(this.getDay())",
							j : "this.getDate()",
							l : "Date.dayNames[this.getDay()]",
							N : "(this.getDay() ? this.getDay() : 7)",
							S : "this.getSuffix()",
							w : "this.getDay()",
							z : "this.getDayOfYear()",
							W : "String.leftPad(this.getWeekOfYear(), 2, '0')",
							F : "Date.monthNames[this.getMonth()]",
							m : "String.leftPad(this.getMonth() + 1, 2, '0')",
							M : "Date.getShortMonthName(this.getMonth())",
							n : "(this.getMonth() + 1)",
							t : "this.getDaysInMonth()",
							L : "(this.isLeapYear() ? 1 : 0)",
							o : "(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",
							Y : "this.getFullYear()",
							y : "('' + this.getFullYear()).substring(2, 4)",
							a : "(this.getHours() < 12 ? 'am' : 'pm')",
							A : "(this.getHours() < 12 ? 'AM' : 'PM')",
							g : "((this.getHours() % 12) ? this.getHours() % 12 : 12)",
							G : "this.getHours()",
							h : "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",
							H : "String.leftPad(this.getHours(), 2, '0')",
							i : "String.leftPad(this.getMinutes(), 2, '0')",
							s : "String.leftPad(this.getSeconds(), 2, '0')",
							u : "String.leftPad(this.getMilliseconds(), 3, '0')",
							O : "this.getGMTOffset()",
							P : "this.getGMTOffset(true)",
							T : "this.getTimezone()",
							Z : "(this.getTimezoneOffset() * -60)",
							c : function() {
								for ( var c = "Y-m-dTH:i:sP", code = [], i = 0, l = c.length; i < l; ++i) {
									var e = c.charAt(i);
									code.push(e == "T" ? "'T'" : Date
											.getFormatCode(e))
								}
								return code.join(" + ")
							},
							U : "Math.round(this.getTime() / 1000)"
						},
						parseDate : function(input, format) {
							var p = Date.parseFunctions;
							if (p[format] == null) {
								Date.createParser(format)
							}
							var func = p[format];
							return Date[func](input)
						},
						getFormatCode : function(character) {
							var f = Date.formatCodes[character];
							if (f) {
								f = Ext.type(f) == "function" ? f() : f;
								Date.formatCodes[character] = f
							}
							return f || ("'" + String.escape(character) + "'")
						},
						createNewFormat : function(format) {
							var funcName = "format"
									+ Date.formatFunctions.count++;
							Date.formatFunctions[format] = funcName;
							var code = "Date.prototype." + funcName
									+ " = function(){return ";
							var special = false;
							var ch = "";
							for ( var i = 0; i < format.length; ++i) {
								ch = format.charAt(i);
								if (!special && ch == "\\") {
									special = true
								} else {
									if (special) {
										special = false;
										code += "'" + String.escape(ch)
												+ "' + "
									} else {
										code += Date.getFormatCode(ch) + " + "
									}
								}
							}
							eval(code.substring(0, code.length - 3) + ";}")
						},
						createParser : function(format) {
							var funcName = "parse"
									+ Date.parseFunctions.count++;
							var regexNum = Date.parseRegexes.length;
							var currentGroup = 1;
							Date.parseFunctions[format] = funcName;
							var code = "Date."
									+ funcName
									+ " = function(input){\n"
									+ "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;\n"
									+ "input = String(input);\n"
									+ "d = new Date();\n"
									+ "y = d.getFullYear();\n"
									+ "m = d.getMonth();\n"
									+ "d = d.getDate();\n"
									+ "var results = input.match(Date.parseRegexes["
									+ regexNum + "]);\n"
									+ "if (results && results.length > 0) {";
							var regex = "";
							var special = false;
							var ch = "";
							for ( var i = 0; i < format.length; ++i) {
								ch = format.charAt(i);
								if (!special && ch == "\\") {
									special = true
								} else {
									if (special) {
										special = false;
										regex += String.escape(ch)
									} else {
										var obj = Date.formatCodeToRegex(ch,
												currentGroup);
										currentGroup += obj.g;
										regex += obj.s;
										if (obj.g && obj.c) {
											code += obj.c
										}
									}
								}
							}
							code += "if (u){\n"
									+ "v = new Date(u * 1000);\n"
									+ "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){\n"
									+ "v = new Date(y, m, d, h, i, s, ms);\n"
									+ "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){\n"
									+ "v = new Date(y, m, d, h, i, s);\n"
									+ "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){\n"
									+ "v = new Date(y, m, d, h, i);\n"
									+ "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){\n"
									+ "v = new Date(y, m, d, h);\n"
									+ "}else if (y >= 0 && m >= 0 && d > 0){\n"
									+ "v = new Date(y, m, d);\n"
									+ "}else if (y >= 0 && m >= 0){\n"
									+ "v = new Date(y, m);\n"
									+ "}else if (y >= 0){\n"
									+ "v = new Date(y);\n"
									+ "}\n}\nreturn (v && (z || o))?"
									+ " (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"
									+ " v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;\n"
									+ "}";
							Date.parseRegexes[regexNum] = new RegExp("^"
									+ regex + "$", "i");
							eval(code)
						},
						parseCodes : {
							d : {
								g : 1,
								c : "d = parseInt(results[{0}], 10);\n",
								s : "(\\d{2})"
							},
							j : {
								g : 1,
								c : "d = parseInt(results[{0}], 10);\n",
								s : "(\\d{1,2})"
							},
							D : function() {
								for ( var a = [], i = 0; i < 7; a.push(Date
										.getShortDayName(i)), ++i) {
								}
								return {
									g : 0,
									c : null,
									s : "(?:" + a.join("|") + ")"
								}
							},
							l : function() {
								return {
									g : 0,
									c : null,
									s : "(?:" + Date.dayNames.join("|") + ")"
								}
							},
							N : {
								g : 0,
								c : null,
								s : "[1-7]"
							},
							S : {
								g : 0,
								c : null,
								s : "(?:st|nd|rd|th)"
							},
							w : {
								g : 0,
								c : null,
								s : "[0-6]"
							},
							z : {
								g : 0,
								c : null,
								s : "(?:\\d{1,3}"
							},
							W : {
								g : 0,
								c : null,
								s : "(?:\\d{2})"
							},
							F : function() {
								return {
									g : 1,
									c : "m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",
									s : "(" + Date.monthNames.join("|") + ")"
								}
							},
							M : function() {
								for ( var a = [], i = 0; i < 12; a.push(Date
										.getShortMonthName(i)), ++i) {
								}
								return Ext.applyIf( {
									s : "(" + a.join("|") + ")"
								}, $f("F"))
							},
							m : {
								g : 1,
								c : "m = parseInt(results[{0}], 10) - 1;\n",
								s : "(\\d{2})"
							},
							n : {
								g : 1,
								c : "m = parseInt(results[{0}], 10) - 1;\n",
								s : "(\\d{1,2})"
							},
							t : {
								g : 0,
								c : null,
								s : "(?:\\d{2})"
							},
							L : {
								g : 0,
								c : null,
								s : "(?:1|0)"
							},
							o : function() {
								return $f("Y")
							},
							Y : {
								g : 1,
								c : "y = parseInt(results[{0}], 10);\n",
								s : "(\\d{4})"
							},
							y : {
								g : 1,
								c : "var ty = parseInt(results[{0}], 10);\n"
										+ "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
								s : "(\\d{1,2})"
							},
							a : {
								g : 1,
								c : "if (results[{0}] == 'am') {\n"
										+ "if (h == 12) { h = 0; }\n"
										+ "} else { if (h < 12) { h += 12; }}",
								s : "(am|pm)"
							},
							A : {
								g : 1,
								c : "if (results[{0}] == 'AM') {\n"
										+ "if (h == 12) { h = 0; }\n"
										+ "} else { if (h < 12) { h += 12; }}",
								s : "(AM|PM)"
							},
							g : function() {
								return $f("G")
							},
							G : {
								g : 1,
								c : "h = parseInt(results[{0}], 10);\n",
								s : "(\\d{1,2})"
							},
							h : function() {
								return $f("H")
							},
							H : {
								g : 1,
								c : "h = parseInt(results[{0}], 10);\n",
								s : "(\\d{2})"
							},
							i : {
								g : 1,
								c : "i = parseInt(results[{0}], 10);\n",
								s : "(\\d{2})"
							},
							s : {
								g : 1,
								c : "s = parseInt(results[{0}], 10);\n",
								s : "(\\d{2})"
							},
							u : {
								g : 1,
								c : "ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",
								s : "(\\d+)"
							},
							O : {
								g : 1,
								c : [
										"o = results[{0}];",
										"var sn = o.substring(0,1);",
										"var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);",
										"var mn = o.substring(3,5) % 60;",
										"o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n" ]
										.join("\n"),
								s : "([+-]\\d{4})"
							},
							P : {
								g : 1,
								c : [
										"o = results[{0}];",
										"var sn = o.substring(0,1);",
										"var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);",
										"var mn = o.substring(4,6) % 60;",
										"o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n" ]
										.join("\n"),
								s : "([+-]\\d{2}:\\d{2})"
							},
							T : {
								g : 0,
								c : null,
								s : "[A-Z]{1,4}"
							},
							Z : {
								g : 1,
								c : "z = results[{0}] * 1;\n"
										+ "z = (-43200 <= z && z <= 50400)? z : null;\n",
								s : "([+-]?\\d{1,5})"
							},
							c : function() {
								var calc = [];
								var arr = [
										$f("Y", 1),
										$f("m", 2),
										$f("d", 3),
										$f("h", 4),
										$f("i", 5),
										$f("s", 6),
										{
											c : "ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"
										},
										{
											c : "if(results[9] == 'Z'){\no = 0;\n}else{\n"
													+ $f("P", 9).c + "\n}"
										} ];
								for ( var i = 0, l = arr.length; i < l; ++i) {
									calc.push(arr[i].c)
								}
								return {
									g : 1,
									c : calc.join(""),
									s : arr[0].s + "-" + arr[1].s + "-"
											+ arr[2].s + "T" + arr[3].s + ":"
											+ arr[4].s + ":" + arr[5].s
											+ "((.|,)\\d+)?" + "("
											+ $f("P", null).s + "|Z)"
								}
							},
							U : {
								g : 1,
								c : "u = parseInt(results[{0}], 10);\n",
								s : "(-?\\d+)"
							}
						}
					})
}());
Ext.override(Date, {
	dateFormat : function(B) {
		if (Date.formatFunctions[B] == null) {
			Date.createNewFormat(B)
		}
		var A = Date.formatFunctions[B];
		return this[A]()
	},
	getTimezone : function() {
		return this.toString().replace(
				/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/,
				"$1$2").replace(/[^A-Z]/g, "")
	},
	getGMTOffset : function(A) {
		return (this.getTimezoneOffset() > 0 ? "-" : "+")
				+ String.leftPad(Math.abs(Math
						.floor(this.getTimezoneOffset() / 60)), 2, "0")
				+ (A ? ":" : "")
				+ String.leftPad(Math.abs(this.getTimezoneOffset() % 60), 2,
						"0")
	},
	getDayOfYear : function() {
		var A = 0;
		Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
		for ( var B = 0; B < this.getMonth(); ++B) {
			A += Date.daysInMonth[B]
		}
		return A + this.getDate() - 1
	},
	getWeekOfYear : function() {
		var B = 86400000;
		var C = 7 * B;
		var D = Date.UTC(this.getFullYear(), this.getMonth(),
				this.getDate() + 3)
				/ B;
		var A = Math.floor(D / 7);
		var E = new Date(A * C).getUTCFullYear();
		return A - Math.floor(Date.UTC(E, 0, 7) / C) + 1
	},
	isLeapYear : function() {
		var A = this.getFullYear();
		return !!((A & 3) == 0 && (A % 100 || (A % 400 == 0 && A)))
	},
	getFirstDayOfMonth : function() {
		var A = (this.getDay() - (this.getDate() - 1)) % 7;
		return (A < 0) ? (A + 7) : A
	},
	getLastDayOfMonth : function() {
		var A = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this
				.getDate())) % 7;
		return (A < 0) ? (A + 7) : A
	},
	getFirstDateOfMonth : function() {
		return new Date(this.getFullYear(), this.getMonth(), 1)
	},
	getLastDateOfMonth : function() {
		return new Date(this.getFullYear(), this.getMonth(), this
				.getDaysInMonth())
	},
	getDaysInMonth : function() {
		Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
		return Date.daysInMonth[this.getMonth()]
	},
	getSuffix : function() {
		switch (this.getDate()) {
		case 1:
		case 21:
		case 31:
			return "st";
		case 2:
		case 22:
			return "nd";
		case 3:
		case 23:
			return "rd";
		default:
			return "th"
		}
	},
	clone : function() {
		return new Date(this.getTime())
	},
	clearTime : function(A) {
		if (A) {
			return this.clone().clearTime()
		}
		this.setHours(0);
		this.setMinutes(0);
		this.setSeconds(0);
		this.setMilliseconds(0);
		return this
	},
	add : function(B, C) {
		var D = this.clone();
		if (!B || C === 0) {
			return D
		}
		switch (B.toLowerCase()) {
		case Date.MILLI:
			D.setMilliseconds(this.getMilliseconds() + C);
			break;
		case Date.SECOND:
			D.setSeconds(this.getSeconds() + C);
			break;
		case Date.MINUTE:
			D.setMinutes(this.getMinutes() + C);
			break;
		case Date.HOUR:
			D.setHours(this.getHours() + C);
			break;
		case Date.DAY:
			D.setDate(this.getDate() + C);
			break;
		case Date.MONTH:
			var A = this.getDate();
			if (A > 28) {
				A = Math.min(A, this.getFirstDateOfMonth().add("mo", C)
						.getLastDateOfMonth().getDate())
			}
			D.setDate(A);
			D.setMonth(this.getMonth() + C);
			break;
		case Date.YEAR:
			D.setFullYear(this.getFullYear() + C);
			break
		}
		return D
	},
	between : function(C, A) {
		var B = this.getTime();
		return C.getTime() <= B && B <= A.getTime()
	}
});
Date.prototype.format = Date.prototype.dateFormat;
if (Ext.isSafari) {
	Date.brokenSetMonth = Date.prototype.setMonth;
	Date.prototype.setMonth = function(A) {
		if (A <= -1) {
			var D = Math.ceil(-A);
			var C = Math.ceil(D / 12);
			var B = (D % 12) ? 12 - D % 12 : 0;
			this.setFullYear(this.getFullYear() - C);
			return Date.brokenSetMonth.call(this, B)
		} else {
			return Date.brokenSetMonth.apply(this, arguments)
		}
	}
};
Ext.util.DelayedTask = function(E, D, A) {
	var G = null, F, B;
	var C = function() {
		var H = new Date().getTime();
		if (H - B >= F) {
			clearInterval(G);
			G = null;
			E.apply(D, A || [])
		}
	};
	this.delay = function(I, K, J, H) {
		if (G && I != F) {
			this.cancel()
		}
		F = I;
		B = new Date().getTime();
		E = K || E;
		D = J || D;
		A = H || A;
		if (!G) {
			G = setInterval(C, F)
		}
	};
	this.cancel = function() {
		if (G) {
			clearInterval(G);
			G = null
		}
	}
};
Ext.util.TaskRunner = function(E) {
	E = E || 10;
	var F = [], A = [];
	var B = 0;
	var G = false;
	var D = function() {
		G = false;
		clearInterval(B);
		B = 0
	};
	var H = function() {
		if (!G) {
			G = true;
			B = setInterval(I, E)
		}
	};
	var C = function(J) {
		A.push(J);
		if (J.onStop) {
			J.onStop.apply(J.scope || J)
		}
	};
	var I = function() {
		if (A.length > 0) {
			for ( var O = 0, K = A.length; O < K; O++) {
				F.remove(A[O])
			}
			A = [];
			if (F.length < 1) {
				D();
				return
			}
		}
		var M = new Date().getTime();
		for ( var O = 0, K = F.length; O < K; ++O) {
			var N = F[O];
			var J = M - N.taskRunTime;
			if (N.interval <= J) {
				var L = N.run.apply(N.scope || N, N.args
						|| [ ++N.taskRunCount ]);
				N.taskRunTime = M;
				if (L === false || N.taskRunCount === N.repeat) {
					C(N);
					return
				}
			}
			if (N.duration && N.duration <= (M - N.taskStartTime)) {
				C(N)
			}
		}
	};
	this.start = function(J) {
		F.push(J);
		J.taskStartTime = new Date().getTime();
		J.taskRunTime = 0;
		J.taskRunCount = 0;
		H();
		return J
	};
	this.stop = function(J) {
		C(J);
		return J
	};
	this.stopAll = function() {
		D();
		for ( var K = 0, J = F.length; K < J; K++) {
			if (F[K].onStop) {
				F[K].onStop()
			}
		}
		F = [];
		A = []
	}
};
Ext.TaskMgr = new Ext.util.TaskRunner();
Ext.util.MixedCollection = function(B, A) {
	this.items = [];
	this.map = {};
	this.keys = [];
	this.length = 0;
	this.addEvents("clear", "add", "replace", "remove", "sort");
	this.allowFunctions = B === true;
	if (A) {
		this.getKey = A
	}
	Ext.util.MixedCollection.superclass.constructor.call(this)
};
Ext.extend(Ext.util.MixedCollection, Ext.util.Observable,
		{
			allowFunctions : false,
			add : function(B, C) {
				if (arguments.length == 1) {
					C = arguments[0];
					B = this.getKey(C)
				}
				if (typeof B == "undefined" || B === null) {
					this.length++;
					this.items.push(C);
					this.keys.push(null)
				} else {
					var A = this.map[B];
					if (A) {
						return this.replace(B, C)
					}
					this.length++;
					this.items.push(C);
					this.map[B] = C;
					this.keys.push(B)
				}
				this.fireEvent("add", this.length - 1, C, B);
				return C
			},
			getKey : function(A) {
				return A.id
			},
			replace : function(C, D) {
				if (arguments.length == 1) {
					D = arguments[0];
					C = this.getKey(D)
				}
				var A = this.item(C);
				if (typeof C == "undefined" || C === null
						|| typeof A == "undefined") {
					return this.add(C, D)
				}
				var B = this.indexOfKey(C);
				this.items[B] = D;
				this.map[C] = D;
				this.fireEvent("replace", C, A, D);
				return D
			},
			addAll : function(E) {
				if (arguments.length > 1 || Ext.isArray(E)) {
					var B = arguments.length > 1 ? arguments : E;
					for ( var D = 0, A = B.length; D < A; D++) {
						this.add(B[D])
					}
				} else {
					for ( var C in E) {
						if (this.allowFunctions || typeof E[C] != "function") {
							this.add(C, E[C])
						}
					}
				}
			},
			each : function(E, D) {
				var B = [].concat(this.items);
				for ( var C = 0, A = B.length; C < A; C++) {
					if (E.call(D || B[C], B[C], C, A) === false) {
						break
					}
				}
			},
			eachKey : function(D, C) {
				for ( var B = 0, A = this.keys.length; B < A; B++) {
					D.call(C || window, this.keys[B], this.items[B], B, A)
				}
			},
			find : function(D, C) {
				for ( var B = 0, A = this.items.length; B < A; B++) {
					if (D.call(C || window, this.items[B], this.keys[B])) {
						return this.items[B]
					}
				}
				return null
			},
			insert : function(A, B, C) {
				if (arguments.length == 2) {
					C = arguments[1];
					B = this.getKey(C)
				}
				if (A >= this.length) {
					return this.add(B, C)
				}
				this.length++;
				this.items.splice(A, 0, C);
				if (typeof B != "undefined" && B != null) {
					this.map[B] = C
				}
				this.keys.splice(A, 0, B);
				this.fireEvent("add", A, C, B);
				return C
			},
			remove : function(A) {
				return this.removeAt(this.indexOf(A))
			},
			removeAt : function(A) {
				if (A < this.length && A >= 0) {
					this.length--;
					var C = this.items[A];
					this.items.splice(A, 1);
					var B = this.keys[A];
					if (typeof B != "undefined") {
						delete this.map[B]
					}
					this.keys.splice(A, 1);
					this.fireEvent("remove", C, B);
					return C
				}
				return false
			},
			removeKey : function(A) {
				return this.removeAt(this.indexOfKey(A))
			},
			getCount : function() {
				return this.length
			},
			indexOf : function(A) {
				return this.items.indexOf(A)
			},
			indexOfKey : function(A) {
				return this.keys.indexOf(A)
			},
			item : function(A) {
				var B = typeof this.map[A] != "undefined" ? this.map[A]
						: this.items[A];
				return typeof B != "function" || this.allowFunctions ? B : null
			},
			itemAt : function(A) {
				return this.items[A]
			},
			key : function(A) {
				return this.map[A]
			},
			contains : function(A) {
				return this.indexOf(A) != -1
			},
			containsKey : function(A) {
				return typeof this.map[A] != "undefined"
			},
			clear : function() {
				this.length = 0;
				this.items = [];
				this.keys = [];
				this.map = {};
				this.fireEvent("clear")
			},
			first : function() {
				return this.items[0]
			},
			last : function() {
				return this.items[this.length - 1]
			},
			_sort : function(I, A, H) {
				var C = String(A).toUpperCase() == "DESC" ? -1 : 1;
				H = H || function(K, J) {
					return K - J
				};
				var G = [], B = this.keys, F = this.items;
				for ( var D = 0, E = F.length; D < E; D++) {
					G[G.length] = {
						key : B[D],
						value : F[D],
						index : D
					}
				}
				G.sort(function(K, J) {
					var L = H(K[I], J[I]) * C;
					if (L == 0) {
						L = (K.index < J.index ? -1 : 1)
					}
					return L
				});
				for ( var D = 0, E = G.length; D < E; D++) {
					F[D] = G[D].value;
					B[D] = G[D].key
				}
				this.fireEvent("sort", this)
			},
			sort : function(A, B) {
				this._sort("value", A, B)
			},
			keySort : function(A, B) {
				this._sort("key", A, B || function(D, C) {
					return String(D).toUpperCase() - String(C).toUpperCase()
				})
			},
			getRange : function(E, A) {
				var B = this.items;
				if (B.length < 1) {
					return []
				}
				E = E || 0;
				A = Math.min(typeof A == "undefined" ? this.length - 1 : A,
						this.length - 1);
				var D = [];
				if (E <= A) {
					for ( var C = E; C <= A; C++) {
						D[D.length] = B[C]
					}
				} else {
					for ( var C = E; C >= A; C--) {
						D[D.length] = B[C]
					}
				}
				return D
			},
			filter : function(C, B, D, A) {
				if (Ext.isEmpty(B, false)) {
					return this.clone()
				}
				B = this.createValueMatcher(B, D, A);
				return this.filterBy(function(E) {
					return E && B.test(E[C])
				})
			},
			filterBy : function(F, E) {
				var G = new Ext.util.MixedCollection();
				G.getKey = this.getKey;
				var B = this.keys, D = this.items;
				for ( var C = 0, A = D.length; C < A; C++) {
					if (F.call(E || this, D[C], B[C])) {
						G.add(B[C], D[C])
					}
				}
				return G
			},
			findIndex : function(C, B, E, D, A) {
				if (Ext.isEmpty(B, false)) {
					return -1
				}
				B = this.createValueMatcher(B, D, A);
				return this.findIndexBy(function(F) {
					return F && B.test(F[C])
				}, null, E)
			},
			findIndexBy : function(F, E, G) {
				var B = this.keys, D = this.items;
				for ( var C = (G || 0), A = D.length; C < A; C++) {
					if (F.call(E || this, D[C], B[C])) {
						return C
					}
				}
				if (typeof G == "number" && G > 0) {
					for ( var C = 0; C < G; C++) {
						if (F.call(E || this, D[C], B[C])) {
							return C
						}
					}
				}
				return -1
			},
			createValueMatcher : function(B, C, A) {
				if (!B.exec) {
					B = String(B);
					B = new RegExp((C === true ? "" : "^") + Ext.escapeRe(B),
							A ? "" : "i")
				}
				return B
			},
			clone : function() {
				var E = new Ext.util.MixedCollection();
				var B = this.keys, D = this.items;
				for ( var C = 0, A = D.length; C < A; C++) {
					E.add(B[C], D[C])
				}
				E.getKey = this.getKey;
				return E
			}
		});
Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
Ext.util.JSON = new (function() {
	var useHasOwn = !! {}.hasOwnProperty;
	var pad = function(n) {
		return n < 10 ? "0" + n : n
	};
	var m = {
		"\b" : "\\b",
		"\t" : "\\t",
		"\n" : "\\n",
		"\f" : "\\f",
		"\r" : "\\r",
		"\"" : "\\\"",
		"\\" : "\\\\"
	};
	var encodeString = function(s) {
		if (/["\\\x00-\x1f]/.test(s)) {
			return "\""
					+ s.replace(/([\x00-\x1f\\"])/g, function(a, b) {
						var c = m[b];
						if (c) {
							return c
						}
						c = b.charCodeAt();
						return "\\u00" + Math.floor(c / 16).toString(16)
								+ (c % 16).toString(16)
					}) + "\""
		}
		return "\"" + s + "\""
	};
	var encodeArray = function(o) {
		var a = [ "[" ], b, i, l = o.length, v;
		for (i = 0; i < l; i += 1) {
			v = o[i];
			switch (typeof v) {
			case "undefined":
			case "function":
			case "unknown":
				break;
			default:
				if (b) {
					a.push(",")
				}
				a.push(v === null ? "null" : Ext.util.JSON.encode(v));
				b = true
			}
		}
		a.push("]");
		return a.join("")
	};
	this.encodeDate = function(o) {
		return "\"" + o.getFullYear() + "-" + pad(o.getMonth() + 1) + "-"
				+ pad(o.getDate()) + "T" + pad(o.getHours()) + ":"
				+ pad(o.getMinutes()) + ":" + pad(o.getSeconds()) + "\""
	};
	this.encode = function(o) {
		if (typeof o == "undefined" || o === null) {
			return "null"
		} else {
			if (Ext.isArray(o)) {
				return encodeArray(o)
			} else {
				if (Ext.isDate(o)) {
					return Ext.util.JSON.encodeDate(o)
				} else {
					if (typeof o == "string") {
						return encodeString(o)
					} else {
						if (typeof o == "number") {
							return isFinite(o) ? String(o) : "null"
						} else {
							if (typeof o == "boolean") {
								return String(o)
							} else {
								var a = [ "{" ], b, i, v;
								for (i in o) {
									if (!useHasOwn || o.hasOwnProperty(i)) {
										v = o[i];
										switch (typeof v) {
										case "undefined":
										case "function":
										case "unknown":
											break;
										default:
											if (b) {
												a.push(",")
											}
											a.push(this.encode(i), ":",
													v === null ? "null" : this
															.encode(v));
											b = true
										}
									}
								}
								a.push("}");
								return a.join("")
							}
						}
					}
				}
			}
		}
	};
	this.decode = function(json) {
		return eval("(" + json + ")")
	}
})();
Ext.encode = Ext.util.JSON.encode;
Ext.decode = Ext.util.JSON.decode;
Ext.util.Format = function() {
	var trimRe = /^\s+|\s+$/g;
	return {
		ellipsis : function(value, len) {
			if (value && value.length > len) {
				return value.substr(0, len - 3) + "..."
			}
			return value
		},
		undef : function(value) {
			return value !== undefined ? value : ""
		},
		defaultValue : function(value, defaultValue) {
			return value !== undefined && value !== "" ? value : defaultValue
		},
		htmlEncode : function(value) {
			return !value ? value : String(value).replace(/&/g, "&amp;")
					.replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g,
							"&quot;")
		},
		htmlDecode : function(value) {
			return !value ? value : String(value).replace(/&gt;/g, ">")
					.replace(/&lt;/g, "<").replace(/&quot;/g, "\"").replace(
							/&amp;/g, "&")
		},
		trim : function(value) {
			return String(value).replace(trimRe, "")
		},
		substr : function(value, start, length) {
			return String(value).substr(start, length)
		},
		lowercase : function(value) {
			return String(value).toLowerCase()
		},
		uppercase : function(value) {
			return String(value).toUpperCase()
		},
		capitalize : function(value) {
			return !value ? value : value.charAt(0).toUpperCase()
					+ value.substr(1).toLowerCase()
		},
		call : function(value, fn) {
			if (arguments.length > 2) {
				var args = Array.prototype.slice.call(arguments, 2);
				args.unshift(value);
				return eval(fn).apply(window, args)
			} else {
				return eval(fn).call(window, value)
			}
		},
		usMoney : function(v) {
			v = (Math.round((v - 0) * 100)) / 100;
			v = (v == Math.floor(v)) ? v + ".00" : ((v * 10 == Math
					.floor(v * 10)) ? v + "0" : v);
			v = String(v);
			var ps = v.split(".");
			var whole = ps[0];
			var sub = ps[1] ? "." + ps[1] : ".00";
			var r = /(\d+)(\d{3})/;
			while (r.test(whole)) {
				whole = whole.replace(r, "$1" + "," + "$2")
			}
			v = whole + sub;
			if (v.charAt(0) == "-") {
				return "-$" + v.substr(1)
			}
			return "$" + v
		},
		date : function(v, format) {
			if (!v) {
				return ""
			}
			if (!Ext.isDate(v)) {
				v = new Date(Date.parse(v))
			}
			return v.dateFormat(format || "m/d/Y")
		},
		dateRenderer : function(format) {
			return function(v) {
				return Ext.util.Format.date(v, format)
			}
		},
		stripTagsRE : /<\/?[^>]+>/gi,
		stripTags : function(v) {
			return !v ? v : String(v).replace(this.stripTagsRE, "")
		},
		stripScriptsRe : /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,
		stripScripts : function(v) {
			return !v ? v : String(v).replace(this.stripScriptsRe, "")
		},
		fileSize : function(size) {
			if (size < 1024) {
				return size + " bytes"
			} else {
				if (size < 1048576) {
					return (Math.round(((size * 10) / 1024)) / 10) + " KB"
				} else {
					return (Math.round(((size * 10) / 1048576)) / 10) + " MB"
				}
			}
		},
		math : function() {
			var fns = {};
			return function(v, a) {
				if (!fns[a]) {
					fns[a] = new Function("v", "return v " + a + ";")
				}
				return fns[a](v)
			}
		}(),
		nl2br : function(v) {
			return v === undefined || v === null ? "" : v.replace(/\n/g,
					"<br/>")
		}
	}
}();
Ext.XTemplate = function() {
	Ext.XTemplate.superclass.constructor.apply(this, arguments);
	var P = this.html;
	P = [ "<tpl>", P, "</tpl>" ].join("");
	var O = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
	var N = /^<tpl\b[^>]*?for="(.*?)"/;
	var L = /^<tpl\b[^>]*?if="(.*?)"/;
	var J = /^<tpl\b[^>]*?exec="(.*?)"/;
	var C, B = 0;
	var G = [];
	while (C = P.match(O)) {
		var M = C[0].match(N);
		var K = C[0].match(L);
		var I = C[0].match(J);
		var E = null, H = null, D = null;
		var A = M && M[1] ? M[1] : "";
		if (K) {
			E = K && K[1] ? K[1] : null;
			if (E) {
				H = new Function("values", "parent", "xindex", "xcount",
						"with(values){ return "
								+ (Ext.util.Format.htmlDecode(E)) + "; }")
			}
		}
		if (I) {
			E = I && I[1] ? I[1] : null;
			if (E) {
				D = new Function("values", "parent", "xindex", "xcount",
						"with(values){ " + (Ext.util.Format.htmlDecode(E))
								+ "; }")
			}
		}
		if (A) {
			switch (A) {
			case ".":
				A = new Function("values", "parent",
						"with(values){ return values; }");
				break;
			case "..":
				A = new Function("values", "parent",
						"with(values){ return parent; }");
				break;
			default:
				A = new Function("values", "parent", "with(values){ return "
						+ A + "; }")
			}
		}
		G.push( {
			id : B,
			target : A,
			exec : D,
			test : H,
			body : C[1] || ""
		});
		P = P.replace(C[0], "{xtpl" + B + "}");
		++B
	}
	for ( var F = G.length - 1; F >= 0; --F) {
		this.compileTpl(G[F])
	}
	this.master = G[G.length - 1];
	this.tpls = G
};
Ext
		.extend(
				Ext.XTemplate,
				Ext.Template,
				{
					re : /\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,
					codeRe : /\{\[((?:\\\]|.|\n)*?)\]\}/g,
					applySubTemplate : function(A, H, G, D, C) {
						var J = this.tpls[A];
						if (J.test && !J.test.call(this, H, G, D, C)) {
							return ""
						}
						if (J.exec && J.exec.call(this, H, G, D, C)) {
							return ""
						}
						var I = J.target ? J.target.call(this, H, G) : H;
						G = J.target ? H : G;
						if (J.target && Ext.isArray(I)) {
							var B = [];
							for ( var E = 0, F = I.length; E < F; E++) {
								B[B.length] = J.compiled.call(this, I[E], G,
										E + 1, F)
							}
							return B.join("")
						}
						return J.compiled.call(this, I, G, D, C)
					},
					compileTpl : function(tpl) {
						var fm = Ext.util.Format;
						var useF = this.disableFormats !== true;
						var sep = Ext.isGecko ? "+" : ",";
						var fn = function(m, name, format, args, math) {
							if (name.substr(0, 4) == "xtpl") {
								return "'" + sep + "this.applySubTemplate("
										+ name.substr(4)
										+ ", values, parent, xindex, xcount)"
										+ sep + "'"
							}
							var v;
							if (name === ".") {
								v = "values"
							} else {
								if (name === "#") {
									v = "xindex"
								} else {
									if (name.indexOf(".") != -1) {
										v = name
									} else {
										v = "values['" + name + "']"
									}
								}
							}
							if (math) {
								v = "(" + v + math + ")"
							}
							if (format && useF) {
								args = args ? "," + args : "";
								if (format.substr(0, 5) != "this.") {
									format = "fm." + format + "("
								} else {
									format = "this.call(\"" + format.substr(5)
											+ "\", ";
									args = ", values"
								}
							} else {
								args = "";
								format = "(" + v + " === undefined ? '' : "
							}
							return "'" + sep + format + v + args + ")" + sep
									+ "'"
						};
						var codeFn = function(m, code) {
							return "'" + sep + "(" + code + ")" + sep + "'"
						};
						var body;
						if (Ext.isGecko) {
							body = "tpl.compiled = function(values, parent, xindex, xcount){ return '"
									+ tpl.body.replace(/(\r\n|\n)/g, "\\n")
											.replace(/'/g, "\\'").replace(
													this.re, fn).replace(
													this.codeRe, codeFn)
									+ "';};"
						} else {
							body = [ "tpl.compiled = function(values, parent, xindex, xcount){ return ['" ];
							body.push(tpl.body.replace(/(\r\n|\n)/g, "\\n")
									.replace(/'/g, "\\'").replace(this.re, fn)
									.replace(this.codeRe, codeFn));
							body.push("'].join('');};");
							body = body.join("")
						}
						eval(body);
						return this
					},
					applyTemplate : function(A) {
						return this.master.compiled.call(this, A, {}, 1, 1)
					},
					compile : function() {
						return this
					}
				});
Ext.XTemplate.prototype.apply = Ext.XTemplate.prototype.applyTemplate;
Ext.XTemplate.from = function(A) {
	A = Ext.getDom(A);
	return new Ext.XTemplate(A.value || A.innerHTML)
};
Ext.util.CSS = function() {
	var D = null;
	var C = document;
	var B = /(-[a-z])/gi;
	var A = function(E, F) {
		return F.charAt(1).toUpperCase()
	};
	return {
		createStyleSheet : function(G, J) {
			var F;
			var E = C.getElementsByTagName("head")[0];
			var I = C.createElement("style");
			I.setAttribute("type", "text/css");
			if (J) {
				I.setAttribute("id", J)
			}
			if (Ext.isIE) {
				E.appendChild(I);
				F = I.styleSheet;
				F.cssText = G
			} else {
				try {
					I.appendChild(C.createTextNode(G))
				} catch (H) {
					I.cssText = G
				}
				E.appendChild(I);
				F = I.styleSheet ? I.styleSheet
						: (I.sheet || C.styleSheets[C.styleSheets.length - 1])
			}
			this.cacheStyleSheet(F);
			return F
		},
		removeStyleSheet : function(F) {
			var E = C.getElementById(F);
			if (E) {
				E.parentNode.removeChild(E)
			}
		},
		swapStyleSheet : function(G, E) {
			this.removeStyleSheet(G);
			var F = C.createElement("link");
			F.setAttribute("rel", "stylesheet");
			F.setAttribute("type", "text/css");
			F.setAttribute("id", G);
			F.setAttribute("href", E);
			C.getElementsByTagName("head")[0].appendChild(F)
		},
		refreshCache : function() {
			return this.getRules(true)
		},
		cacheStyleSheet : function(F) {
			if (!D) {
				D = {}
			}
			try {
				var H = F.cssRules || F.rules;
				for ( var E = H.length - 1; E >= 0; --E) {
					D[H[E].selectorText] = H[E]
				}
			} catch (G) {
			}
		},
		getRules : function(F) {
			if (D == null || F) {
				D = {};
				var H = C.styleSheets;
				for ( var G = 0, E = H.length; G < E; G++) {
					try {
						this.cacheStyleSheet(H[G])
					} catch (I) {
					}
				}
			}
			return D
		},
		getRule : function(E, G) {
			var F = this.getRules(G);
			if (!Ext.isArray(E)) {
				return F[E]
			}
			for ( var H = 0; H < E.length; H++) {
				if (F[E[H]]) {
					return F[E[H]]
				}
			}
			return null
		},
		updateRule : function(E, H, G) {
			if (!Ext.isArray(E)) {
				var I = this.getRule(E);
				if (I) {
					I.style[H.replace(B, A)] = G;
					return true
				}
			} else {
				for ( var F = 0; F < E.length; F++) {
					if (this.updateRule(E[F], H, G)) {
						return true
					}
				}
			}
			return false
		}
	}
}();
Ext.util.ClickRepeater = function(B, A) {
	this.el = Ext.get(B);
	this.el.unselectable();
	Ext.apply(this, A);
	this.addEvents("mousedown", "click", "mouseup");
	this.el.on("mousedown", this.handleMouseDown, this);
	if (this.preventDefault || this.stopDefault) {
		this.el.on("click", function(C) {
			if (this.preventDefault) {
				C.preventDefault()
			}
			if (this.stopDefault) {
				C.stopEvent()
			}
		}, this)
	}
	if (this.handler) {
		this.on("click", this.handler, this.scope || this)
	}
	Ext.util.ClickRepeater.superclass.constructor.call(this)
};
Ext.extend(Ext.util.ClickRepeater, Ext.util.Observable, {
	interval : 20,
	delay : 250,
	preventDefault : true,
	stopDefault : false,
	timer : 0,
	handleMouseDown : function() {
		clearTimeout(this.timer);
		this.el.blur();
		if (this.pressClass) {
			this.el.addClass(this.pressClass)
		}
		this.mousedownTime = new Date();
		Ext.getDoc().on("mouseup", this.handleMouseUp, this);
		this.el.on("mouseout", this.handleMouseOut, this);
		this.fireEvent("mousedown", this);
		this.fireEvent("click", this);
		if (this.accelerate) {
			this.delay = 400
		}
		this.timer = this.click.defer(this.delay || this.interval, this)
	},
	click : function() {
		this.fireEvent("click", this);
		this.timer = this.click.defer(this.accelerate ? this.easeOutExpo(
				this.mousedownTime.getElapsed(), 400, -390, 12000)
				: this.interval, this)
	},
	easeOutExpo : function(B, A, D, C) {
		return (B == C) ? A + D : D * (-Math.pow(2, -10 * B / C) + 1) + A
	},
	handleMouseOut : function() {
		clearTimeout(this.timer);
		if (this.pressClass) {
			this.el.removeClass(this.pressClass)
		}
		this.el.on("mouseover", this.handleMouseReturn, this)
	},
	handleMouseReturn : function() {
		this.el.un("mouseover", this.handleMouseReturn, this);
		if (this.pressClass) {
			this.el.addClass(this.pressClass)
		}
		this.click()
	},
	handleMouseUp : function() {
		clearTimeout(this.timer);
		this.el.un("mouseover", this.handleMouseReturn, this);
		this.el.un("mouseout", this.handleMouseOut, this);
		Ext.getDoc().un("mouseup", this.handleMouseUp, this);
		this.el.removeClass(this.pressClass);
		this.fireEvent("mouseup", this)
	}
});
Ext.KeyNav = function(B, A) {
	this.el = Ext.get(B);
	Ext.apply(this, A);
	if (!this.disabled) {
		this.disabled = true;
		this.enable()
	}
};
Ext.KeyNav.prototype = {
	disabled : false,
	defaultEventAction : "stopEvent",
	forceKeyDown : false,
	prepareEvent : function(C) {
		var A = C.getKey();
		var B = this.keyToHandler[A];
		if (Ext.isSafari2 && B && A >= 37 && A <= 40) {
			C.stopEvent()
		}
	},
	relay : function(C) {
		var A = C.getKey();
		var B = this.keyToHandler[A];
		if (B && this[B]) {
			if (this.doRelay(C, this[B], B) !== true) {
				C[this.defaultEventAction]()
			}
		}
	},
	doRelay : function(C, B, A) {
		return B.call(this.scope || this, C)
	},
	enter : false,
	left : false,
	right : false,
	up : false,
	down : false,
	tab : false,
	esc : false,
	pageUp : false,
	pageDown : false,
	del : false,
	home : false,
	end : false,
	keyToHandler : {
		37 : "left",
		39 : "right",
		38 : "up",
		40 : "down",
		33 : "pageUp",
		34 : "pageDown",
		46 : "del",
		36 : "home",
		35 : "end",
		13 : "enter",
		27 : "esc",
		9 : "tab"
	},
	enable : function() {
		if (this.disabled) {
			if (this.forceKeyDown || Ext.isIE || Ext.isSafari3 || Ext.isAir) {
				this.el.on("keydown", this.relay, this)
			} else {
				this.el.on("keydown", this.prepareEvent, this);
				this.el.on("keypress", this.relay, this)
			}
			this.disabled = false
		}
	},
	disable : function() {
		if (!this.disabled) {
			if (this.forceKeyDown || Ext.isIE || Ext.isSafari3 || Ext.isAir) {
				this.el.un("keydown", this.relay)
			} else {
				this.el.un("keydown", this.prepareEvent);
				this.el.un("keypress", this.relay)
			}
			this.disabled = true
		}
	}
};
Ext.KeyMap = function(C, B, A) {
	this.el = Ext.get(C);
	this.eventName = A || "keydown";
	this.bindings = [];
	if (B) {
		this.addBinding(B)
	}
	this.enable()
};
Ext.KeyMap.prototype = {
	stopEvent : false,
	addBinding : function(D) {
		if (Ext.isArray(D)) {
			for ( var F = 0, H = D.length; F < H; F++) {
				this.addBinding(D[F])
			}
			return
		}
		var N = D.key, C = D.shift, A = D.ctrl, G = D.alt, J = D.fn
				|| D.handler, M = D.scope;
		if (D.stopEvent) {
			this.stopEvent = D.stopEvent
		}
		if (typeof N == "string") {
			var K = [];
			var I = N.toUpperCase();
			for ( var E = 0, H = I.length; E < H; E++) {
				K.push(I.charCodeAt(E))
			}
			N = K
		}
		var B = Ext.isArray(N);
		var L = function(R) {
			if ((!C || R.shiftKey) && (!A || R.ctrlKey) && (!G || R.altKey)) {
				var P = R.getKey();
				if (B) {
					for ( var Q = 0, O = N.length; Q < O; Q++) {
						if (N[Q] == P) {
							if (this.stopEvent) {
								R.stopEvent()
							}
							J.call(M || window, P, R);
							return
						}
					}
				} else {
					if (P == N) {
						if (this.stopEvent) {
							R.stopEvent()
						}
						J.call(M || window, P, R)
					}
				}
			}
		};
		this.bindings.push(L)
	},
	on : function(B, D, C) {
		var G, A, E, F;
		if (typeof B == "object" && !Ext.isArray(B)) {
			G = B.key;
			A = B.shift;
			E = B.ctrl;
			F = B.alt
		} else {
			G = B
		}
		this.addBinding( {
			key : G,
			shift : A,
			ctrl : E,
			alt : F,
			fn : D,
			scope : C
		})
	},
	handleKeyDown : function(D) {
		if (this.enabled) {
			var B = this.bindings;
			for ( var C = 0, A = B.length; C < A; C++) {
				B[C].call(this, D)
			}
		}
	},
	isEnabled : function() {
		return this.enabled
	},
	enable : function() {
		if (!this.enabled) {
			this.el.on(this.eventName, this.handleKeyDown, this);
			this.enabled = true
		}
	},
	disable : function() {
		if (this.enabled) {
			this.el.removeListener(this.eventName, this.handleKeyDown, this);
			this.enabled = false
		}
	}
};
Ext.util.TextMetrics = function() {
	var A;
	return {
		measure : function(B, C, D) {
			if (!A) {
				A = Ext.util.TextMetrics.Instance(B, D)
			}
			A.bind(B);
			A.setFixedWidth(D || "auto");
			return A.getSize(C)
		},
		createInstance : function(B, C) {
			return Ext.util.TextMetrics.Instance(B, C)
		}
	}
}();
Ext.util.TextMetrics.Instance = function(B, D) {
	var C = new Ext.Element(document.createElement("div"));
	document.body.appendChild(C.dom);
	C.position("absolute");
	C.setLeftTop(-1000, -1000);
	C.hide();
	if (D) {
		C.setWidth(D)
	}
	var A = {
		getSize : function(F) {
			C.update(F);
			var E = C.getSize();
			C.update("");
			return E
		},
		bind : function(E) {
			C.setStyle(Ext.fly(E).getStyles("font-size", "font-style",
					"font-weight", "font-family", "line-height",
					"text-transform", "letter-spacing"))
		},
		setFixedWidth : function(E) {
			C.setWidth(E)
		},
		getWidth : function(E) {
			C.dom.style.width = "auto";
			return this.getSize(E).width
		},
		getHeight : function(E) {
			return this.getSize(E).height
		}
	};
	A.bind(B);
	return A
};
Ext.Element.measureText = Ext.util.TextMetrics.measure;
(function() {
	var A = Ext.EventManager;
	var B = Ext.lib.Dom;
	Ext.dd.DragDrop = function(E, C, D) {
		if (E) {
			this.init(E, C, D)
		}
	};
	Ext.dd.DragDrop.prototype = {
		id : null,
		config : null,
		dragElId : null,
		handleElId : null,
		invalidHandleTypes : null,
		invalidHandleIds : null,
		invalidHandleClasses : null,
		startPageX : 0,
		startPageY : 0,
		groups : null,
		locked : false,
		lock : function() {
			this.locked = true
		},
		unlock : function() {
			this.locked = false
		},
		isTarget : true,
		padding : null,
		_domRef : null,
		__ygDragDrop : true,
		constrainX : false,
		constrainY : false,
		minX : 0,
		maxX : 0,
		minY : 0,
		maxY : 0,
		maintainOffset : false,
		xTicks : null,
		yTicks : null,
		primaryButtonOnly : true,
		available : false,
		hasOuterHandles : false,
		b4StartDrag : function(C, D) {
		},
		startDrag : function(C, D) {
		},
		b4Drag : function(C) {
		},
		onDrag : function(C) {
		},
		onDragEnter : function(C, D) {
		},
		b4DragOver : function(C) {
		},
		onDragOver : function(C, D) {
		},
		b4DragOut : function(C) {
		},
		onDragOut : function(C, D) {
		},
		b4DragDrop : function(C) {
		},
		onDragDrop : function(C, D) {
		},
		onInvalidDrop : function(C) {
		},
		b4EndDrag : function(C) {
		},
		endDrag : function(C) {
		},
		b4MouseDown : function(C) {
		},
		onMouseDown : function(C) {
		},
		onMouseUp : function(C) {
		},
		onAvailable : function() {
		},
		defaultPadding : {
			left : 0,
			right : 0,
			top : 0,
			bottom : 0
		},
		constrainTo : function(H, F, M) {
			if (typeof F == "number") {
				F = {
					left : F,
					right : F,
					top : F,
					bottom : F
				}
			}
			F = F || this.defaultPadding;
			var J = Ext.get(this.getEl()).getBox();
			var C = Ext.get(H);
			var L = C.getScroll();
			var I, D = C.dom;
			if (D == document.body) {
				I = {
					x : L.left,
					y : L.top,
					width : Ext.lib.Dom.getViewWidth(),
					height : Ext.lib.Dom.getViewHeight()
				}
			} else {
				var K = C.getXY();
				I = {
					x : K[0] + L.left,
					y : K[1] + L.top,
					width : D.clientWidth,
					height : D.clientHeight
				}
			}
			var G = J.y - I.y;
			var E = J.x - I.x;
			this.resetConstraints();
			this.setXConstraint(E - (F.left || 0), I.width - E - J.width
					- (F.right || 0), this.xTickSize);
			this.setYConstraint(G - (F.top || 0), I.height - G - J.height
					- (F.bottom || 0), this.yTickSize)
		},
		getEl : function() {
			if (!this._domRef) {
				this._domRef = Ext.getDom(this.id)
			}
			return this._domRef
		},
		getDragEl : function() {
			return Ext.getDom(this.dragElId)
		},
		init : function(E, C, D) {
			this.initTarget(E, C, D);
			A.on(this.id, "mousedown", this.handleMouseDown, this)
		},
		initTarget : function(E, C, D) {
			this.config = D || {};
			this.DDM = Ext.dd.DDM;
			this.groups = {};
			if (typeof E !== "string") {
				E = Ext.id(E)
			}
			this.id = E;
			this.addToGroup((C) ? C : "default");
			this.handleElId = E;
			this.setDragElId(E);
			this.invalidHandleTypes = {
				A : "A"
			};
			this.invalidHandleIds = {};
			this.invalidHandleClasses = [];
			this.applyConfig();
			this.handleOnAvailable()
		},
		applyConfig : function() {
			this.padding = this.config.padding || [ 0, 0, 0, 0 ];
			this.isTarget = (this.config.isTarget !== false);
			this.maintainOffset = (this.config.maintainOffset);
			this.primaryButtonOnly = (this.config.primaryButtonOnly !== false)
		},
		handleOnAvailable : function() {
			this.available = true;
			this.resetConstraints();
			this.onAvailable()
		},
		setPadding : function(E, C, F, D) {
			if (!C && 0 !== C) {
				this.padding = [ E, E, E, E ]
			} else {
				if (!F && 0 !== F) {
					this.padding = [ E, C, E, C ]
				} else {
					this.padding = [ E, C, F, D ]
				}
			}
		},
		setInitPosition : function(F, E) {
			var G = this.getEl();
			if (!this.DDM.verifyEl(G)) {
				return
			}
			var D = F || 0;
			var C = E || 0;
			var H = B.getXY(G);
			this.initPageX = H[0] - D;
			this.initPageY = H[1] - C;
			this.lastPageX = H[0];
			this.lastPageY = H[1];
			this.setStartPosition(H)
		},
		setStartPosition : function(D) {
			var C = D || B.getXY(this.getEl());
			this.deltaSetXY = null;
			this.startPageX = C[0];
			this.startPageY = C[1]
		},
		addToGroup : function(C) {
			this.groups[C] = true;
			this.DDM.regDragDrop(this, C)
		},
		removeFromGroup : function(C) {
			if (this.groups[C]) {
				delete this.groups[C]
			}
			this.DDM.removeDDFromGroup(this, C)
		},
		setDragElId : function(C) {
			this.dragElId = C
		},
		setHandleElId : function(C) {
			if (typeof C !== "string") {
				C = Ext.id(C)
			}
			this.handleElId = C;
			this.DDM.regHandle(this.id, C)
		},
		setOuterHandleElId : function(C) {
			if (typeof C !== "string") {
				C = Ext.id(C)
			}
			A.on(C, "mousedown", this.handleMouseDown, this);
			this.setHandleElId(C);
			this.hasOuterHandles = true
		},
		unreg : function() {
			A.un(this.id, "mousedown", this.handleMouseDown);
			this._domRef = null;
			this.DDM._remove(this)
		},
		destroy : function() {
			this.unreg()
		},
		isLocked : function() {
			return (this.DDM.isLocked() || this.locked)
		},
		handleMouseDown : function(E, D) {
			if (this.primaryButtonOnly && E.button != 0) {
				return
			}
			if (this.isLocked()) {
				return
			}
			this.DDM.refreshCache(this.groups);
			var C = new Ext.lib.Point(Ext.lib.Event.getPageX(E), Ext.lib.Event
					.getPageY(E));
			if (!this.hasOuterHandles && !this.DDM.isOverTarget(C, this)) {
			} else {
				if (this.clickValidator(E)) {
					this.setStartPosition();
					this.b4MouseDown(E);
					this.onMouseDown(E);
					this.DDM.handleMouseDown(E, this);
					this.DDM.stopEvent(E)
				} else {
				}
			}
		},
		clickValidator : function(D) {
			var C = D.getTarget();
			return (this.isValidHandleChild(C) && (this.id == this.handleElId || this.DDM
					.handleWasClicked(C, this.id)))
		},
		addInvalidHandleType : function(C) {
			var D = C.toUpperCase();
			this.invalidHandleTypes[D] = D
		},
		addInvalidHandleId : function(C) {
			if (typeof C !== "string") {
				C = Ext.id(C)
			}
			this.invalidHandleIds[C] = C
		},
		addInvalidHandleClass : function(C) {
			this.invalidHandleClasses.push(C)
		},
		removeInvalidHandleType : function(C) {
			var D = C.toUpperCase();
			delete this.invalidHandleTypes[D]
		},
		removeInvalidHandleId : function(C) {
			if (typeof C !== "string") {
				C = Ext.id(C)
			}
			delete this.invalidHandleIds[C]
		},
		removeInvalidHandleClass : function(D) {
			for ( var E = 0, C = this.invalidHandleClasses.length; E < C; ++E) {
				if (this.invalidHandleClasses[E] == D) {
					delete this.invalidHandleClasses[E]
				}
			}
		},
		isValidHandleChild : function(F) {
			var E = true;
			var H;
			try {
				H = F.nodeName.toUpperCase()
			} catch (G) {
				H = F.nodeName
			}
			E = E && !this.invalidHandleTypes[H];
			E = E && !this.invalidHandleIds[F.id];
			for ( var D = 0, C = this.invalidHandleClasses.length; E && D < C; ++D) {
				E = !Ext.fly(F).hasClass(this.invalidHandleClasses[D])
			}
			return E
		},
		setXTicks : function(F, C) {
			this.xTicks = [];
			this.xTickSize = C;
			var E = {};
			for ( var D = this.initPageX; D >= this.minX; D = D - C) {
				if (!E[D]) {
					this.xTicks[this.xTicks.length] = D;
					E[D] = true
				}
			}
			for (D = this.initPageX; D <= this.maxX; D = D + C) {
				if (!E[D]) {
					this.xTicks[this.xTicks.length] = D;
					E[D] = true
				}
			}
			this.xTicks.sort(this.DDM.numericSort)
		},
		setYTicks : function(F, C) {
			this.yTicks = [];
			this.yTickSize = C;
			var E = {};
			for ( var D = this.initPageY; D >= this.minY; D = D - C) {
				if (!E[D]) {
					this.yTicks[this.yTicks.length] = D;
					E[D] = true
				}
			}
			for (D = this.initPageY; D <= this.maxY; D = D + C) {
				if (!E[D]) {
					this.yTicks[this.yTicks.length] = D;
					E[D] = true
				}
			}
			this.yTicks.sort(this.DDM.numericSort)
		},
		setXConstraint : function(E, D, C) {
			this.leftConstraint = E;
			this.rightConstraint = D;
			this.minX = this.initPageX - E;
			this.maxX = this.initPageX + D;
			if (C) {
				this.setXTicks(this.initPageX, C)
			}
			this.constrainX = true
		},
		clearConstraints : function() {
			this.constrainX = false;
			this.constrainY = false;
			this.clearTicks()
		},
		clearTicks : function() {
			this.xTicks = null;
			this.yTicks = null;
			this.xTickSize = 0;
			this.yTickSize = 0
		},
		setYConstraint : function(C, E, D) {
			this.topConstraint = C;
			this.bottomConstraint = E;
			this.minY = this.initPageY - C;
			this.maxY = this.initPageY + E;
			if (D) {
				this.setYTicks(this.initPageY, D)
			}
			this.constrainY = true
		},
		resetConstraints : function() {
			if (this.initPageX || this.initPageX === 0) {
				var D = (this.maintainOffset) ? this.lastPageX - this.initPageX
						: 0;
				var C = (this.maintainOffset) ? this.lastPageY - this.initPageY
						: 0;
				this.setInitPosition(D, C)
			} else {
				this.setInitPosition()
			}
			if (this.constrainX) {
				this.setXConstraint(this.leftConstraint, this.rightConstraint,
						this.xTickSize)
			}
			if (this.constrainY) {
				this.setYConstraint(this.topConstraint, this.bottomConstraint,
						this.yTickSize)
			}
		},
		getTick : function(I, F) {
			if (!F) {
				return I
			} else {
				if (F[0] >= I) {
					return F[0]
				} else {
					for ( var D = 0, C = F.length; D < C; ++D) {
						var E = D + 1;
						if (F[E] && F[E] >= I) {
							var H = I - F[D];
							var G = F[E] - I;
							return (G > H) ? F[D] : F[E]
						}
					}
					return F[F.length - 1]
				}
			}
		},
		toString : function() {
			return ("DragDrop " + this.id)
		}
	}
})();
if (!Ext.dd.DragDropMgr) {
	Ext.dd.DragDropMgr = function() {
		var A = Ext.EventManager;
		return {
			ids : {},
			handleIds : {},
			dragCurrent : null,
			dragOvers : {},
			deltaX : 0,
			deltaY : 0,
			preventDefault : true,
			stopPropagation : true,
			initialized : false,
			locked : false,
			init : function() {
				this.initialized = true
			},
			POINT : 0,
			INTERSECT : 1,
			mode : 0,
			_execOnAll : function(D, C) {
				for ( var E in this.ids) {
					for ( var B in this.ids[E]) {
						var F = this.ids[E][B];
						if (!this.isTypeOfDD(F)) {
							continue
						}
						F[D].apply(F, C)
					}
				}
			},
			_onLoad : function() {
				this.init();
				A.on(document, "mouseup", this.handleMouseUp, this, true);
				A.on(document, "mousemove", this.handleMouseMove, this, true);
				A.on(window, "unload", this._onUnload, this, true);
				A.on(window, "resize", this._onResize, this, true)
			},
			_onResize : function(B) {
				this._execOnAll("resetConstraints", [])
			},
			lock : function() {
				this.locked = true
			},
			unlock : function() {
				this.locked = false
			},
			isLocked : function() {
				return this.locked
			},
			locationCache : {},
			useCache : true,
			clickPixelThresh : 3,
			clickTimeThresh : 350,
			dragThreshMet : false,
			clickTimeout : null,
			startX : 0,
			startY : 0,
			regDragDrop : function(C, B) {
				if (!this.initialized) {
					this.init()
				}
				if (!this.ids[B]) {
					this.ids[B] = {}
				}
				this.ids[B][C.id] = C
			},
			removeDDFromGroup : function(D, B) {
				if (!this.ids[B]) {
					this.ids[B] = {}
				}
				var C = this.ids[B];
				if (C && C[D.id]) {
					delete C[D.id]
				}
			},
			_remove : function(C) {
				for ( var B in C.groups) {
					if (B && this.ids[B][C.id]) {
						delete this.ids[B][C.id]
					}
				}
				delete this.handleIds[C.id]
			},
			regHandle : function(C, B) {
				if (!this.handleIds[C]) {
					this.handleIds[C] = {}
				}
				this.handleIds[C][B] = B
			},
			isDragDrop : function(B) {
				return (this.getDDById(B)) ? true : false
			},
			getRelated : function(F, C) {
				var E = [];
				for ( var D in F.groups) {
					for (j in this.ids[D]) {
						var B = this.ids[D][j];
						if (!this.isTypeOfDD(B)) {
							continue
						}
						if (!C || B.isTarget) {
							E[E.length] = B
						}
					}
				}
				return E
			},
			isLegalTarget : function(F, E) {
				var C = this.getRelated(F, true);
				for ( var D = 0, B = C.length; D < B; ++D) {
					if (C[D].id == E.id) {
						return true
					}
				}
				return false
			},
			isTypeOfDD : function(B) {
				return (B && B.__ygDragDrop)
			},
			isHandle : function(C, B) {
				return (this.handleIds[C] && this.handleIds[C][B])
			},
			getDDById : function(C) {
				for ( var B in this.ids) {
					if (this.ids[B][C]) {
						return this.ids[B][C]
					}
				}
				return null
			},
			handleMouseDown : function(D, C) {
				if (Ext.QuickTips) {
					Ext.QuickTips.disable()
				}
				this.currentTarget = D.getTarget();
				this.dragCurrent = C;
				var B = C.getEl();
				this.startX = D.getPageX();
				this.startY = D.getPageY();
				this.deltaX = this.startX - B.offsetLeft;
				this.deltaY = this.startY - B.offsetTop;
				this.dragThreshMet = false;
				this.clickTimeout = setTimeout(function() {
					var E = Ext.dd.DDM;
					E.startDrag(E.startX, E.startY)
				}, this.clickTimeThresh)
			},
			startDrag : function(B, C) {
				clearTimeout(this.clickTimeout);
				if (this.dragCurrent) {
					this.dragCurrent.b4StartDrag(B, C);
					this.dragCurrent.startDrag(B, C)
				}
				this.dragThreshMet = true
			},
			handleMouseUp : function(B) {
				if (Ext.QuickTips) {
					Ext.QuickTips.enable()
				}
				if (!this.dragCurrent) {
					return
				}
				clearTimeout(this.clickTimeout);
				if (this.dragThreshMet) {
					this.fireEvents(B, true)
				} else {
				}
				this.stopDrag(B);
				this.stopEvent(B)
			},
			stopEvent : function(B) {
				if (this.stopPropagation) {
					B.stopPropagation()
				}
				if (this.preventDefault) {
					B.preventDefault()
				}
			},
			stopDrag : function(B) {
				if (this.dragCurrent) {
					if (this.dragThreshMet) {
						this.dragCurrent.b4EndDrag(B);
						this.dragCurrent.endDrag(B)
					}
					this.dragCurrent.onMouseUp(B)
				}
				this.dragCurrent = null;
				this.dragOvers = {}
			},
			handleMouseMove : function(D) {
				if (!this.dragCurrent) {
					return true
				}
				if (Ext.isIE
						&& (D.button !== 0 && D.button !== 1 && D.button !== 2)) {
					this.stopEvent(D);
					return this.handleMouseUp(D)
				}
				if (!this.dragThreshMet) {
					var C = Math.abs(this.startX - D.getPageX());
					var B = Math.abs(this.startY - D.getPageY());
					if (C > this.clickPixelThresh || B > this.clickPixelThresh) {
						this.startDrag(this.startX, this.startY)
					}
				}
				if (this.dragThreshMet) {
					this.dragCurrent.b4Drag(D);
					this.dragCurrent.onDrag(D);
					if (!this.dragCurrent.moveOnly) {
						this.fireEvents(D, false)
					}
				}
				this.stopEvent(D);
				return true
			},
			fireEvents : function(K, L) {
				var N = this.dragCurrent;
				if (!N || N.isLocked()) {
					return
				}
				var O = K.getPoint();
				var B = [];
				var E = [];
				var I = [];
				var G = [];
				var D = [];
				for ( var F in this.dragOvers) {
					var C = this.dragOvers[F];
					if (!this.isTypeOfDD(C)) {
						continue
					}
					if (!this.isOverTarget(O, C, this.mode)) {
						E.push(C)
					}
					B[F] = true;
					delete this.dragOvers[F]
				}
				for ( var M in N.groups) {
					if ("string" != typeof M) {
						continue
					}
					for (F in this.ids[M]) {
						var H = this.ids[M][F];
						if (!this.isTypeOfDD(H)) {
							continue
						}
						if (H.isTarget && !H.isLocked() && H != N) {
							if (this.isOverTarget(O, H, this.mode)) {
								if (L) {
									G.push(H)
								} else {
									if (!B[H.id]) {
										D.push(H)
									} else {
										I.push(H)
									}
									this.dragOvers[H.id] = H
								}
							}
						}
					}
				}
				if (this.mode) {
					if (E.length) {
						N.b4DragOut(K, E);
						N.onDragOut(K, E)
					}
					if (D.length) {
						N.onDragEnter(K, D)
					}
					if (I.length) {
						N.b4DragOver(K, I);
						N.onDragOver(K, I)
					}
					if (G.length) {
						N.b4DragDrop(K, G);
						N.onDragDrop(K, G)
					}
				} else {
					var J = 0;
					for (F = 0, J = E.length; F < J; ++F) {
						N.b4DragOut(K, E[F].id);
						N.onDragOut(K, E[F].id)
					}
					for (F = 0, J = D.length; F < J; ++F) {
						N.onDragEnter(K, D[F].id)
					}
					for (F = 0, J = I.length; F < J; ++F) {
						N.b4DragOver(K, I[F].id);
						N.onDragOver(K, I[F].id)
					}
					for (F = 0, J = G.length; F < J; ++F) {
						N.b4DragDrop(K, G[F].id);
						N.onDragDrop(K, G[F].id)
					}
				}
				if (L && !G.length) {
					N.onInvalidDrop(K)
				}
			},
			getBestMatch : function(D) {
				var F = null;
				var C = D.length;
				if (C == 1) {
					F = D[0]
				} else {
					for ( var E = 0; E < C; ++E) {
						var B = D[E];
						if (B.cursorIsOver) {
							F = B;
							break
						} else {
							if (!F || F.overlap.getArea() < B.overlap.getArea()) {
								F = B
							}
						}
					}
				}
				return F
			},
			refreshCache : function(C) {
				for ( var B in C) {
					if ("string" != typeof B) {
						continue
					}
					for ( var D in this.ids[B]) {
						var E = this.ids[B][D];
						if (this.isTypeOfDD(E)) {
							var F = this.getLocation(E);
							if (F) {
								this.locationCache[E.id] = F
							} else {
								delete this.locationCache[E.id]
							}
						}
					}
				}
			},
			verifyEl : function(C) {
				if (C) {
					var B;
					if (Ext.isIE) {
						try {
							B = C.offsetParent
						} catch (D) {
						}
					} else {
						B = C.offsetParent
					}
					if (B) {
						return true
					}
				}
				return false
			},
			getLocation : function(G) {
				if (!this.isTypeOfDD(G)) {
					return null
				}
				var E = G.getEl(), J, D, C, L, K, M, B, I, F;
				try {
					J = Ext.lib.Dom.getXY(E)
				} catch (H) {
				}
				if (!J) {
					return null
				}
				D = J[0];
				C = D + E.offsetWidth;
				L = J[1];
				K = L + E.offsetHeight;
				M = L - G.padding[0];
				B = C + G.padding[1];
				I = K + G.padding[2];
				F = D - G.padding[3];
				return new Ext.lib.Region(M, B, I, F)
			},
			isOverTarget : function(J, B, D) {
				var F = this.locationCache[B.id];
				if (!F || !this.useCache) {
					F = this.getLocation(B);
					this.locationCache[B.id] = F
				}
				if (!F) {
					return false
				}
				B.cursorIsOver = F.contains(J);
				var I = this.dragCurrent;
				if (!I || !I.getTargetCoord
						|| (!D && !I.constrainX && !I.constrainY)) {
					return B.cursorIsOver
				}
				B.overlap = null;
				var G = I.getTargetCoord(J.x, J.y);
				var C = I.getDragEl();
				var E = new Ext.lib.Region(G.y, G.x + C.offsetWidth, G.y
						+ C.offsetHeight, G.x);
				var H = E.intersect(F);
				if (H) {
					B.overlap = H;
					return (D) ? true : B.cursorIsOver
				} else {
					return false
				}
			},
			_onUnload : function(C, B) {
				Ext.dd.DragDropMgr.unregAll()
			},
			unregAll : function() {
				if (this.dragCurrent) {
					this.stopDrag();
					this.dragCurrent = null
				}
				this._execOnAll("unreg", []);
				for ( var B in this.elementCache) {
					delete this.elementCache[B]
				}
				this.elementCache = {};
				this.ids = {}
			},
			elementCache : {},
			getElWrapper : function(C) {
				var B = this.elementCache[C];
				if (!B || !B.el) {
					B = this.elementCache[C] = new this.ElementWrapper(Ext
							.getDom(C))
				}
				return B
			},
			getElement : function(B) {
				return Ext.getDom(B)
			},
			getCss : function(C) {
				var B = Ext.getDom(C);
				return (B) ? B.style : null
			},
			ElementWrapper : function(B) {
				this.el = B || null;
				this.id = this.el && B.id;
				this.css = this.el && B.style
			},
			getPosX : function(B) {
				return Ext.lib.Dom.getX(B)
			},
			getPosY : function(B) {
				return Ext.lib.Dom.getY(B)
			},
			swapNode : function(D, B) {
				if (D.swapNode) {
					D.swapNode(B)
				} else {
					var E = B.parentNode;
					var C = B.nextSibling;
					if (C == D) {
						E.insertBefore(D, B)
					} else {
						if (B == D.nextSibling) {
							E.insertBefore(B, D)
						} else {
							D.parentNode.replaceChild(B, D);
							E.insertBefore(D, C)
						}
					}
				}
			},
			getScroll : function() {
				var D, B, E = document.documentElement, C = document.body;
				if (E && (E.scrollTop || E.scrollLeft)) {
					D = E.scrollTop;
					B = E.scrollLeft
				} else {
					if (C) {
						D = C.scrollTop;
						B = C.scrollLeft
					} else {
					}
				}
				return {
					top : D,
					left : B
				}
			},
			getStyle : function(C, B) {
				return Ext.fly(C).getStyle(B)
			},
			getScrollTop : function() {
				return this.getScroll().top
			},
			getScrollLeft : function() {
				return this.getScroll().left
			},
			moveToEl : function(B, D) {
				var C = Ext.lib.Dom.getXY(D);
				Ext.lib.Dom.setXY(B, C)
			},
			numericSort : function(C, B) {
				return (C - B)
			},
			_timeoutCount : 0,
			_addListeners : function() {
				var B = Ext.dd.DDM;
				if (Ext.lib.Event && document) {
					B._onLoad()
				} else {
					if (B._timeoutCount > 2000) {
					} else {
						setTimeout(B._addListeners, 10);
						if (document && document.body) {
							B._timeoutCount += 1
						}
					}
				}
			},
			handleWasClicked : function(B, D) {
				if (this.isHandle(D, B.id)) {
					return true
				} else {
					var C = B.parentNode;
					while (C) {
						if (this.isHandle(D, C.id)) {
							return true
						} else {
							C = C.parentNode
						}
					}
				}
				return false
			}
		}
	}();
	Ext.dd.DDM = Ext.dd.DragDropMgr;
	Ext.dd.DDM._addListeners()
}
Ext.dd.DD = function(C, A, B) {
	if (C) {
		this.init(C, A, B)
	}
};
Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, {
	scroll : true,
	autoOffset : function(C, B) {
		var A = C - this.startPageX;
		var D = B - this.startPageY;
		this.setDelta(A, D)
	},
	setDelta : function(B, A) {
		this.deltaX = B;
		this.deltaY = A
	},
	setDragElPos : function(C, B) {
		var A = this.getDragEl();
		this.alignElWithMouse(A, C, B)
	},
	alignElWithMouse : function(C, G, F) {
		var E = this.getTargetCoord(G, F);
		var B = C.dom ? C : Ext.fly(C, "_dd");
		if (!this.deltaSetXY) {
			var H = [ E.x, E.y ];
			B.setXY(H);
			var D = B.getLeft(true);
			var A = B.getTop(true);
			this.deltaSetXY = [ D - E.x, A - E.y ]
		} else {
			B.setLeftTop(E.x + this.deltaSetXY[0], E.y + this.deltaSetXY[1])
		}
		this.cachePosition(E.x, E.y);
		this.autoScroll(E.x, E.y, C.offsetHeight, C.offsetWidth);
		return E
	},
	cachePosition : function(B, A) {
		if (B) {
			this.lastPageX = B;
			this.lastPageY = A
		} else {
			var C = Ext.lib.Dom.getXY(this.getEl());
			this.lastPageX = C[0];
			this.lastPageY = C[1]
		}
	},
	autoScroll : function(J, I, E, K) {
		if (this.scroll) {
			var L = Ext.lib.Dom.getViewHeight();
			var B = Ext.lib.Dom.getViewWidth();
			var N = this.DDM.getScrollTop();
			var D = this.DDM.getScrollLeft();
			var H = E + I;
			var M = K + J;
			var G = (L + N - I - this.deltaY);
			var F = (B + D - J - this.deltaX);
			var C = 40;
			var A = (document.all) ? 80 : 30;
			if (H > L && G < C) {
				window.scrollTo(D, N + A)
			}
			if (I < N && N > 0 && I - N < C) {
				window.scrollTo(D, N - A)
			}
			if (M > B && F < C) {
				window.scrollTo(D + A, N)
			}
			if (J < D && D > 0 && J - D < C) {
				window.scrollTo(D - A, N)
			}
		}
	},
	getTargetCoord : function(C, B) {
		var A = C - this.deltaX;
		var D = B - this.deltaY;
		if (this.constrainX) {
			if (A < this.minX) {
				A = this.minX
			}
			if (A > this.maxX) {
				A = this.maxX
			}
		}
		if (this.constrainY) {
			if (D < this.minY) {
				D = this.minY
			}
			if (D > this.maxY) {
				D = this.maxY
			}
		}
		A = this.getTick(A, this.xTicks);
		D = this.getTick(D, this.yTicks);
		return {
			x : A,
			y : D
		}
	},
	applyConfig : function() {
		Ext.dd.DD.superclass.applyConfig.call(this);
		this.scroll = (this.config.scroll !== false)
	},
	b4MouseDown : function(A) {
		this.autoOffset(A.getPageX(), A.getPageY())
	},
	b4Drag : function(A) {
		this.setDragElPos(A.getPageX(), A.getPageY())
	},
	toString : function() {
		return ("DD " + this.id)
	}
});
Ext.dd.DDProxy = function(C, A, B) {
	if (C) {
		this.init(C, A, B);
		this.initFrame()
	}
};
Ext.dd.DDProxy.dragElId = "ygddfdiv";
Ext.extend(Ext.dd.DDProxy, Ext.dd.DD, {
	resizeFrame : true,
	centerFrame : false,
	createFrame : function() {
		var B = this;
		var A = document.body;
		if (!A || !A.firstChild) {
			setTimeout(function() {
				B.createFrame()
			}, 50);
			return
		}
		var D = this.getDragEl();
		if (!D) {
			D = document.createElement("div");
			D.id = this.dragElId;
			var C = D.style;
			C.position = "absolute";
			C.visibility = "hidden";
			C.cursor = "move";
			C.border = "2px solid #aaa";
			C.zIndex = 999;
			A.insertBefore(D, A.firstChild)
		}
	},
	initFrame : function() {
		this.createFrame()
	},
	applyConfig : function() {
		Ext.dd.DDProxy.superclass.applyConfig.call(this);
		this.resizeFrame = (this.config.resizeFrame !== false);
		this.centerFrame = (this.config.centerFrame);
		this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId)
	},
	showFrame : function(E, D) {
		var C = this.getEl();
		var A = this.getDragEl();
		var B = A.style;
		this._resizeProxy();
		if (this.centerFrame) {
			this.setDelta(Math.round(parseInt(B.width, 10) / 2), Math
					.round(parseInt(B.height, 10) / 2))
		}
		this.setDragElPos(E, D);
		Ext.fly(A).show()
	},
	_resizeProxy : function() {
		if (this.resizeFrame) {
			var A = this.getEl();
			Ext.fly(this.getDragEl()).setSize(A.offsetWidth, A.offsetHeight)
		}
	},
	b4MouseDown : function(B) {
		var A = B.getPageX();
		var C = B.getPageY();
		this.autoOffset(A, C);
		this.setDragElPos(A, C)
	},
	b4StartDrag : function(A, B) {
		this.showFrame(A, B)
	},
	b4EndDrag : function(A) {
		Ext.fly(this.getDragEl()).hide()
	},
	endDrag : function(C) {
		var B = this.getEl();
		var A = this.getDragEl();
		A.style.visibility = "";
		this.beforeMove();
		B.style.visibility = "hidden";
		Ext.dd.DDM.moveToEl(B, A);
		A.style.visibility = "hidden";
		B.style.visibility = "";
		this.afterDrag()
	},
	beforeMove : function() {
	},
	afterDrag : function() {
	},
	toString : function() {
		return ("DDProxy " + this.id)
	}
});
Ext.dd.DDTarget = function(C, A, B) {
	if (C) {
		this.initTarget(C, A, B)
	}
};
Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, {
	toString : function() {
		return ("DDTarget " + this.id)
	}
});
Ext.dd.DragTracker = function(A) {
	Ext.apply(this, A);
	this.addEvents("mousedown", "mouseup", "mousemove", "dragstart", "dragend",
			"drag");
	this.dragRegion = new Ext.lib.Region(0, 0, 0, 0);
	if (this.el) {
		this.initEl(this.el)
	}
};
Ext.extend(Ext.dd.DragTracker, Ext.util.Observable, {
	active : false,
	tolerance : 5,
	autoStart : false,
	initEl : function(A) {
		this.el = Ext.get(A);
		A.on("mousedown", this.onMouseDown, this, this.delegate ? {
			delegate : this.delegate
		} : undefined)
	},
	destroy : function() {
		this.el.un("mousedown", this.onMouseDown, this)
	},
	onMouseDown : function(C, B) {
		if (this.fireEvent("mousedown", this, C) !== false
				&& this.onBeforeStart(C) !== false) {
			this.startXY = this.lastXY = C.getXY();
			this.dragTarget = this.delegate ? B : this.el.dom;
			C.preventDefault();
			var A = Ext.getDoc();
			A.on("mouseup", this.onMouseUp, this);
			A.on("mousemove", this.onMouseMove, this);
			A.on("selectstart", this.stopSelect, this);
			if (this.autoStart) {
				this.timer = this.triggerStart.defer(
						this.autoStart === true ? 1000 : this.autoStart, this)
			}
		}
	},
	onMouseMove : function(D, C) {
		D.preventDefault();
		var B = D.getXY(), A = this.startXY;
		this.lastXY = B;
		if (!this.active) {
			if (Math.abs(A[0] - B[0]) > this.tolerance
					|| Math.abs(A[1] - B[1]) > this.tolerance) {
				this.triggerStart()
			} else {
				return
			}
		}
		this.fireEvent("mousemove", this, D);
		this.onDrag(D);
		this.fireEvent("drag", this, D)
	},
	onMouseUp : function(B) {
		var A = Ext.getDoc();
		A.un("mousemove", this.onMouseMove, this);
		A.un("mouseup", this.onMouseUp, this);
		A.un("selectstart", this.stopSelect, this);
		B.preventDefault();
		this.clearStart();
		this.active = false;
		delete this.elRegion;
		this.fireEvent("mouseup", this, B);
		this.onEnd(B);
		this.fireEvent("dragend", this, B)
	},
	triggerStart : function(A) {
		this.clearStart();
		this.active = true;
		this.onStart(this.startXY);
		this.fireEvent("dragstart", this, this.startXY)
	},
	clearStart : function() {
		if (this.timer) {
			clearTimeout(this.timer);
			delete this.timer
		}
	},
	stopSelect : function(A) {
		A.stopEvent();
		return false
	},
	onBeforeStart : function(A) {
	},
	onStart : function(A) {
	},
	onDrag : function(A) {
	},
	onEnd : function(A) {
	},
	getDragTarget : function() {
		return this.dragTarget
	},
	getDragCt : function() {
		return this.el
	},
	getXY : function(A) {
		return A ? this.constrainModes[A].call(this, this.lastXY) : this.lastXY
	},
	getOffset : function(C) {
		var B = this.getXY(C);
		var A = this.startXY;
		return [ A[0] - B[0], A[1] - B[1] ]
	},
	constrainModes : {
		"point" : function(B) {
			if (!this.elRegion) {
				this.elRegion = this.getDragCt().getRegion()
			}
			var A = this.dragRegion;
			A.left = B[0];
			A.top = B[1];
			A.right = B[0];
			A.bottom = B[1];
			A.constrainTo(this.elRegion);
			return [ A.left, A.top ]
		}
	}
});
Ext.dd.ScrollManager = function() {
	var C = Ext.dd.DragDropMgr;
	var E = {};
	var B = null;
	var H = {};
	var G = function(K) {
		B = null;
		A()
	};
	var I = function() {
		if (C.dragCurrent) {
			C.refreshCache(C.dragCurrent.groups)
		}
	};
	var D = function() {
		if (C.dragCurrent) {
			var K = Ext.dd.ScrollManager;
			var L = H.el.ddScrollConfig ? H.el.ddScrollConfig.increment
					: K.increment;
			if (!K.animate) {
				if (H.el.scroll(H.dir, L)) {
					I()
				}
			} else {
				H.el.scroll(H.dir, L, true, K.animDuration, I)
			}
		}
	};
	var A = function() {
		if (H.id) {
			clearInterval(H.id)
		}
		H.id = 0;
		H.el = null;
		H.dir = ""
	};
	var F = function(L, K) {
		A();
		H.el = L;
		H.dir = K;
		var M = (L.ddScrollConfig && L.ddScrollConfig.frequency) ? L.ddScrollConfig.frequency
				: Ext.dd.ScrollManager.frequency;
		H.id = setInterval(D, M)
	};
	var J = function(N, P) {
		if (P || !C.dragCurrent) {
			return
		}
		var Q = Ext.dd.ScrollManager;
		if (!B || B != C.dragCurrent) {
			B = C.dragCurrent;
			Q.refreshCache()
		}
		var R = Ext.lib.Event.getXY(N);
		var S = new Ext.lib.Point(R[0], R[1]);
		for ( var L in E) {
			var M = E[L], K = M._region;
			var O = M.ddScrollConfig ? M.ddScrollConfig : Q;
			if (K && K.contains(S) && M.isScrollable()) {
				if (K.bottom - S.y <= O.vthresh) {
					if (H.el != M) {
						F(M, "down")
					}
					return
				} else {
					if (K.right - S.x <= O.hthresh) {
						if (H.el != M) {
							F(M, "left")
						}
						return
					} else {
						if (S.y - K.top <= O.vthresh) {
							if (H.el != M) {
								F(M, "up")
							}
							return
						} else {
							if (S.x - K.left <= O.hthresh) {
								if (H.el != M) {
									F(M, "right")
								}
								return
							}
						}
					}
				}
			}
		}
		A()
	};
	C.fireEvents = C.fireEvents.createSequence(J, C);
	C.stopDrag = C.stopDrag.createSequence(G, C);
	return {
		register : function(M) {
			if (Ext.isArray(M)) {
				for ( var L = 0, K = M.length; L < K; L++) {
					this.register(M[L])
				}
			} else {
				M = Ext.get(M);
				E[M.id] = M
			}
		},
		unregister : function(M) {
			if (Ext.isArray(M)) {
				for ( var L = 0, K = M.length; L < K; L++) {
					this.unregister(M[L])
				}
			} else {
				M = Ext.get(M);
				delete E[M.id]
			}
		},
		vthresh : 25,
		hthresh : 25,
		increment : 100,
		frequency : 500,
		animate : true,
		animDuration : 0.4,
		refreshCache : function() {
			for ( var K in E) {
				if (typeof E[K] == "object") {
					E[K]._region = E[K].getRegion()
				}
			}
		}
	}
}();
Ext.dd.Registry = function() {
	var D = {};
	var B = {};
	var A = 0;
	var C = function(F, E) {
		if (typeof F == "string") {
			return F
		}
		var G = F.id;
		if (!G && E !== false) {
			G = "extdd-" + (++A);
			F.id = G
		}
		return G
	};
	return {
		register : function(H, I) {
			I = I || {};
			if (typeof H == "string") {
				H = document.getElementById(H)
			}
			I.ddel = H;
			D[C(H)] = I;
			if (I.isHandle !== false) {
				B[I.ddel.id] = I
			}
			if (I.handles) {
				var G = I.handles;
				for ( var F = 0, E = G.length; F < E; F++) {
					B[C(G[F])] = I
				}
			}
		},
		unregister : function(H) {
			var J = C(H, false);
			var I = D[J];
			if (I) {
				delete D[J];
				if (I.handles) {
					var G = I.handles;
					for ( var F = 0, E = G.length; F < E; F++) {
						delete B[C(G[F], false)]
					}
				}
			}
		},
		getHandle : function(E) {
			if (typeof E != "string") {
				E = E.id
			}
			return B[E]
		},
		getHandleFromEvent : function(F) {
			var E = Ext.lib.Event.getTarget(F);
			return E ? B[E.id] : null
		},
		getTarget : function(E) {
			if (typeof E != "string") {
				E = E.id
			}
			return D[E]
		},
		getTargetFromEvent : function(F) {
			var E = Ext.lib.Event.getTarget(F);
			return E ? D[E.id] || B[E.id] : null
		}
	}
}();
Ext.dd.StatusProxy = function(A) {
	Ext.apply(this, A);
	this.id = this.id || Ext.id();
	this.el = new Ext.Layer( {
		dh : {
			id : this.id,
			tag : "div",
			cls : "x-dd-drag-proxy " + this.dropNotAllowed,
			children : [ {
				tag : "div",
				cls : "x-dd-drop-icon"
			}, {
				tag : "div",
				cls : "x-dd-drag-ghost"
			} ]
		},
		shadow : !A || A.shadow !== false
	});
	this.ghost = Ext.get(this.el.dom.childNodes[1]);
	this.dropStatus = this.dropNotAllowed
};
Ext.dd.StatusProxy.prototype = {
	dropAllowed : "x-dd-drop-ok",
	dropNotAllowed : "x-dd-drop-nodrop",
	setStatus : function(A) {
		A = A || this.dropNotAllowed;
		if (this.dropStatus != A) {
			this.el.replaceClass(this.dropStatus, A);
			this.dropStatus = A
		}
	},
	reset : function(A) {
		this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed;
		this.dropStatus = this.dropNotAllowed;
		if (A) {
			this.ghost.update("")
		}
	},
	update : function(A) {
		if (typeof A == "string") {
			this.ghost.update(A)
		} else {
			this.ghost.update("");
			A.style.margin = "0";
			this.ghost.dom.appendChild(A)
		}
		var B = this.ghost.dom.firstChild;
		if (B) {
			Ext.fly(B).setStyle(Ext.isIE ? "styleFloat" : "cssFloat", "none")
		}
	},
	getEl : function() {
		return this.el
	},
	getGhost : function() {
		return this.ghost
	},
	hide : function(A) {
		this.el.hide();
		if (A) {
			this.reset(true)
		}
	},
	stop : function() {
		if (this.anim && this.anim.isAnimated && this.anim.isAnimated()) {
			this.anim.stop()
		}
	},
	show : function() {
		this.el.show()
	},
	sync : function() {
		this.el.sync()
	},
	repair : function(B, C, A) {
		this.callback = C;
		this.scope = A;
		if (B && this.animRepair !== false) {
			this.el.addClass("x-dd-drag-repair");
			this.el.hideUnders(true);
			this.anim = this.el.shift( {
				duration : this.repairDuration || 0.5,
				easing : "easeOut",
				xy : B,
				stopFx : true,
				callback : this.afterRepair,
				scope : this
			})
		} else {
			this.afterRepair()
		}
	},
	afterRepair : function() {
		this.hide(true);
		if (typeof this.callback == "function") {
			this.callback.call(this.scope || this)
		}
		this.callback = null;
		this.scope = null
	}
};
Ext.dd.DragSource = function(B, A) {
	this.el = Ext.get(B);
	if (!this.dragData) {
		this.dragData = {}
	}
	Ext.apply(this, A);
	if (!this.proxy) {
		this.proxy = new Ext.dd.StatusProxy()
	}
	Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom,
			this.ddGroup || this.group, {
				dragElId : this.proxy.id,
				resizeFrame : false,
				isTarget : false,
				scroll : this.scroll === true
			});
	this.dragging = false
};
Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
	dropAllowed : "x-dd-drop-ok",
	dropNotAllowed : "x-dd-drop-nodrop",
	getDragData : function(A) {
		return this.dragData
	},
	onDragEnter : function(C, D) {
		var B = Ext.dd.DragDropMgr.getDDById(D);
		this.cachedTarget = B;
		if (this.beforeDragEnter(B, C, D) !== false) {
			if (B.isNotifyTarget) {
				var A = B.notifyEnter(this, C, this.dragData);
				this.proxy.setStatus(A)
			} else {
				this.proxy.setStatus(this.dropAllowed)
			}
			if (this.afterDragEnter) {
				this.afterDragEnter(B, C, D)
			}
		}
	},
	beforeDragEnter : function(B, A, C) {
		return true
	},
	alignElWithMouse : function() {
		Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments);
		this.proxy.sync()
	},
	onDragOver : function(C, D) {
		var B = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(D);
		if (this.beforeDragOver(B, C, D) !== false) {
			if (B.isNotifyTarget) {
				var A = B.notifyOver(this, C, this.dragData);
				this.proxy.setStatus(A)
			}
			if (this.afterDragOver) {
				this.afterDragOver(B, C, D)
			}
		}
	},
	beforeDragOver : function(B, A, C) {
		return true
	},
	onDragOut : function(B, C) {
		var A = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(C);
		if (this.beforeDragOut(A, B, C) !== false) {
			if (A.isNotifyTarget) {
				A.notifyOut(this, B, this.dragData)
			}
			this.proxy.reset();
			if (this.afterDragOut) {
				this.afterDragOut(A, B, C)
			}
		}
		this.cachedTarget = null
	},
	beforeDragOut : function(B, A, C) {
		return true
	},
	onDragDrop : function(B, C) {
		var A = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(C);
		if (this.beforeDragDrop(A, B, C) !== false) {
			if (A.isNotifyTarget) {
				if (A.notifyDrop(this, B, this.dragData)) {
					this.onValidDrop(A, B, C)
				} else {
					this.onInvalidDrop(A, B, C)
				}
			} else {
				this.onValidDrop(A, B, C)
			}
			if (this.afterDragDrop) {
				this.afterDragDrop(A, B, C)
			}
		}
		delete this.cachedTarget
	},
	beforeDragDrop : function(B, A, C) {
		return true
	},
	onValidDrop : function(B, A, C) {
		this.hideProxy();
		if (this.afterValidDrop) {
			this.afterValidDrop(B, A, C)
		}
	},
	getRepairXY : function(B, A) {
		return this.el.getXY()
	},
	onInvalidDrop : function(B, A, C) {
		this.beforeInvalidDrop(B, A, C);
		if (this.cachedTarget) {
			if (this.cachedTarget.isNotifyTarget) {
				this.cachedTarget.notifyOut(this, A, this.dragData)
			}
			this.cacheTarget = null
		}
		this.proxy.repair(this.getRepairXY(A, this.dragData), this.afterRepair,
				this);
		if (this.afterInvalidDrop) {
			this.afterInvalidDrop(A, C)
		}
	},
	afterRepair : function() {
		if (Ext.enableFx) {
			this.el.highlight(this.hlColor || "c3daf9")
		}
		this.dragging = false
	},
	beforeInvalidDrop : function(B, A, C) {
		return true
	},
	handleMouseDown : function(B) {
		if (this.dragging) {
			return
		}
		var A = this.getDragData(B);
		if (A && this.onBeforeDrag(A, B) !== false) {
			this.dragData = A;
			this.proxy.stop();
			Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments)
		}
	},
	onBeforeDrag : function(A, B) {
		return true
	},
	onStartDrag : Ext.emptyFn,
	startDrag : function(A, B) {
		this.proxy.reset();
		this.dragging = true;
		this.proxy.update("");
		this.onInitDrag(A, B);
		this.proxy.show()
	},
	onInitDrag : function(A, C) {
		var B = this.el.dom.cloneNode(true);
		B.id = Ext.id();
		this.proxy.update(B);
		this.onStartDrag(A, C);
		return true
	},
	getProxy : function() {
		return this.proxy
	},
	hideProxy : function() {
		this.proxy.hide();
		this.proxy.reset(true);
		this.dragging = false
	},
	triggerCacheRefresh : function() {
		Ext.dd.DDM.refreshCache(this.groups)
	},
	b4EndDrag : function(A) {
	},
	endDrag : function(A) {
		this.onEndDrag(this.dragData, A)
	},
	onEndDrag : function(A, B) {
	},
	autoOffset : function(A, B) {
		this.setDelta(-12, -20)
	}
});
Ext.dd.DropTarget = function(B, A) {
	this.el = Ext.get(B);
	Ext.apply(this, A);
	if (this.containerScroll) {
		Ext.dd.ScrollManager.register(this.el)
	}
	Ext.dd.DropTarget.superclass.constructor.call(this, this.el.dom,
			this.ddGroup || this.group, {
				isTarget : true
			})
};
Ext.extend(Ext.dd.DropTarget, Ext.dd.DDTarget, {
	dropAllowed : "x-dd-drop-ok",
	dropNotAllowed : "x-dd-drop-nodrop",
	isTarget : true,
	isNotifyTarget : true,
	notifyEnter : function(A, C, B) {
		if (this.overClass) {
			this.el.addClass(this.overClass)
		}
		return this.dropAllowed
	},
	notifyOver : function(A, C, B) {
		return this.dropAllowed
	},
	notifyOut : function(A, C, B) {
		if (this.overClass) {
			this.el.removeClass(this.overClass)
		}
	},
	notifyDrop : function(A, C, B) {
		return false
	}
});
Ext.dd.DragZone = function(B, A) {
	Ext.dd.DragZone.superclass.constructor.call(this, B, A);
	if (this.containerScroll) {
		Ext.dd.ScrollManager.register(this.el)
	}
};
Ext.extend(Ext.dd.DragZone, Ext.dd.DragSource, {
	getDragData : function(A) {
		return Ext.dd.Registry.getHandleFromEvent(A)
	},
	onInitDrag : function(A, B) {
		this.proxy.update(this.dragData.ddel.cloneNode(true));
		this.onStartDrag(A, B);
		return true
	},
	afterRepair : function() {
		if (Ext.enableFx) {
			Ext.Element.fly(this.dragData.ddel).highlight(
					this.hlColor || "c3daf9")
		}
		this.dragging = false
	},
	getRepairXY : function(A) {
		return Ext.Element.fly(this.dragData.ddel).getXY()
	}
});
Ext.dd.DropZone = function(B, A) {
	Ext.dd.DropZone.superclass.constructor.call(this, B, A)
};
Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, {
	getTargetFromEvent : function(A) {
		return Ext.dd.Registry.getTargetFromEvent(A)
	},
	onNodeEnter : function(D, A, C, B) {
	},
	onNodeOver : function(D, A, C, B) {
		return this.dropAllowed
	},
	onNodeOut : function(D, A, C, B) {
	},
	onNodeDrop : function(D, A, C, B) {
		return false
	},
	onContainerOver : function(A, C, B) {
		return this.dropNotAllowed
	},
	onContainerDrop : function(A, C, B) {
		return false
	},
	notifyEnter : function(A, C, B) {
		return this.dropNotAllowed
	},
	notifyOver : function(A, C, B) {
		var D = this.getTargetFromEvent(C);
		if (!D) {
			if (this.lastOverNode) {
				this.onNodeOut(this.lastOverNode, A, C, B);
				this.lastOverNode = null
			}
			return this.onContainerOver(A, C, B)
		}
		if (this.lastOverNode != D) {
			if (this.lastOverNode) {
				this.onNodeOut(this.lastOverNode, A, C, B)
			}
			this.onNodeEnter(D, A, C, B);
			this.lastOverNode = D
		}
		return this.onNodeOver(D, A, C, B)
	},
	notifyOut : function(A, C, B) {
		if (this.lastOverNode) {
			this.onNodeOut(this.lastOverNode, A, C, B);
			this.lastOverNode = null
		}
	},
	notifyDrop : function(A, C, B) {
		if (this.lastOverNode) {
			this.onNodeOut(this.lastOverNode, A, C, B);
			this.lastOverNode = null
		}
		var D = this.getTargetFromEvent(C);
		return D ? this.onNodeDrop(D, A, C, B) : this.onContainerDrop(A, C, B)
	},
	triggerCacheRefresh : function() {
		Ext.dd.DDM.refreshCache(this.groups)
	}
});
Ext.data.SortTypes = {
	none : function(A) {
		return A
	},
	stripTagsRE : /<\/?[^>]+>/gi,
	asText : function(A) {
		return String(A).replace(this.stripTagsRE, "")
	},
	asUCText : function(A) {
		return String(A).toUpperCase().replace(this.stripTagsRE, "")
	},
	asUCString : function(A) {
		return String(A).toUpperCase()
	},
	asDate : function(A) {
		if (!A) {
			return 0
		}
		if (Ext.isDate(A)) {
			return A.getTime()
		}
		return Date.parse(String(A))
	},
	asFloat : function(A) {
		var B = parseFloat(String(A).replace(/,/g, ""));
		if (isNaN(B)) {
			B = 0
		}
		return B
	},
	asInt : function(A) {
		var B = parseInt(String(A).replace(/,/g, ""));
		if (isNaN(B)) {
			B = 0
		}
		return B
	}
};
Ext.data.Record = function(A, B) {
	this.id = (B || B === 0) ? B : ++Ext.data.Record.AUTO_ID;
	this.data = A
};
Ext.data.Record.create = function(E) {
	var C = Ext.extend(Ext.data.Record, {});
	var D = C.prototype;
	D.fields = new Ext.util.MixedCollection(false, function(F) {
		return F.name
	});
	for ( var B = 0, A = E.length; B < A; B++) {
		D.fields.add(new Ext.data.Field(E[B]))
	}
	C.getField = function(F) {
		return D.fields.get(F)
	};
	return C
};
Ext.data.Record.AUTO_ID = 1000;
Ext.data.Record.EDIT = "edit";
Ext.data.Record.REJECT = "reject";
Ext.data.Record.COMMIT = "commit";
Ext.data.Record.prototype = {
	dirty : false,
	editing : false,
	error : null,
	modified : null,
	join : function(A) {
		this.store = A
	},
	set : function(A, B) {
		if (String(this.data[A]) == String(B)) {
			return
		}
		this.dirty = true;
		if (!this.modified) {
			this.modified = {}
		}
		if (typeof this.modified[A] == "undefined") {
			this.modified[A] = this.data[A]
		}
		this.data[A] = B;
		if (!this.editing && this.store) {
			this.store.afterEdit(this)
		}
	},
	get : function(A) {
		return this.data[A]
	},
	beginEdit : function() {
		this.editing = true;
		this.modified = {}
	},
	cancelEdit : function() {
		this.editing = false;
		delete this.modified
	},
	endEdit : function() {
		this.editing = false;
		if (this.dirty && this.store) {
			this.store.afterEdit(this)
		}
	},
	reject : function(B) {
		var A = this.modified;
		for ( var C in A) {
			if (typeof A[C] != "function") {
				this.data[C] = A[C]
			}
		}
		this.dirty = false;
		delete this.modified;
		this.editing = false;
		if (this.store && B !== true) {
			this.store.afterReject(this)
		}
	},
	commit : function(A) {
		this.dirty = false;
		delete this.modified;
		this.editing = false;
		if (this.store && A !== true) {
			this.store.afterCommit(this)
		}
	},
	getChanges : function() {
		var A = this.modified, B = {};
		for ( var C in A) {
			if (A.hasOwnProperty(C)) {
				B[C] = this.data[C]
			}
		}
		return B
	},
	hasError : function() {
		return this.error != null
	},
	clearError : function() {
		this.error = null
	},
	copy : function(A) {
		return new this.constructor(Ext.apply( {}, this.data), A || this.id)
	},
	isModified : function(A) {
		return !!(this.modified && this.modified.hasOwnProperty(A))
	}
};
Ext.StoreMgr = Ext.apply(new Ext.util.MixedCollection(), {
	register : function() {
		for ( var A = 0, B; B = arguments[A]; A++) {
			this.add(B)
		}
	},
	unregister : function() {
		for ( var A = 0, B; B = arguments[A]; A++) {
			this.remove(this.lookup(B))
		}
	},
	lookup : function(A) {
		return typeof A == "object" ? A : this.get(A)
	},
	getKey : function(A) {
		return A.storeId || A.id
	}
});
Ext.data.Store = function(A) {
	this.data = new Ext.util.MixedCollection(false);
	this.data.getKey = function(B) {
		return B.id
	};
	this.baseParams = {};
	this.paramNames = {
		"start" : "start",
		"limit" : "limit",
		"sort" : "sort",
		"dir" : "dir"
	};
	if (A && A.data) {
		this.inlineData = A.data;
		delete A.data
	}
	Ext.apply(this, A);
	if (this.url && !this.proxy) {
		this.proxy = new Ext.data.HttpProxy( {
			url : this.url
		})
	}
	if (this.reader) {
		if (!this.recordType) {
			this.recordType = this.reader.recordType
		}
		if (this.reader.onMetaChange) {
			this.reader.onMetaChange = this.onMetaChange.createDelegate(this)
		}
	}
	if (this.recordType) {
		this.fields = this.recordType.prototype.fields
	}
	this.modified = [];
	this.addEvents("datachanged", "metachange", "add", "remove", "update",
			"clear", "beforeload", "load", "loadexception");
	if (this.proxy) {
		this.relayEvents(this.proxy, [ "loadexception" ])
	}
	this.sortToggle = {};
	if (this.sortInfo) {
		this.setDefaultSort(this.sortInfo.field, this.sortInfo.direction)
	}
	Ext.data.Store.superclass.constructor.call(this);
	if (this.storeId || this.id) {
		Ext.StoreMgr.register(this)
	}
	if (this.inlineData) {
		this.loadData(this.inlineData);
		delete this.inlineData
	} else {
		if (this.autoLoad) {
			this.load.defer(10, this,
					[ typeof this.autoLoad == "object" ? this.autoLoad
							: undefined ])
		}
	}
};
Ext.extend(Ext.data.Store, Ext.util.Observable, {
	remoteSort : false,
	pruneModifiedRecords : false,
	lastOptions : null,
	destroy : function() {
		if (this.id) {
			Ext.StoreMgr.unregister(this)
		}
		this.data = null;
		this.purgeListeners()
	},
	add : function(B) {
		B = [].concat(B);
		if (B.length < 1) {
			return
		}
		for ( var D = 0, A = B.length; D < A; D++) {
			B[D].join(this)
		}
		var C = this.data.length;
		this.data.addAll(B);
		if (this.snapshot) {
			this.snapshot.addAll(B)
		}
		this.fireEvent("add", this, B, C)
	},
	addSorted : function(A) {
		var B = this.findInsertIndex(A);
		this.insert(B, A)
	},
	remove : function(A) {
		var B = this.data.indexOf(A);
		this.data.removeAt(B);
		if (this.pruneModifiedRecords) {
			this.modified.remove(A)
		}
		if (this.snapshot) {
			this.snapshot.remove(A)
		}
		this.fireEvent("remove", this, A, B)
	},
	removeAll : function() {
		this.data.clear();
		if (this.snapshot) {
			this.snapshot.clear()
		}
		if (this.pruneModifiedRecords) {
			this.modified = []
		}
		this.fireEvent("clear", this)
	},
	insert : function(C, B) {
		B = [].concat(B);
		for ( var D = 0, A = B.length; D < A; D++) {
			this.data.insert(C, B[D]);
			B[D].join(this)
		}
		this.fireEvent("add", this, B, C)
	},
	indexOf : function(A) {
		return this.data.indexOf(A)
	},
	indexOfId : function(A) {
		return this.data.indexOfKey(A)
	},
	getById : function(A) {
		return this.data.key(A)
	},
	getAt : function(A) {
		return this.data.itemAt(A)
	},
	getRange : function(B, A) {
		return this.data.getRange(B, A)
	},
	storeOptions : function(A) {
		A = Ext.apply( {}, A);
		delete A.callback;
		delete A.scope;
		this.lastOptions = A
	},
	load : function(B) {
		B = B || {};
		if (this.fireEvent("beforeload", this, B) !== false) {
			this.storeOptions(B);
			var C = Ext.apply(B.params || {}, this.baseParams);
			if (this.sortInfo && this.remoteSort) {
				var A = this.paramNames;
				C[A["sort"]] = this.sortInfo.field;
				C[A["dir"]] = this.sortInfo.direction
			}
			this.proxy.load(C, this.reader, this.loadRecords, this, B);
			return true
		} else {
			return false
		}
	},
	reload : function(A) {
		this.load(Ext.applyIf(A || {}, this.lastOptions))
	},
	loadRecords : function(G, B, F) {
		if (!G || F === false) {
			if (F !== false) {
				this.fireEvent("load", this, [], B)
			}
			if (B.callback) {
				B.callback.call(B.scope || this, [], B, false)
			}
			return
		}
		var E = G.records, D = G.totalRecords || E.length;
		if (!B || B.add !== true) {
			if (this.pruneModifiedRecords) {
				this.modified = []
			}
			for ( var C = 0, A = E.length; C < A; C++) {
				E[C].join(this)
			}
			if (this.snapshot) {
				this.data = this.snapshot;
				delete this.snapshot
			}
			this.data.clear();
			this.data.addAll(E);
			this.totalLength = D;
			this.applySort();
			this.fireEvent("datachanged", this)
		} else {
			this.totalLength = Math.max(D, this.data.length + E.length);
			this.add(E)
		}
		this.fireEvent("load", this, E, B);
		if (B.callback) {
			B.callback.call(B.scope || this, E, B, true)
		}
	},
	loadData : function(C, A) {
		var B = this.reader.readRecords(C);
		this.loadRecords(B, {
			add : A
		}, true)
	},
	getCount : function() {
		return this.data.length || 0
	},
	getTotalCount : function() {
		return this.totalLength || 0
	},
	getSortState : function() {
		return this.sortInfo
	},
	applySort : function() {
		if (this.sortInfo && !this.remoteSort) {
			var A = this.sortInfo, B = A.field;
			this.sortData(B, A.direction)
		}
	},
	sortData : function(C, D) {
		D = D || "ASC";
		var A = this.fields.get(C).sortType;
		var B = function(F, E) {
			var H = A(F.data[C]), G = A(E.data[C]);
			return H > G ? 1 : (H < G ? -1 : 0)
		};
		this.data.sort(D, B);
		if (this.snapshot && this.snapshot != this.data) {
			this.snapshot.sort(D, B)
		}
	},
	setDefaultSort : function(B, A) {
		A = A ? A.toUpperCase() : "ASC";
		this.sortInfo = {
			field : B,
			direction : A
		};
		this.sortToggle[B] = A
	},
	sort : function(E, C) {
		var D = this.fields.get(E);
		if (!D) {
			return false
		}
		if (!C) {
			if (this.sortInfo && this.sortInfo.field == D.name) {
				C = (this.sortToggle[D.name] || "ASC").toggle("ASC", "DESC")
			} else {
				C = D.sortDir
			}
		}
		var B = (this.sortToggle) ? this.sortToggle[D.name] : null;
		var A = (this.sortInfo) ? this.sortInfo : null;
		this.sortToggle[D.name] = C;
		this.sortInfo = {
			field : D.name,
			direction : C
		};
		if (!this.remoteSort) {
			this.applySort();
			this.fireEvent("datachanged", this)
		} else {
			if (!this.load(this.lastOptions)) {
				if (B) {
					this.sortToggle[D.name] = B
				}
				if (A) {
					this.sortInfo = A
				}
			}
		}
	},
	each : function(B, A) {
		this.data.each(B, A)
	},
	getModifiedRecords : function() {
		return this.modified
	},
	createFilterFn : function(C, B, D, A) {
		if (Ext.isEmpty(B, false)) {
			return false
		}
		B = this.data.createValueMatcher(B, D, A);
		return function(E) {
			return B.test(E.data[C])
		}
	},
	sum : function(E, F, A) {
		var C = this.data.items, B = 0;
		F = F || 0;
		A = (A || A === 0) ? A : C.length - 1;
		for ( var D = F; D <= A; D++) {
			B += (C[D].data[E] || 0)
		}
		return B
	},
	filter : function(D, C, E, A) {
		var B = this.createFilterFn(D, C, E, A);
		return B ? this.filterBy(B) : this.clearFilter()
	},
	filterBy : function(B, A) {
		this.snapshot = this.snapshot || this.data;
		this.data = this.queryBy(B, A || this);
		this.fireEvent("datachanged", this)
	},
	query : function(D, C, E, A) {
		var B = this.createFilterFn(D, C, E, A);
		return B ? this.queryBy(B) : this.data.clone()
	},
	queryBy : function(B, A) {
		var C = this.snapshot || this.data;
		return C.filterBy(B, A || this)
	},
	find : function(D, C, F, E, A) {
		var B = this.createFilterFn(D, C, E, A);
		return B ? this.data.findIndexBy(B, null, F) : -1
	},
	findBy : function(B, A, C) {
		return this.data.findIndexBy(B, A, C)
	},
	collect : function(G, H, B) {
		var F = (B === true && this.snapshot) ? this.snapshot.items
				: this.data.items;
		var I, J, A = [], C = {};
		for ( var D = 0, E = F.length; D < E; D++) {
			I = F[D].data[G];
			J = String(I);
			if ((H || !Ext.isEmpty(I)) && !C[J]) {
				C[J] = true;
				A[A.length] = I
			}
		}
		return A
	},
	clearFilter : function(A) {
		if (this.isFiltered()) {
			this.data = this.snapshot;
			delete this.snapshot;
			if (A !== true) {
				this.fireEvent("datachanged", this)
			}
		}
	},
	isFiltered : function() {
		return this.snapshot && this.snapshot != this.data
	},
	afterEdit : function(A) {
		if (this.modified.indexOf(A) == -1) {
			this.modified.push(A)
		}
		this.fireEvent("update", this, A, Ext.data.Record.EDIT)
	},
	afterReject : function(A) {
		this.modified.remove(A);
		this.fireEvent("update", this, A, Ext.data.Record.REJECT)
	},
	afterCommit : function(A) {
		this.modified.remove(A);
		this.fireEvent("update", this, A, Ext.data.Record.COMMIT)
	},
	commitChanges : function() {
		var B = this.modified.slice(0);
		this.modified = [];
		for ( var C = 0, A = B.length; C < A; C++) {
			B[C].commit()
		}
	},
	rejectChanges : function() {
		var B = this.modified.slice(0);
		this.modified = [];
		for ( var C = 0, A = B.length; C < A; C++) {
			B[C].reject()
		}
	},
	onMetaChange : function(B, A, C) {
		this.recordType = A;
		this.fields = A.prototype.fields;
		delete this.snapshot;
		this.sortInfo = B.sortInfo;
		this.modified = [];
		this.fireEvent("metachange", this, this.reader.meta)
	},
	findInsertIndex : function(A) {
		this.suspendEvents();
		var C = this.data.clone();
		this.data.add(A);
		this.applySort();
		var B = this.data.indexOf(A);
		this.data = C;
		this.resumeEvents();
		return B
	}
});
Ext.data.SimpleStore = function(A) {
	Ext.data.SimpleStore.superclass.constructor.call(this, Ext.apply(A, {
		reader : new Ext.data.ArrayReader( {
			id : A.id
		}, Ext.data.Record.create(A.fields))
	}))
};
Ext.extend(Ext.data.SimpleStore, Ext.data.Store, {
	loadData : function(E, B) {
		if (this.expandData === true) {
			var D = [];
			for ( var C = 0, A = E.length; C < A; C++) {
				D[D.length] = [ E[C] ]
			}
			E = D
		}
		Ext.data.SimpleStore.superclass.loadData.call(this, E, B)
	}
});
Ext.data.JsonStore = function(A) {
	Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(A, {
		proxy : A.proxy || (!A.data ? new Ext.data.HttpProxy( {
			url : A.url
		}) : undefined),
		reader : new Ext.data.JsonReader(A, A.fields)
	}))
};
Ext.extend(Ext.data.JsonStore, Ext.data.Store);
Ext.data.Field = function(D) {
	if (typeof D == "string") {
		D = {
			name : D
		}
	}
	Ext.apply(this, D);
	if (!this.type) {
		this.type = "auto"
	}
	var C = Ext.data.SortTypes;
	if (typeof this.sortType == "string") {
		this.sortType = C[this.sortType]
	}
	if (!this.sortType) {
		switch (this.type) {
		case "string":
			this.sortType = C.asUCString;
			break;
		case "date":
			this.sortType = C.asDate;
			break;
		default:
			this.sortType = C.none
		}
	}
	var E = /[\$,%]/g;
	if (!this.convert) {
		var B, A = this.dateFormat;
		switch (this.type) {
		case "":
		case "auto":
		case undefined:
			B = function(F) {
				return F
			};
			break;
		case "string":
			B = function(F) {
				return (F === undefined || F === null) ? "" : String(F)
			};
			break;
		case "int":
			B = function(F) {
				return F !== undefined && F !== null && F !== "" ? parseInt(
						String(F).replace(E, ""), 10) : ""
			};
			break;
		case "float":
			B = function(F) {
				return F !== undefined && F !== null && F !== "" ? parseFloat(
						String(F).replace(E, ""), 10) : ""
			};
			break;
		case "bool":
		case "boolean":
			B = function(F) {
				return F === true || F === "true" || F == 1
			};
			break;
		case "date":
			B = function(G) {
				if (!G) {
					return ""
				}
				if (Ext.isDate(G)) {
					return G
				}
				if (A) {
					if (A == "timestamp") {
						return new Date(G * 1000)
					}
					if (A == "time") {
						return new Date(parseInt(G, 10))
					}
					return Date.parseDate(G, A)
				}
				var F = Date.parse(G);
				return F ? new Date(F) : null
			};
			break
		}
		this.convert = B
	}
};
Ext.data.Field.prototype = {
	dateFormat : null,
	defaultValue : "",
	mapping : null,
	sortType : null,
	sortDir : "ASC"
};
Ext.data.DataReader = function(A, B) {
	this.meta = A;
	this.recordType = Ext.isArray(B) ? Ext.data.Record.create(B) : B
};
Ext.data.DataReader.prototype = {};
Ext.data.DataProxy = function() {
	this.addEvents("beforeload", "load");
	Ext.data.DataProxy.superclass.constructor.call(this)
};
Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
Ext.data.MemoryProxy = function(A) {
	Ext.data.MemoryProxy.superclass.constructor.call(this);
	this.data = A
};
Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, {
	load : function(F, C, G, D, B) {
		F = F || {};
		var A;
		try {
			A = C.readRecords(this.data)
		} catch (E) {
			this.fireEvent("loadexception", this, B, null, E);
			G.call(D, null, B, false);
			return
		}
		G.call(D, A, B, true)
	},
	update : function(B, A) {
	}
});
Ext.data.HttpProxy = function(A) {
	Ext.data.HttpProxy.superclass.constructor.call(this);
	this.conn = A;
	this.useAjax = !A || !A.events
};
Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, {
	getConnection : function() {
		return this.useAjax ? Ext.Ajax : this.conn
	},
	load : function(E, B, F, C, A) {
		if (this.fireEvent("beforeload", this, E) !== false) {
			var D = {
				params : E || {},
				request : {
					callback : F,
					scope : C,
					arg : A
				},
				reader : B,
				callback : this.loadResponse,
				scope : this
			};
			if (this.useAjax) {
				Ext.applyIf(D, this.conn);
				if (this.activeRequest) {
					Ext.Ajax.abort(this.activeRequest)
				}
				this.activeRequest = Ext.Ajax.request(D)
			} else {
				this.conn.request(D)
			}
		} else {
			F.call(C || this, null, A, false)
		}
	},
	loadResponse : function(E, D, B) {
		delete this.activeRequest;
		if (!D) {
			this.fireEvent("loadexception", this, E, B);
			E.request.callback
					.call(E.request.scope, null, E.request.arg, false);
			return
		}
		var A;
		try {
			A = E.reader.read(B)
		} catch (C) {
			this.fireEvent("loadexception", this, E, B, C);
			E.request.callback
					.call(E.request.scope, null, E.request.arg, false);
			return
		}
		this.fireEvent("load", this, E, E.request.arg);
		E.request.callback.call(E.request.scope, A, E.request.arg, true)
	},
	update : function(A) {
	},
	updateResponse : function(A) {
	}
});
Ext.data.ScriptTagProxy = function(A) {
	Ext.data.ScriptTagProxy.superclass.constructor.call(this);
	Ext.apply(this, A);
	this.head = document.getElementsByTagName("head")[0]
};
Ext.data.ScriptTagProxy.TRANS_ID = 1000;
Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, {
	timeout : 30000,
	callbackParam : "callback",
	nocache : true,
	load : function(E, F, H, I, J) {
		if (this.fireEvent("beforeload", this, E) !== false) {
			var C = Ext.urlEncode(Ext.apply(E, this.extraParams));
			var B = this.url;
			B += (B.indexOf("?") != -1 ? "&" : "?") + C;
			if (this.nocache) {
				B += "&_dc=" + (new Date().getTime())
			}
			var A = ++Ext.data.ScriptTagProxy.TRANS_ID;
			var K = {
				id : A,
				cb : "stcCallback" + A,
				scriptId : "stcScript" + A,
				params : E,
				arg : J,
				url : B,
				callback : H,
				scope : I,
				reader : F
			};
			var D = this;
			window[K.cb] = function(L) {
				D.handleResponse(L, K)
			};
			B += String.format("&{0}={1}", this.callbackParam, K.cb);
			if (this.autoAbort !== false) {
				this.abort()
			}
			K.timeoutId = this.handleFailure.defer(this.timeout, this, [ K ]);
			var G = document.createElement("script");
			G.setAttribute("src", B);
			G.setAttribute("type", "text/javascript");
			G.setAttribute("id", K.scriptId);
			this.head.appendChild(G);
			this.trans = K
		} else {
			H.call(I || this, null, J, false)
		}
	},
	isLoading : function() {
		return this.trans ? true : false
	},
	abort : function() {
		if (this.isLoading()) {
			this.destroyTrans(this.trans)
		}
	},
	destroyTrans : function(B, A) {
		this.head.removeChild(document.getElementById(B.scriptId));
		clearTimeout(B.timeoutId);
		if (A) {
			window[B.cb] = undefined;
			try {
				delete window[B.cb]
			} catch (C) {
			}
		} else {
			window[B.cb] = function() {
				window[B.cb] = undefined;
				try {
					delete window[B.cb]
				} catch (D) {
				}
			}
		}
	},
	handleResponse : function(D, B) {
		this.trans = false;
		this.destroyTrans(B, true);
		var A;
		try {
			A = B.reader.readRecords(D)
		} catch (C) {
			this.fireEvent("loadexception", this, D, B.arg, C);
			B.callback.call(B.scope || window, null, B.arg, false);
			return
		}
		this.fireEvent("load", this, D, B.arg);
		B.callback.call(B.scope || window, A, B.arg, true)
	},
	handleFailure : function(A) {
		this.trans = false;
		this.destroyTrans(A, false);
		this.fireEvent("loadexception", this, null, A.arg);
		A.callback.call(A.scope || window, null, A.arg, false)
	}
});
Ext.data.JsonReader = function(A, B) {
	A = A || {};
	Ext.data.JsonReader.superclass.constructor.call(this, A, B || A.fields)
};
Ext
		.extend(
				Ext.data.JsonReader,
				Ext.data.DataReader,
				{
					read : function(response) {
						var json = response.responseText;
						var o = eval("(" + json + ")");
						if (!o) {
							throw {
								message : "JsonReader.read: Json object not found"
							}
						}
						return this.readRecords(o)
					},
					onMetaChange : function(A, C, B) {
					},
					simpleAccess : function(B, A) {
						return B[A]
					},
					getJsonAccessor : function() {
						var A = /[\[\.]/;
						return function(C) {
							try {
								return (A.test(C)) ? new Function("obj",
										"return obj." + C) : function(D) {
									return D[C]
								}
							} catch (B) {
							}
							return Ext.emptyFn
						}
					}(),
					readRecords : function(K) {
						this.jsonData = K;
						if (K.metaData) {
							delete this.ef;
							this.meta = K.metaData;
							this.recordType = Ext.data.Record
									.create(K.metaData.fields);
							this.onMetaChange(this.meta, this.recordType, K)
						}
						var H = this.meta, A = this.recordType, R = A.prototype.fields, F = R.items, E = R.length;
						if (!this.ef) {
							if (H.totalProperty) {
								this.getTotal = this
										.getJsonAccessor(H.totalProperty)
							}
							if (H.successProperty) {
								this.getSuccess = this
										.getJsonAccessor(H.successProperty)
							}
							this.getRoot = H.root ? this
									.getJsonAccessor(H.root) : function(U) {
								return U
							};
							if (H.id) {
								var Q = this.getJsonAccessor(H.id);
								this.getId = function(V) {
									var U = Q(V);
									return (U === undefined || U === "") ? null
											: U
								}
							} else {
								this.getId = function() {
									return null
								}
							}
							this.ef = [];
							for ( var O = 0; O < E; O++) {
								R = F[O];
								var T = (R.mapping !== undefined && R.mapping !== null) ? R.mapping
										: R.name;
								this.ef[O] = this.getJsonAccessor(T)
							}
						}
						var M = this.getRoot(K), S = M.length, I = S, D = true;
						if (H.totalProperty) {
							var G = parseInt(this.getTotal(K), 10);
							if (!isNaN(G)) {
								I = G
							}
						}
						if (H.successProperty) {
							var G = this.getSuccess(K);
							if (G === false || G === "false") {
								D = false
							}
						}
						var P = [];
						for ( var O = 0; O < S; O++) {
							var L = M[O];
							var B = {};
							var J = this.getId(L);
							for ( var N = 0; N < E; N++) {
								R = F[N];
								var G = this.ef[N](L);
								B[R.name] = R.convert((G !== undefined) ? G
										: R.defaultValue, L)
							}
							var C = new A(B, J);
							C.json = L;
							P[O] = C
						}
						return {
							success : D,
							records : P,
							totalRecords : I
						}
					}
				});
Ext.data.XmlReader = function(A, B) {
	A = A || {};
	Ext.data.XmlReader.superclass.constructor.call(this, A, B || A.fields)
};
Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {
	read : function(A) {
		var B = A.responseXML;
		if (!B) {
			throw {
				message : "XmlReader.read: XML Document not available"
			}
		}
		return this.readRecords(B)
	},
	readRecords : function(T) {
		this.xmlData = T;
		var N = T.documentElement || T;
		var I = Ext.DomQuery;
		var B = this.recordType, L = B.prototype.fields;
		var D = this.meta.id;
		var G = 0, E = true;
		if (this.meta.totalRecords) {
			G = I.selectNumber(this.meta.totalRecords, N, 0)
		}
		if (this.meta.success) {
			var K = I.selectValue(this.meta.success, N, true);
			E = K !== false && K !== "false"
		}
		var Q = [];
		var U = I.select(this.meta.record, N);
		for ( var P = 0, R = U.length; P < R; P++) {
			var M = U[P];
			var A = {};
			var J = D ? I.selectValue(D, M) : undefined;
			for ( var O = 0, H = L.length; O < H; O++) {
				var S = L.items[O];
				var F = I.selectValue(S.mapping || S.name, M, S.defaultValue);
				F = S.convert(F, M);
				A[S.name] = F
			}
			var C = new B(A, J);
			C.node = M;
			Q[Q.length] = C
		}
		return {
			success : E,
			records : Q,
			totalRecords : G || Q.length
		}
	}
});
Ext.data.ArrayReader = Ext
		.extend(Ext.data.JsonReader,
				{
					readRecords : function(C) {
						var B = this.meta ? this.meta.id : null;
						var G = this.recordType, K = G.prototype.fields;
						var E = [];
						var M = C;
						for ( var I = 0; I < M.length; I++) {
							var D = M[I];
							var O = {};
							var A = ((B || B === 0) && D[B] !== undefined
									&& D[B] !== "" ? D[B] : null);
							for ( var H = 0, P = K.length; H < P; H++) {
								var L = K.items[H];
								var F = L.mapping !== undefined
										&& L.mapping !== null ? L.mapping : H;
								var N = D[F] !== undefined ? D[F]
										: L.defaultValue;
								N = L.convert(N, D);
								O[L.name] = N
							}
							var J = new G(O, A);
							J.json = D;
							E[E.length] = J
						}
						return {
							records : E,
							totalRecords : E.length
						}
					}
				});
Ext.data.Tree = function(A) {
	this.nodeHash = {};
	this.root = null;
	if (A) {
		this.setRootNode(A)
	}
	this.addEvents("append", "remove", "move", "insert", "beforeappend",
			"beforeremove", "beforemove", "beforeinsert");
	Ext.data.Tree.superclass.constructor.call(this)
};
Ext.extend(Ext.data.Tree, Ext.util.Observable, {
	pathSeparator : "/",
	proxyNodeEvent : function() {
		return this.fireEvent.apply(this, arguments)
	},
	getRootNode : function() {
		return this.root
	},
	setRootNode : function(A) {
		this.root = A;
		A.ownerTree = this;
		A.isRoot = true;
		this.registerNode(A);
		return A
	},
	getNodeById : function(A) {
		return this.nodeHash[A]
	},
	registerNode : function(A) {
		this.nodeHash[A.id] = A
	},
	unregisterNode : function(A) {
		delete this.nodeHash[A.id]
	},
	toString : function() {
		return "[Tree" + (this.id ? " " + this.id : "") + "]"
	}
});
Ext.data.Node = function(A) {
	this.attributes = A || {};
	this.leaf = this.attributes.leaf;
	this.id = this.attributes.id;
	if (!this.id) {
		this.id = Ext.id(null, "ynode-");
		this.attributes.id = this.id
	}
	this.childNodes = [];
	if (!this.childNodes.indexOf) {
		this.childNodes.indexOf = function(D) {
			for ( var C = 0, B = this.length; C < B; C++) {
				if (this[C] == D) {
					return C
				}
			}
			return -1
		}
	}
	this.parentNode = null;
	this.firstChild = null;
	this.lastChild = null;
	this.previousSibling = null;
	this.nextSibling = null;
	this.addEvents( {
		"append" : true,
		"remove" : true,
		"move" : true,
		"insert" : true,
		"beforeappend" : true,
		"beforeremove" : true,
		"beforemove" : true,
		"beforeinsert" : true
	});
	this.listeners = this.attributes.listeners;
	Ext.data.Node.superclass.constructor.call(this)
};
Ext
		.extend(
				Ext.data.Node,
				Ext.util.Observable,
				{
					fireEvent : function(B) {
						if (Ext.data.Node.superclass.fireEvent.apply(this,
								arguments) === false) {
							return false
						}
						var A = this.getOwnerTree();
						if (A) {
							if (A.proxyNodeEvent.apply(A, arguments) === false) {
								return false
							}
						}
						return true
					},
					isLeaf : function() {
						return this.leaf === true
					},
					setFirstChild : function(A) {
						this.firstChild = A
					},
					setLastChild : function(A) {
						this.lastChild = A
					},
					isLast : function() {
						return (!this.parentNode ? true
								: this.parentNode.lastChild == this)
					},
					isFirst : function() {
						return (!this.parentNode ? true
								: this.parentNode.firstChild == this)
					},
					hasChildNodes : function() {
						return !this.isLeaf() && this.childNodes.length > 0
					},
					isExpandable : function() {
						return this.attributes.expandable
								|| this.hasChildNodes()
					},
					appendChild : function(E) {
						var F = false;
						if (Ext.isArray(E)) {
							F = E
						} else {
							if (arguments.length > 1) {
								F = arguments
							}
						}
						if (F) {
							for ( var D = 0, A = F.length; D < A; D++) {
								this.appendChild(F[D])
							}
						} else {
							if (this.fireEvent("beforeappend", this.ownerTree,
									this, E) === false) {
								return false
							}
							var B = this.childNodes.length;
							var C = E.parentNode;
							if (C) {
								if (E.fireEvent("beforemove", E.getOwnerTree(),
										E, C, this, B) === false) {
									return false
								}
								C.removeChild(E)
							}
							B = this.childNodes.length;
							if (B == 0) {
								this.setFirstChild(E)
							}
							this.childNodes.push(E);
							E.parentNode = this;
							var G = this.childNodes[B - 1];
							if (G) {
								E.previousSibling = G;
								G.nextSibling = E
							} else {
								E.previousSibling = null
							}
							E.nextSibling = null;
							this.setLastChild(E);
							E.setOwnerTree(this.getOwnerTree());
							this
									.fireEvent("append", this.ownerTree, this,
											E, B);
							if (C) {
								E.fireEvent("move", this.ownerTree, E, C, this,
										B)
							}
							return E
						}
					},
					removeChild : function(B) {
						var A = this.childNodes.indexOf(B);
						if (A == -1) {
							return false
						}
						if (this.fireEvent("beforeremove", this.ownerTree,
								this, B) === false) {
							return false
						}
						this.childNodes.splice(A, 1);
						if (B.previousSibling) {
							B.previousSibling.nextSibling = B.nextSibling
						}
						if (B.nextSibling) {
							B.nextSibling.previousSibling = B.previousSibling
						}
						if (this.firstChild == B) {
							this.setFirstChild(B.nextSibling)
						}
						if (this.lastChild == B) {
							this.setLastChild(B.previousSibling)
						}
						B.setOwnerTree(null);
						B.parentNode = null;
						B.previousSibling = null;
						B.nextSibling = null;
						this.fireEvent("remove", this.ownerTree, this, B);
						return B
					},
					insertBefore : function(D, A) {
						if (!A) {
							return this.appendChild(D)
						}
						if (D == A) {
							return false
						}
						if (this.fireEvent("beforeinsert", this.ownerTree,
								this, D, A) === false) {
							return false
						}
						var B = this.childNodes.indexOf(A);
						var C = D.parentNode;
						var E = B;
						if (C == this && this.childNodes.indexOf(D) < B) {
							E--
						}
						if (C) {
							if (D.fireEvent("beforemove", D.getOwnerTree(), D,
									C, this, B, A) === false) {
								return false
							}
							C.removeChild(D)
						}
						if (E == 0) {
							this.setFirstChild(D)
						}
						this.childNodes.splice(E, 0, D);
						D.parentNode = this;
						var F = this.childNodes[E - 1];
						if (F) {
							D.previousSibling = F;
							F.nextSibling = D
						} else {
							D.previousSibling = null
						}
						D.nextSibling = A;
						A.previousSibling = D;
						D.setOwnerTree(this.getOwnerTree());
						this.fireEvent("insert", this.ownerTree, this, D, A);
						if (C) {
							D.fireEvent("move", this.ownerTree, D, C, this, E,
									A)
						}
						return D
					},
					remove : function() {
						this.parentNode.removeChild(this);
						return this
					},
					item : function(A) {
						return this.childNodes[A]
					},
					replaceChild : function(A, B) {
						this.insertBefore(A, B);
						this.removeChild(B);
						return B
					},
					indexOf : function(A) {
						return this.childNodes.indexOf(A)
					},
					getOwnerTree : function() {
						if (!this.ownerTree) {
							var A = this;
							while (A) {
								if (A.ownerTree) {
									this.ownerTree = A.ownerTree;
									break
								}
								A = A.parentNode
							}
						}
						return this.ownerTree
					},
					getDepth : function() {
						var B = 0;
						var A = this;
						while (A.parentNode) {
							++B;
							A = A.parentNode
						}
						return B
					},
					setOwnerTree : function(B) {
						if (B != this.ownerTree) {
							if (this.ownerTree) {
								this.ownerTree.unregisterNode(this)
							}
							this.ownerTree = B;
							var D = this.childNodes;
							for ( var C = 0, A = D.length; C < A; C++) {
								D[C].setOwnerTree(B)
							}
							if (B) {
								B.registerNode(this)
							}
						}
					},
					getPath : function(B) {
						B = B || "id";
						var D = this.parentNode;
						var A = [ this.attributes[B] ];
						while (D) {
							A.unshift(D.attributes[B]);
							D = D.parentNode
						}
						var C = this.getOwnerTree().pathSeparator;
						return C + A.join(C)
					},
					bubble : function(C, B, A) {
						var D = this;
						while (D) {
							if (C.apply(B || D, A || [ D ]) === false) {
								break
							}
							D = D.parentNode
						}
					},
					cascade : function(F, E, B) {
						if (F.apply(E || this, B || [ this ]) !== false) {
							var D = this.childNodes;
							for ( var C = 0, A = D.length; C < A; C++) {
								D[C].cascade(F, E, B)
							}
						}
					},
					eachChild : function(F, E, B) {
						var D = this.childNodes;
						for ( var C = 0, A = D.length; C < A; C++) {
							if (F.apply(E || this, B || [ D[C] ]) === false) {
								break
							}
						}
					},
					findChild : function(D, E) {
						var C = this.childNodes;
						for ( var B = 0, A = C.length; B < A; B++) {
							if (C[B].attributes[D] == E) {
								return C[B]
							}
						}
						return null
					},
					findChildBy : function(E, D) {
						var C = this.childNodes;
						for ( var B = 0, A = C.length; B < A; B++) {
							if (E.call(D || C[B], C[B]) === true) {
								return C[B]
							}
						}
						return null
					},
					sort : function(E, D) {
						var C = this.childNodes;
						var A = C.length;
						if (A > 0) {
							var F = D ? function() {
								E.apply(D, arguments)
							} : E;
							C.sort(F);
							for ( var B = 0; B < A; B++) {
								var G = C[B];
								G.previousSibling = C[B - 1];
								G.nextSibling = C[B + 1];
								if (B == 0) {
									this.setFirstChild(G)
								}
								if (B == A - 1) {
									this.setLastChild(G)
								}
							}
						}
					},
					contains : function(A) {
						return A.isAncestor(this)
					},
					isAncestor : function(A) {
						var B = this.parentNode;
						while (B) {
							if (B == A) {
								return true
							}
							B = B.parentNode
						}
						return false
					},
					toString : function() {
						return "[Node" + (this.id ? " " + this.id : "") + "]"
					}
				});
Ext.data.GroupingStore = Ext
		.extend(
				Ext.data.Store,
				{
					remoteGroup : false,
					groupOnSort : false,
					clearGrouping : function() {
						this.groupField = false;
						if (this.remoteGroup) {
							if (this.baseParams) {
								delete this.baseParams.groupBy
							}
							this.reload()
						} else {
							this.applySort();
							this.fireEvent("datachanged", this)
						}
					},
					groupBy : function(C, B) {
						if (this.groupField == C && !B) {
							return
						}
						this.groupField = C;
						if (this.remoteGroup) {
							if (!this.baseParams) {
								this.baseParams = {}
							}
							this.baseParams["groupBy"] = C
						}
						if (this.groupOnSort) {
							this.sort(C);
							return
						}
						if (this.remoteGroup) {
							this.reload()
						} else {
							var A = this.sortInfo || {};
							if (A.field != C) {
								this.applySort()
							} else {
								this.sortData(C)
							}
							this.fireEvent("datachanged", this)
						}
					},
					applySort : function() {
						Ext.data.GroupingStore.superclass.applySort.call(this);
						if (!this.groupOnSort && !this.remoteGroup) {
							var A = this.getGroupState();
							if (A && A != this.sortInfo.field) {
								this.sortData(this.groupField)
							}
						}
					},
					applyGrouping : function(A) {
						if (this.groupField !== false) {
							this.groupBy(this.groupField, true);
							return true
						} else {
							if (A === true) {
								this.fireEvent("datachanged", this)
							}
							return false
						}
					},
					getGroupState : function() {
						return this.groupOnSort && this.groupField !== false ? (this.sortInfo ? this.sortInfo.field
								: undefined)
								: this.groupField
					}
				});
Ext.ComponentMgr = function() {
	var B = new Ext.util.MixedCollection();
	var A = {};
	return {
		register : function(C) {
			B.add(C)
		},
		unregister : function(C) {
			B.remove(C)
		},
		get : function(C) {
			return B.get(C)
		},
		onAvailable : function(E, D, C) {
			B.on("add", function(F, G) {
				if (G.id == E) {
					D.call(C || G, G);
					B.un("add", D, C)
				}
			})
		},
		all : B,
		registerType : function(D, C) {
			A[D] = C;
			C.xtype = D
		},
		create : function(C, D) {
			return new A[C.xtype || D](C)
		}
	}
}();
Ext.reg = Ext.ComponentMgr.registerType;
Ext.Component = function(B) {
	B = B || {};
	if (B.initialConfig) {
		if (B.isAction) {
			this.baseAction = B
		}
		B = B.initialConfig
	} else {
		if (B.tagName || B.dom || typeof B == "string") {
			B = {
				applyTo : B,
				id : B.id || B
			}
		}
	}
	this.initialConfig = B;
	Ext.apply(this, B);
	this.addEvents("disable", "enable", "beforeshow", "show", "beforehide",
			"hide", "beforerender", "render", "beforedestroy", "destroy",
			"beforestaterestore", "staterestore", "beforestatesave",
			"statesave");
	this.getId();
	Ext.ComponentMgr.register(this);
	Ext.Component.superclass.constructor.call(this);
	if (this.baseAction) {
		this.baseAction.addComponent(this)
	}
	this.initComponent();
	if (this.plugins) {
		if (Ext.isArray(this.plugins)) {
			for ( var C = 0, A = this.plugins.length; C < A; C++) {
				this.plugins[C] = this.initPlugin(this.plugins[C])
			}
		} else {
			this.plugins = this.initPlugin(this.plugins)
		}
	}
	if (this.stateful !== false) {
		this.initState(B)
	}
	if (this.applyTo) {
		this.applyToMarkup(this.applyTo);
		delete this.applyTo
	} else {
		if (this.renderTo) {
			this.render(this.renderTo);
			delete this.renderTo
		}
	}
};
Ext.Component.AUTO_ID = 1000;
Ext
		.extend(
				Ext.Component,
				Ext.util.Observable,
				{
					disabledClass : "x-item-disabled",
					allowDomMove : true,
					autoShow : false,
					hideMode : "display",
					hideParent : false,
					hidden : false,
					disabled : false,
					rendered : false,
					ctype : "Ext.Component",
					actionMode : "el",
					getActionEl : function() {
						return this[this.actionMode]
					},
					initPlugin : function(A) {
						A.init(this);
						return A
					},
					initComponent : Ext.emptyFn,
					render : function(B, A) {
						if (!this.rendered
								&& this.fireEvent("beforerender", this) !== false) {
							if (!B && this.el) {
								this.el = Ext.get(this.el);
								B = this.el.dom.parentNode;
								this.allowDomMove = false
							}
							this.container = Ext.get(B);
							if (this.ctCls) {
								this.container.addClass(this.ctCls)
							}
							this.rendered = true;
							if (A !== undefined) {
								if (typeof A == "number") {
									A = this.container.dom.childNodes[A]
								} else {
									A = Ext.getDom(A)
								}
							}
							this.onRender(this.container, A || null);
							if (this.autoShow) {
								this.el.removeClass( [ "x-hidden",
										"x-hide-" + this.hideMode ])
							}
							if (this.cls) {
								this.el.addClass(this.cls);
								delete this.cls
							}
							if (this.style) {
								this.el.applyStyles(this.style);
								delete this.style
							}
							this.fireEvent("render", this);
							this.afterRender(this.container);
							if (this.hidden) {
								this.hide()
							}
							if (this.disabled) {
								this.disable()
							}
							if (this.stateful !== false) {
								this.initStateEvents()
							}
						}
						return this
					},
					initState : function(A) {
						if (Ext.state.Manager) {
							var B = Ext.state.Manager.get(this.stateId
									|| this.id);
							if (B) {
								if (this.fireEvent("beforestaterestore", this,
										B) !== false) {
									this.applyState(B);
									this.fireEvent("staterestore", this, B)
								}
							}
						}
					},
					initStateEvents : function() {
						if (this.stateEvents) {
							for ( var A = 0, B; B = this.stateEvents[A]; A++) {
								this.on(B, this.saveState, this, {
									delay : 100
								})
							}
						}
					},
					applyState : function(B, A) {
						if (B) {
							Ext.apply(this, B)
						}
					},
					getState : function() {
						return null
					},
					saveState : function() {
						if (Ext.state.Manager) {
							var A = this.getState();
							if (this.fireEvent("beforestatesave", this, A) !== false) {
								Ext.state.Manager.set(this.stateId || this.id,
										A);
								this.fireEvent("statesave", this, A)
							}
						}
					},
					applyToMarkup : function(A) {
						this.allowDomMove = false;
						this.el = Ext.get(A);
						this.render(this.el.dom.parentNode)
					},
					addClass : function(A) {
						if (this.el) {
							this.el.addClass(A)
						} else {
							this.cls = this.cls ? this.cls + " " + A : A
						}
					},
					removeClass : function(A) {
						if (this.el) {
							this.el.removeClass(A)
						} else {
							if (this.cls) {
								this.cls = this.cls.split(" ").remove(A).join(
										" ")
							}
						}
					},
					onRender : function(B, A) {
						if (this.autoEl) {
							if (typeof this.autoEl == "string") {
								this.el = document.createElement(this.autoEl)
							} else {
								var C = document.createElement("div");
								Ext.DomHelper.overwrite(C, this.autoEl);
								this.el = C.firstChild
							}
							if (!this.el.id) {
								this.el.id = this.getId()
							}
						}
						if (this.el) {
							this.el = Ext.get(this.el);
							if (this.allowDomMove !== false) {
								B.dom.insertBefore(this.el.dom, A)
							}
							if (this.overCls) {
								this.el.addClassOnOver(this.overCls)
							}
						}
					},
					getAutoCreate : function() {
						var A = typeof this.autoCreate == "object" ? this.autoCreate
								: Ext.apply( {}, this.defaultAutoCreate);
						if (this.id && !A.id) {
							A.id = this.id
						}
						return A
					},
					afterRender : Ext.emptyFn,
					destroy : function() {
						if (this.fireEvent("beforedestroy", this) !== false) {
							this.beforeDestroy();
							if (this.rendered) {
								this.el.removeAllListeners();
								this.el.remove();
								if (this.actionMode == "container") {
									this.container.remove()
								}
							}
							this.onDestroy();
							Ext.ComponentMgr.unregister(this);
							this.fireEvent("destroy", this);
							this.purgeListeners()
						}
					},
					beforeDestroy : Ext.emptyFn,
					onDestroy : Ext.emptyFn,
					getEl : function() {
						return this.el
					},
					getId : function() {
						return this.id
								|| (this.id = "ext-comp-"
										+ (++Ext.Component.AUTO_ID))
					},
					getItemId : function() {
						return this.itemId || this.getId()
					},
					focus : function(B, A) {
						if (A) {
							this.focus.defer(typeof A == "number" ? A : 10,
									this, [ B, false ]);
							return
						}
						if (this.rendered) {
							this.el.focus();
							if (B === true) {
								this.el.dom.select()
							}
						}
						return this
					},
					blur : function() {
						if (this.rendered) {
							this.el.blur()
						}
						return this
					},
					disable : function() {
						if (this.rendered) {
							this.onDisable()
						}
						this.disabled = true;
						this.fireEvent("disable", this);
						return this
					},
					onDisable : function() {
						this.getActionEl().addClass(this.disabledClass);
						this.el.dom.disabled = true
					},
					enable : function() {
						if (this.rendered) {
							this.onEnable()
						}
						this.disabled = false;
						this.fireEvent("enable", this);
						return this
					},
					onEnable : function() {
						this.getActionEl().removeClass(this.disabledClass);
						this.el.dom.disabled = false
					},
					setDisabled : function(A) {
						this[A ? "disable" : "enable"]()
					},
					show : function() {
						if (this.fireEvent("beforeshow", this) !== false) {
							this.hidden = false;
							if (this.autoRender) {
								this
										.render(typeof this.autoRender == "boolean" ? Ext
												.getBody()
												: this.autoRender)
							}
							if (this.rendered) {
								this.onShow()
							}
							this.fireEvent("show", this)
						}
						return this
					},
					onShow : function() {
						if (this.hideParent) {
							this.container.removeClass("x-hide-"
									+ this.hideMode)
						} else {
							this.getActionEl().removeClass(
									"x-hide-" + this.hideMode)
						}
					},
					hide : function() {
						if (this.fireEvent("beforehide", this) !== false) {
							this.hidden = true;
							if (this.rendered) {
								this.onHide()
							}
							this.fireEvent("hide", this)
						}
						return this
					},
					onHide : function() {
						if (this.hideParent) {
							this.container.addClass("x-hide-" + this.hideMode)
						} else {
							this.getActionEl().addClass(
									"x-hide-" + this.hideMode)
						}
					},
					setVisible : function(A) {
						if (A) {
							this.show()
						} else {
							this.hide()
						}
						return this
					},
					isVisible : function() {
						return this.rendered && this.getActionEl().isVisible()
					},
					cloneConfig : function(B) {
						B = B || {};
						var C = B.id || Ext.id();
						var A = Ext.applyIf(B, this.initialConfig);
						A.id = C;
						return new this.constructor(A)
					},
					getXType : function() {
						return this.constructor.xtype
					},
					isXType : function(B, A) {
						return !A ? ("/" + this.getXTypes() + "/").indexOf("/"
								+ B + "/") != -1 : this.constructor.xtype == B
					},
					getXTypes : function() {
						var A = this.constructor;
						if (!A.xtypes) {
							var C = [], B = this;
							while (B && B.constructor.xtype) {
								C.unshift(B.constructor.xtype);
								B = B.constructor.superclass
							}
							A.xtypeChain = C;
							A.xtypes = C.join("/")
						}
						return A.xtypes
					},
					findParentBy : function(A) {
						for ( var B = this.ownerCt; (B != null) && !A(B, this); B = B.ownerCt) {
						}
						return B || null
					},
					findParentByType : function(A) {
						return typeof A == "function" ? this
								.findParentBy(function(B) {
									return B.constructor === A
								}) : this.findParentBy(function(B) {
							return B.constructor.xtype === A
						})
					},
					mon : function(E, B, D, C, A) {
						if (!this.mons) {
							this.mons = [];
							this
									.on(
											"beforedestroy",
											function() {
												for ( var H = 0, G = this.mons.length; H < G; H++) {
													var F = this.mons[H];
													F.item.un(F.ename, F.fn,
															F.scope)
												}
											}, this)
						}
						this.mons.push( {
							item : E,
							ename : B,
							fn : D,
							scope : C
						});
						E.on(B, D, C, A)
					}
				});
Ext.reg("component", Ext.Component);
Ext.Action = function(A) {
	this.initialConfig = A;
	this.items = []
};
Ext.Action.prototype = {
	isAction : true,
	setText : function(A) {
		this.initialConfig.text = A;
		this.callEach("setText", [ A ])
	},
	getText : function() {
		return this.initialConfig.text
	},
	setIconClass : function(A) {
		this.initialConfig.iconCls = A;
		this.callEach("setIconClass", [ A ])
	},
	getIconClass : function() {
		return this.initialConfig.iconCls
	},
	setDisabled : function(A) {
		this.initialConfig.disabled = A;
		this.callEach("setDisabled", [ A ])
	},
	enable : function() {
		this.setDisabled(false)
	},
	disable : function() {
		this.setDisabled(true)
	},
	isDisabled : function() {
		return this.initialConfig.disabled
	},
	setHidden : function(A) {
		this.initialConfig.hidden = A;
		this.callEach("setVisible", [ !A ])
	},
	show : function() {
		this.setHidden(false)
	},
	hide : function() {
		this.setHidden(true)
	},
	isHidden : function() {
		return this.initialConfig.hidden
	},
	setHandler : function(B, A) {
		this.initialConfig.handler = B;
		this.initialConfig.scope = A;
		this.callEach("setHandler", [ B, A ])
	},
	each : function(B, A) {
		Ext.each(this.items, B, A)
	},
	callEach : function(E, B) {
		var D = this.items;
		for ( var C = 0, A = D.length; C < A; C++) {
			D[C][E].apply(D[C], B)
		}
	},
	addComponent : function(A) {
		this.items.push(A);
		A.on("destroy", this.removeComponent, this)
	},
	removeComponent : function(A) {
		this.items.remove(A)
	},
	execute : function() {
		this.initialConfig.handler.apply(this.initialConfig.scope || window,
				arguments)
	}
};
(function() {
	Ext.Layer = function(D, C) {
		D = D || {};
		var E = Ext.DomHelper;
		var G = D.parentEl, F = G ? Ext.getDom(G) : document.body;
		if (C) {
			this.dom = Ext.getDom(C)
		}
		if (!this.dom) {
			var H = D.dh || {
				tag : "div",
				cls : "x-layer"
			};
			this.dom = E.append(F, H)
		}
		if (D.cls) {
			this.addClass(D.cls)
		}
		this.constrain = D.constrain !== false;
		this.visibilityMode = Ext.Element.VISIBILITY;
		if (D.id) {
			this.id = this.dom.id = D.id
		} else {
			this.id = Ext.id(this.dom)
		}
		this.zindex = D.zindex || this.getZIndex();
		this.position("absolute", this.zindex);
		if (D.shadow) {
			this.shadowOffset = D.shadowOffset || 4;
			this.shadow = new Ext.Shadow( {
				offset : this.shadowOffset,
				mode : D.shadow
			})
		} else {
			this.shadowOffset = 0
		}
		this.useShim = D.shim !== false && Ext.useShims;
		this.useDisplay = D.useDisplay;
		this.hide()
	};
	var A = Ext.Element.prototype;
	var B = [];
	Ext
			.extend(
					Ext.Layer,
					Ext.Element,
					{
						getZIndex : function() {
							return this.zindex
									|| parseInt(this.getStyle("z-index"), 10)
									|| 11000
						},
						getShim : function() {
							if (!this.useShim) {
								return null
							}
							if (this.shim) {
								return this.shim
							}
							var D = B.shift();
							if (!D) {
								D = this.createShim();
								D.enableDisplayMode("block");
								D.dom.style.display = "none";
								D.dom.style.visibility = "visible"
							}
							var C = this.dom.parentNode;
							if (D.dom.parentNode != C) {
								C.insertBefore(D.dom, this.dom)
							}
							D.setStyle("z-index", this.getZIndex() - 2);
							this.shim = D;
							return D
						},
						hideShim : function() {
							if (this.shim) {
								this.shim.setDisplayed(false);
								B.push(this.shim);
								delete this.shim
							}
						},
						disableShadow : function() {
							if (this.shadow) {
								this.shadowDisabled = true;
								this.shadow.hide();
								this.lastShadowOffset = this.shadowOffset;
								this.shadowOffset = 0
							}
						},
						enableShadow : function(C) {
							if (this.shadow) {
								this.shadowDisabled = false;
								this.shadowOffset = this.lastShadowOffset;
								delete this.lastShadowOffset;
								if (C) {
									this.sync(true)
								}
							}
						},
						sync : function(C) {
							var I = this.shadow;
							if (!this.updating && this.isVisible()
									&& (I || this.useShim)) {
								var F = this.getShim();
								var H = this.getWidth(), E = this.getHeight();
								var D = this.getLeft(true), J = this
										.getTop(true);
								if (I && !this.shadowDisabled) {
									if (C && !I.isVisible()) {
										I.show(this)
									} else {
										I.realign(D, J, H, E)
									}
									if (F) {
										if (C) {
											F.show()
										}
										var G = I.adjusts, K = F.dom.style;
										K.left = (Math.min(D, D + G.l)) + "px";
										K.top = (Math.min(J, J + G.t)) + "px";
										K.width = (H + G.w) + "px";
										K.height = (E + G.h) + "px"
									}
								} else {
									if (F) {
										if (C) {
											F.show()
										}
										F.setSize(H, E);
										F.setLeftTop(D, J)
									}
								}
							}
						},
						destroy : function() {
							this.hideShim();
							if (this.shadow) {
								this.shadow.hide()
							}
							this.removeAllListeners();
							Ext.removeNode(this.dom);
							Ext.Element.uncache(this.id)
						},
						remove : function() {
							this.destroy()
						},
						beginUpdate : function() {
							this.updating = true
						},
						endUpdate : function() {
							this.updating = false;
							this.sync(true)
						},
						hideUnders : function(C) {
							if (this.shadow) {
								this.shadow.hide()
							}
							this.hideShim()
						},
						constrainXY : function() {
							if (this.constrain) {
								var G = Ext.lib.Dom.getViewWidth(), C = Ext.lib.Dom
										.getViewHeight();
								var L = Ext.getDoc().getScroll();
								var K = this.getXY();
								var H = K[0], F = K[1];
								var I = this.dom.offsetWidth
										+ this.shadowOffset, D = this.dom.offsetHeight
										+ this.shadowOffset;
								var E = false;
								if ((H + I) > G + L.left) {
									H = G - I - this.shadowOffset;
									E = true
								}
								if ((F + D) > C + L.top) {
									F = C - D - this.shadowOffset;
									E = true
								}
								if (H < L.left) {
									H = L.left;
									E = true
								}
								if (F < L.top) {
									F = L.top;
									E = true
								}
								if (E) {
									if (this.avoidY) {
										var J = this.avoidY;
										if (F <= J && (F + D) >= J) {
											F = J - D - 5
										}
									}
									K = [ H, F ];
									this.storeXY(K);
									A.setXY.call(this, K);
									this.sync()
								}
							}
						},
						isVisible : function() {
							return this.visible
						},
						showAction : function() {
							this.visible = true;
							if (this.useDisplay === true) {
								this.setDisplayed("")
							} else {
								if (this.lastXY) {
									A.setXY.call(this, this.lastXY)
								} else {
									if (this.lastLT) {
										A.setLeftTop.call(this, this.lastLT[0],
												this.lastLT[1])
									}
								}
							}
						},
						hideAction : function() {
							this.visible = false;
							if (this.useDisplay === true) {
								this.setDisplayed(false)
							} else {
								this.setLeftTop(-10000, -10000)
							}
						},
						setVisible : function(E, D, G, H, F) {
							if (E) {
								this.showAction()
							}
							if (D && E) {
								var C = function() {
									this.sync(true);
									if (H) {
										H()
									}
								}.createDelegate(this);
								A.setVisible.call(this, true, true, G, C, F)
							} else {
								if (!E) {
									this.hideUnders(true)
								}
								var C = H;
								if (D) {
									C = function() {
										this.hideAction();
										if (H) {
											H()
										}
									}.createDelegate(this)
								}
								A.setVisible.call(this, E, D, G, C, F);
								if (E) {
									this.sync(true)
								} else {
									if (!D) {
										this.hideAction()
									}
								}
							}
						},
						storeXY : function(C) {
							delete this.lastLT;
							this.lastXY = C
						},
						storeLeftTop : function(D, C) {
							delete this.lastXY;
							this.lastLT = [ D, C ]
						},
						beforeFx : function() {
							this.beforeAction();
							return Ext.Layer.superclass.beforeFx.apply(this,
									arguments)
						},
						afterFx : function() {
							Ext.Layer.superclass.afterFx.apply(this, arguments);
							this.sync(this.isVisible())
						},
						beforeAction : function() {
							if (!this.updating && this.shadow) {
								this.shadow.hide()
							}
						},
						setLeft : function(C) {
							this.storeLeftTop(C, this.getTop(true));
							A.setLeft.apply(this, arguments);
							this.sync()
						},
						setTop : function(C) {
							this.storeLeftTop(this.getLeft(true), C);
							A.setTop.apply(this, arguments);
							this.sync()
						},
						setLeftTop : function(D, C) {
							this.storeLeftTop(D, C);
							A.setLeftTop.apply(this, arguments);
							this.sync()
						},
						setXY : function(F, D, G, H, E) {
							this.fixDisplay();
							this.beforeAction();
							this.storeXY(F);
							var C = this.createCB(H);
							A.setXY.call(this, F, D, G, C, E);
							if (!D) {
								C()
							}
						},
						createCB : function(D) {
							var C = this;
							return function() {
								C.constrainXY();
								C.sync(true);
								if (D) {
									D()
								}
							}
						},
						setX : function(C, D, F, G, E) {
							this.setXY( [ C, this.getY() ], D, F, G, E)
						},
						setY : function(G, C, E, F, D) {
							this.setXY( [ this.getX(), G ], C, E, F, D)
						},
						setSize : function(E, F, D, H, I, G) {
							this.beforeAction();
							var C = this.createCB(I);
							A.setSize.call(this, E, F, D, H, C, G);
							if (!D) {
								C()
							}
						},
						setWidth : function(E, D, G, H, F) {
							this.beforeAction();
							var C = this.createCB(H);
							A.setWidth.call(this, E, D, G, C, F);
							if (!D) {
								C()
							}
						},
						setHeight : function(E, D, G, H, F) {
							this.beforeAction();
							var C = this.createCB(H);
							A.setHeight.call(this, E, D, G, C, F);
							if (!D) {
								C()
							}
						},
						setBounds : function(J, H, K, D, I, F, G, E) {
							this.beforeAction();
							var C = this.createCB(G);
							if (!I) {
								this.storeXY( [ J, H ]);
								A.setXY.call(this, [ J, H ]);
								A.setSize.call(this, K, D, I, F, C, E);
								C()
							} else {
								A.setBounds.call(this, J, H, K, D, I, F, C, E)
							}
							return this
						},
						setZIndex : function(C) {
							this.zindex = C;
							this.setStyle("z-index", C + 2);
							if (this.shadow) {
								this.shadow.setZIndex(C + 1)
							}
							if (this.shim) {
								this.shim.setStyle("z-index", C)
							}
						}
					})
})();
Ext.Shadow = function(C) {
	Ext.apply(this, C);
	if (typeof this.mode != "string") {
		this.mode = this.defaultMode
	}
	var D = this.offset, B = {
		h : 0
	};
	var A = Math.floor(this.offset / 2);
	switch (this.mode.toLowerCase()) {
	case "drop":
		B.w = 0;
		B.l = B.t = D;
		B.t -= 1;
		if (Ext.isIE) {
			B.l -= this.offset + A;
			B.t -= this.offset + A;
			B.w -= A;
			B.h -= A;
			B.t += 1
		}
		break;
	case "sides":
		B.w = (D * 2);
		B.l = -D;
		B.t = D - 1;
		if (Ext.isIE) {
			B.l -= (this.offset - A);
			B.t -= this.offset + A;
			B.l += 1;
			B.w -= (this.offset - A) * 2;
			B.w -= A + 1;
			B.h -= 1
		}
		break;
	case "frame":
		B.w = B.h = (D * 2);
		B.l = B.t = -D;
		B.t += 1;
		B.h -= 2;
		if (Ext.isIE) {
			B.l -= (this.offset - A);
			B.t -= (this.offset - A);
			B.l += 1;
			B.w -= (this.offset + A + 1);
			B.h -= (this.offset + A);
			B.h += 1
		}
		break
	}
	this.adjusts = B
};
Ext.Shadow.prototype = {
	offset : 4,
	defaultMode : "drop",
	show : function(A) {
		A = Ext.get(A);
		if (!this.el) {
			this.el = Ext.Shadow.Pool.pull();
			if (this.el.dom.nextSibling != A.dom) {
				this.el.insertBefore(A)
			}
		}
		this.el.setStyle("z-index", this.zIndex
				|| parseInt(A.getStyle("z-index"), 10) - 1);
		if (Ext.isIE) {
			this.el.dom.style.filter = "progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="
					+ (this.offset) + ")"
		}
		this.realign(A.getLeft(true), A.getTop(true), A.getWidth(), A
				.getHeight());
		this.el.dom.style.display = "block"
	},
	isVisible : function() {
		return this.el ? true : false
	},
	realign : function(A, M, L, D) {
		if (!this.el) {
			return
		}
		var I = this.adjusts, G = this.el.dom, N = G.style;
		var E = 0;
		N.left = (A + I.l) + "px";
		N.top = (M + I.t) + "px";
		var K = (L + I.w), C = (D + I.h), F = K + "px", J = C + "px";
		if (N.width != F || N.height != J) {
			N.width = F;
			N.height = J;
			if (!Ext.isIE) {
				var H = G.childNodes;
				var B = Math.max(0, (K - 12)) + "px";
				H[0].childNodes[1].style.width = B;
				H[1].childNodes[1].style.width = B;
				H[2].childNodes[1].style.width = B;
				H[1].style.height = Math.max(0, (C - 12)) + "px"
			}
		}
	},
	hide : function() {
		if (this.el) {
			this.el.dom.style.display = "none";
			Ext.Shadow.Pool.push(this.el);
			delete this.el
		}
	},
	setZIndex : function(A) {
		this.zIndex = A;
		if (this.el) {
			this.el.setStyle("z-index", A)
		}
	}
};
Ext.Shadow.Pool = function() {
	var B = [];
	var A = Ext.isIE ? "<div class=\"x-ie-shadow\"></div>"
			: "<div class=\"x-shadow\"><div class=\"xst\"><div class=\"xstl\"></div><div class=\"xstc\"></div><div class=\"xstr\"></div></div><div class=\"xsc\"><div class=\"xsml\"></div><div class=\"xsmc\"></div><div class=\"xsmr\"></div></div><div class=\"xsb\"><div class=\"xsbl\"></div><div class=\"xsbc\"></div><div class=\"xsbr\"></div></div></div>";
	return {
		pull : function() {
			var C = B.shift();
			if (!C) {
				C = Ext.get(Ext.DomHelper.insertHtml("beforeBegin",
						document.body.firstChild, A));
				C.autoBoxAdjust = false
			}
			return C
		},
		push : function(C) {
			B.push(C)
		}
	}
}();
Ext.BoxComponent = Ext.extend(Ext.Component, {
	initComponent : function() {
		Ext.BoxComponent.superclass.initComponent.call(this);
		this.addEvents("resize", "move")
	},
	boxReady : false,
	deferHeight : false,
	setSize : function(B, D) {
		if (typeof B == "object") {
			D = B.height;
			B = B.width
		}
		if (!this.boxReady) {
			this.width = B;
			this.height = D;
			return this
		}
		if (this.lastSize && this.lastSize.width == B
				&& this.lastSize.height == D) {
			return this
		}
		this.lastSize = {
			width : B,
			height : D
		};
		var C = this.adjustSize(B, D);
		var F = C.width, A = C.height;
		if (F !== undefined || A !== undefined) {
			var E = this.getResizeEl();
			if (!this.deferHeight && F !== undefined && A !== undefined) {
				E.setSize(F, A)
			} else {
				if (!this.deferHeight && A !== undefined) {
					E.setHeight(A)
				} else {
					if (F !== undefined) {
						E.setWidth(F)
					}
				}
			}
			this.onResize(F, A, B, D);
			this.fireEvent("resize", this, F, A, B, D)
		}
		return this
	},
	setWidth : function(A) {
		return this.setSize(A)
	},
	setHeight : function(A) {
		return this.setSize(undefined, A)
	},
	getSize : function() {
		return this.el.getSize()
	},
	getPosition : function(A) {
		if (A === true) {
			return [ this.el.getLeft(true), this.el.getTop(true) ]
		}
		return this.xy || this.el.getXY()
	},
	getBox : function(A) {
		var B = this.el.getSize();
		if (A === true) {
			B.x = this.el.getLeft(true);
			B.y = this.el.getTop(true)
		} else {
			var C = this.xy || this.el.getXY();
			B.x = C[0];
			B.y = C[1]
		}
		return B
	},
	updateBox : function(A) {
		this.setSize(A.width, A.height);
		this.setPagePosition(A.x, A.y);
		return this
	},
	getResizeEl : function() {
		return this.resizeEl || this.el
	},
	getPositionEl : function() {
		return this.positionEl || this.el
	},
	setPosition : function(A, F) {
		if (A && typeof A[1] == "number") {
			F = A[1];
			A = A[0]
		}
		this.x = A;
		this.y = F;
		if (!this.boxReady) {
			return this
		}
		var B = this.adjustPosition(A, F);
		var E = B.x, D = B.y;
		var C = this.getPositionEl();
		if (E !== undefined || D !== undefined) {
			if (E !== undefined && D !== undefined) {
				C.setLeftTop(E, D)
			} else {
				if (E !== undefined) {
					C.setLeft(E)
				} else {
					if (D !== undefined) {
						C.setTop(D)
					}
				}
			}
			this.onPosition(E, D);
			this.fireEvent("move", this, E, D)
		}
		return this
	},
	setPagePosition : function(A, C) {
		if (A && typeof A[1] == "number") {
			C = A[1];
			A = A[0]
		}
		this.pageX = A;
		this.pageY = C;
		if (!this.boxReady) {
			return
		}
		if (A === undefined || C === undefined) {
			return
		}
		var B = this.el.translatePoints(A, C);
		this.setPosition(B.left, B.top);
		return this
	},
	onRender : function(B, A) {
		Ext.BoxComponent.superclass.onRender.call(this, B, A);
		if (this.resizeEl) {
			this.resizeEl = Ext.get(this.resizeEl)
		}
		if (this.positionEl) {
			this.positionEl = Ext.get(this.positionEl)
		}
	},
	afterRender : function() {
		Ext.BoxComponent.superclass.afterRender.call(this);
		this.boxReady = true;
		this.setSize(this.width, this.height);
		if (this.x || this.y) {
			this.setPosition(this.x, this.y)
		} else {
			if (this.pageX || this.pageY) {
				this.setPagePosition(this.pageX, this.pageY)
			}
		}
	},
	syncSize : function() {
		delete this.lastSize;
		this.setSize(this.autoWidth ? undefined : this.el.getWidth(),
				this.autoHeight ? undefined : this.el.getHeight());
		return this
	},
	onResize : function(D, B, A, C) {
	},
	onPosition : function(A, B) {
	},
	adjustSize : function(A, B) {
		if (this.autoWidth) {
			A = "auto"
		}
		if (this.autoHeight) {
			B = "auto"
		}
		return {
			width : A,
			height : B
		}
	},
	adjustPosition : function(A, B) {
		return {
			x : A,
			y : B
		}
	}
});
Ext.reg("box", Ext.BoxComponent);
Ext.SplitBar = function(C, E, B, D, A) {
	this.el = Ext.get(C, true);
	this.el.dom.unselectable = "on";
	this.resizingEl = Ext.get(E, true);
	this.orientation = B || Ext.SplitBar.HORIZONTAL;
	this.minSize = 0;
	this.maxSize = 2000;
	this.animate = false;
	this.useShim = false;
	this.shim = null;
	if (!A) {
		this.proxy = Ext.SplitBar.createProxy(this.orientation)
	} else {
		this.proxy = Ext.get(A).dom
	}
	this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {
		dragElId : this.proxy.id
	});
	this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this);
	this.dd.endDrag = this.onEndProxyDrag.createDelegate(this);
	this.dragSpecs = {};
	this.adapter = new Ext.SplitBar.BasicLayoutAdapter();
	this.adapter.init(this);
	if (this.orientation == Ext.SplitBar.HORIZONTAL) {
		this.placement = D
				|| (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT
						: Ext.SplitBar.RIGHT);
		this.el.addClass("x-splitbar-h")
	} else {
		this.placement = D
				|| (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP
						: Ext.SplitBar.BOTTOM);
		this.el.addClass("x-splitbar-v")
	}
	this.addEvents("resize", "moved", "beforeresize", "beforeapply");
	Ext.SplitBar.superclass.constructor.call(this)
};
Ext.extend(Ext.SplitBar, Ext.util.Observable, {
	onStartProxyDrag : function(A, E) {
		this.fireEvent("beforeresize", this);
		this.overlay = Ext.DomHelper.append(document.body, {
			cls : "x-drag-overlay",
			html : "&#160;"
		}, true);
		this.overlay.unselectable();
		this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom
				.getViewHeight(true));
		this.overlay.show();
		Ext.get(this.proxy).setDisplayed("block");
		var C = this.adapter.getElementSize(this);
		this.activeMinSize = this.getMinimumSize();
		this.activeMaxSize = this.getMaximumSize();
		var D = C - this.activeMinSize;
		var B = Math.max(this.activeMaxSize - C, 0);
		if (this.orientation == Ext.SplitBar.HORIZONTAL) {
			this.dd.resetConstraints();
			this.dd.setXConstraint(this.placement == Ext.SplitBar.LEFT ? D : B,
					this.placement == Ext.SplitBar.LEFT ? B : D);
			this.dd.setYConstraint(0, 0)
		} else {
			this.dd.resetConstraints();
			this.dd.setXConstraint(0, 0);
			this.dd.setYConstraint(this.placement == Ext.SplitBar.TOP ? D : B,
					this.placement == Ext.SplitBar.TOP ? B : D)
		}
		this.dragSpecs.startSize = C;
		this.dragSpecs.startPoint = [ A, E ];
		Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, A, E)
	},
	onEndProxyDrag : function(C) {
		Ext.get(this.proxy).setDisplayed(false);
		var B = Ext.lib.Event.getXY(C);
		if (this.overlay) {
			this.overlay.remove();
			delete this.overlay
		}
		var A;
		if (this.orientation == Ext.SplitBar.HORIZONTAL) {
			A = this.dragSpecs.startSize
					+ (this.placement == Ext.SplitBar.LEFT ? B[0]
							- this.dragSpecs.startPoint[0]
							: this.dragSpecs.startPoint[0] - B[0])
		} else {
			A = this.dragSpecs.startSize
					+ (this.placement == Ext.SplitBar.TOP ? B[1]
							- this.dragSpecs.startPoint[1]
							: this.dragSpecs.startPoint[1] - B[1])
		}
		A = Math.min(Math.max(A, this.activeMinSize), this.activeMaxSize);
		if (A != this.dragSpecs.startSize) {
			if (this.fireEvent("beforeapply", this, A) !== false) {
				this.adapter.setElementSize(this, A);
				this.fireEvent("moved", this, A);
				this.fireEvent("resize", this, A)
			}
		}
	},
	getAdapter : function() {
		return this.adapter
	},
	setAdapter : function(A) {
		this.adapter = A;
		this.adapter.init(this)
	},
	getMinimumSize : function() {
		return this.minSize
	},
	setMinimumSize : function(A) {
		this.minSize = A
	},
	getMaximumSize : function() {
		return this.maxSize
	},
	setMaximumSize : function(A) {
		this.maxSize = A
	},
	setCurrentSize : function(B) {
		var A = this.animate;
		this.animate = false;
		this.adapter.setElementSize(this, B);
		this.animate = A
	},
	destroy : function(A) {
		if (this.shim) {
			this.shim.remove()
		}
		this.dd.unreg();
		Ext.removeNode(this.proxy);
		if (A) {
			this.el.remove()
		}
	}
});
Ext.SplitBar.createProxy = function(B) {
	var C = new Ext.Element(document.createElement("div"));
	C.unselectable();
	var A = "x-splitbar-proxy";
	C.addClass(A + " " + (B == Ext.SplitBar.HORIZONTAL ? A + "-h" : A + "-v"));
	document.body.appendChild(C.dom);
	return C.dom
};
Ext.SplitBar.BasicLayoutAdapter = function() {
};
Ext.SplitBar.BasicLayoutAdapter.prototype = {
	init : function(A) {
	},
	getElementSize : function(A) {
		if (A.orientation == Ext.SplitBar.HORIZONTAL) {
			return A.resizingEl.getWidth()
		} else {
			return A.resizingEl.getHeight()
		}
	},
	setElementSize : function(B, A, C) {
		if (B.orientation == Ext.SplitBar.HORIZONTAL) {
			if (!B.animate) {
				B.resizingEl.setWidth(A);
				if (C) {
					C(B, A)
				}
			} else {
				B.resizingEl.setWidth(A, true, 0.1, C, "easeOut")
			}
		} else {
			if (!B.animate) {
				B.resizingEl.setHeight(A);
				if (C) {
					C(B, A)
				}
			} else {
				B.resizingEl.setHeight(A, true, 0.1, C, "easeOut")
			}
		}
	}
};
Ext.SplitBar.AbsoluteLayoutAdapter = function(A) {
	this.basic = new Ext.SplitBar.BasicLayoutAdapter();
	this.container = Ext.get(A)
};
Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {
	init : function(A) {
		this.basic.init(A)
	},
	getElementSize : function(A) {
		return this.basic.getElementSize(A)
	},
	setElementSize : function(B, A, C) {
		this.basic.setElementSize(B, A, this.moveSplitter.createDelegate(this,
				[ B ]))
	},
	moveSplitter : function(A) {
		var B = Ext.SplitBar;
		switch (A.placement) {
		case B.LEFT:
			A.el.setX(A.resizingEl.getRight());
			break;
		case B.RIGHT:
			A.el.setStyle("right", (this.container.getWidth() - A.resizingEl
					.getLeft())
					+ "px");
			break;
		case B.TOP:
			A.el.setY(A.resizingEl.getBottom());
			break;
		case B.BOTTOM:
			A.el.setY(A.resizingEl.getTop() - A.el.getHeight());
			break
		}
	}
};
Ext.SplitBar.VERTICAL = 1;
Ext.SplitBar.HORIZONTAL = 2;
Ext.SplitBar.LEFT = 1;
Ext.SplitBar.RIGHT = 2;
Ext.SplitBar.TOP = 3;
Ext.SplitBar.BOTTOM = 4;
Ext.Container = Ext.extend(Ext.BoxComponent, {
	autoDestroy : true,
	defaultType : "panel",
	initComponent : function() {
		Ext.Container.superclass.initComponent.call(this);
		this.addEvents("afterlayout", "beforeadd", "beforeremove", "add",
				"remove");
		var A = this.items;
		if (A) {
			delete this.items;
			if (Ext.isArray(A)) {
				this.add.apply(this, A)
			} else {
				this.add(A)
			}
		}
	},
	initItems : function() {
		if (!this.items) {
			this.items = new Ext.util.MixedCollection(false,
					this.getComponentId);
			this.getLayout()
		}
	},
	setLayout : function(A) {
		if (this.layout && this.layout != A) {
			this.layout.setContainer(null)
		}
		this.initItems();
		this.layout = A;
		A.setContainer(this)
	},
	render : function() {
		Ext.Container.superclass.render.apply(this, arguments);
		if (this.layout) {
			if (typeof this.layout == "string") {
				this.layout = new Ext.Container.LAYOUTS[this.layout
						.toLowerCase()](this.layoutConfig)
			}
			this.setLayout(this.layout);
			if (this.activeItem !== undefined) {
				var A = this.activeItem;
				delete this.activeItem;
				this.layout.setActiveItem(A);
				return
			}
		}
		if (!this.ownerCt) {
			this.doLayout()
		}
		if (this.monitorResize === true) {
			Ext.EventManager.onWindowResize(this.doLayout, this, [ false ])
		}
	},
	getLayoutTarget : function() {
		return this.el
	},
	getComponentId : function(A) {
		return A.itemId || A.id
	},
	add : function(C) {
		if (!this.items) {
			this.initItems()
		}
		var B = arguments, A = B.length;
		if (A > 1) {
			for ( var D = 0; D < A; D++) {
				this.add(B[D])
			}
			return
		}
		var F = this.lookupComponent(this.applyDefaults(C));
		var E = this.items.length;
		if (this.fireEvent("beforeadd", this, F, E) !== false
				&& this.onBeforeAdd(F) !== false) {
			this.items.add(F);
			F.ownerCt = this;
			this.fireEvent("add", this, F, E)
		}
		return F
	},
	insert : function(D, C) {
		if (!this.items) {
			this.initItems()
		}
		var B = arguments, A = B.length;
		if (A > 2) {
			for ( var E = A - 1; E >= 1; --E) {
				this.insert(D, B[E])
			}
			return
		}
		var F = this.lookupComponent(this.applyDefaults(C));
		if (F.ownerCt == this && this.items.indexOf(F) < D) {
			--D
		}
		if (this.fireEvent("beforeadd", this, F, D) !== false
				&& this.onBeforeAdd(F) !== false) {
			this.items.insert(D, F);
			F.ownerCt = this;
			this.fireEvent("add", this, F, D)
		}
		return F
	},
	applyDefaults : function(A) {
		if (this.defaults) {
			if (typeof A == "string") {
				A = Ext.ComponentMgr.get(A);
				Ext.apply(A, this.defaults)
			} else {
				if (!A.events) {
					Ext.applyIf(A, this.defaults)
				} else {
					Ext.apply(A, this.defaults)
				}
			}
		}
		return A
	},
	onBeforeAdd : function(A) {
		if (A.ownerCt) {
			A.ownerCt.remove(A, false)
		}
		if (this.hideBorders === true) {
			A.border = (A.border === true)
		}
	},
	remove : function(A, B) {
		var C = this.getComponent(A);
		if (C && this.fireEvent("beforeremove", this, C) !== false) {
			this.items.remove(C);
			delete C.ownerCt;
			if (B === true || (B !== false && this.autoDestroy)) {
				C.destroy()
			}
			if (this.layout && this.layout.activeItem == C) {
				delete this.layout.activeItem
			}
			this.fireEvent("remove", this, C)
		}
		return C
	},
	getComponent : function(A) {
		if (typeof A == "object") {
			return A
		}
		return this.items.get(A)
	},
	lookupComponent : function(A) {
		if (typeof A == "string") {
			return Ext.ComponentMgr.get(A)
		} else {
			if (!A.events) {
				return this.createComponent(A)
			}
		}
		return A
	},
	createComponent : function(A) {
		return Ext.ComponentMgr.create(A, this.defaultType)
	},
	doLayout : function(D) {
		if (this.rendered && this.layout) {
			this.layout.layout()
		}
		if (D !== false && this.items) {
			var C = this.items.items;
			for ( var B = 0, A = C.length; B < A; B++) {
				var E = C[B];
				if (E.doLayout) {
					E.doLayout()
				}
			}
		}
	},
	getLayout : function() {
		if (!this.layout) {
			var A = new Ext.layout.ContainerLayout(this.layoutConfig);
			this.setLayout(A)
		}
		return this.layout
	},
	beforeDestroy : function() {
		if (this.items) {
			Ext.destroy.apply(Ext, this.items.items)
		}
		if (this.monitorResize) {
			Ext.EventManager.removeResizeListener(this.doLayout, this)
		}
		if (this.layout && this.layout.destroy) {
			this.layout.destroy()
		}
		Ext.Container.superclass.beforeDestroy.call(this)
	},
	bubble : function(C, B, A) {
		var D = this;
		while (D) {
			if (C.apply(B || D, A || [ D ]) === false) {
				break
			}
			D = D.ownerCt
		}
	},
	cascade : function(F, E, B) {
		if (F.apply(E || this, B || [ this ]) !== false) {
			if (this.items) {
				var D = this.items.items;
				for ( var C = 0, A = D.length; C < A; C++) {
					if (D[C].cascade) {
						D[C].cascade(F, E, B)
					} else {
						F.apply(E || D[C], B || [ D[C] ])
					}
				}
			}
		}
	},
	findById : function(C) {
		var A, B = this;
		this.cascade(function(D) {
			if (B != D && D.id === C) {
				A = D;
				return false
			}
		});
		return A || null
	},
	findByType : function(A) {
		return typeof A == "function" ? this.findBy(function(B) {
			return B.constructor === A
		}) : this.findBy(function(B) {
			return B.constructor.xtype === A
		})
	},
	find : function(B, A) {
		return this.findBy(function(C) {
			return C[B] === A
		})
	},
	findBy : function(D, C) {
		var A = [], B = this;
		this.cascade(function(E) {
			if (B != E && D.call(C || E, E, B) === true) {
				A.push(E)
			}
		});
		return A
	}
});
Ext.Container.LAYOUTS = {};
Ext.reg("container", Ext.Container);
Ext.layout.ContainerLayout = function(A) {
	Ext.apply(this, A)
};
Ext.layout.ContainerLayout.prototype = {
	monitorResize : false,
	activeItem : null,
	layout : function() {
		var A = this.container.getLayoutTarget();
		this.onLayout(this.container, A);
		this.container.fireEvent("afterlayout", this.container, this)
	},
	onLayout : function(A, B) {
		this.renderAll(A, B)
	},
	isValidParent : function(C, B) {
		var A = C.getPositionEl ? C.getPositionEl() : C.getEl();
		return A.dom.parentNode == B.dom
	},
	renderAll : function(D, E) {
		var B = D.items.items;
		for ( var C = 0, A = B.length; C < A; C++) {
			var F = B[C];
			if (F && (!F.rendered || !this.isValidParent(F, E))) {
				this.renderItem(F, C, E)
			}
		}
	},
	renderItem : function(D, A, C) {
		if (D && !D.rendered) {
			D.render(C, A);
			if (this.extraCls) {
				var B = D.getPositionEl ? D.getPositionEl() : D;
				B.addClass(this.extraCls)
			}
			if (this.renderHidden && D != this.activeItem) {
				D.hide()
			}
		} else {
			if (D && !this.isValidParent(D, C)) {
				if (this.extraCls) {
					D.addClass(this.extraCls)
				}
				if (typeof A == "number") {
					A = C.dom.childNodes[A]
				}
				C.dom.insertBefore(D.getEl().dom, A || null);
				if (this.renderHidden && D != this.activeItem) {
					D.hide()
				}
			}
		}
	},
	onResize : function() {
		if (this.container.collapsed) {
			return
		}
		var A = this.container.bufferResize;
		if (A) {
			if (!this.resizeTask) {
				this.resizeTask = new Ext.util.DelayedTask(this.layout, this);
				this.resizeBuffer = typeof A == "number" ? A : 100
			}
			this.resizeTask.delay(this.resizeBuffer)
		} else {
			this.layout()
		}
	},
	setContainer : function(A) {
		if (this.monitorResize && A != this.container) {
			if (this.container) {
				this.container.un("resize", this.onResize, this)
			}
			if (A) {
				A.on("resize", this.onResize, this)
			}
		}
		this.container = A
	},
	parseMargins : function(B) {
		var C = B.split(" ");
		var A = C.length;
		if (A == 1) {
			C[1] = C[0];
			C[2] = C[0];
			C[3] = C[0]
		}
		if (A == 2) {
			C[2] = C[0];
			C[3] = C[1]
		}
		return {
			top : parseInt(C[0], 10) || 0,
			right : parseInt(C[1], 10) || 0,
			bottom : parseInt(C[2], 10) || 0,
			left : parseInt(C[3], 10) || 0
		}
	},
	destroy : Ext.emptyFn
};
Ext.Container.LAYOUTS["auto"] = Ext.layout.ContainerLayout;
Ext.layout.FitLayout = Ext.extend(Ext.layout.ContainerLayout, {
	monitorResize : true,
	onLayout : function(A, B) {
		Ext.layout.FitLayout.superclass.onLayout.call(this, A, B);
		if (!this.container.collapsed) {
			this.setItemSize(this.activeItem || A.items.itemAt(0), B
					.getStyleSize())
		}
	},
	setItemSize : function(B, A) {
		if (B && A.height > 0) {
			B.setSize(A)
		}
	}
});
Ext.Container.LAYOUTS["fit"] = Ext.layout.FitLayout;
Ext.layout.CardLayout = Ext.extend(Ext.layout.FitLayout, {
	deferredRender : false,
	renderHidden : true,
	setActiveItem : function(A) {
		A = this.container.getComponent(A);
		if (this.activeItem != A) {
			if (this.activeItem) {
				this.activeItem.hide()
			}
			this.activeItem = A;
			A.show();
			this.layout()
		}
	},
	renderAll : function(A, B) {
		if (this.deferredRender) {
			this.renderItem(this.activeItem, undefined, B)
		} else {
			Ext.layout.CardLayout.superclass.renderAll.call(this, A, B)
		}
	}
});
Ext.Container.LAYOUTS["card"] = Ext.layout.CardLayout;
Ext.layout.AnchorLayout = Ext.extend(Ext.layout.ContainerLayout,
		{
			monitorResize : true,
			getAnchorViewSize : function(A, B) {
				return B.dom == document.body ? B.getViewSize() : B
						.getStyleSize()
			},
			onLayout : function(F, I) {
				Ext.layout.AnchorLayout.superclass.onLayout.call(this, F, I);
				var O = this.getAnchorViewSize(F, I);
				var M = O.width, E = O.height;
				if (M < 20 || E < 20) {
					return
				}
				var B, K;
				if (F.anchorSize) {
					if (typeof F.anchorSize == "number") {
						B = F.anchorSize
					} else {
						B = F.anchorSize.width;
						K = F.anchorSize.height
					}
				} else {
					B = F.initialConfig.width;
					K = F.initialConfig.height
				}
				var H = F.items.items, G = H.length, D, J, L, C, A;
				for (D = 0; D < G; D++) {
					J = H[D];
					if (J.anchor) {
						L = J.anchorSpec;
						if (!L) {
							var N = J.anchor.split(" ");
							J.anchorSpec = L = {
								right : this.parseAnchor(N[0],
										J.initialConfig.width, B),
								bottom : this.parseAnchor(N[1],
										J.initialConfig.height, K)
							}
						}
						C = L.right ? this.adjustWidthAnchor(L.right(M), J)
								: undefined;
						A = L.bottom ? this.adjustHeightAnchor(L.bottom(E), J)
								: undefined;
						if (C || A) {
							J.setSize(C || undefined, A || undefined)
						}
					}
				}
			},
			parseAnchor : function(B, F, A) {
				if (B && B != "none") {
					var D;
					if (/^(r|right|b|bottom)$/i.test(B)) {
						var E = A - F;
						return function(G) {
							if (G !== D) {
								D = G;
								return G - E
							}
						}
					} else {
						if (B.indexOf("%") != -1) {
							var C = parseFloat(B.replace("%", "")) * 0.01;
							return function(G) {
								if (G !== D) {
									D = G;
									return Math.floor(G * C)
								}
							}
						} else {
							B = parseInt(B, 10);
							if (!isNaN(B)) {
								return function(G) {
									if (G !== D) {
										D = G;
										return G + B
									}
								}
							}
						}
					}
				}
				return false
			},
			adjustWidthAnchor : function(B, A) {
				return B
			},
			adjustHeightAnchor : function(B, A) {
				return B
			}
		});
Ext.Container.LAYOUTS["anchor"] = Ext.layout.AnchorLayout;
Ext.layout.ColumnLayout = Ext.extend(Ext.layout.ContainerLayout, {
	monitorResize : true,
	extraCls : "x-column",
	scrollOffset : 0,
	isValidParent : function(B, A) {
		return B.getEl().dom.parentNode == this.innerCt.dom
	},
	onLayout : function(C, F) {
		var D = C.items.items, E = D.length, G, A;
		if (!this.innerCt) {
			F.addClass("x-column-layout-ct");
			this.innerCt = F.createChild( {
				cls : "x-column-inner"
			});
			this.innerCt.createChild( {
				cls : "x-clear"
			})
		}
		this.renderAll(C, this.innerCt);
		var J = Ext.isIE && F.dom != Ext.getBody().dom ? F.getStyleSize() : F
				.getViewSize();
		if (J.width < 1 && J.height < 1) {
			return
		}
		var H = J.width - F.getPadding("lr") - this.scrollOffset, B = J.height
				- F.getPadding("tb"), I = H;
		this.innerCt.setWidth(H);
		for (A = 0; A < E; A++) {
			G = D[A];
			if (!G.columnWidth) {
				I -= (G.getSize().width + G.getEl().getMargins("lr"))
			}
		}
		I = I < 0 ? 0 : I;
		for (A = 0; A < E; A++) {
			G = D[A];
			if (G.columnWidth) {
				G.setSize(Math.floor(G.columnWidth * I)
						- G.getEl().getMargins("lr"))
			}
		}
	}
});
Ext.Container.LAYOUTS["column"] = Ext.layout.ColumnLayout;
Ext.layout.BorderLayout = Ext
		.extend(
				Ext.layout.ContainerLayout,
				{
					monitorResize : true,
					rendered : false,
					onLayout : function(B, X) {
						var C;
						if (!this.rendered) {
							X.position();
							X.addClass("x-border-layout-ct");
							var M = B.items.items;
							C = [];
							for ( var Q = 0, R = M.length; Q < R; Q++) {
								var U = M[Q];
								var F = U.region;
								if (U.collapsed) {
									C.push(U)
								}
								U.collapsed = false;
								if (!U.rendered) {
									U.cls = U.cls ? U.cls + " x-border-panel"
											: "x-border-panel";
									U.render(X, Q)
								}
								this[F] = F != "center" && U.split ? new Ext.layout.BorderLayout.SplitRegion(
										this, U.initialConfig, F)
										: new Ext.layout.BorderLayout.Region(
												this, U.initialConfig, F);
								this[F].render(X, U)
							}
							this.rendered = true
						}
						var L = X.getViewSize();
						if (L.width < 20 || L.height < 20) {
							if (C) {
								this.restoreCollapsed = C
							}
							return
						} else {
							if (this.restoreCollapsed) {
								C = this.restoreCollapsed;
								delete this.restoreCollapsed
							}
						}
						var J = L.width, S = L.height;
						var I = J, P = S, G = 0, H = 0;
						var N = this.north, K = this.south, E = this.west, T = this.east, U = this.center;
						if (!U) {
							throw "No center region defined in BorderLayout "
									+ B.id
						}
						if (N && N.isVisible()) {
							var W = N.getSize();
							var O = N.getMargins();
							W.width = J - (O.left + O.right);
							W.x = O.left;
							W.y = O.top;
							G = W.height + W.y + O.bottom;
							P -= G;
							N.applyLayout(W)
						}
						if (K && K.isVisible()) {
							var W = K.getSize();
							var O = K.getMargins();
							W.width = J - (O.left + O.right);
							W.x = O.left;
							var V = (W.height + O.top + O.bottom);
							W.y = S - V + O.top;
							P -= V;
							K.applyLayout(W)
						}
						if (E && E.isVisible()) {
							var W = E.getSize();
							var O = E.getMargins();
							W.height = P - (O.top + O.bottom);
							W.x = O.left;
							W.y = G + O.top;
							var A = (W.width + O.left + O.right);
							H += A;
							I -= A;
							E.applyLayout(W)
						}
						if (T && T.isVisible()) {
							var W = T.getSize();
							var O = T.getMargins();
							W.height = P - (O.top + O.bottom);
							var A = (W.width + O.left + O.right);
							W.x = J - A + O.left;
							W.y = G + O.top;
							I -= A;
							T.applyLayout(W)
						}
						var O = U.getMargins();
						var D = {
							x : H + O.left,
							y : G + O.top,
							width : I - (O.left + O.right),
							height : P - (O.top + O.bottom)
						};
						U.applyLayout(D);
						if (C) {
							for ( var Q = 0, R = C.length; Q < R; Q++) {
								C[Q].collapse(false)
							}
						}
						if (Ext.isIE && Ext.isStrict) {
							X.repaint()
						}
					},
					destroy : function() {
						var B = [ "north", "south", "east", "west" ];
						for ( var A = 0; A < B.length; A++) {
							var C = this[B[A]];
							if (C && C.split) {
								C.split.destroy(true)
							}
						}
						Ext.layout.BorderLayout.superclass.destroy.call(this)
					}
				});
Ext.layout.BorderLayout.Region = function(B, A, C) {
	Ext.apply(this, A);
	this.layout = B;
	this.position = C;
	this.state = {};
	if (typeof this.margins == "string") {
		this.margins = this.layout.parseMargins(this.margins)
	}
	this.margins = Ext.applyIf(this.margins || {}, this.defaultMargins);
	if (this.collapsible) {
		if (typeof this.cmargins == "string") {
			this.cmargins = this.layout.parseMargins(this.cmargins)
		}
		if (this.collapseMode == "mini" && !this.cmargins) {
			this.cmargins = {
				left : 0,
				top : 0,
				right : 0,
				bottom : 0
			}
		} else {
			this.cmargins = Ext.applyIf(this.cmargins || {}, C == "north"
					|| C == "south" ? this.defaultNSCMargins
					: this.defaultEWCMargins)
		}
	}
};
Ext.layout.BorderLayout.Region.prototype = {
	collapsible : false,
	split : false,
	floatable : true,
	minWidth : 50,
	minHeight : 50,
	defaultMargins : {
		left : 0,
		top : 0,
		right : 0,
		bottom : 0
	},
	defaultNSCMargins : {
		left : 5,
		top : 5,
		right : 5,
		bottom : 5
	},
	defaultEWCMargins : {
		left : 5,
		top : 0,
		right : 5,
		bottom : 0
	},
	isCollapsed : false,
	render : function(B, C) {
		this.panel = C;
		C.el.enableDisplayMode();
		this.targetEl = B;
		this.el = C.el;
		var A = C.getState, D = this.position;
		C.getState = function() {
			return Ext.apply(A.call(C) || {}, this.state)
		}.createDelegate(this);
		if (D != "center") {
			C.allowQueuedExpand = false;
			C.on( {
				beforecollapse : this.beforeCollapse,
				collapse : this.onCollapse,
				beforeexpand : this.beforeExpand,
				expand : this.onExpand,
				hide : this.onHide,
				show : this.onShow,
				scope : this
			});
			if (this.collapsible) {
				C.collapseEl = "el";
				C.slideAnchor = this.getSlideAnchor()
			}
			if (C.tools && C.tools.toggle) {
				C.tools.toggle.addClass("x-tool-collapse-" + D);
				C.tools.toggle.addClassOnOver("x-tool-collapse-" + D + "-over")
			}
		}
	},
	getCollapsedEl : function() {
		if (!this.collapsedEl) {
			if (!this.toolTemplate) {
				var B = new Ext.Template(
						"<div class=\"x-tool x-tool-{id}\">&#160;</div>");
				B.disableFormats = true;
				B.compile();
				Ext.layout.BorderLayout.Region.prototype.toolTemplate = B
			}
			this.collapsedEl = this.targetEl.createChild( {
				cls : "x-layout-collapsed x-layout-collapsed-" + this.position,
				id : this.panel.id + "-xcollapsed"
			});
			this.collapsedEl.enableDisplayMode("block");
			if (this.collapseMode == "mini") {
				this.collapsedEl.addClass("x-layout-cmini-" + this.position);
				this.miniCollapsedEl = this.collapsedEl.createChild( {
					cls : "x-layout-mini x-layout-mini-" + this.position,
					html : "&#160;"
				});
				this.miniCollapsedEl.addClassOnOver("x-layout-mini-over");
				this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
				this.collapsedEl.on("click", this.onExpandClick, this, {
					stopEvent : true
				})
			} else {
				var A = this.toolTemplate.append(this.collapsedEl.dom, {
					id : "expand-" + this.position
				}, true);
				A.addClassOnOver("x-tool-expand-" + this.position + "-over");
				A.on("click", this.onExpandClick, this, {
					stopEvent : true
				});
				if (this.floatable !== false) {
					this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
					this.collapsedEl.on("click", this.collapseClick, this)
				}
			}
		}
		return this.collapsedEl
	},
	onExpandClick : function(A) {
		if (this.isSlid) {
			this.afterSlideIn();
			this.panel.expand(false)
		} else {
			this.panel.expand()
		}
	},
	onCollapseClick : function(A) {
		this.panel.collapse()
	},
	beforeCollapse : function(B, A) {
		this.lastAnim = A;
		if (this.splitEl) {
			this.splitEl.hide()
		}
		this.getCollapsedEl().show();
		this.panel.el.setStyle("z-index", 100);
		this.isCollapsed = true;
		this.layout.layout()
	},
	onCollapse : function(A) {
		this.panel.el.setStyle("z-index", 1);
		if (this.lastAnim === false || this.panel.animCollapse === false) {
			this.getCollapsedEl().dom.style.visibility = "visible"
		} else {
			this.getCollapsedEl().slideIn(this.panel.slideAnchor, {
				duration : 0.2
			})
		}
		this.state.collapsed = true;
		this.panel.saveState()
	},
	beforeExpand : function(A) {
		var B = this.getCollapsedEl();
		this.el.show();
		if (this.position == "east" || this.position == "west") {
			this.panel.setSize(undefined, B.getHeight())
		} else {
			this.panel.setSize(B.getWidth(), undefined)
		}
		B.hide();
		B.dom.style.visibility = "hidden";
		this.panel.el.setStyle("z-index", 100)
	},
	onExpand : function() {
		this.isCollapsed = false;
		if (this.splitEl) {
			this.splitEl.show()
		}
		this.layout.layout();
		this.panel.el.setStyle("z-index", 1);
		this.state.collapsed = false;
		this.panel.saveState()
	},
	collapseClick : function(A) {
		if (this.isSlid) {
			A.stopPropagation();
			this.slideIn()
		} else {
			A.stopPropagation();
			this.slideOut()
		}
	},
	onHide : function() {
		if (this.isCollapsed) {
			this.getCollapsedEl().hide()
		} else {
			if (this.splitEl) {
				this.splitEl.hide()
			}
		}
	},
	onShow : function() {
		if (this.isCollapsed) {
			this.getCollapsedEl().show()
		} else {
			if (this.splitEl) {
				this.splitEl.show()
			}
		}
	},
	isVisible : function() {
		return !this.panel.hidden
	},
	getMargins : function() {
		return this.isCollapsed && this.cmargins ? this.cmargins : this.margins
	},
	getSize : function() {
		return this.isCollapsed ? this.getCollapsedEl().getSize() : this.panel
				.getSize()
	},
	setPanel : function(A) {
		this.panel = A
	},
	getMinWidth : function() {
		return this.minWidth
	},
	getMinHeight : function() {
		return this.minHeight
	},
	applyLayoutCollapsed : function(A) {
		var B = this.getCollapsedEl();
		B.setLeftTop(A.x, A.y);
		B.setSize(A.width, A.height)
	},
	applyLayout : function(A) {
		if (this.isCollapsed) {
			this.applyLayoutCollapsed(A)
		} else {
			this.panel.setPosition(A.x, A.y);
			this.panel.setSize(A.width, A.height)
		}
	},
	beforeSlide : function() {
		this.panel.beforeEffect()
	},
	afterSlide : function() {
		this.panel.afterEffect()
	},
	initAutoHide : function() {
		if (this.autoHide !== false) {
			if (!this.autoHideHd) {
				var A = new Ext.util.DelayedTask(this.slideIn, this);
				this.autoHideHd = {
					"mouseout" : function(B) {
						if (!B.within(this.el, true)) {
							A.delay(500)
						}
					},
					"mouseover" : function(B) {
						A.cancel()
					},
					scope : this
				}
			}
			this.el.on(this.autoHideHd)
		}
	},
	clearAutoHide : function() {
		if (this.autoHide !== false) {
			this.el.un("mouseout", this.autoHideHd.mouseout);
			this.el.un("mouseover", this.autoHideHd.mouseover)
		}
	},
	clearMonitor : function() {
		Ext.getDoc().un("click", this.slideInIf, this)
	},
	slideOut : function() {
		if (this.isSlid || this.el.hasActiveFx()) {
			return
		}
		this.isSlid = true;
		var A = this.panel.tools;
		if (A && A.toggle) {
			A.toggle.hide()
		}
		this.el.show();
		if (this.position == "east" || this.position == "west") {
			this.panel.setSize(undefined, this.collapsedEl.getHeight())
		} else {
			this.panel.setSize(this.collapsedEl.getWidth(), undefined)
		}
		this.restoreLT = [ this.el.dom.style.left, this.el.dom.style.top ];
		this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
		this.el.setStyle("z-index", 102);
		if (this.animFloat !== false) {
			this.beforeSlide();
			this.el.slideIn(this.getSlideAnchor(), {
				callback : function() {
					this.afterSlide();
					this.initAutoHide();
					Ext.getDoc().on("click", this.slideInIf, this)
				},
				scope : this,
				block : true
			})
		} else {
			this.initAutoHide();
			Ext.getDoc().on("click", this.slideInIf, this)
		}
	},
	afterSlideIn : function() {
		this.clearAutoHide();
		this.isSlid = false;
		this.clearMonitor();
		this.el.setStyle("z-index", "");
		this.el.dom.style.left = this.restoreLT[0];
		this.el.dom.style.top = this.restoreLT[1];
		var A = this.panel.tools;
		if (A && A.toggle) {
			A.toggle.show()
		}
	},
	slideIn : function(A) {
		if (!this.isSlid || this.el.hasActiveFx()) {
			Ext.callback(A);
			return
		}
		this.isSlid = false;
		if (this.animFloat !== false) {
			this.beforeSlide();
			this.el.slideOut(this.getSlideAnchor(), {
				callback : function() {
					this.el.hide();
					this.afterSlide();
					this.afterSlideIn();
					Ext.callback(A)
				},
				scope : this,
				block : true
			})
		} else {
			this.el.hide();
			this.afterSlideIn()
		}
	},
	slideInIf : function(A) {
		if (!A.within(this.el)) {
			this.slideIn()
		}
	},
	anchors : {
		"west" : "left",
		"east" : "right",
		"north" : "top",
		"south" : "bottom"
	},
	sanchors : {
		"west" : "l",
		"east" : "r",
		"north" : "t",
		"south" : "b"
	},
	canchors : {
		"west" : "tl-tr",
		"east" : "tr-tl",
		"north" : "tl-bl",
		"south" : "bl-tl"
	},
	getAnchor : function() {
		return this.anchors[this.position]
	},
	getCollapseAnchor : function() {
		return this.canchors[this.position]
	},
	getSlideAnchor : function() {
		return this.sanchors[this.position]
	},
	getAlignAdj : function() {
		var A = this.cmargins;
		switch (this.position) {
		case "west":
			return [ 0, 0 ];
			break;
		case "east":
			return [ 0, 0 ];
			break;
		case "north":
			return [ 0, 0 ];
			break;
		case "south":
			return [ 0, 0 ];
			break
		}
	},
	getExpandAdj : function() {
		var B = this.collapsedEl, A = this.cmargins;
		switch (this.position) {
		case "west":
			return [ -(A.right + B.getWidth() + A.left), 0 ];
			break;
		case "east":
			return [ A.right + B.getWidth() + A.left, 0 ];
			break;
		case "north":
			return [ 0, -(A.top + A.bottom + B.getHeight()) ];
			break;
		case "south":
			return [ 0, A.top + A.bottom + B.getHeight() ];
			break
		}
	}
};
Ext.layout.BorderLayout.SplitRegion = function(B, A, C) {
	Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this, B, A,
			C);
	this.applyLayout = this.applyFns[C]
};
Ext
		.extend(
				Ext.layout.BorderLayout.SplitRegion,
				Ext.layout.BorderLayout.Region,
				{
					splitTip : "Drag to resize.",
					collapsibleSplitTip : "Drag to resize. Double click to hide.",
					useSplitTips : false,
					splitSettings : {
						north : {
							orientation : Ext.SplitBar.VERTICAL,
							placement : Ext.SplitBar.TOP,
							maxFn : "getVMaxSize",
							minProp : "minHeight",
							maxProp : "maxHeight"
						},
						south : {
							orientation : Ext.SplitBar.VERTICAL,
							placement : Ext.SplitBar.BOTTOM,
							maxFn : "getVMaxSize",
							minProp : "minHeight",
							maxProp : "maxHeight"
						},
						east : {
							orientation : Ext.SplitBar.HORIZONTAL,
							placement : Ext.SplitBar.RIGHT,
							maxFn : "getHMaxSize",
							minProp : "minWidth",
							maxProp : "maxWidth"
						},
						west : {
							orientation : Ext.SplitBar.HORIZONTAL,
							placement : Ext.SplitBar.LEFT,
							maxFn : "getHMaxSize",
							minProp : "minWidth",
							maxProp : "maxWidth"
						}
					},
					applyFns : {
						west : function(C) {
							if (this.isCollapsed) {
								return this.applyLayoutCollapsed(C)
							}
							var D = this.splitEl.dom, B = D.style;
							this.panel.setPosition(C.x, C.y);
							var A = D.offsetWidth;
							B.left = (C.x + C.width - A) + "px";
							B.top = (C.y) + "px";
							B.height = Math.max(0, C.height) + "px";
							this.panel.setSize(C.width - A, C.height)
						},
						east : function(C) {
							if (this.isCollapsed) {
								return this.applyLayoutCollapsed(C)
							}
							var D = this.splitEl.dom, B = D.style;
							var A = D.offsetWidth;
							this.panel.setPosition(C.x + A, C.y);
							B.left = (C.x) + "px";
							B.top = (C.y) + "px";
							B.height = Math.max(0, C.height) + "px";
							this.panel.setSize(C.width - A, C.height)
						},
						north : function(C) {
							if (this.isCollapsed) {
								return this.applyLayoutCollapsed(C)
							}
							var D = this.splitEl.dom, B = D.style;
							var A = D.offsetHeight;
							this.panel.setPosition(C.x, C.y);
							B.left = (C.x) + "px";
							B.top = (C.y + C.height - A) + "px";
							B.width = Math.max(0, C.width) + "px";
							this.panel.setSize(C.width, C.height - A)
						},
						south : function(C) {
							if (this.isCollapsed) {
								return this.applyLayoutCollapsed(C)
							}
							var D = this.splitEl.dom, B = D.style;
							var A = D.offsetHeight;
							this.panel.setPosition(C.x, C.y + A);
							B.left = (C.x) + "px";
							B.top = (C.y) + "px";
							B.width = Math.max(0, C.width) + "px";
							this.panel.setSize(C.width, C.height - A)
						}
					},
					render : function(A, C) {
						Ext.layout.BorderLayout.SplitRegion.superclass.render
								.call(this, A, C);
						var D = this.position;
						this.splitEl = A.createChild( {
							cls : "x-layout-split x-layout-split-" + D,
							html : "&#160;",
							id : this.panel.id + "-xsplit"
						});
						if (this.collapseMode == "mini") {
							this.miniSplitEl = this.splitEl.createChild( {
								cls : "x-layout-mini x-layout-mini-" + D,
								html : "&#160;"
							});
							this.miniSplitEl
									.addClassOnOver("x-layout-mini-over");
							this.miniSplitEl.on("click", this.onCollapseClick,
									this, {
										stopEvent : true
									})
						}
						var B = this.splitSettings[D];
						this.split = new Ext.SplitBar(this.splitEl.dom, C.el,
								B.orientation);
						this.split.placement = B.placement;
						this.split.getMaximumSize = this[B.maxFn]
								.createDelegate(this);
						this.split.minSize = this.minSize || this[B.minProp];
						this.split.on("beforeapply", this.onSplitMove, this);
						this.split.useShim = this.useShim === true;
						this.maxSize = this.maxSize || this[B.maxProp];
						if (C.hidden) {
							this.splitEl.hide()
						}
						if (this.useSplitTips) {
							this.splitEl.dom.title = this.collapsible ? this.collapsibleSplitTip
									: this.splitTip
						}
						if (this.collapsible) {
							this.splitEl.on("dblclick", this.onCollapseClick,
									this)
						}
					},
					getSize : function() {
						if (this.isCollapsed) {
							return this.collapsedEl.getSize()
						}
						var A = this.panel.getSize();
						if (this.position == "north"
								|| this.position == "south") {
							A.height += this.splitEl.dom.offsetHeight
						} else {
							A.width += this.splitEl.dom.offsetWidth
						}
						return A
					},
					getHMaxSize : function() {
						var B = this.maxSize || 10000;
						var A = this.layout.center;
						return Math.min(B, (this.el.getWidth() + A.el
								.getWidth())
								- A.getMinWidth())
					},
					getVMaxSize : function() {
						var B = this.maxSize || 10000;
						var A = this.layout.center;
						return Math.min(B, (this.el.getHeight() + A.el
								.getHeight())
								- A.getMinHeight())
					},
					onSplitMove : function(B, A) {
						var C = this.panel.getSize();
						this.lastSplitSize = A;
						if (this.position == "north"
								|| this.position == "south") {
							this.panel.setSize(C.width, A);
							this.state.height = A
						} else {
							this.panel.setSize(A, C.height);
							this.state.width = A
						}
						this.layout.layout();
						this.panel.saveState();
						return false
					},
					getSplitBar : function() {
						return this.split
					}
				});
Ext.Container.LAYOUTS["border"] = Ext.layout.BorderLayout;
Ext.layout.FormLayout = Ext
		.extend(
				Ext.layout.AnchorLayout,
				{
					labelSeparator : ":",
					getAnchorViewSize : function(A, B) {
						return A.body.getStyleSize()
					},
					setContainer : function(B) {
						Ext.layout.FormLayout.superclass.setContainer.call(
								this, B);
						if (B.labelAlign) {
							B.addClass("x-form-label-" + B.labelAlign)
						}
						if (B.hideLabels) {
							this.labelStyle = "display:none";
							this.elementStyle = "padding-left:0;";
							this.labelAdjust = 0
						} else {
							this.labelSeparator = B.labelSeparator
									|| this.labelSeparator;
							B.labelWidth = B.labelWidth || 100;
							if (typeof B.labelWidth == "number") {
								var C = (typeof B.labelPad == "number" ? B.labelPad
										: 5);
								this.labelAdjust = B.labelWidth + C;
								this.labelStyle = "width:" + B.labelWidth
										+ "px;";
								this.elementStyle = "padding-left:"
										+ (B.labelWidth + C) + "px"
							}
							if (B.labelAlign == "top") {
								this.labelStyle = "width:auto;";
								this.labelAdjust = 0;
								this.elementStyle = "padding-left:0;"
							}
						}
						if (!this.fieldTpl) {
							var A = new Ext.Template(
									"<div class=\"x-form-item {5}\" tabIndex=\"-1\">",
									"<label for=\"{0}\" style=\"{2}\" class=\"x-form-item-label\">{1}{4}</label>",
									"<div class=\"x-form-element\" id=\"x-form-el-{0}\" style=\"{3}\">",
									"</div><div class=\"{6}\"></div>", "</div>");
							A.disableFormats = true;
							A.compile();
							Ext.layout.FormLayout.prototype.fieldTpl = A
						}
					},
					renderItem : function(D, A, C) {
						if (D && !D.rendered && D.isFormField
								&& D.inputType != "hidden") {
							var B = [
									D.id,
									D.fieldLabel,
									D.labelStyle || this.labelStyle || "",
									this.elementStyle || "",
									typeof D.labelSeparator == "undefined" ? this.labelSeparator
											: D.labelSeparator,
									(D.itemCls || this.container.itemCls || "")
											+ (D.hideLabel ? " x-hide-label"
													: ""),
									D.clearCls || "x-form-clear-left" ];
							if (typeof A == "number") {
								A = C.dom.childNodes[A] || null
							}
							if (A) {
								this.fieldTpl.insertBefore(A, B)
							} else {
								this.fieldTpl.append(C, B)
							}
							D.render("x-form-el-" + D.id)
						} else {
							Ext.layout.FormLayout.superclass.renderItem.apply(
									this, arguments)
						}
					},
					adjustWidthAnchor : function(B, A) {
						return B
								- (A.isFormField ? (A.hideLabel ? 0
										: this.labelAdjust) : 0)
					},
					isValidParent : function(B, A) {
						return true
					}
				});
Ext.Container.LAYOUTS["form"] = Ext.layout.FormLayout;
Ext.layout.Accordion = Ext.extend(Ext.layout.FitLayout, {
	fill : true,
	autoWidth : true,
	titleCollapse : true,
	hideCollapseTool : false,
	collapseFirst : false,
	animate : false,
	sequence : false,
	activeOnTop : false,
	renderItem : function(A) {
		if (this.animate === false) {
			A.animCollapse = false
		}
		A.collapsible = true;
		if (this.autoWidth) {
			A.autoWidth = true
		}
		if (this.titleCollapse) {
			A.titleCollapse = true
		}
		if (this.hideCollapseTool) {
			A.hideCollapseTool = true
		}
		if (this.collapseFirst !== undefined) {
			A.collapseFirst = this.collapseFirst
		}
		if (!this.activeItem && !A.collapsed) {
			this.activeItem = A
		} else {
			if (this.activeItem) {
				A.collapsed = true
			}
		}
		Ext.layout.Accordion.superclass.renderItem.apply(this, arguments);
		A.header.addClass("x-accordion-hd");
		A.on("beforeexpand", this.beforeExpand, this)
	},
	beforeExpand : function(C, B) {
		var A = this.activeItem;
		if (A) {
			if (this.sequence) {
				delete this.activeItem;
				if (!A.collapsed) {
					A.collapse( {
						callback : function() {
							C.expand(B || true)
						},
						scope : this
					});
					return false
				}
			} else {
				A.collapse(this.animate)
			}
		}
		this.activeItem = C;
		if (this.activeOnTop) {
			C.el.dom.parentNode.insertBefore(C.el.dom,
					C.el.dom.parentNode.firstChild)
		}
		this.layout()
	},
	setItemSize : function(F, E) {
		if (this.fill && F) {
			var B = this.container.items.items;
			var D = 0;
			for ( var C = 0, A = B.length; C < A; C++) {
				var G = B[C];
				if (G != F) {
					D += (G.getSize().height - G.bwrap.getHeight())
				}
			}
			E.height -= D;
			F.setSize(E)
		}
	}
});
Ext.Container.LAYOUTS["accordion"] = Ext.layout.Accordion;
Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {
	monitorResize : false,
	setContainer : function(A) {
		Ext.layout.TableLayout.superclass.setContainer.call(this, A);
		this.currentRow = 0;
		this.currentColumn = 0;
		this.cells = []
	},
	onLayout : function(C, E) {
		var D = C.items.items, A = D.length, F, B;
		if (!this.table) {
			E.addClass("x-table-layout-ct");
			this.table = E.createChild( {
				tag : "table",
				cls : "x-table-layout",
				cellspacing : 0,
				cn : {
					tag : "tbody"
				}
			}, null, true);
			this.renderAll(C, E)
		}
	},
	getRow : function(A) {
		var B = this.table.tBodies[0].childNodes[A];
		if (!B) {
			B = document.createElement("tr");
			this.table.tBodies[0].appendChild(B)
		}
		return B
	},
	getNextCell : function(H) {
		var A = this.getNextNonSpan(this.currentColumn, this.currentRow);
		var E = this.currentColumn = A[0], D = this.currentRow = A[1];
		for ( var G = D; G < D + (H.rowspan || 1); G++) {
			if (!this.cells[G]) {
				this.cells[G] = []
			}
			for ( var C = E; C < E + (H.colspan || 1); C++) {
				this.cells[G][C] = true
			}
		}
		var F = document.createElement("td");
		if (H.cellId) {
			F.id = H.cellId
		}
		var B = "x-table-layout-cell";
		if (H.cellCls) {
			B += " " + H.cellCls
		}
		F.className = B;
		if (H.colspan) {
			F.colSpan = H.colspan
		}
		if (H.rowspan) {
			F.rowSpan = H.rowspan
		}
		this.getRow(D).appendChild(F);
		return F
	},
	getNextNonSpan : function(A, C) {
		var B = this.columns;
		while ((B && A >= B) || (this.cells[C] && this.cells[C][A])) {
			if (B && A >= B) {
				C++;
				A = 0
			} else {
				A++
			}
		}
		return [ A, C ]
	},
	renderItem : function(C, A, B) {
		if (C && !C.rendered) {
			C.render(this.getNextCell(C))
		}
	},
	isValidParent : function(B, A) {
		return true
	}
});
Ext.Container.LAYOUTS["table"] = Ext.layout.TableLayout;
Ext.layout.AbsoluteLayout = Ext.extend(Ext.layout.AnchorLayout, {
	extraCls : "x-abs-layout-item",
	isForm : false,
	setContainer : function(A) {
		Ext.layout.AbsoluteLayout.superclass.setContainer.call(this, A);
		if (A.isXType("form")) {
			this.isForm = true
		}
	},
	onLayout : function(A, B) {
		if (this.isForm) {
			A.body.position()
		} else {
			B.position()
		}
		Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, A, B)
	},
	getAnchorViewSize : function(A, B) {
		return this.isForm ? A.body.getStyleSize()
				: Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(
						this, A, B)
	},
	isValidParent : function(B, A) {
		return this.isForm ? true
				: Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this,
						B, A)
	},
	adjustWidthAnchor : function(B, A) {
		return B ? B - A.getPosition(true)[0] : B
	},
	adjustHeightAnchor : function(B, A) {
		return B ? B - A.getPosition(true)[1] : B
	}
});
Ext.Container.LAYOUTS["absolute"] = Ext.layout.AbsoluteLayout;
Ext.Viewport = Ext.extend(Ext.Container, {
	initComponent : function() {
		Ext.Viewport.superclass.initComponent.call(this);
		document.getElementsByTagName("html")[0].className += " x-viewport";
		this.el = Ext.getBody();
		this.el.setHeight = Ext.emptyFn;
		this.el.setWidth = Ext.emptyFn;
		this.el.setSize = Ext.emptyFn;
		this.el.dom.scroll = "no";
		this.allowDomMove = false;
		this.autoWidth = true;
		this.autoHeight = true;
		Ext.EventManager.onWindowResize(this.fireResize, this);
		this.renderTo = this.el
	},
	fireResize : function(A, B) {
		this.fireEvent("resize", this, A, B, A, B)
	}
});
Ext.reg("viewport", Ext.Viewport);
Ext.Panel = Ext
		.extend(
				Ext.Container,
				{
					baseCls : "x-panel",
					collapsedCls : "x-panel-collapsed",
					maskDisabled : true,
					animCollapse : Ext.enableFx,
					headerAsText : true,
					buttonAlign : "right",
					collapsed : false,
					collapseFirst : true,
					minButtonWidth : 75,
					elements : "body",
					toolTarget : "header",
					collapseEl : "bwrap",
					slideAnchor : "t",
					disabledClass : "",
					deferHeight : true,
					expandDefaults : {
						duration : 0.25
					},
					collapseDefaults : {
						duration : 0.25
					},
					initComponent : function() {
						Ext.Panel.superclass.initComponent.call(this);
						this.addEvents("bodyresize", "titlechange", "collapse",
								"expand", "beforecollapse", "beforeexpand",
								"beforeclose", "close", "activate",
								"deactivate");
						if (this.tbar) {
							this.elements += ",tbar";
							if (typeof this.tbar == "object") {
								this.topToolbar = this.tbar
							}
							delete this.tbar
						}
						if (this.bbar) {
							this.elements += ",bbar";
							if (typeof this.bbar == "object") {
								this.bottomToolbar = this.bbar
							}
							delete this.bbar
						}
						if (this.header === true) {
							this.elements += ",header";
							delete this.header
						} else {
							if (this.title && this.header !== false) {
								this.elements += ",header"
							}
						}
						if (this.footer === true) {
							this.elements += ",footer";
							delete this.footer
						}
						if (this.buttons) {
							var C = this.buttons;
							this.buttons = [];
							for ( var B = 0, A = C.length; B < A; B++) {
								if (C[B].render) {
									C[B].ownerCt = this;
									this.buttons.push(C[B])
								} else {
									this.addButton(C[B])
								}
							}
						}
						if (this.autoLoad) {
							this.on("render", this.doAutoLoad, this, {
								delay : 10
							})
						}
					},
					createElement : function(A, C) {
						if (this[A]) {
							C.appendChild(this[A].dom);
							return
						}
						if (A === "bwrap" || this.elements.indexOf(A) != -1) {
							if (this[A + "Cfg"]) {
								this[A] = Ext.fly(C).createChild(
										this[A + "Cfg"])
							} else {
								var B = document.createElement("div");
								B.className = this[A + "Cls"];
								this[A] = Ext.get(C.appendChild(B))
							}
						}
					},
					onRender : function(H, G) {
						Ext.Panel.superclass.onRender.call(this, H, G);
						this.createClasses();
						if (this.el) {
							this.el.addClass(this.baseCls);
							this.header = this.el.down("." + this.headerCls);
							this.bwrap = this.el.down("." + this.bwrapCls);
							var M = this.bwrap ? this.bwrap : this.el;
							this.tbar = M.down("." + this.tbarCls);
							this.body = M.down("." + this.bodyCls);
							this.bbar = M.down("." + this.bbarCls);
							this.footer = M.down("." + this.footerCls);
							this.fromMarkup = true
						} else {
							this.el = H.createChild( {
								id : this.id,
								cls : this.baseCls
							}, G)
						}
						var A = this.el, K = A.dom;
						if (this.cls) {
							this.el.addClass(this.cls)
						}
						if (this.buttons) {
							this.elements += ",footer"
						}
						if (this.frame) {
							A.insertHtml("afterBegin", String.format(
									Ext.Element.boxMarkup, this.baseCls));
							this.createElement("header",
									K.firstChild.firstChild.firstChild);
							this.createElement("bwrap", K);
							var O = this.bwrap.dom;
							var E = K.childNodes[1], B = K.childNodes[2];
							O.appendChild(E);
							O.appendChild(B);
							var P = O.firstChild.firstChild.firstChild;
							this.createElement("tbar", P);
							this.createElement("body", P);
							this.createElement("bbar", P);
							this.createElement("footer",
									O.lastChild.firstChild.firstChild);
							if (!this.footer) {
								this.bwrap.dom.lastChild.className += " x-panel-nofooter"
							}
						} else {
							this.createElement("header", K);
							this.createElement("bwrap", K);
							var O = this.bwrap.dom;
							this.createElement("tbar", O);
							this.createElement("body", O);
							this.createElement("bbar", O);
							this.createElement("footer", O);
							if (!this.header) {
								this.body.addClass(this.bodyCls + "-noheader");
								if (this.tbar) {
									this.tbar.addClass(this.tbarCls
											+ "-noheader")
								}
							}
						}
						if (this.border === false) {
							this.el.addClass(this.baseCls + "-noborder");
							this.body.addClass(this.bodyCls + "-noborder");
							if (this.header) {
								this.header.addClass(this.headerCls
										+ "-noborder")
							}
							if (this.footer) {
								this.footer.addClass(this.footerCls
										+ "-noborder")
							}
							if (this.tbar) {
								this.tbar.addClass(this.tbarCls + "-noborder")
							}
							if (this.bbar) {
								this.bbar.addClass(this.bbarCls + "-noborder")
							}
						}
						if (this.bodyBorder === false) {
							this.body.addClass(this.bodyCls + "-noborder")
						}
						if (this.bodyStyle) {
							this.body.applyStyles(this.bodyStyle)
						}
						this.bwrap.enableDisplayMode("block");
						if (this.header) {
							this.header.unselectable();
							if (this.headerAsText) {
								this.header.dom.innerHTML = "<span class=\""
										+ this.headerTextCls + "\">"
										+ this.header.dom.innerHTML + "</span>";
								if (this.iconCls) {
									this.setIconClass(this.iconCls)
								}
							}
						}
						if (this.floating) {
							this.makeFloating(this.floating)
						}
						if (this.collapsible) {
							this.tools = this.tools ? this.tools.slice(0) : [];
							if (!this.hideCollapseTool) {
								this.tools[this.collapseFirst ? "unshift"
										: "push"]( {
									id : "toggle",
									handler : this.toggleCollapse,
									scope : this
								})
							}
							if (this.titleCollapse && this.header) {
								this.header.on("click", this.toggleCollapse,
										this);
								this.header.setStyle("cursor", "pointer")
							}
						}
						if (this.tools) {
							var J = this.tools;
							this.tools = {};
							this.addTool.apply(this, J)
						} else {
							this.tools = {}
						}
						if (this.buttons && this.buttons.length > 0) {
							var D = this.footer
									.createChild(
											{
												cls : "x-panel-btns-ct",
												cn : {
													cls : "x-panel-btns x-panel-btns-"
															+ this.buttonAlign,
													html : "<table cellspacing=\"0\"><tbody><tr></tr></tbody></table><div class=\"x-clear\"></div>"
												}
											}, null, true);
							var L = D.getElementsByTagName("tr")[0];
							for ( var F = 0, I = this.buttons.length; F < I; F++) {
								var N = this.buttons[F];
								var C = document.createElement("td");
								C.className = "x-panel-btn-td";
								N.render(L.appendChild(C))
							}
						}
						if (this.tbar && this.topToolbar) {
							if (Ext.isArray(this.topToolbar)) {
								this.topToolbar = new Ext.Toolbar(
										this.topToolbar)
							}
							this.topToolbar.render(this.tbar);
							this.topToolbar.ownerCt = this
						}
						if (this.bbar && this.bottomToolbar) {
							if (Ext.isArray(this.bottomToolbar)) {
								this.bottomToolbar = new Ext.Toolbar(
										this.bottomToolbar)
							}
							this.bottomToolbar.render(this.bbar);
							this.bottomToolbar.ownerCt = this
						}
					},
					setIconClass : function(B) {
						var A = this.iconCls;
						this.iconCls = B;
						if (this.rendered && this.header) {
							if (this.frame) {
								this.header.addClass("x-panel-icon");
								this.header.replaceClass(A, this.iconCls)
							} else {
								var D = this.header.dom;
								var C = D.firstChild
										&& String(D.firstChild.tagName)
												.toLowerCase() == "img" ? D.firstChild
										: null;
								if (C) {
									Ext.fly(C).replaceClass(A, this.iconCls)
								} else {
									Ext.DomHelper.insertBefore(D.firstChild, {
										tag : "img",
										src : Ext.BLANK_IMAGE_URL,
										cls : "x-panel-inline-icon "
												+ this.iconCls
									})
								}
							}
						}
					},
					makeFloating : function(A) {
						this.floating = true;
						this.el = new Ext.Layer(typeof A == "object" ? A : {
							shadow : this.shadow !== undefined ? this.shadow
									: "sides",
							shadowOffset : this.shadowOffset,
							constrain : false,
							shim : this.shim === false ? false : undefined
						}, this.el)
					},
					getTopToolbar : function() {
						return this.topToolbar
					},
					getBottomToolbar : function() {
						return this.bottomToolbar
					},
					addButton : function(A, D, C) {
						var E = {
							handler : D,
							scope : C,
							minWidth : this.minButtonWidth,
							hideParent : true
						};
						if (typeof A == "string") {
							E.text = A
						} else {
							Ext.apply(E, A)
						}
						var B = new Ext.Button(E);
						B.ownerCt = this;
						if (!this.buttons) {
							this.buttons = []
						}
						this.buttons.push(B);
						return B
					},
					addTool : function() {
						if (!this[this.toolTarget]) {
							return
						}
						if (!this.toolTemplate) {
							var F = new Ext.Template(
									"<div class=\"x-tool x-tool-{id}\">&#160;</div>");
							F.disableFormats = true;
							F.compile();
							Ext.Panel.prototype.toolTemplate = F
						}
						for ( var E = 0, C = arguments, B = C.length; E < B; E++) {
							var A = C[E], G = "x-tool-" + A.id + "-over";
							var D = this.toolTemplate
									.insertFirst(
											(A.align !== "left") ? this[this.toolTarget]
													: this[this.toolTarget]
															.child("span"), A,
											true);
							this.tools[A.id] = D;
							D.enableDisplayMode("block");
							D
									.on("click", this.createToolHandler(D, A,
											G, this));
							if (A.on) {
								D.on(A.on)
							}
							if (A.hidden) {
								D.hide()
							}
							if (A.qtip) {
								if (typeof A.qtip == "object") {
									Ext.QuickTips.register(Ext.apply( {
										target : D.id
									}, A.qtip))
								} else {
									D.dom.qtip = A.qtip
								}
							}
							D.addClassOnOver(G)
						}
					},
					onShow : function() {
						if (this.floating) {
							return this.el.show()
						}
						Ext.Panel.superclass.onShow.call(this)
					},
					onHide : function() {
						if (this.floating) {
							return this.el.hide()
						}
						Ext.Panel.superclass.onHide.call(this)
					},
					createToolHandler : function(C, A, D, B) {
						return function(E) {
							C.removeClass(D);
							E.stopEvent();
							if (A.handler) {
								A.handler.call(A.scope || C, E, C, B)
							}
						}
					},
					afterRender : function() {
						if (this.fromMarkup && this.height === undefined
								&& !this.autoHeight) {
							this.height = this.el.getHeight()
						}
						if (this.floating && !this.hidden && !this.initHidden) {
							this.el.show()
						}
						if (this.title) {
							this.setTitle(this.title)
						}
						this.setAutoScroll();
						if (this.html) {
							this.body
									.update(typeof this.html == "object" ? Ext.DomHelper
											.markup(this.html)
											: this.html);
							delete this.html
						}
						if (this.contentEl) {
							var A = Ext.getDom(this.contentEl);
							Ext.fly(A).removeClass(
									[ "x-hidden", "x-hide-display" ]);
							this.body.dom.appendChild(A)
						}
						if (this.collapsed) {
							this.collapsed = false;
							this.collapse(false)
						}
						Ext.Panel.superclass.afterRender.call(this);
						this.initEvents()
					},
					setAutoScroll : function() {
						if (this.rendered && this.autoScroll) {
							var A = this.body || this.el;
							if (A) {
								A.setOverflow("auto")
							}
						}
					},
					getKeyMap : function() {
						if (!this.keyMap) {
							this.keyMap = new Ext.KeyMap(this.el, this.keys)
						}
						return this.keyMap
					},
					initEvents : function() {
						if (this.keys) {
							this.getKeyMap()
						}
						if (this.draggable) {
							this.initDraggable()
						}
					},
					initDraggable : function() {
						this.dd = new Ext.Panel.DD(this,
								typeof this.draggable == "boolean" ? null
										: this.draggable)
					},
					beforeEffect : function() {
						if (this.floating) {
							this.el.beforeAction()
						}
						this.el.addClass("x-panel-animated")
					},
					afterEffect : function() {
						this.syncShadow();
						this.el.removeClass("x-panel-animated")
					},
					createEffect : function(B, A, C) {
						var D = {
							scope : C,
							block : true
						};
						if (B === true) {
							D.callback = A;
							return D
						} else {
							if (!B.callback) {
								D.callback = A
							} else {
								D.callback = function() {
									A.call(C);
									Ext.callback(B.callback, B.scope)
								}
							}
						}
						return Ext.applyIf(D, B)
					},
					collapse : function(B) {
						if (this.collapsed
								|| this.el.hasFxBlock()
								|| this.fireEvent("beforecollapse", this, B) === false) {
							return
						}
						var A = B === true
								|| (B !== false && this.animCollapse);
						this.beforeEffect();
						this.onCollapse(A, B);
						return this
					},
					onCollapse : function(A, B) {
						if (A) {
							this[this.collapseEl].slideOut(this.slideAnchor,
									Ext.apply(this.createEffect(B || true,
											this.afterCollapse, this),
											this.collapseDefaults))
						} else {
							this[this.collapseEl].hide();
							this.afterCollapse()
						}
					},
					afterCollapse : function() {
						this.collapsed = true;
						this.el.addClass(this.collapsedCls);
						this.afterEffect();
						this.fireEvent("collapse", this)
					},
					expand : function(B) {
						if (!this.collapsed
								|| this.el.hasFxBlock()
								|| this.fireEvent("beforeexpand", this, B) === false) {
							return
						}
						var A = B === true
								|| (B !== false && this.animCollapse);
						this.el.removeClass(this.collapsedCls);
						this.beforeEffect();
						this.onExpand(A, B);
						return this
					},
					onExpand : function(A, B) {
						if (A) {
							this[this.collapseEl].slideIn(this.slideAnchor, Ext
									.apply(this.createEffect(B || true,
											this.afterExpand, this),
											this.expandDefaults))
						} else {
							this[this.collapseEl].show();
							this.afterExpand()
						}
					},
					afterExpand : function() {
						this.collapsed = false;
						this.afterEffect();
						this.fireEvent("expand", this)
					},
					toggleCollapse : function(A) {
						this[this.collapsed ? "expand" : "collapse"](A);
						return this
					},
					onDisable : function() {
						if (this.rendered && this.maskDisabled) {
							this.el.mask()
						}
						Ext.Panel.superclass.onDisable.call(this)
					},
					onEnable : function() {
						if (this.rendered && this.maskDisabled) {
							this.el.unmask()
						}
						Ext.Panel.superclass.onEnable.call(this)
					},
					onResize : function(A, B) {
						if (A !== undefined || B !== undefined) {
							if (!this.collapsed) {
								if (typeof A == "number") {
									this.body.setWidth(this.adjustBodyWidth(A
											- this.getFrameWidth()))
								} else {
									if (A == "auto") {
										this.body.setWidth(A)
									}
								}
								if (typeof B == "number") {
									this.body.setHeight(this.adjustBodyHeight(B
											- this.getFrameHeight()))
								} else {
									if (B == "auto") {
										this.body.setHeight(B)
									}
								}
								if (this.disabled && this.el._mask) {
									this.el._mask.setSize(
											this.el.dom.clientWidth, this.el
													.getHeight())
								}
							} else {
								this.queuedBodySize = {
									width : A,
									height : B
								};
								if (!this.queuedExpand
										&& this.allowQueuedExpand !== false) {
									this.queuedExpand = true;
									this.on("expand", function() {
										delete this.queuedExpand;
										this.onResize(
												this.queuedBodySize.width,
												this.queuedBodySize.height);
										this.doLayout()
									}, this, {
										single : true
									})
								}
							}
							this.fireEvent("bodyresize", this, A, B)
						}
						this.syncShadow()
					},
					adjustBodyHeight : function(A) {
						return A
					},
					adjustBodyWidth : function(A) {
						return A
					},
					onPosition : function() {
						this.syncShadow()
					},
					getFrameWidth : function() {
						var B = this.el.getFrameWidth("lr");
						if (this.frame) {
							var A = this.bwrap.dom.firstChild;
							B += (Ext.fly(A).getFrameWidth("l") + Ext.fly(
									A.firstChild).getFrameWidth("r"));
							var C = this.bwrap.dom.firstChild.firstChild.firstChild;
							B += Ext.fly(C).getFrameWidth("lr")
						}
						return B
					},
					getFrameHeight : function() {
						var A = this.el.getFrameWidth("tb");
						A += (this.tbar ? this.tbar.getHeight() : 0)
								+ (this.bbar ? this.bbar.getHeight() : 0);
						if (this.frame) {
							var C = this.el.dom.firstChild;
							var D = this.bwrap.dom.lastChild;
							A += (C.offsetHeight + D.offsetHeight);
							var B = this.bwrap.dom.firstChild.firstChild.firstChild;
							A += Ext.fly(B).getFrameWidth("tb")
						} else {
							A += (this.header ? this.header.getHeight() : 0)
									+ (this.footer ? this.footer.getHeight()
											: 0)
						}
						return A
					},
					getInnerWidth : function() {
						return this.getSize().width - this.getFrameWidth()
					},
					getInnerHeight : function() {
						return this.getSize().height - this.getFrameHeight()
					},
					syncShadow : function() {
						if (this.floating) {
							this.el.sync(true)
						}
					},
					getLayoutTarget : function() {
						return this.body
					},
					setTitle : function(B, A) {
						this.title = B;
						if (this.header && this.headerAsText) {
							this.header.child("span").update(B)
						}
						if (A) {
							this.setIconClass(A)
						}
						this.fireEvent("titlechange", this, B);
						return this
					},
					getUpdater : function() {
						return this.body.getUpdater()
					},
					load : function() {
						var A = this.body.getUpdater();
						A.update.apply(A, arguments);
						return this
					},
					beforeDestroy : function() {
						Ext.Element.uncache(this.header, this.tbar, this.bbar,
								this.footer, this.body);
						if (this.tools) {
							for ( var B in this.tools) {
								Ext.destroy(this.tools[B])
							}
						}
						if (this.buttons) {
							for ( var A in this.buttons) {
								Ext.destroy(this.buttons[A])
							}
						}
						Ext.destroy(this.topToolbar, this.bottomToolbar);
						Ext.Panel.superclass.beforeDestroy.call(this)
					},
					createClasses : function() {
						this.headerCls = this.baseCls + "-header";
						this.headerTextCls = this.baseCls + "-header-text";
						this.bwrapCls = this.baseCls + "-bwrap";
						this.tbarCls = this.baseCls + "-tbar";
						this.bodyCls = this.baseCls + "-body";
						this.bbarCls = this.baseCls + "-bbar";
						this.footerCls = this.baseCls + "-footer"
					},
					createGhost : function(A, E, B) {
						var D = document.createElement("div");
						D.className = "x-panel-ghost " + (A ? A : "");
						if (this.header) {
							D.appendChild(this.el.dom.firstChild
									.cloneNode(true))
						}
						Ext.fly(D.appendChild(document.createElement("ul")))
								.setHeight(this.bwrap.getHeight());
						D.style.width = this.el.dom.offsetWidth + "px";
						if (!B) {
							this.container.dom.appendChild(D)
						} else {
							Ext.getDom(B).appendChild(D)
						}
						if (E !== false && this.el.useShim !== false) {
							var C = new Ext.Layer( {
								shadow : false,
								useDisplay : true,
								constrain : false
							}, D);
							C.show();
							return C
						} else {
							return new Ext.Element(D)
						}
					},
					doAutoLoad : function() {
						this.body
								.load(typeof this.autoLoad == "object" ? this.autoLoad
										: {
											url : this.autoLoad
										})
					}
				});
Ext.reg("panel", Ext.Panel);
Ext.Window = Ext.extend(Ext.Panel, {
	baseCls : "x-window",
	resizable : true,
	draggable : true,
	closable : true,
	constrain : false,
	constrainHeader : false,
	plain : false,
	minimizable : false,
	maximizable : false,
	minHeight : 100,
	minWidth : 200,
	expandOnShow : true,
	closeAction : "close",
	elements : "header,body",
	collapsible : false,
	initHidden : true,
	monitorResize : true,
	frame : true,
	floating : true,
	initComponent : function() {
		Ext.Window.superclass.initComponent.call(this);
		this.addEvents("resize", "maximize", "minimize", "restore")
	},
	getState : function() {
		return Ext.apply(Ext.Window.superclass.getState.call(this) || {}, this
				.getBox())
	},
	onRender : function(B, A) {
		Ext.Window.superclass.onRender.call(this, B, A);
		if (this.plain) {
			this.el.addClass("x-window-plain")
		}
		this.focusEl = this.el.createChild( {
			tag : "a",
			href : "#",
			cls : "x-dlg-focus",
			tabIndex : "-1",
			html : "&#160;"
		});
		this.focusEl.swallowEvent("click", true);
		this.proxy = this.el.createProxy("x-window-proxy");
		this.proxy.enableDisplayMode("block");
		if (this.modal) {
			this.mask = this.container.createChild( {
				cls : "ext-el-mask"
			}, this.el.dom);
			this.mask.enableDisplayMode("block");
			this.mask.hide()
		}
	},
	initEvents : function() {
		Ext.Window.superclass.initEvents.call(this);
		if (this.animateTarget) {
			this.setAnimateTarget(this.animateTarget)
		}
		if (this.resizable) {
			this.resizer = new Ext.Resizable(this.el, {
				minWidth : this.minWidth,
				minHeight : this.minHeight,
				handles : this.resizeHandles || "all",
				pinned : true,
				resizeElement : this.resizerAction
			});
			this.resizer.window = this;
			this.resizer.on("beforeresize", this.beforeResize, this)
		}
		if (this.draggable) {
			this.header.addClass("x-window-draggable")
		}
		this.initTools();
		this.el.on("mousedown", this.toFront, this);
		this.manager = this.manager || Ext.WindowMgr;
		this.manager.register(this);
		this.hidden = true;
		if (this.maximized) {
			this.maximized = false;
			this.maximize()
		}
		if (this.closable) {
			var A = this.getKeyMap();
			A.on(27, this.onEsc, this);
			A.disable()
		}
	},
	initDraggable : function() {
		this.dd = new Ext.Window.DD(this)
	},
	onEsc : function() {
		this[this.closeAction]()
	},
	beforeDestroy : function() {
		Ext.destroy(this.resizer, this.dd, this.proxy, this.mask);
		Ext.Window.superclass.beforeDestroy.call(this)
	},
	onDestroy : function() {
		if (this.manager) {
			this.manager.unregister(this)
		}
		Ext.Window.superclass.onDestroy.call(this)
	},
	initTools : function() {
		if (this.minimizable) {
			this.addTool( {
				id : "minimize",
				handler : this.minimize.createDelegate(this, [])
			})
		}
		if (this.maximizable) {
			this.addTool( {
				id : "maximize",
				handler : this.maximize.createDelegate(this, [])
			});
			this.addTool( {
				id : "restore",
				handler : this.restore.createDelegate(this, []),
				hidden : true
			});
			this.header.on("dblclick", this.toggleMaximize, this)
		}
		if (this.closable) {
			this.addTool( {
				id : "close",
				handler : this[this.closeAction].createDelegate(this, [])
			})
		}
	},
	resizerAction : function() {
		var A = this.proxy.getBox();
		this.proxy.hide();
		this.window.handleResize(A);
		return A
	},
	beforeResize : function() {
		this.resizer.minHeight = Math.max(this.minHeight,
				this.getFrameHeight() + 40);
		this.resizer.minWidth = Math.max(this.minWidth,
				this.getFrameWidth() + 40);
		this.resizeBox = this.el.getBox()
	},
	updateHandles : function() {
		if (Ext.isIE && this.resizer) {
			this.resizer.syncHandleHeight();
			this.el.repaint()
		}
	},
	handleResize : function(B) {
		var A = this.resizeBox;
		if (A.x != B.x || A.y != B.y) {
			this.updateBox(B)
		} else {
			this.setSize(B)
		}
		this.focus();
		this.updateHandles();
		this.saveState();
		if (this.layout) {
			this.doLayout()
		}
		this.fireEvent("resize", this, B.width, B.height)
	},
	focus : function() {
		var C = this.focusEl, A = this.defaultButton, B = typeof A;
		if (B != "undefined") {
			if (B == "number") {
				C = this.buttons[A]
			} else {
				if (B == "string") {
					C = Ext.getCmp(A)
				} else {
					C = A
				}
			}
		}
		C.focus.defer(10, C)
	},
	setAnimateTarget : function(A) {
		A = Ext.get(A);
		this.animateTarget = A
	},
	beforeShow : function() {
		delete this.el.lastXY;
		delete this.el.lastLT;
		if (this.x === undefined || this.y === undefined) {
			var A = this.el.getAlignToXY(this.container, "c-c");
			var B = this.el.translatePoints(A[0], A[1]);
			this.x = this.x === undefined ? B.left : this.x;
			this.y = this.y === undefined ? B.top : this.y
		}
		this.el.setLeftTop(this.x, this.y);
		if (this.expandOnShow) {
			this.expand(false)
		}
		if (this.modal) {
			Ext.getBody().addClass("x-body-masked");
			this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom
					.getViewHeight(true));
			this.mask.show()
		}
	},
	show : function(C, A, B) {
		if (!this.rendered) {
			this.render(Ext.getBody())
		}
		if (this.hidden === false) {
			this.toFront();
			return
		}
		if (this.fireEvent("beforeshow", this) === false) {
			return
		}
		if (A) {
			this.on("show", A, B, {
				single : true
			})
		}
		this.hidden = false;
		if (C !== undefined) {
			this.setAnimateTarget(C)
		}
		this.beforeShow();
		if (this.animateTarget) {
			this.animShow()
		} else {
			this.afterShow()
		}
	},
	afterShow : function() {
		this.proxy.hide();
		this.el.setStyle("display", "block");
		this.el.show();
		if (this.maximized) {
			this.fitContainer()
		}
		if (Ext.isMac && Ext.isGecko) {
			this.cascade(this.setAutoScroll)
		}
		if (this.monitorResize || this.modal || this.constrain
				|| this.constrainHeader) {
			Ext.EventManager.onWindowResize(this.onWindowResize, this)
		}
		this.doConstrain();
		if (this.layout) {
			this.doLayout()
		}
		if (this.keyMap) {
			this.keyMap.enable()
		}
		this.toFront();
		this.updateHandles();
		this.fireEvent("show", this)
	},
	animShow : function() {
		this.proxy.show();
		this.proxy.setBox(this.animateTarget.getBox());
		this.proxy.setOpacity(0);
		var A = this.getBox(false);
		A.callback = this.afterShow;
		A.scope = this;
		A.duration = 0.25;
		A.easing = "easeNone";
		A.opacity = 0.5;
		A.block = true;
		this.el.setStyle("display", "none");
		this.proxy.shift(A)
	},
	hide : function(C, A, B) {
		if (this.activeGhost) {
			this.hide.defer(100, this, [ C, A, B ]);
			return
		}
		if (this.hidden || this.fireEvent("beforehide", this) === false) {
			return
		}
		if (A) {
			this.on("hide", A, B, {
				single : true
			})
		}
		this.hidden = true;
		if (C !== undefined) {
			this.setAnimateTarget(C)
		}
		if (this.animateTarget) {
			this.animHide()
		} else {
			this.el.hide();
			this.afterHide()
		}
	},
	afterHide : function() {
		this.proxy.hide();
		if (this.monitorResize || this.modal || this.constrain
				|| this.constrainHeader) {
			Ext.EventManager.removeResizeListener(this.onWindowResize, this)
		}
		if (this.modal) {
			this.mask.hide();
			Ext.getBody().removeClass("x-body-masked")
		}
		if (this.keyMap) {
			this.keyMap.disable()
		}
		this.fireEvent("hide", this)
	},
	animHide : function() {
		this.proxy.setOpacity(0.5);
		this.proxy.show();
		var B = this.getBox(false);
		this.proxy.setBox(B);
		this.el.hide();
		var A = this.animateTarget.getBox();
		A.callback = this.afterHide;
		A.scope = this;
		A.duration = 0.25;
		A.easing = "easeNone";
		A.block = true;
		A.opacity = 0;
		this.proxy.shift(A)
	},
	onWindowResize : function() {
		if (this.maximized) {
			this.fitContainer()
		}
		if (this.modal) {
			this.mask.setSize("100%", "100%");
			var A = this.mask.dom.offsetHeight;
			this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom
					.getViewHeight(true))
		}
		this.doConstrain()
	},
	doConstrain : function() {
		if (this.constrain || this.constrainHeader) {
			var B;
			if (this.constrain) {
				B = {
					right : this.el.shadowOffset,
					left : this.el.shadowOffset,
					bottom : this.el.shadowOffset
				}
			} else {
				var A = this.getSize();
				B = {
					right : -(A.width - 100),
					bottom : -(A.height - 25)
				}
			}
			var C = this.el.getConstrainToXY(this.container, true, B);
			if (C) {
				this.setPosition(C[0], C[1])
			}
		}
	},
	ghost : function(A) {
		var C = this.createGhost(A);
		var B = this.getBox(true);
		C.setLeftTop(B.x, B.y);
		C.setWidth(B.width);
		this.el.hide();
		this.activeGhost = C;
		return C
	},
	unghost : function(B, A) {
		if (B !== false) {
			this.el.show();
			this.focus();
			if (Ext.isMac && Ext.isGecko) {
				this.cascade(this.setAutoScroll)
			}
		}
		if (A !== false) {
			this.setPosition(this.activeGhost.getLeft(true), this.activeGhost
					.getTop(true))
		}
		this.activeGhost.hide();
		this.activeGhost.remove();
		delete this.activeGhost
	},
	minimize : function() {
		this.fireEvent("minimize", this)
	},
	close : function() {
		if (this.fireEvent("beforeclose", this) !== false) {
			this.hide(null, function() {
				this.fireEvent("close", this);
				this.destroy()
			}, this)
		}
	},
	maximize : function() {
		if (!this.maximized) {
			this.expand(false);
			this.restoreSize = this.getSize();
			this.restorePos = this.getPosition(true);
			if (this.maximizable) {
				this.tools.maximize.hide();
				this.tools.restore.show()
			}
			this.maximized = true;
			this.el.disableShadow();
			if (this.dd) {
				this.dd.lock()
			}
			if (this.collapsible) {
				this.tools.toggle.hide()
			}
			this.el.addClass("x-window-maximized");
			this.container.addClass("x-window-maximized-ct");
			this.setPosition(0, 0);
			this.fitContainer();
			this.fireEvent("maximize", this)
		}
	},
	restore : function() {
		if (this.maximized) {
			this.el.removeClass("x-window-maximized");
			this.tools.restore.hide();
			this.tools.maximize.show();
			this.setPosition(this.restorePos[0], this.restorePos[1]);
			this.setSize(this.restoreSize.width, this.restoreSize.height);
			delete this.restorePos;
			delete this.restoreSize;
			this.maximized = false;
			this.el.enableShadow(true);
			if (this.dd) {
				this.dd.unlock()
			}
			if (this.collapsible) {
				this.tools.toggle.show()
			}
			this.container.removeClass("x-window-maximized-ct");
			this.doConstrain();
			this.fireEvent("restore", this)
		}
	},
	toggleMaximize : function() {
		this[this.maximized ? "restore" : "maximize"]()
	},
	fitContainer : function() {
		var A = this.container.getViewSize();
		this.setSize(A.width, A.height)
	},
	setZIndex : function(A) {
		if (this.modal) {
			this.mask.setStyle("z-index", A)
		}
		this.el.setZIndex(++A);
		A += 5;
		if (this.resizer) {
			this.resizer.proxy.setStyle("z-index", ++A)
		}
		this.lastZIndex = A
	},
	alignTo : function(B, A, C) {
		var D = this.el.getAlignToXY(B, A, C);
		this.setPagePosition(D[0], D[1]);
		return this
	},
	anchorTo : function(C, G, D, B, F) {
		var E = function() {
			this.alignTo(C, G, D)
		};
		Ext.EventManager.onWindowResize(E, this);
		var A = typeof B;
		if (A != "undefined") {
			Ext.EventManager.on(window, "scroll", E, this, {
				buffer : A == "number" ? B : 50
			})
		}
		E.call(this);
		this[F] = E;
		return this
	},
	toFront : function() {
		if (this.manager.bringToFront(this)) {
			this.focus()
		}
		return this
	},
	setActive : function(A) {
		if (A) {
			if (!this.maximized) {
				this.el.enableShadow(true)
			}
			this.fireEvent("activate", this)
		} else {
			this.el.disableShadow();
			this.fireEvent("deactivate", this)
		}
	},
	toBack : function() {
		this.manager.sendToBack(this);
		return this
	},
	center : function() {
		var A = this.el.getAlignToXY(this.container, "c-c");
		this.setPagePosition(A[0], A[1]);
		return this
	}
});
Ext.reg("window", Ext.Window);
Ext.Window.DD = function(A) {
	this.win = A;
	Ext.Window.DD.superclass.constructor
			.call(this, A.el.id, "WindowDD-" + A.id);
	this.setHandleElId(A.header.id);
	this.scroll = false
};
Ext.extend(Ext.Window.DD, Ext.dd.DD, {
	moveOnly : true,
	headerOffsets : [ 100, 25 ],
	startDrag : function() {
		var A = this.win;
		this.proxy = A.ghost();
		if (A.constrain !== false) {
			var C = A.el.shadowOffset;
			this.constrainTo(A.container, {
				right : C,
				left : C,
				bottom : C
			})
		} else {
			if (A.constrainHeader !== false) {
				var B = this.proxy.getSize();
				this.constrainTo(A.container, {
					right : -(B.width - this.headerOffsets[0]),
					bottom : -(B.height - this.headerOffsets[1])
				})
			}
		}
	},
	b4Drag : Ext.emptyFn,
	onDrag : function(A) {
		this.alignElWithMouse(this.proxy, A.getPageX(), A.getPageY())
	},
	endDrag : function(A) {
		this.win.unghost();
		this.win.saveState()
	}
});
Ext.WindowGroup = function() {
	var F = {};
	var D = [];
	var E = null;
	var C = function(I, H) {
		return (!I._lastAccess || I._lastAccess < H._lastAccess) ? -1 : 1
	};
	var G = function() {
		var J = D, H = J.length;
		if (H > 0) {
			J.sort(C);
			var I = J[0].manager.zseed;
			for ( var K = 0; K < H; K++) {
				var L = J[K];
				if (L && !L.hidden) {
					L.setZIndex(I + (K * 10))
				}
			}
		}
		A()
	};
	var B = function(H) {
		if (H != E) {
			if (E) {
				E.setActive(false)
			}
			E = H;
			if (H) {
				H.setActive(true)
			}
		}
	};
	var A = function() {
		for ( var H = D.length - 1; H >= 0; --H) {
			if (!D[H].hidden) {
				B(D[H]);
				return
			}
		}
		B(null)
	};
	return {
		zseed : 9000,
		register : function(H) {
			F[H.id] = H;
			D.push(H);
			H.on("hide", A)
		},
		unregister : function(H) {
			delete F[H.id];
			H.un("hide", A);
			D.remove(H)
		},
		get : function(H) {
			return typeof H == "object" ? H : F[H]
		},
		bringToFront : function(H) {
			H = this.get(H);
			if (H != E) {
				H._lastAccess = new Date().getTime();
				G();
				return true
			}
			return false
		},
		sendToBack : function(H) {
			H = this.get(H);
			H._lastAccess = -(new Date().getTime());
			G();
			return H
		},
		hideAll : function() {
			for ( var H in F) {
				if (F[H] && typeof F[H] != "function" && F[H].isVisible()) {
					F[H].hide()
				}
			}
		},
		getActive : function() {
			return E
		},
		getBy : function(J, I) {
			var K = [];
			for ( var H = D.length - 1; H >= 0; --H) {
				var L = D[H];
				if (J.call(I || L, L) !== false) {
					K.push(L)
				}
			}
			return K
		},
		each : function(I, H) {
			for ( var J in F) {
				if (F[J] && typeof F[J] != "function") {
					if (I.call(H || F[J], F[J]) === false) {
						return
					}
				}
			}
		}
	}
};
Ext.WindowMgr = new Ext.WindowGroup();
Ext.dd.PanelProxy = function(A, B) {
	this.panel = A;
	this.id = this.panel.id + "-ddproxy";
	Ext.apply(this, B)
};
Ext.dd.PanelProxy.prototype = {
	insertProxy : true,
	setStatus : Ext.emptyFn,
	reset : Ext.emptyFn,
	update : Ext.emptyFn,
	stop : Ext.emptyFn,
	sync : Ext.emptyFn,
	getEl : function() {
		return this.ghost
	},
	getGhost : function() {
		return this.ghost
	},
	getProxy : function() {
		return this.proxy
	},
	hide : function() {
		if (this.ghost) {
			if (this.proxy) {
				this.proxy.remove();
				delete this.proxy
			}
			this.panel.el.dom.style.display = "";
			this.ghost.remove();
			delete this.ghost
		}
	},
	show : function() {
		if (!this.ghost) {
			this.ghost = this.panel.createGhost(undefined, undefined, Ext
					.getBody());
			this.ghost.setXY(this.panel.el.getXY());
			if (this.insertProxy) {
				this.proxy = this.panel.el.insertSibling( {
					cls : "x-panel-dd-spacer"
				});
				this.proxy.setSize(this.panel.getSize())
			}
			this.panel.el.dom.style.display = "none"
		}
	},
	repair : function(B, C, A) {
		this.hide();
		if (typeof C == "function") {
			C.call(A || this)
		}
	},
	moveProxy : function(A, B) {
		if (this.proxy) {
			A.insertBefore(this.proxy.dom, B)
		}
	}
};
Ext.Panel.DD = function(B, A) {
	this.panel = B;
	this.dragData = {
		panel : B
	};
	this.proxy = new Ext.dd.PanelProxy(B, A);
	Ext.Panel.DD.superclass.constructor.call(this, B.el, A);
	var C = B.header;
	if (C) {
		this.setHandleElId(C.id)
	}
	(C ? C : this.panel.body).setStyle("cursor", "move");
	this.scroll = false
};
Ext.extend(Ext.Panel.DD, Ext.dd.DragSource, {
	showFrame : Ext.emptyFn,
	startDrag : Ext.emptyFn,
	b4StartDrag : function(A, B) {
		this.proxy.show()
	},
	b4MouseDown : function(B) {
		var A = B.getPageX();
		var C = B.getPageY();
		this.autoOffset(A, C)
	},
	onInitDrag : function(A, B) {
		this.onStartDrag(A, B);
		return true
	},
	createFrame : Ext.emptyFn,
	getDragEl : function(A) {
		return this.proxy.ghost.dom
	},
	endDrag : function(A) {
		this.proxy.hide();
		this.panel.saveState()
	},
	autoOffset : function(A, B) {
		A -= this.startPageX;
		B -= this.startPageY;
		this.setDelta(A, B)
	}
});
Ext.state.Provider = function() {
	this.addEvents("statechange");
	this.state = {};
	Ext.state.Provider.superclass.constructor.call(this)
};
Ext.extend(Ext.state.Provider, Ext.util.Observable, {
	get : function(B, A) {
		return typeof this.state[B] == "undefined" ? A : this.state[B]
	},
	clear : function(A) {
		delete this.state[A];
		this.fireEvent("statechange", this, A, null)
	},
	set : function(A, B) {
		this.state[A] = B;
		this.fireEvent("statechange", this, A, B)
	},
	decodeValue : function(A) {
		var J = /^(a|n|d|b|s|o)\:(.*)$/;
		var C = J.exec(unescape(A));
		if (!C || !C[1]) {
			return
		}
		var F = C[1];
		var H = C[2];
		switch (F) {
		case "n":
			return parseFloat(H);
		case "d":
			return new Date(Date.parse(H));
		case "b":
			return (H == "1");
		case "a":
			var G = [];
			var I = H.split("^");
			for ( var B = 0, D = I.length; B < D; B++) {
				G.push(this.decodeValue(I[B]))
			}
			return G;
		case "o":
			var G = {};
			var I = H.split("^");
			for ( var B = 0, D = I.length; B < D; B++) {
				var E = I[B].split("=");
				G[E[0]] = this.decodeValue(E[1])
			}
			return G;
		default:
			return H
		}
	},
	encodeValue : function(C) {
		var B;
		if (typeof C == "number") {
			B = "n:" + C
		} else {
			if (typeof C == "boolean") {
				B = "b:" + (C ? "1" : "0")
			} else {
				if (Ext.isDate(C)) {
					B = "d:" + C.toGMTString()
				} else {
					if (Ext.isArray(C)) {
						var F = "";
						for ( var E = 0, A = C.length; E < A; E++) {
							F += this.encodeValue(C[E]);
							if (E != A - 1) {
								F += "^"
							}
						}
						B = "a:" + F
					} else {
						if (typeof C == "object") {
							var F = "";
							for ( var D in C) {
								if (typeof C[D] != "function"
										&& C[D] !== undefined) {
									F += D + "=" + this.encodeValue(C[D]) + "^"
								}
							}
							B = "o:" + F.substring(0, F.length - 1)
						} else {
							B = "s:" + C
						}
					}
				}
			}
		}
		return escape(B)
	}
});
Ext.state.Manager = function() {
	var A = new Ext.state.Provider();
	return {
		setProvider : function(B) {
			A = B
		},
		get : function(C, B) {
			return A.get(C, B)
		},
		set : function(B, C) {
			A.set(B, C)
		},
		clear : function(B) {
			A.clear(B)
		},
		getProvider : function() {
			return A
		}
	}
}();
Ext.state.CookieProvider = function(A) {
	Ext.state.CookieProvider.superclass.constructor.call(this);
	this.path = "/";
	this.expires = new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 7));
	this.domain = null;
	this.secure = false;
	Ext.apply(this, A);
	this.state = this.readCookies()
};
Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, {
	set : function(A, B) {
		if (typeof B == "undefined" || B === null) {
			this.clear(A);
			return
		}
		this.setCookie(A, B);
		Ext.state.CookieProvider.superclass.set.call(this, A, B)
	},
	clear : function(A) {
		this.clearCookie(A);
		Ext.state.CookieProvider.superclass.clear.call(this, A)
	},
	readCookies : function() {
		var C = {};
		var F = document.cookie + ";";
		var B = /\s?(.*?)=(.*?);/g;
		var E;
		while ((E = B.exec(F)) != null) {
			var A = E[1];
			var D = E[2];
			if (A && A.substring(0, 3) == "ys-") {
				C[A.substr(3)] = this.decodeValue(D)
			}
		}
		return C
	},
	setCookie : function(A, B) {
		document.cookie = "ys-"
				+ A
				+ "="
				+ this.encodeValue(B)
				+ ((this.expires == null) ? "" : ("; expires=" + this.expires
						.toGMTString()))
				+ ((this.path == null) ? "" : ("; path=" + this.path))
				+ ((this.domain == null) ? "" : ("; domain=" + this.domain))
				+ ((this.secure == true) ? "; secure" : "")
	},
	clearCookie : function(A) {
		document.cookie = "ys-" + A
				+ "=null; expires=Thu, 01-Jan-70 00:00:01 GMT"
				+ ((this.path == null) ? "" : ("; path=" + this.path))
				+ ((this.domain == null) ? "" : ("; domain=" + this.domain))
				+ ((this.secure == true) ? "; secure" : "")
	}
});
Ext.DataView = Ext.extend(Ext.BoxComponent, {
	selectedClass : "x-view-selected",
	emptyText : "",
	deferEmptyText : true,
	trackOver : false,
	last : false,
	initComponent : function() {
		Ext.DataView.superclass.initComponent.call(this);
		if (typeof this.tpl == "string") {
			this.tpl = new Ext.XTemplate(this.tpl)
		}
		this.addEvents("beforeclick", "click", "mouseenter", "mouseleave",
				"containerclick", "dblclick", "contextmenu", "selectionchange",
				"beforeselect");
		this.all = new Ext.CompositeElementLite();
		this.selected = new Ext.CompositeElementLite()
	},
	onRender : function() {
		if (!this.el) {
			this.el = document.createElement("div");
			this.el.id = this.id
		}
		Ext.DataView.superclass.onRender.apply(this, arguments)
	},
	afterRender : function() {
		Ext.DataView.superclass.afterRender.call(this);
		this.el.on( {
			"click" : this.onClick,
			"dblclick" : this.onDblClick,
			"contextmenu" : this.onContextMenu,
			scope : this
		});
		if (this.overClass || this.trackOver) {
			this.el.on( {
				"mouseover" : this.onMouseOver,
				"mouseout" : this.onMouseOut,
				scope : this
			})
		}
		if (this.store) {
			this.setStore(this.store, true)
		}
	},
	refresh : function() {
		this.clearSelections(false, true);
		this.el.update("");
		var A = this.store.getRange();
		if (A.length < 1) {
			if (!this.deferEmptyText || this.hasSkippedEmptyText) {
				this.el.update(this.emptyText)
			}
			this.hasSkippedEmptyText = true;
			this.all.clear();
			return
		}
		this.tpl.overwrite(this.el, this.collectData(A, 0));
		this.all.fill(Ext.query(this.itemSelector, this.el.dom));
		this.updateIndexes(0)
	},
	prepareData : function(A) {
		return A
	},
	collectData : function(B, E) {
		var D = [];
		for ( var C = 0, A = B.length; C < A; C++) {
			D[D.length] = this.prepareData(B[C].data, E + C, B[C])
		}
		return D
	},
	bufferRender : function(A) {
		var B = document.createElement("div");
		this.tpl.overwrite(B, this.collectData(A));
		return Ext.query(this.itemSelector, B)
	},
	onUpdate : function(F, A) {
		var B = this.store.indexOf(A);
		var E = this.isSelected(B);
		var C = this.all.elements[B];
		var D = this.bufferRender( [ A ], B)[0];
		this.all.replaceElement(B, D, true);
		if (E) {
			this.selected.replaceElement(C, D);
			this.all.item(B).addClass(this.selectedClass)
		}
		this.updateIndexes(B, B)
	},
	onAdd : function(E, C, D) {
		if (this.all.getCount() == 0) {
			this.refresh();
			return
		}
		var B = this.bufferRender(C, D), F, A = this.all.elements;
		if (D < this.all.getCount()) {
			F = this.all.item(D).insertSibling(B, "before", true);
			A.splice.apply(A, [ D, 0 ].concat(B))
		} else {
			F = this.all.last().insertSibling(B, "after", true);
			A.push.apply(A, B)
		}
		this.updateIndexes(D)
	},
	onRemove : function(C, A, B) {
		this.deselect(B);
		this.all.removeElement(B, true);
		this.updateIndexes(B)
	},
	refreshNode : function(A) {
		this.onUpdate(this.store, this.store.getAt(A))
	},
	updateIndexes : function(D, C) {
		var B = this.all.elements;
		D = D || 0;
		C = C || ((C === 0) ? 0 : (B.length - 1));
		for ( var A = D; A <= C; A++) {
			B[A].viewIndex = A
		}
	},
	setStore : function(A, B) {
		if (!B && this.store) {
			this.store.un("beforeload", this.onBeforeLoad, this);
			this.store.un("datachanged", this.refresh, this);
			this.store.un("add", this.onAdd, this);
			this.store.un("remove", this.onRemove, this);
			this.store.un("update", this.onUpdate, this);
			this.store.un("clear", this.refresh, this)
		}
		if (A) {
			A = Ext.StoreMgr.lookup(A);
			A.on("beforeload", this.onBeforeLoad, this);
			A.on("datachanged", this.refresh, this);
			A.on("add", this.onAdd, this);
			A.on("remove", this.onRemove, this);
			A.on("update", this.onUpdate, this);
			A.on("clear", this.refresh, this)
		}
		this.store = A;
		if (A) {
			this.refresh()
		}
	},
	findItemFromChild : function(A) {
		return Ext.fly(A).findParent(this.itemSelector, this.el)
	},
	onClick : function(C) {
		var B = C.getTarget(this.itemSelector, this.el);
		if (B) {
			var A = this.indexOf(B);
			if (this.onItemClick(B, A, C) !== false) {
				this.fireEvent("click", this, A, B, C)
			}
		} else {
			if (this.fireEvent("containerclick", this, C) !== false) {
				this.clearSelections()
			}
		}
	},
	onContextMenu : function(B) {
		var A = B.getTarget(this.itemSelector, this.el);
		if (A) {
			this.fireEvent("contextmenu", this, this.indexOf(A), A, B)
		}
	},
	onDblClick : function(B) {
		var A = B.getTarget(this.itemSelector, this.el);
		if (A) {
			this.fireEvent("dblclick", this, this.indexOf(A), A, B)
		}
	},
	onMouseOver : function(B) {
		var A = B.getTarget(this.itemSelector, this.el);
		if (A && A !== this.lastItem) {
			this.lastItem = A;
			Ext.fly(A).addClass(this.overClass);
			this.fireEvent("mouseenter", this, this.indexOf(A), A, B)
		}
	},
	onMouseOut : function(A) {
		if (this.lastItem) {
			if (!A.within(this.lastItem, true)) {
				Ext.fly(this.lastItem).removeClass(this.overClass);
				this.fireEvent("mouseleave", this, this.indexOf(this.lastItem),
						this.lastItem, A);
				delete this.lastItem
			}
		}
	},
	onItemClick : function(B, A, C) {
		if (this.fireEvent("beforeclick", this, A, B, C) === false) {
			return false
		}
		if (this.multiSelect) {
			this.doMultiSelection(B, A, C);
			C.preventDefault()
		} else {
			if (this.singleSelect) {
				this.doSingleSelection(B, A, C);
				C.preventDefault()
			}
		}
		return true
	},
	doSingleSelection : function(B, A, C) {
		if (C.ctrlKey && this.isSelected(A)) {
			this.deselect(A)
		} else {
			this.select(A, false)
		}
	},
	doMultiSelection : function(C, A, D) {
		if (D.shiftKey && this.last !== false) {
			var B = this.last;
			this.selectRange(B, A, D.ctrlKey);
			this.last = B
		} else {
			if ((D.ctrlKey || this.simpleSelect) && this.isSelected(A)) {
				this.deselect(A)
			} else {
				this.select(A, D.ctrlKey || D.shiftKey || this.simpleSelect)
			}
		}
	},
	getSelectionCount : function() {
		return this.selected.getCount()
	},
	getSelectedNodes : function() {
		return this.selected.elements
	},
	getSelectedIndexes : function() {
		var B = [], D = this.selected.elements;
		for ( var C = 0, A = D.length; C < A; C++) {
			B.push(D[C].viewIndex)
		}
		return B
	},
	getSelectedRecords : function() {
		var D = [], C = this.selected.elements;
		for ( var B = 0, A = C.length; B < A; B++) {
			D[D.length] = this.store.getAt(C[B].viewIndex)
		}
		return D
	},
	getRecords : function(B) {
		var E = [], D = B;
		for ( var C = 0, A = D.length; C < A; C++) {
			E[E.length] = this.store.getAt(D[C].viewIndex)
		}
		return E
	},
	getRecord : function(A) {
		return this.store.getAt(A.viewIndex)
	},
	clearSelections : function(A, B) {
		if ((this.multiSelect || this.singleSelect)
				&& this.selected.getCount() > 0) {
			if (!B) {
				this.selected.removeClass(this.selectedClass)
			}
			this.selected.clear();
			this.last = false;
			if (!A) {
				this.fireEvent("selectionchange", this, this.selected.elements)
			}
		}
	},
	isSelected : function(A) {
		return this.selected.contains(this.getNode(A))
	},
	deselect : function(A) {
		if (this.isSelected(A)) {
			A = this.getNode(A);
			this.selected.removeElement(A);
			if (this.last == A.viewIndex) {
				this.last = false
			}
			Ext.fly(A).removeClass(this.selectedClass);
			this.fireEvent("selectionchange", this, this.selected.elements)
		}
	},
	select : function(D, F, B) {
		if (Ext.isArray(D)) {
			if (!F) {
				this.clearSelections(true)
			}
			for ( var C = 0, A = D.length; C < A; C++) {
				this.select(D[C], true, true)
			}
			if (!B) {
				this.fireEvent("selectionchange", this, this.selected.elements)
			}
		} else {
			var E = this.getNode(D);
			if (!F) {
				this.clearSelections(true)
			}
			if (E && !this.isSelected(E)) {
				if (this.fireEvent("beforeselect", this, E,
						this.selected.elements) !== false) {
					Ext.fly(E).addClass(this.selectedClass);
					this.selected.add(E);
					this.last = E.viewIndex;
					if (!B) {
						this.fireEvent("selectionchange", this,
								this.selected.elements)
					}
				}
			}
		}
	},
	selectRange : function(C, A, B) {
		if (!B) {
			this.clearSelections(true)
		}
		this.select(this.getNodes(C, A), true)
	},
	getNode : function(A) {
		if (typeof A == "string") {
			return document.getElementById(A)
		} else {
			if (typeof A == "number") {
				return this.all.elements[A]
			}
		}
		return A
	},
	getNodes : function(E, A) {
		var D = this.all.elements;
		E = E || 0;
		A = typeof A == "undefined" ? Math.max(D.length - 1, 0) : A;
		var B = [], C;
		if (E <= A) {
			for (C = E; C <= A && D[C]; C++) {
				B.push(D[C])
			}
		} else {
			for (C = E; C >= A && D[C]; C--) {
				B.push(D[C])
			}
		}
		return B
	},
	indexOf : function(A) {
		A = this.getNode(A);
		if (typeof A.viewIndex == "number") {
			return A.viewIndex
		}
		return this.all.indexOf(A)
	},
	onBeforeLoad : function() {
		if (this.loadingText) {
			this.clearSelections(false, true);
			this.el.update("<div class=\"loading-indicator\">"
					+ this.loadingText + "</div>");
			this.all.clear()
		}
	},
	onDestroy : function() {
		Ext.DataView.superclass.onDestroy.call(this);
		this.setStore(null)
	}
});
Ext.reg("dataview", Ext.DataView);
Ext.ColorPalette = function(A) {
	Ext.ColorPalette.superclass.constructor.call(this, A);
	this.addEvents("select");
	if (this.handler) {
		this.on("select", this.handler, this.scope, true)
	}
};
Ext
		.extend(
				Ext.ColorPalette,
				Ext.Component,
				{
					itemCls : "x-color-palette",
					value : null,
					clickEvent : "click",
					ctype : "Ext.ColorPalette",
					allowReselect : false,
					colors : [ "000000", "993300", "333300", "003300",
							"003366", "000080", "333399", "333333", "800000",
							"FF6600", "808000", "008000", "008080", "0000FF",
							"666699", "808080", "FF0000", "FF9900", "99CC00",
							"339966", "33CCCC", "3366FF", "800080", "969696",
							"FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF",
							"00CCFF", "993366", "C0C0C0", "FF99CC", "FFCC99",
							"FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF",
							"FFFFFF" ],
					onRender : function(B, A) {
						var C = this.tpl
								|| new Ext.XTemplate(
										"<tpl for=\".\"><a href=\"#\" class=\"color-{.}\" hidefocus=\"on\"><em><span style=\"background:#{.}\" unselectable=\"on\">&#160;</span></em></a></tpl>");
						var D = document.createElement("div");
						D.className = this.itemCls;
						C.overwrite(D, this.colors);
						B.dom.insertBefore(D, A);
						this.el = Ext.get(D);
						this.el.on(this.clickEvent, this.handleClick, this, {
							delegate : "a"
						});
						if (this.clickEvent != "click") {
							this.el.on("click", Ext.emptyFn, this, {
								delegate : "a",
								preventDefault : true
							})
						}
					},
					afterRender : function() {
						Ext.ColorPalette.superclass.afterRender.call(this);
						if (this.value) {
							var A = this.value;
							this.value = null;
							this.select(A)
						}
					},
					handleClick : function(B, A) {
						B.preventDefault();
						if (!this.disabled) {
							var C = A.className
									.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];
							this.select(C.toUpperCase())
						}
					},
					select : function(A) {
						A = A.replace("#", "");
						if (A != this.value || this.allowReselect) {
							var B = this.el;
							if (this.value) {
								B.child("a.color-" + this.value).removeClass(
										"x-color-palette-sel")
							}
							B.child("a.color-" + A).addClass(
									"x-color-palette-sel");
							this.value = A;
							this.fireEvent("select", this, A)
						}
					}
				});
Ext.reg("colorpalette", Ext.ColorPalette);
Ext.DatePicker = Ext
		.extend(
				Ext.Component,
				{
					todayText : "Today",
					okText : "&#160;OK&#160;",
					cancelText : "Cancel",
					todayTip : "{0} (Spacebar)",
					minText : "This date is before the minimum date",
					maxText : "This date is after the maximum date",
					format : "m/d/y",
					disabledDaysText : "Disabled",
					disabledDatesText : "Disabled",
					constrainToViewport : true,
					monthNames : Date.monthNames,
					dayNames : Date.dayNames,
					nextText : "Next Month (Control+Right)",
					prevText : "Previous Month (Control+Left)",
					monthYearText : "Choose a month (Control+Up/Down to move years)",
					startDay : 0,
					showToday : true,
					initComponent : function() {
						Ext.DatePicker.superclass.initComponent.call(this);
						this.value = this.value ? this.value.clearTime()
								: new Date().clearTime();
						this.addEvents("select");
						if (this.handler) {
							this.on("select", this.handler, this.scope || this)
						}
						this.initDisabledDays()
					},
					initDisabledDays : function() {
						if (!this.disabledDatesRE && this.disabledDates) {
							var A = this.disabledDates;
							var C = "(?:";
							for ( var B = 0; B < A.length; B++) {
								C += A[B];
								if (B != A.length - 1) {
									C += "|"
								}
							}
							this.disabledDatesRE = new RegExp(C + ")")
						}
					},
					setDisabledDates : function(A) {
						if (Ext.isArray(A)) {
							this.disabledDates = A;
							this.disabledDatesRE = null
						} else {
							this.disabledDatesRE = A
						}
						this.initDisabledDays();
						this.update(this.value, true)
					},
					setDisabledDays : function(A) {
						this.disabledDays = A;
						this.update(this.value, true)
					},
					setMinDate : function(A) {
						this.minDate = A;
						this.update(this.value, true)
					},
					setMaxDate : function(A) {
						this.maxDate = A;
						this.update(this.value, true)
					},
					setValue : function(B) {
						var A = this.value;
						this.value = B.clearTime(true);
						if (this.el) {
							this.update(this.value)
						}
					},
					getValue : function() {
						return this.value
					},
					focus : function() {
						if (this.el) {
							this.update(this.activeDate)
						}
					},
					onRender : function(A, F) {
						var C = [
								"<table cellspacing=\"0\">",
								"<tr><td class=\"x-date-left\"><a href=\"#\" title=\"",
								this.prevText,
								"\">&#160;</a></td><td class=\"x-date-middle\" align=\"center\"></td><td class=\"x-date-right\"><a href=\"#\" title=\"",
								this.nextText,
								"\">&#160;</a></td></tr>",
								"<tr><td colspan=\"3\"><table class=\"x-date-inner\" cellspacing=\"0\"><thead><tr>" ];
						var E = this.dayNames;
						for ( var D = 0; D < 7; D++) {
							var G = this.startDay + D;
							if (G > 6) {
								G = G - 7
							}
							C.push("<th><span>", E[G].substr(0, 1),
									"</span></th>")
						}
						C[C.length] = "</tr></thead><tbody><tr>";
						for ( var D = 0; D < 42; D++) {
							if (D % 7 == 0 && D != 0) {
								C[C.length] = "</tr><tr>"
							}
							C[C.length] = "<td><a href=\"#\" hidefocus=\"on\" class=\"x-date-date\" tabIndex=\"1\"><em><span></span></em></a></td>"
						}
						C
								.push(
										"</tr></tbody></table></td></tr>",
										this.showToday ? "<tr><td colspan=\"3\" class=\"x-date-bottom\" align=\"center\"></td></tr>"
												: "",
										"</table><div class=\"x-date-mp\"></div>");
						var B = document.createElement("div");
						B.className = "x-date-picker";
						B.innerHTML = C.join("");
						A.dom.insertBefore(B, F);
						this.el = Ext.get(B);
						this.eventEl = Ext.get(B.firstChild);
						new Ext.util.ClickRepeater(this.el
								.child("td.x-date-left a"), {
							handler : this.showPrevMonth,
							scope : this,
							preventDefault : true,
							stopDefault : true
						});
						new Ext.util.ClickRepeater(this.el
								.child("td.x-date-right a"), {
							handler : this.showNextMonth,
							scope : this,
							preventDefault : true,
							stopDefault : true
						});
						this.eventEl.on("mousewheel", this.handleMouseWheel,
								this);
						this.monthPicker = this.el.down("div.x-date-mp");
						this.monthPicker.enableDisplayMode("block");
						var I = new Ext.KeyNav(this.eventEl, {
							"left" : function(J) {
								J.ctrlKey ? this.showPrevMonth() : this
										.update(this.activeDate.add("d", -1))
							},
							"right" : function(J) {
								J.ctrlKey ? this.showNextMonth() : this
										.update(this.activeDate.add("d", 1))
							},
							"up" : function(J) {
								J.ctrlKey ? this.showNextYear() : this
										.update(this.activeDate.add("d", -7))
							},
							"down" : function(J) {
								J.ctrlKey ? this.showPrevYear() : this
										.update(this.activeDate.add("d", 7))
							},
							"pageUp" : function(J) {
								this.showNextMonth()
							},
							"pageDown" : function(J) {
								this.showPrevMonth()
							},
							"enter" : function(J) {
								J.stopPropagation();
								return true
							},
							scope : this
						});
						this.eventEl.on("click", this.handleDateClick, this, {
							delegate : "a.x-date-date"
						});
						this.el.unselectable();
						this.cells = this.el
								.select("table.x-date-inner tbody td");
						this.textNodes = this.el
								.query("table.x-date-inner tbody span");
						this.mbtn = new Ext.Button( {
							text : "&#160;",
							tooltip : this.monthYearText,
							renderTo : this.el.child("td.x-date-middle", true)
						});
						this.mbtn.on("click", this.showMonthPicker, this);
						this.mbtn.el.child(this.mbtn.menuClassTarget).addClass(
								"x-btn-with-menu");
						if (this.showToday) {
							this.todayKeyListener = this.eventEl
									.addKeyListener(Ext.EventObject.SPACE,
											this.selectToday, this);
							var H = (new Date()).dateFormat(this.format);
							this.todayBtn = new Ext.Button( {
								renderTo : this.el.child("td.x-date-bottom",
										true),
								text : String.format(this.todayText, H),
								tooltip : String.format(this.todayTip, H),
								handler : this.selectToday,
								scope : this
							})
						}
						if (Ext.isIE) {
							this.el.repaint()
						}
						this.update(this.value)
					},
					createMonthPicker : function() {
						if (!this.monthPicker.dom.firstChild) {
							var A = [ "<table border=\"0\" cellspacing=\"0\">" ];
							for ( var B = 0; B < 6; B++) {
								A
										.push(
												"<tr><td class=\"x-date-mp-month\"><a href=\"#\">",
												this.monthNames[B].substr(0, 3),
												"</a></td>",
												"<td class=\"x-date-mp-month x-date-mp-sep\"><a href=\"#\">",
												this.monthNames[B + 6].substr(
														0, 3),
												"</a></td>",
												B == 0 ? "<td class=\"x-date-mp-ybtn\" align=\"center\"><a class=\"x-date-mp-prev\"></a></td><td class=\"x-date-mp-ybtn\" align=\"center\"><a class=\"x-date-mp-next\"></a></td></tr>"
														: "<td class=\"x-date-mp-year\"><a href=\"#\"></a></td><td class=\"x-date-mp-year\"><a href=\"#\"></a></td></tr>")
							}
							A
									.push(
											"<tr class=\"x-date-mp-btns\"><td colspan=\"4\"><button type=\"button\" class=\"x-date-mp-ok\">",
											this.okText,
											"</button><button type=\"button\" class=\"x-date-mp-cancel\">",
											this.cancelText,
											"</button></td></tr>", "</table>");
							this.monthPicker.update(A.join(""));
							this.monthPicker.on("click", this.onMonthClick,
									this);
							this.monthPicker.on("dblclick",
									this.onMonthDblClick, this);
							this.mpMonths = this.monthPicker
									.select("td.x-date-mp-month");
							this.mpYears = this.monthPicker
									.select("td.x-date-mp-year");
							this.mpMonths.each(function(C, D, E) {
								E += 1;
								if ((E % 2) == 0) {
									C.dom.xmonth = 5 + Math.round(E * 0.5)
								} else {
									C.dom.xmonth = Math.round((E - 1) * 0.5)
								}
							})
						}
					},
					showMonthPicker : function() {
						this.createMonthPicker();
						var A = this.el.getSize();
						this.monthPicker.setSize(A);
						this.monthPicker.child("table").setSize(A);
						this.mpSelMonth = (this.activeDate || this.value)
								.getMonth();
						this.updateMPMonth(this.mpSelMonth);
						this.mpSelYear = (this.activeDate || this.value)
								.getFullYear();
						this.updateMPYear(this.mpSelYear);
						this.monthPicker.slideIn("t", {
							duration : 0.2
						})
					},
					updateMPYear : function(E) {
						this.mpyear = E;
						var C = this.mpYears.elements;
						for ( var B = 1; B <= 10; B++) {
							var D = C[B - 1], A;
							if ((B % 2) == 0) {
								A = E + Math.round(B * 0.5);
								D.firstChild.innerHTML = A;
								D.xyear = A
							} else {
								A = E - (5 - Math.round(B * 0.5));
								D.firstChild.innerHTML = A;
								D.xyear = A
							}
							this.mpYears.item(B - 1)[A == this.mpSelYear ? "addClass"
									: "removeClass"]("x-date-mp-sel")
						}
					},
					updateMPMonth : function(A) {
						this.mpMonths.each(function(B, C, D) {
							B[B.dom.xmonth == A ? "addClass" : "removeClass"]
									("x-date-mp-sel")
						})
					},
					selectMPMonth : function(A) {
					},
					onMonthClick : function(D, B) {
						D.stopEvent();
						var C = new Ext.Element(B), A;
						if (C.is("button.x-date-mp-cancel")) {
							this.hideMonthPicker()
						} else {
							if (C.is("button.x-date-mp-ok")) {
								var E = new Date(this.mpSelYear,
										this.mpSelMonth,
										(this.activeDate || this.value)
												.getDate());
								if (E.getMonth() != this.mpSelMonth) {
									E = new Date(this.mpSelYear,
											this.mpSelMonth, 1)
											.getLastDateOfMonth()
								}
								this.update(E);
								this.hideMonthPicker()
							} else {
								if (A = C.up("td.x-date-mp-month", 2)) {
									this.mpMonths.removeClass("x-date-mp-sel");
									A.addClass("x-date-mp-sel");
									this.mpSelMonth = A.dom.xmonth
								} else {
									if (A = C.up("td.x-date-mp-year", 2)) {
										this.mpYears
												.removeClass("x-date-mp-sel");
										A.addClass("x-date-mp-sel");
										this.mpSelYear = A.dom.xyear
									} else {
										if (C.is("a.x-date-mp-prev")) {
											this.updateMPYear(this.mpyear - 10)
										} else {
											if (C.is("a.x-date-mp-next")) {
												this
														.updateMPYear(this.mpyear + 10)
											}
										}
									}
								}
							}
						}
					},
					onMonthDblClick : function(D, B) {
						D.stopEvent();
						var C = new Ext.Element(B), A;
						if (A = C.up("td.x-date-mp-month", 2)) {
							this.update(new Date(this.mpSelYear, A.dom.xmonth,
									(this.activeDate || this.value).getDate()));
							this.hideMonthPicker()
						} else {
							if (A = C.up("td.x-date-mp-year", 2)) {
								this.update(new Date(A.dom.xyear,
										this.mpSelMonth,
										(this.activeDate || this.value)
												.getDate()));
								this.hideMonthPicker()
							}
						}
					},
					hideMonthPicker : function(A) {
						if (this.monthPicker) {
							if (A === true) {
								this.monthPicker.hide()
							} else {
								this.monthPicker.slideOut("t", {
									duration : 0.2
								})
							}
						}
					},
					showPrevMonth : function(A) {
						this.update(this.activeDate.add("mo", -1))
					},
					showNextMonth : function(A) {
						this.update(this.activeDate.add("mo", 1))
					},
					showPrevYear : function() {
						this.update(this.activeDate.add("y", -1))
					},
					showNextYear : function() {
						this.update(this.activeDate.add("y", 1))
					},
					handleMouseWheel : function(A) {
						var B = A.getWheelDelta();
						if (B > 0) {
							this.showPrevMonth();
							A.stopEvent()
						} else {
							if (B < 0) {
								this.showNextMonth();
								A.stopEvent()
							}
						}
					},
					handleDateClick : function(B, A) {
						B.stopEvent();
						if (A.dateValue
								&& !Ext.fly(A.parentNode).hasClass(
										"x-date-disabled")) {
							this.setValue(new Date(A.dateValue));
							this.fireEvent("select", this, this.value)
						}
					},
					selectToday : function() {
						if (this.todayBtn && !this.todayBtn.disabled) {
							this.setValue(new Date().clearTime());
							this.fireEvent("select", this, this.value)
						}
					},
					update : function(a, U) {
						var A = this.activeDate;
						this.activeDate = a;
						if (!U && A && this.el) {
							var K = a.getTime();
							if (A.getMonth() == a.getMonth()
									&& A.getFullYear() == a.getFullYear()) {
								this.cells.removeClass("x-date-selected");
								this.cells.each(function(d) {
									if (d.dom.firstChild.dateValue == K) {
										d.addClass("x-date-selected");
										setTimeout(function() {
											try {
												d.dom.firstChild.focus()
											} catch (f) {
											}
										}, 50);
										return false
									}
								});
								return
							}
						}
						var G = a.getDaysInMonth();
						var L = a.getFirstDateOfMonth();
						var D = L.getDay() - this.startDay;
						if (D <= this.startDay) {
							D += 7
						}
						var V = a.add("mo", -1);
						var E = V.getDaysInMonth() - D;
						var C = this.cells.elements;
						var M = this.textNodes;
						G += D;
						var R = 86400000;
						var X = (new Date(V.getFullYear(), V.getMonth(), E))
								.clearTime();
						var W = new Date().clearTime().getTime();
						var P = a.clearTime().getTime();
						var O = this.minDate ? this.minDate.clearTime()
								: Number.NEGATIVE_INFINITY;
						var S = this.maxDate ? this.maxDate.clearTime()
								: Number.POSITIVE_INFINITY;
						var Z = this.disabledDatesRE;
						var N = this.disabledDatesText;
						var c = this.disabledDays ? this.disabledDays.join("")
								: false;
						var Y = this.disabledDaysText;
						var T = this.format;
						if (this.showToday) {
							var I = new Date().clearTime();
							var B = (I < O || I > S
									|| (Z && T && Z.test(I.dateFormat(T))) || (c && c
									.indexOf(I.getDay()) != -1));
							this.todayBtn.setDisabled(B);
							this.todayKeyListener[B ? "disable" : "enable"]()
						}
						var H = function(g, d) {
							d.title = "";
							var e = X.getTime();
							d.firstChild.dateValue = e;
							if (e == W) {
								d.className += " x-date-today";
								d.title = g.todayText
							}
							if (e == P) {
								d.className += " x-date-selected";
								setTimeout(function() {
									try {
										d.firstChild.focus()
									} catch (h) {
									}
								}, 50)
							}
							if (e < O) {
								d.className = " x-date-disabled";
								d.title = g.minText;
								return
							}
							if (e > S) {
								d.className = " x-date-disabled";
								d.title = g.maxText;
								return
							}
							if (c) {
								if (c.indexOf(X.getDay()) != -1) {
									d.title = Y;
									d.className = " x-date-disabled"
								}
							}
							if (Z && T) {
								var f = X.dateFormat(T);
								if (Z.test(f)) {
									d.title = N.replace("%0", f);
									d.className = " x-date-disabled"
								}
							}
						};
						var Q = 0;
						for (; Q < D; Q++) {
							M[Q].innerHTML = (++E);
							X.setDate(X.getDate() + 1);
							C[Q].className = "x-date-prevday";
							H(this, C[Q])
						}
						for (; Q < G; Q++) {
							intDay = Q - D + 1;
							M[Q].innerHTML = (intDay);
							X.setDate(X.getDate() + 1);
							C[Q].className = "x-date-active";
							H(this, C[Q])
						}
						var b = 0;
						for (; Q < 42; Q++) {
							M[Q].innerHTML = (++b);
							X.setDate(X.getDate() + 1);
							C[Q].className = "x-date-nextday";
							H(this, C[Q])
						}
						this.mbtn.setText(this.monthNames[a.getMonth()] + " "
								+ a.getFullYear());
						if (!this.internalRender) {
							var F = this.el.dom.firstChild;
							var J = F.offsetWidth;
							this.el.setWidth(J + this.el.getBorderWidth("lr"));
							Ext.fly(F).setWidth(J);
							this.internalRender = true;
							if (Ext.isOpera && !this.secondPass) {
								F.rows[0].cells[1].style.width = (J - (F.rows[0].cells[0].offsetWidth + F.rows[0].cells[2].offsetWidth))
										+ "px";
								this.secondPass = true;
								this.update.defer(10, this, [ a ])
							}
						}
					},
					beforeDestroy : function() {
						if (this.rendered) {
							Ext.destroy(this.mbtn, this.todayBtn)
						}
					}
				});
Ext.reg("datepicker", Ext.DatePicker);
Ext.TabPanel = Ext
		.extend(
				Ext.Panel,
				{
					monitorResize : true,
					deferredRender : true,
					tabWidth : 120,
					minTabWidth : 30,
					resizeTabs : false,
					enableTabScroll : false,
					scrollIncrement : 0,
					scrollRepeatInterval : 400,
					scrollDuration : 0.35,
					animScroll : true,
					tabPosition : "top",
					baseCls : "x-tab-panel",
					autoTabs : false,
					autoTabSelector : "div.x-tab",
					activeTab : null,
					tabMargin : 2,
					plain : false,
					wheelIncrement : 20,
					idDelimiter : "__",
					itemCls : "x-tab-item",
					elements : "body",
					headerAsText : false,
					frame : false,
					hideBorders : true,
					initComponent : function() {
						this.frame = false;
						Ext.TabPanel.superclass.initComponent.call(this);
						this.addEvents("beforetabchange", "tabchange",
								"contextmenu");
						this.setLayout(new Ext.layout.CardLayout( {
							deferredRender : this.deferredRender
						}));
						if (this.tabPosition == "top") {
							this.elements += ",header";
							this.stripTarget = "header"
						} else {
							this.elements += ",footer";
							this.stripTarget = "footer"
						}
						if (!this.stack) {
							this.stack = Ext.TabPanel.AccessStack()
						}
						this.initItems()
					},
					render : function() {
						Ext.TabPanel.superclass.render.apply(this, arguments);
						if (this.activeTab !== undefined) {
							var A = this.activeTab;
							delete this.activeTab;
							this.setActiveTab(A)
						}
					},
					onRender : function(C, A) {
						Ext.TabPanel.superclass.onRender.call(this, C, A);
						if (this.plain) {
							var F = this.tabPosition == "top" ? "header"
									: "footer";
							this[F].addClass("x-tab-panel-" + F + "-plain")
						}
						var B = this[this.stripTarget];
						this.stripWrap = B.createChild( {
							cls : "x-tab-strip-wrap",
							cn : {
								tag : "ul",
								cls : "x-tab-strip x-tab-strip-"
										+ this.tabPosition
							}
						});
						var E = (this.tabPosition == "bottom" ? this.stripWrap
								: null);
						this.stripSpacer = B.createChild( {
							cls : "x-tab-strip-spacer"
						}, E);
						this.strip = new Ext.Element(
								this.stripWrap.dom.firstChild);
						this.edge = this.strip.createChild( {
							tag : "li",
							cls : "x-tab-edge"
						});
						this.strip.createChild( {
							cls : "x-clear"
						});
						this.body.addClass("x-tab-panel-body-"
								+ this.tabPosition);
						if (!this.itemTpl) {
							var D = new Ext.Template(
									"<li class=\"{cls}\" id=\"{id}\"><a class=\"x-tab-strip-close\" onclick=\"return false;\"></a>",
									"<a class=\"x-tab-right\" href=\"#\" onclick=\"return false;\"><em class=\"x-tab-left\">",
									"<span class=\"x-tab-strip-inner\"><span class=\"x-tab-strip-text {iconCls}\">{text}</span></span>",
									"</em></a></li>");
							D.disableFormats = true;
							D.compile();
							Ext.TabPanel.prototype.itemTpl = D
						}
						this.items.each(this.initTab, this)
					},
					afterRender : function() {
						Ext.TabPanel.superclass.afterRender.call(this);
						if (this.autoTabs) {
							this.readTabs(false)
						}
					},
					initEvents : function() {
						Ext.TabPanel.superclass.initEvents.call(this);
						this.on("add", this.onAdd, this);
						this.on("remove", this.onRemove, this);
						this.strip.on("mousedown", this.onStripMouseDown, this);
						this.strip.on("contextmenu", this.onStripContextMenu,
								this);
						if (this.enableTabScroll) {
							this.strip.on("mousewheel", this.onWheel, this)
						}
					},
					findTargets : function(C) {
						var B = null;
						var A = C.getTarget("li", this.strip);
						if (A) {
							B = this
									.getComponent(A.id.split(this.idDelimiter)[1]);
							if (B.disabled) {
								return {
									close : null,
									item : null,
									el : null
								}
							}
						}
						return {
							close : C.getTarget(".x-tab-strip-close",
									this.strip),
							item : B,
							el : A
						}
					},
					onStripMouseDown : function(B) {
						if (B.button != 0) {
							return
						}
						B.preventDefault();
						var A = this.findTargets(B);
						if (A.close) {
							this.remove(A.item);
							return
						}
						if (A.item && A.item != this.activeTab) {
							this.setActiveTab(A.item)
						}
					},
					onStripContextMenu : function(B) {
						B.preventDefault();
						var A = this.findTargets(B);
						if (A.item) {
							this.fireEvent("contextmenu", this, A.item, B)
						}
					},
					readTabs : function(D) {
						if (D === true) {
							this.items.each(function(G) {
								this.remove(G)
							}, this)
						}
						var C = this.el.query(this.autoTabSelector);
						for ( var B = 0, A = C.length; B < A; B++) {
							var E = C[B];
							var F = E.getAttribute("title");
							E.removeAttribute("title");
							this.add( {
								title : F,
								el : E
							})
						}
					},
					initTab : function(D, B) {
						var E = this.strip.dom.childNodes[B];
						var A = D.closable ? "x-tab-strip-closable" : "";
						if (D.disabled) {
							A += " x-item-disabled"
						}
						if (D.iconCls) {
							A += " x-tab-with-icon"
						}
						if (D.tabCls) {
							A += " " + D.tabCls
						}
						var F = {
							id : this.id + this.idDelimiter + D.getItemId(),
							text : D.title,
							cls : A,
							iconCls : D.iconCls || ""
						};
						var C = E ? this.itemTpl.insertBefore(E, F)
								: this.itemTpl.append(this.strip, F);
						Ext.fly(C).addClassOnOver("x-tab-strip-over");
						if (D.tabTip) {
							Ext.fly(C).child("span.x-tab-strip-text", true).qtip = D.tabTip
						}
						D.on("disable", this.onItemDisabled, this);
						D.on("enable", this.onItemEnabled, this);
						D.on("titlechange", this.onItemTitleChanged, this);
						D.on("beforeshow", this.onBeforeShowItem, this)
					},
					onAdd : function(C, B, A) {
						this.initTab(B, A);
						if (this.items.getCount() == 1) {
							this.syncSize()
						}
						this.delegateUpdates()
					},
					onBeforeAdd : function(B) {
						var A = B.events ? (this.items.containsKey(B
								.getItemId()) ? B : null) : this.items.get(B);
						if (A) {
							this.setActiveTab(B);
							return false
						}
						Ext.TabPanel.superclass.onBeforeAdd.apply(this,
								arguments);
						var C = B.elements;
						B.elements = C ? C.replace(",header", "") : C;
						B.border = (B.border === true)
					},
					onRemove : function(C, B) {
						Ext.removeNode(this.getTabEl(B));
						this.stack.remove(B);
						B.un("disable", this.onItemDisabled, this);
						B.un("enable", this.onItemEnabled, this);
						B.un("titlechange", this.onItemTitleChanged, this);
						B.un("beforeshow", this.onBeforeShowItem, this);
						if (B == this.activeTab) {
							var A = this.stack.next();
							if (A) {
								this.setActiveTab(A)
							} else {
								this.setActiveTab(0)
							}
						}
						this.delegateUpdates()
					},
					onBeforeShowItem : function(A) {
						if (A != this.activeTab) {
							this.setActiveTab(A);
							return false
						}
					},
					onItemDisabled : function(B) {
						var A = this.getTabEl(B);
						if (A) {
							Ext.fly(A).addClass("x-item-disabled")
						}
						this.stack.remove(B)
					},
					onItemEnabled : function(B) {
						var A = this.getTabEl(B);
						if (A) {
							Ext.fly(A).removeClass("x-item-disabled")
						}
					},
					onItemTitleChanged : function(B) {
						var A = this.getTabEl(B);
						if (A) {
							Ext.fly(A).child("span.x-tab-strip-text", true).innerHTML = B.title
						}
					},
					getTabEl : function(A) {
						var B = (typeof A === "number") ? this.items.items[A]
								.getItemId() : A.getItemId();
						return document.getElementById(this.id
								+ this.idDelimiter + B)
					},
					onResize : function() {
						Ext.TabPanel.superclass.onResize.apply(this, arguments);
						this.delegateUpdates()
					},
					beginUpdate : function() {
						this.suspendUpdates = true
					},
					endUpdate : function() {
						this.suspendUpdates = false;
						this.delegateUpdates()
					},
					hideTabStripItem : function(B) {
						B = this.getComponent(B);
						var A = this.getTabEl(B);
						if (A) {
							A.style.display = "none";
							this.delegateUpdates()
						}
						this.stack.remove(B)
					},
					unhideTabStripItem : function(B) {
						B = this.getComponent(B);
						var A = this.getTabEl(B);
						if (A) {
							A.style.display = "";
							this.delegateUpdates()
						}
					},
					delegateUpdates : function() {
						if (this.suspendUpdates) {
							return
						}
						if (this.resizeTabs && this.rendered) {
							this.autoSizeTabs()
						}
						if (this.enableTabScroll && this.rendered) {
							this.autoScrollTabs()
						}
					},
					autoSizeTabs : function() {
						var G = this.items.length;
						var B = this.tabPosition != "bottom" ? "header"
								: "footer";
						var C = this[B].dom.offsetWidth;
						var A = this[B].dom.clientWidth;
						if (!this.resizeTabs || G < 1 || !A) {
							return
						}
						var I = Math.max(Math.min(Math.floor((A - 4) / G)
								- this.tabMargin, this.tabWidth),
								this.minTabWidth);
						this.lastTabWidth = I;
						var K = this.stripWrap.dom.getElementsByTagName("li");
						for ( var E = 0, H = K.length - 1; E < H; E++) {
							var J = K[E];
							var L = J.childNodes[1].firstChild.firstChild;
							var F = J.offsetWidth;
							var D = L.offsetWidth;
							L.style.width = (I - (F - D)) + "px"
						}
					},
					adjustBodyWidth : function(A) {
						if (this.header) {
							this.header.setWidth(A)
						}
						if (this.footer) {
							this.footer.setWidth(A)
						}
						return A
					},
					setActiveTab : function(C) {
						C = this.getComponent(C);
						if (!C
								|| this.fireEvent("beforetabchange", this, C,
										this.activeTab) === false) {
							return
						}
						if (!this.rendered) {
							this.activeTab = C;
							return
						}
						if (this.activeTab != C) {
							if (this.activeTab) {
								var A = this.getTabEl(this.activeTab);
								if (A) {
									Ext.fly(A)
											.removeClass("x-tab-strip-active")
								}
								this.activeTab.fireEvent("deactivate",
										this.activeTab)
							}
							var B = this.getTabEl(C);
							Ext.fly(B).addClass("x-tab-strip-active");
							this.activeTab = C;
							this.stack.add(C);
							this.layout.setActiveItem(C);
							if (this.layoutOnTabChange && C.doLayout) {
								C.doLayout()
							}
							if (this.scrolling) {
								this.scrollToTab(C, this.animScroll)
							}
							C.fireEvent("activate", C);
							this.fireEvent("tabchange", this, C)
						}
					},
					getActiveTab : function() {
						return this.activeTab || null
					},
					getItem : function(A) {
						return this.getComponent(A)
					},
					autoScrollTabs : function() {
						var G = this.items.length;
						var D = this.header.dom.offsetWidth;
						var C = this.header.dom.clientWidth;
						var F = this.stripWrap;
						var E = F.dom;
						var B = E.offsetWidth;
						var H = this.getScrollPos();
						var A = this.edge.getOffsetsTo(this.stripWrap)[0] + H;
						if (!this.enableTabScroll || G < 1 || B < 20) {
							return
						}
						if (A <= C) {
							E.scrollLeft = 0;
							F.setWidth(C);
							if (this.scrolling) {
								this.scrolling = false;
								this.header.removeClass("x-tab-scrolling");
								this.scrollLeft.hide();
								this.scrollRight.hide();
								if (Ext.isAir) {
									E.style.marginLeft = "";
									E.style.marginRight = ""
								}
							}
						} else {
							if (!this.scrolling) {
								this.header.addClass("x-tab-scrolling");
								if (Ext.isAir) {
									E.style.marginLeft = "18px";
									E.style.marginRight = "18px"
								}
							}
							C -= F.getMargins("lr");
							F.setWidth(C > 20 ? C : 20);
							if (!this.scrolling) {
								if (!this.scrollLeft) {
									this.createScrollers()
								} else {
									this.scrollLeft.show();
									this.scrollRight.show()
								}
							}
							this.scrolling = true;
							if (H > (A - C)) {
								E.scrollLeft = A - C
							} else {
								this.scrollToTab(this.activeTab, false)
							}
							this.updateScrollButtons()
						}
					},
					createScrollers : function() {
						var C = this.stripWrap.dom.offsetHeight;
						var A = this.header.insertFirst( {
							cls : "x-tab-scroller-left"
						});
						A.setHeight(C);
						A.addClassOnOver("x-tab-scroller-left-over");
						this.leftRepeater = new Ext.util.ClickRepeater(A, {
							interval : this.scrollRepeatInterval,
							handler : this.onScrollLeft,
							scope : this
						});
						this.scrollLeft = A;
						var B = this.header.insertFirst( {
							cls : "x-tab-scroller-right"
						});
						B.setHeight(C);
						B.addClassOnOver("x-tab-scroller-right-over");
						this.rightRepeater = new Ext.util.ClickRepeater(B, {
							interval : this.scrollRepeatInterval,
							handler : this.onScrollRight,
							scope : this
						});
						this.scrollRight = B
					},
					getScrollWidth : function() {
						return this.edge.getOffsetsTo(this.stripWrap)[0]
								+ this.getScrollPos()
					},
					getScrollPos : function() {
						return parseInt(this.stripWrap.dom.scrollLeft, 10) || 0
					},
					getScrollArea : function() {
						return parseInt(this.stripWrap.dom.clientWidth, 10) || 0
					},
					getScrollAnim : function() {
						return {
							duration : this.scrollDuration,
							callback : this.updateScrollButtons,
							scope : this
						}
					},
					getScrollIncrement : function() {
						return this.scrollIncrement
								|| (this.resizeTabs ? this.lastTabWidth + 2
										: 100)
					},
					scrollToTab : function(E, A) {
						if (!E) {
							return
						}
						var C = this.getTabEl(E);
						var G = this.getScrollPos(), D = this.getScrollArea();
						var F = Ext.fly(C).getOffsetsTo(this.stripWrap)[0] + G;
						var B = F + C.offsetWidth;
						if (F < G) {
							this.scrollTo(F, A)
						} else {
							if (B > (G + D)) {
								this.scrollTo(B - D, A)
							}
						}
					},
					scrollTo : function(B, A) {
						this.stripWrap.scrollTo("left", B, A ? this
								.getScrollAnim() : false);
						if (!A) {
							this.updateScrollButtons()
						}
					},
					onWheel : function(D) {
						var E = D.getWheelDelta() * this.wheelIncrement * -1;
						D.stopEvent();
						var F = this.getScrollPos();
						var C = F + E;
						var A = this.getScrollWidth() - this.getScrollArea();
						var B = Math.max(0, Math.min(A, C));
						if (B != F) {
							this.scrollTo(B, false)
						}
					},
					onScrollRight : function() {
						var A = this.getScrollWidth() - this.getScrollArea();
						var C = this.getScrollPos();
						var B = Math.min(A, C + this.getScrollIncrement());
						if (B != C) {
							this.scrollTo(B, this.animScroll)
						}
					},
					onScrollLeft : function() {
						var B = this.getScrollPos();
						var A = Math.max(0, B - this.getScrollIncrement());
						if (A != B) {
							this.scrollTo(A, this.animScroll)
						}
					},
					updateScrollButtons : function() {
						var A = this.getScrollPos();
						this.scrollLeft[A == 0 ? "addClass" : "removeClass"]
								("x-tab-scroller-left-disabled");
						this.scrollRight[A >= (this.getScrollWidth() - this
								.getScrollArea()) ? "addClass" : "removeClass"]
								("x-tab-scroller-right-disabled")
					}
				});
Ext.reg("tabpanel", Ext.TabPanel);
Ext.TabPanel.prototype.activate = Ext.TabPanel.prototype.setActiveTab;
Ext.TabPanel.AccessStack = function() {
	var A = [];
	return {
		add : function(B) {
			A.push(B);
			if (A.length > 10) {
				A.shift()
			}
		},
		remove : function(E) {
			var D = [];
			for ( var C = 0, B = A.length; C < B; C++) {
				if (A[C] != E) {
					D.push(A[C])
				}
			}
			A = D
		},
		next : function() {
			return A.pop()
		}
	}
};
Ext.Button = Ext
		.extend(
				Ext.Component,
				{
					hidden : false,
					disabled : false,
					pressed : false,
					enableToggle : false,
					menuAlign : "tl-bl?",
					type : "button",
					menuClassTarget : "tr",
					clickEvent : "click",
					handleMouseEvents : true,
					tooltipType : "qtip",
					buttonSelector : "button:first",
					initComponent : function() {
						Ext.Button.superclass.initComponent.call(this);
						this.addEvents("click", "toggle", "mouseover",
								"mouseout", "menushow", "menuhide",
								"menutriggerover", "menutriggerout");
						if (this.menu) {
							this.menu = Ext.menu.MenuMgr.get(this.menu)
						}
						if (typeof this.toggleGroup === "string") {
							this.enableToggle = true
						}
					},
					onRender : function(C, A) {
						if (!this.template) {
							if (!Ext.Button.buttonTemplate) {
								Ext.Button.buttonTemplate = new Ext.Template(
										"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"x-btn-wrap\"><tbody><tr>",
										"<td class=\"x-btn-left\"><i>&#160;</i></td><td class=\"x-btn-center\"><em unselectable=\"on\"><button class=\"x-btn-text\" type=\"{1}\">{0}</button></em></td><td class=\"x-btn-right\"><i>&#160;</i></td>",
										"</tr></tbody></table>")
							}
							this.template = Ext.Button.buttonTemplate
						}
						var B, E = [ this.text || "&#160;", this.type ];
						if (A) {
							B = this.template.insertBefore(A, E, true)
						} else {
							B = this.template.append(C, E, true)
						}
						var D = B.child(this.buttonSelector);
						D.on("focus", this.onFocus, this);
						D.on("blur", this.onBlur, this);
						this.initButtonEl(B, D);
						if (this.menu) {
							this.el.child(this.menuClassTarget).addClass(
									"x-btn-with-menu")
						}
						Ext.ButtonToggleMgr.register(this)
					},
					initButtonEl : function(B, C) {
						this.el = B;
						B.addClass("x-btn");
						if (this.icon) {
							C.setStyle("background-image", "url(" + this.icon
									+ ")")
						}
						if (this.iconCls) {
							C.addClass(this.iconCls);
							if (!this.cls) {
								B.addClass(this.text ? "x-btn-text-icon"
										: "x-btn-icon")
							}
						}
						if (this.tabIndex !== undefined) {
							C.dom.tabIndex = this.tabIndex
						}
						if (this.tooltip) {
							if (typeof this.tooltip == "object") {
								Ext.QuickTips.register(Ext.apply( {
									target : C.id
								}, this.tooltip))
							} else {
								C.dom[this.tooltipType] = this.tooltip
							}
						}
						if (this.pressed) {
							this.el.addClass("x-btn-pressed")
						}
						if (this.handleMouseEvents) {
							B.on("mouseover", this.onMouseOver, this);
							B.on("mousedown", this.onMouseDown, this)
						}
						if (this.menu) {
							this.menu.on("show", this.onMenuShow, this);
							this.menu.on("hide", this.onMenuHide, this)
						}
						if (this.id) {
							this.el.dom.id = this.el.id = this.id
						}
						if (this.repeat) {
							var A = new Ext.util.ClickRepeater(
									B,
									typeof this.repeat == "object" ? this.repeat
											: {});
							A.on("click", this.onClick, this)
						}
						B.on(this.clickEvent, this.onClick, this)
					},
					afterRender : function() {
						Ext.Button.superclass.afterRender.call(this);
						if (Ext.isIE6) {
							this.autoWidth.defer(1, this)
						} else {
							this.autoWidth()
						}
					},
					setIconClass : function(A) {
						if (this.el) {
							this.el.child(this.buttonSelector).replaceClass(
									this.iconCls, A)
						}
						this.iconCls = A
					},
					beforeDestroy : function() {
						if (this.rendered) {
							var A = this.el.child(this.buttonSelector);
							if (A) {
								A.removeAllListeners()
							}
						}
						if (this.menu) {
							Ext.destroy(this.menu)
						}
					},
					onDestroy : function() {
						if (this.rendered) {
							Ext.ButtonToggleMgr.unregister(this)
						}
					},
					autoWidth : function() {
						if (this.el) {
							this.el.setWidth("auto");
							if (Ext.isIE7 && Ext.isStrict) {
								var A = this.el.child(this.buttonSelector);
								if (A && A.getWidth() > 20) {
									A.clip();
									A.setWidth(Ext.util.TextMetrics.measure(A,
											this.text).width
											+ A.getFrameWidth("lr"))
								}
							}
							if (this.minWidth) {
								if (this.el.getWidth() < this.minWidth) {
									this.el.setWidth(this.minWidth)
								}
							}
						}
					},
					setHandler : function(B, A) {
						this.handler = B;
						this.scope = A
					},
					setText : function(A) {
						this.text = A;
						if (this.el) {
							this.el.child(
									"td.x-btn-center " + this.buttonSelector)
									.update(A)
						}
						this.autoWidth()
					},
					getText : function() {
						return this.text
					},
					toggle : function(A) {
						A = A === undefined ? !this.pressed : A;
						if (A != this.pressed) {
							if (A) {
								this.el.addClass("x-btn-pressed");
								this.pressed = true;
								this.fireEvent("toggle", this, true)
							} else {
								this.el.removeClass("x-btn-pressed");
								this.pressed = false;
								this.fireEvent("toggle", this, false)
							}
							if (this.toggleHandler) {
								this.toggleHandler.call(this.scope || this,
										this, A)
							}
						}
					},
					focus : function() {
						this.el.child(this.buttonSelector).focus()
					},
					onDisable : function() {
						if (this.el) {
							if (!Ext.isIE6 || !this.text) {
								this.el.addClass(this.disabledClass)
							}
							this.el.dom.disabled = true
						}
						this.disabled = true
					},
					onEnable : function() {
						if (this.el) {
							if (!Ext.isIE6 || !this.text) {
								this.el.removeClass(this.disabledClass)
							}
							this.el.dom.disabled = false
						}
						this.disabled = false
					},
					showMenu : function() {
						if (this.menu) {
							this.menu.show(this.el, this.menuAlign)
						}
						return this
					},
					hideMenu : function() {
						if (this.menu) {
							this.menu.hide()
						}
						return this
					},
					hasVisibleMenu : function() {
						return this.menu && this.menu.isVisible()
					},
					onClick : function(A) {
						if (A) {
							A.preventDefault()
						}
						if (A.button != 0) {
							return
						}
						if (!this.disabled) {
							if (this.enableToggle
									&& (this.allowDepress !== false || !this.pressed)) {
								this.toggle()
							}
							if (this.menu && !this.menu.isVisible()
									&& !this.ignoreNextClick) {
								this.showMenu()
							}
							this.fireEvent("click", this, A);
							if (this.handler) {
								this.handler.call(this.scope || this, this, A)
							}
						}
					},
					isMenuTriggerOver : function(B, A) {
						return this.menu && !A
					},
					isMenuTriggerOut : function(B, A) {
						return this.menu && !A
					},
					onMouseOver : function(B) {
						if (!this.disabled) {
							var A = B.within(this.el, true);
							if (!A) {
								this.el.addClass("x-btn-over");
								if (!this.monitoringMouseOver) {
									Ext.getDoc().on("mouseover",
											this.monitorMouseOver, this);
									this.monitoringMouseOver = true
								}
								this.fireEvent("mouseover", this, B)
							}
							if (this.isMenuTriggerOver(B, A)) {
								this.fireEvent("menutriggerover", this,
										this.menu, B)
							}
						}
					},
					monitorMouseOver : function(A) {
						if (A.target != this.el.dom && !A.within(this.el)) {
							if (this.monitoringMouseOver) {
								Ext.getDoc().un("mouseover",
										this.monitorMouseOver, this);
								this.monitoringMouseOver = false
							}
							this.onMouseOut(A)
						}
					},
					onMouseOut : function(B) {
						var A = B.within(this.el) && B.target != this.el.dom;
						this.el.removeClass("x-btn-over");
						this.fireEvent("mouseout", this, B);
						if (this.isMenuTriggerOut(B, A)) {
							this
									.fireEvent("menutriggerout", this,
											this.menu, B)
						}
					},
					onFocus : function(A) {
						if (!this.disabled) {
							this.el.addClass("x-btn-focus")
						}
					},
					onBlur : function(A) {
						this.el.removeClass("x-btn-focus")
					},
					getClickEl : function(B, A) {
						return this.el
					},
					onMouseDown : function(A) {
						if (!this.disabled && A.button == 0) {
							this.getClickEl(A).addClass("x-btn-click");
							Ext.getDoc().on("mouseup", this.onMouseUp, this)
						}
					},
					onMouseUp : function(A) {
						if (A.button == 0) {
							this.getClickEl(A, true).removeClass("x-btn-click");
							Ext.getDoc().un("mouseup", this.onMouseUp, this)
						}
					},
					onMenuShow : function(A) {
						this.ignoreNextClick = 0;
						this.el.addClass("x-btn-menu-active");
						this.fireEvent("menushow", this, this.menu)
					},
					onMenuHide : function(A) {
						this.el.removeClass("x-btn-menu-active");
						this.ignoreNextClick = this.restoreClick.defer(250,
								this);
						this.fireEvent("menuhide", this, this.menu)
					},
					restoreClick : function() {
						this.ignoreNextClick = 0
					}
				});
Ext.reg("button", Ext.Button);
Ext.ButtonToggleMgr = function() {
	var A = {};
	function B(E, G) {
		if (G) {
			var F = A[E.toggleGroup];
			for ( var D = 0, C = F.length; D < C; D++) {
				if (F[D] != E) {
					F[D].toggle(false)
				}
			}
		}
	}
	return {
		register : function(C) {
			if (!C.toggleGroup) {
				return
			}
			var D = A[C.toggleGroup];
			if (!D) {
				D = A[C.toggleGroup] = []
			}
			D.push(C);
			C.on("toggle", B)
		},
		unregister : function(C) {
			if (!C.toggleGroup) {
				return
			}
			var D = A[C.toggleGroup];
			if (D) {
				D.remove(C);
				C.un("toggle", B)
			}
		}
	}
}();
Ext.SplitButton = Ext
		.extend(
				Ext.Button,
				{
					arrowSelector : "button:last",
					initComponent : function() {
						Ext.SplitButton.superclass.initComponent.call(this);
						this.addEvents("arrowclick")
					},
					onRender : function(D, A) {
						var B = new Ext.Template(
								"<table cellspacing=\"0\" class=\"x-btn-menu-wrap x-btn\"><tr><td>",
								"<table cellspacing=\"0\" class=\"x-btn-wrap x-btn-menu-text-wrap\"><tbody>",
								"<tr><td class=\"x-btn-left\"><i>&#160;</i></td><td class=\"x-btn-center\"><button class=\"x-btn-text\" type=\"{1}\">{0}</button></td></tr>",
								"</tbody></table></td><td>",
								"<table cellspacing=\"0\" class=\"x-btn-wrap x-btn-menu-arrow-wrap\"><tbody>",
								"<tr><td class=\"x-btn-center\"><button class=\"x-btn-menu-arrow-el\" type=\"button\">&#160;</button></td><td class=\"x-btn-right\"><i>&#160;</i></td></tr>",
								"</tbody></table></td></tr></table>");
						var C, F = [ this.text || "&#160;", this.type ];
						if (A) {
							C = B.insertBefore(A, F, true)
						} else {
							C = B.append(D, F, true)
						}
						var E = C.child(this.buttonSelector);
						this.initButtonEl(C, E);
						this.arrowBtnTable = C.child("table:last");
						if (this.arrowTooltip) {
							C.child(this.arrowSelector).dom[this.tooltipType] = this.arrowTooltip
						}
					},
					autoWidth : function() {
						if (this.el) {
							var C = this.el.child("table:first");
							var B = this.el.child("table:last");
							this.el.setWidth("auto");
							C.setWidth("auto");
							if (Ext.isIE7 && Ext.isStrict) {
								var A = this.el.child(this.buttonSelector);
								if (A && A.getWidth() > 20) {
									A.clip();
									A.setWidth(Ext.util.TextMetrics.measure(A,
											this.text).width
											+ A.getFrameWidth("lr"))
								}
							}
							if (this.minWidth) {
								if ((C.getWidth() + B.getWidth()) < this.minWidth) {
									C.setWidth(this.minWidth - B.getWidth())
								}
							}
							this.el.setWidth(C.getWidth() + B.getWidth())
						}
					},
					setArrowHandler : function(B, A) {
						this.arrowHandler = B;
						this.scope = A
					},
					onClick : function(A) {
						A.preventDefault();
						if (!this.disabled) {
							if (A.getTarget(".x-btn-menu-arrow-wrap")) {
								if (this.menu && !this.menu.isVisible()
										&& !this.ignoreNextClick) {
									this.showMenu()
								}
								this.fireEvent("arrowclick", this, A);
								if (this.arrowHandler) {
									this.arrowHandler.call(this.scope || this,
											this, A)
								}
							} else {
								if (this.enableToggle) {
									this.toggle()
								}
								this.fireEvent("click", this, A);
								if (this.handler) {
									this.handler.call(this.scope || this, this,
											A)
								}
							}
						}
					},
					getClickEl : function(B, A) {
						if (!A) {
							return (this.lastClickEl = B.getTarget("table", 10,
									true))
						}
						return this.lastClickEl
					},
					onDisable : function() {
						if (this.el) {
							if (!Ext.isIE6) {
								this.el.addClass("x-item-disabled")
							}
							this.el.child(this.buttonSelector).dom.disabled = true;
							this.el.child(this.arrowSelector).dom.disabled = true
						}
						this.disabled = true
					},
					onEnable : function() {
						if (this.el) {
							if (!Ext.isIE6) {
								this.el.removeClass("x-item-disabled")
							}
							this.el.child(this.buttonSelector).dom.disabled = false;
							this.el.child(this.arrowSelector).dom.disabled = false
						}
						this.disabled = false
					},
					isMenuTriggerOver : function(A) {
						return this.menu && A.within(this.arrowBtnTable)
								&& !A.within(this.arrowBtnTable, true)
					},
					isMenuTriggerOut : function(B, A) {
						return this.menu && !B.within(this.arrowBtnTable)
					},
					onDestroy : function() {
						Ext.destroy(this.arrowBtnTable);
						Ext.SplitButton.superclass.onDestroy.call(this)
					}
				});
Ext.MenuButton = Ext.SplitButton;
Ext.reg("splitbutton", Ext.SplitButton);
Ext.CycleButton = Ext.extend(Ext.SplitButton, {
	getItemText : function(A) {
		if (A && this.showText === true) {
			var B = "";
			if (this.prependText) {
				B += this.prependText
			}
			B += A.text;
			return B
		}
		return undefined
	},
	setActiveItem : function(C, A) {
		if (typeof C != "object") {
			C = this.menu.items.get(C)
		}
		if (C) {
			if (!this.rendered) {
				this.text = this.getItemText(C);
				this.iconCls = C.iconCls
			} else {
				var B = this.getItemText(C);
				if (B) {
					this.setText(B)
				}
				this.setIconClass(C.iconCls)
			}
			this.activeItem = C;
			if (!C.checked) {
				C.setChecked(true, true)
			}
			if (this.forceIcon) {
				this.setIconClass(this.forceIcon)
			}
			if (!A) {
				this.fireEvent("change", this, C)
			}
		}
	},
	getActiveItem : function() {
		return this.activeItem
	},
	initComponent : function() {
		this.addEvents("change");
		if (this.changeHandler) {
			this.on("change", this.changeHandler, this.scope || this);
			delete this.changeHandler
		}
		this.itemCount = this.items.length;
		this.menu = {
			cls : "x-cycle-menu",
			items : []
		};
		var D;
		for ( var B = 0, A = this.itemCount; B < A; B++) {
			var C = this.items[B];
			C.group = C.group || this.id;
			C.itemIndex = B;
			C.checkHandler = this.checkHandler;
			C.scope = this;
			C.checked = C.checked || false;
			this.menu.items.push(C);
			if (C.checked) {
				D = C
			}
		}
		this.setActiveItem(D, true);
		Ext.CycleButton.superclass.initComponent.call(this);
		this.on("click", this.toggleSelected, this)
	},
	checkHandler : function(A, B) {
		if (B) {
			this.setActiveItem(A)
		}
	},
	toggleSelected : function() {
		this.menu.render();
		var C, A;
		for ( var B = 1; B < this.itemCount; B++) {
			C = (this.activeItem.itemIndex + B) % this.itemCount;
			A = this.menu.items.itemAt(C);
			if (!A.disabled) {
				A.setChecked(true);
				break
			}
		}
	}
});
Ext.reg("cycle", Ext.CycleButton);
Ext.Toolbar = function(A) {
	if (Ext.isArray(A)) {
		A = {
			buttons : A
		}
	}
	Ext.Toolbar.superclass.constructor.call(this, A)
};
(function() {
	var A = Ext.Toolbar;
	Ext.extend(A, Ext.BoxComponent, {
		trackMenus : true,
		initComponent : function() {
			A.superclass.initComponent.call(this);
			if (this.items) {
				this.buttons = this.items
			}
			this.items = new Ext.util.MixedCollection(false, function(B) {
				return B.itemId || B.id || Ext.id()
			})
		},
		autoCreate : {
			cls : "x-toolbar x-small-editor",
			html : "<table cellspacing=\"0\"><tr></tr></table>"
		},
		onRender : function(C, B) {
			this.el = C.createChild(Ext.apply( {
				id : this.id
			}, this.autoCreate), B);
			this.tr = this.el.child("tr", true)
		},
		afterRender : function() {
			A.superclass.afterRender.call(this);
			if (this.buttons) {
				this.add.apply(this, this.buttons);
				delete this.buttons
			}
		},
		add : function() {
			var C = arguments, B = C.length;
			for ( var D = 0; D < B; D++) {
				var E = C[D];
				if (E.isFormField) {
					this.addField(E)
				} else {
					if (E.render) {
						this.addItem(E)
					} else {
						if (typeof E == "string") {
							if (E == "separator" || E == "-") {
								this.addSeparator()
							} else {
								if (E == " ") {
									this.addSpacer()
								} else {
									if (E == "->") {
										this.addFill()
									} else {
										this.addText(E)
									}
								}
							}
						} else {
							if (E.tagName) {
								this.addElement(E)
							} else {
								if (typeof E == "object") {
									if (E.xtype) {
										this.addField(Ext.ComponentMgr.create(
												E, "button"))
									} else {
										this.addButton(E)
									}
								}
							}
						}
					}
				}
			}
		},
		addSeparator : function() {
			return this.addItem(new A.Separator())
		},
		addSpacer : function() {
			return this.addItem(new A.Spacer())
		},
		addFill : function() {
			return this.addItem(new A.Fill())
		},
		addElement : function(B) {
			return this.addItem(new A.Item(B))
		},
		addItem : function(B) {
			var C = this.nextBlock();
			this.initMenuTracking(B);
			B.render(C);
			this.items.add(B);
			return B
		},
		addButton : function(D) {
			if (Ext.isArray(D)) {
				var F = [];
				for ( var E = 0, C = D.length; E < C; E++) {
					F.push(this.addButton(D[E]))
				}
				return F
			}
			var B = D;
			if (!(D instanceof A.Button)) {
				B = D.split ? new A.SplitButton(D) : new A.Button(D)
			}
			var G = this.nextBlock();
			this.initMenuTracking(B);
			B.render(G);
			this.items.add(B);
			return B
		},
		initMenuTracking : function(B) {
			if (this.trackMenus && B.menu) {
				B.on( {
					"menutriggerover" : this.onButtonTriggerOver,
					"menushow" : this.onButtonMenuShow,
					"menuhide" : this.onButtonMenuHide,
					scope : this
				})
			}
		},
		addText : function(B) {
			return this.addItem(new A.TextItem(B))
		},
		insertButton : function(C, F) {
			if (Ext.isArray(F)) {
				var E = [];
				for ( var D = 0, B = F.length; D < B; D++) {
					E.push(this.insertButton(C + D, F[D]))
				}
				return E
			}
			if (!(F instanceof A.Button)) {
				F = new A.Button(F)
			}
			var G = document.createElement("td");
			this.tr.insertBefore(G, this.tr.childNodes[C]);
			this.initMenuTracking(F);
			F.render(G);
			this.items.insert(C, F);
			return F
		},
		addDom : function(C, B) {
			var E = this.nextBlock();
			Ext.DomHelper.overwrite(E, C);
			var D = new A.Item(E.firstChild);
			D.render(E);
			this.items.add(D);
			return D
		},
		addField : function(C) {
			var D = this.nextBlock();
			C.render(D);
			var B = new A.Item(D.firstChild);
			B.render(D);
			this.items.add(C);
			return B
		},
		nextBlock : function() {
			var B = document.createElement("td");
			this.tr.appendChild(B);
			return B
		},
		onDestroy : function() {
			Ext.Toolbar.superclass.onDestroy.call(this);
			if (this.rendered) {
				if (this.items) {
					Ext.destroy.apply(Ext, this.items.items)
				}
				Ext.Element.uncache(this.tr)
			}
		},
		onDisable : function() {
			this.items.each(function(B) {
				if (B.disable) {
					B.disable()
				}
			})
		},
		onEnable : function() {
			this.items.each(function(B) {
				if (B.enable) {
					B.enable()
				}
			})
		},
		onButtonTriggerOver : function(B) {
			if (this.activeMenuBtn && this.activeMenuBtn != B) {
				this.activeMenuBtn.hideMenu();
				B.showMenu();
				this.activeMenuBtn = B
			}
		},
		onButtonMenuShow : function(B) {
			this.activeMenuBtn = B
		},
		onButtonMenuHide : function(B) {
			delete this.activeMenuBtn
		}
	});
	Ext.reg("toolbar", Ext.Toolbar);
	A.Item = function(B) {
		this.el = Ext.getDom(B);
		this.id = Ext.id(this.el);
		this.hidden = false
	};
	A.Item.prototype = {
		getEl : function() {
			return this.el
		},
		render : function(B) {
			this.td = B;
			B.appendChild(this.el)
		},
		destroy : function() {
			if (this.td && this.td.parentNode) {
				this.td.parentNode.removeChild(this.td)
			}
		},
		show : function() {
			this.hidden = false;
			this.td.style.display = ""
		},
		hide : function() {
			this.hidden = true;
			this.td.style.display = "none"
		},
		setVisible : function(B) {
			if (B) {
				this.show()
			} else {
				this.hide()
			}
		},
		focus : function() {
			Ext.fly(this.el).focus()
		},
		disable : function() {
			Ext.fly(this.td).addClass("x-item-disabled");
			this.disabled = true;
			this.el.disabled = true
		},
		enable : function() {
			Ext.fly(this.td).removeClass("x-item-disabled");
			this.disabled = false;
			this.el.disabled = false
		}
	};
	Ext.reg("tbitem", A.Item);
	A.Separator = function() {
		var B = document.createElement("span");
		B.className = "ytb-sep";
		A.Separator.superclass.constructor.call(this, B)
	};
	Ext.extend(A.Separator, A.Item, {
		enable : Ext.emptyFn,
		disable : Ext.emptyFn,
		focus : Ext.emptyFn
	});
	Ext.reg("tbseparator", A.Separator);
	A.Spacer = function() {
		var B = document.createElement("div");
		B.className = "ytb-spacer";
		A.Spacer.superclass.constructor.call(this, B)
	};
	Ext.extend(A.Spacer, A.Item, {
		enable : Ext.emptyFn,
		disable : Ext.emptyFn,
		focus : Ext.emptyFn
	});
	Ext.reg("tbspacer", A.Spacer);
	A.Fill = Ext.extend(A.Spacer, {
		render : function(B) {
			B.style.width = "100%";
			A.Fill.superclass.render.call(this, B)
		}
	});
	Ext.reg("tbfill", A.Fill);
	A.TextItem = function(B) {
		var C = document.createElement("span");
		C.className = "ytb-text";
		C.innerHTML = B.text ? B.text : B;
		A.TextItem.superclass.constructor.call(this, C)
	};
	Ext.extend(A.TextItem, A.Item, {
		enable : Ext.emptyFn,
		disable : Ext.emptyFn,
		focus : Ext.emptyFn
	});
	Ext.reg("tbtext", A.TextItem);
	A.Button = Ext.extend(Ext.Button, {
		hideParent : true,
		onDestroy : function() {
			A.Button.superclass.onDestroy.call(this);
			if (this.container) {
				this.container.remove()
			}
		}
	});
	Ext.reg("tbbutton", A.Button);
	A.SplitButton = Ext.extend(Ext.SplitButton, {
		hideParent : true,
		onDestroy : function() {
			A.SplitButton.superclass.onDestroy.call(this);
			if (this.container) {
				this.container.remove()
			}
		}
	});
	Ext.reg("tbsplit", A.SplitButton);
	A.MenuButton = A.SplitButton
})();
Ext.PagingToolbar = Ext.extend(Ext.Toolbar, {
	pageSize : 20,
	displayMsg : "Displaying {0} - {1} of {2}",
	emptyMsg : "No data to display",
	beforePageText : "Page",
	afterPageText : "of {0}",
	firstText : "First Page",
	prevText : "Previous Page",
	nextText : "Next Page",
	lastText : "Last Page",
	refreshText : "Refresh",
	paramNames : {
		start : "start",
		limit : "limit"
	},
	initComponent : function() {
		this.addEvents("change", "beforechange");
		Ext.PagingToolbar.superclass.initComponent.call(this);
		this.cursor = 0;
		this.bind(this.store)
	},
	onRender : function(B, A) {
		Ext.PagingToolbar.superclass.onRender.call(this, B, A);
		this.first = this.addButton( {
			tooltip : this.firstText,
			iconCls : "x-tbar-page-first",
			disabled : true,
			handler : this.onClick.createDelegate(this, [ "first" ])
		});
		this.prev = this.addButton( {
			tooltip : this.prevText,
			iconCls : "x-tbar-page-prev",
			disabled : true,
			handler : this.onClick.createDelegate(this, [ "prev" ])
		});
		this.addSeparator();
		this.add(this.beforePageText);
		this.field = Ext.get(this.addDom( {
			tag : "input",
			type : "text",
			size : "3",
			value : "1",
			cls : "x-tbar-page-number"
		}).el);
		this.field.on("keydown", this.onPagingKeydown, this);
		this.field.on("focus", function() {
			this.dom.select()
		});
		this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
		this.field.setHeight(18);
		this.addSeparator();
		this.next = this.addButton( {
			tooltip : this.nextText,
			iconCls : "x-tbar-page-next",
			disabled : true,
			handler : this.onClick.createDelegate(this, [ "next" ])
		});
		this.last = this.addButton( {
			tooltip : this.lastText,
			iconCls : "x-tbar-page-last",
			disabled : true,
			handler : this.onClick.createDelegate(this, [ "last" ])
		});
		this.addSeparator();
		this.loading = this.addButton( {
			tooltip : this.refreshText,
			iconCls : "x-tbar-loading",
			handler : this.onClick.createDelegate(this, [ "refresh" ])
		});
		if (this.displayInfo) {
			this.displayEl = Ext.fly(this.el.dom).createChild( {
				cls : "x-paging-info"
			})
		}
		if (this.dsLoaded) {
			this.onLoad.apply(this, this.dsLoaded)
		}
	},
	updateInfo : function() {
		if (this.displayEl) {
			var A = this.store.getCount();
			var B = A == 0 ? this.emptyMsg : String.format(this.displayMsg,
					this.cursor + 1, this.cursor + A, this.store
							.getTotalCount());
			this.displayEl.update(B)
		}
	},
	onLoad : function(A, C, F) {
		if (!this.rendered) {
			this.dsLoaded = [ A, C, F ];
			return
		}
		this.cursor = F.params ? F.params[this.paramNames.start] : 0;
		var E = this.getPageData(), B = E.activePage, D = E.pages;
		this.afterTextEl.el.innerHTML = String.format(this.afterPageText,
				E.pages);
		this.field.dom.value = B;
		this.first.setDisabled(B == 1);
		this.prev.setDisabled(B == 1);
		this.next.setDisabled(B == D);
		this.last.setDisabled(B == D);
		this.loading.enable();
		this.updateInfo();
		this.fireEvent("change", this, E)
	},
	getPageData : function() {
		var A = this.store.getTotalCount();
		return {
			total : A,
			activePage : Math.ceil((this.cursor + this.pageSize)
					/ this.pageSize),
			pages : A < this.pageSize ? 1 : Math.ceil(A / this.pageSize)
		}
	},
	onLoadError : function() {
		if (!this.rendered) {
			return
		}
		this.loading.enable()
	},
	readPage : function(C) {
		var A = this.field.dom.value, B;
		if (!A || isNaN(B = parseInt(A, 10))) {
			this.field.dom.value = C.activePage;
			return false
		}
		return B
	},
	onPagingKeydown : function(D) {
		var B = D.getKey(), E = this.getPageData(), C;
		if (B == D.RETURN) {
			D.stopEvent();
			C = this.readPage(E);
			if (C !== false) {
				C = Math.min(Math.max(1, C), E.pages) - 1;
				this.doLoad(C * this.pageSize)
			}
		} else {
			if (B == D.HOME || B == D.END) {
				D.stopEvent();
				C = B == D.HOME ? 1 : E.pages;
				this.field.dom.value = C
			} else {
				if (B == D.UP || B == D.PAGEUP || B == D.DOWN
						|| B == D.PAGEDOWN) {
					D.stopEvent();
					if (C = this.readPage(E)) {
						var A = D.shiftKey ? 10 : 1;
						if (B == D.DOWN || B == D.PAGEDOWN) {
							A *= -1
						}
						C += A;
						if (C >= 1 & C <= E.pages) {
							this.field.dom.value = C
						}
					}
				}
			}
		}
	},
	beforeLoad : function() {
		if (this.rendered && this.loading) {
			this.loading.disable()
		}
	},
	doLoad : function(C) {
		var B = {}, A = this.paramNames;
		B[A.start] = C;
		B[A.limit] = this.pageSize;
		if (this.fireEvent("beforechange", this, B) !== false) {
			this.store.load( {
				params : B
			})
		}
	},
	changePage : function(A) {
		this.doLoad(((A - 1) * this.pageSize).constrain(0, this.store
				.getTotalCount()))
	},
	onClick : function(E) {
		var B = this.store;
		switch (E) {
		case "first":
			this.doLoad(0);
			break;
		case "prev":
			this.doLoad(Math.max(0, this.cursor - this.pageSize));
			break;
		case "next":
			this.doLoad(this.cursor + this.pageSize);
			break;
		case "last":
			var D = B.getTotalCount();
			var A = D % this.pageSize;
			var C = A ? (D - A) : D - this.pageSize;
			this.doLoad(C);
			break;
		case "refresh":
			this.doLoad(this.cursor);
			break
		}
	},
	unbind : function(A) {
		A = Ext.StoreMgr.lookup(A);
		A.un("beforeload", this.beforeLoad, this);
		A.un("load", this.onLoad, this);
		A.un("loadexception", this.onLoadError, this);
		this.store = undefined
	},
	bind : function(A) {
		A = Ext.StoreMgr.lookup(A);
		A.on("beforeload", this.beforeLoad, this);
		A.on("load", this.onLoad, this);
		A.on("loadexception", this.onLoadError, this);
		this.store = A
	}
});
Ext.reg("paging", Ext.PagingToolbar);
Ext.Resizable = function(D, E) {
	this.el = Ext.get(D);
	if (E && E.wrap) {
		E.resizeChild = this.el;
		this.el = this.el.wrap(typeof E.wrap == "object" ? E.wrap : {
			cls : "xresizable-wrap"
		});
		this.el.id = this.el.dom.id = E.resizeChild.id + "-rzwrap";
		this.el.setStyle("overflow", "hidden");
		this.el.setPositioning(E.resizeChild.getPositioning());
		E.resizeChild.clearPositioning();
		if (!E.width || !E.height) {
			var F = E.resizeChild.getSize();
			this.el.setSize(F.width, F.height)
		}
		if (E.pinned && !E.adjustments) {
			E.adjustments = "auto"
		}
	}
	this.proxy = this.el.createProxy( {
		tag : "div",
		cls : "x-resizable-proxy",
		id : this.el.id + "-rzproxy"
	}, Ext.getBody());
	this.proxy.unselectable();
	this.proxy.enableDisplayMode("block");
	Ext.apply(this, E);
	if (this.pinned) {
		this.disableTrackOver = true;
		this.el.addClass("x-resizable-pinned")
	}
	var I = this.el.getStyle("position");
	if (I != "absolute" && I != "fixed") {
		this.el.setStyle("position", "relative")
	}
	if (!this.handles) {
		this.handles = "s,e,se";
		if (this.multiDirectional) {
			this.handles += ",n,w"
		}
	}
	if (this.handles == "all") {
		this.handles = "n s e w ne nw se sw"
	}
	var M = this.handles.split(/\s*?[,;]\s*?| /);
	var C = Ext.Resizable.positions;
	for ( var H = 0, J = M.length; H < J; H++) {
		if (M[H] && C[M[H]]) {
			var L = C[M[H]];
			this[L] = new Ext.Resizable.Handle(this, L, this.disableTrackOver,
					this.transparent)
		}
	}
	this.corner = this.southeast;
	if (this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1) {
		this.updateBox = true
	}
	this.activeHandle = null;
	if (this.resizeChild) {
		if (typeof this.resizeChild == "boolean") {
			this.resizeChild = Ext.get(this.el.dom.firstChild, true)
		} else {
			this.resizeChild = Ext.get(this.resizeChild, true)
		}
	}
	if (this.adjustments == "auto") {
		var B = this.resizeChild;
		var K = this.west, G = this.east, A = this.north, M = this.south;
		if (B && (K || A)) {
			B.position("relative");
			B.setLeft(K ? K.el.getWidth() : 0);
			B.setTop(A ? A.el.getHeight() : 0)
		}
		this.adjustments = [
				(G ? -G.el.getWidth() : 0) + (K ? -K.el.getWidth() : 0),
				(A ? -A.el.getHeight() : 0) + (M ? -M.el.getHeight() : 0) - 1 ]
	}
	if (this.draggable) {
		this.dd = this.dynamic ? this.el.initDD(null) : this.el.initDDProxy(
				null, {
					dragElId : this.proxy.id
				});
		this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id
				: this.el.id)
	}
	this.addEvents("beforeresize", "resize");
	if (this.width !== null && this.height !== null) {
		this.resizeTo(this.width, this.height)
	} else {
		this.updateChildSize()
	}
	if (Ext.isIE) {
		this.el.dom.style.zoom = 1
	}
	Ext.Resizable.superclass.constructor.call(this)
};
Ext.extend(Ext.Resizable, Ext.util.Observable, {
	resizeChild : false,
	adjustments : [ 0, 0 ],
	minWidth : 5,
	minHeight : 5,
	maxWidth : 10000,
	maxHeight : 10000,
	enabled : true,
	animate : false,
	duration : 0.35,
	dynamic : false,
	handles : false,
	multiDirectional : false,
	disableTrackOver : false,
	easing : "easeOutStrong",
	widthIncrement : 0,
	heightIncrement : 0,
	pinned : false,
	width : null,
	height : null,
	preserveRatio : false,
	transparent : false,
	minX : 0,
	minY : 0,
	draggable : false,
	resizeTo : function(B, A) {
		this.el.setSize(B, A);
		this.updateChildSize();
		this.fireEvent("resize", this, B, A, null)
	},
	startSizing : function(C, B) {
		this.fireEvent("beforeresize", this, C);
		if (this.enabled) {
			if (!this.overlay) {
				this.overlay = this.el.createProxy( {
					tag : "div",
					cls : "x-resizable-overlay",
					html : "&#160;"
				}, Ext.getBody());
				this.overlay.unselectable();
				this.overlay.enableDisplayMode("block");
				this.overlay.on("mousemove", this.onMouseMove, this);
				this.overlay.on("mouseup", this.onMouseUp, this)
			}
			this.overlay.setStyle("cursor", B.el.getStyle("cursor"));
			this.resizing = true;
			this.startBox = this.el.getBox();
			this.startPoint = C.getXY();
			this.offsets = [
					(this.startBox.x + this.startBox.width)
							- this.startPoint[0],
					(this.startBox.y + this.startBox.height)
							- this.startPoint[1] ];
			this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom
					.getViewHeight(true));
			this.overlay.show();
			if (this.constrainTo) {
				var A = Ext.get(this.constrainTo);
				this.resizeRegion = A.getRegion().adjust(A.getFrameWidth("t"),
						A.getFrameWidth("l"), -A.getFrameWidth("b"),
						-A.getFrameWidth("r"))
			}
			this.proxy.setStyle("visibility", "hidden");
			this.proxy.show();
			this.proxy.setBox(this.startBox);
			if (!this.dynamic) {
				this.proxy.setStyle("visibility", "visible")
			}
		}
	},
	onMouseDown : function(A, B) {
		if (this.enabled) {
			B.stopEvent();
			this.activeHandle = A;
			this.startSizing(B, A)
		}
	},
	onMouseUp : function(B) {
		var A = this.resizeElement();
		this.resizing = false;
		this.handleOut();
		this.overlay.hide();
		this.proxy.hide();
		this.fireEvent("resize", this, A.width, A.height, B)
	},
	updateChildSize : function() {
		if (this.resizeChild) {
			var C = this.el;
			var D = this.resizeChild;
			var B = this.adjustments;
			if (C.dom.offsetWidth) {
				var A = C.getSize(true);
				D.setSize(A.width + B[0], A.height + B[1])
			}
			if (Ext.isIE) {
				setTimeout(function() {
					if (C.dom.offsetWidth) {
						var E = C.getSize(true);
						D.setSize(E.width + B[0], E.height + B[1])
					}
				}, 10)
			}
		}
	},
	snap : function(C, E, B) {
		if (!E || !C) {
			return C
		}
		var D = C;
		var A = C % E;
		if (A > 0) {
			if (A > (E / 2)) {
				D = C + (E - A)
			} else {
				D = C - A
			}
		}
		return Math.max(B, D)
	},
	resizeElement : function() {
		var A = this.proxy.getBox();
		if (this.updateBox) {
			this.el.setBox(A, false, this.animate, this.duration, null,
					this.easing)
		} else {
			this.el.setSize(A.width, A.height, this.animate, this.duration,
					null, this.easing)
		}
		this.updateChildSize();
		if (!this.dynamic) {
			this.proxy.hide()
		}
		return A
	},
	constrain : function(B, C, A, D) {
		if (B - C < A) {
			C = B - A
		} else {
			if (B - C > D) {
				C = D - B
			}
		}
		return C
	},
	onMouseMove : function(S) {
		if (this.enabled) {
			try {
				if (this.resizeRegion
						&& !this.resizeRegion.contains(S.getPoint())) {
					return
				}
				var Q = this.curSize || this.startBox;
				var I = this.startBox.x, H = this.startBox.y;
				var C = I, B = H;
				var J = Q.width, R = Q.height;
				var D = J, L = R;
				var K = this.minWidth, T = this.minHeight;
				var P = this.maxWidth, W = this.maxHeight;
				var F = this.widthIncrement;
				var A = this.heightIncrement;
				var U = S.getXY();
				var O = -(this.startPoint[0] - Math.max(this.minX, U[0]));
				var M = -(this.startPoint[1] - Math.max(this.minY, U[1]));
				var G = this.activeHandle.position;
				switch (G) {
				case "east":
					J += O;
					J = Math.min(Math.max(K, J), P);
					break;
				case "south":
					R += M;
					R = Math.min(Math.max(T, R), W);
					break;
				case "southeast":
					J += O;
					R += M;
					J = Math.min(Math.max(K, J), P);
					R = Math.min(Math.max(T, R), W);
					break;
				case "north":
					M = this.constrain(R, M, T, W);
					H += M;
					R -= M;
					break;
				case "west":
					O = this.constrain(J, O, K, P);
					I += O;
					J -= O;
					break;
				case "northeast":
					J += O;
					J = Math.min(Math.max(K, J), P);
					M = this.constrain(R, M, T, W);
					H += M;
					R -= M;
					break;
				case "northwest":
					O = this.constrain(J, O, K, P);
					M = this.constrain(R, M, T, W);
					H += M;
					R -= M;
					I += O;
					J -= O;
					break;
				case "southwest":
					O = this.constrain(J, O, K, P);
					R += M;
					R = Math.min(Math.max(T, R), W);
					I += O;
					J -= O;
					break
				}
				var N = this.snap(J, F, K);
				var V = this.snap(R, A, T);
				if (N != J || V != R) {
					switch (G) {
					case "northeast":
						H -= V - R;
						break;
					case "north":
						H -= V - R;
						break;
					case "southwest":
						I -= N - J;
						break;
					case "west":
						I -= N - J;
						break;
					case "northwest":
						I -= N - J;
						H -= V - R;
						break
					}
					J = N;
					R = V
				}
				if (this.preserveRatio) {
					switch (G) {
					case "southeast":
					case "east":
						R = L * (J / D);
						R = Math.min(Math.max(T, R), W);
						J = D * (R / L);
						break;
					case "south":
						J = D * (R / L);
						J = Math.min(Math.max(K, J), P);
						R = L * (J / D);
						break;
					case "northeast":
						J = D * (R / L);
						J = Math.min(Math.max(K, J), P);
						R = L * (J / D);
						break;
					case "north":
						var X = J;
						J = D * (R / L);
						J = Math.min(Math.max(K, J), P);
						R = L * (J / D);
						I += (X - J) / 2;
						break;
					case "southwest":
						R = L * (J / D);
						R = Math.min(Math.max(T, R), W);
						var X = J;
						J = D * (R / L);
						I += X - J;
						break;
					case "west":
						var E = R;
						R = L * (J / D);
						R = Math.min(Math.max(T, R), W);
						H += (E - R) / 2;
						var X = J;
						J = D * (R / L);
						I += X - J;
						break;
					case "northwest":
						var X = J;
						var E = R;
						R = L * (J / D);
						R = Math.min(Math.max(T, R), W);
						J = D * (R / L);
						H += E - R;
						I += X - J;
						break
					}
				}
				this.proxy.setBounds(I, H, J, R);
				if (this.dynamic) {
					this.resizeElement()
				}
			} catch (S) {
			}
		}
	},
	handleOver : function() {
		if (this.enabled) {
			this.el.addClass("x-resizable-over")
		}
	},
	handleOut : function() {
		if (!this.resizing) {
			this.el.removeClass("x-resizable-over")
		}
	},
	getEl : function() {
		return this.el
	},
	getResizeChild : function() {
		return this.resizeChild
	},
	destroy : function(C) {
		this.proxy.remove();
		if (this.overlay) {
			this.overlay.removeAllListeners();
			this.overlay.remove()
		}
		var D = Ext.Resizable.positions;
		for ( var A in D) {
			if (typeof D[A] != "function" && this[D[A]]) {
				var B = this[D[A]];
				B.el.removeAllListeners();
				B.el.remove()
			}
		}
		if (C) {
			this.el.update("");
			this.el.remove()
		}
	},
	syncHandleHeight : function() {
		var A = this.el.getHeight(true);
		if (this.west) {
			this.west.el.setHeight(A)
		}
		if (this.east) {
			this.east.el.setHeight(A)
		}
	}
});
Ext.Resizable.positions = {
	n : "north",
	s : "south",
	e : "east",
	w : "west",
	se : "southeast",
	sw : "southwest",
	nw : "northwest",
	ne : "northeast"
};
Ext.Resizable.Handle = function(C, E, B, D) {
	if (!this.tpl) {
		var A = Ext.DomHelper.createTemplate( {
			tag : "div",
			cls : "x-resizable-handle x-resizable-handle-{0}"
		});
		A.compile();
		Ext.Resizable.Handle.prototype.tpl = A
	}
	this.position = E;
	this.rz = C;
	this.el = this.tpl.append(C.el.dom, [ this.position ], true);
	this.el.unselectable();
	if (D) {
		this.el.setOpacity(0)
	}
	this.el.on("mousedown", this.onMouseDown, this);
	if (!B) {
		this.el.on("mouseover", this.onMouseOver, this);
		this.el.on("mouseout", this.onMouseOut, this)
	}
};
Ext.Resizable.Handle.prototype = {
	afterResize : function(A) {
	},
	onMouseDown : function(A) {
		this.rz.onMouseDown(this, A)
	},
	onMouseOver : function(A) {
		this.rz.handleOver(this, A)
	},
	onMouseOut : function(A) {
		this.rz.handleOut(this, A)
	}
};
Ext.Editor = function(B, A) {
	this.field = B;
	Ext.Editor.superclass.constructor.call(this, A)
};
Ext
		.extend(Ext.Editor, Ext.Component,
				{
					value : "",
					alignment : "c-c?",
					shadow : "frame",
					constrain : false,
					swallowKeys : true,
					completeOnEnter : false,
					cancelOnEsc : false,
					updateEl : false,
					initComponent : function() {
						Ext.Editor.superclass.initComponent.call(this);
						this.addEvents("beforestartedit", "startedit",
								"beforecomplete", "complete", "canceledit",
								"specialkey")
					},
					onRender : function(B, A) {
						this.el = new Ext.Layer( {
							shadow : this.shadow,
							cls : "x-editor",
							parentEl : B,
							shim : this.shim,
							shadowOffset : 4,
							id : this.id,
							constrain : this.constrain
						});
						this.el.setStyle("overflow", Ext.isGecko ? "auto"
								: "hidden");
						if (this.field.msgTarget != "title") {
							this.field.msgTarget = "qtip"
						}
						this.field.inEditor = true;
						this.field.render(this.el);
						if (Ext.isGecko) {
							this.field.el.dom.setAttribute("autocomplete",
									"off")
						}
						this.field.on("specialkey", this.onSpecialKey, this);
						if (this.swallowKeys) {
							this.field.el
									.swallowEvent( [ "keydown", "keypress" ])
						}
						this.field.show();
						this.field.on("blur", this.onBlur, this);
						if (this.field.grow) {
							this.field.on("autosize", this.el.sync, this.el, {
								delay : 1
							})
						}
					},
					onSpecialKey : function(C, B) {
						var A = B.getKey();
						if (this.completeOnEnter && A == B.ENTER) {
							B.stopEvent();
							this.completeEdit()
						} else {
							if (this.cancelOnEsc && A == B.ESC) {
								this.cancelEdit()
							} else {
								this.fireEvent("specialkey", C, B)
							}
						}
						if (this.field.triggerBlur
								&& (A == B.ENTER || A == B.ESC || A == B.TAB)) {
							this.field.triggerBlur()
						}
					},
					startEdit : function(B, C) {
						if (this.editing) {
							this.completeEdit()
						}
						this.boundEl = Ext.get(B);
						var A = C !== undefined ? C
								: this.boundEl.dom.innerHTML;
						if (!this.rendered) {
							this.render(this.parentEl || document.body)
						}
						if (this.fireEvent("beforestartedit", this,
								this.boundEl, A) === false) {
							return
						}
						this.startValue = A;
						this.field.setValue(A);
						this.doAutoSize();
						this.el.alignTo(this.boundEl, this.alignment);
						this.editing = true;
						this.show()
					},
					doAutoSize : function() {
						if (this.autoSize) {
							var A = this.boundEl.getSize();
							switch (this.autoSize) {
							case "width":
								this.setSize(A.width, "");
								break;
							case "height":
								this.setSize("", A.height);
								break;
							default:
								this.setSize(A.width, A.height)
							}
						}
					},
					setSize : function(A, B) {
						delete this.field.lastSize;
						this.field.setSize(A, B);
						if (this.el) {
							if (Ext.isGecko2 || Ext.isOpera) {
								this.el.setSize(A, B)
							}
							this.el.sync()
						}
					},
					realign : function() {
						this.el.alignTo(this.boundEl, this.alignment)
					},
					completeEdit : function(A) {
						if (!this.editing) {
							return
						}
						var B = this.getValue();
						if (this.revertInvalid !== false
								&& !this.field.isValid()) {
							B = this.startValue;
							this.cancelEdit(true)
						}
						if (String(B) === String(this.startValue)
								&& this.ignoreNoChange) {
							this.editing = false;
							this.hide();
							return
						}
						if (this.fireEvent("beforecomplete", this, B,
								this.startValue) !== false) {
							this.editing = false;
							if (this.updateEl && this.boundEl) {
								this.boundEl.update(B)
							}
							if (A !== true) {
								this.hide()
							}
							this
									.fireEvent("complete", this, B,
											this.startValue)
						}
					},
					onShow : function() {
						this.el.show();
						if (this.hideEl !== false) {
							this.boundEl.hide()
						}
						this.field.show();
						if (Ext.isIE && !this.fixIEFocus) {
							this.fixIEFocus = true;
							this.deferredFocus.defer(50, this)
						} else {
							this.field.focus()
						}
						this.fireEvent("startedit", this.boundEl,
								this.startValue)
					},
					deferredFocus : function() {
						if (this.editing) {
							this.field.focus()
						}
					},
					cancelEdit : function(A) {
						if (this.editing) {
							var B = this.getValue();
							this.setValue(this.startValue);
							if (A !== true) {
								this.hide()
							}
							this.fireEvent("canceledit", this, B,
									this.startValue)
						}
					},
					onBlur : function() {
						if (this.allowBlur !== true && this.editing) {
							this.completeEdit()
						}
					},
					onHide : function() {
						if (this.editing) {
							this.completeEdit();
							return
						}
						this.field.blur();
						if (this.field.collapse) {
							this.field.collapse()
						}
						this.el.hide();
						if (this.hideEl !== false) {
							this.boundEl.show()
						}
					},
					setValue : function(A) {
						this.field.setValue(A)
					},
					getValue : function() {
						return this.field.getValue()
					},
					beforeDestroy : function() {
						this.field.destroy();
						this.field = null
					}
				});
Ext.reg("editor", Ext.Editor);
Ext.MessageBox = function() {
	var R, B, N, Q;
	var G, J, P, A, K, M, H, F;
	var O, S, L, C = "";
	var D = function(U) {
		if (R.isVisible()) {
			R.hide();
			Ext.callback(B.fn, B.scope || window, [ U, S.dom.value ], 1)
		}
	};
	var T = function() {
		if (B && B.cls) {
			R.el.removeClass(B.cls)
		}
		K.reset()
	};
	var E = function(W, U, V) {
		if (B && B.closable !== false) {
			R.hide()
		}
		if (V) {
			V.stopEvent()
		}
	};
	var I = function(U) {
		var W = 0;
		if (!U) {
			O["ok"].hide();
			O["cancel"].hide();
			O["yes"].hide();
			O["no"].hide();
			return W
		}
		R.footer.dom.style.display = "";
		for ( var V in O) {
			if (typeof O[V] != "function") {
				if (U[V]) {
					O[V].show();
					O[V].setText(typeof U[V] == "string" ? U[V]
							: Ext.MessageBox.buttonText[V]);
					W += O[V].el.getWidth() + 15
				} else {
					O[V].hide()
				}
			}
		}
		return W
	};
	return {
		getDialog : function(U) {
			if (!R) {
				R = new Ext.Window(
						{
							autoCreate : true,
							title : U,
							resizable : false,
							constrain : true,
							constrainHeader : true,
							minimizable : false,
							maximizable : false,
							stateful : false,
							modal : true,
							shim : true,
							buttonAlign : "center",
							width : 400,
							height : 100,
							minHeight : 80,
							plain : true,
							footer : true,
							closable : true,
							close : function() {
								if (B && B.buttons && B.buttons.no
										&& !B.buttons.cancel) {
									D("no")
								} else {
									D("cancel")
								}
							}
						});
				O = {};
				var V = this.buttonText;
				O["ok"] = R.addButton(V["ok"], D.createCallback("ok"));
				O["yes"] = R.addButton(V["yes"], D.createCallback("yes"));
				O["no"] = R.addButton(V["no"], D.createCallback("no"));
				O["cancel"] = R.addButton(V["cancel"], D
						.createCallback("cancel"));
				O["ok"].hideMode = O["yes"].hideMode = O["no"].hideMode = O["cancel"].hideMode = "offsets";
				R.render(document.body);
				R.getEl().addClass("x-window-dlg");
				N = R.mask;
				G = R.body
						.createChild( {
							html : "<div class=\"ext-mb-icon\"></div><div class=\"ext-mb-content\"><span class=\"ext-mb-text\"></span><br /><div class=\"ext-mb-fix-cursor\"><input type=\"text\" class=\"ext-mb-input\" /><textarea class=\"ext-mb-textarea\"></textarea></div></div>"
						});
				H = Ext.get(G.dom.firstChild);
				var W = G.dom.childNodes[1];
				J = Ext.get(W.firstChild);
				P = Ext.get(W.childNodes[2].firstChild);
				P.enableDisplayMode();
				P.addKeyListener( [ 10, 13 ], function() {
					if (R.isVisible() && B && B.buttons) {
						if (B.buttons.ok) {

